从微软面试官角度谈面试准备2

avatar 186181
butterwang
15142
39
上一篇帖子我浅谈了从微软面试官角度如何准备面试以及面试的基本流程(原帖 instant.1point3acres.cn
没想到收到了很大的反响,我想借这个机会再深入谈一下如何准备算法面试,以及在面试的过程中如何回答算法面试题。

1. 算法面试,就是coding interview,对于大部分人来说是面试的重中之重,所以这个帖子我重点谈一下算法面试。如果以后有机会,我可以从面试官的角度谈一下behavior questions和system design interview。
2. 我是从面试官的角度来讨论这个问题,并不限于微软面试官。从面试官的角度来说,算法面试的目的就是获得足够多的求职者的signal。这些signal 一般包括 coding skills, cs fundamentals, communcation skills, potentials, etc.. 我们一般都是在这几个地方打分。当然最后的decision还考虑到了一些别的原因,比如我们觉得你是否fit 这个职位,以及你表现出了多大的热情想要加入我们。
3. 所以这里面一直存在一个长期的误区,就是很多求职者认为我题目都答对了,也bug free了,为什么我就挂了?是不是被面试官黑了?可能情况还真不一定!记住,算法面试只是一个手段,我们不是招一个会做题的机器,否则直接做OA就发offer就行了;-). 我们最后的目的是通过算法面试,来获得我们想考察的signals,并考察是否达到了公司的要求。所以并不是题目答对了就保证你能通过。当然,题目做的太差,基本上也会挂掉. :-D
4. 这里面我就重点谈谈面试中应该怎么正确的回答一道算法面试题,以及在平时刷题的过程中应该如何练习。 第一,当你拿到一道题目的时候,一定要和面试官在三确认三点:输入,输出,以及examples。 很多面试者一看到说这个题我做过,心中狂喜,然后就直接开始说思路,写代码。殊不知这已经掉到了面试官故意挖的坑中了,基本上面试就凶多吉少了。很多时候,我喜欢去找leetcode的题目,自己稍加变形,可能解法就有所不同。作为一个面试官,我想考察的是一个面试者如何deal with ambigurity的能力。所以,拿到一道题目,不管做没做过,一定要先把题目搞清楚,多要几个例子,确定你把题目理解对了。我见过太多的情况是面试者他以为他把题目理解对了,然后就一顿猛写,最后发现题目都理解错了。这种人一般都是必挂的。可想而知如果我招了这种人做同事,他连需求都没搞清楚就自己闭门造车,最后浪费了大家宝贵的时间和资源做了无用功。搞清楚题目的过程大概5-10分钟
5. 好了, 在你和面试官确认了题目以后,你就可以开始说思路了。这里面我加过太多的求职者直接上来就写代码了,这就又掉到另一个坑里面去了。communication skill不行。拿到一个题目,一定要先把思路说清楚,最好用一个test case,画一个图把你的方法说清楚了。注意,这是重中之重的地方。一定要假设面试官不懂这题怎么做,你的目的就是要把他讲明白了!!!我面试的过程中如果有谁直接上来写代码我都会叫停,让他跑一个例子把思路说清楚。这里面一半以上的人可能都说不清楚。那如果说不清楚最后代码还迅速写出来了呢?很显然我们就会怀疑这题目你是背了答案。这时候我一般都会follow up一下,基本上就原形毕露了。所以,大家在平时准备的过程中,一定不要贪求刷题的数量,而是说每刷一道题,都要把这个题目先讲清楚。另外, 我不建议上来直接写代码还有一个原因是一道题目可能有好几种解法,你怎么知道面试官想让你写哪个解法呢?所以,在最终写代码之前一定要沟通好了,确保他非常理解你的方法,并且给了你green signal写代码。这个过程一般10-15分钟
6. 最后,终于可以写代码了。如果已经有了前面的几步,最为一个面试官我一般心里都已经有数这个人能不能把代码写出来。这里面主要要注意的是写代码要快,要一气呵成,不要来回修改,尤其是对senior 以上level的人来说,如果你50行左右的代码5-10分钟写不完,我基本上就会觉得你coding skill不行。对于new grad,这个要求可以降低一些,我们甚至都不要求你能bug free的写出来。我的hm经常在debrief meeting问大家,虽然这个new grad最后代码没时间写完,但如果你再给他一些时间,你觉得他能写出来吗??这就是衡量一个人potential的地方了。如果前面的两部你都答的不错,写代码真的其实没那么重要,因为我已经知道这道题你能做出来。但是对于senior以上的人来说,coding skill是考察的一个重点,因为我们希望你来了能直接干活。我有时候面试的时候甚至会直接告诉candidate这个题大概思路是什么,你来写出来。注意,你写代码的代码直接出卖了你的能力。我基本是通过你写的前 3-5行代码心里就有数了。写代码应该控制在10分钟左右。
7. 写完代码然后干什么,一定要跑test啊。。。这个简单的道理很多求职者都会犯错,很多人写完了就不说话了,或者就说好了。。好心的面试官会提示一下要不要跑个测试,不是善茬的面试官就把这个直接写在了feedback里面。。。
8. 最后,面试官一般都会留5-10分钟时间让你问问题。这个还是挺重要的,一般是给求职者一个机会来展现你对这个职位有多少的兴趣。所以还是要好好准备一下。千万不要说我没有问题(我还真见过不少国人new grad这么说,我当时就会很尴尬。。),或者问我hiring process (这个你应该去问recruiter啊。。。),以及有些人直接要feedback(这个就非常不专业了,我也不会正面给你)。比较好的问题比如问问平时都做些什么项目,用什么技术之类的。或者问问公司文化之类的。

所以,说了这么多,核心的问题是题做出来了远远不等于通过面试。很多人以为写代码是最重要的,其实面试中的沟通才是最重要的一步。

最后,住大家都拿到心仪的offer!!
  • 369
39条回复