0 Multi-part questions
真理: 一般一个1小时的面试,都会有2题。如果只有1题的话,那么它大概率有一个followup。如果它没有followup的话,那这道题一定是一道hard题。如果它不是一道hard题,那这个公司的bar肯定非常低。面试前可以跟面试官确定下有多少题,时间管理一下避免只做完1题就没时间的情况。
.google и
1 Clarify requirements if they’re vague. 1point 3acres
不需要故意去做这一步,但是你拿到题后要认真理解题意,有什么assumption或者constraint都问清楚,不然想思路的时候或者具体写代码会出错导致浪费时间
2 Discuss your high level approach
理解题意之后,说说你觉得这题应该怎么做,这是最基本的。如果你不这么做直接写代码的话,我会跟candidate说您要不先解释下想用啥approach? 如果candidate瞎说两句还没说清楚就自顾自地coding的话,即使他最终做出来了,也是一个communication的red flag。
如果可以的话,在这个部分讨论2种approach,以及tradeoffs。当然在写完题之后再给alternative approach也可以。
做这个是事的原因是,有的时候candidate的approach可能不太对,面试官知道后可以引导你或者指出为什么这个approach不对。或者有的时候candidate的approach对这道题是对的,但是用了这个方法后followup就没法做。有的题面试官是会心里面有一个他想要的approach的,这是不可避免的,题就是这么出的,你不往这个方法做,followup没法继续。不让你用某种approach真的不是想坑你。。
3 Be familiar with language of your choice
没什么好说的,最基本的要求。-baidu 1point3acres
4 Give time/space complexity analysis
有的题是明显的算法题,做完之后给个时间/空间复杂度。
如果是那种比较偏实际应用的题,面试官没问的话大概率就无所谓
. 1point 3acres
5 Write fewer bugs.google и
尽量不要有这么多bugs,我看过candidate写了50分钟下来平均10分钟一个bug看的我惨不忍睹.google и
这种代码就算大体思路是对的,最终也是不能给pass的。
6 Demonstrate Debugging Skills
有bugs是正常的,我面试里面,从来没有一次是一遍过,除了2sum lol。
但是每次有bug我都会说”ok, let’s try to debug this, let’s add a print statement here blahblahblah”
一顿操作下来把bug找出来,修好,这就把一个有bug的bad sign转换成了”candidate debug能力很强”的good signal
7 Test your code. 1point 3 acres
写完题代码大概自己觉得对了之后,写几个test case,各种情况正面反面都test一下。
我有一次面试完后写了非常complete的test cases,正面反面90%的情况都枚举了一遍,最后面试官很开心地说”Nice! I m confident that your code will work!”。这种时候就很明显这个面试已经pass了。
有的candidate写完题后就跟我说, “ok i think this code would work”,
我心里一般会想 你咋知道。。嘴上: “nice! Let’s write a few test cases to see, let’s start with the example test case we had”. Χ
写完代码不主动写test case测试的,也是一个red flag,特别是我不确定你的代码真的对的情况下。
..
我觉着如果面试中所有题都做出来了,而且上面的8点都做到了,其实是很难fail的。
也有小概率情况面试官自身有问题,跟他交流很困难思路很刁钻之类的,遇到那种面试官就躺平吧。