Reddit 的面试整体体验不错,面试官普遍友好,不是疯狂考算法或八股的风格。Coding 和 System Design 都特别偏真实业务,很多题目看起来像是工作里真的会遇到的问题。不用急着回答,可以先确认需求、聊 trade-off,再一步一步把方案搭起来。
Coding 基本都是业务题,不太像 LeetCode。很多题目是一个业务背景,然后不断加需求,看你的代码能不能继续扩展。典型题 Billing Status:第一部分根据 transaction 算 BillingStatus,第二部分加入 overwrite transaction,第三部分加入 undo 和 redo。如果一开始把 transaction 的处理都放进 BillingStatus 里面,再维护一个 history stack 和 redo stack,扩展起来就比较顺。这题真正考的不是算法,而是代码结构和可扩展性。
另一道高频题 Report Chain(公司组织架构):输入 manager 和 employee 关系,建树并打印,后面又让你找 Skip-Level Meeting、查询上下级、找 Lowest Common Manager。所有 follow-up 都围绕同一套数据结构展开。还有 Merge Chat Messages 本质是 Merge K Sorted Lists。
System Design 出现频率最高的是设计游戏排行榜。最重要的一点就是不要 over engineer——一开始直接用一台机器,把 API、业务逻辑和数据库放在一起就够了。讲完 MVP 后面试官会开始聊扩容,不要一下子把 Redis、Kafka、Sharding 全部搬出来,而是一个瓶颈一个瓶颈去解决。
经典 Follow-up:某个游戏突然特别火,所有请求都集中到同一个 gameId,出现 Hot Partition。比较好的回答是维护 Redis Sorted Set 保存实时排行榜,数据库保存历史成绩;或者每个分片维护自己的 Top 100,再由一个服务合并成最终的 Top 10。
另一道题是设计 Reddit Home Feed,重点讨论 Fan-out on Write 和 Fan-out on Read 的选择,以及写放大、读延迟和存储成本的 Trade-off。
Reddit 的 System Design 更像是真实工作的设计讨论,几乎所有题目都会从一个很简单的 MVP 开始,然后不断增加流量、增加用户、增加需求,看你是不是能够自然地把系统一步一步扩展下去。