Google 一直是许多开发者心驰神往的地方,本文作者分享了自己面试 Google 的经历,尽管面试挂掉了,但有一些避坑的技巧仍然值得我们学习。

作者 | sochix

译者 | 明明如月,责编 | 唐小引

头图 | CSDN 下载自东方 IC

出品 | CSDN(ID:CSDNnews)

以下为译文:

朋友你好,我刚刚结束了在 Google 的面试,我想尽早告诉你面试过程中的一些有趣的和令人沮丧的事情。这样你就可以了解 Google 面试的内容和相关的流程。我也会分享一些关于如何准备面试和避免错误的小贴士。

如果你正在寻找 Google 面试的成功案例 ,那么这篇文章不适合你。实际上,我面试没有通过,但整个经历对我来说非常有趣,并且把我带到了职业生涯的另一个阶段。在这篇文章的最后,我会分享更多的细节。为了保护 Google 员工的隐私,所有姓名和身份信息都已更改。

初步筛选面试

我的故事开始于十月的一个下雨的早晨。我收到了一条来自 Google 招聘人员奥利维亚的消息,主题是“有兴趣解决 Google 的高影响力工程问题吗? ”。当时我刚刚完成了几个项目,正在寻找新的挑战。我不想错过去  Google 工作的好机会,因此我迅速回应,“是的,当然” ,并通过 Google Hangouts(谷歌环聊)进行了预约。

两天后,我们通过 Hangouts 进行了交谈。奥利维亚告诉我在 Google 工作是多么令人兴奋,并交代了招聘流程。当我问及这个职位的具体情况时,她告诉我,他们正在为波兰华沙的新办公室寻找适合支持和开发 Google Cloud 功能的人员。当我询问了我的职权范围内的具体职责,以及我将参与的团队,但她说,这个并不重要 —— 我可以在面试流程走完后,选择想要的团队和职位。对我来说,这是第一个令人沮丧的时刻,但我认为值得坚持下去。

  • 令人沮丧的时刻 1:如果 Google 没有我想加入的团队怎么办?

奥利维亚告诉我,Google 的面试过程包括三个阶段: 首先,有两个关于算法和数据结构的远程编码题。如果你很出色,你可能只要一次面试就可以通过,但是对于一个普通的软件工程师来说, 很可能要 2 次才行。

第二阶段,是在 Google 的一个办公室进行现场面试,其中包括几次编码面试(再一次编程!)和一次系统设计面试,最后是“Google 范儿和领导力”。最后一个是检测你是否适合这家公司。

  • 小贴士 1:Google 的面试过程是很困难的,而且会占用你几个星期的时间。你需要全力以赴做好准备。

用奥利维亚的话说,“即使你通过了所有的面试并进入了最后阶段,也不能保证你能得到这份工作。因为 Google 的招聘流程还有一个流程,这个流程将在你不在的情况下进行。在最后一个阶段,几位 Google 高管(他们不认识你,也从未与你交谈过)将审阅你的简历和面试官的反馈,并决定你是否适合 Google。只有得到他们的认可,你才能得到这份工作。” 好了,现在是第二个令人沮丧的时刻。

  • 令人沮丧的时刻 2:如果你每次面试的成绩都是 A 级,但仍然没有拿到 offer,肯定是一个 Google 高管认为你不适合被聘用。

在筛选面试后,我意识到我的机会还是很渺茫,于是决定为了积累经验,我会尽我所能。

第一阶段: 远程编程面试

后来,奥利维亚为我安排了第一次远程编程面试。与此同时,我浏览了 geeksforgeeks 网站上的几个算法题,并完成了“必须做的面试准备课程”。我不能推荐它,因为这门课的问题非常抽象,而且平台有缺陷,但是对于第一个编码挑战来说已经足够了。

这个电话是通过 Google Hangouts 打来的。面试官简短地向我介绍了一下他自己,并让我解决一个编程难题。我不能告诉你编码挑战的细节(这样做对别人不公平,也对你没什么帮助)。我唯一能分享的是,它是国际象棋游戏环境中的某种贪婪算法。

在没有面试官任何提示下,我在 50 多分钟内解决了这个问题。该解决方案包括 Python 上的测试和代码。所有这些类型的访谈的编码通常都是在某种共享的笔记本上完成的,在本次面试中使用的是 Google 文档。坦白说,面试官本人和挑战都很有趣。

我一直在等待结果: 我表现得好不好?结果在一周后才出来,而且是在我向招聘人员询问最新情况之后。这将成为以下所有面试的共同主题:结果只有在一周后才能准备好,并向招聘人员发出信息。

  • 小贴士 2:不要羞于向招聘人员询问你上次面试的结果。

奥利维亚说我的面试结果“大多数是正面的”。唯一存在的问题是解决这个问题花费的时间:不应该超过 45 分钟。因此,奥利维亚要求我再接受一次远程编程面试。从这一点上,我明白了在 Google 眼中我只是一个普通的软件开发者,而不是一个出色的开发者。但是没关系,我决定继续前行。

第二次远程面试是在一周之后,而且和第一次差不多。编码问题很简单。这是一个组合问题,要解决它,你必须想出数学公式,仔细考虑所有的边界情况。这个解决方案只花了我 40 分钟,我非常兴奋能够以如此快速和优雅的方式解决这个问题。我等待着招聘人员的最终反馈。下一步是前往波兰进行现场面试。

我等了一个星期,招聘人员没有回我的信息。然后奥利维亚回答说,她正在出差,回到办公室后会回复我。上次面试两周后,我接到了奥利维亚的语音电话。她说,我上次的面试“大多数都是积极的”。唯一的缺点是我使用了大量的伪代码。她还提到我很擅长测试(也许是因为四年前我读了一本《Google 软件测试之道》的书,谁知道呢?)。

  • 小贴士 3:你应该在编程面试中用测试覆盖每一行代码。当面试官让你测试你的功能时,只要大声说出来,然后开始写你的测试。

在我们的谈话如此充满希望的开始之后,她说他们不知道下一步应该做什么,所以我应该等一会儿。一周后,我收到奥利维亚的短信,她说从现在开始,我的招聘人员将是另一个来自伦敦办公室的乔治,我需要通过另外两个远程编程面试。我会在适当的时候从乔治那里得到所有的细节。

当天晚些时候,我接到了乔治的电话。他说我的编程面试将在一个月内远程完成,我应该选择一个日期。他拒绝透漏为什么面试周期如此长,但是提到这些编码挑战会比以前的困难得多,如果我通过了,我会被邀请到他们的办公室参加其他的面试。我决定既然已经开始,就应该坚持到底。

第二阶段:更多的远程编程面试

我开始准备另外两次面试。这次我用的是 HackerRank  和它的“《Interview Preparation Kit》(面试准备工具包)”。我强烈推荐它,因为里面的内容和面试的内容非常接近。

  • 小贴士 4:Hackerank 和它的《Interview Preparation Kit》(面试准备工具包)是为 Google 编程挑战做准备的最好资源。

新年假期刚过,我就收到了第一次面试通知 —— 第一次是在 1  月 20 日 11 点(持续时间 45 分钟)。真是出乎意料。我问乔治,我们是否可以把面试安排在两天进行,得到了一个出乎意料的答案:“不好意思,我们需要在同一天进行这些面试,以尽可能减少面试过程中的流程,并尽可能保持时间效率。” 这又是一个令人沮丧的时刻。我已经等了他们好几个星期了,现在他们却想要“节省时间”。

  • 令人沮丧的时刻 3:Google 不尊重你的时间

这次的面试对我来说很困难。第一次面试是关于在图表上棘手的搜索。一开始我只是想出了一个蛮力解决方案,后来我意识到可以用图表来完成这个任务——但是为时已晚。

第二次面试是关于 “2048 游戏”。这是我第一次无法清楚地理解这项任务,也许是因为我根本没有玩过 2048 游戏。这些问题是关于在 2048 游戏中取胜的策略和产生下一个棋盘状态的优雅解决方案。仅仅两天后,我意识到 2048 游戏是某种“数字推盘游戏” ,并且可以通过 A * 搜索算法解决。

这显然是我的错 —— 在准备过程中我没有花很多的时间精力在图形算法上。所以请你不要重蹈覆辙 —— 正如我之前所说的,把你所有的努力都投入到面试准备中去。

经过一个星期的等待,乔治给我打了个语音电话,说我没有通过面试,我应该提高我在时间复杂度和图形理论方面的技能。他建议我明年可以重新申请加入 Google。

我从 Google 的面试过程中学到了什么?

在我刚开始 Google 面试时,我清楚地知道我得到这份工作的机会很渺茫。经过这么多面试,我得到了什么?经验——丰富的经验——以及对 Google 内部运作方式的一些了解。Google 有一个神话,它是一个梦想的工作场所。也许吧,但对我来说不是。经过几个月的面试,我明白了 Google 不过是一个有着一些官僚主义问题、不透明的流程和奇怪的规则的大型企业。更多关于 Google 另一面的信息可以在 Michael Lynch 的帖子中找到“为什么我离开 Google 为自己工作”(https://mtlynch.io/why-i-quit-google/)。

我的下一步规划

经过 Google 的艰难面试以及小型初创企业和其他公司的几次面试之后,我认为自己不适合给别人打工。我想成为一名企业家并创建自己的公司。对我来说,首先要做一个自由职业者。我认为我擅长全栈 Web 开发(我首选的栈技术栈是 Node.js / JavaScript / React / Docker,您可以在《我参与的项目》)。

现在我急切地寻找客户和合同。如果你认为你有东西要给我,或者如果你知道有人需要一个远程的全栈开发人员,请推荐给我。我很乐意和你谈生意,或者给你一些免费的建议。

英文:Google Interviewing Process for Software Developer Role in 2020

链接:https://habr.com/en/post/489698/

作者:sochix

译者:明明如月,知名互联网公司 Java 高级开发工程师,CSDN 博客专家。

本文为 CSDN 翻译,转载请注明来源出处。

【End】

《原力计划【第二季】- 学习力挑战》正式开始!
即日起至 3月21日,千万流量支持原创作者,更有专属【勋章】等你来挑战

推荐阅读 

☞小米回应"暴力裁员";报告称安卓手机贬值速度是 iPhone 两倍;Ant Design 4.0.1 发布| 极客头条

☞技术大佬:我去,你写的 switch 语句也太老土了吧!

☞赔偿谷歌1.8亿美元!前Uber自动驾驶主管被告到破产

☞乔布斯遗孀裸捐 250 亿美元财产:没兴趣累积财富

☞时间复杂度的表示、分析、计算方法……一文带你看懂时间复杂度!

☞闪电网络的 5 个优点和4 个缺点、本质、来源与工作原理……一文带你读懂闪电网络!

你点的每一个在看,我认真当成了喜欢

到 Google 面试去!开发者必读的避坑指南相关推荐

  1. 如何免费开通Google Ads账号?Ads注册避坑指南

    如何免费开通Google Ads账号?Ads注册避坑指南 https://park.mobayke.com/google-adwords/register-google-ads-account.htm ...

  2. Android RecyclerView 绘制流程及Recycler缓存,Android开发者必看避坑指南

    - mState.mIsMeasuring = false; if (mState.mLayoutStep == State.STEP_START) { dispatchLayoutStep1(); ...

  3. Java开发者必看避坑指南!人生转折!

    一.首先本职工作一定要做好做精 本人之前在干兼职的时候,也忽视过本职工作,从而导致自己落后平均技术水平,虽然之后迎头赶上,但这不能不算是个遗憾.前在接一些活的时候就感觉技术的重要性了,如果当年我技术再 ...

  4. @程序员,区块链开发平台避坑指南!

    来源 | Michiel Mulders 译者 | 火火酱 责编 | Carol 出品 | 区块链大本营(blockchain_camp) 市面上有很多不同的区块链网络,就可扩展性和功能而言,每个区块 ...

  5. Github星标百万而霸榜的大厂面试避坑指南,成功帮我规避“毁约”

    不知不觉十月已至,"金九银十"招聘旺季也快拉下帷幕! 这个时候,应届生开始集体走向社会,而职场人也迎来了跳槽涨薪的好时机. 可现实的求职情况却是一片困境:从中小微到"大厂 ...

  6. 算法面试避坑指南,助你轻松应对Java面试

    一般来说想要成为Java开发,除了需要学习相关的技术之外,还需要学习基础知识,以便应对Java开发面试. 算法面试避坑指南五大常见算法 面试的过程其实也是一个自我认识和学习的过程,即便暂时没打算跳槽, ...

  7. 17条避坑指南:一份来自谷歌的数据库经验贴

    点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 来源 | https://medium.com/@rak ...

  8. Serverless 时代前端避坑指南

    作者 | 张挺 每个时代,从来不缺机会. 云原生的浪潮席卷而来,从 14 年到现在,上云的声音就没有停歇过,而如今到了 2020,云厂商都已经准备好了,而前端,是否也准备好踏入这纷争的领域,去拥抱时代 ...

  9. dubbo日志关闭_不可忽视的Dubbo线程池避坑指南

    推荐阅读: 阿里巴巴4面Java岗位:算法+性能调优+并发+多线程+数据库 Dubbo+Kafka+MyBatis+reids+Spring+多线程等,学完就去面试BAT 问题描述 线上突然出现Dub ...

最新文章

  1. js 矩阵转置_js对象数组矩阵转置(行转列)的实践
  2. 《新程序员003》来了!华为、阿里等 30+ 公司的云原生及数字化实战经验!
  3. 嵌入式linux启动过程分析,嵌入式Linux裸机开发(二)——S5PV210启动过程分析
  4. Linux socket本地进程间通信之UDP
  5. 离线轻量级大数据平台Spark之读取CSV文件实例
  6. spider RPC入门指南
  7. Silverlight 2学习笔记一:初识Silverlight
  8. ftp服务器上传文件权限设置,ftp服务器 上传文件权限设置
  9. 【转】深入理解JavaScript闭包(closure)
  10. Android 驱动(8)---简单实例讲解linux的module模块编译步骤
  11. 南京师范大学与南京林业大学计算机,这8所高校“同宗同源”但不同命!有些是“985”,有些却是“双非”?...
  12. 《永不放弃-马云给创业者的24堂课》— 综合素质提升书籍
  13. plantUML 学习
  14. 极简算法史---序 前言
  15. c语言实现猜数字游戏
  16. ue4设置组合键_UE4快捷键
  17. 判断字符串是否是邮箱或者手机号码格式
  18. 计算机音乐出山,出山 - 萧忆情Alex - 5SING中国原创音乐基地
  19. 前端单元测试到底要怎么写?看这一篇就够了
  20. 基于融云的即时通讯开发(一)

热门文章

  1. 【转】JMeter学习(十七)JMeter测试Java
  2. ASCII控制字符在vi和notepadd++中的表示法
  3. 《SQL高级应用和数据仓库基础(MySQL版)》学习笔记 ·010【高级查询】
  4. ais信号接收设备_基于USRP的AIS接收机实现
  5. 相对布局父类属性_Unity3D RectTransform使用详解:布局、属性、方法
  6. leetode题库5438--制作 m 束花所需的最少天数
  7. darknet编译报错 error: ‘__fatBinC_Wrapper_t’ does not name a type
  8. 单调栈和单调队列的应用即总结
  9. mysql8.0 创建用户并授权
  10. 2021年中国再生纱市场趋势报告、技术动态创新及2027年市场预测