聊聊技术面试

前言

最近因为工作安排,我需要为我们小组面试一些合适的开发人员,其中有包括 AndroidWeb后端 几个领域,面试的人加起来少说也有好几十个了。但其实通过的并不多,甚至不到 1/10,有时候甚至会开始怀疑是不是自己要求太高了,或者面试的点不对。于是也在不断的精进自己技术面试的方法,虽然在多次改进之后通过率并没有提升,但至少相比最开始的「轰炸式」面试还是科学很多,本篇文章的主要内容就是分享这些感受和心得。

第一次面试

第一次作为主技术面试官面试别人的时候,我还是很紧张的,记得那次的受害人是一名 Android 开发。那时我已经 1 年多没有碰过 Android 研发了,很多知识自己也忘了,为了能 hold 住场面,我仔细阅读了简历,找出了一些能问的点,然后在网上找了很多份面试题,筛选了其中一部分我觉得还不错的题目记录下来,准备面试。面试开始的时候,我很自信,在他自我介绍完之后,开始了我早已准备好的「轰炸式」面试,一波儿下来,这名受害人明显招架不住这些即全面又深入的知识,节节败退,最终以不通过告终。虽然说我准备了这么多问题,但并没有故意刁难对方,秉承着能答到“够开发我们项目的标准”就给过,但他还是没有达到。

经过这次面试后,我想,虽然结果还算客观,考察也算全面,但我也太辛苦了,得花很多时间去准备,未来随着面试的增多,一定不可能每份简历都这么玩。所以我就在想,在仅有的面试时间中,如何更客观、准确的评估候选人的真实能力,以及与岗位的匹配度呢?

考察的维度

回到面试本身的目的,面试是为了在许多候选人中找到一些适合对应工作岗位的候选人。
所以,考察的维度,一定和岗位本身是息息相关的。除了一些需要特别考察的能力之外,一般技术面试的场景,考察的维度有以下几个:

  • 技术能力:是否匹配工作岗位所需能力,深度和广度是否足够,能否快速上手。
  • 技术潜力:培养价值如何,哪怕与岗位能力不是很匹配,如果技术潜力优异,那么也是很值得考虑的。
  • 软实力:是否可以相互理解对方的意思,是否能把一个观点表达清楚。
  • 心态:是否拥有一颗开放的心态去面对问题。

接下来,聊聊在考察以上维度时,我个人的一些方法和习惯。

技术能力

考察技术能力是一个体力活儿,我个人喜欢把技术问题分为两大类:

  1. 基础知识和原理 - 考察基础是否扎实
  2. 候选人所掌握的技能 - 考察候选人的技术水平、潜力和亮点

对于必备的基础知识和原理,照着问即可,如果答得好,可以追问一些原理类、思想类的问题。这一类问题就像是基础分,60 和 80 的区别不是很大,80+ 则可以用基础扎实来形容。
对于候选人所掌握的技能,我会根据候选人的项目经历和技能列表来出题,由浅入深,由点到面的问问题,这样既能考察候选人的技术深度,也能考察技术广度。在回答的过程中往往都会包含候选人的一些亮点。

你可能会问,为什么是候选人所掌握的技能,而不是岗位需要的技能呢?
如果候选人掌握岗位所需的技能,那这是最好,可以多问。
如果候选人不掌握,那该技术又可以分为 2 种情况:

  1. 学习成本很高,不会就不要的
  2. 学习成本不高,来了可以学的

对于第一种,一般可以在看简历的时候,初筛掉。
对于第二种,人家不会你问了也没用,而且成本不高,来了也可以学。那么应该重点考察候选人掌握的技能,潜力足够的话,也能很快掌握。

一般问完候选人所掌握的技能之后,对候选人的评价已经有个大概了,如果不行,这时就可以结束面试了。如果觉得还可以,那么可以继续下一个考察项。

技术潜力

在上一步「技术能力」考察中,已经可以通过该同学工作的年限,和掌握技术的深度、广度得出初步的潜力,有潜力的同学和潜力一般的同学会有比较明显的差距。
除了这种实力上的差距之外,我一般还会问一些开放性问题来考察,例如:

  1. 在 XXX 项目中,你解决过最棘手的问题是什么,怎么解决的,简单描述一下。
  2. 你觉得你最大的优势是什么。
  3. 平时你是怎么学习新知识,新技术的,如何体系化的学习一个技术。

对于问题 1,可以关注候选人解决问题的思路,思考能力,以及韧性等。
对于问题 2,关注候选人对自己的认知,以及面试官对候选人的认知。
对于问题 3,关注候选人的学习习惯,以及系统性思维。
这仨问题没有标准答案,有潜力的同学和潜力一般的同学在这一环节的回答往往也有明显的差距,但有一点要注意,这类开放性问题也许他自己没有仔细思考对比过,所以给出的答案可能并不能代表他的实力,相比回答本身,更需要关注候选人为什么会给出这个回答,通过这仨问题,可以让你对候选人的潜力有一个更清晰的认知。

问题 1,2 有的时候都能听到很不错的回答。但是问题 3,最容易听到的回答就是博客、论坛、公众号、看视频、看书等等。能对体系化学习有系统性思考的回答几乎没有听到过,不确定是不是这个问题没有设计好。

软实力 & 心态

表达和沟通能力在技术能力的考察过程中,也能有一个初步的结论,如果面的是初中级(P3 - P5)的候选人或者比较年轻的候选人,那么软实力一般不会额外问,即使不那么好,只要不是太差或者很离谱,随着团队的磨合与培养,一般来说也没有什么问题。
对于一些具备管理经验,或者经验丰富的候选人来说,一般会多问两句,例如,如何去协调时间计划冲突,如何去推动一些规范等等问题。当然这一部分主要还是在非技术面里考察,技术面里关注的软实力更多的是能否与研发团队的其他角色顺利的打交道。

心态和软实力有相似之处,所以就放到一起了,在技术面里都不是主要考察的内容,但可以作为一些参考,在心态上我一般会结合情况问一些偏感性的问题,比如:平时会加班吗,感觉怎么样,怎么看待加班。或是问他怎么和产品经理协作,有没有遇到过产品设计不合理的情况,以及研发团队的一些问题等等,通过这些偏感性的问题,可以了解候选人的心态是否足够开放,是否客观,偏理性还是偏感性,有没有戾气等等。

总结 & 感受

以上,就是我当前对技术面试的一些理解和看法。通过这几十波儿面试,我认为面试的核心是一个挖掘的过程,挖掘候选人的能力、亮点和问题,而不是想着如何把候选人考倒。在众多面试的候选人中,往往优秀的候选人是可以全方位吊打普通候选人的,无论是技术实力还是软实力,但这样的人实在是太少了。当然,并不是所有人都是「优秀」或者「不优秀」,大部分的候选人都处于有优秀的地方,但也有一些问题的情况,遇到这类候选人,有的问题可能答得不好,但当你挖掘到他的亮点时,他的回答还是能让你感觉到很 nice,所以大多数时候,更多的是取舍与权衡,根据岗位性质和面试官「挖掘」出的结果来评估,最终形成是否录用的结论。