谷歌资深工程师:为何说算法能力决定Offer质量

腾讯、百度阿里等国内的一线名企,在招聘工程师的过程当中,对算法和数据结构都会重点考察。但算法易学难精,让不少程序员都望而却步,面试时总败在算法这一关,拿不到好 Offer。前端

 

本次IT君采访到了 Google 资深软件工程师苏勇,一块儿花10分钟看下他是如何学好算法,冲击谷歌 Offer 的。程序员


嘉宾介绍面试

苏勇   算法

Google 资深软件工程师性能优化

现负责 Google Maps 产品研发工做,并参与多个开源软件的开发和维护。微信

做为力扣(LeetCode)骨灰级用户,苏老师曾贡献超过 200 套算法题目的解题方案,得到不少技术同行的赞同和分享,另外在知网发表过多篇算法相关论文。数据结构

做为 Google 面试官,苏老师在负责技术候选人的考察、设计面试考题与评分标准等重要环节,拥有大量技术人才选拔经验。数据结构和算法

 

 

如下为专访内容整理性能

学习

IT 君:您是如何拿到 Google 的 Offer 的?能简单介绍下当时面试的场景吗?都考了哪些算法题? 

 

苏老师:从面试完毕到拿到正式的书面 Offer 恰好是一周的时间,拿 Offer 的时间很快。可是为了准备 Google 的面试,我却作了充足的准备。

 

在我肯定本身要去面试 Google 的时候,我正在 Box 带领团队开发一款全新的产品,因此我给本身预留了半年的时间作最后的冲刺。一方面,我得保证 Box 的产品进度,一方面,我也得保证本身有足够时间复习力扣(LeetCode)上的算法题。我将题目进行了分类,按照公司、题目热门程度、难度进行了排序,定下所要复习的题目数量,计算出每周必需要完成的题目,而后严格执行。皇天不负有心人,最后我如愿拿到了 Google 的 offer。

 

Google 面试注重交流以及可否迅速地将解题思路转换为代码的能力。每轮面试45分钟,我被问到算法题和系统设计题,虽然不少问题都不是力扣(LeetCode)上的原题,可是不少具备类似性。在每轮面试中,面试官问的第一题,基本都是热身,要求你在比较短的时间里写出代码,然后续提问通常都会花比较多时间去讨论。记得有一轮面试,我最后两分钟才找到思路,到最后一刻才按照面试官的要求把代码写了出来。

 

回想起来,能拿到 Google 的 offer 是幸运的也是幸福的,因此很但愿能和你们分享经验。

 

IT 君:算法在您的成长里程碑中有什么助力?

 

苏老师:算法让我脱胎换骨,不只帮助我找到了求之不得的工做,更在平常的工做生活中起到了很是多的做用。好比跟谷歌的工程师们讨论问题,咱们会就算法的时间和空间复杂度进行探讨,分析各类解决方案的利弊。另外,我一直保持书写简洁代码的习惯。在 Google ,代码的可读性是审核代码的重要环节,若是代码写得很难懂,是很难经过审核的。

 

掌握数据结构与算法,让我对面试再也不感到恐惧,也能让我在分析问题的时候拥有更多的思路和方法。

 

IT 君:您认为,对数据结构和算法不重视,对平常工做有影响吗?

 

苏老师:确定是有的。

  • 首先,程序员这个群体也是有金字塔结构的。若是连基本的算法和数据结构都不会,基本上就比较底层,底层就意味着低薪酬。付出一样时长的脑力劳动,赚得就会比别人少。
  • 其次,做为团队里的一员,不少时候不光要作好本身的本职工做,也要和其余团队进行技术问题上的沟通,若是没有扎实的算法和数据结构基础,很难及时发现问题并提出独到的看法。
  • 另外,技术栈自己天天都在变化,同时也会随着不一样行业不一样公司改变。可否快速适应新技术和新环境就显得尤其重要。这就要求你必须具备以不变应万变的的计算机思惟、算法思惟和逻辑思惟能力。

 

IT 君:算法好的程序员能够有哪些发展方向?

 

苏勇老师:我以为算法好,只能表明你对程序的理解比较好、能更深刻的看到问题,并进行优化。这种特质是优秀的,可是要上升到职业发展的话,还应该在各个层面去磨练。

 

好比我常常看到身边优秀的程序员但愿尝试作经理,那么他们得先从 Tech Lead 作起,学会如何领导一个项目、学会如何跟项目经理、设计师甚至是跨部门团队的成员进行有效沟通。

 

算法好的程序员有一个得天独厚的优势:一旦对问题进行技术上的分析时,他们总能洞悉到项目经理和设计师没法看到的那一面,会提出建设性的意见。

 

IT 君:为何面试官都喜欢问算法和数据结构呢?

 

老师:数据结构与算法能力的考核在以 BAT 为表明的国内大厂,乃至 Google 等硅谷高科技公司的面试里占了至关大的比重。总结起来,考察的缘由有四:

 

  • 算法能力可以准确辨别一个程序员的技术功底是否扎实;
  • 算法能力是发掘程序员的学习能力与成长潜力的关键手段;
  • 算法能力可以协助判断程序员在面对新问题时,分析并解决问题的能力;
  • 算法能力是设计一个高性能系统、性能优化的必备基础。

 

我本身也很是看重候选人的解题思路,以及能将思路迅速地变成代码的能力,好比我喜欢问一些二叉树相关的题目,这些问题的解法体现了面试者对数据结构的熟练度,以及分析算法复杂度的能力。

 

IT 君:您认为面试前刷算法题重要吗?如何刷题比较好?

 

老师:若是是去面软件工程师的职位,刷题我认为是必须的。在我看来刷题就像是高考前的冲刺,有2个好处:首先,能够起到巩固算法基础的做用;其次,能够帮助本身对某些算法进行总结和整理,达到融会贯通的效果。刷题的方法因人而异,因时而异。我本身分为这几个阶段:

 

1.准备面试初期阶段

我是按照力扣(LeetCode)的算法知识点进行分类训练,好比,我会先看二叉树相关的题目,由于它在前端面试中是很是热门的话题;以后,我会看图论,由于它是二叉树的扩展;再接下来,我会看递归和回溯,由于它们是算法面试里常常被问到的知识点。经过一段时间的专一练习,我能够整理出一套解决相关问题的模版,帮助我理解记忆。

 

2.准备面试的中期阶段

开始针对各个公司的热门题目进行复习。因为有了第一阶段的积累,我开始针对心仪公司,有目标性地刷题目。这个阶段有点相似于高考的模拟考,看看本身的水平可否达标。若是当我看完了题目,并且在10分钟以内没有任何头绪,我会看答案,而后吸收高手们的思路,最后思考可否优化。

 

3.最后的冲刺阶段

把精力放在平时作得很差的题目上。这个阶段主要是给本身树立信心,我会快速浏览以前作过的题目,整理思路,把一些经典的题目写在黑板上或者纸上。若是是太难且不是很热门的题目,我是不会花费太多精力的。

 

这里强烈推荐你们在纸上和黑板上练习写代码,这对书写清晰可读的代码是很是有帮助的,试想一下,若是面试官看不懂你写的代码,他们怎么跟你沟通呢?

 

IT 君:有没有什么提升算法面试经过率的好方法?

 

老师:算法面试,有时候靠“运气”,但我想说的是,“运气”是实力的一部分。书山有路勤为径,努力提升实力真的没有捷径。算法面试的经过率每每和你面试过程当中发挥的状态有很大关系。

 

如何让本身正常发挥呢?我会先拿几个小公司或者独角兽公司来练手。一方面,试试本身的能力;另外一方面,尽可能拿几个offer保底,未来好跟大公司讨价还价。

 

最重要的是把本身的状态调整到最佳,包括和面试官交谈时的状态、是否能清晰地分析问题、如何把本身的思路完美地告诉给面试官,最后是书写代码的水平,也就是可否能流畅地写出可读性高的代码。

 

IT 君:做为 Google 的面试官,您是如何考察求职者的?什么样的求职者容易被选中?

 

老师:45分钟的面试时间真的颇有限,我通常从如下方面考察求职者:

 

一、专业领域知识

这点能够从面试开头的谈话中得知。通常面试官都具备面试职位相关领域的知识,贴近这个专业知识聊天能够说是彻底加分的点。

 

二、算法知识

经过半个多小时的解题过程,可让我看到求职者是否能正确地理解问题、剖析解题思路,并迅速写出代码。

 

其实,没法在规定时间内完美地写出代码并非世界末日,只要求职者对问题分析正确,把握了正确的思路,代码能清晰地看到输入和输出的逻辑、结构,最重要的是能迅速地将思路转变成部分代码,就能让我很满意了。

 

三、总体表现

另一个面试官比较看中的方面就是:面试官是否愿意和求职者未来一块儿工做。

 

若是求职者的算法知识无可挑剔,可是在解决问题的过程当中缺少和面试官的交流,甚至对面试官的疑问不屑一顾,那又怎能让面试官放心跟他一块儿工做呢?因此面试者的沟通能力也是一个考察点。

 

IT 君:您是力扣(LeetCode)的骨灰级用户,贡献过许多算法面试问题的解题方案,为何要在算法方面下这么大功夫?为何选择帮助广大程序员提升算法能力?

 

老师:之因此要在算法方面下大功夫,主要是由于算法在国内外大厂的面试里都占了至关大的比重,空有一身所谓的“经验”,功底却不好,那么很难从顶尖的大公司里拿到好offer。

 

Linux 之父 Linus Torvalds 说过一句话:"Talk is cheap. Show me the code." 中文翻译就是,能说算不上什么,有本事就把你的代码给我看看。

 

 

正如我前面提到的,算法面试除了考察你的基本功是否扎实以外,更重要的是要看看你能不能迅速地将思路转化成没有 bug 的代码,若是没有必定的功夫,是很难在短期内达到高要求的。

 

力扣(LeetCode)帮助了我不少,我从这个平台上丰富了本身的算法知识,从广大网友的各类精妙的解法中体会到了快感,这让我再也不害怕算法面试,这个平台让我在求职道路上实现了本身的梦想,做为回报,我也但愿尽本身的绵薄之力,将个人多年实战经验和刷题心得分享给你们。

 

IT 君:感谢苏勇老师的分享!

 

由拉勾联协力扣(LeetCode)独家合做邀请到 Google 苏勇老师共同打造的《300分钟搞定算法面试》课程上线啦!(戳蓝字连接了解详情)

更可联系微信号kaiwubzr3  领取10本算法相关电子书 、加入算法精进群~

相关文章
相关标签/搜索