一:面试题注意事项 (面试官角度)
我们很多iOS面试官在招聘的时候,很多都是直接在网上找一份iOS面试题就开始面试了!(😄偷懒😄)而我觉得这是一个很错误的做法。网上很多面试题的确不错,但是这样招聘过来的iOS开发人员不一定是非常优秀的,可能是背的面试题,也可能是贵公司的面试题泄漏,导致iOS求职者表现非常好!
- 1:面试题可以网上获取,但是我希望面试官认真对待,希望能够结合你们的公司实际开发,落地到面试题 (这样也就避免人家吐槽,面试造🚀,开发拧🔩)
- 2:面试题可以适当变动。根据求职者的简历情况,来变动面试题!有的简历不错的,可以适当调难一些。刚好在你的招聘及格线的求职者可以适当降低要求(毕竟要去不一样,后面薪资以及培养方向也会不一样)
- 3:根据贵公司的状况也考虑:要不要笔试!笔试无好坏,只是一轮刷选,能够帮你适当刷掉一部分不符合你要求的iOS开发人员!但是贵公司招聘情况很不理想,我觉得可以反思:是不是笔试太难,笔试题目过多...
二:面试流程 (面试官角度)
个人比较反感的是:招聘岗位很少,却叫去很多面试者面试!这个是一种比较严重不尊重求职的一种行为!其实也是对你的一种损失 联系过多面试者来面试,这样的做法你既浪费了求职者的时间,同时也会造成面试成本飙升
希望面试官拿到简历,请你快速刷选出你合适中意的简历,然后分批安排面试! 对你中意的iOS 高级求职者!我希望能够多几次面试流程。一个真正的iOS高级开发对于公司来说非常重要,希望通过几个流程由不同的岗位 leader 写出评分,综合考虑, 切记盲目 同时这样正规的流程也能让求职者感受到贵公司的重视,以及入职以后的对于工作的重视!
三:iOS 高级面试内容
可能众多面试官还是比较关心面试内容,我这里从
- iOS基础
- Runtime相关
- 网络&多线程
- 数据结构&算法
- 架构设计
- 性能优化
等这些方面,给各位面试官准备了一些题,希望能够帮助到你
iOS基础
- 1:讲讲你对noatomic & nonatomic的理解
- 2:被 weak 修饰的对象在被释放的时候会发生什么?是如何实现的?知道sideTable 么?里面的结构可以画出来么?
- 3:block 用什么修饰?strong 可以?
- 4:block 为什么能够捕获外界变量? __block做了什么事?
- 5:谈谈你对事件的传递链和响应链的理解 (这个面试题,如果求职者能够回答一些实际开发相关的处理,不只是简单的概念,予以加分)
- 6:谈谈 KVC 以及 KVO 的理解?
- 7:RunLoop 的作用是什么?它的内部工作机制了解么?
- 8:苹果是如何实现 autoreleasepool的?
- 9:谈谈你对 FRP (函数响应式) 的理解,延伸一下 RxSwift 或者 RAC!
- 10:平时开发有没有玩过 Instrument ?
分析:这里的内容非常有意思,对于一个iOS高级开发人员,我觉得还有很有必要掌握的!尤其开发3-5年,如果没有掌握这些内容我觉得是不合格的
在一些合适的地方可以进行延伸!
- 第二题,第一问是关于 weak 这个面试是非常经典的,只要是个iOS开发都能回答一点。但是后面部分就需要他的学习能力了!
- 第三题和第四题,侧击一下 MRC 一个资深4-5年开发经验或多或少都应该要知道一些 MRC 相关的知识!顺便可以摸摸求职者的探索能力
- 第五题和第六题:我觉得如果求职者回答了一些实际开发相关以及文档能力的应该予以加分
- 第七题、第八题、第九题以及第十题都是可以拓展更多的内容!
Runtime
- 1:什么是 isa,isa 的作用是什么?
- 2:一个实例对象的isa 指向什么?类对象指向什么?元类isa 指向什么?
- 3:objc 中类方法和实例方法有什么本质区别和联系?
- 4:load 和 initialize 的去呗?
- 5:_objc_msgForward 函数是做什么的?直接调用会发生什么问题?
- 6:简述下 Objective-C 中调用方法的过程
- 7:能否想向编译后得到的类中增加实例变量?能否向运行时创建的类中添加实例变量?为什么?
- 8:谈谈你对切面编程的理解
分析:Runtime 这个模块iOS面试无论初中高都会面试。我觉得这个模块不光只是仅仅问问关于知识点内容,我更新想要听到求职者在这里面的爬坑探索辛历路程!
网络&多线程
- 1:HTTP的缺陷是什么?
- 2:谈谈三次握手,四次挥手!为什么是三次握手,四次挥手?
- 3:socket 连接和 Http 连接的区别
- 4:HTTPS,安全层除了SSL还有,最新的? 参数握手时首先客户端要发什么额外参数
- 5:HTTPS是什么?握手过程,SSL原理,非对称加密了解多少
- 6:什么时候POP网路,有了 Alamofire 封装网络 URLSession为什么还要用Moya ?
- 7:如何实现 dispatch_once
- 8:能否写一个读写锁?谈谈具体的分析
- 9:什么时候会出现死锁?如何避免?
- 10:有哪几种锁?各自的原理?它们之间的区别是什么?最好可以结合使用场景来说
分析:这个模块可能是一般开发人员的盲区。因为一般开发真心没必要去操心这么多!面试官你们可以挑去拷问就OK,面试过程中不能对答如流也是正常!当然如果能够回答上来应该加分!
数据结构
- 1.数据结构的存储一般常用的有几种?各有什么特点?
- 2.集合结构 线性结构 树形结构 图形结构
- 3.单向链表 双向链表 循环链表
- 4.数组和链表区别
- 5.堆、栈和队列
- 6.输入一棵二叉树的根结点,求该树的深度?
- 7.输入一课二叉树的根结点,判断该树是不是平衡二叉树?
算法
- 1.时间复杂度
- 2.空间复杂度
- 3.常用的排序算法
- 4.字符串反转
- 5.链表反转(头差法)
- 6.有序数组合并
- 7.查找第一个只出现一次的字符(Hash查找)
- 8.查找两个子视图的共同父视图
- 9.无序数组中的中位数(快排思想)
- 10.给定一个整数数组和一个目标值,找出数组中和为目标值的两个数。
分析:这个模块是绝大部分开发人员的软肋!这个模块是最能测试求职者思维能力的!但是我不建议面试官直接让求职者手写 在那样的面试紧张环境,手写数据结构或者一些算法代码,是非常有挑战的!思维到我觉得差不多!
架构设计
- 1:设计模式是为了解决什么问题的?
- 2:看过哪些第三方框架的源码,它们是怎么设计的?
- 3:可以说几个重构的技巧么?你觉得重构适合什么时候来做?
- 4:开发中常用架构设计模式你怎么选型?
- 5:你是如何组件化解耦的?
分析:架构设计这一层对于一个iOS中高级开发人员来说。这一块那是他必须要去思考和感受总结的!如果这位求职者开发4-5年了,一直都在做应用层界面开发,那么想必他未来的职业晋升是已经落后了的!面试官不妨在这一个模块单独设计成一面,就和求职者一起交流讨论。毕竟这些思维的设计,也许能够给面试官带来一些不一样的东西!😊
性能优化
- 1:tableView 有什么好的性能优化方案?
- 2: 界面卡顿和检测你都是怎么处理?
- 3:谈谈你对离屏渲染的理解?
- 4:如何降低APP包的大小
- 5:日常如何检查内存泄露?
- 6:APP启动时间应从哪些方面优化?
分析:现在APP性能优化以及成为iOS中高级开发人员必须要去关系的东西!这一块我个人建议结合实际开发去和求职者交流。而不是仅仅停留在知识点问答,因为没有实际开发能力的性能优化都只是纸上谈兵!
总结
一个优秀的iOS中高级开发 = iOS技术 + 学习能力 + 态度 其中态度和学习能力也是我在面试别人过程中非常看重的!哪怕你技术目前很差,但是你有谦虚诚恳的态度,优秀的学习能力。也会愿意带你!
非常感谢你阅读到了这里!前面都是本人的建议,具体你的实施还是需要你根据情况调整!
对于以上面试技术点,想要更好的探讨,可以进入iOS技术圈,一起探讨学习