刚结束 Databricks senior SWE loop(他们内部叫 L5,大概相当于 Google 的 L5 或 Meta 的 E5),趁还热乎把 system design 部分写一下。
system design 这一轮是 60 分钟。单面试官,人挺 senior 的。他们给我的题基本是:设计一个分布式数据处理 pipeline,支持高吞吐的 streaming ingestion,并且做到 exactly-once 语义。非常符合 Databricks 的风格,毕竟他们有 Spark / Delta Lake 的底子。
几个比较突出的点:
他们更看重权衡,而不是教科书答案。 我一开始还在按组件往外报,面试官很早就打断我,问了句「what's the cost of that choice?(那个选择的代价是什么?)」我立刻切到 trade-off 模式,房间里的氛围明显就变了。
容错和幂等性会被狠狠追问。 不只是「加个重试」这种,而是会具体问:consumer 在 mid-batch 挂了怎么办?你的 checkpointing 策略是什么?这其实直接对应 Delta Lake 的实际工作方式,所以如果要准备,建议看看 Delta 的 ACID transaction model 和 WAL。
数据本地性很重要。 他们问我在分布式聚合里怎么处理 data skew。没怎么在 Spark 或类似系统里踩过 skew 的话,建议把这块的故事理清楚。一个比较稳的回答是:用 partition size 的 percentile 统计来检测,然后按 salted key 重新 repartition。
会追 scalability 数字。 「假设每天进来 10TB 的 events,带我走一遍你的容量估算。」很标准,但他们希望你真的把数学在嘴里算出来。
这个设计本身不算特别花哨。拉开差距的是我能多自信地聊 failure modes。Databricks 的 L5 需要能设计出能扛住真实世界的东西,不只是白板上好看。
我建议的准备:读一读 Delta Lake 的技术博客(写得真的不错),复习 Kafka consumer group 的语义,再练练 Dynamo 那套 availability vs. consistency 的 trade-off。这些问题不算 Databricks 独有,但 framing 很偏 data-infra。
如果有具体问题随便问。