Loading

My Interview Experience at Google --- 转

My Interview Experience at Google [L5 Offer]

看看Google都面啥

原文


第一轮 DSA(45分钟)

树,后序遍历,拓扑排序

在面试过程中,面试官在代码编辑器中分享了一个很长的问题,并让我阅读。阅读完毕后,我问了几个澄清问题以更好地理解问题。

一旦我清楚地理解了问题,我建议使用树作为数据结构,并应用后序遍历来解决问题。面试官随后要求我用一个例子来解释解决方案,我也这样做了。

解释完毕后,面试官要求我实现这个解决方案。当我开始编写代码时,我力求使其模块化。为此,我创建了一个TreeNode类、一个TreeClass,以及一个专门用于解决问题的单独类。由于时间限制和我对模块化的关注,我遇到了一点挑战,但最终我还是设法写出了一个可以工作的代码。

面试官有几个后续问题,但由于时间限制没有问出来。这一轮结束时,我知道我搞砸了。我后来意识到,同一个问题可以通过拓扑排序来解决。(作者以为是一个树问题,但后面觉得是一个图的拓扑排序问题)

第二轮 DSA(1小时)

N个孩子的树,树遍历

对于第二轮面试,我惊讶地发现面试时间安排了1小时,因为谷歌的DSA轮通常持续45分钟。

一旦面试开始,我很快意识到这一轮为什么会延长到1小时。面试官使用一个包含长达4-5页的长篇问题的Google文档来提出问题。此外,还有一个带有图表的幻灯片,以提供问题的全面概述。

看到这么复杂的问题,我感到有点紧张。在阅读问题的过程中,我发现自己在阅读到第3页时忘记了前面几页的细节。幸运的是,面试官非常乐于助人,并花时间解释了问题。我问了许多澄清问题,大约花了20-25分钟才完全理解了问题的复杂性。

与问题的复杂性类似,这个问题的解决方案也很广泛。问题围绕树展开,特别是n个孩子的树。尽管面临挑战,我还是设法写出了完整的代码。这一轮结束时,我有点出汗,但我对自己的表现感到自信。

第三轮 DSA(45分钟)

中等难度的Leetcode问题,树,堆,递归

这一轮与前两轮有所不同。面试官提出了一个标准的Leetcode问题,特别是一个中等难度的问题,重点是树,并稍作修改。我迅速提供了一个解决方案,用例子验证了它,然后被要求编写代码。我迅速地编写了解决方案,并提供了时间和空间复杂度。

跟进1:面试官稍微改变了问题,并问我如何修改我的代码以适应新特性。我迅速识别了必要的改变,使我的代码不仅能够适应修改,而且通过使用策略设计模式,更易于适应这样的变化,代码模块化程度更高。

跟进2:面试官提出了一个具有挑战性的后续问题。我花了一些时间才找到最优解,并且用例子解释解决方案也消耗了一些时间。我之前为了提高代码模块性所做的修改,在快速适应跟进2中要求的变化时证明是有益的。我能够在时间内编写代码。

跟进3:这是关于如何使我的解决方案适用于生产环境。我提供了几种方法,通过这些方法我的代码可以在生产环境中工作。

结束这一轮后,我感到很有信心。

在前三轮面试之后,招聘人员在一轮DSA面试中给出了反馈,我收到了混合的反馈。我已经有所预感,因为我觉得自己在第一轮表现得不好。招聘人员建议增加一轮DSA面试,以确保招聘委员会没有顾虑,考虑到其他两轮中给出的强烈推荐录用的反馈。

第四轮 DSA(45分钟)

字符串,排序,二分搜索,字典树(Trie)

对于这一轮,我已经感到紧张。面试官提出了一个我以前没有遇到过的问题。虽然问题本身并不特别困难,但它需要应用多个DSA概念,如哈希、排序、二分搜索、上界、下界,以及考虑边界情况。此外,面试官要求编写适当的测试用例。

在沉思了大约5分钟后(并且大声思考),我设法想出了一个算法来解决问题。我解释了解决方案,用例子验证了它,然后提供了我的解决方案的时间和空间复杂度。面试官随后要求我编写代码。我迅速编写了代码,创建了测试用例,并确保覆盖了所有边界情况。

跟进1:面试官提出了一个跟进问题,对输入进行了轻微修改,并期望一个更优的解决方案。在考虑了一些例子后,我使用字典树(Trie)想出了一个满足面试官期望的解决方案。

跟进2:面试官询问了我的解决方案在处理非常大的数据集时的可扩展性以及其在生产环境中的可行性。我讨论了对字典树数据结构进行分片的选项,概述了各种有效的分片策略。此外,我还提出了使用键值存储的替代方法,尽管我们没有深入探讨这个替代方案。在这之后,面试官要求我实现基于字典树的解决方案。

这个跟进的代码很长,我不得不赶在时间限制内完成。总的来说,这一轮进行得很顺利。

第五轮 系统设计(45分钟)

面试官要求我设计谷歌的一款产品。凭借之前对系统的了解,我在提出一些澄清问题后,高效地提供了功能性和非功能性需求,并与面试官确认了这些需求。随后,我们的对话演变成了关于特定功能的详细讨论,使得这一轮更像是一次技术讨论,而非典型的面试。

我们探讨了多种方法,仔细权衡了每一种的利弊。面试官互动且支持的态度将这一轮从典型的面试转变为技术讨论。总的来说,这是一次很棒的体验。

然而,不利的一面是,我对自己在这一轮的表现感到不确定。

第六轮 谷歌特色(45分钟)

我们深入探讨了我以往的工作经验,并探讨了我离开META的原因。之后,面试官提出了一些具有谷歌特色的情境问题。在这一环节中,面试官提出了几个有趣的场景,我通过借鉴我过去的项目和经验进行了回应。面试官始终保持友好和支持的态度。

总之,这一轮进行得很顺利,我觉得表现不错。

通过谷歌的面试

在这段漫长的等待期间,我急切地等待着结果。招聘人员在我们几次互动中提到,他们正在等待招聘委员会的决定。三周后,招聘人员打电话向我表示祝贺,并分享了我通过谷歌面试的好消息,招聘委员会给出了积极的结果。


以上。

DSA(data structures and algorithms)

超大杯算法题目!!!感觉自己之前面试的算法题像小儿科了。😄

posted @ 2024-03-19 10:36  KeBoom  阅读(8)  评论(0编辑  收藏  举报