上个季度我走了 Slack data engineer 的面试流程,具体是 data infrastructure team。写下来是因为网上关于 Slack 的 data eng 面试内容很少,而且大多都过时了。
一共五轮。拆分如下:
SQL/数据建模(45 分钟)。 对我来说最难的技术轮。不是 CRUD query。他们要你:给一个 event-sourced 系统做 schema 设计(给一组 Slack 风格的 events,让你设计数据模型),然后基于那个 schema 写查询。会涉及 window function、嵌套聚合、性能考量。他们还会专门问,在一张很大的 events 表上你为什么选某种 partition 策略。他们想要的答案是基于查询模式的思考,而不只是存储。
数据 Pipeline 设计(60 分钟)。 描述一个从 ingest 到处理再到对外服务的端到端 pipeline,用于承接高吞吐的 event stream。他们会问:不同用例下 batch vs streaming 的取舍、迟到数据怎么处理、pipeline 各步骤的幂等性、backfill 策略。Slack 内部用 Kafka、Spark、Airflow(他们 eng blog 里有些是公开的)。知道这些不一定加分,但不知道大概率减分。
Coding(45 分钟)。 Python 或 Scala。我选了 Python。是一道数据处理题:给一组 records,有清洗要求,让你写转换逻辑。更像 DE 在工作里会写的代码,而不是 leetcode medium。
Systems/Scalability(45 分钟)。 跟 pipeline 轮有重叠,但更偏 infra 选型。你怎么在 PB 级别为时序 event 数据设计存储?列式存储(Parquet/ORC)和行存的 tradeoff 是什么?什么时候 data lake 更适合,什么时候 data warehouse 更合适?
Behavioral(45 分钟)。 常规。跨团队、项目失败、技术 owner。
总时长:大概 4.5 小时。按这个量准备。SQL 和 pipeline 轮是主要淘汰点。
6 条回复
analyst_ana (Primly starter)
partition strategy 这个问题我总是卡住,因为我能讲 partitioning,但不一定能把为什么适用于某个特定的 query pattern 说清楚。你有找到什么对这个深度有帮助的资源吗?
由 AI 翻译,查看原文
de_derek (Primly starter)
说实话就是在实践里多做东西。但如果是面试准备:Databricks blog 上有关于 Delta Lake 和 Z-ordering 的一些很好的文章,会深入讲到这些。Data Engineering(那本 O'Reilly 书)的基础部分也会结合场景讲分区策略。
由 AI 翻译,查看原文
marketer_mei (Primly starter)
Late-arriving data 处理是个经典的 DE 面试话题,而且在生产里确实很难做好。他们是想要一个特定方案(watermark、bounded late arrival windows),还是只是想看你知道这个问题存在?
由 AI 翻译,查看原文
de_derek (Primly starter)
主要是想看我理解这些取舍。我聊了 event-time vs. processing-time、Flink/Spark Streaming 里的 watermark 策略,以及什么时候你就接受数据丢失然后继续往前。他们对这个框架挺满意的。没有唯一正确答案。
由 AI 翻译,查看原文
pivot_pat (Primly starter)
Slack 的 SQL 轮不管你面 DS 还是 DE 都不好惹。对 window functions 和 schema design 的期望明显高于平均水平。
由 AI 翻译,查看原文
Primly Team
在这种 DE 面试流程里,有一关候选人经常低估:在开始解题前先把问题讲清楚,做好 framing 和 scoping。当题目是“design an event-sourced schema(设计一个事件溯源的 schema)”或“搭一个端到端 pipeline”时,最快拉开差距的方式,是先花前 2 到 3 分钟把关键点问清楚:主要的查询模式、数据新鲜度 SLA、预期基数,以及你要重点优化的主要故障模式。
一个好用的结构是:(1)列出消费者是谁、他们会问什么问题,(2)提出最小的一组实体和 key,(3)明确说明数据粒度和去重策略,(4)然后再谈分区、聚簇和回填。一个常见失误是直接跳到工具选型,或者“streaming vs batch”的观点,但没说清楚在重试、延迟到达事件、schema 演进时,你如何保证正确性。
你遇到过哪个澄清问题,几乎每次都能改变数据建模或 pipeline 设计面试的方向?
由 AI 翻译,查看原文