今年早些时候参加了他们完整 virtual onsite 的 FedEx senior software engineer system design 这一轮。分享下笔记,因为我准备时找不到任何特别具体的内容。
形式:45 分钟,一个面试官(logistics platform team 的 principal engineer)。用 Miro 做协作白板,体验还行。
我拿到的题目:设计一个实时包裹追踪系统,要能扛住每天几百万次扫描事件,覆盖 5,000+ 个设施。说实话,这个问题域挺有意思的,毕竟这是 FedEx 的核心业务。
他们在意的点: 怎么处理写入很重的负载。 设施端会同时进来大量 scan events。他们想聊 Kafka 或类似的事件流,不是天真地每次 scan 都直接写 DB。 面向用户的 API 的读延迟。 几百万人同时点「where's my package」时,你的缓存策略是什么?自然会聊到 Redis。 Eventual consistency 的取舍。 这部分最有意思。他们会追问你是否理解为什么强一致在这里可能太贵,以及用户查 tracking status 时什么时候接受 eventual consistency。 数据库分区。 tracking number 作为 partition key、可预期的 access patterns。他们想看你从一开始就考虑 scale-out,而不是当成事后补丁。
他们不太会死磕的点:花哨的分布式理论。不会深挖 Paxos 或 Raft。更偏实战,不偏学术。
我会把难度放在「senior IC 在中端 tech 公司」的水平。不是 FAANG staff 那种深挖,但也明显想要懂真实分布式取舍的人,而不只是会画框图。
我建议的准备:读 Designing Data-Intensive Applications 里 replication 和 partitioning 的章节,再跑一遍高写入吞吐的事件系统(追踪、网约车等)设计。