Google Software Engineer 虚拟 Onsite 面经:餐厅等位与 Meeting Rooms II

Google Software Engineer 虚拟 onsite 面经:两轮都是 BQ + coding,一轮是餐厅等位 linked list + hashmap,一轮是 Meeting Rooms II 加 room 分配。

GoogleSoftware Engineer更新于 2026年9月17日3 分钟阅读
English
分享

面经 | SDE | 🔥🔥 | Google

2026(7-9月) Software Engineer 全职 @ Google - Virtual Onsite | 🙂 Positive | Medium | Pending

整体感觉 Google 的题不一定特别难,但是很喜欢在你写完以后继续改条件。两轮面试官都挺 friendly,基本会听你把思路讲完,不太会故意打断。

Round 1 — BQ + Coding

前面大概 10 分钟 BQ。

问了:

Why Google?

还有一个:

项目最大挑战、怎么解决。

我讲的是之前一个 service 在流量起来以后 latency 变差的问题。

本来以为讲完就结束了,结果 interviewer 顺着项目问了不少:

为什么当时选 Redis,不用 local cache?

cache 的过期策略怎么定?

如果 cache 和 DB 数据不一致怎么办?

最后还问:

如果现在重来一次,你会怎么改?

这里我答得一般。

因为前面基本都在讲“当时为什么这么做”,突然让我自己挑原方案的问题,我想了一下才说现在可能会把 cache invalidation 和 monitoring 做得更早一点。

后面开始 coding。

题目是一个 restaurant waiting list。

大概有三个 API:

join(user, table_size)

delete(user)

find_first_match(table_size)

要求是先到先得。

比如一个 4 人桌空出来,要找到当前最早加入,而且能坐这个桌子的 user。

我一开始直接说 queue,但是很快发现 delete 不是很好做。

后面用了 linked list + hashmap。

delete(user) 可以通过 hashmap 直接找到 node 删除。

比较麻烦的是 find_first_match。

因为你还是要保持全局 FCFS,所以不能单纯给每个 table size 一个独立 queue,然后随便取。

我第一版最坏还是 O(n) scan。

写完以后 interviewer 就问:

如果 waiting list 特别长,有没有办法让 lookup 更快?

这里我没有完全写出来。

大概讨论了一下按 table size 维护辅助 index,但是又要保证全局 arrival order,所以 bookkeeping 会复杂很多。

最后时间差不多了,就口头讲了一下。

这一轮我感觉 coding 本身还行,反而前面的 project follow-up 比我想象中细。

Round 2 — BQ + Coding

第二轮上来又问了几个 BQ。

印象比较深的是:

How do you win over a team member who initially disagrees with you?

我讲了之前一个技术方案和 teammate 意见不一致的例子。

interviewer 后面追问:

你怎么确认最后是你的方案更好?

如果 data 最后证明对方是对的怎么办?

还有一个:

When multiple priorities compete, how do you decide what to focus on first?

这题比较正常,我就讲 impact / urgency / dependency。

BQ 大概十几分钟,后面开始 coding。

先给了一个很简单的 warm-up:

两个时间区间怎么判断 overlap。

这个很快写完。

然后变成 Meeting Rooms II,给一堆 meeting interval,求最少需要多少个 room。

我用 min heap。

先按 start time sort,heap 里面放当前 room 的 end time。

如果下一个 meeting 的 start >= heap top,就可以复用那个 room。

这题我之前做过,所以写得比较快。

然后 interviewer 加 follow-up:

现在不仅要告诉我最少几个 room,还要告诉我每个 meeting 最后被分配到了哪个 room。

这里其实原来的 heap 稍微改一下就行。

heap 里不只放 end time,而是:

(end_time, room_id)

room 空出来以后把 id 复用。

我刚开始新开 room id 的逻辑写错了一点,dry run 的时候自己发现了,改掉以后 testcase 都过了。

最后还问了一句 complexity。

整个 coding 大概 25 分钟就结束了。

后面还剩一点时间,就随便聊了下 team 和 day-to-day。