ARTICLE DETAIL

资讯详情

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

蚂蚁集团数据岗秋招笔试复盘:SQL、Python与数据库原理全解析

蚂蚁集团数据岗秋招笔试复盘:SQL、Python与数据库原理全解析 2023年蚂蚁集团秋招数据岗笔试我算是完整走了一遭。从8月初投出简历到9月中旬收到笔试通知中间隔了一个多月差点以为简历挂掉了。后来才知道蚂蚁的数据岗笔试是分批进行的早投和晚投可能不在同一批而且不同事业群的数据岗笔试内容也有差异。我参加的是蚂蚁集团数据研发方向的笔试全程在牛客网进行双机位监控时长120分钟题量不算特别大但覆盖面相当广。这篇文章我想把当时笔试的完整复盘写出来包括题型分布、每类题目的考察重点、我踩过的坑以及后来结合面经总结出来的复习方向。如果你正在准备数据岗笔试尤其是大厂的数据研发、数据分析、数据科学这类岗位这篇内容应该能帮你少走不少弯路。1. 蚂蚁数据岗笔试的整体定位与考察逻辑1.1 数据岗笔试与开发岗笔试的差异先明确一件事数据岗笔试和后端开发岗笔试考察逻辑完全不一样。后端开发岗更看重算法题AC能力两道hard题做不出来基本就凉了但数据岗的笔试更偏向“业务理解技术基本功数据处理能力”的组合考察。蚂蚁的数据岗笔试从我参加的那场来看题型主要是四类SQL题、Python编程题、机器学习/统计学选择题、算法题。其中算法题只占一小部分难度大概在LeetCode中等偏下不会出现那种需要绞尽脑汁想状态转移的难题。但SQL题和Python题占比很高而且考得非常细细到你会怀疑“这题真的只有这么简单吗”的程度。另外蚂蚁的笔试有一个特点题目数量不多但每道题的信息量很大。比如SQL题经常给出一大段业务背景描述然后要求你写一段复杂的SQL如果你不仔细读题很容易漏掉隐含条件。1.2 数据岗笔试的“通过线”怎么定关于笔试通过线网上说法很多实际上没有一个官方标准。我个人观察到的规律是面试官看笔试成绩的时候会分维度看——SQL题是否AC、Python题的代码风格是否规范、选择题的正确率以及算法题的完成度。这里有个关键点即使算法题没做出来只要SQL和Python题全对选择题正确率在70%以上就有很大概率进面试。反过来如果SQL题写得很拉胯即使算法题全AC了也可能会被筛掉。因为数据岗日常工作的核心就是SQL和数据处理面试官最看重的就是这两项基本功。我自己当时的情况是SQL题两题都AC了Python题一题AC、一题部分通过选择题对了大概八成左右算法题只做出来一道简单题。最后顺利拿到了面试通知。所以笔试的优先级排序非常清晰SQLPython选择题算法题。2. 核心题型拆解与答题思路2.1 SQL题不只是写出来还要写出性能蚂蚁笔试的SQL题通常会给两张或三张业务表表结构描述得非常详细包括字段类型、主键、索引情况然后要求你完成一个具体的查询目标。我记得当时有一道题是这样的给定用户订单表和用户注册表要求统计每个注册月份的用户的复购率。听起来不难但里面有几个隐含考点第一表之间关联需要去重。同一个用户可能有多条订单记录如果你直接JOIN会出现数据膨胀复购率算出来必错。第二时间的处理。注册月份需要用DATE_FORMAT或者DATE_TRUNC函数去截取不能用字符串直接截取否则会有类型转换问题。第三复购率的定义。题目里会说清楚是“购买次数大于等于2次的用户数/总用户数”但如果你不仔细看很容易理解成“购买次数大于等于2次的订单数/总订单数”。除了正确性蚂蚁的SQL题还会考察你对性能的理解。比如题目可能会问“你怎么优化这个查询”或者要求你在SQL中体现出对索引使用的考虑。我当时的做法是先写一版逻辑正确但可能比较慢的SQL然后在注释里补充优化思路比如“这里可以在user_id上建索引避免全表扫描”“这里可以考虑用窗口函数替代自连接”。这里给一个我总结的SQL笔试答题模板-- 先明确业务口径注释写清楚 -- 1. 去重用ROW_NUMBER()按业务主键去重 -- 2. 时间处理用DATE_FORMAT()截取月份 -- 3. 聚合先聚合再JOIN避免数据膨胀 -- 4. 性能优化能用WHERE过滤的绝不放HAVING能用临时表就别反复子查询这个模板帮我解决了很多问题因为蚂蚁的SQL题基本都是多步骤的你需要先构建中间结果再进行下一步计算如果一开始就写了一坨子查询嵌套后面很难调试。2.2 Python与数据处理手写代码的隐藏考点Python题是蚂蚁笔试的重头戏一般有两道。第一道往往是纯编程题比如实现一个函数、处理一个字符串第二道则是数据处理题考察Pandas的运用能力。我当时遇到的第一道Python题是给定一个列表要求找出列表中所有子列表的最大公约数之和。大概意思就是先对列表本身求和再对列表的长度为2的因子对求最大公约数然后把结果加起来。这道题本身不难但需要你对Python的标准库非常熟悉比如math.gcd、itertools.combinations。第二道Python题就是典型的Pandas题给定一个CSV格式的数据要求完成数据清洗、分组统计、透视表输出三个步骤。其中有几个小坑数据中存在缺失值要求用前向填充或指定值填充不能直接dropna日期列需要解析成datetime类型然后按周进行重采样分组后筛选出每个分组内数值最大的那条记录这里我犯了一个错误当时我直接用df.groupby(category).apply(lambda x: x.sort_values(score).iloc[-1])运行结果虽然正确但代码不够优雅而且在大数据集上性能会很差。后来我复盘的时候发现用df.loc[df.groupby(category)[score].idxmax()]才是更优解。所以我的建议是笔试前一定要针对Pandas的常用操作过一遍包括数据合并、缺失值处理、分组聚合、透视表、时间序列重采样。不要只停留在能跑通的层面要写出高效、可读性强的代码。面试官看代码的时候能看出来你是硬背API还是真正理解。2.3 机器学习与统计学基础选择题里的坑选择题大概有10到15道覆盖了机器学习算法原理、概率统计、线性代数、数据库原理等。我印象比较深的几道题一道是关于随机森林和梯度提升树的区别。考的是在实际业务中哪种模型对缺失值更鲁棒、哪种模型更容易过拟合、哪种模型训练速度更快。这类题不能只背结论要理解背后的原理。随机森林的每棵树是独立训练的所以可以并行GBDT是串行训练的每棵树拟合上一轮的残差所以对异常值更敏感。一道是贝叶斯公式的应用题。给出一个疾病的患病率、检测准确率要求计算“检测阳性时真正患病的概率”。这就是经典的基础比率谬误考察的就是你对贝叶斯公式的理解和计算能力。还有一道关于数据库隔离级别的题。问的是“在可重复读隔离级别下当前读和快照读的区别”。这道题让我比较意外因为纯数据岗一般不会考这么深的数据库知识。但蚂蚁有OceanBase这个自研数据库所以对数据库原理的要求比其他公司高。说到OceanBase这里要特别提一下。我在准备面试的时候刷到过“蚂蚁集团-AI平台开发专家-OceanBase面经”里面提到了对数据库内核的理解。虽然我们是数据岗不是开发专家岗但笔试中涉及数据库原理的题目比例确实比其他大厂高。所以如果你想投蚂蚁的数据岗最好把数据库的隔离级别、索引结构、事务ACID这些基础知识吃透不能只停留在会写SQL的层面。2.4 算法题与逻辑题进阶与拒人题算法题在蚂蚁数据岗笔试中一般是一道简单题加一道中等题。我遇到的简单题是“判断一个字符串是否是合法的大数加法”中等题是“在一个二维矩阵中寻找从左上角到右下角的最小路径和”。这两道题我刚好都刷过类似的所以做起来比较顺利。但我知道有些同学卡在了算法题上因为准备数据岗笔试的时候把大部分时间花在了SQL和Pandas上LeetCode才刷了不到50道。我的看法是数据岗笔试的算法题不需要像后端那样追求难题AC但训练数据结构和基础算法非常有必要。高频考点包括数组、字符串、链表、二叉树、动态规划、贪心算法。你不需要做到每道题都能在15分钟内AC但至少要知道每类题目的暴力解法和常见优化思路。逻辑题也是蚂蚁笔试的一个特色一般会出1到2道。比如“有1000瓶药水其中一瓶有毒用最少的小白鼠测出哪一瓶”或者“两个杯子容量分别为5升和3升如何量出4升水”。这类题考察的是思维灵活性没有太多技巧建议考前看一看常见的逻辑题题库纯当放松了。3. 实操环节笔试中的时间分配与答题顺序3.1 我的120分钟答题时间轴蚂蚁笔试的120分钟看起来比较充裕但如果每道题都反复纠结时间是不够用的。我当时的时间分配是这样的前15分钟快速浏览所有题目标注每道题的难易程度15-40分钟做SQL题优先保证正确性40-70分钟做Python题先写主代码最后补注释和优化70-95分钟做算法题两题都尽力AC做不出来就写暴力解95-115分钟做选择题剩下的时间全部拿到选择题上最后5分钟全面检查尤其是SQL题的字段名、大小写、分号这个时间分配有一个核心逻辑先做分值高且确定性强的题目再做分值高但确定性弱的题目最后做分值低但耗时的题目。3.2 代码书写习惯与在线评测的适配在线上笔试环境里有几个细节特别容易踩坑。第一SQL题的字段名大小写。有些平台是大小写不敏感的但蚂蚁的笔试平台据我观察是MySQL环境字段名大小写敏感度取决于数据库配置。保险起见统一使用小写下划线命名和题目给的字段名保持一致。第二Python代码的输入输出格式。笔试平台通常要求用sys.stdin读取输入print输出结果。但有些题目的输入是多行的如果你习惯在本地IDE用input()一行行读在线环境可能会因为输入格式不一致而出错。我的建议是考前用牛客网的在线编程环境模拟几次熟悉输入输出的处理方式包括sys.stdin.read()的用法。第三代码的注释和可读性。这一点容易被忽略但其实很重要。面试官看笔试记录的时候会关注你的解题思路和代码规范。如果你能写出清晰的注释比如“这一步是为了去重”“这个变量的含义是什么”会给面试官留下好印象即使代码没有完全AC。3.3 笔试环境的准备工作这里分享一些容易被忽视的实操准备提前检查网络稳定性有条件的用有线网络准备好双机位的手机支架角度要能拍到桌面和屏幕提前调试好摄像头和麦克风比如可以录一段视频测试准备好草稿纸和两支笔比你想像的更能派上用场把复习资料放在触手可及但屏幕看不到的地方方便选择题查漏补缺尽量不要用公司电脑或公共电脑避免权限限制导致无法运行环境我当时就吃亏在双机位调试上因为手机支架角度没调好监考系统提示识别不到人脸折腾了十分钟才重新开始计时。虽然笔试时间不受影响但心态确实会受到波动直接影响后面的答题状态。4. 从笔试题到面试现场的衔接4.1 面试官在笔试记录里看什么笔试结束到面试通知中间大概隔了一到两周。这段时间我不停地在回想笔试的答题情况担心自己哪里出了问题。后来在面试中我直接问了面试官“笔试环节主要看什么呢”面试官的回答让我很意外。他说“笔试成绩只是一个参考我更看重的是你在笔试中暴露出来的思考过程。比如SQL题如果你一行一行写得很有条理注释写得很清楚我会觉得你的开发习惯很好如果你虽然AC了但代码写得很乱我会担心你后续合作时的代码质量。”这个反馈非常关键。它说明蚂蚁的笔试不是一个简单的“过了就过了”的关卡而是面试官了解你工作习惯的窗口。所以笔试时一定要把自己当成在写生产代码而不是应付考试。4.2 蚂蚁数据岗面试的高频追问方向结合我自己的面试经历和网上相关的面经蚂蚁数据岗的面试题目大概集中在以下几个方向第一个方向是项目深挖。面试官一定会让你讲一个你最熟悉的项目然后从项目细节出发不断追问。“你当时为什么选择这个方案”“数据量级是多少”“如果数据量扩大100倍你怎么处理”“这个指标的口径是怎么定义的”。这些问题的本质是考察你有没有真正理解自己的项目还是只是为了简历好看而硬凑。第二个方向是数据仓库与建模理论。蚂蚁对数据建模的要求很高面试官会考察维度建模的基本理论、拉链表设计、缓慢变化维的处理方式等。虽然笔试不一定直接考这些但面试时会问到。第三个方向是大数据技术栈。问Hadoop、Spark、Flink的原理是家常便饭。你不需要精通每一个框架但至少要知道MapReduce的运行流程、Spark RDD和DataFrame的区别、Flink的精确一次语义是怎么做到的。第四个方向是数据库底层原理。这个前面提到过蚂蚁有OceanBase这个自研数据库所以面试官对数据库原理这块会比较看重。我当时被问到“InnoDB和MyISAM的区别”“联合索引的最左前缀原则”“为什么用B树不用红黑树”。如果你看到岗位描述里写了“熟悉OceanBase优先”那么数据库底层知识一定要多准备。4.3 数据岗位面试中的“软技能”考察除了技术面数据岗面试还有一个容易被忽视的点你如何与业务方沟通。面试官会模拟一个场景比如“如果业务方需要你开发一个报表但数据口径和你的理解不一致你会怎么处理”。这种问题没有标准答案但回答的时候最好按照“确认需求-拆解指标-对齐口径-反馈确认”的顺序展开。不要直接说“我会跟业务方确认清楚”那太笼统了。你需要讲出具体的沟通动作比如“我会先整理一个数据字典把每个指标的计算逻辑列出来用业务方熟悉的语言描述避免用技术术语”。5. 常见问题与笔试复盘方法5.1 笔试未通过的常见原因分析很多同学笔试没通过其实不是能力不够而是准备方向偏了。我总结了几个典型原因你可以对照自查第一过度重视算法题忽视了SQL和数据处理。有些同学花两个月刷LeetCode刷了三百道题但Pandas只在考试前看了两天。结果算法题全AC了SQL题写得一塌糊涂。这种“偏科”在数据岗笔试中是非常致命的。第二不熟悉在线笔试环境。平时在本地IDE写代码有自动补全、有随时运行调试的环境一旦到了牛客网或赛码网发现连sys.stdin都不会用调半天输入输出格式。这就是环境和工具的适应性问题考前多模拟几套题就能解决。第三选择题全靠猜。有些同学准备笔试的时候只看SQL和编程完全忽略了机器学习和统计基础的选择题。但选择题的正确率也是面试官关注的一个指标如果你选择题错得太多会让人觉得你基础不扎实。第四没有复盘习惯。笔试结束后就不再看自己的代码也不去查正确答案。这样你做了一百套题也只是重复劳动提升非常有限。正确的做法是每套题做完后把错题和写得不好的地方整理到一个文档里隔几天重做一遍直到完全熟练。5.2 数据岗笔试的高效刷题路径如果你从现在开始准备蚂蚁数据岗笔试我给你一个可以照抄的复习路径第一阶段3-5天SQL训练。在LeetCode数据库题库里刷掉前50道高频题尤其是中等难度以上的题练习窗口函数、CASE WHEN、多表关联、子查询嵌套。第二阶段2-3天Python与Pandas专项。把Pandas官方文档里的“10 minutes to pandas”过一遍然后用Kaggle的Titanic或House Prices数据集做完整的数据处理练习。第三阶段2天机器学习与统计基础。复习决策树、随机森林、GBDT、逻辑回归的公式和优缺点另外专项补一下贝叶斯定理、置信区间、假设检验、方差分析。第四阶段1-2天数据库原理。重点复习索引、事务、隔离级别、B树、存储引擎顺手看一遍OceanBase的架构设计对面试有加分作用。第五阶段1天全真模拟。找两套大厂数据岗笔试真题严格按照120分钟的时间限制完成模拟过程中尽量模拟真实环境不使用任何外部资料。这样一周左右的复习规划基本能覆盖蚂蚁数据岗笔试的要求。如果你是临时抱佛脚只有两三天时间那就优先刷SQL和Pandas这两块的分值占比最高性价比最大。5.3 笔试、面试的独家避坑技巧最后分享几个我自己总结的独家技巧SQL题不管简单还是难一定要先在草稿纸上画出表结构和关联关系再动手写很多人就是跳过这一步直接写代码结果漏了关联条件Python题如果时间足够一定要print中间结果检查一下尤其是在写数据处理题时数据的大小、类型、缺失值情况会直接影响你的代码逻辑选择题遇到不会的不要空着根据选项的分布规律猜一个猜对率也有25%笔试交卷前一定要检查一遍SQL题的末尾有没有写分号很多平台因为缺了分号判语法错误复习时准备的资料不要收藏了就完事要定期把那些文章翻出来把有价值的内容摘要记到自己的笔记里并用自己的话复述一遍真正变成自己的知识还有一个心态方面的建议数据岗笔试内容多、范围广你永远不可能完全准备好。遇到不会的题很正常关键是把你会的题目拿满分。我当时有一道机器学习的选择题完全没把握但我没有在那道题上纠结很久而是把时间省下来反复检查SQL题因为一分一分的累计比一题一题的死磕更划算。考完蚂蚁的笔试之后我对数据岗的认知深了很多。坦白说现在数据岗位的要求已经不只是“SQL写得溜、Python调包熟”而是对数据处理全链路、数据库底层原理、业务理解能力都有综合要求。尤其是像蚂蚁这样有自研数据库和AI平台的公司对数据岗的期待已经远远超出了“取数工具人”的范畴。如果你正在准备大厂数据岗的笔试我的建议很简单把SQL练扎实把Pandas用熟把数据库原理吃透把项目经历复盘到位。笔试只是第一道门槛但它是你向面试官展示专业素养的第一个窗口值得你用心打磨。
返回列表