面试官如何做好算法题环节的考察

  |  

摘要: 算法题主要考察哪些内容

【对算法,数学,计算机感兴趣的同学,欢迎关注我哈,阅读更多原创文章】
我的网站:潮汐朝夕的生活实验室
我的公众号:算法题刷刷
我的知乎:潮汐朝夕
我的github:FennelDumplings
我的leetcode:FennelDumplings


本文主要记录一下算法题面试时,面试官需要注意的一些点,主要参考外企的一些经验。外企的 Tech 主要考察以下 4 点,并且基本上必有算法题。

  • Programming/coding
  • data structure/design
  • Algorithms
  • Communication

近几年国内公司也流行算法题面试并且流行了好几年,尤其是后台开发和算法工程师这两个岗位。

那么对于如何做好算法题面试的面试官,可以参考下面的这份面试流程的经验。下面经验都来自北美onsite面试官的一些经验。可以用到自己的面试实战中,更好地应对领导下派的面试任务,选到自己希望合作的人。


面试流程

1. 提出问题

一般面试官选题时很少上来就靠很难的问题,而是先看候选人项目经验。如果一位候选人的项目经验不足,为了和其它有经验的人对标,面试官往往会问比较难的编程问题。如果项目经验不是弱项,则选题会偏中等,例如: 序列化/反序列化二叉树。

对于应届生,一般都比较缺少项目经验(现在的学生比我们当时更加重视实习了,所以还是得具体地看简历),因此面试官在算法题选题上会偏难,并且更关注解题速度和代码中是否有bug。

对于社招,面试者一般都有不错的项目经验,面试官往往会更关注做事方法和沟通能力。

2. 交流阶段

如果面试者马上开始写程序,或者马上给出想法,可能过于着急了。一般面试官期望面试者能够在这个阶段提出一些问题。例如对于序列化二叉树的问题,可以有以下可以提问的点

  • 有什么限制条件
  • 二叉树的值是什么类型
  • 这个api 谁来使用,private 还是 public 的
  • 这个api 更注重速度性能还是空间性能

面试官在接到这类问题时,可以问问候选人他的建议是什么。

3. 建议阶段

无论面试者提出的建议是什么,都可以将需求改一改。比如面试者说觉得时间性能更重要,那我就说我更期待空间性能,这样是避免陷入面试者最熟悉的套路。如果修改后的需求面试者没有刷到这么深,就会开始思考。面试官也希望候选人思考一下,提出几种方案,并形成有效沟通,哪怕方案不成立。

如果候选人提出根本没有办法优化空间,那么他可能有点过早放弃的性格。如果候选人提出过多方案,没有问提示,最后这些方案也不成立,那么候选人的沟通有问题。

4. 沟通阶段

候选人选定方案后,面试官会希望候选人来进行沟通,看看有限时间能否做完(最聪明的人不是能做出最好设计的,而是在有限时间内能给出大家都能接受的方案的人。)。

例如:如果空间优化非常好,但是代码将超级复杂,无法写完,那么面试者应该及时交流。如果面试者不交流坚持写代码,那就只能看最终能不能写完了。

5. 问题简化

对于代码超级复杂,无法写完的情况,可以给候选人提出一些简化问题的方案,如果候选人自己提出简化问题的建议更好。

6. 时间复杂度分析

7. 写代码

到这一步,如果 2, 3, 4, 5, 6 都进行了或者进行了大部分,并且代码看起来是 work 的,则基本上不用取纠结一些边值,代码整洁的问题。

但如果候选人把 2, 3, 4, 5 都跳过了,那么他最好能够 bug free 并且代码组织很好(因为面试官要方便看代码有没有问题)。

8. follow up

问面试者他的代码还有什么能改进的。这是考察面试者的知识面,也看面试者是不是耐心。可以接受一些开放性的回答,比如单元测试,回归测试,标杆分析等。


谷歌微软脸书对算法题面试的要求

谷歌微软

  • 思路是不是清楚,写出的代码是背下来的一般很难有一个清晰的推理过程
  • 面试者能不能自己通过走查代码,加测试用例自己发现自己的bug,fix对不对,能不能保证不引发新的 regression bug。

Facebook

  • 必须bug free(唯一一家)
  • 大部分是leetcode原题

Share