写点什么

Homebrew 大神面试 Google 被拒,只因写不出一道算法题

  • 2021 年 12 月 15 日
  • 本文字数:2118 字

    阅读完需:约 7 分钟

相信很多人听说过关于 Max Howell(Homebrew 的作者)的故事:

Max Howell 在 Google 面试,但 Google 拒绝了他,给出的答复是:“虽然我们 90%的工程师都用你写的软件,但抱歉我们不能聘用你,因为你无法在白板上写出翻转二叉树。” 

这个事件在业内引起了轩然大波,人们开始讨论考查算法的必要性。

01

面试官为什么要考察算法?

一个面试环节可能只有一个小时,面试官需要在短时间内快速考查一位面试者的编程水平,其实是比较困难的。

很多时候,不仅面试者不喜欢面试,而且面试官也不喜欢面试。因为面试官要挖空心思出一些面试题,既要控制面试的时间,又要客观地考查面试者的真实技术水平,这是非常难的。

一场面试下来,对面试官和面试者的心力和体力都会带来巨大的消耗。而算法题目是短时间内考查面试者计算机思维和代码能力的最好的方式!

算法问题在面试中可以将面试官对面试者的主观看法带来的影响降到最低,更容易形成标准的流程。任何大公司在招聘员工的时候,都需要一套衡量人才的标准,而算法题目是大公司面试中必考的题目类型。

很多工作多年的资深程序员在面试时往往会栽在算法题上,有的人不屑于在面试前去练习算法,这些资深程序员更希望展现出自己的项目经验和解决实际问题的能力。虽然重视项目经验没错,但忽略基础算法能力就有问题了!

这么多年过去了,算法面试依然是互联网巨头招聘时的硬性条件,这也充分说明了数据结构与算法不仅是名企面试行之有效的招聘手段,也是程序员必备的基础技能——既是程序员的内功,也是编程的基础。对于没有项目经验或者项目经验很少的应届毕业生,对数据结构和算法的掌握程度几乎决定了一次面试的成败。

02

学习算法的真正苦恼

很多读者在刷题和学习算法时,真正的苦恼在于没有一套行之有效的刷题顺序。

例如,动态规划是公认的程序员面试里最难掌握的算法,也是出现频率最高的算法。如果仅仅讲解几道题目,即使再举一反三也远远达不到真正理解的程度。如果把动态规划的题目单纯地堆砌在一起,也只会让人越学越懵,陷入“一看就会,一写就废”的怪圈。

讲清楚一两道题容易,但把整个动态规划的各个分支讲清楚,把每道题目讲透彻,并用一套方法论来指导就有难度了。而这就是《代码随想录》一书的使命所在。



对于二叉树、回溯算法、动态规划等重点数据结构与算法,本书都总结了一套行之有效的方法论,系统性地解决这些算法的相关问题,并把相关题目按照由易到难的顺序编排,让读者循序渐进地征服算法的一座又一座高山。

03

本书特色

刚开始学习数据结构与算法,或者在力扣(LeetCode)上刷题的读者都有这种困惑——从何学起,先学什么,再学什么

很多人刷题的效率低,主要体现在以下三点:

  • 难以寻找适合自己的题目。

  • 找到了不合适现阶段做的题目,结果发现毫无头绪。

  • 没有全套的优质题解可以参考。

相信很多读者对此深有体会,所以本书将每一个专题中的题目按照由易到难的顺序进行编排,每一道题目所涉及的知识都会有相应的题目做知识铺垫,做到环环相扣。

建议读者按章节顺序阅读本书,在阅读的过程中会发现题目编排上的良苦用心。

本书不仅在题目编排上精心设计,而且在针对读者最头痛的算法问题上做了详细且深入的讲解。

  • 关于动态规划,都知道递推公式的重要性,但 dp 数组的含义、dp 数组的初始化、遍历顺序,以及如何打印 dp 数组来排查 Bug,这些都很重要。例如,解决背包问题时,遍历顺序才是最关键的,也是最难理解的。

  • 关于回溯算法,题目要求集合之间不可重复,那么就需要去重。虽然各种资料都说要去重,但没有说清楚是“树层去重”还是“树枝去重”——这是我为了说明去重的过程而创造的两个词汇。

  • 关于 KMP 算法,都知道使用前缀表进行回退,可什么是前缀表,为什么一定要使用前缀表,根据前缀表进行回退有几种方式,这些却没有说清楚,导致大家看得一头雾水。

  • 关于二叉树,不同的遍历顺序的递归函数究竟如何安排,递归函数什么时候需要返回值,什么时候不用返回值,什么情况下分别使用前、中、后序遍历,如何实现迭代法,这些都决定了对二叉树的理解是否到位。

本书同时针对每一个专题的特点,整理出其通用的解法套路。例如,在二叉树专题中,总结了递归“三部曲”来帮助读者掌握二叉树中各种遍历方式的写法;回溯算法中的回溯“三部曲”可以帮助读者理解回溯算法晦涩难懂的过程;动态规划中的动规“五部曲”可以帮助读者在一套思考框架下解决动态规划题目。

相信读者耐心看完本书,会对书中介绍的算法有更深层次的理解。

04

本书配套资源

本书统一使用 C++语言进行讲解,对于使用其他语言的读者,可以浏览本书配套网站:programmercarl(com 域名)——支持 Java、Python、Go、JavaScript 等多语言版本,同时一些题目还有动画演示,帮助读者更好地掌握本书内容。

在微信公众号“代码随想录”后台回复“算法学习”,可以加入算法学习交流群,并且获得本书配套学习资料,包含本书代码、简历模板、GitHub 地址、题目大纲等。

我会在 B 站“代码随想录”定期更新算法视频,其中 KMP 算法、回溯算法、动态规划等系列视频已经是有口皆碑的经典算法视频。相信可以帮助读者更好地理解相关算法。

限时半价,快抢!

广告

代码随想录——跟着 Carl 学算法

作者:孙秀洋

当当

 购买

上架首日卖爆京东仓库



口碑爆棚



广告

代码随想录——跟着 Carl 学算法

作者:孙秀洋

当当

 购买



用户头像

还未添加个人签名 2019.10.21 加入

还未添加个人简介

评论

发布
暂无评论
Homebrew大神面试Google被拒,只因写不出一道算法题