我曾经也面过G家然后还通过了,只是最后还是选择了FB…… 不过以我之后多年的面试经验,以及认识很多G家的工程师和HR,对这个问题还是很有心得的。
首先G家的面试流程会涉及到两种面试形式,每一轮面试官都会给出反馈,然后确定后续的步骤。
一、面试流程
第一阶段:电面(Phone Screen)
这一轮的面试官很有可能是你以后的同事或manager。
如果你申请SDE岗位,这一轮将持续 30~60 分钟。回答编码相关问题时,你需要一边在与面试官共享的 Google Doc 上编写代码,一边清晰地阐述你的思路。
Tips:建议使用耳机或扬声器,以便你能够自由输入相关内容。
电面会问到数据结构和算法。使用你最擅长的编程语言写 20-30 行代码。根据如下步骤做编码练习:
- 你会被问到一个开放式的问题,面试官会据此问一些问题,然后制定一些要求
- 用一个算法解释这个问题
- 将其转换为可行的代码(因为有时间限制,不要想着一下子写出完美的代码,写下你所想到的,稍后再进行修改,还要确保考虑了边界情况和运行问题)
- 优化代码,测试用例并发现错误
第二阶段:现场面试(Onsite)
一般会有4轮面试,(其中一些面试官可能成为你以后的同事,还有一些是跨职能部门的员工)每轮的时间大约在45分钟。
如果面试SDE岗位,面试官会更看重你的编码技能和技术领域的专业知识。(包括工具或编程语言,以及有关数据结构和算法等主题的一般知识)
面试官通常会反复提及相关的问题,就像讨论实际工作中遇到的问题一样,因为他们通过双向沟通碰撞思维逻辑,也能考察出你的底层技术是否扎实,沟通能力是否流畅,以及逻辑思维是否严谨。
需要注意的是,今年受疫情影响,包括Google在内的大厂的onsite都改成了远程面试(VO),并且随着疫情的扩散,大厂也一次次在推迟work from home的日期,目前宣布到明年第一季度开放办公室的较多,虽然不确定明年会不会继续延期,但今年的面试肯定都是VO了。
在说回实际面试,很多人往往不知道该怎么跟面试官沟通,可能是:
- 平时刷题达人,一面试就大脑放空
- 明明有解题思路,却跪在了英语口语不好,表达不出
- 对Behavior Question无能为力,总是掉进面试官的套路里
- 面试时不知道问什么问题,全场尬聊……
那么针对这些面试“拦路虎”,推荐试听体验《面试软技能指导 - BQ / Resume / Project》,由前Google工程师&资深面试官分享,从简历指导、全英文模拟面试、行为类问题、薪资谈判等几个大方向解决大厂面试难点。
第一章《除了刷题,还有哪些技能是拿到offer不可或缺的要素》开放免费试听,还能和老师在线英文模拟面试。
二、如何准备面试?
适用于技术职位
1、编码实践
你可以在 LintCode、CodeLab、Quora 和 Stack Overflow 等网站上找到一些编码问题示例。美国大公司面试真题训练和 Google Mock Interview 也值得一做。
面试会要求手写,所以请在纸张或白板上练习编写代码。一定要测试你的代码,并确保它易读而且没有错误。不要纠结于小的语法错误,比如对于给定的方法用哪个子串,直接选择一个,让面试官知道就可以了。
2、编码
至少擅长一种编程语言,最好是C++,Java,Python,Go或C。如果你擅长API、面向对象设计和编程,知道如何测试代码,以及知道如何处理边界情况更好。
Tips:面试注重的是概念理解而不是记忆。
3、算法
掌握用自下而上和自顶向下的算法解决问题。知道算法的复杂性,以及如何优化/改变算法。熟悉解决Google问题的算法:排序,分治法,动态规划,贪心,递归或有关数据结构的算法。
知道Big-O符号(例如运行时间),并准备好像Dijkstra和A *这样的复杂算法。在编写代码之前,建议你讨论或阐述你所想到的算法。
4、排序
熟悉常见的排序类型以及它们有效的输入数据类型。考虑运行时间和空间。例如,在特殊情况下,插入排序或基数排序比通用的快速排序、归并排序、堆排序答案要好得多。
5、数据结构
研究尽可能多的数据结构。最常使用的数据结构是数组,链表,堆栈,队列,哈希集合,哈希图,哈希表,字典树,树和二叉树,堆和图。
了解内部的数据结构,以及哪些算法倾向于和哪个数据结构一起使用。
6、数学
一些面试官会提一些基本的离散数学问题。尤其在Google,因为Google的工作经常会接触计数问题、概率问题和其他离散Math 101情况。
在面试之前花上一些时间,记住基本概率理论和组合的基本要素。熟悉n选择问题和类似的问题。
7、图
考虑一个问题是否可以应用于距离、搜索、连接、循环检测等图形算法中。
有三种图形表示方法:对象和指针、矩阵、邻接列表,你需要熟悉每个方法及其利弊。掌握基本图遍历算法、广度优先搜索和深度优先搜索。了解它们的复杂度,了解什么情况该用哪个,以及如何在实际代码中实现它们。
8、递归
许多编码问题涉及递归的思想和用递归编码给出解决方案。对于可以用迭代的方法解决的问题,用递归找到更优的解决方案。