📜  谷歌班加罗尔面试体验

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

谷歌班加罗尔面试体验

初始电话屏幕:

招聘人员询问了我的背景并讨论了面试程序。她还问了我一些基本的单字回答 DS/Algo 问题,例如快速排序的时间复杂度。

技术电话面试一:

它并不顺利,因为我很难向面试官解释我的方法。这是一道计算几何问题,我以前从未做过这种类型的问题。我很难想出幼稚的解决方案,因为我一直假设我认为的解决方案行不通(再次缺乏信心)。随着时间的流逝,我的紧张情绪越来越大。大约 20 分钟后,他让我编写我还没有告诉他的任何内容。在我编码之后,他指出了我的算法会失败的情况。由于我以非常结构化和模块化的方式进行编码,因此我能够快速修复它,但仍然不完全正确。

一周后我接到招聘人员的电话,说这是一个混合的反应——她告诉我,我没有大声思考,但在数据结构和代码结构等所有其他部分都做得很好,他们想再打电话面试。
通话结束后,我只是尝试编译代码并惊讶地发现它运行成功并且答案是正确的。一直不相信自己,觉得自己太傻了,虽然有能力,也有足够的练习,但还是不够自信。不管怎样,我很高兴我还有另一个机会。

技术电话面试2:

这是一个带有某些条件的表达式评估问题。我使用堆栈完成了它,并在 20 分钟内完成了编码。我检查了我的代码两次,但错过了一个语法错误,他不得不指出。然后他让我跟进,我在几分钟内完成了,因为我为核心逻辑创建了一个函数,所以我只需要调整它。它非常棒,最后,我们有足够的时间进行闲聊。

随着我的现场接近,我的 LC 问题计数得到177 - 59 简单,102 中等,16 困难
(在我收到现场邀请后,我开始和中等难度的问题一起做,因为我必须提高我的准备。难度问题很累,通常是2-3个中等问题的组合。所以我更专注于中等问题)。

现场采访:

日期:2020 年 1 月

当我到达办公室时,我非常紧张。但我很高兴我的招聘人员让我平静下来并鼓励我参加面试。?

第1轮:

面试官首先问了我一个热身问题,我立即告诉她解决方案和时间/空间复杂性。这让我感到非常放松。她问的下一个问题是图形问题。它可以通过 dfs/bfs 来解决,我讨论了为什么 bfs 会比 dfs 好一点。我在编码之前写下了算法步骤,然后编码本身花费了很少的时间。 (我已经在下面的面试技巧中详细写过这种方法)

第 2 轮:

第二位面试官要求我在满足某些标准的范围(0 到 N)内隔离数字。我告诉他检查所有数字的幼稚迭代方法,然后讨论优化它的方法。我通过回溯解决了它以仅生成有效数字。

第 3 轮(Googlyness / 行为):

这一轮感觉很重要,它显示了你在不同情况下的决心和乐观。我喜欢这些问题是基于场景和开放式的。

第四轮:

它没有我的其他面试轮好。这是一个树问题,我想出了一个递归解决方案,但不确定如何正确使用返回值。时间不多了,所以他让我编写我还没有告诉他的任何内容。我无法事先计划我的代码,因此实现它几乎没有困难,并且正在重新编写我的代码。通过使用一些提示,我几乎无法按时完成我的代码。他无法要求任何后续行动。

第五轮:

这是一个数组问题,我想出了一个 dfs 解决方案但被卡住了。面试官把我推向了bfs。我编写了 bfs 解决方案,随后他问我如何测试它。

结果:我的现场非常棒,所以他们快速转发了我的申请。 HC批准下周。

结论:

由于害怕被拒绝,我从取消面试开始了我的旅程,但现在我意识到那天是我拒绝了自己!我强烈建议每个人——对自己有信心,把自己放在那里,失败了可能会失望,但不尝试就注定失败!

学习是一段艰难的旅程,它需要大量的持续练习。我有一份全职工作,我把休息时间留给了 Geeksforgeeks 和 leetcode 问题。有些日子很忙,但我至少还是做了一个问题。我周末从不学习太多(我想学习,但太懒了,从来没有起床)。所以只要保持一致,很快你就会开始享受这个过程,事实上,你会开始找借口来做 leetcode。

资源:

  • 清晰的数据结构——我使用 Geeksforgeeks 和 HackerEarth 教程来了解各种数据结构的实现。它的解释性很强,但很简短。
  • 清晰的算法——如果您想成为一名真正的程序员,请抽出时间阅读 CLRS。由于它非常庞大,当我需要深入了解排序和动态编程时,我会使用它。
  • 破解编码采访(Gayle Laakmann McDowell)——非常非常有帮助!一旦你清楚了数据结构和算法,就可以使用本书来学习如何在编码时实际应用这些知识。从第一个问题开始,一次移动一个问题,因为每个问题的难度都会增加(我感觉如此)。
  • 动态规划——对于自上而下的解决方案,带记忆的 dfs/回溯效果很好。
  • 自下而上:https://www.byte-by-byte.com/dpbook/(……虽然在面试中实施自下而上的 DP 非常困难,而且没人希望你也这样做)
  • Leetcode 高级版——绝对值得。
  • 模拟——我发现公司模拟和随机模拟都有助于衡量准备工作。模拟很好,因为问题没有难度级别标签,所以有时我可以通过分解它来解决难题,否则我会忽略知道它很难。

面试小贴士:

  1. 更好地构建你的代码——创建函数并重用。
  2. 如果可以在白板和笔纸之间进行选择,请始终使用白板!向面试官解释你的解决方案变得非常容易,它也让你的思维开阔,可以从多个方向思考(由于它的广阔性)。
  3. 如果您在想出简单的解决方案时遇到困难,请举一个一般案例并解决它。永远不要将特殊情况用于构建解决方案,而是将它们作为条件覆盖以备后用。在这个阶段,不要考虑时间和空间的复杂性,只是解决它,因为有些候选人甚至没有做到这一点,所以有总比没有好。
  4. 在你说出每个解决方案后讨论时间和空间的权衡,即使面试官没有问你——它应该告诉你自己。
  5. 一旦解决方案被讨论并最终确定,编码应该尽可能快。由于它不是那么简单,我们可以分解编码步骤。 (每次在尝试编码之前,我都会用简单的英语编写算法步骤)——比如,制作给定数据的哈希图——使用队列数据结构——传递给函数的参数——返回什么——如何使用返回值。这有两个方面的帮助:
    • 您可以轻松涵盖特殊情况和边缘情况,因为此时您既没有考虑解决方案也没有编写代码,您只是在计划如何编写代码。
    • 如果有不对的地方,面试官可以立即指出。因此,在您开始编写错误的解决方案之前,它会得到修复。

最后,非常感谢 GeeksforGeeks 提供的所有鼓舞人心的帖子和惊人的解决方案!祝所有尝试在那里的人都好🙂