前言
2020 年春节后回到北京,准备开始找工作,因为疫情影响,整个 2 月都是在家上班,这也给远程面试提供了便利,免去了请假的尴尬和奔波的麻烦。
年前就准备开始面试的,但总以为需要刷很多题,一直没时间刷就一直没行动。幸好临近过年有一个同事要离职了,他跟我传授经验,让我先面小公司积累经验,之后再去面大公司。我受他的鼓舞,终于决定了在年后踏上面试之路。
事实证明“练手”真的很有必要。我一共面过阿里、蚂蚁、字节、Shopee、OPPO、华为、美团、快手、猿辅导、腾讯,城市涉及成都、北京、深圳。一开始我连自我介绍都不会,所以前面面的阿里、蚂蚁、字节、Shopee 都跪了;中间面的 OPPO、华为面了一半失去音讯;后面面的美团、快手、猿辅导、腾讯都拿到了 offer。吐槽一下华为,机试的时候试题都能出错,后面重试的时候全部 AC 也能判断我机试挂掉……还有 OPPO,两面面完发了一个邀请函,不知道干什么用的,问了内推人也没有了后续。这些公司每家偏重点不同,难度也不同,有的中规中矩,有的挖尽细节。事后总结了一下,大体都能分为下面列举的 7 个问题,列出来跟大家分享一下(文末有整理好的面试资料和复习资料)。
1 自我介绍
远程面试,视频接通后,面试官可能会简单介绍下自己,然后就直接让你做一个自我介绍,这个没有例外。我一开始心里想这不都是简历上写着的么?后来感觉可能是考察你的表达能力吧。这个时候说说姓名、学校、专业、毕业时间、工作经历、主要项目、技术栈,应该就差不多了。说完之后,有的面试官会认真听,并且就你说的找他感兴趣的问你,当然也有的面试官就走个过场,你说完他就不管了,直接问下一步。
1.1 工作经历
通常说到工作经历的时候,会问你:
毕业第一份工作为什么选择了那里?
为什么看机会?上次换工作为什么?
有了解过我们部门做什么的么?感兴趣么?
工作这些年,主要的收获是什么?
最好别老抱怨之前的公司,可以说说自己的规划之类的。
1.2 项目经历
说到项目经历的时候,有些面试官会从你说的当中跳他感兴趣的问你,所以自我介绍的时候可以有倾向性的说说你比较拿手的项目。
1.3 未来规划
我在被问到这个问题的时候通常是一头懵逼,因为我之前没有好好想过,大家可以准备一下。
未来的规划(城市)
技术上的追求
长期方向(行业)
1.4 日常行为
平时有看什么技术相关的书,博客?
最近有在学习什么新技术么?讲讲
怎么对待 995 的情况?
怎么处理同事不配合的情况?
2 最有挑战的项目
自我介绍之后,如果面试官没有从你说的项目里主动问你,一般就会让你自己选一个项目说。
通常问法是:
在上次工作中,哪些项目最有成就感,最有挑战?
最有挑战的一个工作,遇到的困难,采取了什么方式,取得了什么结果
遇到的最难的项目?难在哪里?怎么解决的?得到了什么收获?
基础的一点的技术接触过什么?感觉枯燥么?碰到什么困难?举一个最难的例子
举例两个做的比较好的项目
3 基础知识
1、如何令自己所写的对象具有拷贝功能?
2、说说你理解weak属性?
3、题目:Swift mutating关键字的使用?
4、UIView和CALayer是什么关系?
5、下面的代码输出什么?
6、@synthesize 和 @dynamic 分别有什么作用?
7、动态绑定
8、Category(类别)、 Extension(扩展)和继承的区别
9、为什么代理要用weak?代理的delegate和dataSource有什么区别?block和代理的区别?
10、id和NSObject*的区别
11、如何令自己所写的对象具有拷贝功能?
12、使用系统的某些block api(如UIView的block版本写动画时),是否也考虑引用循环问题?
13、用@property声明的NSString(或NSArray,NSDictionary)经常使用copy关键字,为什么?如果改用strong关键字,可能造成什么问题?
14、UIView和 CALayer是什么关系?
15、static有什么作用?
4.底层:
16、main()之前的过程有哪些?
17、KVO基本原理?
18、Swift 下的如何使用 KVC?
19、:Swift有哪些模式匹配?
20、objc在向一个对象发送消息时,发生了什么?
21、静态库的原理是什么?你有没有自己写过静态编译库,遇到了哪些问题?
22、串行并行,异步同步的区别?
23、线程是什么?进程是什么?二者有什么区别和联系?
24、RunLoop是什么?
5.线程:
25、 不要阻塞主线程
26、谈谈你对多线程开发的理解?ios中有几种实现多线程的方法?
27、进程和线程的区别?同步异步的区别?并行和并发的区别?
28、ViewController生命周期
29、iOS 中的多线程
30、dispatch_barrier_async的作用是什么?
31、iOS iAP内购审核可能失败的问题
32、IAP内购中虚拟货币导致审核无法通过的问题?
6.iOS 实战题
1.AppDelegate如何瘦身?
2.反射是什么?可以举出几个应用场景么?(知道多少说多少)
3.有哪些场景是NSOperation比GCD更容易实现的?(或是NSOperation优于GCD的几点,知道多少说多少)
4.App 启动优化策略?最好结合启动流程来说(main()函数的执行前后都分别说一下,知道多少说多少)
5.App 无痕埋点的思路了解么?你认为理想的无痕埋点系统应该具备哪些特点?(知道多少说多少)
6.你知道有哪些情况会导致app崩溃,分别可以用什么方法拦截并化解?(知道多少说多少)
7.你知道有哪些情况会导致app卡顿,分别可以用什么方法来避免?(知道多少说多少)
7.架构 & 设计题
1.MVC和MVVM的区别?MVVM和MVP的区别?
2.面向对象的几个设计原则了解么?最好可以结合场景来说。
3.可以说几个重构的技巧么?你觉得重构适合什么时候来做?
4.你觉得框架和设计模式的区别是什么?
5.看过哪些第三方框架的源码,它们是怎么设计的?设计好的地方在哪里,不好的地方在哪里,如何改进?(这道题的后三个问题的难度已经很高了,如果不是太N的公司不建议深究)
8.数据结构&算法题
1.链表和数组的区别是什么?插入和查询的时间复杂度分别是多少?
2.哈希表是如何实现的?如何解决地址冲突?
3.排序题:冒泡排序,选择排序,插入排序,快速排序(二路,三路)能写出那些?
4.链表题:如何检测链表中是否有环?如何删除链表中等于某个值的所有节点?
5.数组题:如何在有序数组中找出和等于给定值的两个元素?如何合并两个有序的数组之后保持有序?
6.二叉树题:如何反转二叉树?如何验证两个二叉树是完全相等的?
9. 你有什么想问的?
部门定位?岗位职责?
目前在做什么业务?
加班情况?
薪酬福利介绍?
10. Offer 选择
目前手头的 offer 情况?
还有哪些公司的面试流程?
这些公司你自己有什么倾向性呢?最看重什么因素?
你的预期薪酬是多少?目前的薪资情况?
想加入一个怎么样的团队?
最近一年的绩效情况?
更多:推荐阅读:直击2020——iOS 面试题大全(补充完整版)