FAANG技术面试4大惯用手段如何破解?

FAANG技术面试4大惯用手段如何破解?

让我们穿上西装,把头发梳成大人模样,来聊一聊那些让人闻风丧胆的技术面试。

大部分工程师都讨厌白板面试,当你看到周围有工程师在网络上哭泣,觉得自己面试完了,他们很有可能刚刚经历了白板面试。然而,即使工程师们有诸多抱怨,白板面试还是屹立不倒。很大一部分原因是,我们还找不到更好的选项来替代白板面试。

那么,究竟有没有更好的选择呢?首先,让我们来看一看,白板面试是不是最坏的选择呢?

SpaceX, MacOS/Windows, 和 Facebook都有很多上述特征的工程师。如果在这些公司面试,很有可能经历白板面试。

作为一个求职者,我其实是喜欢白板面试的。我知道我应该怎么准备。大部分算法问题都属于以下几个类别:

Ø  数组/字符串

Ø  二叉树

Ø  链结串列

Ø  分布式文件系统/广度优先搜索

Ø  回溯法

Ø  动态程序设计

知道了这些类别,我就能好好学习并准备白板面试。

同样,也是因为这些已知的范围,白板面试不是最好的选择。因为它非常靠运气和背诵,如果你花时间准备的内容刚好考到了,就能轻松通过白板面试。然而,不是所有人都愿意花很多时间来学习算法的。而且,会了这些算法就能成为一个好的工程师吗?并不一定。

接下来,让我们看看其他面试选择。

编程测试中,面试者可以使用自己的电脑,可以远程进行编程,这使得它比白板面试更简单。大部分题目包括字符串处理或简单算法,都在工程师们的射程范围之内。

缺点是这个方法非常要求功能性。在我的面试中,我就碰到了两次coin change problem。一次是白板面试,另一次是在编辑器上。在白板面试中,我只需要解释我的解决方案。但是在编程测试里,我需要写边界测试,并保证我的方案能够运行。

我喜欢白板面试的很大一部分原因是,它足够宽容。只要你能解释的思路,面试官就很可能让你通过面试。但很多人更支持编程测试,他们认为公司付我们钱,就是为了让我们写代码。但在30-45分钟里写出一个可行的代码难度非常大。如果在面试中有些小紧张,造成了一个小bug,编程时间可能会大大增加。

编程测试同样还有着白板面试的毛病,那就是大部分问题考的都是算法。再加上可行性的压力,这些问题会变得很难。如果本来就不喜欢算法的工程师,编程测试就是pain in the ass。

很多工程师都喜欢take home assignment,因为它的截止时间一般比较灵活,并且求职者可以真的coding。编程者无疑更喜欢这种方式,而不是在白板前被沉默地judge。

然而, take home tests也有明显的缺点。首先,涉及的题目很容易找到。很多公司都在  GitHub上运行它们的测试。如果你在GitHub上搜索“Challenge” 或者 “test“,你能找到很多公司的面试真题。懂的人懂。这就意味着,我们还能找到,别人写好的答案,并且copy这些答案。很多工程师都在GitHub保留了他们take home assignments的答案。公司确实可以换题,但如果每两个月都要因为泄题而改变一次面试流程,真是很疲惫。

其次,题目的难度和所需要的时间非常不确定。我在找工作的过程中,曾经有4次碰到了take home assignments。有三家公司说,他们的题3-5小时就能做完。但我却花了几天?因为这些题目通常都关乎于一个特定的领域,而我需要去搜索很多API文件来做这个项目。第四家公司给了我一个可能要花费一周的项目,让我两天完成。因此,我不吃不喝不打啵儿,才做完了这个项目。

但总的来说,我还是喜欢take home assignments的,但是面试者需要注意,让应聘者进行的小项目必须符合他们应聘岗位的工作内容,并且不能让应聘者不吃不喝来做这个项目。

很少有公司采用项目面试,但像 Basecamp 和 Automatic 这样的公司确实采用了这一面试流程。这样的面试最能检验面试者的技能和团队合作能力。公司会直接和面试者合作,并观察面试者如何在对团队中工作。面试者也能评估公司内部的环境,来决定他们是否想在这个公司工作。

这样看起来,这种面试会创造一种双赢的局面。但如果我是一个面试者,我一定不会参加项目面试或作为契约工工作。这样做对于求职者来说,弊远大于利。

刚开始工作时,都会有一段时间很难熬,因为我们要让自己适应新的团队,新的文化,新的codebase。但作为项目面试的面试者或契约工,你在经历了新人期之后,很可能最后连工作都没有,是不是很心碎?

而且想想这种工作情况下的压力?你的每一次互动,你问的每一个问题,都会被评价。学校里没有的“stupid question“在这种情况下是真实存在的。更槽糕的是,三个月合约一到期,如果你被要求走人?

最后,只要你答应了项目面试,或作为合约工进行工作,你就失去了协商offer的资本。公司认为你已经想要这份工作想得要命,所以不会再给你更多的benefits。你只能得到你目前拥有的,即使这并不是你想要的。所以,我宁愿做100次白板面试,也不愿意进行一次项目面试。

答案是,It depends。所有的面试都无法同时兼顾速度、努力和准确度。公司需要明确自己更注重哪个方面,从而决定他们的面试方式。SpaceX的面试肯定完全不同于纽约的start up。SaaS应该让他们的面试者写动态编程算法。

最后,如果工程师们认为某一种面试形式不能很好地检验应聘者的能力,他们应该站出来提出建议,改变面试流程,为公司招到更多合适的人才,也为自己寻找更合适的团队成员。

原文作者:Sun-Li Beatteay

翻译作者:喝豆奶的Narcia 

美工编辑:喝豆奶的Narica

校对审稿:即将offer多多的卡里

原文链接:https://medium.freecodecamp.org/lets-talk-about-whiteboarding-interviews-fed040e20cc9