ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

蚂蚁数据岗笔试复盘:SQL、Python与业务分析核心考点全解析

蚂蚁数据岗笔试复盘:SQL、Python与业务分析核心考点全解析 2024年春招我参加了蚂蚁集团数据岗的第一批笔试。先说结论这批笔试整体难度不算“劝退级”但对基础功的考察非常细题量也偏大想靠考前突击过线几乎不可能。整场笔试大概两个半小时覆盖了SQL、Python编程、概率统计、机器学习基础和开放式业务分析题。如果你今年或明年准备投递数据类岗位这篇文章我会从题型结构、核心考点、解题思路、踩坑实录四个维度完整复盘尽量让你看完后对这类笔试有一个清晰的认知地图。1. 笔试整体情况与考核框架1.1 岗位方向与批次说明蚂蚁集团数据岗在春招里其实是一个比较大的类别细分下来至少有数据分析师、数据研发工程师、数据科学家这几个方向。不同方向的笔试题侧重点差异很大但第一批笔试通常是合并出题再根据你投递的岗位分配不同的题目组合。我投递的是偏业务侧的数据分析岗所以试卷里业务分析类和SQL的占比明显更高数据结构和纯算法题相对少一些。如果你是投数据研发或者数据科学方向大概率会在编程题和机器学习推导上看到更深的题。这里有个经验投递前一定要仔细看清岗位JD里的能力要求笔试复习的侧重点完全不同用一套题去应付所有方向基本会翻车。第一批笔试的时间通常在3月上旬刚好卡在春招刚启动的节点。从实际题目看这次笔试明显是在“筛人”而非“选人”——题量大、时间紧很多题目一眼看上去会做但要在限定时间内做对、做完就需要非常熟练的肌肉记忆。1.2 题型分布与时间分配我这场考试的题型和分值大致如下题号题型题量建议用时考察方向第一部分单选题10题20分钟概率统计、机器学习基础、业务常识第二部分多选题5题10分钟机器学习细节、统计学概念辨析第三部分SQL编程题3题45分钟窗口函数、关联查询、留存计算第四部分Python编程题2题30分钟数据处理、基础算法第五部分开放式业务题1题30分钟指标拆解、AB实验设计总时长是135分钟题量看起来不算夸张但实际写起来非常赶。尤其是SQL题需要在线运行调试如果语法不熟一题卡10分钟后面就全乱了。一个很重要的提醒在线编程环境不像本地IDE那么智能没有自动补全报错信息也比较粗糙。平时刷题如果用惯了LeetCode那种带提示的环境建议考前用牛客网或赛码网的在线编程模式模拟几次。1.3 笔试平台与准备事项这次笔试用的是赛码网平台双机位摄像头监控手机需要放在侧后方扫码架好。考前30分钟就要求进入候考室完成人脸识别和环境检测。几个细节值得注意第一草稿纸可以带但考试结束前需要对着摄像头展示草稿纸正反面确认没有提前写字第二考试过程中如果切出浏览器超过3次会被标记异常哪怕你是想打开计算器虽然平台自带计算器功能但很多人不知道第三网络一定要稳定我身边有人因为网络波动被强制交卷申诉流程相当麻烦。建议考前一天做一次完整的环境测试包括摄像头、麦克风、浏览器兼容性。尽量用Chrome或Edge不要用Safari平台对Safari的兼容性问题比较多。2. 核心考点深度拆解2.1 SQL题窗口函数是必考重点蚂蚁的数据岗笔试SQL题几乎是铁打的主力。三道SQL题分别考察了独立访客统计、连续登录天数和用户留存分析。如果你对窗口函数不熟这三道题会做得非常痛苦。独立访客统计那题表结构和需求大致是有一张访问记录表字段包括user_id、visit_date、page_name需要统计每个页面每天的独立访客数。这个题目本身不难用COUNT(DISTINCT user_id)就能搞定但它挖了个坑——表里的数据有重复记录同一个用户在同一个页面当天可能有多条访问记录直接去重统计是对的但如果你用GROUP BY user_id先分组再聚合就会算错口径。连续登录天数的题是经典中的经典。表里有user_id和login_date要求计算每个用户最大的连续登录天数。这题的通用解法是用ROW_NUMBER()按用户分组后按日期排序然后用登录日期减去排名得到一个“分组标识”相同标识的日期就是连续的一段。这里有个细节login_date是日期类型直接减整数在MySQL和Hive里都是支持的但在某些数据库方言里需要用DATE_SUB或INTERVAL语法所以平时练习一个方言就要练透不要每次换一个环境。答题时如果没有注明数据库类型默认用MySQL标准语法最安全。留存分析那题是考察次日/3日/7日留存。给了一张用户激活表和一张用户活跃表需要输出每个激活日的用户数以及对应的N日留存率。这种题核心思路是先找用户的激活日期作为基准然后左连接活跃记录用DATEDIFF计算活跃日期与激活日期的差值最后按差值做条件聚合。2.2 Python编程题数据处理能力优先于算法两道Python题都不是传统的LeetCode算法题而是偏向数据处理。第一题是给一个嵌套的JSON数据要求提取特定字段并输出成扁平化的DataFrame第二题是自己实现一个简单的分组聚合逻辑不能用pandas只能用纯Python实现。第一题用pandas的json_normalize可以快速解决但需要注意嵌套层级和字段缺失。如果数据里有字段缺失直接访问dict的key会报KeyError需要用get方法或者参数设置默认值。这个细节非常容易在实际手写代码时翻车因为笔试环境里报错信息不一定能直接定位到对应行。第二题纯Python实现分组聚合实际上是在考字典的使用。核心逻辑是遍历所有记录用分组键作为字典的key把需要聚合的值累加到一个列表里最后再计算均值或求和。如果数据量不大这个方案完全够用。但要小心不要用列表拼接的方式反复复制数据复杂度会退化成O(n²)在大数据量下会超时。2.3 统计与机器学习基础概念理解比公式记忆重要选择题里出现最多的统计学概念集中在条件概率、贝叶斯公式、假设检验和置信区间。有一道题让你判断“p值小于0.05意味着什么”选项里混入了“原假设为真的概率小于5%”这种经典错误表述。如果你只是背过“p0.05拒绝原假设”对p值的定义理解不透彻很容易选错。机器学习部分考了过拟合的识别和应对、正则化L1和L2的区别、决策树的分裂条件、特征选择的方法。没有让手推公式但对概念的理解要求很高。比如有一道多选题问哪些方法可以缓解过拟合选项包括增加数据量、降低模型复杂度、增加正则化系数、增加训练轮数。如果你在训练深度学习模型的经验里增加训练轮数有时也能看到验证集准确率提升但从原理上判断增加训练轮数是典型的加重过拟合的操作。还有一道题问L1正则化和L2正则化的区别核心差异在于L1能得到稀疏解L2倾向于让权重均匀变小。这个知识点如果你只是知道“L1是绝对值、L2是平方”是不够的因为题目还追问了“在什么场景下优先选择L1”答案应该是特征维度很高且希望做特征选择时。2.4 业务分析题结构化表达是隐形考点最后一题是开放式的业务分析题题目大致是支付宝的某个营销活动上线后发现整体ROI低于预期要求你从数据角度分析可能的原因并提出优化方案。这种题没有标准答案考察的是你的分析框架、逻辑缜密度和数据敏感度。我看到题目时的第一反应是千万不要只写“用户不感兴趣”这种一句话结论。你需要像剥洋葱一样层层拆解ROI 收益 / 成本成本端是投放费用、优惠券补贴、渠道佣金收益端是新增用户价值、存量用户活跃提升、转化率提升带来的GMV增量。把公式拆开后再逐个分析每个环节可能出问题的点。我的答题框架大致是先定义ROI的口径和计算方式再从成本端和收益端分别列出可能的原因比如渠道投放的定向是否准确、落地页转化率是否低于预期、活动门槛是否过高、用户领取优惠券后的核销率是否偏低。然后针对每个可能的原因指出需要如何通过数据去验证比如拆分渠道看转化漏斗对比不同用户分层的核销率做同环比分析看活动是否只是透支了未来消费。最后给出优化方案但方案要有优先级排序不能一股脑全写出来。这种题真正拉开差距的不是你懂多少模型而是你能不能把一个模糊的问题变成一个可以落地验证的数据分析任务。结构化的思考过程远比堆砌术语重要。3. 实操过程与核心环节实现3.1 一道SQL题的完整拆解我把那道连续登录天数的题目完整还原一下因为这是最典型且出镜率极高的题目。假设原始表叫login_log字段包括user_id和login_date希望输出每个用户的最大连续登录天数。思路分三步第一步用ROW_NUMBER()给每个用户的所有登录日期按时间排序第二步用login_date减去排名序号得到每个日期对应的分组ID第三步按用户和分组ID分组建表统计每个组的记录数取最大值。WITH login_ranked AS ( SELECT user_id, login_date, ROW_NUMBER() OVER(PARTITION BY user_id ORDER BY login_date) AS rn FROM login_log ), login_grouped AS ( SELECT user_id, login_date, DATE_SUB(login_date, INTERVAL rn DAY) AS grp FROM login_ranked ) SELECT user_id, MAX(consecutive_days) AS max_consecutive_days FROM ( SELECT user_id, grp, COUNT(*) AS consecutive_days FROM login_grouped GROUP BY user_id, grp ) t GROUP BY user_id;这里有个非常关键的细节为什么用DATE_SUB(login_date, INTERVAL rn DAY)能得到连续天数的分组因为如果一个用户的登录日期是连续的比如1号、2号、3号排名分别是1、2、3减去对应天数后得到的是同一个日期。1号减1天是去年12月31号2号减2天也是去年12月31号3号减3天还是去年12月31号。一旦中间断了一天比如5号5号减4天是1号和前面的分组就不同了。如果表中存在同一个用户同一天多条登录记录需要先对login_date做去重否则连续天数会被重复计数。如果去重这一步没做好实际结果会偏大而SQL语法的正确性检查在在线笔试里往往不检查数据本身导致你自以为做对了实际上结果错误这在真正的工作中是一个需要警惕的问题。3.2 一道Python数据处理题的实现那道JSON扁平化的题目我尝试用pandas的json_normalize来实现但实际作答时发现嵌套结构比预想的复杂里面有一层list包dict的结构需要展开。具体的逻辑是有一个订单列表每个订单里包含用户信息和订单明细订单明细里有商品列表。需要输出一张表每一行是一个商品级别的记录包含用户ID、订单ID、商品ID、商品名称和购买数量。如果直接用json_normalize的record_path参数指定到商品列表再通过meta参数指定用户和订单信息一步就可以完成。但需要注意的是如果某些订单没有商品明细record_path展开后这条记录会丢失如果你希望保留这种无明细的订单需要额外处理。笔试时我用了比较保险的方式先加载到DataFrame再做explode展开这样逻辑更直观不容易出错。平时用pandas写数据清洗已经能做到“手指记忆”级别但在线笔试环境里没有自动补全每个函数名都得一个字母一个字母敲出来。建议在牛客网的pandas练习环境里多练几次尤其是json_normalize、explode、merge这些在面试中高频使用的方法保证不靠提示也能写对。3.3 业务分析题的答题结构示范业务分析题我没有直接写长段落而是用小标题加树状结构的方式让阅卷人一眼看到分析框架。首先定义核心指标ROI的计算口径从财务视角ROI等于活动带来的增量利润除以活动的总成本从运营视角很多时候会用GMV口径即活动GMV除以活动成本。题目没有明确口径所以我主动强调分析前先要和业务方对齐口径这本身就是一个加分点。然后从两个方向展开收益端拆分为新客获取和老客唤醒。新客部分看投放渠道的拉新成本、新客首单转化率、新客次月留存率老客部分看促活触达率、优惠券领取率、核销率和连带购买率。成本端拆分为固定投入和可变投入固定投入包括物料设计、技术开发可变投入包括渠道投放和用户补贴。在成本为王的项目里渠道投放中是否存在刷量作弊也是一个常见但容易被忽视的问题。针对每个可能原因我都会写一句“通过XX数据验证”比如“如果渠道A的点击率高但转化率显著低于其他渠道可能存在刷量或渠道质量差的问题需要进一步分析点击设备ID的集中度和IP归属地”。这样的表达让思路更落地也能体现数据敏感度。最后给出优先级排序的优化方案。我的排序原则是先处理能快速验证且投入成本低的问题比如调整落地页、优化优惠券门槛再处理涉及技术开发的中长期项目比如搭建实时监控看板、建立渠道质量评估模型。避免一上来就写“用深度学习预测用户价值”这种回答虽然天花乱坠但不落地反而会让面试官觉得你缺乏业务判断力。4. 常见失分点与避坑指南4.1 技术细节失分我考完跟几个同样参加了笔试的朋友交流发现失分最集中的地方都是一些“想不到但很致命”的技术细节。SQL的窗口函数框架中如果ORDER BY的列有重复值ROW_NUMBER、RANK和DENSE_RANK的结果是完全不同的。题目如果要求“每个用户最近三天的记录”用ROW_NUMBER最准确如果有并列情况需要明确业务口径是允许并列还是不允许。很多人用RANK去做结果行列数和预期不一致。这个知识点在面试里也几乎必问。NULL值的处理是一个容易被忽略的失分点。统计某字段时COUNT()和COUNT(字段名)的结果差异非常大。COUNT(字段名)会忽略NULL值这在计算非空数量时是对的但如果你用它计算总数就会少算。条件统计时用COUNT(DISTINCT CASE WHEN ... END)是一个好习惯可以避免多次扫描子查询但要注意CASE WHEN没有匹配时返回NULL所以不能用COUNT(字段名)而要用COUNT()。Python处理时间字段时如果用pd.to_datetime遇到格式不统一的字符串默认会抛异常。有一个errorscoerce参数可以把无法解析的变成NaT如果不处理整个程序会中断而在线笔试里的数据往往不是干干净净的。4.2 时间分配与做题顺序我做完单选题后大概用了25分钟比预期的20分钟多了一点导致后面的SQL题时间被压缩。单选里有一些统计学题需要动笔算比如给了均值和标准差让你估算某个区间内的比例这类题按经验一分钟内做不出来就应该先蒙一个后面有时间再回头算。一个比较稳的策略是先快速扫一遍所有题目把SQL和Python题里一眼有思路的先做掉因为它们分值最高且一旦思路通了做起来很快。选择题里涉及长题干计算的先跳过全部做完后再回来算。这样能保证在时间紧张时核心分数段已经拿到手。在线编程环境还有一个痛点代码的运行速度比本地慢尤其是pandas处理大数据集时运行一个单元可能要十几秒。如果代码里有明显效率问题比如循环里做DataFrame拼接会导致运行超时。所以作答时尽量用向量化操作不要写for循环遍历DataFrame。4.3 概念混淆与记忆误区多选题是失分的重灾区因为少选、多选、错选都不得分。有一道关于过拟合的题选项里有“在损失函数中增加L2正则化项”和“对输入特征进行标准化”。前者确实是缓解过拟合的手段但特征标准化主要是为了加速收敛和统一量纲并不直接解决过拟合问题这道题很多人在这个选项上误判了。还有一个记忆误区是置信区间和置信水平的混淆。95%置信区间不是说“真实参数有95%的概率落在区间内”而是“重复采样100次构造区间大约有95次会包含真实参数”。这在选择题里反复考如果你是用“区间包含参数的概率”去理解就会掉进陷阱。机器学习中假设检验的p值小于显著性水平只能说明结果在统计意义上显著但不代表实际业务影响大。样本量很大时微小的差异也能产生很小的p值所以还要结合效应量来看。我在答题时把这个点写进了给业务方的解释里这会让你的答案更有层次。4.4 做题顺序的调整建议我后来复盘如果重新考一次我的顺序会是Python数据处理题 → SQL题 → 多选题 → 单选题 → 业务分析题。原因是Python和SQL的分值占比高而且对错比较明确多选题容易纠结放在最后反而能靠直觉拿分业务分析题不用写代码但需要思路清晰放在压力较小的阶段写质量会更高。这个顺序当然因人而异但核心原则是不要在低分值的题上消耗过多精力也不要在犹豫不决的题上浪费连续时间。大脑切换“代码思维”和“业务思维”是有成本的频繁切换反而会降低效率。5. 从笔试反推蚂蚁数据岗的能力模型5.1 笔试背后在考察什么把整套题看下来蚂蚁数据岗笔试并不追求“偏题怪题”反而非常务实。SQL题就是日常工作里最常用的留存、连续活跃、去重统计Python题就是数据清洗和基础特征处理概率统计题是AB实验和数据决策的底层语言业务题是日常对接业务方时最常遇到的ROI和活动分析。这也意味着这个岗位要的不是竞赛型选手而是能实实在在坐在工位上处理业务需求的数据分析师。笔试题目其实是在模拟你入职后可能要做的任务。所以备考时与其刷大量偏算法竞赛的难题不如扎扎实实把SQL窗口函数、pandas数据清洗、业务分析框架练到肌肉记忆。从另一个角度看笔试筛选的是“基本功没有明显短板”的人。每个科目占比不算特别高但如果你有一个模块完全放弃比如完全不复习SQL那恐怕很难过线。数据岗是一个木桶效应的岗位业务理解、技术能力、统计知识缺一块都会影响后续工作。5.2 笔试和后续面试的衔接笔试通过后紧接着一般是两轮技术面试。我个人的体感是笔试中做错的题、犹豫过的知识点都很可能在面试中被追问。面试官手里大概率有你的笔试答卷他们会对感兴趣的点做深入提问。举个例子如果我笔试题留存的SQL写得不够高效面试官可能会问如果这个表的规模是几亿行你的写法还成立吗需不需要优化这种扩展性问题考察的是你对数据量级的敏感度和性能优化意识。备考时不要满足于“写对了”要多想一步“这个写法在真实生产环境里有没有问题”。业务分析题在面试里也会有延伸面试官可能会问如果业务方提出一个相反的观点你怎么说服他这时候考察的就是同理心和数据说服力了。个人经验是面试前可以整理3到5个自己做过或拆解过的商业分析案例做到能用结构化的方式讲清楚背景、分析过程、结论和落地效果。5.3 后续流程与时间节点参考蚂蚁春招的数据岗整体流程大致是网申投递 → 笔试 → 技术一面 → 技术二面 → HR面 → Offer沟通。第一批笔试后大概一周左右会收到结果通知如果通过了很快会约面节奏相当紧凑。所以笔试结束后不要彻底放松应该立即开始复盘和准备面试。特别是把笔试中暴露出的薄弱点补上同时准备自我介绍和项目经历。数据岗的面试通常会有SQL手撕环节和笔试的平台类似提前熟悉在线写SQL的环境很有帮助。6. 备考建议与资源推荐6.1 SQL刷题应该刷哪些SQL的复习我强烈推荐按知识点分模块刷而不是按题库顺序刷。优先掌握窗口函数ROW_NUMBER、RANK、DENSE_RANK、LAG/LEAD、SUM OVER、各种JOIN的区别和适用场景、日期函数DATE_SUB、DATE_ADD、DATEDIFF、DATE_FORMAT、CASE WHEN条件聚合、留存和复购的通用计算框架。这几个模块覆盖了笔试里80%以上的SQL题。刷题平台方面牛客网的SQL题库不错LeetCode的数据库模块也可以。但一定要用在线编辑器多写几遍不要只看别人的题解看和自己写出来的感觉完全不同。而且要限定时间一道题最多15分钟超过时间看题解然后隔天再独立写一遍。6.2 Python和统计学考前的重点Python部分不需要刷LeetCode算法题pandas和numpy的熟练度反而更重要。重点放在DataFrame的增删改查、分组聚合、透视表、合并、处理缺失值、字符串和时间序列的常见操作。很多人在笔试里暴露的问题不是不会而是写得太慢。要达到想到一个操作就能马上写出对应方法名的程度。统计学部分的核心考点相对固定条件概率、贝叶斯公式、随机变量的期望和方差、常见分布二项、泊松、正态、中心极限定理、假设检验的流程、p值和置信区间、AB实验的基础概念。不要求手推复杂公式但概念一定要理解得够深。特别推荐把AB实验的流程完整过一遍怎么确定样本量、如何分流、怎么分析结果、常见陷阱都有哪些。6.3 业务分析题的考试技巧业务分析题备考最有效的办法是建立自己的分析模板。模板不等于套话而是思考的骨架。无论遇到什么业务问题都可以从这几个维度切入北极星指标是什么、如何拆解指标、有哪些可能的归因方向、用哪些数据验证、最后给出什么样的行动建议。有了这套框架即使遇到不熟悉的业务场景也不至于无话可说。另外一个训练方法是平常多关注一些数据类公众号和社区里的业务复盘文章看别人是怎么分析一个活动效果或产品改版效果的。看的时候不是看个热闹而是思考如果我是分析师我会怎么拆解他的分析有哪些地方比我想得更全面这样积累下去业务分析题的角度和深度会明显优于没训练过的候选者。7. 写在最后的一点体会笔试结束那天晚上我做了个复盘发现最遗憾的不是某道题不会做而是有些明明会做但时间不够的题。回头看这种遗憾其实完全可以通过考前模拟来避免。如果你打算投递数据岗我强烈建议在正式笔试前做至少两次完整的时间模拟完全按照考试的时间限制和环境来做把时间分配练成一种本能。数据岗的笔试只是整个求职流程中的一环它不会直接决定你的全部命运但确实是一道门槛。提前把自己的基本功练扎实比研究任何“押题”和“技巧”都管用。这套经验不仅适用于蚂蚁也适用于很多互联网大厂的数据岗希望这次的详细复盘能为你明天的笔试多争取一些确定性。
返回列表