最近断断续续面试了不少人,遇到有几个感觉还不错的人,都没能过 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 个人哈拉。都是程序猿,就「猩猩相惜」了吧:
- 慈眉善目,保持友好:面试者不是你的敌人,不要想着战胜他;也不一定是 liar,不要想着反驳他;告诉他,这是一个双向选择的过程,我们都是平等的;
- 专注认真,仔细倾听:虽然工作任务重,但是既然坐在了面试室,就耐下性子来罢;
- 语气放缓,谆谆诱导:语速太快就容易显得咄咄逼人。让对方渐入佳境,也是在锻炼自己的沟通能力;
- 有序提问,有的放矢:根据事前准备的待了解清单,以及面试中发现的新要点进行提问;
2.3 面试后
如果可以的话,就刚刚结束的面试给对方提几点建议吧,让对方也有提升。可以指出其在哪方面有不足,如何提升,现在的状态是否符合他的职业规划等等。
3. 提问
3.1 技术类问题
技术类问题相当于填空题。之前网上已经有一篇 Sunny 写的关于面试的文章流传了开来,可以在里面挑一些基础性问题来问。对于面试者的技术能力我是这么看待的:基础首先得要过关,而对于深一层的知识如果有了解最好,不知道的话如果能表现出清晰的解决问题的能力,以及充分的学习热情,学习能力,那我也并不会太过纠结于技术上的细枝末节。也就是说,更看重潜力。当然,说起来总是轻巧的。
3.2 开放性问题
这类问题就是考验候选人思维能力的思考题了。可以这么玩:
- 在 XXX 项目中遇到最棘手问题是什么,怎么解决的;
- 我们的 XXX 项目中现在有这么一个难题,如果是你你会怎么解决;
- 其他开放性问题。
考核的标准不是能不能答出来,而是能不能形成一个解决问题的步骤。就算对解决方法一无所知,思路清晰的话也可以回答出一条线索出来,比如:
- 首先我需要确认的是 XXX 是怎样的;
- 然后我会转向 XXX 方向,查阅相关的资料;
- 如果查到的话,下一步我会 XXX,如果没有的话,我会 XXX;
- ……
哎,说得太空泛了,就是这么个意思吧。
4. 信息整理
经过这么一场剧烈的信息交换之后,想必身心已经有点疲惫了,但是还不能放松。要趁着脑子还没有冷却下来,记录下刚刚面试的要点。对我来说,大的方面有下面这些:
- 技术功底是否达标;
- 学习能力是否足够;
- 职业发展是否相符;
- 沟通能力是否顺畅;
- 仪容外表是否整洁;
- 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,我所说的只是一家之言,我只是辣鸡,全文终。