公司动态

小满科技数据分析岗笔试复盘:SQL、AB测试与业务题避坑指南

📅 2026/9/1 13:07:34
小满科技数据分析岗笔试复盘:SQL、AB测试与业务题避坑指南
1. 先说这场笔试它到底在筛什么样的人小满科技2023年度秋招数据岗第二批笔试我是在九月中旬的一个晚上做的全程线上双机位时间压得很紧。作为一个经历了第一批笔试失利、又硬着头皮报了第二批的人我可以直接告诉你结论这场笔试不是一个“你懂不懂数据分析”的检测器而是一个“你能不能在这家公司把活干下去”的筛选器。它不考偏题怪题所有题都长在真实业务上但正因为这样反而比那些背题库就能过的笔试难得多。第二批和第一批在体感上有一个很明显的差异第一批的SQL题比重更大而第二批明显加重了业务分析题的分量统计和机器学习的考察也从“概念默写”变成了“场景判断”。这也符合小满这个阶段的招聘节奏——第二批通常是在第一批筛完之后补录HR心里已经有了第一批候选人的画像第二批的题目会更倾向于识别那些“数据基本功扎实同时能聊业务”的人而不是纯代码手。如果你正准备投这类数据岗笔试这篇文章我建议你收藏下来慢慢看。我会把这场笔试的题型分布、每个考点的答题思路、我踩过的坑以及复盘后整理的备考清单全部写出来。内容不保留能帮一个是一个。2. 题型分布与时间分配先活下来再谈发挥2.1 试卷结构一览先说试卷的宏观结构。整套题做完之后我凭记忆整理了一份题型清单你感受一下这个分布逻辑模块题量分值占比难度体感SQL编程题4题30%中等偏上Python编程与数据处理3题20%中等统计概率与AB测试3题20%中等偏上机器学习基础3题15%中等业务分析与开放题2题15%难说看功底你没有看错开放题虽然只有两题分值占比也不算最高但它才是真正决定你能不能进面试的那一部分。原因后面我会细说先记住这个结论SQL和Python决定你的下限统计和业务题决定你的上限。2.2 时间分配我的答题顺序和理由这场笔试限时120分钟题量不算离谱但每道题都需要认真写尤其编程题不是写个伪代码就行的需要能在编辑器里跑通逻辑。我第一次考第一批的时候就是栽在时间分配上——在前面两道SQL题上死磕了快40分钟导致后面的统计题连蒙带猜开放题只写了三行字结果可想而知。第二次我调整了策略按这个顺序来先花5分钟把所有题快速扫一遍标记一眼就会、需要想一想、完全没思路的题。先把一眼就会的题全部做掉包括最简单的SQL题和Python题保证基础分全部落袋。再做统计概率类题这些题通常计算量不大关键是想清楚用哪个分布、哪个检验方法。然后做业务分析题这类题不需要代码纯文字输出反而容易在时间紧张的时候拿到不错的分数。最后留出完整时间处理机器学习题和稍有难度的SQL题这两块是最容易卡壳的放在最后即使没做完损失也算可控。结果证明这个顺序是有效的。最后我留了大概25分钟给压轴的那道复杂SQL最终也写出了一个不完全正确但思路在线的版本拿到了部分分数。3. 硬核考点逐一拆解每个模块到底在考什么3.1 SQL题窗口函数是最大分水岭四个SQL题里有三道都涉及窗口函数。没有窗口函数的那一道是常规的JOIN关联查询难度不大但它的业务场景很典型我复述一下大概需求。有两张表一张是订单表orders字段包括order_id、user_id、order_date、order_amount一张是用户注册表users字段包括user_id、reg_date、channel。第一道题是计算每个注册渠道在2023年8月的首单转化率注意这里说的是首单不是任意订单所以要先定位每个用户的首单时间再来判断首单是否在8月这个逻辑一错结果就完全偏了。我当时写的大概思路是这样WITH first_order AS ( SELECT user_id, MIN(order_date) AS first_order_date FROM orders WHERE order_status success GROUP BY user_id ) SELECT u.channel, COUNT(DISTINCT u.user_id) AS reg_user_cnt, COUNT(DISTINCT fo.user_id) AS first_order_user_cnt, COUNT(DISTINCT fo.user_id) * 1.0 / COUNT(DISTINCT u.user_id) AS conversion_rate FROM users u LEFT JOIN first_order fo ON u.user_id fo.user_id AND fo.first_order_date BETWEEN 2023-08-01 AND 2023-08-31 WHERE u.reg_date BETWEEN 2023-01-01 AND 2023-08-31 GROUP BY u.channel;当时在考场上我纠结过一个问题到底是在JOIN的时候限制首单日期还是JOIN完再在WHERE里限制如果JOIN完再在WHERE里限制会把没有首单的用户过滤掉算出来的分母就不对。所以正确的做法是把这个日期条件放在JOIN的ON条件里而不是放在WHERE里。这个细节如果你没有踩过坑很容易忽略但它在实际业务里特别常见一定要记住。后面三道题基本都要用窗口函数我挑一道最有代表性的说。题目是统计每个用户截至当前日期累计消费金额并按累计金额从高到低排序输出每个用户的排名。这个需求用窗口函数就是一行的事SELECT user_id, order_date, SUM(order_amount) OVER (PARTITION BY user_id ORDER BY order_date ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS cum_amount FROM orders;这道题本身不难但它背后考的是你对窗口函数执行顺序的理解。我对这类题目最大的建议是不要死记函数语法而是要理解窗口函数在SQL执行计划里的位置——它是在WHERE、GROUP BY、HAVING之后执行的这一点决定了你在窗口函数里能不能用别名、能不能用聚合结果做过滤。理解了这个顺序很多题你就能自己推出来。3.2 Python题不考语法考熟练度Python的三道题全部以pandas为主没有一道让你写算法题。这其实反映了数据岗笔试的一种出题趋势——公司越来越清楚他们要的不是刷LeetCode的人而是能拿着数据干活的人。我记得有一道题是给了一张包含多列的DataFrame里面有用户ID、登录日期、登录时长、活跃度等级等字段要求计算每个用户最近7天的平均登录时长并且要排除登录时长为0的数据同时输出用户ID和对应的平均时长。题目看上去不难但有一个很隐蔽的坑用户ID不是唯一的索引同一天同一个用户可以登录多次所以不能直接按用户ID分组而是要先按用户ID和登录日期去重再去计算窗口均值。我当时的处理思路大概是这样的df df.groupby([user_id, login_date]).agg( daily_avg_duration(duration, mean) ).reset_index() df[last_7d_avg] df.sort_values(login_date).groupby(user_id)[daily_avg_duration].transform( lambda x: x.rolling(7, min_periods1).mean() )考完我复盘了一下这道题的核心考点其实是两步第一你知不知道要先去重第二你知不知道pandas的transform和窗口函数是可以组合使用的。如果你只是用groupby再merge回去逻辑上没错但代码会显得很臃肿而且在严格的线上环境里很可能超时。另外一道Python题考的是数据清洗给了一个csv文件路径要求读取、处理缺失值、把日期字段转成datetime类型、按周统计订单量。这些都是数据岗日常最基础的操作。说实话如果你连这都答不好后面基本没戏。3.3 统计与概率AB测试是重头戏统计模块给我的感觉是概率题不算难AB测试相关的题才是拉分点。概率题考了一个很经典的题目某个功能上线后用户点击率从10%提升到12%问你假设检验的备择假设是什么。这类题没啥好说的就是考基础概念但要小心审题题目问的是备择假设不是零假设很多人一紧张就写反了。AB测试那道题我印象很深题目说产品团队希望验证一个新推荐算法的效果设计了一个实验实验组和对照组各分配了5万名用户实验周期为7天问你应该选择什么指标作为核心指标并且如何在实验结束后判断显著性。其实这道题在考什么考的是你对AB测试整体流程的把控能力。核心指标的选择要考虑三个维度一是与业务目标对齐二是指标的灵敏度三是能不能在短期内被观测到。很多人的答案只写了“选择点击率”或者“选择转化率”但没解释为什么选这就会被扣分。我当时的回答框架是这样的核心指标应该与业务北极星指标对齐如果这个新推荐算法最终影响的是用户活跃度和内容消费时长就不要只看点击率要看人均消费时长。辅助指标至少包含两个层面一是正向指标比如内容曝光到点击的转化率二是护栏指标比如人均负反馈次数防止算法提升了点击率但牺牲了用户体验。判断显著性的标准操作是用双样本t检验或卡方检验看p值是否小于0.05同时计算效应量、置信区间不能只看p值还要看置信区间下界是否超过最小可接受提升。这套回答的逻辑其实不复杂但它需要你在平时工作、学习中对AB测试有完整的理解否则临时抱佛脚很难写出这种框架感。3.4 机器学习基础记住这些就够用机器学习题偏基础三道题分别考了过拟合的处理方法、分类模型的评估指标选择、以及特征工程的一个小场景题。过拟合那道题几乎就是送分题常见的处理手段无非就是增加数据量、正则化、交叉验证、降低模型复杂度、特征选择、早停法。关键不在于你列举了多少种方法而在于你能不能说清楚每一种方法是通过什么途径缓解过拟合的。比如正则化是在损失函数中加入惩罚项限制权重的大小从而降低模型复杂度。分类模型评估指标那道题有点意思题目给了一个风控场景正样本是违约用户占比只有1%问你选择什么评估指标。很多人会直接答准确率但这在样本不均衡场景下是自欺欺人。正确思路是看召回率、精确率、AUC、PR曲线特别是PR曲线在极端不均衡场景下比ROC曲线更能反映模型性能。如果你的回答里没有提到样本不均衡这几个字这道题基本就黄了。特征工程那道题是给了一个预测用户流失的场景数据里有用户年龄、上次登录距离今天数、近30天登录次数、用户等级、客服投诉次数等字段让你判断哪些特征需要做处理以及怎么处理。这个题没有标准答案主要看你能不能想到缺失值填充、离散特征编码、连续特征的归一化或分箱、以及时间类特征的周期化转换。4. 业务分析题真正拉开差距的地方4.1 指标异动归因一个能直接用的分析框架业务分析题的第一道是这样的某产品的次日留存率突然下降了3个百分点假设你是负责这个指标的数据分析师你会如何分析原因。这种题在数据分析岗位的笔试里已经快变成必考题了。它能考察的东西太多你有没有分析框架、你会不会拆解问题、你能不能区分可控因素和不可控因素、你有没有业务敏感度。我当时的答案分了四条线。第一先验数据。确认次日留存率的口径是否有变化。很多时候指标波动是口径调整导致的比如技术部门把“次日留存”的定义从“注册后次日内有任意活跃行为”改成了“注册后次日有指定关键行为”分母一样但分子变严了指标自然下降。所以第一步永远是验证数据口径。第二拆维度看波动是否普适。如果整体降了3个百分点需要拆到版本维度、渠道维度、新老用户维度、不同注册时间段的维度来看是全局下降还是部分群体下降。如果只有某个渠道的用户留存下降那重点排查这个渠道的投放质量和用户匹配度如果新用户降了很多但老用户没变那问题大概率出在首次体验环节。第三结合业务动作排查。这段时间产品有没有发版有没有改注册流程有没有调推送策略有没有做活动这些业务动作和指标波动的时间点是否吻合对归因非常关键。第四提数据验证方案。如果怀疑是某个功能改动导致的能不能做用户分群对比观察改动前后用户行为链路的差异如果怀疑是渠道质量导致的需要对比该渠道和其他渠道的用户画像激活情况。这套框架如果你在笔试前没有提前准备现场临时组织语言会非常慌乱。建议你先把这个框架记下来后续遇到类似题目都能用上。4.2 开放题写清楚比写得多重要最后一道开放题也是让我印象深刻的一道假设你要向业务部门做一次数据周会汇报本周核心指标整体平稳但某个二级页面的人均停留时长下降了20%你会怎么准备这次汇报请你列出汇报的框架和核心内容。这道题其实是在考察你的“数据汇报能力”也就是你能不能把数据信息转化为业务决策依据。很多人拿到题就写“我会分析下降原因、给出建议”但这样写太空了阅卷人看不到你具体会怎么做。我当时的答题思路是先说结论本次周会最重要的不是汇报下降而是汇报“为什么下降”和“我们要怎么办”。然后是数据说明列出当前周和上周的人均停留时长数据包括同比、环比、分渠道、分页面位置的数据判断下降的严重程度。然后是归因分析从版本改动、外部流量结构变化、页面内容供给变化、季节性波动四个方向给出初步判断。然后是行动建议基于当前能确定的信息建议业务方优先做哪几个方向的调整建议数据团队做怎样的下钻分析验证。最后是待确认问题明确哪些结论还不确定需要业务方反馈或者需要后续数据验证。这种结构的好处是它呈现了一个完整的思考链条从数据到结论到行动再到验证而不是一个孤立的结论。如果你平时没有写周会的经验建议你现在就找一个数据产品页面模拟着写一周的周报写几遍你就有感觉了。5. 复盘与避坑指南我不想你重复我的失误5.1 我踩过的几个坑写出来供你参考第一不要在SQL上恋战。我第一次考第一批的时候就是在第三道SQL题上卡了太久。那道题考的是连续登录天数计算解法有多种我当时想写一个通用解法结果越写越复杂把自己绕进去了。实际上这类题用ROW_NUMBER()就能解决不需要追求所谓的最优解能跑通就是好解。第二不要低估开放题的时间成本。开放题虽然只有两道但我第一次只留了10分钟结果连答题框架都没写全。第二次我把开放题提前到一个中等靠前的位置保证有充足时间组织语言体感确实好很多。第三注意线上笔试的环境要求。现在很多笔试都要求双机位我有朋友因为副机位画面被遮挡直接被判违规连答题机会都没有。这一点虽然不涉及知识储备但对结果影响巨大一定要提前调试好设备。第四写概率题的时候不要只写答案。比如题目要求计算某个事件发生的概率即使你最后结果算错了但中间过程步骤是正确的阅卷人通常会给步骤分。但这有个前提你的思路必须清晰写在答题区域里不要只丢一个数字上去。5.2 给下一届数据岗笔试的备考清单如果你看完这篇复盘打算开始系统准备我建议你按下面的清单来安排复习优先级SQL窗口函数必须熟练包括ROW_NUMBER、RANK、DENSE_RANK、SUM OVER、LAG、LEAD。重点做连续登录天数、累计求和、分组TopN这三类题。这三类题覆盖了八成的窗口函数考点。Pythonpandas的groupby、transform、merge、rolling、apply要熟练掌握建议直接拿真实数据练手了解数据清洗、透视、聚合的完整流程。统计与AB测试重点复习假设检验的基本逻辑、p值、置信区间、第一类第二类错误以及AB测试的完整流程和常见陷阱比如样本量、实验周期、多重检验问题。机器学习基础概念必须拿出来就能讲清楚包括过拟合、欠拟合、交叉验证、精确率、召回率、F1、AUC重点理解不同指标在样本不均衡场景下的选择逻辑。业务分析熟悉指标异动归因、漏斗分析、留存分析、用户分群这几个经典场景提前准备一套分析框架考场上直接用。如果你手头没有合适的练习题我建议你去翻一翻公开的数据集平台找电商、内容、金融三个方向的业务数据自己给自己出题写SQL做留存分析、用Python做指标拆解、用统计知识设计一个AB测试方案。这套组合练下来应付笔试基本就够用了。6. 写在后面的一点大实话考完这场笔试我最大的感受是数据岗笔试考的不是知识点本身而是你有没有把一个知识点放到业务场景里去理解的能力。SQL的窗口函数谁都会背但不是每个人都知道首单转化率的分母应该怎么保留假设检验谁都会算t值但不是每个人都能想清楚AB测试的核心指标该怎么选机器学习的评估指标谁都能默写出几个但不是每个人都能讲清楚在不均衡样本下为什么PR曲线比ROC曲线更合适。这些能力没有捷径只能靠平时多接触真实数据、多思考业务逻辑来积累。笔试更像是一次体检你平时是什么水平做题的时候就会暴露成什么样。如果看完这篇复盘你能把文章里提到的每一个考点都过一遍清楚自己哪里会、哪里不会那这篇文章花的时间就没有白费。