首先,我们要如何检查自己在算法方面是否做好了准备呢?

 

在我们CS501硅谷程序员直通车课程中,老师会对同学们的作业做出评估:

 

 

如果同学提交的答案在上图红框内的位置,那么说明他在算法方面还需要很大的提升。

 

 

如果同学的算法水平在上图的位置,那么说明他已经具备了去面试Google的能力,但这个能力还需要进一步加强,这是一个比较简单的评估方法。

 

接下来,我们介绍下如何进行自我检查算法是否做好了准备?

 

  1. 关于电面/OA
    1. 20min能做完一道新的Medium的算法题
    2. 一遍AC/ 瞬间定位Bug: 杜绝低级错误(tab缩进/空格缩进)
  2. 关于Onsite
    1. 白纸/白板写题思路依然如泉涌
    2. 肉眼Debug能够火眼晶晶
  3. 整体
    1. 除了结果正确外,还会考虑性能问题
    2. 是否能够考虑到:边界问题,非法输入问题
  4. 或者
    1. 如果你通过一道题目的平均提交次数在1.5次左右
    2. 如果你提交的代码能够击败90%以上
  5. 杜绝
    1. 使用功能比较齐全的编译器:IDE自动纠错问题,鼠标点击定位问题

 

第一,对于电面和OA,如果能在20分钟内做完一道新的Medium算法题,说明你在这方面的能力差不多是ok的;如果你在电面的时候能够一遍AC(accpeted)或者瞬间定位出Bug,说明你也有足够的能力。但需要注意,一定要杜绝低级错误,包括tab缩进还是空格缩进的问题。

 

P.S.:关于缩进问题,一般使用空格缩进,除非用的是Python,可以自己把一个tab设置成两个space或四个space,其他情况下用空格即可。业界工作习惯上一般都是这样,如果用tab缩进的话,在Windows、Mac或者虚拟机等不同的电脑上呈现时,看不出到底有几个空格。不过刷题的时候这个问题可以不用太讲究,等大家到公司工作之后,工作组里会有具体的要求。

 

第二,关于Onsite面试,我们要如何检查自己是否准备好呢?Onsite与OA不同,大多情况下都是用白纸或白板写题,因此这个能力一定要多加练习。如果能保证在白纸或白板上写题时,依然思如泉涌,那说明能力是过关的。

 

整体来讲,在保证结果正确之余,大家一定还要考虑性能、边界以及非法输入的问题。

 

另外还有一种自我评估的方法:如果你通过一道题目的平均提交次数在1.5次左右,或者提交的代码能够击败90%以上,那么说明水平是足够突出的。

 

最后还要强调,大家一定要杜绝使用功能比较齐全的编辑器。如果编辑器有自动纠错问题,那么只要用鼠标一个一个去点击定位问题,这样一看能力就是不太够的。

 

说到这里,还是建议大家多去看一看别人的solution,看一看总结好的优化解法是什么样子。此外,一定也要做到自己能够去优化,比如我们BitTiger算法班的piazza答疑平台中,就有非常多学员的答题是build on,你可以看到别人代码的思路,以及一些细节的技巧,然后把它们记下来,很多是一个人刷题的时候想不到的,当有人跟你一起,就能看到别人的思路和技巧,还可以把这些作为将来面试时的谈资。

 

下面我们再来看一下,算法面试准备所能用到的工具与网站:

 

  1. Geek for Geeks:里面有大量的算法题,可以交流算法的解法,但题目有点难,所以不用花太长时间研究。
  2. HackerRank:里面有很多Challenge,如果有时间,可以去参加比赛练习一下速度。
  3. Interview Cake:这个网站很有意思,可以算做美国人的Leetcode,虽然是收费的,但也有很多免费的题目,大家可以参考。

 

接下来是我们要讲的重点——如何讲清一道算法题?

 

在总结了大量学员的面试经历、进行了大量市场调研后,我们总结出了以下六个步骤,相信能够帮助大家梳理自己的讲题思路。

 

 

首先大家都知道,面试官都是刷过题的人,他对你知道什么、不知道什么,其实是心知肚明的,所以有时候会故意把你知道的东西挖个坑来问你。

 

比如面试官给了你一道binary tree的题目,让你判断它是否是一个valid的binary tree,拿到题你可能会觉得很简单,但问题是你不知道面试官到底想问什么。这时候一定要先问清楚,到底输出让你返回的是true还是false。再例如,BST里到底允不允许有相等的数字?或者BST到底是左边放大的值还是右边放大的值?

 

这些都要在最开始做题时通过与面试官交流,才能确保答题的准确性。

 

如果在面试中碰到了难题该如何破解呢?

 

首先大家需要知道,面试过程中面试官看重的是思维过程。所以即使在面试中题目没有做出来,也仍然有可能拿到offer。另外大家心里也要明确地知道,并不是所有的题都做过,所以做不出来非常正常。

 

具体地,面试中遇到难题有“六个注意”:

 

  1. 一定要和面试官交流具体的题目内容,这点上文中提到过。
  2. 告诉面试官:这道题很有意思,我以前没有接触过,这样就体现出你在现场是重新做这道题目。
  3. 问面试官有没有限制条件,说出自己大概的想法。
  4. 列出几个possible的算法和数据结构,看看面试官的反应,从中获取hints,在面试中,向面试官要hints的做法其实是应当鼓励的。
  5. 能写多少写多少,要一直和面试官交流,察言观色。即使在没有思路的情况下,如果能在面试官的提示下解出来,也仍然是可以接受的。另外大家要知道,面试官在面试后也需要写很长的报告。如果你一行代码都没有写出来,那么他也无法写报告,所以面试官一般还会引导着你去答题的。
  6. 看时间限制。

 

在算法面试过程中,遇到新题难题不要慌,积极思考看破题目本质,本周BitTiger沁原老师将为大家介绍如何用“套路”解开各类最新FLAG面试题型,欢迎大家点击图片报名参与。