
Google SDE 面经 流程通常安排四轮,以 Coding 为核心,穿插BQ。对于准备跳槽或校招的同学来说,每一轮都独立打分,建议分开准备、专项突破。
Round 1: Behavioral(45 min)
面试官是个挺友善的亚裔男生,开场先聊了七八分钟家常(天气、追剧、来美多久之类),气氛很轻松,熟络起来才正式开始面试,开始先是自我介绍,然后是面试官的介绍她和团队在干嘛。
- 谷歌有什么你感兴趣的地方
- 为什么选择谷歌呢
- 你在这个团队(指的是简历上面的项目)负责的是什么
- 你觉得哪个项目最具有挑战性
- 关于团队有分歧你怎么办
Round 2: BQ + Coding(45 min)
面试官是印度籍工程师,口音比较明显、说话偏快,不过条理很清楚。先抛了两道 BQ,紧接着就进入 Coding 环节。
BQ
- 为什么想来 Google?
- 分享一个你识别并解决技术风险的实际案例。
Coding:合并区间
给定一组可能无序的区间,合并所有重叠部分。例如输入 [[1,3],[2,6],[8,10],[15,18]],输出 [[1,6],[8,10],[15,18]]。
思路是排序加贪心:先按起点升序排序,再遍历区间。如果新区间的起点不大于当前区间的终点,说明存在重叠,将终点更新为两者的最大值;否则保存当前区间,并开始处理新区间。排序占主要开销,时间复杂度为 O(N log N),空间复杂度取决于排序方式和结果存储。
Follow-up 问到跨天的循环区间,例如 23:00-02:00。可以先确定一天的时间范围,再将跨天区间拆成 [23:00, 24:00) 和 [00:00, 02:00],按普通区间合并;最后根据首尾区间是否相连,决定是否重新组合为跨天区间。
Round 3: Coding(45 min)
这轮面试官是一个韩国人,整场气氛最 relaxed,几乎没聊 BQ,简单打个招呼就动笔写代码,人很 nice,会顺着你的思路给提示。
题目:给定二叉树的根,按层收集树的节点。每个关卡都包含从树上移除的叶子
思路:这里不用直接模拟删除叶子节点,而是观察到节点删除轮次等价于它到叶子的高度。通过一次后序遍历,自底向上计算每个节点高度,并按照高度分组,就能得到删除顺序了。
Follow up : 如果要求输出顺序严格按从左到右怎么办
Google还是比较喜欢考树相关的题目的。在 Google 面试中,相比于是不是做过这道题更重要的是展示自己的解题思路、分析过程以及沟通能力。
Round 4: Coding + BQ(45 min)
这轮和面试官沟通得比较顺畅,题目难度中规中矩。到了 Google VO 阶段,写出正确代码只是基础,面试官还会观察你的沟通过程、边界分析,以及面对扩展场景时的系统设计能力。
BQ
主要问了三个方向:资源有限时如何保证核心项目按期交付;如何向非技术同事解释复杂的技术概念;以及通过技术创新提升团队效率的真实经历。提前准备几组 STAR 案例,把个人行动、取舍和最终结果讲清楚即可。
Coding
题目是经典的邮箱地址清洗与去重。规则是:删除邮箱 @ 前面的所有点号,并忽略加号及其后的内容,最后统计实际存在多少个不同邮箱。
做法是先按 @ 拆分本地名和域名,再清洗本地名:遇到 + 后停止处理,其余字符中跳过 .,最后与域名重新拼接并放入 HashSet。遍历结束后返回集合大小,时间复杂度为 O(N × L),其中 L 是邮箱的平均长度。
Follow-up
如果数据量达到十亿级,单机内存无法保存全部邮箱,可以先对标准化后的邮箱做哈希分片,将相同邮箱稳定路由到同一节点,各节点局部去重后再汇总结果,也可以采用 MapReduce 完成分布式去重。
如果输入变成实时数据流,可以使用 Kafka 承接数据,再按邮箱哈希进行分区,由流处理任务持续维护去重状态。要求精确统计时可使用分布式状态存储;允许少量误差时,可以使用 HyperLogLog 估算基数。布隆过滤器适合快速判断邮箱是否可能出现过,但不适合单独承担精确去重计数。
总结
我认为Google的Coding看抽象和变化能力,BQ和coding都很活泛。希望帮到大家,有找工/面试问题可以或找interviewshow讨论!
另外注意一下,像 Google 这种公司, 本人有收集好的 Google 面经题库, 有需要的可以 联系Interviewshow.
最近这些公司的 Google VO 都在持续。Interview Show 专注北美技术岗位的面试辅助,团队来自一线大厂,各个公司真题和辅助都有,想稳的随时联系我们。