私下和不少朋友交流过这个话题,大部分求职者认为,我能作基本的 iOS 开发工做,就达到公司的要求了,却不知公司招聘员工,更但愿的是这我的可以在关键时候可以发挥通常人作不到的能力。php
这篇文章是来自微信读书的 bang ,我彻底赞成他的观点。除了他的这些面试方法外,我还认为作比说更重要,因此我更喜欢在面试的时候,拿出一张白纸,让求职者写一段富有逻辑性的代码,看看他的思惟是否严谨,对于一些常见的数据结构和算法基础有了解。java
做者介绍:bang,iOS 开发者,推特中文圈 / JSPatch做者,博客 http://cnbang.net , 目前就任于广州腾讯。linux
参加了内部面委会的一个分享,结合我本身的方式,说说怎样面试一个普通的 iOS 工程师。程序员
通常我倾向的考察分两个主要的部分,第一是在简历里提到的项目经历中找挖掘点,第二是基础知识考察。另外也会看状况作一些软实力的考察和性格特征的判断。面试
若是顺利的话这第一步占的比例会很大,由于每一个程序员都不会方方面面知识都熟悉,但至少他写在简历上的作过的项目是熟悉的,讲本身熟悉的东西容易让他进入状态,展现好的一面。这里主要考察两方面,一是有没有在某些点上有过深刻研究。二是对项目总体了解如何。算法
在中大型的公司里比较注重工程师有深刻研究的能力,若是能把一个功能讲得很清晰是比较好的加分项,这里会问实现的思路,经过追问去了解候选人在这块深刻的程度,从思路到方法,从上层 API 调用到框架流程再到底层实现。若是候选人在讲述时有一条逻辑主线,例如讲述业界广泛是怎么作的,本身在业界方案基础上作了什么改进,怎样作到更好,进一步改进的思路是怎样,这是最好的。若是还能把解决问题的方法概括起来运用在其余地方,能触类旁通,包装成通用解决方案,或者作开源贡献,就更好了。数据库
通常会问候选人哪个项目技术点最能体现本身的技术,而后不停追问技术细节,例如作了一个相册项目,以为列表优化是最能体现技术点的,会问这里优化的思路是什么,怎样评估,遇到过什么困难,怎么解决的,若是用到图片缓存开源项目,说说它具体作了什么事,缓存策略是什么,从下载到显示的整个流程是怎样的,还有没有更好的方案,追问到必定程度后也会发散去问跟这个话题相关联的问题,例如若是有部分用户反馈图片显示不了,你会怎样排查问题,排查修复后怎样监控,就会过分到一些网络和运营监控方面的内容,也会顺便问到一些基础知识。缓存
问完本身职责范围内的功能技术点后,还会看看对项目里其余的实现有没有了解,特别是项目的大体架构和核心功能,最好能画出项目大体结构,看状况问问网络层和数据层是怎样实现的,为何这样实现,项目最核心功能是怎样实现的,例如作读书的至少要知道项目里的排版引擎的大体实现方式,作 QQ 的要知道消息收发的机制,若是不知道,也能够说说若是本身实现会怎么作。这里主要看看有没有技术好奇心,会不会积极主动了解项目里已有的非职责范围内的技术点,主动和好学这两点是很重要的。微信
若是项目经历里能问出大部分东西,这部分比例就会比较少了,这是比较好的状况,不然就按套路去多考察一些基础知识,包括 iOS 开发的基础和计算机基础,像内存 / 网络 / 存储 / 线程等,例如 ARC 是怎样作到自动管理内存的,跟 java/js 的垃圾回收的区别,网络 http 协议是怎样的,用过什么数据库框架,db 索引是什么,多线程开发要注意什么,跟 runloop 的关系是什么等等,这类问题在网上都有不少,就很少说了。数据结构和算法在笔试时会涉及,面试会比较少,若是问算法的话只会问问思路,通常我以为若是项目经历方面不太好,才会考虑考考算法做为辅助判断。网络
一些通用能力像逻辑思惟能力,沟通能力,自我驱动能力等均可以在上面那些问题的交流中表现出来,另外像团队协做能力、抗压能力和性格特征这些也会看状况考察一下,例如问问若是产品让你作个需求,你以为不靠谱,会怎样作,设计让你作个很难实现的效果,你会怎样评估?或者问个低级问题,故意说个错误的答案,看看他的反应是怎样,是表现出嘲笑和攻击性,仍是怀疑本身,仍是细心求证。抗压能力的考察有些人比较喜欢,我是以为面试仍是轻松一点好。软实力方面的考察在一面会比较少,或者不会涉及,实际上这方面我也没太多经验,也在摸索中。
做为程序员,若是有 GitHub 开源项目是最好的,直接能够看到代码风格,代码质量,处理 issue 和 PR 的方式,若是有技术博客也是很好的,能够提早看到平时的一些技术积累,省了不少事。但若是 GitHub 内容是培训班的那种仿写 APP,博客内容是摘抄文章什么的就是负分了。
以上是正常套路,若候选人有特殊经历或技能,例如牛 X 大学毕业,ACM 冠军,通读 linux 源码,php 源码贡献者之类,会另当别论,针对性进行面试,这不是惟一的标准。另外针对不一样的工做年限也有不一样的问法和要求,工做年限越高要求越高。
其实面试就是想低成本找到合适在团队里一块儿工做的人,由于若是经过一块儿工做一段时间去判断是否合适成本过高。这种低成本的代价就是会误判,有些工程师是理论型,有些是实践型,面试的方式会对实践型的人不利,尽管他们若是招进来会是适合的人,并且人会在不一样环境下会有不一样的表现,只根据过去的经历去判断有时是不许确的。只能尽可能采起一些措施去减小误判的几率,例如提升面试官的判断能力,或多几轮面试。通常若是不是急招,策略都会是宁杀错不放过,因此其实就算面试被否了,也不必定表明能力不行。
另外每一个面试官可能都有本身摸索出来的一种判断方式,并随着面试经验的丰富不断改进,达到更准的判断几率,这只是我我的在目前有限的经验里的一点小总结,仅供参考。