我 1 月走完了 Lyft 的 data engineering 面试。我是 senior DE(7 年经验),面的是 senior IC 岗。下面是实际结构和他们在乎什么。
Loop 结构: SQL/data modeling 轮(1 小时) Pipeline design / system design 轮(1 小时) Coding 轮(Python,45 分钟) Behavioral(45 分钟) HM chat
SQL 和 data modeling: 这是最硬的一轮。分两部分:先一道 SQL 题,然后一道 data modeling。
SQL:window functions、聚合、以及一个子查询,题目用的是 Lyft 的核心业务域(rides、drivers、timestamps)。题目是:计算过去 30 天里,每个城市司机在 10 秒内接单的 rides 占比,然后按这个指标给城市排名。听起来很直接,但 schema 里有一些坑,和取消单是怎么记录的有关。
Data modeling:设计一个 schema,用来支撑一个 dashboard,展示每周司机收入,并按 ride type 和 market 拆分。他们想看你是否理解 normalized 的 OLTP schema 和你在 Snowflake 或 Redshift 里为了分析查询实际会怎么建表的区别。我画了一个 fact-dimension 模型,然后他们追问我会怎么处理司机属性的 slowly changing dimensions。
Pipeline design: 给了一个很贴近 Lyft 的场景:来自活跃司机的一条 GPS pings 流,构建一个 pipeline,近实时计算 ETA accuracy。这就是经典 streaming:Kafka ingestion,一个有状态的处理层(他们特别问了 Flink,但 Spark Streaming 也可以),windowing 策略,latency 和 throughput 的取舍,以及如果下游服务挂了你怎么 backfill。
他们不只是问你会用什么技术,还会问 SLA 会怎么定,以及你怎么知道自己有没有没达标。监控一定要有答案:你会埋哪些指标,alert 在哪里触发,谁会被 paged。
Python coding: 更像数据处理题,而不是纯算法题。给你一组 trip records(dict 列表),算一些聚合指标,并处理一些脏数据(null、重复)。他们希望代码干净、可读。他们还让我写了两三个 unit tests。
整体来说:Lyft 的 DE 面试挺扎实。他们考的是实际 DE 技能(streaming、建模、SQL 深度),不是泛泛的 SWE 算法。如果你 pipelines 很熟,也会为分析查询建模,这个 loop 是可控的。对我来说最难的是 SQL 轮,主要是因为 schema 的坑。