当前位置:首页 > 新闻中心 > 行业新闻 >

面向软件工程师的面试准备–以Google为例的完整指南

点击次数:2020-11-24 18:26:52【打印】【关闭】

Google…世界上最有吸引力的雇主和薪酬最高的公司之一。Google为杰出的程序员打开了一扇门,他们不仅可以解决他们已经知道的问题,而且他们应该具有解决以前从未遇到

 Google…世界上最有吸引力的雇主和薪酬最高的公司之一。Google为杰出的程序员打开了一扇门,他们不仅可以解决他们已经知道的问题,而且他们应该具有解决以前从未遇到过的问题的技能。如果您是其中一名具备此技能的人,并且您梦想着在Google担任软件工程师,那么您需要遵循一项策略,并且需要了解该公司正在寻找的完整流程。


重要事项

Google只聘请杰出的程序员,因此毫无疑问,解决问题和编码技能(重点区域数据结构和算法)是Google在软件工程中必不可少的技能,但您需要记住,Google也非常在意关于Googlyness的信息,涵盖了对技术的热情,好奇心,道德,友善,良好的公民身份等等。

面试的难易程度取决于您在Google中应聘的软件工程角色的水平。软件工程师或SWE-II(3级)是入门级的全职软件工程师。在这个级别上,有4或5个现场回合,L3和L4的风口浪尖(如下),他们可能会提出设计问题,但一般不会。SWE-III(4级)适用于博士学位等。在这个级别上,至少要进行4到5个现场回合,至少还要回答一个系统设计问题。

所有工程师(每个级别)都在整个Google代码库中进行协作,并具有高效的代码审查流程,这就是Google渴望看到高质量,高效,清晰的代码而不会键入错误的原因。

面试者受过训练,不会对您的答案做出反应,因此不要指望他们回答是或否,无论您是否朝着正确的方向前进。也许这很糟糕,但是是评估候选人的一种非常有效的方法,因此请做好心理准备,时刻看着冷酷的面孔。


在讨论所有细节之前,强烈建议您先看看Google招聘页面上的招聘方式,并熟悉面试过程。对于Google软件工程面试,您可以选择自己喜欢的任何编程语言,但您应该非常了解您的编程语言,如果选择的是C ++或Java,那是最好的了。

受到Google的注意

Google收到超过200万份简历,但每年仅雇用约4000名员工,因此要招募面试电话的人很难注意到它。

尝试制作一张单页的简历,并仅包含相关内容。简而言之,因为没有一个招聘人员扫描简历的时间超过15秒。只写下您喜欢的那些东西,不要伪造任何东西,因为面试官可以在面试中轻松发现这一点。如果要提及您的项目,那么也要提及项目的复杂性。

您可以参加Google举办的编码竞赛Google Kickstart或Google Code Jam。如果您在Google Code Jam中进入第二轮比赛(约3000名参赛者),则Google可能会与您联系。

随时更新您的Github和其他个人资料。


电话采访

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

您需要为面试官会问的编码问题编写代码,并在一开始就抛出有力解决方案,但是您也应该尝试改进您的解决方案。考虑时间和空间的复杂性,看看是否可以改善这些时间和空间。

练习在Google文档上编写代码。它与文本编辑器不同。没有缩进,语法突出显示和自动补全功能,因此最好在Google文档上进行练习并熟悉它。

该文档将实时更新。如果您键入答案是复制粘贴,这将是显而易见的。

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


现场采访

电话采访后,Google会进行4-6次现场采访。每个回合大约需要45分钟到一个小时,这将是白板回合,而Google访谈的大部分内容都包括编码,这里以检查您的编码,解决问题的技能和对计算机科学基础知识的掌握。首先,您将经历编码采访回合,然后是系统设计(基于经验)回合。问题的难度等级取决于您在Google中申请的等级。

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

使用数据结构和算法知识测试候选人是否可以解决现实世界中的问题。期望能够针对给定的问题找到最优化的解决方案。必须具备与算法一起传达算法知识的能力。

一般来说,问题面试官会给您一个基于数学,设计或基于意见的问题,他们将在这里调查您的思维过程以及您作为员工的工作方式。


不要做泡沫排序。您应该知道至少一种n * log(n)排序算法的细节,最好是两种(例如,快速排序和合并排序)。合并排序在无法进行快速排序的情况下非常有用,因此请做好准备。

完成基本的树结构,遍历和操作算法。熟悉主题二叉树,n元树和trie树,以及至少一种类型的平衡二叉树,例如红/黑树,八字树或AVL树以及实现。了解树遍历算法:BFS和DFS,有序,后序和前序遍历。

熟悉如何在内存中表示图形,基本的图形遍历算法。不要集中精力像Dijkstra这样的花哨算法。如果您有足够的时间,可以研究此主题。

您应该了解最著名的NP完全问题类别,例如旅行推销员和背包问题,并且当面试官变相询问您时能够识别它们。

面试官可能会问一些基本的离散数学问题,因此也要花一些时间在那儿,并研究组合数学,概率也要熟悉n-choose-k问题。

不要忘记最重要的CS主题操作系统之一。线程,并发,进程,死锁,活动锁,并阅读有关OS中其他主题的信息。

面试官一定会检查您如何确定哪种数据结构适合面试官提出的问题。

不要忘记在所有情况下都测试您的代码。编写解决方案后,您必须测试您的代码,即使是最低限度的测试,因为如果您不这样做,则将扣分。

2.系统设计回合:

系统设计问题是不限成员名额的对话,这一轮主要由经验丰富的候选人进行,他们将测试您设计和扩展基于技术的系统(例如设计Gmail,youtube等)的整体能力。

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

L4及以下版本可以获得OO设计,甚至可能涉及一些与系统设计有关的问题。您应该在这里了解高级细节。如果您正在申请L5或更高版本,您将被问到系统设计问题,期望您可以定义系统的目标/需求,定义高级架构,深入研究某些组件并确定瓶颈。

在Google中,可扩展性始终很重要。因此,期望设计问题对于大型系统将是一个模棱两可的现实世界问题。他们正在寻找思考的过程,以及如何分解事物以最终获得富于创造力和可扩展性的解决方案。


因为篇幅缘故,就不再多说了。这里只是以谷歌为例。当然一般来说没有这么严格,但是其中很多会对您的面试有莫大的帮助。

浏览相关内容: