八、现场面试

原文:Chapter 8: On-site Interviews

译者:飞龙

协议:CC BY-NC-SA 4.0

自豪地采用谷歌翻译

这是我们的“谷歌面试准备系列完整指南”的第八章。

在讨论电话面试之后,我将在本章中谈论现场面试。 对于大多数公司来说,这是你将要进行的“最终测试”,一旦你通过了,你会得到这个雇用。

与此同时,现场面试也是最艰苦的一步,你将在一天内有多场面试。 毫无疑问,现场面试在总体上更具挑战性,许多人真的害怕它。 我将在本章中解决所有这些问题,并像以前一样提供非常实用的技巧。

现场面试流程

没有充分理解规则,你永远无法赢得一场比赛。以 Google 为例。在那一天,你将总共进行四次技术性面试(通常是上午两个,下午两个)。在午餐时间有一个“午餐面试”,但这不是一个真正的面试,因为你没有被评估,这只是一个与 Google 员工聚会的机会。

在这四个编程面试中,至少有一个是系统设计面试。你一定会在白板上写很多代码,并与面试官进行激烈的讨论。面试形式与电话面试差不多。通常将在 45 分钟内询问两个问题,并且需要可靠的代码。所以要为非常辛苦的一天做好准备。

很多人对评估过程也很好奇。面试结束后,每位面试官都会写下一份报告,其中包含了 45 分钟的所有细节和讨论,包括你的代码。该报告可以非常详细地说明,在每个部分花费了多少时间,并且在提示之后你的反应将被包括在内。招聘委员会将根据所有这些报告进行招聘决策。

这个过程对于 Google 来说是独一无二的,而像 Facebook,Airbnb 和 Uber 等大多数顶级公司都有非常相似的流程。

电话面试 VS 现场面试

整个过程或多或少是一样的,所以你不可能对任何事情感到惊讶。 一些主要差异包括:

面对面交流意味着整个过程可以更加顺畅,但同时很多人更容易紧张。 如果你可以和你的朋友进行一些面对面的模拟面试,这可能会非常有帮助。
问题稍微困难一些。 你仍然有相同类型的编程问题,然而,最常见的误解是,它会比电话面试问题困难得多。 我会尽快详细讨论。
至少需要一场系统设计面试。

对于现场面试中我应该练什么样的问题,我只想说就像电话面试一样(系统设计面试除外)。 你并不需要找到现场面试的具体问题,事实上,在这两种情况下都会提出很多问题。

“问题比我想象的要容易得多”

这是现场面试中最常见的评论。 但是,这也是大多数人不能通过面试的原因。 让我详细解释一下。

最大的误区之一是 Google 的现场为什么比电话为什么要困难得多。 当然,有时候可能会有一些难题。 但总的来说,这只是稍微困难一点。 许多面试官仍然会问如 2-sum 的问题,来获得候选人的最初想法。

在 Gaino 上,很多用户抱怨说模拟面试太简单了,尽管他们没有通过。 他们不能相信问题是“容易的”。 但实际上,面试官正在将类似的问题用于真正的面试。

让我告诉你一件事。 谷歌面试中最困难的部分(与其他公司一样)不是提出解决方案。 很多人可以在一定程度上解决这个问题。 但要获得好成绩,你需要:

  • 拿出最佳的解决方案
  • 编程干净和无错的代码
  • 在时间限制下完成这两件事情

第二点和第三点是最具挑战性的部分,大多数候选人由于这两个原因而失败。 许多人声称问题比他们想象的要容易得多,但他们仍然没有快速地提供无错代码。

从面试官的角度来看,提出没有人能解决的问题是没有意义的。 为了评估候选人,我们需要看到分析过程,代码以及他/她能够多快解决问题。

任务:

  • 更多关注“基本”问题而不是超级难题。 只要在 Glassdoor 上对 Uber 面试问题进行一点搜索,就可以了解哪些类型的问题很受欢迎。 你很快就会意识到,他们并不像大多数人所想的那样艰难。
  • 练习时要特别注意编程。 为每个问题写下可靠的代码并跟踪时间。

白板

对于大多数公司,你需要在现场面试的白板上编写代码。 就个人而言,我觉得这很不舒服,甚至与编写代码共享工具相比。

一个问题是插入非常困难。 通常情况下,你会发现你在开始时缺少一个简单的检查,你需要插入一个小的if块。 但是,你绝对不能在白板上做到这一点。 同样,如果你的代码是多余的,你不能通过复制和粘贴来节省时间。

如果你之前没有这样做,只是试着在一张纸上写代码,你很快就会发现它很糟糕。 因此,经验法则是提前练习。 是的,你需要在现场面试之前在白板上练习编码。

你可以在亚马逊上买一个非常便宜的白板,或者至少你应该在纸上练习编码。 同样,理念是尽可能接近面试,因为你不想在这一天感到惊讶。

这里有几个提示:

写之前要仔细考虑。 很难撤消你的代码,确保每一行代码都是你想要的是很重要的。 这实际上是一个非常好的做法。 许多人倾向于在思考时进行编码,这从来没有奏效。 事先要有清醒的想法。
工整的写作。 我不会推荐连笔。 作为一个面试官,我经常发现它是无法辨认的。 有些人可能会认为可以节省一些时间。 但是,你将花更多时间来解释代码。 加速的最好的策略是要有清醒的思路,确保顺利实现。

沟通

我在之前的文章中多次提到过它,我只想在这里强调一下几点。

  • 整个面试是一个讨论过程,在现场面试中更是如此。这与考试完全不同,因为你需要与面试官保持沟通。把这个过程当作一个正常的讨论,与你们的同事在一起讨论同样的问题。
  • 把想法说出来。谈论你脑海中的任何事情,在讨论之前你不需要有任何具体的想法。对你的话要小心谨慎,但对代码更加谨慎。大多数人采取相反的做法而没有通过面试。
  • 随意谈谈你卡在了什么地方。面试官真的很乐意通过给你提示或告诉你你不是在正确的方向来帮助你。不要担心暴露你的弱点,即使你不承认也不会有任何进展。相反,放宽心态,面试过程将会更加愉快。

总结

同样,不要指望自己能够立即完成所有这些技巧。 面试前你一定需要很多练习。 换句话说,知道这些建议没有任何作用,除非你真的能遵循它们。

我不会涉及太多非技术性的问题和提示,我将用一个完整的章节来解决所有这些问题很快。 敬请关注!

顺便提一下,如果你想得到资深的面试官的更多指导,可以查看 Gainlo,以便与 Google,Facebook 等公司的工程师进行模拟面试。