今年早些时候走了 Slack 的 MLE loop。岗位在 search and discovery team,所以推荐系统相关内容比重很大。如果你是纯建模背景、没做过 recsys,建议补一下。
先说结构。总共五轮加一轮 recruiter screen:
Recruiter + HM screen。 常规内容。HM 会专门问我有没有 ranking model 和 implicit feedback 数据的经验。如果你有,一开始就优先讲。
Coding round 1(通用 SWE)。 这个挺意外的。标准 LC medium,没有 ML 专项。图相关题,BFS/DFS 那类。我觉得他们这么做是为了确认 MLE 候选人真的能写干净的代码。很多 ML 候选人 CS 基础会生疏,别跳过这块。
Coding round 2(ML 专项)。 Python、numpy,从零实现。让我实现 cosine similarity,然后把它优化成对一批向量做批处理。接着又让我写一个简单的 gradient descent 更新步骤。这里的门槛感觉是:你能不能把数学落到代码上,还是只会调 sklearn。
ML design round。 重头戏。题目是:为 Slack 的 search 功能设计一个 search ranking model。这题就是故意开放式的。我按这个结构来讲:问题定义、数据来源和信号、特征工程、模型选择、训练配置、线上 serving 和延迟约束、指标和评估、A/B 测试计划。我聊了 transformer-based semantic search、BM25 作为 baseline、learning-to-rank(LTR)用 LambdaMART 作为中间路线。他们追问很硬,比如 cold start(一个全新 workspace 没有使用数据怎么办)和 feedback loop(怎么避免把烂结果越推越烂)。能的话这轮多花时间准备。
Behavioral round。 来自 bar raiser program 的面试官。问了我一次我上线的东西在生产环境失败的经历、我在过往项目里如何处理不确定性,以及一个关于在 mission-driven 环境里工作的价值观问题。他们更看重沟通能力,不只是技术。
整体来说,这个 loop 对 MLE 岗位的设计挺合理。不是那种“其实是 SWE 面试,只是顺手问一句你是不是也喜欢 ML”那种拼接感。
时间线:从 recruiter screen 到拿 offer 是 4.5 周。debrief 比我预期久,大概一周半。我被告知 ML 岗位这是正常的,因为 hiring committee 更大。
Comp(senior MLE,约等于 L5):base 200-220 区间,上面再加 RSUs。我在 SF,所以 YMMV。我没有从其他 offer 拿到 counter 数据,所以也说不准谈判空间有多大。