iOS 社招面试经验:我是如何拿到阿里、滴滴、美团等六家 off
在过去的一个月里,我用了半个月时间准备,半个月时间面试,总共面了7家公司,拿到了6家offer,分别是阿里、滴滴、美团、京东金融、猫眼、链家。 ,整理一些经验分享一下。
首先,自我介绍一下,我不是大神,背景不是很牛逼,工作经历也不长。之前自学的是 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。阿里如此大的公司,能有如此的效率和动态性,以及对人才(给自己贴个金)的重视,非常佩服。
2.滴滴
先做一套笔试题,大概七八页,时间45分钟,其中不少简答题,还有一道算法题一道逻辑题。你空着的题目,因为时间原因,面试官可能不会问你,所以不要想先空着,一会儿直接跟面试官讲,面试官可能不给你讲的机会。答题时不用写得太详细,每道题把答案分点列出个大概,把关键词都写上就行。
这套笔试题是滴滴精心准备的,iOS 知识覆盖很全面,而且很深入,滴滴主要通过这套题来考察你,你简历上写的项目只是大概问问。滴滴是会用算法淘汰人的,面滴滴之前要好好准备一下算法,别指望面试官提示你,即使面试官给你提示,也是在心里减分的。另外滴滴有一套热修复框架,面试中多次问到热修复相关的问题,答不上也ok(面试者中应该没几个能答上来),但是如果你能答上来,而且答得非常有水平,会加很多分。
- 一面,先笔试,再面试,面试主要是过一遍笔试题
- 二面,根据笔试题深入问下去,看看有没有一两个点你非常了解
- 三面,大概问问 iOS 知识、项目经验、职业规划,然后是一道算法题,要注意边界处理
- 四面,两道算法题,主要考察你的思维和边界处理
- hr 电话沟通 offer,hr 可能让你介绍一下自己即将入职的部门,以及你加入之后的工作职责,如果你答不上来,hr 可能要很失望了,所以在前面的四面要把这些问清楚
3.美团
美团的面试官会沿着你简历上写的项目问,让你自己介绍项目中的难点和解决方案,最好能自己展开去讲,讲得越深入越成体系越好,面试官基本不会打断你,他想听你说的越多越好。
另外美团基本不会用算法刷人,你如果没有思路,可以问问面试官,面试官会很 nice 的给你提示,即使这样,你最好也提前准备一下算法。个人觉得,美团最重要的是一面,一面通过了,问题就不大了。
- 一面,主要问项目经验,最后手写一道简单的算法题
- 二面、三面:各一道算法题。面试官会问你薪资期望,如果你算法题没写出来,这时就很尴尬不敢多要,不知道是不是美团的套路...
- hr 面
合理的面试安排
面试时要注意投简历的顺序,把所有公司按你的渴望值排序,然后倒序投简历,一天投几个,或者是把公司分成几个阶梯,先投一批,等收到 Offer 了,再投下一阶梯的公司。等你投最后一批公司时,已经积累了很多面试经验,弥补了自己的许多知识漏洞,手里拿着 Offer,要工资也比较容易。
一些常见问题
出于对各个公司的尊重,也是对所有面试者的尊重,我不会直接说哪家公司问了哪些题,只是列了一些知识点,供大家自我检查。
- 你在项目中用过 runtime 吗?举个例子。
- 你在项目中用过 GCD 吗?举个例子。
- Category 的实现原理,以及 Category 为什么只能加方法不能加属性。
- block 的原理,block 的属性修饰词为什么用 copy,使用 block 时有哪些要注意的?
- iOS 的热更新方案有哪些?介绍一下实现原理。
- class A 继承 class B,class B 继承 NSObject。画出完整的类图。
- 细致地讲一下事件传递流程
- main()之前的过程有哪些?
- Category 中有 load 方法吗?load 方法是什么时候调用的?load 方法能继承吗?
- 讲一下你对 iOS 内存管理的理解
- 你在项目中是怎么优化内存的?
- 讲讲 RunLoop,项目中有用到吗?
- 列表卡顿的原因可能有哪些?你平时是怎么优化的?
- 项目有没有做过组件化?或者你是否调研过?
- 讲一下 OC 的消息机制
- ARC 都帮我们做了什么?
- 实现 isEqual 和 hash 方法时要注意什么?
- property 的常用修饰词有哪些?weak 和 assign 的区别?weak 的实现原理是什么?
- 线程安全的处理手段有哪些?把你想到的都说一下。
- 说一下 OperationQueue 和 GCD 的区别,以及各自的优势
- Swift 中 struct 和 class 的区别
- Swift 是如何实现多态的?
- Swift 和 OC,各自的优缺点有哪些?
- 如果让你实现 NSNotificationCenter,讲一下思路
- 如果让你实现 GCD 的线程池,讲一下思路
- 为什么是三次握手?为什么是四次挥手?三次挥手不行吗?
- 讲一下 HTTPS 密钥传输流程
- 讲讲 MVC、MVVM、MVP,以及你在项目里具体是怎么写的?
- iOS 系统框架里使用了哪些设计模式?至少说6个。
- 你自己用过哪些设计模式?
- 哪一个项目技术点最能体现自己的技术实力?具体讲一下。
- 你在项目中遇到的最大的问题是什么?你是怎么解决的?
- 用 Alamofire 比直接使用 URLSession,优势是什么?
- 你是如何学习 iOS 的?
- 和产品经理、测试产生冲突时,你是怎么解决的?
- 手写一下快排
- 遍历一个树,要求不能用递归
- 找出两个字符串的最大公共子字符串
希望本文能为部分准备求职和在职的处在迷茫期的同学提供一种思路。成长永远不可能一蹴而就,都是在不断积累和学习中完成的厚积薄发。
面试资料:
看完文章如果你正在跳槽或者正准备跳槽不妨动动小手,添加一下咱们的交流群1012951431来获取一份详细的大厂面试资料为你的跳槽多添一份保障。