对于每个准备找工作或者已经找到工作的人来说,准备面试题都是一次提升自己的机会。但比较庆幸的是,本人几次面试所遇到的问题都比较简单,没有太多能让自己有所提升的内容,而网上流传的各种面试题如今看来也没有什么太大的新意。因此我决定自己出一份面试题,真正有一点难度的面试题。
涵盖的知识体系
- UIKit 相关的基础知识
- C++ 以及与 Objective-C 的互操作性(没有接触过 C++ 的小伙伴可以暂时跳过这部分题目)
- 程序链接与装载相关知识
- Swift
- Objective-C runtime
- 计算机网络(基础)
- 操作系统(基础)
面试题
- 详细描述一下
UIView
与CALayer
的关系,drawRect
一定会影响性能吗?UI Dynamics 与 UIKit Animation 的最本质区别是什么? - 如何用
UIImageView
显示超大分辨率的图?如果要支持缩放呢? - 了解 fishhook 吗?说说为什么 fishhook 不能修改非动态连接库中的符号?
- C++ 调用虚方法与 Objective-C 发消息有什么区别?
- 了解 placement new 吗?Objective-C 中如何实现这个功能?
- 如何在 ARC 环境下用 C++ 标准库容器来管理 Objective-C 对象?
-
id
、self
、super
它们从语法上有什么区别? - isa 是什么?是指向
Class
对象本身的指针吗? - block 修改捕获变量除了用
__block
还可以怎么做?有哪些局限性? -
NSDictionary
与NSHashTable
有什么区别,它们的使用场景是怎样的? - 用过 Swift 吗?如何评价 String index 的设计?
- 假设 iPhone 上有一个与服务器的 TCP 连接,此时 iPhone 忽然断网,服务器能在短时间内知会 iPhone 的离线吗?
- 为什么 Wireshark 不能直接抓取 SSL 的原始数据?
-
backtrace
是在用户态实现的吗?能否讲讲实现它的大致思路? -
malloc
的指针 double free 产生的异常与访问 freed 指针有可能产生的异常有什么区别?为什么访问 freed 指针不一定产生异常? - RunLoop 是一个不停歇在运行的死循环吗?为什么?
- 看过 runtime 的源码吗?源码中常有的
fastpath
、slowpath
是什么? - runtime 中
SideTables
(不是SideTable
)存在的意义是什么? - 为什么 ARC 环境下不允许我们调用
[super dealloc]
? - Objective-C 是如何保证系统升级后的 ABI 稳定性的?
- 下面这段伪代码存在什么问题?应该如何改进?
int main(int argc, const char * argv[]) {
// ...
NSUInteger threadCount = [NSProcessInfo processInfo].activeProcessorCount;
NSCondition *cond = [NSCondition new];
for (int i = 0; i < threadCount; i++) {
[NSThread detachNewThreadWithBlock:^{
while (YES) {
[cond lock];
while (/* Queue is empty */) {
[cond wait];
}
// Dequeue an item
[cond unlock];
// Handle the item
}
}];
}
while (YES) {
// Enqueue something when it comes
[cond broadcast];
}
// ...
}
虽然只有 20 个题,但相关问题还是很多很多的,日后我可能也会写一篇文章来解答一下所有的问题,当然我更希望大家能够自己完成这些问题,不要尝试直接搜答案,很多题也许根本搜不到答案,所以自己探究的过程一定是必不可少的,加油吧!
结交人脉
作为一个开发者,有一个学习的氛围跟一个交流圈子特别重要,这是一个我的iOS交流群:789143298 ,不管你是小白还是大牛欢迎入驻 ,分享BAT,阿里面试题、面试经验,讨论技术, 大家一起交流学习成长!
网友评论