跳到主要内容

为什么面试要考算法

· 12 分钟阅读
高原

面试过程中,除了问的最多的“你们公司是干什么的”这个问题,就是“为什么咱们公司在面试的过程中会面试算法题呢?”,今天就详细来拆解分析一下,为什么很多公司喜欢面试算法题?

TL;DR
  1. 公司在招聘的过程中,并不在意漏掉合适的候选人,真正在意的是招聘效率,所以招聘上的行为都会和招聘效率直接挂钩
  2. 算法题是一种简单直接高效的验证问题拆解能力代码组织能力的方式,这样的筛选方式是非常高效的

来自面试中的问题

从去年上半年开始,公司的技术团队一直在扩张,期间面试了不少的前端工程师,后端工程师,全栈工程师等等,因为我们面试过程中,无论是第一轮的电话面试,还是第二轮的到面,都会考察算法题,有一些同学就在面试过程中问我:

“您觉得算法题在实际工作中有什么用呢?”

这个问题一般都是算法题目没有做出来,或者题目做的不够好的同学问出来的,不过我觉得,这个问题应该很多人都有想到过。我的答案很直接:算法在实际工作中没有用。因为实际工作中,真正大家每天写的代码逻辑,其实大部分都是在实现业务逻辑,而业务逻辑其实都是相对比较清晰,且不复杂的。那其实这就引出了下一个问题,也是面试的同学常问的一个问题:

“为什么咱们公司在面试的过程中会面试算法题呢?”

大家可以看出,其实之所以会问第一个问题,其实是等着问第二个问题😂。

我自己的面试经历

在我所有的面试经历里,印象最深刻的是 Google 的面试。我记得我踏入面试房间之后,面试官和我说的第一句话是:Here is the problem。完全的开门见山直接出算法题,Google 是唯一的一家没有问简历上任何内容,甚至连自我介绍都没让我做的公司。

而其他的两次面试,一个是 Expedia,一个是 Amazon,无一例外的都是从算法题开始的面试。

但是说实话,直到自己创业之前,我都没有仔细思考过,为什么这些公司都这么喜欢面试算法题,我只是被动的听说了这些公司在招聘工程师的时候都会有算法题上的考察,所以自行做了准备而已。我回国之后,发现国内的大厂也都是一样,都会有算法题的考察,那么到底是为什么大家这么喜欢面试算法呢?

为什么大家都喜欢面试算法题?

我真的开始思考这个问题是在创业之后。当角色转变,从应聘者变成招聘者的时候,思考的问题就变了。

招聘的时候,公司的成本

从公司的角度看,是希望用最低的成本找到最合适的人。而公司都有什么成本呢?

  1. 招聘人力成本:包括了负责组织招聘的人力部门的成本,和具体面试的时候技术部门的时间成本
  2. 候选人试错成本:当招到了一个不合适的候选人,试用期不通过而重新招聘,这个过程会耽误大量的时间,从而给公司带来非常高的成本

成本难题

为了优化上面提到的两种成本,需要在面试的过程中做出一定的取舍:

  1. 为了节省招聘人力成本,那么面试时间越短越好,这样可以最大程度的节省技术面试的时间成本
  2. 为了节省试错成本,那么面试的过程中,对候选人的考察和了解越深刻越好,这样可以最大程度的确定入职之后是不是可以完全胜任工作。而为了了解深刻,就需要面试时间越长越好

效率优先的招聘策略

综合上面两点,可以看到从公司的角度出发,如果想要节省招人成本,那么唯一的路径就是,提高面试的效率,即有某个办法可以用最短的时间内了解到最多候选人的情况。

如果大家能够理解上面这一点,就能明白为什么会有一些“歧视”存在了,比如有些公司为什么筛选简历的时候,只要本科学历,而不要大专,并不是说所有大专的同学都比本科同学差,而是大专的同学里,能符合公司要求的人才的比例要比本科的同学低,为了能够更高效的招聘,所以直接拒绝所有大专的同学。

算法题,一个简单高效的选择

想清楚上面的这个效率导向的招聘策略,就很好理解面试算法题的好处了。首先,大部分算法题是可以考察候选人两个方面的能力的:

  1. 问题的分析拆解能力:将一个具体的问题转化成一个程序的问题,并得到一个具体的算法思路
  2. 实现代码的能力:将一个算法思路,变成具体的代码的能力

很多人可能觉得程序员最重要的能力是“写”代码,其实,程序员最重要的能力是“想”代码。在平时的开发过程中,其实“想”代码(做系统设计,程序设计等)的时间能够占到所有时间的 70%,甚至 80%,余下的 20% - 30% 才是真正“写”代码的时间。

以上两个能力,也都是平时工作中需要的能力。虽然说,算法题是考察了具体某个算法的实现过程,且这个算法并不能在平时工作中被使用到,但是上面提到的两个能力,却是平时工作中必不可少的两个能力。因此从算法题出发,进而考察这两项能力,才是算法题面试的主要目的。

我很强,为什么只因为算法不行就拒绝了我?

可能有些同学会想说,那我其他方面很强,为什么单单因为我算法不过关,就完全不去考量我其他的能力了呢?这让我想起了一个之前轰动技术圈的一个事件:鼎鼎大名的 Homebrew 作者 Max Howell 被 Google 给挂了。(不知道 Homebrew 的同学自行百度)

在这个事件里,Max Howell 的成就已经众人皆知了,但是在这种情况下,还是被 Google 给挂了,可以说,如果其他方面很强,但是算法没过线,进而被公司拒绝的情况,不是个例,而是普遍存在的。

要解答这个问题,就需要套回到上面招聘策略上了,考察候选人其他方面的能力,并尝试通过这些能力来推导候选人是否能够胜任工作,需要公司层面花费比较多额外的时间,为了提高招聘的效率,对于这样的候选人可能就宁可错过,也不要再额外花费时间了,可能有些同学会觉得这样很不公平,但是从公司的角度看,这样也是一个无可奈何的选择,是一个权衡各方面利弊后,对于公司利益最大化的一个选择。

或许,刷刷算法也没那么差

单纯从应对面试的角度来说,程序员同学们不得不去刷算法题来准备,这个过程很苦,因为会经历那些抓耳挠腮也想不明白为什么,理不清到底怎么回事的时刻,我曾经也被 KMP 算法折磨了好几个日夜。但是其实刷题不仅仅是在应付面试,还会给你带来一些真真切切的变化,这些会在另外一篇博客里详细讨论(等我写完就把链接加在这)。

所以,其实刷刷算法也没那么差,推荐大家有时间刷一刷。