一句话总结

答得最流畅的人,往往在第一轮就被淘汰。不是因为你写不出复杂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发起,不面试官参与。

准备清单

  1. 精通窗口函数、CTE、性能优化技巧,能应对十亿级表的查询挑战,避免在SQL轮因全表扫描被淘汰
  2. 掌握东南亚电商核心指标:Take Rate、Adj. GMV、Unit Economics、CAC Payback Period,并能用SQL实现
  3. 熟悉Shopee主要市场(印尼、越南、巴西)的消费特征,如印尼偏好COD、巴西高退货率
  4. 准备3个深度项目,必须包含:问题定义、数据清洗难点、模型选择逻辑、AB测试设计、财务影响量化
  5. 模拟debate场景,练习如何在面试官质疑时保持逻辑清晰,如“你的方法太理论”“数据不支持”
  6. 系统性拆解面试结构(PM面试手册里有完整的数据科学家面试实战复盘可以参考)
  7. 调研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使用的框架、模拟答案和内部策略。

获取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 获取完整手册

相关阅读