NVIDIA 初创加速计划,免费加速您的创业启动 了解详情
写点什么

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:422447

评论

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

澜舟科技创始人兼CEO周明受邀出席“基础科学与人工智能论坛”

澜舟孟子开源社区

视觉套件专项活动!与飞桨技术专家一起提升技术实力,更多荣誉奖励等你领取

飞桨PaddlePaddle

人工智能 百度 paddle 飞桨 百度飞桨

Golang微服务框架kratos实现SSE服务

喵个咪

golang websocket Kratos openai

3D建模和3D渲染是吃CPU还是显卡?以及专业图形显卡和游戏显卡的区别

Finovy Cloud

3D

密集发布AI应用后,微软2023财报传递了什么信号|TE解读

TE智库

fastposter v2.16.0 让海报开发更简单

物有本末

图片处理 海报生成器 海报生成

Java程序员常用的日志框架有哪些?

java易二三

Java 编程 程序员 计算机

Centos7安装Node.js详细教程。

百度搜索:蓝易云

node.js 云计算 Linux centos 运维

Golang微服务框架kratos实现Socket.IO服务

喵个咪

golang socket websocket Kratos

Kratos 大乱炖 —— 整合其他Web框架:Gin、FastHttp、Hertz

喵个咪

golang gin Kratos

用故事给予企业全面预算管理一个灵魂

智达方通

全面预算管理 企业全面预算管理 预算场景

热烈祝贺埃文科技荣获CCF第38届中国计算机应用大会计算机应用科学技术二等奖

郑州埃文科技

Golang微服务框架kratos实现SignalR服务

喵个咪

golang SignalR Kratos

Java基础 日期和时间

java易二三

程序员 计算机 java 编程

NineData已支持「最受欢迎数据库」PostgreSQL

NineData

postgresql 客户端 数据源 NineData 集成AI

Cassandra SSTable 合并策略(一):STCS

冰心的小屋

Cassandra STCS Compaction

分布式事务两阶段提交和三阶段提交有什么区别?

王磊

java面试

Golang微服框架Kratos与它的小伙伴系列 - ORM框架 - GORM

喵个咪

golang ORM gorm Kratos

Golang微服务框架Kratos实现GraphQL服务

喵个咪

golang graphql Kratos

Golang微服务框架Kratos实现Thrift服务

喵个咪

云服务器挂载硬盘命令

百度搜索:蓝易云

云计算 Linux 运维 云服务器 硬盘

百度智能云连拿四年第一,为什么要深耕AI公有云市场

脑极体

AI 大模型

Dify.AI:简单易用的 LLMOps 平台,可视化创造和运营你的 AI 原生应用

Dify

AI LLMOps

Golang微服框架Kratos与它的小伙伴系列 - ORM框架 - Ent

喵个咪

golang ORM Kratos

Spring AOP 中,切点有多少种定义方式?

江南一点雨

Java spring

拥抱AIGC,他们有话说——百度李双龙:AIGC将赋能多个场域并惠及千行百业

百度Geek说

人工智能 百度 企业号 7 月 PK 榜 AICG

Linux系统Apache优化与防盗链详细教程

百度搜索:蓝易云

Apache 云计算 Linux 运维 云服务器

快速玩转 Llama2!阿里云机器学习 PAI 推出最佳实践(二)——全参数微调训练

阿里云大数据AI技术

人工智能

oracle已有表的分表分区优化操作步骤(单表过大)

zhengzai7

oracle 表分区

Linux系统Nginx优化与防盗链详细教程

百度搜索:蓝易云

nginx 云计算 Linux 运维 云服务器

直播程序源码开发建设:洞察全局,数据统计与分析功能-山东布谷科技创作

山东布谷科技

软件开发 直播 源码搭建 程序源码 mac数据分析统计软件

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