某PA科技iOS开发工程师面试回忆

4,210 阅读3分钟

面试的时候你可能碰到面试官设的各种坑:不止喜欢问你iOS开发的一些特性和方法,更喜欢喜欢问你这些特性及方法你觉得它是怎么实现的?你觉得苹果公司为什么要这样设计?

也许面试官自己也没自己实现过,毕竟有些东西苹果为什么这样设计,若不是苹果公司的工程师无法知道。

但作为面试者,这个些问题正是拉开差距的最好办法:不一定要你亲手用C去重现苹果的机制,但可以谈谈你的见解和看法。所以,这一块最好有个准备。

1. 用法实践篇

一般,会问你怎么实现某个模块,用过哪些API,介绍下他们的用法。

  • 你以前的项目架构是怎样的?

  • 你是如何数据建模的?

  • 你怎么实现字典转模型的?

  • 你用过哪些动画效果?

  • 你怎么处理图片加载的?

  • 你有怎样用过一些第三方库的?

2. 思考见解篇

但是,还有的喜欢问你OC语法各种高级特性如Runtime动态性,以及你平时经常用的某个方法,如果我让你自己写自己实现,你觉得它是怎么实现的?

  • 除了App应用程序的生命周期,ViewController的生命周期你知道吗?它的生命周期是怎么操作和控制的?你觉得这些操作的方法是怎么实现的?它和App的生命周期的区别你说说看?

  • 你平时copy用的多吗?什么时候会用?关于copy的其它特性你有了解过吗,比如说引用计数和内存管理方面,你能不能说说看?如果我让你自己写个copy的方法,你觉得copy这个方法是怎么实现的?

  • 你有了解过运行时吗?运行时是什么?你觉得运行时的这些特性是怎么实现的?动态性的这些特性在编译和运行分别怎样体现的?你平时编程的时候有怎样利用过运行时的一些特性?

  • 多线程编程你有过了解吗?关于多线程有哪些方法?线程和进程有什么区别?为什么要用多线程?分别最多可以开多少进程和线程?你觉得GCD里面的开启线程的操作是怎么实现的?还有线程切换的操作你觉得是怎么实现的?

  • 内存管理你了解多少?我知道你提到了ARC和strong,retain等等一些东西,但你觉得在ARC之前的MRC是怎么实现内存管理的?ARC又是怎么实现内存管理的?还有,你觉得OC中操作内存的这些方法是怎么实现的?

  • 好的,你刚才提到了FMDB,能介绍你用过它的哪些类?做了些什么事情?在你的项目中是怎么用到它的?你觉得它和CoreData的区别是什么?还能说说其它有关数据模型的一些框架吗?它们是怎么实现数据存储功能的?实现数据存储的时候各自有什么共同点和区别?

3. 后面的话

这些问题是PA一个面试官问过的,听说他是从百度公司跳槽出来的。可能吧,百度系出来的面试官真的喜欢问底层。

关于这些问题的答案,特别是关于自由发挥和独立见解的部分,欢迎读者在自己复习相关知识后,在评论区贴出你的见解。