首先是关于简历以及behavior的问题。简历上的经历自己一定要在面试前好好地过一遍,并且在面试官问的时候,可以两到三句话简短地把做了什么,有什么样的impact,展现了自己什么样的技能,都说清楚。至于behavior的问题,网上有很多面经,每种题目也都要准备好自己的回答,着重突出leadership,communication,collaboration等软实力。事例也不一定全是学习方面的,像我当时也会说关于运动或者各种活动的事例。
然后是coding的题目,在面试官提出问题以后,不用急着回答,一定要先确认所有的input,output,格式,和corner cases的情况,特别是矩阵、字符串、数组这一类的题目,甚至可以举几个例子确认。然后可以请求一两分钟的思考时间,想好后和面试官阐述你打算用什么样的算法。那有的时候没有一下子想出很好的算法怎么办呢?可以先尝试用暴力解法,为自己争取更多的时间,一步一步想可以怎么继续优化。有些同学可能在tech面试中运气很好,遇到了自己做过的题目,也千万不要太激动,还是要按照上面的步骤来,让面试官充分理解你怎么得出这样算法的过程。
然后说一下关于corner cases,有什么可以注意的呢?首先,很多tech面试的时候会假设没有null,zero,overflow的这种情况,但是一定要和面试官表明你考虑到了这样的case,然后请问这里是否可以忽略这种情况。一个良好的corner cases的考虑习惯也一定程度上决定了面试官对你工作能力的第一印象。而且看到题目的时候就要考虑这些情况,千万不要等到后期面试官指出了这样的bug,再去考虑corner case。
在coding的过程中,很多小伙伴都会忘记非常重要的一点,就是交流,这是北美面试的一个重点。同学们在正式面试前可以去参加几次mock interview,练习一遍写代码一遍解释的multitask能力。在面试过程中也要及时和面试官沟通,并且把选择这样写的好处都说出来。在编程中的命名也很重要,一般用比较简短但是明了的取名法则,面试官可以更好地理解每一个变量存在的意义。写完之后,一般选择一个common case和一个corner case和面试官一起确认你的答案,让面试官更相信你的算法是正确的。关于bug的影响,如果自己在go through中发现了,要及时去修改,并且承认当时没有考虑到这个情况的原因,比面试官指出要好多了。就算自己一下子没有想出优化的算法,好好按照上面的步骤用暴力解法也比什么都没写出来好太多了,毕竟ng面试更加考核的是你的编程习惯和潜力。
最后就是反问环节啦,这也是最后给面试官一个好印象的机会。像我自己用过的问题有,how much freedom do you have in the workspace? 只要让面试官觉得你在乎这个岗位,并且不要太普通就好啦。