OfferForge 导师 Dr. W. — 博士毕业,前 FAANG Senior MLE。研究方向为大规模分布式机器学习系统,曾在顶级国际学术会议发表多篇论文。负责团队学术方向把控与 MLE 面试辅导。
OfferForge 导师 Dr. S. — 前大厂 Senior SDE,精通分布式系统与大规模数据处理。曾在顶级技术会议发表多篇技术报告,专注于系统可扩展性与可靠性。负责课程体系设计与 System Design 面试辅导。
OfferForge 导师 Dr. L. — 前大厂 Senior SDE,深耕分布式系统与微服务架构。在服务治理、事件驱动架构方面有丰富实战经验。负责求职策略制定与 SDE 面试辅导,已帮助多位候选人斩获 Senior 级别 Offer。
白人 senior 面试官,挺 chill 但专业度很高。面试刚开始就从简历挖,重点放在 candidate 项目里多次提到的 Kafka。聊得非常细,他问 producer 和 broker 之间的 ack 机制是怎么工作的,acks=all 会不会导致吞吐下降;然后问 consumer 如何防止消息丢失,candidate 提到 offset 提交和幂等消费逻辑,他就追问如果要做到 exactly-once?candidate 讲了幂等 producer + transactional write 的机制... 整个 Kafka 这段聊了十多分钟。
进入 coding 环节之后,给了两道中等难度题。第一题是类似rotting oranges,就是典型的 BFS 扩散问题。candidate 先扫描所有rotting oranges的初始位置入队,然后每一轮扩散,记录时间层数。写完马上跑测试用例,一次 AC。第二题是验证括号字符串是否valid,但不是普通的三种括号,而是带 * 的变体。candidate 用两个栈思路讲解,写完代码后解释了为什么可以在 O(n) 时间内完成。面试官挺满意没怎么 follow up。最后五分钟是 candidate 问面试官问题,candidate 问他们组在用的mq是不是 Kafka,他说现在已经在迁移到 Pulsar 了。
一面整体感觉:技术氛围很正,面试官不会卡节奏,但会挖到细节。Kafka 那块要能从 producer、broker、consumer 三方视角讲清楚。
第二轮是两个华人小哥,一个 shadow。开头还是从简历聊起,但没问 candidate 最近的项目,而是直接跳到 candidate 最早的实习。他问为什么当时用的是 MySQL 而不是 NoSQL,然后问怎么分析当时系统的性能瓶颈。candidate 提到了index命中率和query plan分析,他问了 explain plan 怎么看、慢查询怎么调优。虽然是简历题,但有点八股味。
coding 还是两道题。第一题是array中每个元素的下一个更大值,candidate 用单调栈写的,从右往左扫描,保持栈内递减。代码写完后 candidate 自己跑了几个 test case,结果都对。第二题是简化 Unix 文件路径,要输出最简形式,比如 /a//b/../c 要变成 /a/c。这题其实是典型的 stack 模拟题,但有不少 corner case,比如连续的 /、根目录、.. out of boundary等,candidate 都加了测试。写完之后,面试官加了一个 follow up:如果这是一个分布式文件系统,路径对应的节点分布在不同机器上,要怎么做路径合并。candidate 说可以用Trie来组织路径节点,并用consistent hash分区来分配节点,实现前缀合并。他挺感兴趣还追问了一句如果 Trie 太大了怎么办,candidate 说可以定期 compact 或者在节点上存路径摘要信息。