ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

蚂蚁工程数据岗笔试复盘:SQL与大数据组件考点全解析

蚂蚁工程数据岗笔试复盘:SQL与大数据组件考点全解析 2024年秋招我投了蚂蚁集团的工程数据岗。本来以为和大多数互联网公司一样考几道算法题意思一下就行结果笔试做完我才发现这个岗位的考察方向比我想象中要“数据”得多算法题只是开胃菜后面跟着SQL、大数据组件原理、甚至还有场景设计题整体强度和业务贴合度都很高。这篇文章我把笔试当天的题型分布、考点逻辑、以及我复习时踩过的坑整理了一下给后面想冲数据工程方向的同学做个参考。这篇内容适合三类人看一是正在准备大厂数据岗秋招的应届生二是转行做数据开发想补基础的同学三是对蚂蚁技术栈感兴趣、想了解工程数据岗到底考什么的从业者。我会先复盘笔试的整体流程和题型结构再把核心考点逐个拆开讲最后给出备考时间线和避坑建议。全程干货没有废话。1. 笔试整体流程与形式复盘1.1 投递时间线与笔试邀约蚂蚁的秋招启动时间一般在8月上旬我是在官网投递的工程数据岗岗位归属偏向数据平台建设、数据链路开发、数据资产治理这类方向。投递之后大概一周内收到了在线测评链接测评通过后隔了几天才收到笔试通知整体节奏不算紧但也别指望有太长的准备缓冲期。笔试通知一般会写明时间窗口和考试时长。我当时那场是晚上7点到9点共120分钟需要提前15分钟进入系统调试环境。这里提醒一下笔试系统对浏览器版本有要求最好提前用Chrome或者Edge打开官方模拟环境试一下摄像头和麦克风我身边真有同学因为摄像头权限没开进考场折腾了五分钟。1.2 笔试环境与题型结构蚂蚁的笔试系统用的是第三方在线评测平台支持多种题型混排。工程数据岗这套卷子的结构大致是这样的题型题量分值占比说明单选题15题约30%覆盖数据结构、Linux、网络、数据库基础多选题5题约10%大数据组件原理、分布式系统特性编程题2题约30%核心算法大数据场景模拟SQL题2题约20%数据查询与统计贴近数仓业务简答/设计题1题约10%数据链路设计或数据倾斜排查思路单选题、多选题都是客观题做起来快但坑也不少后面我会专门说。编程题需要在线编译提交支持Java、C、Python、Go这些主流语言。SQL题是在单独的编辑器里写的不用提交运行但必须写出完整可执行的SQL逻辑。1.3 时间分配策略120分钟做25道题看起来时间够用实际上很容易翻车。我当时的分配方案是客观题控制在40分钟内编程题每道25分钟SQL题每道15分钟剩下一点时间留给简答题和整体检查。这里提醒一个关键点多人多选和单选一旦提交就不能返回修改。我当时先做编程题再做客观题结果多选题有几道拿不准最后只能硬着头皮盲猜心理压力会比较大。建议按顺序做遇到卡壳的题先标记跳过千万别在一道题上死磕尤其是单选题不值得。2. 工程数据岗笔试核心考点拆解2.1 数据结构和算法题不只是LeetCode工程数据岗笔试里的算法题和纯后端岗不太一样。纯后端可能喜欢考链表、二叉树、动态规划数据岗则更关注排序、TopK、海量数据去重、滑动窗口这类和数据处理强相关的内容。我当时遇到的两道编程题一道是TopK变体一道是日志时间戳聚合统计都是能直接联想到大数据处理场景的题目。准备阶段我建议按这个优先级刷题排序与堆、哈希表、前缀和、滑动窗口、二分查找、链表基础。LeetCode刷Hot 100里这些标签下的题就够了不需要啃难题。但有一点必须注意笔试环境不支持本地IDE调试代码得在网页里直接写完提交所以平时就要养成手写代码的习惯别依赖自动补全。2.2 SQL与数据仓库必拿分项SQL题在工程数据岗笔试里属于送分题但这种“送分”是相对的——如果你不懂数仓的分层模型和常用函数很容易写出逻辑正确但效率很差的查询。我印象最深的一道题是“统计每个用户在近30天的连续活跃天数”这题本质是连续性问题需要用到窗口函数LAG或者ROW_NUMBER配合日期差值而不是简单的GROUP BY。复习SQL时这几个知识点务必吃透窗口函数ROW_NUMBER、RANK、DENSE_RANK、LAG、LEAD、SUM OVER、日期函数DATE_FORMAT、DATEDIFF、DATE_SUB、多表关联时NULL的处理、以及去重和聚合的组合使用。蚂蚁的业务场景里用户行为分析、交易流水统计都是高频场景所以SQL题基本不会离开这些背景。2.3 大数据组件原理Hadoop/Spark/Flink高频考点客观题里大数据组件的比例很高这里可没有“背八股”这么简单出题人会换着花样考察原理理解。比如MapReduce的Shuffle阶段发生了什么、Spark的宽窄依赖怎么区分、Flink的Checkpoint机制如何保证Exactly-Once这些都必须能用自己的话讲清楚不能只记结论。我整理了一个高频考点清单HDFS读写流程和副本放置策略MapReduce Shuffle的排序、分区、合并过程Spark RDD的血缘关系和容错机制Spark任务提交流程中Driver、Executor的职责划分Flink时间语义Event Time / Processing Time与WatermarkKafka的消费者组和分区分配策略这些考点内容多、体系大建议不要靠刷题背而是找一段完整的原理教程系统地过一遍做到“知道为什么这么设计”而不是“知道答案是什么”。2.4 数据工程场景题业务理解力是分水岭工程数据岗的简答题一般是场景题比如“某业务线的数据任务在凌晨出现延迟你怎么排查”“你如何设计一个实时数仓链路”。这种题没有唯一答案考察的是你有没有真正做过数据工程或者至少有没有完整的数据处理思维。我当时遇到的是一道数据倾斜排查题题目给了一张表结构和一个MapReduce作业的表现让我分析可能的原因并提出优化方案。这类题的关键是分维度回答问题数据分布层面、SQL写法层面、资源参数层面、业务逻辑层面能想到的维度越多越有条理得分越高。3. 高频真题回忆与解题思路3.1 算法题求TopK的变体第一道编程题大概是这样的给定一个整数数组和一个整数K要求返回出现频率最高的K个数字并按频率从高到低排序频率相同的按数字大小降序排列。这题乍一看就是LeetCode 347的变体但加了排序规则之后直接用优先队列就能解决注意比较器的写法即可。我给的解法是先用HashMap统计每个数字出现的次数再用大小为K的小顶堆维护高频元素最后依次弹出堆顶并放入结果数组。这里有一个细节值得注意比较器里要先按频率降序再按数字降序Java里可以用(a, b) - freqA ! freqB ? freqB - freqA : b - aPython里可以用sorted(d.items(), keylambda x: (-x[1], -x[0]))很直观。笔试时这种题不会考动态规划那种绕弯思路重点考察的是你能否在10到15分钟内写出正确且无Bug的代码。平时练习时最好计时因为考场上时间压力下思路卡壳很致命。3.2 SQL题连续登录与用户留存第二道SQL题是典型的用户活跃分析有一张用户登录日志表login_log包含字段user_id、login_date要求统计2024年9月每个用户的最长连续登录天数。这类题的标准解法是用窗口函数。先对每个用户按login_date去重然后用ROW_NUMBER()按日期排序生成序号接下来用login_date减去序号对应的天数得到一个“分组标记”相同标记的日期属于同一个连续区间最后再按用户和分组标记聚合求天数最大值。WITH t1 AS ( SELECT user_id, login_date, ROW_NUMBER() OVER (PARTITION BY user_id ORDER BY login_date) AS rn FROM login_log WHERE login_date BETWEEN 2024-09-01 AND 2024-09-30 GROUP BY user_id, login_date ), t2 AS ( SELECT user_id, login_date, DATE_SUB(login_date, INTERVAL rn DAY) AS grp FROM t1 ) SELECT user_id, MAX(day_cnt) AS max_consecutive_days FROM ( SELECT user_id, grp, COUNT(*) AS day_cnt FROM t2 GROUP BY user_id, grp ) t3 GROUP BY user_id;这个解法平时用得非常多建议彻底理解而不是死记硬背。面试时也经常会被问到类似的“用户连续活跃”“连续签到”问题写熟这道题能省下很多时间。3.3 场景题数据倾斜排查思路简答题给了一个场景一张订单表和一个商品维度表做关联按商品类目统计销售额运行到Reduce阶段时大部分Task很快结束但有几个Task卡了很久明显就是数据倾斜。这种题首先要明确倾斜的原因是什么。常见的几个原因关联键为空的记录被分到同一个Reduce、某个类目订单量过大、小表与大表关联时光放大表。然后针对原因给出解法过滤空值并单独处理、给热点Key加随机前缀打散、改成Broadcast Join或者Map Join。答题时还要带上排查方法比如通过Spark UI查看Stage的Task耗时分布通过日志找到慢Task处理的数据量通过SQL执行计划分析是否出现数据膨胀。这样的答案才能体现出你真的在项目里处理过数据倾斜而不是只会背结论。3.4 客观题高频坑点分布式一致性基础客观题里有一类题考察分布式一致性我印象很深的是关于“CAP理论中分区容错性”的题目。很多人会把CAP理解成“三选二”但更准确的说法是在网络分区发生时必须在一致性和可用性之间做取舍而在没有分区时两者可以同时满足。这类基础概念考得很细复习时建议把CAP、BASE、两阶段提交、三阶段提交、Paxos、Raft这些术语的原理和应用场景整理成自己的笔记不要只看标题。笔试题目有时候会故意把概念交叉出题比如“Raft中Leader选举需要几个阶段”“两阶段提交的阻塞问题在哪”这些细节必须掌握牢靠。4. 备考资料与系统复习路线4.1 复习优先级建议工程数据岗笔试准备不建议平均用力我按投入产出比排个序SQL和编程题优先练这是硬通货大数据组件原理排第二客观题占比高且容易突击数据结构和算法基础排第三但刷题量要够最后是场景设计题靠平时项目积累和复盘。如果时间紧张比如笔试通知只有三天那至少要把SQL窗口函数练熟、把TopK和排序相关算法过一遍、把Spark和Flink的原理框架过一遍再背几个数据倾斜的解决模板。这样虽然进不了高分档但过线应该问题不大。4.2 推荐资料和练习方法SQL练习LeetCode数据库题库50题覆盖常用的窗口函数、聚合、连接、子查询足够应对笔试。算法练习LeetCode Hot 100重点做数组、哈希表、堆、滑动窗口这些标签下的题。大数据原理找一本体系完整的入门书或一套视频课系统看一遍重点理解MapReduce、Spark、Flink的架构设计。场景设计去搜索“数据倾斜”“实时数仓架构”“离线链路优化”这类关键词找到3到5个真实案例自己尝试写复盘文章。有一个特别有效的练习方式拿到一个场景题之后不要只看答案而是先自言自语把思路讲一遍。能流畅讲出“现象、原因、排查步骤、解决方案、优化效果”这类题基本就过关了。4.3 简历匹配度的隐藏加分项笔试虽然看分数但简历里出现的数据项目也会影响面试官后续聊天的偏好。如果你的简历写过“基于Flink的实时ETL链路”或者“Spark SQL性能优化”笔试里的场景题大概率就能踩中你熟悉的内容。我当时在简历里写了一个“数据质量监控平台”的项目正好笔试简答题涉及到数据任务延迟排查我就把项目里用到的依赖检查、基线预警、任务重跑机制都写进了答案。虽然不知道阅卷标准但至少能感觉到答题时有真实经验支撑思路确实顺畅很多。5. 常见问题与避坑经验5.1 笔试系统操作坑很多人第一次用在线笔试系统容易在代码提交上出问题。编程题要注意选择正确的语言版本Java和Python的缩进风格不同不要复制代码时把格式搞乱了。SQL题没有在线运行功能写完后一定要自己检查关键函数名和括号是否匹配少一个括号就是整句错误。还有正式开考前一定要测试摄像头不是所有浏览器默认允许摄像头访问有些系统要求人脸识别不开摄像头直接视为作弊。这个看起来像废话但每年都有人在这里翻车。5.2 时间管理坑客观题、编程题、SQL题混在一套卷子里很容易陷入“编程题写不出来就死磕”的状态。我给自己定的规则是一道编程题超过25分钟还没AC就先写个暴力解提交保底再去做后面的题。分数能拿一点是一点空题才是最大的浪费。另外客观题里单选题拿不准的不要超过两分钟先蒙一个标记后面检查时再回头细想。因为客观题答案固定纠结太久没意义不如把时间留给分值更高的编程和SQL题。5.3 思路表达坑简答题不要只写结论一定要把分析过程写出来。比如遇到数据倾斜不要只说“加随机前缀”要把“为什么加随机前缀能打散Key”“打散之后如何二次聚合”这层逻辑写清楚。阅卷人看的是你有没有完整的知识体系而不是会不会用术语。我当时答题时采用了“总—分—总”的结构先一句总结可能原因再分点展开最后给出推荐方案和预期效果。这种结构能让答案看起来更有条理也方便检查有没有漏掉维度。5.4 后续流程衔接笔试复盘很重要笔试结束不等于完事如果笔试表现不错几天内会收到面试邀约。面试里大概率会问到笔试的某些题尤其是那道简答题面试官可能让你现场再讲一遍思路。所以笔试结束后趁热打铁把每道题的解题思路整理成自己的话尤其是错题和模糊题这是非常关键的一步。我笔试完当天就整理了完整的复盘文档包括每道题的考点、我的答案、正确思路、以及相关知识点延伸。后来面试时面试官果然追问了一道SQL题的优化方案因为复盘过我答得很顺这也算是笔试给面试的额外加成了。5.5 心态调整最后说点心态层面的。工程数据岗笔试的题量不小遇到一两道完全没思路的题很正常千万别慌。我当时有一道多选题完全没见过直接按第一感觉蒙了答案然后果断跳过去做后面的题。回头看如果在那道题上浪费十分钟编程题可能就来不及写完了。数据工程岗位的核心能力是“用工程手段解决数据问题”笔试考察的其实不只是知识点更是你在有限时间内拆解问题、分配精力、做出取舍的能力。从这个角度看笔试本身也是一道开放题。我个人在准备这套笔试题时最大的体会是工程数据岗的笔试越来越务实了它不考你背诵了多少个API而是考你能不能理解数据链路的每个环节、能不能快速定位问题、能不能用代码和数据回答业务问题。如果你平时真的在项目里写过SQL、调过Spark任务、排查过数据问题这套笔试的难度是可控的。反过来说如果只是想靠刷题突击可能客观题能过但场景题很容易露馅。最后再分享一个小技巧笔试前一周每天花15分钟把思维导图上的核心考点快速过一遍然后合上电脑尝试凭记忆画出某个核心组件的工作流程。别小看这个动作它能让你在考场上一眼识别出出题人想考你什么而不是被题目表面的技术名词带偏。
返回列表