← 职业指南

技术面试:把思路讲清楚而不是背答案

技术面试评的不是记忆力

技术面试通常更重视如何应用知识、拆解问题和说明思路。科罗拉多州立大学商学院职业管理中心给本校学生的准备说明也强调了这些能力。它是该校的求职指导,不等于中国雇主或法律的统一要求;具体题型和语言仍要向应聘企业确认。

换句话说,题目是不是见过不重要,重要的是你在题目面前怎么起步、怎么判断该走哪条路、发现走不通时怎么退回来。

讲思路要付的代价

这带来一个必须接受的代价:把思路讲出来,比直接给答案慢,也更容易暴露你不会的部分。背答案的人在前三分钟显得利落,讲思路的人可能要在白板前停顿、改口、推翻自己。你要接受这种不流畅,因为面试官打分的依据恰恰是这些停顿里露出来的判断力。反过来,如果你把不确定藏起来硬答,面试官未必会被蒙住,反而可能怀疑你以后在真实项目里也会这样。

这个取舍要自己选:讲思路会让你在开头几分钟显得慢,换来的是可纠正性。你把假设说了,面试官能在你写第一行代码之前把它纠正过来;你什么都不说,等他发现方向错了,那几分钟已经花掉了。前者是一个可以被追问的过程,后者只是一个结果。既然评的是应用知识,能被追问的那一种更接近他想看的东西。

可以照着走的六步

下面是一套可以照着走的顺序。前三步解决开口和方向,第四步解决卡住时怎么办,最后两步解决交付和收尾。

第一步,复述题目并说出你的假设。 拿到题先别写代码。用自己的话把问题说一遍,然后明确列出你补进去的前提:输入规模大概多大、数据是否有序、能不能改原数组、要不要处理空值、并发是否存在。这些前提题目往往没给,你不问就默认,默认错了后面全错。说出来的好处是,面试官可以当场纠正你,而不是等你写完才发现方向偏了。补假设还有第二个作用:它把一道没说清楚的题,变成在你这组前提下的题,你和面试官讨论的是同一个东西。

第二步,先讲一个笨办法,再讲你想用的办法。 直接上最优解,对方不知道你是想清楚了还是背过。先说暴力解法及其复杂度,再说你打算怎么改进、改进换来了什么。这一步是整场面试信息量最大的地方,因为它把“取舍”摆到了台面上。先讲笨办法还有一层作用:它保证你手上至少有一个正确但慢的方案,后面即使改进没讲完,面试官也知道你能把这题做完。

第三步,边写边解释,不要沉默。 科罗拉多州立大学职业管理中心建议在练习相关编程题时把推理过程说出来。写循环时说你在维护什么不变量,改变量名时说为什么。长时间沉默,面试官可能不知道你在思考还是卡住。

出声讲还顺带留了一份记录:你说错的地方,你和面试官都听见了,后面可以回头改,不用等到写完再一起推翻。

第四步,卡住时给出你已知的边界。 卡住不等于失败,假装不卡才是。你可以说:我知道这题和某类问题相关,但我没想出怎么把重复计算去掉;我能确定的是暴力解法正确,复杂度是这些。把已知和未知分开陈述,对方至少知道你清楚自己的位置。面试官给提示,取决于他能否从你的表述里看出思考路径;你把已知和未知分开讲,他才知道该从哪个点接手,而不是从零开始替你讲一遍题。

第五步,写完主动测。 自己造两个例子:一个普通情况,一个边界情况。手动跑一遍,说出每一步的值。这一步经常能救回一个你自己没发现的错误,也省掉面试官来指出它。测试不需要工具,纸和嘴就够:把每一步的值说出来,比在脑子里过一遍更容易发现问题。

第六步,留时间问流程。 面试是双向的。科罗拉多州立大学职业管理中心建议查看目标企业招聘页面是否写明面试结构和技术期望。不是每家公司都会公布;页面没有写,就直接问招聘方。

面试前可以自己核一遍的东西

这句话可以拆成几个动作:

  1. 打开目标公司的招聘页面,找面试结构和技术期望的说明;
  2. 把看到的轮次、形式和考察范围记下来,面试时逐条对照着问;
  3. 页面上没写的部分当场向面试官确认,不要用别的公司的经验去补。

前提是那家公司确实把这些信息放在了招聘页面上,这不是每家公司都会做的事。找不到就直接问,问不到就按前面的六步走。

准备的对象是讲法,不是答案

关于准备方式,有一点需要说清楚:不能背答案,不等于不用准备。准备的对象应该换成“讲法”,也就是把思考转成句子的速度,而不是把答案转成记忆。

你可以拿十道不同类型的题,不写完整代码,只练前两步,每道题控制在五分钟内讲完:

  1. 用自己的话复述题目,并补上你加进去的假设;
  2. 给出暴力解法,说出它的复杂度;
  3. 说出你打算怎么改进,以及这次改进换来什么、代价是什么;
  4. 计时五分钟,超时就停,看自己卡在哪一句上。

卡住的那句就是下次要练的地方。这套练法不需要新题目,你只是把已经会的题重新讲一遍,练的是讲的速度,不是记的数量。

这套方法能证明什么,证明不了什么

这套方法能证明什么,也要讲明白。它能证明你在有人旁听的情况下能拆解问题、能识别取舍、能在不确定时保持条理。它不能证明你的工程能力上限,不能替代实际项目经历,也不能保证某家公司一定录用你。不同公司、不同岗位的考察方式差别很大,具体规则要看对方自己的招聘说明。另外,本文提到的面试结构信息来自科罗拉多州立大学职业管理中心对学生的建议,那是该机构自己的说法,不是所有雇主的统一做法;中国市场的招聘节奏、轮次和侧重点,各家企业自行决定,不能把一所学校职业中心的建议当成通用规则。

把这条边界记在心里,你就不会把一所学校职业中心给学生的建议当成通用规则,也不会把一场线下招聘活动的安排当成某家公司的面试流程。边界之外的事,去问那家公司自己。

最后一句实在话

最后落一句实在的。下面是一种示例性的练习设想(并非真实市场样本):找个人坐在你对面,你只讲,不写,讲完让他复述你的解法。如果他复述不出来,说明你还没讲清楚——而这正是面试官会遇到的处境。

这个检查不需要对方懂技术,他只要能复述出来,就说明你的句子是能被接住的;复述不出来,问题多半不在题目难度,而在你跳过了假设或取舍。