📜  2022 年软件工程实习的 Google 面试经验

📅  最后修改于: 2021-11-18 02:09:45             🧑  作者: Mango

简短概述:

2021年8月,谷歌来到我校(IIT Roorkee)为2022年暑期实习生选拔候选人,经过多轮筛选,最终只有8名学生被选中。整个过程是虚拟的,分 1+2 轮(1→编码轮+2→面试轮)进行,每轮 45 分钟。

面试/技术轮次(共 3 轮):

第1轮:

这一轮对我来说持续了将近 55 分钟。面试官非常友好和乐于助人,他首先让我自我介绍。然后他问了我一个小问题,接着是 5-6 次跟进:

  • 给定一个包含重复项和一个数字的未排序数组,找出如果数组已排序,该数字将出现在哪个位置。 (我先告诉他排序的 O(N log N) 解决方案然后找到元素,然后我向他提出了 O(n) 遍历数组并计算小于给定数字的元素数量的解决方案.他很满意,让我编码解决方案)
  • 然后他问我如果给出元素的索引而不是元素会怎样。
  • 我不记得其他的后续,但它们非常相似并且基于二分搜索和映射。
  • 我都能一一回答,面试官对我很满意,说结局很好。

然后我收到了一封关于我下一轮的邮件,该邮件安排在 1 小时后。

第二轮:

这一轮对我来说持续了将近 45 分钟。问的问题是:

给定以字符串向量形式表示的聊天记录,找出说最多单词的前 k 个用户。

样本输入:

  • 我向他提出了一个解决方案,首先我将遍历字符串向量并将每个用户所说的单词数量映射到他们的用户名(即 map< 字符串, int>),然后我可以从该映射中创建一个向量并对它进行排序并取出最后 k 个元素,或者将使用最大堆的优先级 _queue 代替,然后仅弹出 k 个元素。
  • 他让我编写在地图中插入所有内容的第一部分。我的代码将一个字符附加到字符串。所以他让我避免这样做,因为那是使用 O(字符串的长度)时间。所以我将解决方案更改为使用索引而不是附加。
  • 使用优化和空运行对第一部分进行编码占用了我的全部时间并且无法完成第二部分。

两轮比赛结束后,我一直在等待结果,因为本来应该只有两轮比赛。但是第二天早上我接到了我所在大学的安置和实习小组的电话,谷歌要求我再次面试。

第 3 轮:

这一轮对我来说延长到 75 分钟。问的问题是图表:

给定的是一个城市网络。在C市发生了犯罪,罪犯逃到了他的家乡H。现在警察想抓捕罪犯,他知道罪犯会从A市到B市,只有从B市到H市的最短路径距离比城市 A 到 H 少。我们应该找出犯罪分子从 C 开始可能采取的可能路线的数量。

  • 我告诉他我会用邻接表表示来表示无向加权图。然后首先我将使用 Dijkstra 算法计算从 H 到每个城市的最短距离,然后我的答案将是连接到城市 C 的所有城市的路线数量的总和,其距离 H 的最短距离小于C,即将使用递归。
  • 然后他问我递归的时间复杂度,我告诉他 O(V+E)。但他问我是否确定,并让我在笔记本上画一个例子,看看我是否遗漏了什么。然后使用我绘制的一个例子,他帮助我得出结论,我的解决方案的时间复杂度将是指数级的,因为重复的子问题使我产生了记忆的想法。
  • 然后他让我编码。我编写了 Dijkstra、递归和连接我的两个函数的主函数。然后他问我这两个函数的时间复杂度,并让我优化 Dijkstra 的代码。我想出了优先队列的想法(这个优先队列优化是一个标准的 Dijkstra 算法,但我之前没有意识到这一点,所以我只在那里想到了这一点)。

然后第二天我就拿到了结果。

判决:选择

准备:

  • 我以前只按照前辈的建议从面试中练习
  • 谷歌面试,我阅读了其他人的面试经历,并从GFG做了谷歌公司特定的问题。
  • 如果你做的是定性和诚实的,那么大量的练习就足以培养你的思维能力

提示:

  • 最重要的是要保持冷静,不要因为紧张而把你知道的事情搞砸。
  • 自信并相信自己。
  • 即使您无法想出整个解决方案,只需说出您的想法,并在面试官的帮助和他的提示下,您将能够找到解决方案。
  • 只是不要放弃和害怕。认为面试官会帮助您找到解决方案。