Google SWE VO 面完了,两轮顺利通过。整体节奏很标准:一轮偏 coding、一轮偏 OOD 设计,每轮 45 分钟。Google 面试真的很看重沟通,面试官不会坐在那里等你写完,而是会不断跟你确认思路、问为什么这么做。如果只是低头写代码,哪怕方向对,也容易错过展示思考过程的机会。

第一轮:Coding
面试官氛围都比较和谐,开场聊几句背景就直接上技术。这轮我和其他人碰到的题主要是这几类。
题目 A:连续 K 个相同字符压缩
给一个字符串和整数 K,反复删除字符串中连续的 K 个相同字符,直到无法再删,返回压缩后的字符串。
思路:用栈——栈里存。遍历字符串,当前字符和栈顶相同就次数加一,不同就压入新的 (字符, 1)。每次更新后检查栈顶次数是否达到 K,达到就弹出。遍历完把栈里剩下的字符按次数还原成字符串。O(n)。
这题的坑在于删除后可能产生新的连续段,栈天然处理了这个连锁反应,用普通的双指针反而容易漏。
题目 B:租车运力规划
给去年所有订单,求满足所有需求的最少车辆数,还要给出一种具体的分配方案。
思路:经典的区间调度/会议室问题(LC 253 变体)。求最少车辆数:把所有取车、还车事件按时间排序,扫描时遇到取车 +1、还车 -1,过程中的最大值就是最少车辆数。要给分配方案的话,用一个最小堆维护每辆车的“最早可用时间”,新订单来了如果堆顶的车已经还回来了就复用那辆,否则新开一辆。
考点是区间重叠处理、边界和代码质量,不算难但很吃细节。
第二轮:OOD 设计 / Coding + BQ
这轮不同批次差异比较大,有的是纯 OOD 设计,有的是 BQ + 第二组 coding。
OOD 设计
设计并实现一个 IntervalSet,支持两个核心操作:insert和 contains。插入新区间时,如果和已有区间重叠,要自动合并。
思路:用有序结构维护不相交的区间。insert 时找到可能重叠的相邻区间做合并——向左看有没有区间的终点 >= 新区间起点,向右看有没有区间的起点 <= 新区间终点,把重叠的都合并成一个。contains 就二分找到第一个起点 <= 目标值的区间,看目标值是否在它范围内。
45 分钟的设计环节大多不要求写完整代码,把逻辑思路梳理清楚即可。Follow-up 基本是问优化方案、换边界场景——比如区间量很大时怎么优化 insert、如何支持删除区间等。
BQ + Coding
有的第二轮是美国本土工程师面,先来一轮 BQ,问的是“说服团队采纳你技术方案”的例子、识别并解决技术风险的案例,用 STAR 串项目经历,面试官会追问细节。这轮 BQ 的体验很像跟同事讨论,交流顺畅是关键。
然后连着做两道 coding,其中一道是求整数数组中乘积最大的连续子数组——LC 152 原题。思路是动态规划同时维护当前的最大乘积和最小乘积(因为负负得正,最小值乘以负数可能变最大),遍历时更新。
写在最后
这次 Google SWE VO 能顺利通过,我最大的感受是沟通和系统性思维比单纯刷题重要得多。准备过程中,我发现信息差真的很重要。后来通过朋友推荐接触到 Interview Show,他们团队来自北美一线大厂,做过 Google、Amazon、Meta 这些公司的面试,他们有 Google 专线,从 OA 到 VO 都有对应的备考支持,感兴趣可以去了解一下。