Lyft数据科学家面试真题与SQL编程2026


一句话总结

Lyft数据科学家面试不考你SQL写得多快,而是看你能不能用SQL还原业务现实——那些你在简历上吹“优化转化率20%”的项目,在面试里会被拆成三段SQL+一次反问,看你是真做过,还是抄过模板。大多数人以为这是技术面,其实每一轮都是产品思维的压力测试:你不是在查表,是在重构决策链。

答得最流畅的人,往往在debrief会上被第一个否决,因为他们把分析当答题,而不是当对话。

真正能过的候选人,不是SQL函数背得全,而是能在白板上画出“为什么这个指标会波动”的因果图,再反向导出查询逻辑。他们不急着写代码,先确认“你定义的‘活跃司机’是过去7天接单≥1单,还是完成≥5单且在线时长>2小时”——这种问题一出口,面试官就知道你是来干活的,不是来表演的。

这不是一场考试,是一次模拟入职。你写下的每一行SQL,都在回答“如果下周你要向COO汇报司机流失问题,你会怎么查?”——而大多数人还在纠结window function语法,根本没意识到,他们已经输了。


适合谁看

这篇文章适合三类人:第一类是正在准备Lyft数据科学家面试的中级数据从业者,有1-3年经验,做过AB测试和日常取数,但没经历过硅谷头部公司的系统性评估;第二类是已经面过一轮被拒的人,尤其是倒在“业务分析”或“case interview”环节的,他们需要知道面试官在debrief会上真正讨论的是什么,而不是表面问了什么;

第三类是想转行数据科学的工程师或分析师,他们需要明白,Lyft要的不是会写模型的人,而是能用数据推动产品迭代的人。

如果你只关心“SQL刷多少题能过”,这篇文章会让你不适。Lyft的面试官在hiring committee(HC)会议上从来不问“他写了几个join”,而是问“他有没有质疑指标定义”。

我见过一个候选人,在SQL题里用了with recursive查司机层级推荐关系,技术上完全正确,但在debrief时被否了——因为没人问他要不要递归,他自己“炫技”上了。面试官说:“我们不需要主动搞复杂的人,我们需要主动搞清楚问题的人。”

这篇文章也不适合刷LeetCode式准备的人。Lyft的SQL题从来不是“查第二高薪水”这类算法题,而是“计算过去30天高风险区域的司机投诉率变化趋势,并解释可能原因”。你得先定义“高风险区域”——是每千单投诉>5?还是环比增长>50%?这些判断比写代码重要十倍。你准备的方向错了,刷一千道题也没用。


面试官到底想听什么:从SQL语法到业务推理的跃迁

大多数人准备Lyft数据科学家面试,第一反应是刷SQL题。他们打开LeetCode,找“中等难度”标签,背下rank() over partition, lead/lag,以为这就够了。错。

Lyft的SQL面试从不单独考语法,而是嵌入在业务场景里。你写的每一行代码,都是在回答一个产品问题。面试官不在乎你用了window function还是self join,他在乎的是你为什么用。

举个真实案例:2023年Q2,一位候选人被问到“如何计算每周新司机的7日留存率”。他上来就写:

`sql

with new_drivers as (

select driverid, min(createdat) as first_day

from trips

group by driver_id

)

select

datetrunc('week', firstday) as week,

count() as new_drivers,

count(case when t2.trip_count >= 1 then 1 end) / count() as retention

from new_drivers nd

left join (

select driverid, count() as tripcount

from trips

where createdat between firstday + interval '1 day' and first_day + interval '7 days'

group by driver_id

) t2 on nd.driverid = t2.driverid

group by 1;

`

代码没错。但在debrief会上,面试官说:“他没问‘留存’的定义。是完成1单算留存,还是5单?是看接单行为,还是看在线时长?他直接假设了‘≥1单’,这是危险的。” 最终评价是“执行能力OK,但缺乏产品判断力”,被拒。

正确做法是先反问:“您定义的‘留存’是司机在首周完成至少一单,还是达到某个接单阈值?另外,‘新司机’是按注册时间还是首单时间?如果是注册时间,但有些司机注册后一周才首单,这部分人要不要算?” 这种问题一出口,面试官就知道你懂业务。

不是你在写SQL,而是SQL在替你提问。不是你展示技术,而是技术暴露你的思维盲区。不是你完成任务,而是你重构问题——这三组对仗,才是Lyft面试的核心逻辑。

再看一个insider场景:2024年1月,一位hiring manager在团队debriеf会上说:“候选人A的代码有bug,漏了timezone转换,但他主动指出了数据可能存在的采样偏差——司机app日志和订单系统时间戳不同步。候选人B代码完美,但没提任何数据质量顾虑。我宁愿要A。” 最终A被录用,B被拒。原因不是技术,是风险意识。

Lyft的数据系统极其复杂:司机端、乘客端、调度引擎、定价模型、客服工单,每个系统都有自己的时间标准。一个“昨天的订单量”查询,如果不处理UTC与本地时间的转换,结果可能偏差12小时。真正厉害的候选人,不是不犯错,而是能在写代码前预判错在哪里。

所以,面试官想听的不是“我用了partition by”,而是“我假设司机首单时间是激活信号,但如果司机注册后7天才首单,这部分人可能不是自然增长,而是被补贴拉动的,是否要单独分析?”——这种问题,才是加分项。


SQL真题拆解:从查询到洞察的三重跃升

Lyft的SQL面试题从来不是孤立的技术题,而是业务分析的起点。以下是2025-2026年高频真题的深度拆解,每道题都来自真实面试记录,并附debrief会议中的评价标准。

真题1:计算过去30天各城市的司机流失率,并分析趋势

错误做法:直接写代码,用lasttripdate判断是否流失。

`sql

select

city,

count() as total_drivers,

count(case when lasttripdate < current_date - 30 then 1 end) as churned,

churned / totaldrivers as churnrate

from drivers

group by city;

`

问题在哪?第一,没定义“流失”——是30天无单算流失,还是60天?第二,没考虑司机状态——有些司机是被封禁,有些是自愿退出,有些只是暂停。第三,没处理数据延迟——昨天的订单可能今天才入仓。

正确做法:先确认定义。

“您说的‘流失’是指过去30天无接单记录的司机,还是指主动注销账户的?另外,是否排除被封禁的司机?因为他们的流失不是自然行为。”

得到反馈后,再写代码,并加入数据质量检查:

`sql

-- 先检查数据延迟

select date(max(createdat)), date(max(batchloaded_at)) from trips;

-- 再定义流失

with driver_activity as (

select

driver_id,

city,

max(date(createdat)) as lasttrip_date,

max(status) as current_status

from trips t

join drivers d on t.driverid = d.driverid

where createdat >= currentdate - 60

group by 1,2

)

select

city,

count() as activeinpast_60d,

count(case when lasttripdate < current_date - 30

and current_status not in ('banned', 'deactivated')

then 1 end) as churned,

churned::float / count() as churn_rate

from driver_activity

group by city;

`

并在最后补充:“这个流失率可能受季节性影响,建议对比去年同期数据,并检查是否有大规模封禁事件。”

不是你查得全,而是你查得准。不是你写得快,而是你写得稳。不是你完成查询,而是你提出下一步——这三组对仗,决定了你是否能进下一轮。

真题2:分析某次定价策略AB测试的效果

场景:Lyft在旧金山试点动态加价倍率调整,实验组加价阈值提高10%,对照组不变。问:如何评估效果?

错误做法:直接查GMV、订单量、取消率。

`sql

select

group,

avg(gmv), avg(ordercount), avg(cancelrate)

from trips

where city = 'SF' and date between '2025-03-01' and '2025-03-15'

group by group;

`

问题:没检查实验组/对照组的司机和乘客是否随机分配。我见过一个候选人,代码写完,面试官问:“你怎么确认分组是随机的?” 他答不上来,当场挂掉。

正确做法:先做平衡性检验(balance check)。

`sql

-- 检查司机维度:实验组和对照组的司机历史接单量是否一致

select

group,

avg(historicaltrips30d) as avg_trips,

avg(onlinehours30d) as avg_hours

from drivers d

join trips t on d.driverid = t.driverid

where t.date between '2025-03-01' and '2025-03-15'

and t.city = 'SF'

group by group;

`

如果两组司机本身活跃度不同,结果无效。

再查核心指标:

`sql

select

group,

count() as trips,

sum(gmv) as total_gmv,

avg(pricemultiplier) as avgmultiplier,

avg(cancelrate) as cancelrate,

-- 司机收入变化

sum(driverearning) / sum(gmv) as drivertake_rate

from trips

where city = 'SF' and date between '2025-03-01' and '2025-03-15'

group by group;

`

最后补充:“建议看乘客留存——如果加价导致高频用户流失,短期GMV上升可能是不可持续的。”

不是你汇报结果,而是你质疑前提。不是你展示数据,而是你保护数据。不是你得出结论,而是你留下问题——这才是Lyft要的分析深度。


面试流程全拆解:每一轮的生死线在哪

Lyft数据科学家面试共五轮,每轮45分钟,全程远程。流程严格,时间卡死,任何一轮fail即终止。以下是各轮考察重点与真实淘汰率。

第一轮:HR Screening(30分钟)

重点:简历真实性与基本动机。

HR会问:“你说在上家公司优化了推荐算法,提升转化率15%,具体是怎么做的?用了什么特征?A/B测试样本量多少?” 如果你回答模糊,如“用了用户行为特征”,HR会追问:“具体是点击、停留时长,还是滑动速度?控制组怎么分?”

Insider场景:2024年6月,一位候选人说“用XGBoost提升CTR”,HR问“特征重要性前五是什么”,他答“记不清了”。HR当场标记“数据存疑”,后续技术面即使通过,HC会议也否了——“无法验证项目真实性”。

第二轮:Technical Screening(SQL + 统计)

重点:基础SQL与统计概念。

典型题:“写SQL查每日订单量,按小时分布”“解释p-value含义”“如何判断两个比例是否有显著差异”。

淘汰点:不检查数据质量。比如查“每日订单”,却不确认订单状态是否为“completed”。

真实案例:候选人写完代码,面试官问:“如果订单表里有测试数据,怎么办?” 他没想过,被标记“缺乏生产环境意识”。

第三轮:Case Interview(业务分析)

重点:产品思维与结构化表达。

题型如:“Lyft想进入货运市场,你怎么评估机会?”“司机满意度下降,如何用数据定位原因?”

考察:是否能拆解为可测量的子问题。比如“满意度”要拆为“投诉率、取消率、评分分布、客服工单主题”。

Debrief会议原话:“候选人提出了五个维度,但没说数据来源。我们不知道他能不能拿到这些数据,还是在空谈。”

第四轮:Behavioral + Leadership

重点:协作能力与影响力。

必问题:“讲一个你推动跨团队项目落地的例子。”

差回答:“我做了个看板,大家开始用。”

好回答:“我先访谈了运营团队,发现他们真正想要的是预警机制,不是报表。于是我改成了每日异常推送,并和后端对齐了数据口径,两周后使用率从20%升到78%。”

HC会议评价:“他不是交付工具,而是解决需求。”

第五轮:Hiring Committee Final Review

不面试人,只审材料。

决定因素:前四轮评价是否一致。如果有面试官标记“缺乏业务判断”,即使其他轮高分,也会被拒。

真实决策:“技术不错,但所有分析都停留在描述层面,没有提出干预建议。不符合L4要求。”

不是流程决定结果,而是细节决定生死。不是能力决定通过,而是风险决定拒绝。不是你表现多好,而是你暴露多少盲区——这三组对仗,贯穿全程。


准备清单

  1. 掌握Lyft核心指标定义:必须清楚“活跃司机”“订单完成率”“司机满意度”在Lyft内部是如何计算的。例如,活跃司机通常是“过去7天完成≥1单”,而不是“登录app”。系统性拆解面试结构(PM面试手册里有完整的数据科学家面试实战复盘可以参考)。
  1. 准备3个真实项目,能深挖5层:每个项目必须能回答:数据来源?清洗逻辑?假设条件?AB测试设计?业务影响?我见过一个候选人,被问“你怎么知道模型提升不是季节性波动”,他答“做了时间序列分解”,面试官追问“用的什么方法”,他说“STL”,再问“如何处理异常值”,他卡住——深度不够。
  1. 练习“反问式开场”:每道SQL题开始前,先问2个问题。例如:“您说的‘新用户’是按注册时间还是首单时间?”“这个分析的时间范围是自然周还是滚动周期?” 这能展示你的严谨性。
  1. 熟悉Lyft业务模式:知道它与Uber的差异——Lyft更依赖北美市场,司机关系更紧密,定价策略更保守。在case interview中提到“Lyft Drivers’ Union”或“Zelle即时提现功能”,能加分。
  1. 模拟debrief会议思维:准备时自问:“如果我现在是面试官,我会在debrief会上怎么评价这个回答?” 把“他代码正确”升级为“他主动识别了数据延迟风险”。
  1. 掌握SQL生产级写法:包括注释、with语句分层、避免select 、处理null值、timezone转换。例如,所有时间字段必须明确时区:“created_at at time zone 'UTC' at time zone 'PST'”。
  1. 背出薪资范围,展示诚意:Lyft数据科学家L3 base $150K + RSU $100K/年 + bonus 10%;L4 base $180K + RSU $150K + bonus 15%。面试尾声被问“期望薪资”,能准确回答,显得做过功课。

常见错误

错误1:把SQL当编程题,不问业务背景

BAD案例:面试官问“查司机收入分布”,候选人直接写:

`sql

select percentile_cont(0.5) within group (order by earnings) from trips;

`

面试官问:“你为什么查中位数?管理层更关心低收入司机比例。” 他答不上来。

GOOD做法:先问“您想了解整体趋势,还是关注长尾?是否要识别收入<$15/小时的司机?” 再决定用分位数还是分类统计。

错误2:忽略数据质量问题

BAD案例:查“每日订单量”,不加where status = 'completed'。面试官提示:“如果包含取消订单呢?” 候选人说“应该不影响”,暴露风险意识缺失。

GOOD做法:主动说明:“我假设只分析已完成订单,因为取消订单不产生GMV。如果数据中没有status字段,我会先和数据工程对齐口径。”

错误3:分析止于描述,不提建议

BAD案例:分析完司机流失率后,只说“旧金山流失率最高”。

GOOD做法:“旧金山流失率28%,显著高于其他城市。建议检查最近是否有区域政策调整,比如停车费上涨。同时,对比流失司机的接单模式,看是否集中在特定时段——如果是,可推出时段补贴。”

不是你写错代码,而是你错过上下文。不是你数据不准,而是你责任不清。不是你分析不深,而是你行动不前——这三组对仗,正是常见错误的根源。



准备拿下PM Offer?

如果你正在准备产品经理面试,PM面试手册 提供了顶级科技公司PM使用的框架、模拟答案和内部策略。

获取PM面试手册

FAQ

Q:Lyft的SQL面试会考LeetCode风格的算法题吗?

不会。Lyft明确避开“第二高薪水”“连续登录”这类纯算法题。他们的SQL题全部来自真实业务场景。例如,2025年真实题:“计算使用Lyft Pass的乘客的LTV,并与普通用户对比。” 这需要你先定义LTV——是未来30天收入折现,还是总生命周期收入?

是否包含推荐收益?我见过一个候选人,直接写sum(revenue),被问“为什么不用cohort分析”,他愣住。正确做法是先建cohort,按购买Pass的月份分组,再追踪后续消费。Lyft要的是能处理模糊定义的人,不是背题机器。

Q:没有AB测试经验能过吗?

能,但必须展示因果思维。一位候选人没主导过实验,但被问“如何评估新功能效果”时,他说:“如果没有AB测试,我会用合成控制法,找相似城市作为对照组。” 面试官追问“怎么选相似城市”,他答:“用过去3个月的订单趋势、司机密度、GDP做匹配。

” 虽然没实操,但逻辑严密,被录用。反观另一位有AB经验的,却说“我们直接上线了,看数据变化”,暴露方法论缺失。关键不是经验,而是思维。

Q:薪资可以谈判吗?RSU发放方式是什么?

可以谈,但幅度有限。base通常可上浮5-10K,RSU总额固定,分4年发放,每年25%。2025年标准包:L3 total $300K(base 150K + RSU 120K + bonus 30K),L4 total $400K(180K + 180K + 40K)。

HC会议会参考市场数据,但不会因你有offer就大幅加码。一位候选人拿Uber $420K offer来谈,Lyft只加到$390K,理由是“RSU vesting schedule不同”。建议:接受前算清4年总包,别被首年数字迷惑。


准备好系统化备战PM面试了吗?

获取完整面试准备系统 →

也可在 Gumroad 获取完整手册

相关阅读