一句话总结
答得最流畅的人,往往在第一轮就被淘汰。不是因为你写不出复杂JOIN,而是你根本没理解Sea业务的核心矛盾——规模扩张与单位经济模型的对抗。大多数候选人把SQL题当成技术考试来准备,但真正决定生死的是你能否用数据推导出“每单补贴该不该减”。你的查询语句不是为了跑通,而是为了说服一位正在为Q3亏损焦头烂额的区域运营主管。
不是A是语法正确,而是B能支撑决策。不是A是写出窗口函数,而是B能指出“这张表日活虚高是因为爬虫刷单”。不是A是完成题目,而是B能反问“这个指标的口径是否包含退款订单”。你不是在参加编程比赛,而是在模拟一场真实的debate,对手是比你年薪高两倍的L6科学家。
适合谁看
你不是应届生,也不是转行者。你是有2-5年经验的数据从业者,正在从“执行型分析师”向“策略型数据科学家”转型。你已经会写CTE、理解left join和inner join的区别,能用Python做基础建模,但你在面试中总卡在“业务推导”环节。你在上一轮Sea面试中,被问到“如果GMV上涨但利润下降,你会怎么拆”时,回答了“按品类拆解”,结果面试官皱眉说“太浅”。
你意识到,技术只是门槛,真正的壁垒在于对东南亚电商生态的理解深度。你工作的公司可能是Shopee的竞争对手,或是国内电商中台,你熟悉补贴、履约成本、用户分层,但你不知道如何把这些经验翻译成Sea高管听得懂的语言。你年薪在70万人民币左右,base占60%,bonus浮动15%,RSU占比25%,你现在目标是跳入Sea拿总包400万以上。你看这篇文章,不是为了背题,而是为了掌握那个“让面试官沉默三秒”的判断力。
SQL题的本质不是写代码,而是暴露你对业务逻辑的认知盲区?
你在LeetCode上刷了200道SQL题,却在Sea第二轮被一道“计算7日留存率”的题干住。不是因为你不会用datediff或rownumber(),而是你忽略了题干里一句轻描淡写的“只统计完成首次购买的用户”。你按常规思路写了:
`
select count(distinct uid) as dau
from events
where date = '2025-03-01'
and event = 'login'
`
然后套用留存模板。面试官问:“你确认这是‘留存’吗?”你愣住。他说:“如果这个用户是昨天才注册,今天登录,算留存吗?”你意识到,你混淆了“活跃”和“留存”——真正的留存必须锚定在“首次行为”之后的第N天是否回归。正确写法是从注册表拉出cohort,再join登录事件:
`
with first_purchase as (
select uid, min(date) as first_date
from orders
where status = 'completed'
group by uid
),
retention as (
select
fp.first_date,
e.date,
count(distinct e.uid) as retained_users
from first_purchase fp
left join events e on fp.uid = e.uid
and e.date = dateadd(fp.firstdate, interval 7 day)
and e.event = 'login'
group by 1,2
)
`
这不是技术问题,是认知偏差。你在原公司做报表,口径由产品定义好,你照抄即可。但在Sea,没人给你标准答案。你必须主动定义:什么是“活跃”?是否剔除B端账号?是否包含测试流量?我在一次hiring committee(HC)会议中听到面试官说:“这个候选人写了三遍代码才意识到要过滤bot流量,说明他从来没在真实压力下做过DAU通报。” 另一位评委反驳:“但他最后改对了。
” 主面试官摇头:“改对不重要,第一次就应该想到。我们每天损失50万美元,不能靠‘事后修正’活着。” 这就是Sea的标准——不是你能学到,而是你本能就知道。不是A是“代码能跑”,而是B是“默认过滤异常流量”。不是A是“完成查询”,而是B是“主动声明假设”。不是A是“语法无误”,而是B是“指出数据质量问题”。你写的每一行SQL,都在泄露你过去工作的水位。
你如何用一道SQL题预测下季度是否该扩大印尼市场?
面试官给你一张表userorders,字段包括uid, orderdate, region, amount, is_first。问题:“判断雅加达和泗水哪个城市的用户质量更高?” 多数人立刻开始算人均订单数、复购率。有人写:
`
select region, avg(amount) as avgordervalue
from user_orders
where is_first = 1
group by region
`
面试官问:“然后呢?” 你补一句:“雅加达AOV更高,所以质量更好。” 面试结束。正确路径是:先定义“用户质量”=单位获客成本下的终身价值。你反问:“是否有CAC数据?” 面试官说没有。你说:“那我用首单金额和复购率代理。” 接着写:
`
with cohort as (
select
region,
uid,
min(orderdate) as firstorder_date
from user_orders
where is_first = 1
group by 1,2
),
retention as (
select
c.region,
count(distinct case when o.orderdate > dateadd(c.firstorderdate, interval 30 day) then o.uid end) as repurchased
from cohort c
left join user_orders o on c.uid = o.uid
group by 1
)
select
region,
repurchased 1.0 / count() as retention_rate
from retention
group by 1
`
你以为赢了。面试官再问:“如果雅加达CAC是泗水的1.8倍呢?” 你卡住。真正的高手会说:“我需要构建一个简化LTV模型。” 然后在白板上列公式:
LTV = AvgOrderValue × PurchaseFrequency × GrossMargin
再拆:Purchase_Frequency = 1 / (avg gap between orders)
然后查timestampdiff(day, lag(orderdate) over(partition by uid order by orderdate), order_date)。最后对比LTV/CAC比值。这道题的终极目标不是写SQL,而是测试你能否把模糊业务问题转化为可计算指标。我在一次debrief会上听到L6科学家说:“候选人用留存率判断市场质量,说明他还在用OMT(运营思维)做事。我们要的是能直接算ROI的人。
” 不是A是“比较两个城市的数据”,而是B是“构建决策模型”。不是A是“输出表格”,而是B是“给出行动建议”。不是A是“回答问题”,而是B是“重构问题”。你必须主动说:“如果LTV/CAC > 3,建议扩大投放。” 否则,你只是个高级取数员。
面试官真正在听的,是你提问的方式和顺序
第三轮面试,面试官丢出一张promotion_logs表,说:“我们上个月推了‘满15减3’活动,GMV涨了12%,但利润降了5%。你觉得该继续吗?” 90%的人直接开写SQL。正确反应是停顿三秒,然后问:“1)活动覆盖了哪些品类?2)补贴前后的客单价分布有变化吗?3)新老用户参与比例如何?
” 这三个问题直接决定你的段位。第一个问题测试你是否意识到“品类毛利差异”——若活动集中在低毛利3C品,利润下降合理。第二个问题查“消费降级”——用户可能原本买20块的东西,现在凑单买15块的。第三个问题验“拉新质量”——若是老用户薅羊毛,不具可持续性。我在一次hiring manager对话中亲耳听到:“候选人一上来就写代码,说明他习惯被动执行。我们要的是能挑战假设的人。” 你接着写:
`
select
case when p.promo_type is not null then 'promoted' else 'organic' end as group,
avg(o.amount) as aov,
count() as orders,
sum(o.amount p.discountrate) as subsidycost
from orders o
left join promotionlogs p on o.orderid = p.order_id
where o.date between '2025-02-01' and '2025-02-28'
group by 1
`
但必须加一句:“我假设discountrate已知。如果未知,需从promotionrules表补充。” 这种主动暴露依赖项的行为,是高级信号。面试官可能故意不给某些表,看你是否追问。我在HC会上见过一个候选人,被拒理由是:“他假设所有字段齐全,说明在原公司只负责片段任务,从未端到端跟进过分析项目。” 不是A是“快速输出结果”,而是B是“澄清需求边界”。不是A是“依赖给定数据”,而是B是“识别缺失信息”。
不是A是“避免提问显得无知”,而是B是“提问证明掌控力”。你的问题质量,直接映射你的决策层级。问“数据什么时候更新?”是执行层。问“这个指标是否被纳入区域KPI?”是策略层。
为什么你的机器学习方案在Sea面试中一票否决?
第五轮,面试官让你设计一个“预测用户流失”的模型。你熟练讲出XGBoost、AUC、特征工程,甚至提出用生存分析。面试官点头,然后问:“上线后,你如何证明模型带来了实际收益?” 你答:“看AUC提升。” 面试官摇头:“AUC不是业务指标。” 你改口:“看预测准确率。” 他说:“准确率高,但运营团队没人看。” 你卡住。正确答案是:设计AB测试。将高风险用户随机分两组,一组发优惠券挽留,一组不干预,比较30天后留存差异。这才是Sea要的答案。我在一次模型评审会上听到数据科学负责人说:“我们去年上了17个预测模型,只有3个真正影响了决策。其他都成了‘PPT科学’。
” 你必须说:“模型输出不是终点,是触发动作的开关。” 比如,预测流失后,自动触发客服外呼或定向补贴。你还需考虑“干预成本”——若发券成本高于用户LTV,模型再准也无用。因此,最终目标函数不是logloss,而是“净收益 = 挽留用户数 × 平均贡献 - 干预成本”。不是A是“追求模型精度”,而是B是“优化业务结果”。不是A是“输出概率分数”,而是B是“定义行动阈值”。不是A是“特征重要性分析”,而是B是“可解释性保障运营信任”。我在HC会上见过一个博士候选人,模型讲得极深,但被拒理由是:“他无法说出‘这个模型能让财务成本降低多少’。” Sea不养纯研究者。你的模型必须能翻译成财务语言。说“AUC提升0.1”没人听。说“每年节省800万美元客服成本”才能过会。
面试流程拆解:每一轮的生死线在哪里?
Sea数据科学家面试共五轮,总耗时2-3周。第一轮是30分钟HR电话,筛简历和动机。关键问题是:“为什么离开当前公司?” 错误回答是:“想学新技术。” 正确回答是:“我主导的补贴优化模型节省了1200万/年,但公司决策链太长,无法快速迭代。Sea的‘数据驱动’文化更能发挥我的价值。” HR在系统里标记“高主动性”。第二轮是60分钟SQL实战,用CoderPad写代码。重点不是语法,而是你是否主动处理null值、是否加注释、是否考虑性能。例如,面试官给一张10亿行的click_stream表,你写select count() from ... 直接挂。正确做法是先explain,或采样limit 10000。我在debrief会上听到评委说:“候选人直接count全表,说明他没在真实大数据环境工作过。” 第三轮是45分钟业务案例,给一个模糊问题如“DAU停滞,如何分析?
” 考察结构化思维。必须用框架:先看数据质量,再拆渠道、地域、用户分层,最后归因到具体功能。错误是直接跳到“做推荐系统”。第四轮是模型设计,如“如何预测爆款商品?” 考察从问题定义到评估的全流程。必须提冷启动、数据延迟、线上推理成本。第五轮是behavioral,由L6或L7主持,问“最失败的项目”“如何说服不同意的同事”。我在hiring manager对话中得知,这一轮挂人率最高。原因是:“技术强的人往往缺乏政治智慧。他们说‘我同事不懂数据’,而不是‘我调整了沟通方式’。” 每一轮淘汰率约40%。总包谈判在HC通过后由HR发起,不面试官参与。
准备清单
- 精通窗口函数、CTE、性能优化技巧,能应对十亿级表的查询挑战,避免在SQL轮因全表扫描被淘汰
- 掌握东南亚电商核心指标:Take Rate、Adj. GMV、Unit Economics、CAC Payback Period,并能用SQL实现
- 熟悉Shopee主要市场(印尼、越南、巴西)的消费特征,如印尼偏好COD、巴西高退货率
- 准备3个深度项目,必须包含:问题定义、数据清洗难点、模型选择逻辑、AB测试设计、财务影响量化
- 模拟debate场景,练习如何在面试官质疑时保持逻辑清晰,如“你的方法太理论”“数据不支持”
- 系统性拆解面试结构(PM面试手册里有完整的数据科学家面试实战复盘可以参考)
- 调研Sea最新财报,理解其从“增长优先”转向“盈利优先”的战略变化,所有回答需契合此基调
常见错误
错误一:直接计算GMV增长率,忽略货币波动
BAD:
`
select (sum(case when month=3 then gmv end) - sum(case when month=2 then gmv end)) / sum(case when month=2 then gmv end)
from sales
`
问题:印尼盾对美元汇率波动达15%,未换算成USD导致误导。
GOOD:明确声明“所有GMV已按当月平均汇率换算为USD”,并join汇率表。
错误二:用平均值掩盖长尾分布
BAD:报告“平均订单金额9.8美元”,导致决策层误判用户购买力。
GOOD:补充分布图,指出“75%订单金额<5美元”,建议聚焦低价爆品策略。
错误三:模型未考虑执行成本
BAD:提议“用NLP分析客服对话情感”,耗时6个月,ROI为负。
GOOD:先用规则引擎抓关键词(如“refund”“angry”),两周上线,覆盖80%场景。
准备拿下PM Offer?
如果你正在准备产品经理面试,PM面试手册 提供了顶级科技公司PM使用的框架、模拟答案和内部策略。
FAQ
Q:没有东南亚经验能否通过面试?
能,但必须证明你能快速迁移认知。我在HC会上见过一个候选人,原在美团做外卖补贴,他说:“美团的‘红包裂变’和Shopee的‘砍价免单’本质相同,都是利用社交链降低CAC。区别在于,东南亚用户更信任熟人推荐,而非平台补贴。” 他用一张对比表展示两国用户信任源差异,说服了全部评委。关键不是经验匹配,而是框架迁移。他说:“中国市场的优化空间在效率,东南亚在渗透。
前者要降本,后者要教育。” 这句话被L6科学家记在笔记上。你不需要去过雅加达,但你要能推理出“为什么Shopee Mall增长慢”——不是因为品牌不强,而是因为COD让用户不愿尝试高价商品。你的替代数据可以是国内下沉市场或拉美案例。重点是展示“类比—验证—调整”的思维链,而非直接复制。
Q:SQL轮是否允许查文档?
不允许。CoderPad环境无外网,你必须手写代码。我见过候选人写dateadd(day, -7, date)被纠正为date_add,面试官说:“我们用BigQuery,语法要精确。” 更致命的是,有人写select ,面试官问:“这张表有50个字段,你真的需要全部?” 正确回应是:“不需要,我只选uid、event、timestamp。
” 实际场景中,我参与过一次真实面试,候选人写了一行-- 检查数据质量然后执行select count(*), count(distinct uid) from events limit 1000,面试官立刻点头。这种“先探数据”的本能是加分项。另一个细节:用with而非子查询,提升可读性。我在debrief会上听到:“候选人用三层嵌套子查询,说明他没在团队协作环境写过代码。” 所有代码都默认会被review,清晰比炫技重要。
Q:base、RSU、bonus具体能拿多少?
L4:base 18万美元/年,RSU 6万美元/年(分4年归属),bonus 15%(约2.7万美元),总包约26.7万美元。
L5:base 22万,RSU 12万,bonus 20%(4.4万),总包约38.4万美元。
L6及以上需谈判,通常总包超50万美元。
注意:RSU以美股计价,受股价波动影响。2023年Sea股价波动±40%,候选人需有风险意识。我在一次offer discussion中听到HR强调:“我们不保最低现金,bonus与公司盈利挂钩。
” 意思是,若公司亏损,bonus可能为零。这也是为什么业务理解如此重要——你必须证明自己能直接贡献利润,而非只做分析。薪资结构本身就在筛选风险偏好:要稳定选大厂,要爆发选Sea。
准备好系统化备战PM面试了吗?
也可在 Gumroad 获取完整手册。