软件工程师求职:谷歌软件工程师面试准备—一个完整的指南
软件工程师求职:谷歌软件工程师面试准备—一个完整的指南
篱笆资讯
软件工程师求职:谷歌软件工程师面试准备—一个完整的指南
谷歌......世界上最具吸引力的雇主和薪酬最高的公司之一。谷歌为杰出的程序员打开了一扇门,他们不仅限于解决他们已经知道的问题,而且他们还应该有技能来解决他们以前没有遇到过的问题。如果你是那些拥有这种技能的人之一,如果你有梦想在谷歌获得一个软件工程师的职位,那么你需要遵循一个策略,你需要了解这个公司在招聘一流的程序员时所寻找的完整过程。

谷歌的软件工程职位的招聘程序与其他公司类似,因此我们将讨论你必须具备的编程技能,我们还将讨论其他一些提示和细节,你在申请谷歌时应牢记。
 
重要观点

• 谷歌只招聘优秀的程序员,所以毫无疑问,解决问题和编码技能(重点领域数据结构和算法)是谷歌软件工程职位的必备技能,但你需要记住,谷歌也非常关心Googlyness,包括对技术的热情、好奇心、道德、友好、良好的公民意识等等。

• 面试的难度取决于你在谷歌申请的软件工程职位的级别。软件工程师或SWE-II(3级)是入门级的全职软件工程师。在这个级别,有4或5轮现场面试,处于L3和L4(以下)边缘的人,他们可能会扔一个设计问题,但通常不会。SWE-III(第4级)是为拥有学士+8年,硕士+5年,博士+2年的候选人准备的。大约是这样。在这个级别,预计有4或5轮现场考试,至少有一个系统设计问题。

• 查看Google in Education团队发布的他们期望潜在工程师具备的技能清单。

• 所有的工程师(各个级别)在整个谷歌代码库中进行协作,有一个高效的代码审查过程,这就是谷歌热衷于看到真正高质量、高效、清晰的代码,没有输入错误的原因。

• 面试官被训练成不会对你的回答作出反应,所以不要指望他们会回答你的方向正确与否。这很糟糕,但却是评估候选人的一个非常有效的方法,所以请准备好看到冰冷如石的的脸。

在我们讨论所有的细节之前,我们强烈建议你看一下谷歌职业网页上的 "我们是如何招聘的",熟悉一下面试过程。对于谷歌软件工程面试,你可以选择任何你熟悉的编程语言,但你应该非常了解你的编程语言,如果选择的是C++或Java就更好了。让我们逐一讨论从接到面试通知到解决面试的所有环节。
 
被谷歌注意到

谷歌收到200多万份简历,但每年只雇用约4000名员工,所以要想得到招聘人员的注意,获得面试机会并不容易。通过一些在这些公司工作的关系,或者你可以采取LinkedIn和在线编码平台的帮助来增加你获得面试电话的机会。下面是一些有助于你获得面试电话的要点...

•    试着做一份单页的简历,只包括相关的东西。要简短,准确,因为没有一个招聘人员有超过15秒的时间来扫描一份简历。只写下那些你觉得舒服的东西,不要伪造任何东西,因为面试官在面试时很容易发现。如果你提到你的项目,那么也要提到你项目的复杂性。

•    你可以参加Google Kickstart或Google Code Jam,这是一个由Google主办的编码比赛。如果你在Google Code Jam中达到第二轮(大约3000名参赛者),Google可能会与你联系。

•  保持你的Linkedin、Github和其他资料的更新,招聘经理使用这些工具,如Linkedin、校友数据库和专业协会来寻找合适的候选人。

•  查看链接 Create Your Resume for Google: 技巧和建议

•  参加会议并开始建立人脉。谷歌员工经常在会议上发言,他们非常平易近人。
 
电话面试

一旦你的简历入围,你将被邀请参加技术电话面试(平均2次电话面试),这与现场面试略有不同,但你需要在一些共享工具上写代码,如Google Docs,这将被面试官看到。面试时间约为45分钟,涵盖数据结构和算法。你可能会遇到两个问题,你应该至少为其中一个问题写代码。以下是一些指导你进行电话面试的要点...

•    你需要为面试官要问的编码问题写代码,一开始就抛出一个粗暴的解决方案,但你也应该尝试改进你的解决方案。想想时间和空间的复杂性,看看你是否能改善这些。

•    在Google Docs上练习写代码。它与文本编辑器不同。没有缩进、语法高亮或自动补全,所以在Google Docs上练习并熟悉它是很好的。

• 在电话面试中要大声思考,说清楚(人们在这里面临麻烦),并向面试官讲述你解决问题的策略。

• 文件会实时更新。如果你是在打你的答案,或者你是在复制和粘贴它,这将是很明显的。

• 如果在第一次面试中,面试官无法正确评估你,他们可能会要求进行第二次电话面试。

现场面试

在电话面试之后,谷歌会进行4-6次现场面试,包括午餐面试,午餐面试并不是真正的面试,只是与Googler的互动。每轮面试大概需要45分钟到一个小时,这将是一轮白板面试,谷歌面试的大部分内容是编码。现在,DSA和核心CS科目的作用来检查你的编码、解决问题的技能和对计算机科学基础知识的掌握。首先,你将经历编码面试回合,然后是系统设计(基于经验)回合。问题的难度是根据你在谷歌申请的级别而定的。

1.   技术编码回合和综合分析问题

•    候选人被测试是否能够使用数据结构和算法的知识来解决现实世界的问题。期望能够为给定的问题找到最优化的解决方案。你必须有能力将你的算法知识与代码一起传达出去。

•    在一般的分析中,问题面试官会给你一个数学、设计或基于意见的问题,他们会调查你的思维过程以及你作为一个员工会如何进行。

•    我们强烈建议你通过CTCI(Cracking the Coding Interview)一书,以及特别是在Leetcode和Programming Interview Questions | CareerCup上的练习题来准备谷歌面试。

•    以下是谷歌面试中普遍遇到的问题类型分布。这个数据是根据Glassdoor的谷歌面试经验得出的。


• 不要做冒泡排序。你应该知道至少一种n*log(n)排序算法的细节,最好是两种(例如,quicksort和merge sort)。在quicksort不实用的情况下,合并排序会非常有用,所以要做好准备。

• 通过基本的树的构造、遍历和操作算法。熟悉二叉树、n-ary树和三叉树的题目,至少有一种平衡二叉树,例如红/黑树,splay树,或AVL树以及实现。理解树的遍历算法。BFS和DFS,内序,后序,和前序遍历。

• 熟悉如何在内存中表示图和基本的图遍历算法。不要专注于太多像Dijkstra那样的花哨的算法。如果你有足够的时间,可以研究这个话题。

• 你应该知道最有名的几类NP-complete问题,如旅行推销员和knapsack问题,并且在面试官变相问你的时候能够认出它们。

•    不要忘记最重要的CS科目之一操作系统。线程、并发、进程、死锁、活锁以及阅读操作系统的其他主题。

•    面试官肯定会检查你如何决定哪种数据结构适合你给面试官的问题。

•    不要忘记在所有情况下测试你的代码。在写完解决方案后,你必须测试你的代码,即使是最小的,因为如果你不这样做,分数就会被扣掉。

•    其中一个由真正的谷歌工程师主持的模拟面试视频《编码/工程面试实例》肯定会帮助你解决与编码有关的问题。

2. 系统设计回合

•    系统设计问题是一个开放式的对话,这一轮主要是与有经验的候选人进行,测试你设计和扩展基于技术的系统的整体能力,如设计Gmail、youtube、uber等。

•    查看链接系统设计面试问题,系统设计入门。

•    L4及以下级别可以得到OO设计,也许还有一些系统设计相关的问题。在这里,你应该知道高级的细节。如果你申请的是L5及以上的职位,你会被问到系统设计问题,希望你能定义系统的目标/要求,定义高层体系结构,深入研究一些组件,并识别瓶颈。

•    在谷歌,可扩展性始终是很重要的。所以预计设计问题将是大尺寸系统的一个模糊的现实世界问题。他们正在寻找思考的过程,以及你如何把事情分解,最终得到太有创意和可扩展的解决方案。

面试官在寻找什么?

"我们不是简单地寻找工程师来解决他们已经知道答案的问题;我们感兴趣的是那些能够找出他们以前没有遇到过的问题的答案的工程师。"

上述内容是面试官要寻找的最重要的东西,也请阅读以下几点...

•    面试官在面试时一般都有一个心态,即他/她是否能在日常工作中与候选人一起工作,所以在面试时不要表现出傲慢或自负的迹象。

•    面试官会检查你在实现代码时是否使用了合适的数据结构和算法。

•    面试官会注意到你的方法和你如何优化解决方案,你对编程语言选择的知识,你的编码速度,任何你错过的角落案例,以及你如何分析时间和空间的复杂性。

•    他们会检查你是如何传达你的思维过程,以合乎逻辑的方式解决一个特定的问题。他们还将检查你是否能够抓住提示,并能够继续进行解决。

•    候选人是否对新想法持开放态度?候选人的解决方案是否灵活?

面试评估标准:所有的反馈都是在面试后从不同的面试官那里收集的,然后在一堆不同的类别中对你进行1-4分的评分,其中包括你的编码经验和分析能力。然后,这些反馈意见会被送到招聘委员会进行最终决定。

提示:

•    在整个面试过程中要学会 "大声思考",否则面试官将不知道你在想什么。向面试官展示你对问题的思考过程,以及你将采取什么方法来解决问题。

•    练习在纸上或白板上写代码。这对你的面试会有很大的帮助。

•    永远不要说你做不到。即使有一个你以前没有解决过的问题,或者看起来你不能解决的问题,也要从不同的角度继续攻克这个问题,面试官会给你提示的。但是,如果你说你不能解决这个问题,这是一个很大的红旗,你可能最终会被拒绝。

•    在跳到解决方案之前,一定要问相关的问题,使其更加清晰。始终与面试官核对你的假设,并在进入解决方案之前清除你的所有疑虑。

•    我们强烈建议你不要写伪代码来设计你的代码。在45分钟的面试中,你没有时间这样做。

coffee 直连行业大牛导师,1v1模拟面试与求职指导
mentors
airplay 实战与求职精品课程
数据科学
软件工程
人工智能
金融商科
产品经理
产品设计
bookmark 2000+名企面试真题
amazon google tiktok microsoft meta