2018-01-27

转 iOS 面试指南
https://xiaozhuanlan.com/topic/4985160237

在过去的一个月里,我用了半个月时间准备,半个月时间面试,总共面了7家公司,拿到了6家offer,分别是阿里、滴滴、美团、京东金融、猫眼、链家。 趁年前大家还没开始跳槽,整理一些经验分享一下。

首先,自我介绍一下,我不是大神,背景不是很牛逼,工作经历也不长。北航15年毕业,非计算机专业,15年年初从零开始自学的编程,到今天刚刚三年。15年6月进入第一家公司,之前自学的是 Android,入职后的第二周,机缘巧合转岗做 iOS。算起来,iOS 从零基础到进入大公司,用了两年半的时间。跟张星宇等大神比起来,我的成长速度不值一提,介绍这些只是想跟大家说,现在大公司 iOS 空位很多,如果你有两年以上(没有水分的)开发经验,抓住机遇,好好准备,跳大公司问题不大。

复习书单

准备面试,最开始一定要系统地梳理一遍知识,有许多书都要重新看一遍。因为都是自己看过两遍三遍的书,这次我看的速度很快,却也时常看到一两处让自己恍然大悟的文字。当你编程经验提升之后,再看一遍之前的书,会学到许多新知识。这个阶段,戒急躁,要以梳理知识为目的,不要以面试为目的。

我列一下我的书单,你可以整理一下自己的复习书单,每个人看过的书不同,书单自然也不一样,重看自己的书单就好,时间允许才能去看新书。

  • 《Effective Objective-C 2.0》,大公司项目主要用 OC 开发,这本书必看,推荐指数5颗星。
  • 《Objective-C编程之道:iOS设计模式解析》,面试时问的设计模式问题不多,这本书足够了,推荐指数5颗星。
  • 《剑指Offer》,大公司都会问算法题,大都问两三道题,滴滴比较狠,4轮面试下来问了4道算法和1道逻辑题。这本书如果之前没看过的话,不建议全刷,看前半本就行,掌握思路就好。推荐指数5颗星。
  • 《程序员的自我修养》,这本书非常非常赞,奈何我准备面试时才买,只来得及看第一章,有种打通任督二脉的感觉。如果你和我一样不是计算机毕业,对操作系统还不是很了解,在面试前一定要把第一章看完。推荐指数5颗星。
  • 《iOS Core Animation Advanced Techniques》,很多人对 CoreAnimation 有误解,认为它只是一些动画接口,没有跨平台的适用型,不值得深入学习。其实 CoreAnimation 做的事情绝不仅仅是动画,几乎所有渲染相关的事情都和它有关,书中也讲了许多性能优化的方案。推荐指数5颗星。
  • 《Advanced Swift》, Swift 毕竟是趋势,但是大公司面试问的不多,这本书比较难读,之前没看过的同学,不推荐面试前刷它。推荐指数4颗星。
  • 《图解HTTP》,面试问网络的问题不多,无非是三次握手四次挥手,以及HTTPS密钥传输流程,初略刷一遍这本书就行,当然大神可以直接刷《HTTP权威指南》。推荐指数3颗星。另外听说《图解TCP/IP》很不错,我还没看过。

还有一些文章很不错,我也列一下

  • RunLoop, Y 神的这篇 RunLoop 无人能及,这篇文章出世之后,讲不了 RunLoop 都不好意思说自己是 iOS 工程师。
  • 多线程,这是我前同事 亚非 整理的多线程知识,很赞,可以对照着系统梳理一下。
  • 事件传递, 讲事件传递的博客很多,这篇讲得挺详细的。
  • 组件化,现在大公司都刚刚做完组件化,面试也是必问的题,业界基本就两个方案,把 bang、Casa 和 蘑菇街 的文章都仔细读一下,面试能讲清楚各自的实现方案以及主要问题就行。
  • Alamofire源码解读,配合这篇文章,看源码要轻松一些。
  • sunny的面试题,这套题虽然是15年的,现在面试问的还是这些,没多少变化,另外 github 上有人给这套题出了答案。
  • Peak的面试题,面试题大多类似,不用刷太多篇。

准备简历

简历最好两页,最多不超过三页。项目最多写三个,可以不用描述项目是做什么业务的,但一定要列出来技术点,不同项目的技术点不要重复。写简历的学问很多,我也不是非常清楚,我的简历仅供参考。

准备面试

因为我在原公司做过两年的面试官,比较清楚面试官拿到我的简历后会问什么问题,我准备面试的方式很简单,列出来所有可能会问到的问题,都预先写好自己满意的答案,自己预演几次,熟悉了所有问题和答案,然后放空自我,从容地去面试。

这个方法很有效,拿着简历自己面试自己,很容易发现问题。当然,如果感觉自己的水平有限,你也可以让朋友拿着简历向你提问题。当你列出了所有可能遇到的问题,都准备好了自己满意的答案,你就找到了自信。每一轮面试结束,你都可以根据这次面试,完善你的答案。

另外,准备一个简短的自我介绍,还有一些问面试官的问题。每轮面试结束,你都有机会问面试官一两个问题,如果问题问得好,面试也是加分的。

还有,要练一下手写算法题,这样面试时不会手生。

各家公司的面试流程和风格

即使是同一家公司,不同部门面试的风格或流程也可能不一样,下边这些仅供参考。

1.阿里

阿里主要结合简历问项目经历,穿插着问一些技术点,特别问了一下网络安全、本地存储安全和逆向,答不上也ok,答上了加分。另外也会问大前端框架,比如 RN 和 Weex,以及你对大前端的看法,你可以随便说,但是心里要清楚,阿里是走大前端路线的。

因为我在北京,而面的是杭州的部门,所以流程可能不太相同:

  • 一面电话面试,主要问项目经历,通过之后,会有一个视频面试,在线敲一道算法题
  • 二面、三面:都是视频面试,面试官是部门领导,主要聊之前工作经历,以后的规划,平时如何学习。也会问一两个没有确定答案的技术问题,可能是综合评估一下你各方面的能力
  • hr面

阿里有一点很感动我,我通过阿里二面时,已经拿到了滴滴到 Offer,而且 Offer 时间非常紧,还有一天时间就作废了,跟阿里表明情况后,阿里竟然临时把原本安排在下周一的三面以及后续的 hr 面合在一起,安排在当天下午,那时面试官还在美国出差,算时差应该是占用了睡眠时间。面完之后,hr 当天和我确定 Offer。阿里如此大的公司,能有如此的效率和动态性,以及对人才(给自己贴个金)的重视,非常佩服。

补充另外一篇:
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有什么作用?

底层:

16、main()之前的过程有哪些?

17、KVO基本原理?

18、Swift 下的如何使用 KVC?

19、:Swift有哪些模式匹配?

20、objc在向一个对象发送消息时,发生了什么?

21、静态库的原理是什么?你有没有自己写过静态编译库,遇到了哪些问题?

22、runloop是来做什么的?runloop和线程有什么关系?主线程默认开启了runloop么?子线程呢?

23、不手动指定autoreleasepool的前提下,一个autorealese对象在什么时刻释放?(比如在一个vc的viewDidLoad中创建

24、不手动指定autoreleasepool的前提下,一个autorealese对象在什么时刻释放?(比如在一个vc的viewDidLoad中创建)

25、OC完整的消息转发机制+代码实现【暴击】

你可能感兴趣的:(2018-01-27)