我通过了 Google 技术面试;你也可以。
历史
获得聘用需要什么
一般面试流程
学习技巧
面试技巧
最后的想法
我的所有插图均来自UnDraw。感谢您的作品!
通过技术面试后,我退出了谷歌的招聘流程。我知道你在想什么:“你疯了吗?!谁会退出谷歌的面试流程?”
这篇博文将分享我在谷歌的面试经历,以及一些通过技术面试(无论在任何公司)的技巧。
谷歌的技术面试难度是出了名的,而且是一家令人垂涎的公司,所以我选择在这篇博文中重点介绍这一点。
话虽如此,市面上有很多很棒的公司可以工作(有些不如这家科技巨头那么出名),这没关系。你不需要在知名公司工作才能成为一名成功的开发者。
此外,在大公司工作既有好处也有坏处(我会在这篇文章中详细介绍)。确定你的工作目标,并寻找那些能够效仿这些核心价值观和工作环境的公司。
我只能谈论 Google(或任何其他公司)的 JavaScript/前端面试流程,我的面试经历可能无法反映您的面试经历,因此请谨慎对待我的建议和经验。
我不会透露我在谷歌面试(或任何其他技术面试)时遇到的面试问题,因为我认为这对公司不公平。作为一名求职者,你希望凭借解决问题的能力获得聘用,因此我选择重点介绍你应该学习的技能,而不是我被问到的面试问题。
不要死记硬背解决方案,学习构建高效解决方案所需的解决问题的技能!您可以参考面试技巧部分,了解更多关于如何成功进行技术面试的见解。
最后,我只想感谢整个 Google 团队,以及所有与我交流过的现任和前任员工。我的招聘人员非常出色,我遇到的每一位面试官都非常好相处。他们从未让我觉得自己不够聪明,而且让我感到很自在。他们问的问题很公平,评估的技能是我在日常工作中会遇到的。为此,我要向你们表示感谢。
历史
这是我第三次参加谷歌面试(每次都进展得更深入一些)。以下是面试概述。
第一轮:2016年
我第一次面试是在2016年,当时我还住在德克萨斯州奥斯汀。我对技术面试完全没有准备,但还是通过了招聘人员的电话面试,并在被拒绝之前经历了两次技术电话面试。
第二轮:2019年
我第二次接受谷歌面试是在 2019 年底。我以为我面试的是 Material Design 团队的 UX 工程师职位,然而最终我经历了整个软件工程面试流程,有点准备不足。
我通过了电话编程挑战,并进入了慕尼黑园区的现场面试。我参加了两场前端技术面试、两场数据结构和算法面试,以及一场围绕开发流程、沟通和文化契合度展开的面试。
我的一次前端面试是在 Chromebook 上通过 Google Hangouts 进行的,很遗憾,我们遇到了一些技术问题(例如 Chromebook 无法启动,Hangouts 无法屏幕共享),面试过程中有一半的时间都在排除故障。面试官还告诉我,我的 JavaScript 技能还有待提高。
结果面试被取消了,团队希望我一两个月后回慕尼黑重新面试。当时生活有点混乱,我拒绝了重新面试。
第三轮:2020年
2020 年初,我再次参加了 Google 用户体验工程师职位的面试,由于几个月前我刚刚接受过他们的面试,所以面试流程对我来说加快了(我不需要重新进行电话编码挑战或现场数据结构和算法或流程/文化契合度面试)。
我完成了一个带回家的用户体验/工程项目,其中我设计了用户流程和信息架构,使用 Sketch 创建了高保真模型,并开发了一个应用程序。之后,我在一个简洁的文档中记录了我的流程和工具选择。
通过“带回家挑战”后,我参加了三场“现场”面试,这些面试都是通过 Google Hangouts 进行的(由于新冠疫情)。我参加了两场前端技术(编码)面试和一场用户体验面试,面试内容是讨论我的带回家项目以及从用户体验角度可以改进的地方。
“现场”面试结束后(两天后),我的招聘人员通知我通过了面试,将进入招聘委员会和团队匹配阶段。
我和一位潜在的招聘经理见了面,讨论了我手头的职位。巧的是,我在慕尼黑的第二轮面试中就见过这位经理,所以很高兴再次见到他。
与经理见面后,我等了几个星期,在此期间,我继续去其他公司面试。不幸的是,由于新冠疫情的影响,公司内部招聘流程有点混乱,我最终接受了另一家公司的录用通知。
我永远不知道自己是否会收到谷歌的录用通知,但我对自己通过技术面试感到非常自豪。作为一个曾经被别人说不够好,觉得自己在这个行业里立足不稳的人,我甚至为自己能够进入现场面试环节而感到自豪。
获得聘用需要什么
要想被 Google 录用,您必须具备以下特征。
- 做一个善良的人
- 有学习的意愿
- 具有良好的沟通能力
- 成为一个好的问题解决者
- 展现出色的团队合作精神
- 有同理心
根据我的经验,他们并不是在寻找天才,而是寻找善良、勤奋、具有良好沟通和团队合作能力的人,许多公司都是如此。
一般面试流程
Google 的面试流程一般分为 5-6 个阶段:
- 招聘人员电话面试
- 技术电话面试/编码挑战
- 带回家评估*
- 现场面试
- 团队匹配阶段
- 招聘委员会
* 此步骤仅对 UX 工程角色是必要的,而对软件工程角色则不是。
让我们更深入地了解每个阶段。
招聘人员电话面试
在招聘人员的电话面试中,他们会告诉你更多关于职位和面试流程的信息。不过,不要轻视这次面试,因为面试过程中的每一步都很重要,都会影响你的整体表现。
招聘人员电话面试的一些技巧包括:
- 提前了解职位和公司信息
- 准时
- 准备两三个问题询问招聘人员
- 感谢他们付出的时间
你的招聘人员会尽力为你争取到录用通知,所以请善待他们!
技术电话面试
如果你的招聘电话面试进展顺利,你将进入技术电话面试。在这次电话面试中,你将与一位 Google 员工配对,他会向你提出一道编程挑战题。
我需要回答一个问题,它主要测试以下技能:
- DOM 操作(访问 DOM 节点、执行某些任务、动态生成新的 DOM 节点)
- CSS
我在 Google 文档中编写了我的解决方案。以下是我解决问题的方法。
- 提出澄清问题:问题中缺少了一些部分,因为招聘人员想了解你的想法。
- 编写伪代码:编写伪代码可让您在进入代码之前理清思路。
- 编写一个强力解决方案:你不必先编写最高效的解决方案。先编写一个强力解决方案,然后再进行优化,这体现了你对性能的关注。
- 优化你的解决方案:一旦你有了一个强力解决方案,你可以在哪里优化它?你能将嵌套的 for 循环重构为两个顶层循环吗?
- 测试边缘情况:一旦你的解决方案运行并优化完毕,就创建一些测试用例。这些测试用例可以让你检查是否遗漏了任何极端情况。
编码项目
如果你的技术电话面试顺利,你可能会被要求完成一个带回家的编程项目。我在软件工程面试中没有被要求做项目,但在用户体验工程面试中,我被要求完成一个项目。
我非常享受完成这个编码项目,原因如下:
- 我可以从两个展示不同技能的项目中挑选
- 我有大约一周的时间来完成这个项目(尽管我被告知只需要几个小时),这减轻了编码面试的“现场”压力
- 我能够展示我最强的一些技能,例如详尽的文档、用户流程和信息架构
- 我能够选择我的技术栈
在深入项目之前,你应该先和招聘人员明确项目要求。例如,如果你想使用 JavaScript 框架,应该询问他们是否允许。
以下是一些关于编程项目的技巧:
- 尽量不要过度依赖第三方库。我选择使用 Google 的设计系统 Material UI 来进行 UI 工作,因为它展现了我对设计系统的了解,并保持了 UI 的一致性。然而,使用 UI 框架可能会对性能产生影响。
- 诚实地说明你想要改进的地方。我提交家庭作业评估时,总会包含“需要改进的地方”这一部分。如果你有多余的几个小时或几周时间,你会做些什么不同的事情?
- 用无障碍测试器运行你的应用。我通过 Google Lighthouse 测试了我的应用的无障碍功能。
- 不要把你的身心都投入到这个项目中。如果招聘人员说只需要花 2-3 个小时在这个项目上,就不要花一周的时间去做。如果他们在这一步之后拒绝你,你会感到精疲力竭,并觉得自己被利用了(这是我的亲身经历)。
- 清理你的代码。务必删除注释并适当格式化代码。
- 考虑项目架构。你的文件结构应该清晰有序。
- 包含设置说明。如果审查代码的人不知道如何运行你的应用程序,你很可能无法进入下一轮。
现场面试
如果你成功进入现场面试,恭喜你!这可是一大步,你应该为自己感到骄傲!
在我第二次接受 Google 面试期间,我有机会参观了慕尼黑园区并参观了办公室(非常漂亮!),然而,在最近的面试过程中,由于 COVID-19 的影响,所有的现场面试都是通过 Google Hangouts 进行的。
现场面试分为五轮:
- 两次前端面试(编码)
- 两场数据结构与算法面试(编码)
- 一次流程/团队合作/文化契合度面试
前端面试将重点关注 HTML、CSS 和 JavaScript 等前端技术,但可能会涉及性能和异步 JavaScript 等其他领域。
前端面试
欲了解要点,请点击此链接。
数据结构与算法面试
以下是我建议在数据结构和算法面试中学习的技能:
如需可访问版本,请点击此链接
团队合作、流程和文化契合度面试
团队合作/流程/文化契合度面试将融合敏捷方法或工作流程、团队合作和协作以及冲突解决等主题。
为了确保面试成功,这里有一些建议:
- 有两个或三个项目可以讨论。
- 有 1-2 个团队冲突你能够解决。
团队匹配阶段
如果你完成了现场面试,那么最难的部分就过去了!有些候选人会直接进入招聘委员会,但有些候选人会先经历团队匹配阶段。
在此阶段,您将与未来的经理会面并讨论您将加入的团队以及您将从事的工作类型。
如果有团队想要你,他们会告诉你的招聘人员,然后将其添加到你的作品集中,然后提交给招聘委员会。
招聘委员会
招聘委员会是面试流程的最后一个环节。据我了解,该委员会由几位谷歌员工组成,负责评估候选人在整个面试过程中的表现。
在招聘委员会会议召开前的一两天,审核人员会阅读候选人的材料,并就是否录用该候选人提出建议。
在会议上,审核人员会讨论他们的反馈意见,如果所有成员都同意,就会发出录用通知。
我从未收到过有关招聘委员会反馈的反馈,因为我在收到反馈之前就退出了该流程,因此不幸的是我无法说出经过招聘委员会审核后收到录用通知的统计数据。
学习技巧
面试时这里有一些通用技巧,以确保您发挥出最佳能力。
每天做一点
虽然你可能感觉不到自己取得了巨大的进步,但一点点的信息累积起来就能产生惊人的效果。我很喜欢詹姆斯·克利尔的《原子习惯》这本书,它对这个概念进行了更深入的探讨。
当你每天进行更集中的学习时,你倦怠的风险就会降低,并且你的大脑会有更多时间来处理你所学到的信息。
学与做相结合
你可以学习世界上所有的技能,但如果不把它们运用到各种项目中,你在面试中运用它们就会更加困难。我建议先学习一两项技能,然后找一个示例应用程序来运用它们。
学会阅读其他人的解决方案
你的解决方案或许有效,或许经过了优化,但阅读其他人的解决方案并了解他们的思路始终是一个好主意。你或许能找到更高效的方法来完成任务,但总的来说,学习阅读代码是一项很棒的技能,也是一项必备技能。
面试技巧
当现场面试终于到来时,这里有一些提示可以让你保持冷静。
喝水
喝点东西能让你喘口气,放松一下。面试官会问你是否想喝,如果他们不想喝,你也可以直接问。
提出澄清问题
白板问答故意留一些空子,因为面试官想看看你解决问题的能力。如果某个问题看起来不清楚,那很可能就是真的不清楚!写下你知道的,然后推断你不知道的。
如果卡住了,就暴力破解,然后优化
如果您完全不知道从哪里开始,请从性能较差的解决方案开始;您可以稍后进行优化。
例如,如果你被要求在一个已排序的数组中搜索一个数字,如果存在则返回 true,你可以先用 for 循环遍历每个索引,如果找到则返回 true。最坏的情况下,复杂度为 O(n),其中 n 是数组的长度,因为我们要检查数组中的每个元素。
在面试过程中,你可能会想到“哦,数组已经排序了!我可以用二分查找来找到元素!” 二分查找是一种非常棒的分治算法,它通过每次减小数组的大小来反复搜索目标元素。这最终可能是一个更高效的解决方案。
说出你的思考过程
面试的目的是考察你的想法,所以你必须大声说出你的想法!面试官读不懂你的心思。
如果你在两种方案之间犹豫不决,不妨告诉面试官,并解释你对这两种方案的保留意见。他们或许能帮你找到正确的方向。
测试您的解决方案
一旦你有了解决方案并进行了优化,就该进行测试了。许多候选人忘记了测试,但这却是编程挑战中至关重要的一部分。你的解决方案可能适用于 75% 的测试用例,但却忘记考虑剩余 25% 的边缘情况。
在面试中测试你的解决方案是必须的。
不要依赖工具
Google 通常使用 Word 文档或纯文本编辑器来应对编码挑战,因此不要依赖 Linter 或 Prettier 来格式化代码。学习如何在无需工具的环境中编写代码。
最后的想法
谷歌并非一家“包罗万象”的公司。你甚至可能不喜欢在大公司工作!
面试时要记住的最重要的一点是,这是一场双向面试。你面试公司,就像公司面试你一样。
你所拥有的技能很有价值,即使你被拒绝,也不意味着你不够优秀。
我们收到的拒绝比收到的录取多,所以坚持下去。
文章来源:https://dev.to/emmabostian/i-passed-the-google-technical-interviews-you-can-too-4i6m