作为一个面试官,如何进行一场愉悦的 iOS 面试。


最近断断续续面试了不少人,遇到有几个感觉还不错的人,都没能过 CTO 那关。于是反思了一下整个面试的过程,如何让面试更加靠谱,愉悦。

1. 面试目的


首先得弄清楚面试的目的是啥。面试的目的是为了与候选人进行面谈,全面立体地对其进行了解,包括软实力以及硬实力。


软实力中要考量的第一位就是「沟通」。通过对沟通的考察自然就知道了候选人的:思维,性格。

  • 思维是否足够清晰有条理决定其是否能够胜任技术开发类岗位;
  • 性格则关系到团队协作,对公司整个团队的气氛影响,尤其是人员较少的创业公司。


而硬实力自然就是岗位要求。对于我们公司自身,需要的硬实力中最硬自然就是 iOS 开发,起码得熟悉 Objective-C 以及 Swift,对于 iOS 开发的了解越多越深越好,深到一定程度其实也就达到了 计算机原理、操作系统、计算机网络 这一层「通识类知识」了。另外就是公司业务相关的技术知识储备,如果刚好能够 hit 中某些点,自然也会对候选人加分。


对硬实力要求中稍微高一层的就是抽象能力。所谓抽象能力就是对代码的架构组织,对设计模式的理解以及应用。


综合软实力以及硬实力,可以考察到候选人的另外一个重要能力:学习能力。几乎每个人在自己的简历上写着 “热爱学习”,“具备良好的学习能力” 等等。但是如果思维混乱,基础薄弱,技术不过关,又如何让人相信自己的学习能力。

2. 对面试官的要求


分析完面试需要考察的点,下一步就是考虑怎么样去「挖掘」候选人,以考察其身上是否具备这些点。毕竟面试者有可能受各种各样的因素影响而不能百分百展现自己。这时候就要一次愉悦的面试,来让面试者释放自己。

2.1. 面试前

对面试官,面试前最好能够准备一张纸,记录下想要在面试中深入了解的信息。而这些信息的来源主要是:

2.1.1. 简历

面试前不可少的就是阅读候选人的简历,通常这时候我最不希望看到的就是“政治面貌”、“父母工作单位”、“住址”等等的模板式信息,通常看到都会直接否掉。幸运的是我们的 HR 会帮我做这一层筛选。


阅读简历的主要目的是为了看其项目经历,看他在过往项目中承担了什么样的工作,记下感兴趣的点,比如:

  • 看你在项目中使用了 XXX 库,它的实现是怎样的呢;
  • 你在项目中是怎么实践 MVC 的;
  • 你怎么评价你做的这款产品;
2.1.2. GitHub

看仓库,看代码质量,记录下一切想要了解的信息,比如:

  • 为什么会想到写这个项目;
  • 这个项目的主要难点在于哪里;
  • 它的结构是怎么设计的;
  • 我看到你 Star 了 XXX 项目,你知道它大概是怎么实现的吗(这个有点刁钻了);
2.1.3. Blog

主要看文章来观察其思路,以及探究的深入程度。个人最喜欢那些能够以小见大,带有自己深刻思考的文章。博客是一个丰富的信息池,可以通过博客向对方了解所有信息:

  • 最近怎么不更新了;
  • XXX 文章里面提到的 XXX 是怎么 XXX 的;
  • 上次去 XXX 地方回来有什么启发呀;
  • ……

2.2 面试时

人到达一个陌生的地方,注意力很容易会被分散掉,而且天生的应急机制会让他产生一点紧张以及害怕,何况还要对着 1~2 个人哈拉。都是程序猿,就「猩猩相惜」了吧:

  1. 慈眉善目,保持友好:面试者不是你的敌人,不要想着战胜他;也不一定是 liar,不要想着反驳他;告诉他,这是一个双向选择的过程,我们都是平等的;
  2. 专注认真,仔细倾听:虽然工作任务重,但是既然坐在了面试室,就耐下性子来罢;
  3. 语气放缓,谆谆诱导:语速太快就容易显得咄咄逼人。让对方渐入佳境,也是在锻炼自己的沟通能力;
  4. 有序提问,有的放矢:根据事前准备的待了解清单,以及面试中发现的新要点进行提问;

2.3 面试后

如果可以的话,就刚刚结束的面试给对方提几点建议吧,让对方也有提升。可以指出其在哪方面有不足,如何提升,现在的状态是否符合他的职业规划等等。

3. 提问

3.1 技术类问题

技术类问题相当于填空题。之前网上已经有一篇 Sunny 写的关于面试的文章流传了开来,可以在里面挑一些基础性问题来问。对于面试者的技术能力我是这么看待的:基础首先得要过关,而对于深一层的知识如果有了解最好,不知道的话如果能表现出清晰的解决问题的能力,以及充分的学习热情,学习能力,那我也并不会太过纠结于技术上的细枝末节。也就是说,更看重潜力。当然,说起来总是轻巧的。

3.2 开放性问题

这类问题就是考验候选人思维能力的思考题了。可以这么玩:

  1. 在 XXX 项目中遇到最棘手问题是什么,怎么解决的;
  2. 我们的 XXX 项目中现在有这么一个难题,如果是你你会怎么解决;
  3. 其他开放性问题。


考核的标准不是能不能答出来,而是能不能形成一个解决问题的步骤。就算对解决方法一无所知,思路清晰的话也可以回答出一条线索出来,比如:

  1. 首先我需要确认的是 XXX 是怎样的;
  2. 然后我会转向 XXX 方向,查阅相关的资料;
  3. 如果查到的话,下一步我会 XXX,如果没有的话,我会 XXX;
  4. ……


哎,说得太空泛了,就是这么个意思吧。

4. 信息整理

经过这么一场剧烈的信息交换之后,想必身心已经有点疲惫了,但是还不能放松。要趁着脑子还没有冷却下来,记录下刚刚面试的要点。对我来说,大的方面有下面这些:

  1. 技术功底是否达标;
  2. 学习能力是否足够;
  3. 职业发展是否相符;
  4. 沟通能力是否顺畅;
  5. 仪容外表是否整洁;
  6. Passion

5. 面试者的建议

5.1 简历

简历信息要精简,着重描述工作经历,工作内容。工作内容过于简单的东西就不要写了,例如:使用 XXX 库完成了 XXX;重写了 xxxcell 进行自定义界面等等。如果说你的主要工作都是这样了,那就要准备好回答“XXX 库是怎么实现的”这种问题。


如果要贴照片,那就贴一张干净有精神头的。但是如果你要贴证件照,那还是不贴了罢。


排版要么简洁无尘埃如 Markdown,要么找 UI 妹子设计得高大上一点,不要用模板那些多余的修饰。


贴上你的 GitHub 跟 Blog 地址。什么,你都没有?那…

5.2 GitHub

清理 GitHub 的无用仓库,比如练手 Demo 之类的还是撤掉吧。对于保留下来的仓库,好好整理一下里面的代码,还有 issue,pr。

5.3 博客

最好有自己的域名,并且自己用工具(Hexo,WordPress)或者甚至自建服务器来搭建。


不建议在博客中贴上转载文章。


多分享自己的思考,不一定非得是技术。但是请保持思维清晰,这也是对自己的训练。

5.4 面试

淡定。虽然网上有很多让你能够看起来很优秀的面试 tricks。但是我觉得,还是展示自己最真实的一面就好了,如果这次面试失败了,记得总结原因,然后找出是不是自己平日哪方面做得不够,是不是自己职业定位有错误,是不是没有为自己的目标全力前进……


一句老话说得好:思考是生命的源泉,失去它生命就会枯萎。

6. 总结

BTW,我所说的只是一家之言,我只是辣鸡,全文终。