今年早些时候我面了 Boeing 的一个 senior software engineer 岗位,做了一轮 system design。这部分我可以帮你省点准备时间。
这不是传统意义上的分布式系统设计面试。 你不会被要求设计 Twitter 这种规模,或者做一个全球强一致的 key-value store。他们的门槛不在那。
他们实际问我的:设计一个系统,用于跟踪并安排一支飞机机队的预防性维护。范围包括:从多个数据源摄取维护记录(有些是老的 SOAP 服务,有些是新的 REST)、提供 dashboard、在维护窗口临近时提醒机修人员,并且要处理某架飞机提前停飞的情况。
听起来复杂,但对话核心其实是:你能不能拆解问题、识别数据模型、在合适的深度讨论可靠性。他们在看我是否理解 queuing(他们喜欢我提到用 message broker 做异步告警)、我如何看待 legacy + modern 数据源之间的一致性、以及我有没有在没人提示的情况下说出「monitoring」。我说了。他们喜欢。
对比 FAANG system design 的几个大差异: 不做规模计算。没人让我估算 500 架飞机的 QPS。他们知道规模适中。 合规与可审计性会被提到。FAA 的记录保存是真约束。他们想要会想到这些的工程师。 部署环境很重要。有些 Boeing 系统跑在本地机房或隔离网络里。只给 cloud-native 的答案有时会跑偏。
我用标准 system design 资料准备,老实说有点过度。更建议聚焦:扎实的基本功、REST + message queues、数据建模,以及理解为什么这里正确性比吞吐量更重要。
设计轮总共 50 分钟,最后大概有 10 分钟 behavior。