面试的时候你可能碰到貌似大神级面试官设的各种坑: 不止喜欢问你 iOS 开发的一些特性和方法, 更喜欢喜欢问你这些特性及方法你觉得它是怎么实现的? 你觉得苹果公司为什么要这样设计?
也许面试官自己也没实现过, 毕竟有些东西苹果为什么这样设计, 若不是苹果公司的工程师无法知道.
但作为面试者, 这个些问题正是拉开差距的最好办法: 不一定要你亲手用 C 去重现苹果的机制, 但可以谈谈你的见解和看法. 所以, 这一块最好有个准备.
1. 用法实践篇
一般, 会问你怎么实现某个模块, 用过哪些 API, 介绍下他们的用法.
你以前的项目架构是怎样的?
你是如何数据建模的?
你怎么实现字典转模型的?
你用过哪些动画效果?
你怎么处理图片加载的?
你有怎样用过一些第三方库的?
2. 思考见解篇
但是, 还有的喜欢问你 OC 语法各种高级特性如 Runtime 动态性, 以及你平时经常用的某个方法, 如果我让你自己写自己实现, 你觉得它是怎么实现的?
除了 App 应用程序的生命周期, ViewController 的生命周期你知道吗? 它的生命周期是怎么操作和控制的? 你觉得这些操作的方法是怎么实现的? 它和 App 的生命周期的区别你说说看?
你平时 copy 用的多吗? 什么时候会用? 关于 copy 的其它特性你有了解过吗, 比如说引用计数和内存管理方面, 你能不能说说看? 如果我让你自己写个 copy 的方法, 你觉得 copy 这个方法是怎么实现的?
你有了解过运行时吗? 运行时是什么? 你觉得运行时的这些特性是怎么实现的? 动态性的这些特性在编译和运行分别怎样体现的? 你平时编程的时候有怎样利用过运行时的一些特性?
多线程编程你有过了解吗? 关于多线程有哪些方法? 线程和进程有什么区别? 为什么要用多线程? 分别最多可以开多少进程和线程? 你觉得 GCD 里面的开启线程的操作是怎么实现的? 还有线程切换的操作你觉得是怎么实现的?
内存管理你了解多少? 我知道你提到了 ARC 和 strong,retain 等等一些东西, 但你觉得在 ARC 之前的 MRC 是怎么实现内存管理的? ARC 又是怎么实现内存管理的? 还有, 你觉得 OC 中操作内存的这些方法是怎么实现的?
好的, 你刚才提到了 FMDB, 能介绍你用过它的哪些类? 做了些什么事情? 在你的项目中是怎么用到它的? 你觉得它和 CoreData 的区别是什么? 还能说说其它有关数据模型的一些框架吗? 它们是怎么实现数据存储功能的? 实现数据存储的时候各自有什么共同点和区别?
来源: https://juejin.im/post/5b18dfc0e51d455c6e0ac4bb