
2024年春招我报名了蚂蚁集团的数据岗赶上了第一批笔试。说实话在点开笔试链接之前我一直以为数据岗笔试就考几道SQL、几道概率题结果真正坐进线上考试系统才发现它更像一场对数据基本功、工程习惯和业务敏感度的综合摸底。这篇文章不打算评价题目的难易而是把整场笔试从形式、题型、答题思路到复盘细节都拆开来讲给后面准备蚂蚁数据岗数据分析、数据开发、数据挖掘方向都通用的同学做一个真实参考。如果你准备参加的是2025年及以后的春招这里的考察逻辑大概率还会延续尤其是“SQLPython统计概率业务分析”这套四段式组合基本是互联网大厂数据岗笔试的标配只是各家在比例和深度上略有差异。看完这篇文章你至少能知道笔试的每一类题在考察什么、答题时容易死在哪个环节、以及如何用一套稳定的节奏把会做的题全部拿到分。1. 蚂蚁数据岗笔试到底在筛什么样的人1.1 笔试整体构成一场两小时的极限挑战先说第一手信息。我参加的第一批数据岗笔试整体时长是120分钟题量大概在20道左右涵盖单选、多选、SQL编程题、Python编程题、概率统计题和业务分析题。这里要提醒一点不同批次、不同岗位方向比如数据分析师、数据开发工程师、数据挖掘工程师的题目结构会有差异有的批次SQL占大头有的批次会加考机器学习基础但核心底层逻辑一致——考察你能不能像一名合格的数据从业者一样思考问题。这120分钟怎么分配我后面专门写一节这里先给结论时间非常紧张如果你拿到题就开始逐题死磕大概率会做不完。正确的策略是先把所有题目快速扫一遍标注出“必拿分题”“可争取题”和“果断放弃题”然后按分值密度倒序作答。这套策略在真实笔试里救了我因为数学和业务题虽然分值高但思考时间不可控而SQL题往往会给你一个明确的“得分支点”。为什么蚂蚁要把笔试设计成这个结构我个人理解是数据岗的工作内容本身就是“多条线并行”——既要从数据库取数又要做数据清洗和特征加工还要能解释数据背后的业务含义。笔试本质上是工作场景的压缩模拟你不可能在平时工作时只写SQL、不碰业务所以笔试也不会只考单一技能。1.2 从考察逻辑反推岗位画像我备考时做过一个动作把蚂蚁数据岗笔试的题目要点和岗位JD逐条对照了一下发现非常有意思笔试每一个模块都能在真实工作职责里找到对应。SQL题对应的是日常取数和报表开发你至少得能写出带窗口函数的中等复杂度查询Python题对应用户行为日志清洗、数据特征适配和简单建模pandas和基础算法能力是底线统计概率题对应的是AB实验分析和风控模型的评估面试官需要确认你知道“显著”是什么意思而不是只会跑代码业务分析题对应的是指标异动归因和专题分析这部分最不看重技巧而看重你用数据讲故事的结构化能力。所以别把笔试只当成一道“关卡”它更像一面镜子照出你离一个合格数据岗候选人还差多少。如果你现在还在校建议按这个四维能力模型去补课SQL刷题、pandas实战、统计学原理、业务分析框架四个方向对齐了笔试通过率会明显提高。这里插入一个背景知识蚂蚁集团在技术栈上深度自研尤其是数据库层面有OceanBase这样的分布式数据库内部数据分析场景也大量使用数据仓库和数据分析平台。所以笔试题里很少出现甲骨文、SQL Server这类偏传统企业的工具考察重点集中在标准SQL语法和数据处理的通用思维上这一点和很多互联网公司是一致的。2. SQL题数据岗笔试的“送分题”与“送命题”2.1 三大高频考点窗口函数、行列转换、连续问题在我遇到的这批题目里SQL部分大概占了35%-40%的分值是权重最高的模块也是最容易在短时间内拿分的地方。蚂蚁的数据岗笔试SQL题很少让你写那种几十行的大复杂逻辑反而偏好“小场景、多考点”的设计一张业务表三五个字段要你完成统计需求。高频考点第一个是窗口函数。无论是求排名、求累计值、还是取分组内TopN窗口函数几乎是绕不开的。我强烈建议你把row_number()、rank()、dense_rank()、lag()、lead()、sum() over(partition by ... order by ...)这几类彻底搞懂不仅要会写还要知道它们之间的区别。比如row_number()不考虑并列rank()和dense_rank()都考虑并列但跳号逻辑不同笔试里经常用“取每个用户最近一笔订单”这样的题来区分你是否真的理解。第二个高频考点是行列转换。蚂蚁的业务场景里很多数据是事件流水表分析时常常需要把行的维度转成列的维度或者反过来。经典解法是case when配合聚合函数也可以用union all把列变成行。笔试时我遇到过一道题要统计每个用户在周一至周日分别产生了多少笔支付正常思路就是先做维度展开再进行条件聚合。第三个高频考点是“连续问题”比如“连续登录3天以上的用户有哪些”。这类题的核心技巧是用date_sub(dt, row_number() over(partition by user_id order by dt))来构造连续区间分组标识。我第一次学这个技巧时觉得秒后来发现面试官和笔试出题人都特别偏爱因为它考察的不是死记硬背而是“你能否把一个看似复杂的问题拆解成可计算的中间字段”的能力。2.2 现场做题容易踩的坑SQL题看着不难但在线上笔试环境里翻车概率其实很高。我总结了几个实际踩过或看别人踩过的坑。第一个坑是语法环境差异。在线笔试系统通常用的是类MySQL环境但有的平台不支持某些高级语法比如WITH子句或PIVOT。我在考试时习惯先写通用性更强的写法也就是窗口函数加子查询的组合因为它在任何SQL方言里都能跑。如果你不确定平台支持什么就尽量别炫技用最朴素、最稳的写法。第二个坑是字段类型和空值。实际线上的数据表和题目描述往往有微妙差异比如dt字段到底是字符串还是日期amount字段有没有NULL这些都可能影响结果。我建议你写SQL时尽量用where条件把边界明确化比如dt 2024-01-01避免依赖隐式类型转换。遇到聚合函数时要记得count(字段)和count(distinct 字段)会自动跳过NULL但sum(字段)如果字段里有NULL结果会和你预期不同。第三个坑是不读表结构。在线笔试通常会给几张表的字段说明但很多人为了省时间直接跳过结果把pay_time当成dt用导致join条件写错。我在笔试时养成了一个习惯花30秒把所有表的字段列一遍在草稿纸上画一下表之间的关系再开始写SQL。这30秒的投入在后面的调错中能省下5分钟。2.3 一道蚂蚁风格SQL真题模拟拆解下面我模拟一道非常贴近蚂蚁数据岗笔试风格的SQL题题目背景是支付业务流水表。假设有一张表t_pay_log字段包括user_id、pay_amount、pay_time格式yyyy-MM-dd HH:mm:ss。要统计2024年1月1日至2024年1月7日期间每日新用户的次日留存率。所谓“新用户”指该用户在这张表里第一次出现支付行为留存指第二天又产生了支付行为。先拆解第一步找出每个用户的最小支付日期作为“新增日期”第二步把新增用户表和支付流水表按日期关联关联条件是同一用户且第二天的日期第三步按天聚合计算新增人数和留存人数。SQL可以写成这样select a.first_date as dt, count(distinct a.user_id) as new_cnt, count(distinct b.user_id) as retain_cnt, round(count(distinct b.user_id) * 1.0 / nullif(count(distinct a.user_id), 0), 4) as retain_rate from ( select user_id, min(date(pay_time)) as first_date from t_pay_log where date(pay_time) between 2024-01-01 and 2024-01-07 group by user_id ) a left join t_pay_log b on a.user_id b.user_id and date(b.pay_time) date_add(a.first_date, interval 1 day) group by a.first_date order by a.first_date;这里有几个值得注意的设计点用min(date(pay_time))来定义新用户日期天然去掉了同一天内的重复支付用left join而不是inner join确保新增用户即使没有第二天行为也会被保留nullif(count(distinct a.user_id), 0)防止除零报错。这些细节在笔试里特别加分因为阅卷人一眼就能看出你是否有生产环境经验。我写这道题时还留了一个进阶考点如果用户一天内多次支付取数时是否需要先做group by user_id, date(pay_time)去重答案是需要的不然次日留存率会被重复支付行为稀释。笔试中出题人不会把这些都写清楚但你的代码里体现出这种意识就会比别人高出一个档次。3. Python与数据处理从pandas清洗到算法题的过渡3.1 笔试里的Python到底考什么Python部分是让很多人头疼的模块因为它的范围太宽。从我参加的这批笔试来看Python考察分成两种形态一种是给一段代码让你判断输出、分析时间复杂度另一种是现场写函数完成数据处理任务。前者更偏数据结构基础后者更偏实际工程能力。蚂蚁作为技术型公司对Python的要求不会停留在“会写for循环”这个级别而是希望你熟练使用pandas处理表格数据。这里特别想提一下热搜词里频繁出现的“pandas数据清洗和处理”这确实是数据岗笔试的高频场景。在线笔试里通常会有类似这样的题读取一个含有缺失值、重复值、异常值的CSV文件要求你完成数据清洗再按某个维度聚合统计。如果没有平时积累现场很容易卡在“到底应该用dropna()还是fillna()”这种细枝末节上。我自己的经验是备考时把pandas的几个核心API反复练熟包括read_csv()、drop_duplicates()、fillna()、dropna()、merge()、groupby()、apply()、rename()、astype()。这些足够覆盖笔试里80%的数据处理题。至于apply和lambda组合的写法虽然效率不是最高但在笔试环境下胜在直观、不容易出错。3.2 数据结构与算法的“够用就行”数据岗笔试还会带一点数据结构和算法的内容但整体难度比后端开发岗低一个阶梯。我在热搜词里看到“数据结构图”出现频率很高这其实也反映了大家的焦虑点。真实笔试中图的深度优先遍历、广度优先遍历会以选择题形式出现比如给一个邻接矩阵让你判断遍历顺序不太会要求你手写完整的图算法。对你来说比较稳妥的复习策略是掌握三块数组和字符串操作、哈希表、递归与动态规划的基础题。链表和二叉树会以概念题出现比如判断时间复杂度和空间复杂度。我建议你把LeetCode上简单和中等难度的题刷到80题左右重点是数组、哈希表、双指针、二分查找这一类的数据清洗场景题没必要去啃复杂的图论。为什么蚂蚁数据岗笔试不把算法考到后端岗那么难我的理解是数据岗的核心价值在于“把数据变成洞察”而不是“把算法做到最极致”所以笔试重点考察的是你用代码处理数据的熟练程度而不是算法竞赛能力。但这不代表可以完全放弃算法因为某些概率题、业务题最终会落到一个递归或DP的解法上有基础会让你更快联想到思路。3.3 一道pandas数据清洗题的实操示例我尽量还原一道考场上见过的pandas风格题目给定一个交易明细CSV包含order_id、user_id、channel、gmv、pay_time五个字段。要求清洗数据后按channel统计每个渠道的订单总金额和平均订单金额并输出按总金额降序的前三名渠道。先看数据清洗的关键步骤大概率有重复order_id需要去重gmv可能含有NULL或非数值字符需要先转成数值再处理pay_time可能需要解析成datetime类型用于后续筛选。下面给出完整代码import pandas as pd df pd.read_csv(trade_log.csv) # 去重保留第一条记录 df df.drop_duplicates(subset[order_id]) # 清洗GMV字段先转字符串再转数值非法值置为NaN df[gmv] pd.to_numeric(df[gmv], errorscoerce) # 去掉GMV缺失或为负值的异常记录 df df[(df[gmv].notna()) (df[gmv] 0)] # 解析时间 df[pay_time] pd.to_datetime(df[pay_time]) # 按渠道分组统计 result df.groupby(channel).agg( order_cnt(order_id, count), total_gmv(gmv, sum), avg_gmv(gmv, mean) ).reset_index() result result.sort_values(total_gmv, ascendingFalse).head(3) print(result)这段代码看起来简单但每一个步骤都对应着数据岗日常工作的血泪代价。drop_duplicates不去重后面统计的订单数全部虚高errorscoerce不好好写遇到脏数据整个程序就崩了最后排序不设置ascendingFalse排名就反了。笔试时如果你能把这些细节都照顾到代码不仅能跑还能体现专业度。我建议你在准备笔试时不要只在IDE里练习多试着在线上笔试平台的模拟环境里做几道题。因为线上平台对打印输出、函数命名、缩进都有严格限制而且没有本地IDE的语法高亮很容易出现低级错误。提前适应这类环境能减少临场的紧张感。4. 统计概率与业务分析拉开差距的隐形分水岭4.1 概率统计题贝叶斯、期望、假设检验是高频如果你SQL和Python都准备得不错笔试通过率大概有六成但要想稳过还得看统计概率和业务题。这两个模块在分值上可能只占三成却是很多候选人最陌生的领域也是拉开差距的地方。蚂蚁的业务高度依赖数据决策所以概率统计题几乎是必考的。我从真题回忆里整理了三个最常出现的方向贝叶斯公式、期望计算、假设检验。贝叶斯的典型场景是风控比如“坏用户占比1%模型预测为坏人的召回率是90%误报率是5%求模型预测为坏用户时真实坏用户的概率”这类题本质就是套公式但你需要能把“召回率”和“误报率”和条件概率符号对应上。计算过程并不复杂难的是理解符号。期望计算题通常和业务补贴相关比如“给用户发两种面额的优惠券分别对应不同转化率求单个用户的期望收益”。这类题考察你能否把一个业务决策数学化其实也是数据岗日常做ROI分析的缩影。假设检验一般会考AB实验的显著性比如“对照组转化率2%实验组转化率2.3%样本量各10000是否显著”你需要会用卡方检验或z检验的基本逻辑。4.2 业务场景题不写代码全靠框架业务分析题是整张卷子里最“开放”的题型。题目通常很短比如“某支付平台的日活跃用户数连续一周下降请分析可能的原因并给出排查思路”。你不需要写代码但要把分析思路写得有条理、有重点、可落地。很多人拿到这种题容易慌因为不知道标准答案是什么。实际上这类题没有唯一答案阅卷人看的是你的思考框架是否完整。我的建议是记住一个“三拆一闭合”的框架先拆指标再拆维度最后给验证方案。以“日活下降”为例先把日活拆成“新增用户老用户回流老用户留存”看是哪个环节崩了然后做维度下钻按渠道、地区、设备、版本、时间切片去定位下降是否集中最后提出可执行的归因方案比如对比实验、竞品动态分析、数据埋点检查。这套框架能覆盖大部分指标异动类业务题。蚂蚁的业务场景有很多支付、信贷、保险和财富管理相关的背景如果你的业务题能自然融入这些场景比如提到“风险策略调整之后需要做分流观察”、“高频交易用户对延迟更敏感”会显得你对公司业务有了解。但注意不要硬套闭卷答题时保持逻辑自洽最重要。4.3 用“结构化表达”在主观题里拿分主观题拿分的关键不在于你写了多少字而在于阅卷人能否在30秒内看清你的答题结构。我见过很多同学写业务题时把整段话揉在一起虽然内容不差但阅卷人很难快速抓取要点反而觉得思路混乱。比较好的做法是“总-分-总”先一句话给结论然后分点列原因最后总结优先级。具体操作上分点尽量控制在3到5点以内每点先用一个小标题概括再用一两句话解释。比如写“支付成功率的下降可能受支付渠道故障影响”你可以写成“渠道稳定性本周某主流渠道出现多次超时导致回调失败率上升需要先检查渠道运维监控”。这样的表达让阅卷人一眼看到你的思考脉络。我个人还有一个习惯把所有分析都落到“下一步动作”上。业务题问的是“怎么分析”但数据分析师真正的价值是“分析完以后做什么”。如果你能在每个原因后面给出对应的动作建议比如“如果确认是渠道问题应第一时间联系运维并启动备份通道”这道题基本就稳了。5. 时间分配、环境准备与常见问题实录5.1 笔试全流程时间分配建议笔试最难的不是题目本身而是时间管理。以我参加的120分钟、题量20题左右为例我建议按下面的节奏分配前5分钟全局扫题标注题型和预估难度SQL模块用35分钟先做会做的卡壳超过5分钟就跳过Python与算法用30分钟数据结构选择题快速过编程题重点保证能跑通统计概率用20分钟会做的套公式不会的先写关键步骤业务分析用20分钟框架先行内容补充最后留出10分钟检查。如果某道题卡住超过5分钟果断跳过不要恋战。我在前面提到过在线笔试通常是按通过用例的比例给分哪怕你只写出一半逻辑也可能拿到一部分分数。所以“空着”是最大的浪费。还记得我在SQL部分讲的“先把表结构看清楚”吗这个习惯在全局扫题阶段就可以做提前在草稿纸上画好各表的关系后面做题会快很多。笔试还有一个容易忽略的环节案例中会提供模拟数据有些题目可以自己手动造一条小数据来验证程序逻辑。我在做Python编程题时遇到不确定的地方就用print输出中间结果线上环境虽然麻烦一点但能即时发现问题远比写完就交要好。5.2 在线笔试环境注意事项在线笔试的系统五花八门有的平台在浏览器里运行有的需要下载客户端。我建议考试前一天做三件事第一找一个网络稳定的地方最好有有线网络备选第二提前打开笔试链接测试摄像头、麦克风和浏览器兼容性第三关闭所有可能弹窗的软件比如即时通讯工具和邮件客户端防止切屏被记录。很多平台会监测切屏一旦你从考试页面切到其他应用超过一定次数就会被记为作弊。我在笔试时全程没有离开浏览器连草稿纸都是用实体纸写的。如果你平时习惯在本地IDE里写代码再粘贴建议提前在模拟环境里练习“直接在线编辑”因为有些平台不允许粘贴外部代码或者粘贴时格式会乱。说到底在线笔试比拼的不只是知识储备还有适应能力。平台加载慢、编辑器不顺手、打字延迟这些意外都会出现别让环境影响心态。我给自己定的原则是环境再难也要把会做的题答完把能写的过程写全。5.3 真实踩坑问答速查表最后把这批笔试中可能遇到的高频问题和排查方案整理成一张速查表方便你考前过一遍常见问题典型原因解决办法SQL运行超时或报错表数据量大join条件未走索引先用子查询缩小范围再关联聚合结果窗口函数结果与预期不符over子句中partition和order顺序写反手动造两条数据验证逻辑字段名区分大小写导致报错平台对字段名大小写敏感从表结构说明里复制字段名不手打Python读不到文件平台上文件路径和本地不一致优先用平台指定的路径常量不做硬编码概率题公式对但结果错条件概率的分子分母写反先写“事件A和事件B”再套条件概率定义业务题写太多但没重点缺少结构化分层用“结论-分点-落地动作”三段式重写多选题漏选错选选项存在绝对化表述遇到“一定、必须”等词时重点复核临近交卷还没检查时间分配不合理按5.1的节奏强制留出10分钟检查期除了这张表我再分享一个独家经验考后一定要趁记忆新鲜写复盘笔记。我当时把每道题的题型、卡点、正确解法都记录下来几天后复盘时发现很多题目其实是同一类考点换了个业务包装。这种“归到本质”的复习方法远比盲目刷题更高效而且为后面的面试积累了很好的素材。另一个心得是不要把笔试当成终点。数据岗的笔试虽然独立评分但面试官在后续面试中能看到你的笔试答卷。如果你的业务题里展现出对支付场景、用户分层、异动归因的思考这些都会成为面试中主动问你的亮点。所以笔试时写的每一个字都值得认真对待。