跳转至

开篇词 世事洞明皆学问,人情练达即文章:小面试,大道理

你好,我是软件工程师熊燚,网上大家都叫我四火,很高兴在这个专栏和你见面。

我曾经是华为、Amazon的软件工程师,现在我在Oracle工作,我之前在极客时间写过一个技术专栏《全栈工程师修炼指南》,自己也有一个很长时间的独立技术博客《四火的唠叨》

工作的这十多年来,我以工程师的身份经历过不少团队,面试过许多软件工程师候选人,指导过一些经验尚浅的面试官,也目睹过许许多多不同风格的面试,更了解过这些面试的候选人在入职后截然不同的职业发展轨迹。

现在我在云计算的某个团队工作,除了是一个几十人团队的Team Lead,也担任公司招聘环节的Bartender角色。过去这一年多来,我面试了将近100位候选人,主导或参与了他们每个人的面试结果决策会(debrief)。也就是说,平均下来基本上每周我都会参与面试,而他们中的大部分人都是软件工程师。

面试这件事听起来似乎挺简单,做起来却非常困难。从我的长期经验来看,这里存在的问题和误区实在太多了,不妨听听来自面试官的真实“吐槽”吧:

  • “是不是拿算法题让候选人做就好了?可如果他做过这个题目怎么办?”
  • “候选人都是工作好多年的老司机了,怎么有面试官问那种简单粗暴的算法题!”
  • “‘面试造火箭,工作拧螺丝。’工作内容普普通通,为什么面试要问那么难的问题!”
  • “新入职的同事,上来就给我们的系统埋雷,还不服批评,这种性格脾气面试是怎么过的?”
  • “招怎样的人好,是能立马干活的,还是有潜力的?有潜力的培养起来跑掉了怎么办?”

有没有觉得“似曾相识”或者“一见如故”呢?

这样的问题还有很多,我就不一一例举了,但有一点,我想你是非常清楚的,面试就是打造团队的第一道门槛,它可能短暂、直接地影响你一个项目的进度,也可能长期、潜在地左右你整个团队的战斗力。

既然如此,那我们不妨重新来系统地审视一下,负责技术面试这件事儿,对你、对团队来说,到底意味着什么?

晋升第一课,招募人才

首先,去负责技术面试,帮助公司和团队招募人才,就是一个职业上升通道的必攻克项。

这里你不妨想想,你们公司的面试官都是什么样的人?技术骨干,管理骨干,具备软件工程师背景?对于绝大多数团队来说,的确是这样的,因为经验等综合能力可以帮助他们做出中肯评价与合理评估。

所以,当你开始关注这些,或者已经为公司和团队把关人才的时候,恭喜你,你的视野、看问题的方式、沟通和筹划事情的技巧,还有做出合理判断的能力,已经有了质的提升,或者说得到了团队的认可。这对你的职业生涯来说,无疑是一个助推器

但我也要实话实说,做好这点,挑战可不小!在后面的课程中,你将会深刻体会到这点,但我还是非常鼓励在阅读学习的同时,不断去尝试。

因为,面试还是一个预期和限制都很明确的快速学习机会,并且,是一个双向的学习机会。预期,指的是我们针对软件工程师这个特定岗位对于候选人的期待;而限制,则明确了双方需要在每轮短短几十分钟的时间内进行交流与合作,完成话题的讨论,或是问题的解决。面试官可以从中得到不同的观点,获知各异的思路,拓宽自己的视野。而这些东西,课本上没有,老师不会教给你,项目组内也学不到,这就更显得颇为珍贵了。

所以,在专栏中,我会讲到一些经典的面试问题,其中一些我已经在面试中问过不下几十次了。比较有意思的是,有的问题我见过10种以上的解题思路,其中超过一半,都是我从候选人身上学来的。

从这点出发,你还能深度体验换位思考,让自己和市场保持同步。显然,你不会永远是面试官,没有人会。当你准备往更高处发展,去接受新的挑战时,这之前的每一天就都成了准备。

流畅地表现和表达自己,具备出色的沟通能力,都会是你当下以及未来的加分项,这也恰恰体现了面试官这个角色为技术人职业发展所带来的价值。

除了个人,在团队里,这对于你个人影响力的打造也是很有帮助的。这就不局限于工作中做一个项目、解一个bug了,还有同事间相处、合作、互助等等。无疑,参与面试是一个加深了解的好机会。

正所谓“世事洞明皆学问,人情练达即文章”,小小的面试,隐藏了大大的道理。在通过反复实践来磨练以后,能够承担面试官重任的人,最终一定会同时具备优秀的技术功底与良好的沟通技巧,以及相应的理性思维与决策能力。

打造优秀团队,严把人才关

当你了解了面试对于个人发展的意义之后,我想从公司和团队层面再给你一点建议。在其位、谋其政,高度更高,视野要更广。

你有没有听过这样一句话,“招聘是研发团队日常活动的第一要务”。Facebook是有比较多的类似观点在宣扬,而在我刚加入Amazon的第一天,我的老板也和我讲过类似的话。

可能你觉得夸张了,人不对换了就是了,工作还得继续,给招聘戴上高帽未免危言耸听。

先说说工作这么多年后我对这句话的体会,对于招聘的重要性,我是认同的。举个最简单的例子,就说软件工程吧,如果开发环节马马虎虎,那么测试环节就需要加倍投入去覆盖核心功能与非功能点;如果测试草草了事,那么运维就要开足马力修bug、打补丁。总之,从需求、设计、开发、测试到运维,你总归要有一个环节把质量严格地把控好,否则就要让某个下游环节买单,下游环节不买单,那就要留给用户买单了。

同理,研发团队不同岗位之间的协作也是如此。如果软件工程师们具备优秀的沟通与合作技巧,脾气秉性能够兼容,那么团队经理的负担就会轻很多;如果他们具备一定的项目和任务管理能力,那么PM的介入就不用那么激进;如果他们能够具备优良的编程习惯,严格把控好质量,那么许多产品我们并不需要专职的测试团队……

你看,从研发团队的核心来看这件事,面试严把关,可以省掉不少管理工程师的成本,以及给其它环节买单的成本,甚至是“少招人”;反之,一个“不合适”的工程师加入,不但研发团队无法高效运转,还要其它环节和角色陪跑,此时付出的代价就太大了。

于公司、于团队、于面试官来说,管理成本和团队建设都是逃不开的两个关键词。而面试,就是在有限的时间内,评估候选人是否“合适”的最佳方式。

候选人成长空间

最后,还有一点我觉得值得讨论一下。如果你此时还只是一位候选人,你会关心面试官的目的和套路吗?

金融市场上,有投资和投机两种行为,前者更看重长期的回报,而后者更关注短期的收益。我认为,了解面试行为本身,恰恰是二者都注重的表现。在面试这个过程中,长期看,你可以了解到哪些知识和能力是值得长期投入的;短期看,你可以了解对方的初衷和心态是怎样的。

面试通过了,皆大欢喜,我们还可以从中评估和强化自己的认识;面试没通过,你也不至于说挂得不明不白。

但更重要的一点是,不要觉得你只有候选人的身份,其实,候选人也是面试官。因为面试是双向的,面试官在面试你的时候,你也在面试他。如果对方考察候选人的方式折射出欠缺思考的视角、糟糕的判断,甚至对候选人缺乏尊重,那么十有八九,这样的公司和团队,你也是忌惮加入的,对吗?

你的收获

到这,我再来说说你能从这个专栏中具体学到什么吧。

从范围上讲,这个专栏不是讲完整招聘的,而是专注于技术面试本身,并且,更多例子和技巧是针对软件工程师这个职位的。当然,我们也会讨论通用型的招聘技巧,和面试前后的林林总总。

具体分为以下三部分:

面试前:我将介绍为什么要对软件工程师进行技术面试,应当覆盖哪些面试角度,以及我们该怎样去设计面试题。

面试中:专栏的重中之重,我将结合实例探讨怎样主导技术面试。包括怎样把控流程,怎样进行算法和数据结构的考察,系统设计的考察,面向对象和测试能力的考察,基础知识的考察,以及行为面试的操作方法等等。

面试后:我将针对候选人的评估讨论会如何开展来介绍。包括怎样收集事实、提炼数据,怎样引导争辩、达成共识,以及最终怎样给出客观中肯的评估。

从交付形式上看,你会一直处于面试场景中,熟悉的问题会带你步步深入,我希望能通过先破典型、后立观点的方式,打破你对于面试的固有认知,收获不一样的学习体验。另外,你在课程中还会看到很多的技能卡片和总结性脑图,来帮助你记忆与回顾。

再者,我想说,市面上系统、完整讲解如何主导软件工程师技术面试的材料非常少,这个专栏融汇了我10多年来在国内外大厂的面试经验与思考总结,相信能带给你富有启发性的设计思路,以及实战检验过的全新观点。对于面试来说,“问题是多变的,套路是永恒的”,如果你能消化和吸收隐藏在它背后的原则和思路,这趟旅程定不虚此行。

最后,我深知技术面试和一般的技术内容相比,观点繁杂、方法多样,落到个体实践更是差异巨大,但就像我们期待一场相谈甚欢的面试一样,这个专栏除了交付体系化的方法心得,我也希望给你提供一个畅所欲言的窗口,一把打开更多技术面试相关话题的钥匙。

因此,对于更多问题,欢迎你在评论区留言,我将尽力一一回复。此外,我还特别策划了若干期专题答疑,尽可能把你的疑惑都覆盖到。

我是四火,我们下节课见。

精选留言(14)
  • キセイガイ 👍(11) 💬(2)

    /* "你总归要有一个环节把质量严格地把控好,否则就要让某个下游环节买单,下游环节不买单,那就要留给用户买单了。" */ 这句话真的太精辟了,看得我眼泪都要流下来...我负责一个业务团队的自动化开发实施运维,算是传统IT。由于精力有限,有一部分开发需求是直接交给其他部门or外部开发人员对应的,他们从业务人员处了解需求后进行设计,然后开发完交付回来实施。有的时候交付的结果真的很无奈,实施和维护时发现过以下问题:包括但不限于 缺少各种文档(需求/设计),高耦合(设计/开发),异常处理混乱(设计/开发),实施后直接报错使用了未定义变量(测试)等等。我之后的环节就是业务人员(用户),这些问题基本都要我这个实施运维买单...(虽然一部分原因是为了帮我减轻负担才找的外部人员,但是真的有的时候甚至觉得自己重写一个可能比较省时省心...)

    2021-04-07

  • jjn0703 👍(6) 💬(2)

    专栏的角度很独特,我很好奇,资深的面试官是怎么思考问题的~

    2021-04-06

  • undefined 👍(4) 💬(1)

    会有应届生和社招各是怎么招人讲解吗,看起来好像都是针对社招面试的

    2021-04-15

  • 分清云淡 👍(4) 💬(2)

    面试前没有任何准备,然后让候选人自我介绍(不会真听)主要是抓紧扫两眼简历;再来一道算法题又能找点时间思考下。这大概是80%面试官的常态吧

    2021-04-07

  • 楼下小黑哥 👍(1) 💬(1)

    菜鸟面试官前来报道,最近参加几场面试,总感觉少些什么,刚好看到这课程,真是及时雨

    2021-04-07

  • ThinkingQuest 👍(0) 💬(1)

    经历过很多面试,指导过别人如何面试。 但是近期,忽然发现自己被“整不会”了。 感觉不会面试了。。。

    2022-11-12

  • sqnv_geek 👍(0) 💬(1)

    oracle招人有个list,不在里面的不会给面试的,这样的情况真实存在吗

    2022-06-19

  • 梦倚栏杆 👍(0) 💬(1)

    我初始是对当面试官有期待的:这是一个相互切磋和交流的好机会。但是后边发现组内每个人对面试的要求或者侧重点是不一样的,我当前的面试能力还无法得到其他组的认可。所以现在我的诉求是我组里缺人的时候自己面,不缺人就不面了,以防给别人招了不合适的人

    2021-04-17

  • 高鹏0409 👍(0) 💬(1)

    想要做成事一定要人帮助,找谁来帮助大部分来自面试,某个角度看来,找来好人比自己能干还重要

    2021-04-13

  • 37.8🍃 👍(0) 💬(1)

    简历筛选上有没有什么技巧和经验可以传授下,我们在找简历时发现大部分的候选人的项目经历都比较相似

    2021-04-11

  • fakefish 👍(0) 💬(2)

    自己面试过200+的候选人,也面试过一些大厂,即便是大厂的面试官,在面试上也有很多面试官做的并不好,面试题太依赖候选人的简历上的内容或者流于形式而非自己团队体系的结构化考察

    2021-04-09

  • rongcongx 👍(1) 💬(0)

    在过去5年里,作为面试官,我面试过数百位候选人,一直在思考怎么样能够吸引到最合适的人才。什么样的候选人会获得我的青睐,以及这些候选人在进入公司之后的发展如何?希望通过这次课程,我能够增进自己在技术面试方面的能力,成为更优秀的领导者。

    2022-01-20

  • 健康的小牛犊 👍(1) 💬(0)

    虽然一直都是被面试的一方,但是知彼知己才能百战百胜

    2021-05-24

  • gtp 👍(0) 💬(0)

    换个面试官角度看自己

    2021-04-07