QCon 演讲火热征集中,快来分享技术实践与洞见! 了解详情
写点什么

2020 年的谷歌面经:“远程编程面试”流程

  • 2020-02-27
  • 本文字数:3582 字

    阅读完需:约 12 分钟

2020年的谷歌面经:“远程编程面试”流程

本文翻译自“Google Interviewing Process for Software Developer Role in 2020”,原作者为 Ilia Pirozhenko,翻译已取得作者授权。


我刚刚参加过谷歌的面试,迫不及待地想和大家分享一下面试过程中的苦与乐,希望大家能从文中了解到谷歌的面试流程,知道会发生些什么。我也会分享一些心得,让大家知道如何准备面试和避免犯错。


如果你想看的是成功经验,那这篇贴子很可能会让你失望了。我没能通过面试。整个面试过程对我来说还是非常有趣的,并为我开启了职业生涯的另一扇大门。关于这一点我会在文末细说。为了保护相关谷歌员工的隐私,文中涉及的人名和身份信息都是改动过的。

准备阶段:面试前奏

我的故事开始于去年十月,那是一个下雨的清晨。谷歌招聘专员 Olivia 给我发了封邮件,标题是“有兴趣来谷歌解决些高难度的工程问题吗?”当时我刚刚做完了几个项目,也正在寻找新机会。有机会去谷歌工作的话,谁都不会拒绝,所以我马上就回复了:“当然愿意!”同时和她约定在谷歌 Hangouts 上进行更进一步的沟通。


两天后,我们在 Hangouts 上开始了对话。Olivia 向我描述了在谷歌工作是多么令人兴奋的事,以及招聘流程是怎样的。我想向她了解更多关于招聘岗位的细节,她说现在是为位于波兰首都华沙的新公司进行招聘,主要工作是对企业客户的谷歌云功能进行开发和支持。我想进一步问岗位的具体职责,属于哪个部门,结果她说在现在这个阶段还不必关心这些细节,等我通过招聘流程中规定的所有阶段之后,就可以自己选择心仪的部门和岗位了。这一点让我觉得有些不舒服,但我想还是可以坚持一下的。


不爽的感觉 #1:万一我对谷歌的所有团队都没兴趣怎么办?


Olivia 告诉我,谷歌的面试流程分三个阶段:首先会有两场关于算法和数据结构的编程面试。如果成绩很优异,可能一场就可以过关,但对大多数的面试者都会安排两场。然后是在某个谷歌办公室举行的现场面试,包括好几轮编程面试(还来……),一次系统设计面试,还有必不可少的压轴大戏“谷歌范儿(Googleyness)和领导力”。最后一项面试会检验你能否很好地融入公司。


小贴士 #1:要通过谷歌的面试是很难的,可能会耗时若干个星期。你应该全力以赴,认真准备。


Olivia 还说,就算你能排除万难通过所有的面试到达最后一关,也不代表肯定会被录用。因为谷歌的面试流程还有另外一步,而且是不需要你本人在场的。在最后一步,几个资深谷歌人(他们并不认识你,也没有面试过你)会查看你的简历,阅读面试记录,一起讨论你是否是谷歌想要找的人。只有得到了他们的同意,你才能得到这份工作。这又是让我不舒服的一个地方。


不爽的感觉 #2:就算你以全 A 的成绩通过所有面试,也还是有可能没办法进谷歌工作,因为那些老谷歌人有可能会觉得不该录用你。


与 Olivia 谈过之后,我感觉自己被录用的机会非常渺茫,但我决定就从丰富自己经历的角度来说,我也要努力在面试的道路上走得更远一些。

第一步:远程编程面试

Olivia 帮我安排了第一次远程编程面试。在等待面试的时候,我在 geeksforgeeks 网站上做了许多题,并完成了上面的“面试准备必学课程”。我并不太推荐这个,因为课程上的问题都特别抽象,而且平台也有很多问题。但对于第一次编程面试来说,还是绰绰有余的。


面试还是在谷歌 Hangouts 上举行的。面试官简要地自我介绍了一下,就出了一道题给我做。我不能说太多这道题的具体细节,毕竟这样不合适,而且也不会对你有什么帮助。我只能说这是一个象棋设计中的贪婪算法问题。我花了 50 多分钟完成了这道题,几乎没用面试官给我任何提示。我用 Python 给出了答案和相应的测试。这类面试一般都是在某种共享笔记本上进行的,这一次我用的是 Google Docs。老实说,我还是挺喜欢这个面试官和这道考题的。


我在忐忑不安中等待着结果,也不知我到底表现如何。过了一个星期,我忍不住去问了问面试官,才总算为这个阶段画上了一个句号。后来才知道原来每轮面试都是这样的:总要等上一个星期,总要问问面试官,然后才会有面试结果。


小贴士 #2:别不好意思,直接找面试官问结果就好了。


Olivia 说我的面试结果是“位于平均水平之上”。另外有点不足之处在于我解决问题花的时间太长了:本来题目设计是不能超过 45 分钟的。因此 Olivia 为我安排了第二轮远程编程面试。这时候我总算知道了,谷歌认为我的水平在软件开发者中只能算一般,而不是杰出。不过我还是会继续努力。


一个星期之后举行了第二轮远程编程面试,过程和第一轮非常相似。考题也非常简单。这是一个组合问题,要用上数学公式,并且要仔细考虑边界条件。我花了 40 分钟就完成了,可以这么快速而又优雅地解决这个问题,这让我非常高兴。于是我又花了一个星期等结果,如果通过,下一轮就要到波兰去一趟,进行现场面试了。


等待持续了一个星期,在这段时间内面试官没有回复我的任何问题。Olivia 回复说她出差了,等回到公司之后就会告诉我进一步的消息。面试结束后过了两个星期,我才接到了 Olivia 打来的一个电话,说我的面试结果仍是“位于平均水平之上”,不足之处在于我用了太多的伪代码。她也提到我的测试做得很好。可能原因在于四年前我读过《谷歌软件测试之道》这本书吧,谁知道呢。


小贴士 #3:你的每一行代码都要被测试到。当面试官让你对代码做测试时,你就直接把这句话说给他听,然后再开始写测试用例。


谈话的开头是如此令人愉快,接下来 Olivia 却告诉我她不知道下一步的安排是怎样的,我还要再等等看。又过了一个星期,Olivia 给我发了封邮件,告诉我下一个面试官叫 George,这是个伦敦公司的同事,我还要再通过两轮远程编码面试才行。接下来的事情 George 会为我安排。


当天晚些时候我和 George 打了个电话,他说我的编程面试会在一个月内完成,仍然是远程的方式,具体日期可以由我来选择。他没有透露做远程面试的原因,但说了接下来的编程难度会远大于之前。如果我能通过,接下来就会受邀去他们办公室现场面试。我考虑了一下,觉得既然已经有了开头,我就该一直继续下去,总要得到个结果。

第二步:更多的远程编程面试

于是我开始准备另外两场面试。这次我用的是 HackerRank 和它的“面试准备工具集”。我推荐这一套工具,上面的体验和实际发生的面试非常相似。


小贴士 #4:要准备谷歌的编程面试,最好用 HackerRank 和它的“面试准备工具集”做练习。


新年刚过,面试的安排来了:第一场安排在一月 20 日的上午 11:00(时长 45 分钟),第二场直接安排在第一场结束的 15 分钟之后。这实在太让人意外了。我问 George 能不能把面试安排在两天,一天一场?结果回复很让我意外:“很不好意思,Ilya,我们需要把面试安排在同一天,这样才能让你参与的面试环节少一些,也让面试更高效一些”。这一点也让我挺不舒服的。我等他们等了好几个星期,结果反过来他们现在想“更高效些”。


不爽的感觉 #3:谷歌不会迁就你的时间安排。


这一次的面试题对我来说就比较难了。第一道是棘手的图搜索问题,我开始时只想到了穷举的方法,后来想明白其实可以用图的方案来解决,但为时已晚。


第二道题是关于“2048 游戏”的。这是头一次我没能想明白题面到底是在考什么,可能跟我从来没玩过 2048 游戏也有关。这道题要求我能在 2048 游戏中取胜,并且用比较优雅的方式安排好下个面板的状态。过了两天我才想明白,这 2048 游戏实际上是“15 拼图”游戏的变种,用 A*搜索算法就可以找出解决方案。


很明显,这是我的错,准备面试的时候我忽略了图算法。不要再犯我的错,我在开篇时就提过,最好全力准备面试。


一个星期之后,George 给我打了个电话,告诉我没能通过面试,建议我努力补补算法复杂度和图理论相关的知识。他还提到一年后我可以再次申请谷歌的工作。

这次谷歌面试经历带给我的收获

从一开始我就知道成功的概率很小,但我还是收获颇丰的,主要就是经验,各方面的经验,而且对谷歌的内部工作机制有了一些了解。谷歌总是宣传她的工作条件有多么好,这也许是事实,但对我来说并非如此。这几个月的面试经历告诉我,其实谷歌也就是另一家大型公司而已,内部也有着她自己的官僚问题、模糊的流程、奇怪的规则,等。大家想了解一下谷歌的另一面的话,可以读读 Michael Lynch 的贴子:“为什么我告别谷歌,成了自由职业者”。

接下来的安排

经历了这次谷歌的艰苦卓绝的面试,又在若干家小公司面试之后,我觉得我不适合在别的公司打工。我想成为一名企业家,创办自己的公司。很明显第一步就是成为自由职业者。我有着丰富的全栈网页应用开发经验(我最擅长的技能包括 Node.js/Javascript/React/Docker,你可以在我主页上“我的项目”页面了解一下我的项目经验)。


现在我正在积极寻找客户和提高知名度。如果我可以帮你做什么项目,或者你知道哪里在寻找远程的全栈开发者,请立即与我联系。我很愿意了解你的业务,也可以免费为你提供一些建议。如果我们双方都觉得可以合作,那就可以更进一步。合作不成也没关系。请直接通过邮件 ilia@ipirozhenko.com 联系我。


2020-02-27 12:422672

评论

发布
暂无评论
发现更多内容

最强AIGC实战应用速成指南来了!14天掌握核心技术

飞桨PaddlePaddle

人工智能 深度学习 百度飞桨

10分钟了解Kubernetes网络

俞凡

架构 Kubernetes 云原生

2022百度ESG报告发布:年度答卷展现安全信任承诺

百度安全

黑盒不黑:跨端 C/C++ 库一键源码调试方案

阿里技术

调试

横空出世!京东技术专家狂推的Redis笔记,实战和原理两开花

程序知音

Java 数据库 redis Java进阶 后端技术

【体验有奖】玩转 AIGC,函数计算 x 通义千问预体验,一键部署AI应用赢Airpods

Serverless Devs

函数计算FC AIGC

来了解Amazon CodeWhisperer的强大吧

初学者

云计算 亚马逊 亚马逊云

深入探究Flink:实时处理与批量处理的完美结合

xfgg

Java flink 6 月 优质更文活动

Openjob 1.0.2 重磅发布,新一代分布式任务调度框架

stelin

分布式架构 Java 分布式

不愧是阿里P8出手的并发编程笔记!颠覆了我以往"正确"的认知

程序知音

Java 并发编程 java架构 Java进阶 后端技术

世界500强潍柴动力携手用友BIP全球司库打造资金管理系统,正式启动!

用友BIP

全球司库

瞄准“量效”难题,百度营销创新推出大健康线索营销解决方案-医效通

说山水

AI老师的作者:17岁的高中生,可能是你想要孩子成为的样子

无人之路

AI 教育 ChatGPT

软件测试 | Web自动化测试

测吧(北京)科技有限公司

测试

金融集团企业资金管理难度加倍,用友BIP如何破解这个难题?

用友BIP

资金管理

技术赋能-混流编排功能,助力京东618直播重保 | 京东云技术团队

京东科技开发者

监控 直播技术 直播推流 企业号 6 月 PK 榜 重保

大厂面试必备!字节大佬刷Leetcode总结的算法笔记

做梦都在改BUG

Java 数据结构 算法 LeetCode

咸阳有没有等保测评机构?在哪里?怎么联系?

行云管家

等保 等保测评 等保测评机构 咸阳

让ChatGPT来写今年的高考作文,能得几分?

楚少AI

ChatGPT4 2023高考 ChatGPT写作

揭秘阿里云Flink智能诊断利器——Fllink Job Advisor

阿里云大数据AI技术

大数据 flink 企业号 6 月 PK 榜

主动发现系统稳定性缺陷:混沌工程 | 京东云技术团队

京东科技开发者

混沌工程 系统 系统工程 混沌工程实践 企业号 6 月 PK 榜

深入了解mock.js,打造出类似真实数据的模拟数据

Apifox

程序员 前端 前端开发 API Mock

用户组是什么意思?怎么容易理解?有什么作用?

行云管家

运维 权限 用户组

GreptimeDB v0.3 正式发布|分布式能力全面提升

Greptime 格睿科技

数据库 rust 云原生 分布式数据库 时序数据库

祝贺!Databend 入选 ICT 中国可信云优秀云原生创新案例

Databend

赋能生态合作 共话数字创新 | 2023开放原子全球开源峰会软硬协同开源分论坛即将启幕

开放原子开源基金会

开源 开放原子全球开源峰会 开放原子 软硬协同开源

NFTScan 成为 CMC 官方 NFT 数据合作伙伴

NFT Research

crypto NFT

【Clickhouse】ReplaceingMergeTree引擎final实现合并去重探索 | 京东云技术团队

京东科技开发者

OLAP final clickhosue 企业号 6 月 PK 榜 合并去重

最强攻略 | 1分钟带你了解内测,成为BUG小能手!

百度Geek说

百度 测试 企业号 6 月 PK 榜 6 月 优质更文活动

软件测试 | Selenium验证页面元素

测吧(北京)科技有限公司

测试

Mybatis的parameterType造成线程阻塞问题分析 | 京东云技术团队

京东科技开发者

mybatis CPU告警 企业号 6 月 PK 榜 线程阻塞

2020年的谷歌面经:“远程编程面试”流程_文化 & 方法_Ilia Pirozhenko_InfoQ精选文章