谷歌……世界上最具吸引力的雇主和薪酬最高的公司之一。 Google 为杰出的程序员打开了一扇门,他们不仅限于解决他们已经知道的问题,而且还应该具备解决以前从未遇到过的问题的技能。如果您是拥有此技能的人中的一员,并且梦想在 Google 担任软件工程师职位,那么您需要遵循一种策略,并且需要了解该公司正在招聘的完整流程一流的程序员。
Google 软件工程职位的招聘程序与其他公司类似,因此我们将讨论您必须具备的编程技能,我们还将讨论您在 Google 申请时应牢记的其他一些技巧和细节。
要点
- 谷歌只雇佣优秀的程序员,所以毫无疑问,解决问题和编码技能(重点领域数据结构和算法)是谷歌软件工程角色的必备技能,但你需要记住谷歌也很在意关于 Googlyness,涵盖对技术、好奇心、道德、友善、良好公民等的热情。
- 面试的难度取决于你在谷歌申请的软件工程职位的级别。软件工程师或 SWE-II(3 级)是入门级的全职软件工程师。在这个级别上,有 4 或 5 轮现场轮次,并且有人在 L3 和 L4 的风口浪尖上(下),他们可能会提出设计问题,但通常不会。 SWE-III(4级)适用于具有BS + 8年,MS + 5年,博士学位的候选人。 + 2 年。大约。在这个级别,预计会有 4 或 5 轮现场轮次,也至少有一个系统设计问题。
- 检查Google in Education Team已发布的他们期望潜在工程师具备的技能列表。
- 所有工程师(各个级别的)在整个 Google 代码库中进行协作,通过高效的代码审查流程,这就是 Google 渴望看到真正高质量、高效、清晰且没有输入错误的代码的原因。
- 面试官受过训练,不会对你的答案做出反应,所以不要指望他们会给出是或否的答案,无论你是否朝着正确的方向前进。这很糟糕,但却是评估候选人的一种非常有效的方式,因此请做好准备,看看冷酷无情的面孔。
在我们讨论所有细节之前,我们强烈建议您查看 Google 职业页面上的我们如何招聘并熟悉面试流程。对于谷歌软件工程面试,你可以选择任何你熟悉的编程语言,但你应该非常了解你的编程语言,如果选择是 C++ 或Java那就太好了。让我们一一讨论从接到面试电话到破解面试的所有环节。
被谷歌注意到
谷歌每年收到超过 200 万份简历,但每年只雇佣大约4000 名员工,因此在面试电话中不容易被招聘人员注意到。通过在这些公司工作的一些人脉获得推荐,或者您可以借助 LinkedIn 和在线编码平台来增加面试电话的机会。以下是一些有助于您获得面试邀请的要点……
- 尝试制作单页简历并仅包含相关内容。简短、准确,因为没有一个招聘人员有超过 15 秒的时间来扫描简历。只写下那些你觉得舒服的东西,不要做任何虚假的事情,因为面试官在面试中很容易发现这一点。如果你提到你的项目,那么也要提到你的项目的复杂性。查看链接简历构建 – 资源和提示,了解准备简历的指南。
- 您可以参加 Google Kickstart 或 Google Code Jam,这是由 Google 主办的编码竞赛。如果您在 Google Code Jam 中进入第 2 轮(大约 3000 名参赛者),Google 可能会与您联系。
- 及时更新您的 Linkedin、Github 和其他个人资料,招聘经理会使用这些工具(如 LinkedIn、校友数据库和专业协会)来寻找合适的候选人。
- 检查链接为 Google 创建您的简历:提示和建议
- 参加会议并开始联网。谷歌员工经常在会议上发言,他们非常平易近人。
电话面试
一旦您的简历入围,您将被邀请参加技术电话面试(平均 2 次电话面试),这与现场面试略有不同,但您需要在一些共享工具(如 Google Doc)上编写代码,并且面试官可以看到这些代码.大约 45 分钟,涵盖数据结构和算法。您可能会遇到两个问题,您至少需要为其中一个问题编写代码。以下是指导您进行电话面试的一些要点……
- 您需要为面试官会问的编码问题编写代码,在开始时抛出一个蛮力解决方案,但您也应该尝试改进您的解决方案。想想时间和空间的复杂性,看看你是否可以改进它们。
- 在 Google Doc 上练习编写代码。它不同于文本编辑器。没有缩进、语法高亮和自动完成功能,因此最好在 Google 文档上练习并熟悉它。
- 在电话面试中大声思考并清楚地说话(这里的人会遇到麻烦),并将您的策略告诉面试官以解决问题。
- 文档会实时更新。如果您正在输入答案或复制和粘贴答案,这将是显而易见的。
- 如果在第一次电话面试中他们无法正确评估您,面试官可能会要求进行第二次电话面试。
现场面试
电话面试后,谷歌会进行 4-6 次现场面试,包括午餐面试,其中午餐面试不是真正的面试,只是与谷歌员工的互动。每轮大约需要 45 分钟到 1 小时,这将是一轮白板,谷歌面试的大部分内容包括编码。现在 DSA 和核心 CS 科目的作用是检查您的编码、解决问题的技能和对计算机科学基础知识的掌握。首先,您将经历编码面试轮,然后是系统设计(基于经验)轮。问题的难度级别取决于您在 Google 中申请的级别。
1. 技术编码回合和一般分析题
- 测试候选人是否可以使用数据结构和算法的知识解决现实世界的问题。期望能够为给定问题找到最优化的解决方案。您必须能够将算法知识与代码一起传达。
- 一般来说,分析问题面试官会给你一个数学、设计或基于意见的问题,他们将调查你的思维过程以及你作为一名员工将如何进行。
- 我们强烈建议您阅读 CTCI(破解编码面试)一书,专门针对 GeeksforGeeks、Leetcode 和编程面试问题练习问题 |为 Google 面试准备的 CareerCup。您也可以在 Google Prepare 上练习相同的内容。
- 下面是谷歌面试中普遍遇到的问题类型的分布。此数据基于 Glassdoor for Google 的面试经历。
- 检查链接如何在基于产品的公司中找到工作?处理深入的技术编码问题,你在面试中应该遵循什么方法和技巧。
- 不要进行冒泡排序。您应该至少了解一种n*log(n)排序算法的详细信息,最好是两种(例如,快速排序和归并排序)。在快速排序不切实际的情况下,合并排序非常有用,因此请做好准备。
- 了解基本的树构造、遍历和操作算法。熟悉主题二叉树、n 叉树和三叉树,至少一种类型的平衡二叉树,例如红/黑树、展开树或 AVL 树以及实现。了解树遍历算法:BFS 和 DFS,中序、后序和前序遍历。
- 熟悉如何在内存中表示图,基本的图遍历算法。不要关注太多像 Dijkstra 这样的花哨算法。如果你有足够的时间研究这个主题。
- 您应该了解最著名的 NP 完全问题类别,例如旅行商和背包问题,并且当面试官变相询问您时,您应该能够认出它们。
- 面试官可能会问一些基本的离散数学问题,所以也花一些时间在那里,看看组合学和概率,同时熟悉 n-choose-k 问题。
- 不要忘记最重要的 CS 主题操作系统之一。线程、并发、进程、死锁、活锁和阅读操作系统中的其他主题。
- 面试官肯定会检查你如何决定哪种数据结构适合面试官提出的问题。
- 不要忘记在所有情况下测试您的代码。编写解决方案后,您必须测试您的代码,即使是最低限度的,因为如果您不这样做,积分将被扣除。
- 其中一个以真正的 Google 工程师为特色的模拟面试视频示例编码/工程面试肯定会帮助您解决与编码相关的问题。
2.系统设计回合:
- 系统设计问题是一个开放式对话,这一轮主要由经验丰富的候选人进行,他们测试您设计和扩展基于技术的系统(如设计Gmail、youtube、uber 等)的整体能力。
- 检查链接系统设计面试问题,系统设计入门。
- L4 及以下可以获得 OO 设计以及一些与系统设计相关的问题。在这里,您应该了解高级细节。如果你申请 L5 及以上,你会被问到系统设计问题,期望你可以定义系统的目标/要求,定义高级架构,深入研究一些组件,并确定瓶颈。
- 在 Google 中,可扩展性始终很重要。因此,对于大型系统来说,设计问题将是一个模棱两可的现实问题。他们正在寻找思维过程,以及如何分解事物以最终获得极具创造性和可扩展性的解决方案。
面试官在找什么?
“我们不仅仅是在寻找工程师来解决他们已经知道答案的问题;我们对能够为他们以前从未遇到过的问题找出答案的工程师感兴趣。”
以上是面试官会寻找的最重要的事情,同时阅读以下几点……
- 面试官在接受面试时通常有一个心态,如果他/她可以在他/她的日常工作中与候选人一起工作,那么在面试时不要表现出傲慢或自我的迹象。
- 面试官会检查你在实现代码时是否使用了合适的数据结构和算法。
- 面试官会注意到你如何优化解决方案的方法、你对编程语言选择的了解、你的编码速度、你错过的任何角落案例以及你如何分析时间和空间复杂度。
- 他们将检查您如何以合乎逻辑的方式传达您的思维过程以解决特定问题。他们还将检查您是否能够捕捉到提示并能够继续解决方案。
- 如果候选人愿意接受新想法?候选人的解决方案是否灵活?
面试评估标准:所有的反馈都是在面试后从不同的面试官那里收集的,然后你在一系列不同的类别中以 1-4 的等级进行评分,包括你的编码经验和分析技能。然后将此反馈发送给招聘委员会以供最终决定。
提示:
- 在整个面试过程中学会“大声思考” ,否则面试官将不知道你在想什么。向面试官展示您对问题的思考过程以及您将采用什么方法来解决问题。
- 通过在纸或白板上写代码来练习。它会在你的面试中真正帮助你。
- 永远不要说你做不到。即使有一个你以前没有解决过的问题,或者看起来你解决不了的问题,也要不断从不同的角度攻击问题,面试官会给你提示。但如果你说你不能解决问题,那就是一个很大的危险信号,你可能最终会被拒绝。
- 在跳到解决方案之前,请务必提出相关问题,以使其更加清晰。在前往解决方案之前,请务必与面试官核对您的假设并清除您的所有疑虑。
- 我们强烈建议您不要编写伪代码来设计您的代码。在 45 分钟的面试中,你没有时间做这些。
有用的网址:
- 谷歌面试准备问题
- 谷歌面试经历
- 破解任何编码面试的练习
- Glassdoor 谷歌软件工程师面试题