Roblox · Primly 社区

Roblox data engineer 面试,pipeline 和 SQL:他们到底考什么

analyst_ana (Primly starter) · 5 条回复

我在 2026 年 1 月走完了 Roblox 的 DE loop。网上几乎找不到他们针对 data engineering 面试的内容,所以我写一下。

流程(DE 向): Recruiter screen(30 分钟,常规) Technical phone screen(60 分钟,SQL + pipeline design 混合) Onsite loop:SQL deep-dive,数据系统设计,behavioral,hiring manager

SQL 轮: SQL 比我预期难。不只是 aggregation 和 join。他们给了一个游戏里 user sessions 的 event-stream 数据场景。我需要写 query 计算 session 时长,处理缺失 end event(玩家崩溃或直接关 app),并找出行为异常的用户。window functions 是必须的。他们还让我通过讲 query plan 的方式优化一条慢 query,这阶段在别的公司我没见过。

要会:CTE,window functions(LEAD、LAG、ROW_NUMBER),partition by,处理 event 数据里的 null,写 query 时避免在超大表上 full table scan。

Pipeline design 轮: 这是最 Roblox-specific 的部分。他们描述了一个场景:你需要搭一条 pipeline,接入来自数百万并发 session 的实时玩家活动事件,做转换,同时服务实时 dashboard 和批量 ML 特征生成。经典的 lambda vs kappa 架构取舍。

他们在意:exactly-once 语义(或者你为什么会接受 at-least-once),实时链路的 latency 要求,批处理链路的 idempotency,以及当游戏事件变化时你如何处理 schema evolution。

我提到的工具:Kafka 做 ingest,Spark Structured Streaming 做实时链路,dbt 做批处理层。他们提到内部用 Spark,所以这点感觉很加分。

Behavioral: 主要围绕跨团队合作、以及如何应对来自分析方 stakeholder 的模糊需求。主题和 SWE 的 behavioral 很像,都是 ownership。

Comp:我最后拿到的是 senior DE 的 $195k base,RSUs 更高但我不想具体说。感觉比同级别 senior SWE 略低,但 DE band 就那样。

由 AI 翻译,查看原文

5 条回复

analyst_ana (Primly starter)

他们有问到具体工具,比如用 Airflow 或 Prefect 做 orchestration,还是更偏 tool-agnostic?

由 AI 翻译,查看原文

de_derek (Primly starter)

整体表述偏工具无关,不过我提了 Airflow,他们也很熟。我感觉他们内部是混着用的。不过别只列工具,要解释在这个场景里你为什么会选某个工具,以及取舍是什么。

由 AI 翻译,查看原文

alex_design (Primly starter)

带 null 的事件数据 SQL 是经典题。这个固定套路(处理缺失的 end 事件)在很多游戏公司的面试里都会出现。考虑到行业也挺合理的。

由 AI 翻译,查看原文

de_derek (Primly starter)

是的,说实话我应该做更偏游戏数据的 SQL 准备。Session 数据、漏斗分析、留存 cohort,这些都以某种形式出现了。

由 AI 翻译,查看原文

Primly Team

在这种 DE loops 里,有个环节经常被低估:在写任何东西之前先澄清需求。遇到 event stream 的 sessionization,面试官往往想看你先把契约定义清楚:什么算「session start」,什么算有效的「end」,missing end 怎么处理(超时窗口、last-seen heartbeat),延迟和乱序事件怎么处理,以及是否按 event_id 去重。如果你先把这些假设讲清楚,你的 SQL 和 pipeline 设计会干净很多。

一个好用的结构是:(1) 复述业务指标,(2) 列边界情况,(3) 给一个 baseline query,(4) 加正确性修复(排序、null 处理、去重),(5) 再讲性能杠杆(分区裁剪、预聚合、增量模型)。

常见翻车点是直接上窗口函数,却没有证明排序 key 和唯一性,这会悄悄导致 double-count。

你在 session 数据那道题里,发现哪些假设必须明确协商?哪些让你意外?

由 AI 翻译,查看原文