📜  谷歌-班加罗尔面试经历

📅  最后修改于: 2022-05-13 01:58:17.947000             🧑  作者: Mango

谷歌-班加罗尔面试经历

免责声明:由于协议,我无法提及向我提出的确切问题,但是我尽量描述了这些主题。

电话测试:

12 月下旬,一位来自新加坡的 Google 招聘人员在 LinkedIn 上联系了我。她分享了她的日历,并让我标记一个 30 分钟的窗口,以便快速讨论我的专业经验和兴趣。电话会议从我描述相同的内容开始,然后转向一些关于基本概念的快速问题——堆、树、它们在各种情况下的算法复杂性、一个如何优于另一个等等。最后她给了我一道数学题并尽快解决,但每一步我都被要求解释我的方法。最后她说我通过了电话测试,很快就安排了一次 45 分钟的 Google Hangouts 视频面试。

谷歌环聊测试:

面试官来自谷歌美国。它以友好的介绍开始,然后真正的问题接踵而至。这是一维阵列上的 DP 问题,一旦你看到解决方案就不是很难。但一时冲动(时间更短),我解释了一种看似明显的贪婪方法,他很快用一个测试用例反驳了这一点。幸运的是,我及时得到了 DP 算法并且可以对其进行编码(我后来意识到的实现缺陷很少)。他问了空间复杂度和时间复杂度,然后让我降低空间复杂度。我做到了。它以对 LCZero 项目的一些讨论结束,然后是关于 AlphaZero(由谷歌 Deepmind 提供)最近战胜了最强大的计算机国际象棋引擎 Stockfish 之一。

几天后,从招聘人员那里得知我被选中参加 Google Bangalore 的现场面试。

现场:

第1轮:

这对我来说是所有人中最糟糕的一轮。这个问题基本上是关于树木的 DP,虽然这些问题通常属于困难类别,但巧合的是,几年前我在大学期间解决了一个类似的问题(我什至在招聘人员问我之前是否见过这个问题后向他提到了这个问题)。所以我很快就解决了基础版本。但随后他添加了一个简单的约束,这突然让我大吃一惊,因为我挠了很长时间,但找不到任何可能的方法将这个约束包含在我现有的解决方案中。我向他提议可以明确处理这种边缘情况,但这确实破坏了解决方案的美感。所以他坚持要我找到解决所有案件的具体方法,我接受了挑战,很快就没有时间了,也找不到具体的解决方案。面试结束只剩下 4-5 分钟,我急忙编写现有解决方案的代码(并明确处理了极端情况),但即使在编写代码时,我也明白它出了很大的问题。讨论了解决方案的复杂性并结束了。

第二轮(延期):

面试官正在参观,所以这一轮被推迟了。我松了一口气,在经历了如此灾难性的开始之后,我需要休息一下。

第三轮:

这是一个行为回合——又名 Googleyness 回合。它与技术无关,而是关于我们如何应对职业世界中的不同情况。我其实很享受这一轮,因为大部分问题都是我在以前的公司已经遇到过这样的情况,所以我很快就回答了我在那种情况下做了什么,在某些情况下我可以得到什么我最近意识到做得更好。我完全忘记了这一轮之后第一轮的不幸。我对我处理问题的方式感到非常满意,而且午餐采访也随之而来😀

第四轮:

这不是真正的采访。一个谷歌人来了,带我和他一起吃午饭,哇,这么多菜,鸡肉(我最喜欢的)到处都是。我吃了很多东西,在这个过程中,我和他聊了聊他在做什么,他来自哪里,以及一些关于谷歌文化的基本知识。我们都知道这种文化绝对是好的,但是亲自从真正的谷歌员工那里听到一些细节是很方便的。

第五轮:

午饭后就开始了。我相信这一轮对我来说是最好的。这个问题从多个字符串匹配开始(当然还有一些秘密约束),然后围绕 KMP 算法、Z 算法、Rabin Karp 哈希机制等话题发生了很多讨论,最后得出了修改后的 Trie 操作。关于编码,我不必自己构建 trie,我被要求假设我有来自库的 trie,但需要在 Trie 提供的函数之上编写自定义操作。然后我们讨论了空间和时间的复杂性以及我们如何进一步优化它们。

第六轮:

它涉及构建游戏。感觉很简单,一开始我很惊讶。但是当我继续提问时,面试官在几个点上阻止了我,并透露了更多关于游戏的限制,这些限制不断增加复杂性。我首先提出了一个使用 BST 的解决方案,后来将其更改为不需要排序的算法,因此可以仅通过哈希映射来解决。最终的代码逻辑非常简单,所以在我完成编码后,我们有相当多的时间花在其他主题上。然后他给了我一个设计问题,基本上归结为计算定义明确的顶点之间的最短路径,给出了一些方法,希望他满意。

几天后,我的招聘人员通知我,我在前几轮现场工作中表现出色,无论下一轮如何,她都会将数据包转发给招聘委员会。我喜出望外,开始为即将到来的一轮做准备。

第二轮(提前推迟):

我实际上想要一个面对面的采访,来一场 F2F 对话可以在任何一天击败视频聊天。但是由于某些原因,它是通过视频通话发生的。我把问题完全弄错了,继续建议方法 10 分钟,直到我意识到(我的招聘人员帮助我快速理解它,否则整个面试会因沟通不畅而结束),然后我很快跳回到原来的问题并给出了二次解。他给了我一些时间思考这是否可以优化,我突然想起了 Kadane 的算法,使用它我可以克服整个解决方案的瓶颈(这是一小部分),它变成了一个线性解决方案。那时剩下的时间已经不多了,所以我急忙编码,就像它发生的那样,错过了编码部分的一些实现细节。

几天后,我的招聘人员通知我,我即将与 Google Ads 的一位团队经理会面。我非常兴奋,因为事情似乎真的很顺利。我和他就 Google Hangouts 进行了 15 分钟的小型会议,向他描述了我在前一家公司的兴趣和经历,他向我描述了这个角色、技术堆栈,而且看起来很有趣。一场比赛发生了,我很快就收到了他支持那支球队的声明。

一切都很好,结局很好。好吧,在我的情况下它没有,我无法在最后一步 - 招聘委员会中晋级。

我要求进行评论,我的招聘人员向我解释说,在少数情况下我的编码没有达到标准,在某些情况下我可以简化逻辑。

结果——被拒绝。

所有的编码轮次都是在 Google Docs(在视频群聊期间)或在他们的个人面试应用程序(在现场,与 docs 非常相似)中完成的。

总的来说,虽然整个过程花了3个月左右,但还是蛮有趣的。准备好你曾经在大学里做过的事情,然后进行面试,一路上会见谷歌员工,到现场的谷歌印度办公室面试(两次!,以我为例)是一段美妙的旅程。

我对谷歌爱好者的建议是,在面试中平衡思考部分和编码部分之间的时间,你的编码真的会对以后产生非常重要的影响,你可能在面试时很好地解释了算法,但后来(比如在 HC 阶段) 剩下的就是你的代码。并且那个“代码”应该说得很好。