尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

蚂蚁集团2024春招研发岗笔试复盘:Java与算法是核心

蚂蚁集团2024春招研发岗笔试复盘:Java与算法是核心 2024年春招季蚂蚁集团的研发岗第一批笔试比往年来得更早一点。我是在3月中旬参加的那场线上笔试90分钟全程双机位监控线上作答。考完出来最大的感受是这批笔试不是背几道八股就能蒙过去的编程题是真的要手写代码选择题里Java和并发的密度也相当高基本把大学四年的知识底子翻了个底朝天。这篇文章把我从网申到笔试结束的完整经历整理出来包括笔试的具体形式、考点分布、编程题的解题复盘、时间分配策略还有我自己实际踩过的坑。不管你是准备投第二批、第三批还是想明年春招提前摸底都可以拿这份内容做参考。先把结论放在前面蚂蚁研发岗第一批笔试的重心非常清楚——算法和Java是两大核心网络、数据库、操作系统作为基础题出现覆盖面广但每道题挖得不算深重点考察的是你有没有形成完整的技术知识体系。1. 笔试前的信息摸底与准备1.1 蚂蚁研发岗的笔试形式与时间节奏先说说基本情况。2024年春招蚂蚁集团研发岗的笔试是线上进行的用的是牛客网平台而不是公司自研的OJ系统。正式笔试前会有一次模拟测试主要是让你检测摄像头、麦克风、屏幕共享权限这些环境是否正常这个环节一定不要跳过我身边就有同学正式笔试时因为摄像头权限没开折腾了快10分钟才进入状态。整个笔试时长90分钟题量分两块一块是选择题单选加多选混在一起大概20到25道另一块是编程题2道核心代码模式也就是不用你处理输入输出只需要实现核心函数。这个模式比ACM模式友好很多但也意味着判题更严格函数签名、边界条件、返回值类型都不能出错。时间节奏上一般网上申请截止后一周左右发笔试通知邮件和短信都会同步提醒笔试链接会发到注册邮箱。这里提醒一句第一时间把笔试时间记到日历上别等到邮件进了垃圾箱才后知后觉。笔试时间通常是周中晚上7点到9点这种时段和大部分人的作息不冲突但如果你那天有课或者实习务必提前协调。1.2 知识体系清单哪些必须看哪些可以放我把自己复习时列的知识清单整理一下按考察频率分了三档这基本就是蚂蚁研发岗笔试的真实考察面高频考点几乎必考算法与数据结构数组、字符串、二叉树、DFS/BFS、贪心、动态规划、滑动窗口、二分查找Java基础HashMap 原理、ArrayList/LinkedList 区别、异常体系、泛型擦除、反射并发编程synchronized 和 ReentrantLock 的区别、volatile 语义、线程池参数、CAS 原理JVM内存区域划分、类加载过程、GC 算法、常见排查命令操作系统进程vs线程、死锁四大条件、页面置换算法、用户态和内核态计算机网络TCP三次握手四次挥手、HTTP状态码、HTTPS握手流程、DNS解析过程数据库MySQL索引结构、事务隔离级别、MVCC、explain执行计划中频考点有时间就看链表相关操作反转、环检测、合并有序链表堆topK问题、栈单调栈Spring IoC/AOP 基础概念Redis 数据结构与缓存淘汰策略Linux 常用命令grep、awk、top、netstat低频考点基本可以放编译原理、汇编语言机器学习算法细节分布式一致性算法深挖笔试阶段不会让你从零写Raft我当时是按照这个清单过了一遍算法部分是每天3道LeetCode保持手感基础部分是按照“JVM-并发-网络-数据库”的顺序逐块复习。不要试图面面俱到把高频部分吃透拿到的分数就已经足够进面了。2. 第一批笔试的题型拆解与考察逻辑2.1 选择题覆盖面广但考的是知识串联蚂蚁这批笔试的选择题整体难度属于中规中矩但它的出题方式不是单纯让你背结论而是喜欢把多个知识点串在一起考。举个例子它不会直接问你“HashMap的默认容量是多少”而是给你一段多线程环境下使用HashMap导致CPU飙升的代码让你判断问题出在哪、应该怎么改。这种题表面上考的是线程安全问题实际上同时考到了扩容机制、并发编程、CPU排查经验知识链条不完整的同学很容易卡壳。我把选择题的考察方向按出现频率排了个序第一梯队是Java基础与并发。像ThreadLocal的内存泄露问题、线程池的拒绝策略选择、synchronized锁升级过程这些都是蚂蚁的常客。这里要注意的是蚂蚁对Java的考察明显偏向“实战场景”比如“如果线上接口偶发超时你会怎么排查”——这种问题的选项里会掺杂ThreadLocal、连接池、Full GC等多个维度需要你具备实际的线上问题排查意识。第二梯队是操作系统和网络。进程与线程的区别肯定不会缺席然后就是TCP的可靠传输机制、HTTP/1.1与HTTP/2的区别、HTTPS的加密过程。有一道印象很深的题是给出一串网络请求的时间消耗数据让你判断哪里是DNS解析、哪里是TCP握手、哪里是TLS握手这道题把网络协议栈的知识点全部串起来了只背概念不去理解数据流的同学会很吃亏。第三梯队是数据库与Redis。MySQL的索引为什么用B树而不是B树或红黑树这个经典问题几乎每年都出现事务隔离级别与MVCC的实现原理也是高频。Redis则主要考察缓存穿透、缓存击穿、缓存雪崩的解决办法以及zset的底层实现。选择题是整套笔试里最拉开分差的部分因为它不给人“蒙”的余地多选错选少选都不得分。我的策略是第一遍快速过把确定会的先选完拿不准的标记下来等编程题做完之后再回来纠结这个策略在后面还会细说。2.2 编程题核心代码模式考察算法基本功蚂蚁的编程题是两道核心代码模式难度梯度很明显第一道是中等偏下的水平考察的是基本的编码能力和逻辑思维只要思路清晰、代码风格好基本能过第二道是中等偏上需要一定的算法功底常见的是DP或者贪心有时候会套一个不那么容易看穿的包装。这里重点说下核心代码模式。它和ACM模式最大的区别是不需要你写main函数不需要你处理输入输出系统会给你一个函数签名你只需要把核心逻辑填进去。好处是节省时间坏处是你必须严格遵守给定的函数签名参数类型、返回值类型、是否static都不能改改了就编译不过。所以在笔试前一定要去牛客网熟悉一下这种答题模式特别是那些平时只用IDE自动补全的同学到了笔试环境可能连import都不会写了。两道题的时间分配我的经验是第一道题控制在15到20分钟第二道题控制在40分钟左右剩下时间用来调试和检查边界条件。如果第二道题卡了超过20分钟没有头绪果断放弃回去检查选择题的标记题目这样总分的性价比更高。3. 编程题实战复盘两道题的解题思路拆解3.1 第一道题字符串处理与模拟卡住你的往往是细节我抽到的第一道题考察方向是字符串处理加模拟。题目大意是给定一个字符串按照某种规则进行压缩或展开操作要求输出最终结果。这类题在LeetCode上很常见比如“字符串解码”就是典型代表核心考点是栈的运用和边界条件处理。我拿到题后先做了几件事第一读题两遍把输入约束条件圈出来比如字符串长度、字符范围第二在草稿纸上手动跑一个示例理解题目到底要什么第三确定数据结构这个场景我选择用栈来模拟嵌套结构。解题思路大概是遍历字符串遇到数字就解析出完整的数字注意可能是多位数遇到左括号就把之前的状态压栈保存遇到右括号就弹出栈顶状态把括号内的字符串按数字重复拼接再和之前的字符串合并。这个思路本身不难但有几个细节特别容易丢分数字可能是多位数不能用char转int直接解析要连续读取直到下一个字符不是数字括号可以嵌套所以栈里保存的必须是“当前字符串前缀”和“重复次数”两个信息最后要处理字符串拼接的复杂度问题如果每次都申请新字符串极端情况下会超时。我的做法是用两个栈一个存字符串前缀一个存重复次数。遍历过程中维护一个StringBuilder存储当前的展开结果遇到左括号时把当前结果和次数压栈然后重置StringBuilder遇到右括号时弹栈把重复后的结果拼接到弹出的前缀后面。这样做的时间复杂度是O(n)空间复杂度也是O(n)能稳过所有测试用例。这类模拟题在春招笔试里出场率很高因为它能同时考察基本数据结构掌握度和代码细节处理能力。我复盘时发现自己第一次写就差点漏了数字多位数的情况还好提前打了草稿把示例手推了一遍才发现。在这里给个建议不管题目多简单都要先手动推演至少一个示例不要一上来就写代码。3.2 第二道题动态规划关键在状态定义而不是转移方程第二道题我记得很清楚是一个区间最大化的问题题目表面包装成了“任务调度”的形式给定一组任务每个任务有开始时间、结束时间和收益你在一段时间内只能同时做一个任务问最大收益是多少。这其实是一个带权区间调度问题标准解法是动态规划加二分查找也可以用排序加DP的朴素方法后者会超时但能通过部分用例。我一开始差点走偏想用贪心去做“按结束时间排序然后贪心选任务”但马上意识到这个场景下任务是有权重的单纯的贪心选结束时间最早的并不能保证总收益最大这就是经典的有权区间调度和无权区间调度的区别。正解是动态规划。状态定义为dp[i]表示前i个任务能获得的最大收益状态转移时对于第i个任务有两种选择不选它那收益就是dp[i-1]选它那收益就是当前任务的收益加上“在它开始之前已经结束的任务”的收益也就是dp[p]其中p是结束时间小于等于当前任务开始时间的最后一个任务的下标。为了高效找到p需要把任务按结束时间排序然后用二分查找定位p。这里我想重点说说“状态定义”这件事。很多同学学DP时都喜欢背转移方程但笔试真正卡住你的往往是第一步怎么把问题抽象成dp数组的含义。我当时在草稿纸上画了几种定义方向dp[i]表示前i个任务的最大收益还是dp[t]表示时间点t能获得的最大收益前者需要按任务索引转移后者需要考虑时间轴的粒度问题。最后确定第一种因为任务数量是有限的按索引定义状态天然好处理。二分查找的部分也有个小陷阱任务按结束时间排序后查找的是“最后一个结束时间小于等于当前开始时间”的任务用Java的Arrays.binarySearch或者手写二分都行但手写时要注意返回值可能为负数表示找不到插入点这时候要处理成0。我第一次写的时候就直接用binarySearch的返回值做下标结果数组越界调试了半天才反应过来。最终这个方案的时间复杂度是O(nlogn)排序O(nlogn)加n次二分O(nlogn)空间O(n)在笔试的数据范围下是稳过的。复盘下来这道题真正考察的其实不只是DP本身还有你能不能识别出“这不是贪心能解的”以及二分查找这个优化手段是否熟练。4. 90分钟的时间分配与做题策略4.1 我的时间分配方案选择题尽量控制在45分钟内整场笔试90分钟我给自己定的时间预算是选择题45分钟第一道编程题15到20分钟第二道编程题40分钟最后留10分钟检查。实际执行下来基本吻合但也出了点小插曲第二道编程题的二分查找我第一次写错了花了几分钟调试导致最后的检查时间压缩到5分钟左右。选择题的时间分配有一个原则不要在一道题上卡超过3分钟。遇到完全没有思路的题先标记跳到下一题等有时间的再回来。因为选择题多选错选不得分你花10分钟纠结一道题就算做对了投入产出比也极低不如把时间留给编程题的基础分。做题顺序上我的建议是先做选择题再做编程题。原因有两个一是选择题刚开考时脑子比较清醒适合应付那些需要记忆细节的题目二是编程题一旦开始写就容易沉浸进去写完之后再回来看选择题状态切换成本很高。当然如果你对编程题特别有信心也可以先写编程题这个看个人习惯。另外核心代码模式的编程题系统通常支持切语言比如Java、C、Python、Go都可以选。我自己选的是Java因为蚂蚁的研发岗整体以Java技术栈为主用Java答题不会有语言上的扣分风险。这里要注意的是笔试环境里的JDK版本可能不是你日常用的版本有些API可能不可用复习时尽量用标准的Java API。4.2 环境与输入输出的细节别让低级错误毁掉整场笔试线上笔试的环境问题体验过的都懂。这里把踩过的坑和注意事项集中说一下第一网络。一定要用有线网络或者确保路由器信号稳定。笔试中途断网哪怕只是断几秒都可能被判定为异常退出。我参加模拟测试时就遇到过网络抖动页面卡了半分钟才恢复正式笔试时果断换了有线连接。第二浏览器。牛客网的笔试系统对浏览器有兼容性要求一般推荐Chrome或Edge最新版。提前关闭所有无关插件尤其是广告拦截插件有些插件会拦截页面脚本导致代码编辑器加载失败。第三输入输出。核心代码模式虽然不用处理输入输出但有些边界情况需要你自己在代码里构造测试用例去验证。牛客网的编辑器一般支持自测功能你可以写几个测试用例点击运行按钮查看输出是否符合预期。这个功能一定要用它能在提交前帮你拦截大部分低级bug。第四代码自动保存。我习惯每写完一段逻辑就点击保存虽然笔试系统一般会自动保存但手动保存能给自己一个心理安全感。另外提交前一定要检查代码有没有编译错误可以点“运行”把代码跑一遍确保编译器不报错再提交。4.3 作弊警示不要有任何侥幸心理这部分我必须单独拿出来说因为它真的很重要。线上笔试全程双机位监控试题页会开启防切屏检测你只要切出考试页面系统就会记录并提示警告。超过一定次数成绩直接作废。更重要的是春招的诚信记录是行业共享的一旦被认定作弊影响的不是一家公司而是整个求职季。退一万步讲笔试挂了大不了继续投下一家诚信污点一旦背上后患无穷。所以不要想着搜题、查资料、找代打这些歪门邪道认真准备比什么都强。5. 复盘与避坑指南5.1 我实际踩过的坑从笔试中总结的五个教训复习时重“量”轻“质”。我前期刷题刷得很快一天能过10道但回头看很多题只是记住了答案没有真正理解思路。到笔试时遇到变形题一下就露馅了。刷题不在多在于每道题都要能讲清楚“为什么用这个方法、复杂度是多少、边界条件有哪些”。忽略多选选择题的判分规则。多选少选不得分这意味着你不会的题绝不能乱猜。我的策略是单选不确定时可以根据第一感觉选一个多选不确定时宁可少选也不多选因为少选最多得0分多选一定得0分。编程题只顾主逻辑不想边界条件。第一道字符串题我一开始就忘了多位数的情况还好打了草稿提前发现了。笔试判题时边界条件会占不少测试用例空数组、空字符串、单个元素、最大值、最小值这些都要在写代码时下意识处理。在选择题上恋战。有一道关于MVCC的题我自认为复习过就在那反复推演结果花了6分钟还没确定答案。事实证明复习过和真正掌握之间还有很大差距拿不准就应该果断标记跳过。考前没有完整模拟过一场笔试。我虽然做了大量单题练习但没有卡着时间完整做过一套笔试卷子导致正式开始时对时间节奏的感知是模糊的。建议至少考前三天完整做一套模拟题无论是牛客网的历年真题还是力扣周赛都按90分钟的节奏来。5.2 常见问题速查笔试前后你可能关心的几个问题问笔试通知一般提前多久发答一般提前3到5天邮件和短信都会发注意查收垃圾邮件。问可以选语言吗答可以Java、C、Python、Go等主流语言都能选建议选自己最熟的。问核心代码模式的函数签名可以改吗答不可以必须严格按照题干的函数签名实现。问笔试没通过还有机会进面吗答春招通常只有一次笔试机会成绩不理想基本就和这批失之交臂了所以认真准备、一次过关才算稳。关于第二批、第三批笔试是否会有变化从我了解的情况看题目方向不会有大的变动仍然是算法加基础知识的组合只是具体题目会换。所以如果你这次没赶上或者想再战按同样的方向准备是没问题的。5.3 考前一周的安排建议把状态调到最佳考前一周不要再去学新知识了把重心放在巩固和模拟上。我当时的时间安排是这样的前三天把之前整理的所有笔记和错题过一遍尤其是JVM、并发、网络这些高频选择题考点中间三天每天上午刷两道中等难度的算法题下午做一套模拟选择题最后一天只做两件事完整模拟一次笔试流程然后整理第二天考试需要的物品。这个安排的核心逻辑是考前的最大敌人不是知识盲区而是状态不稳定。你很可能会遇到“明明复习过但就是想不起来”的情况这通常是紧张和疲劳导致的。保持充足的睡眠考前一小时不要再刷题简单翻翻笔记建立信心就够了。6. 笔试之外我对这次春招的整体感受写到这里笔试本身的内容已经聊得差不多了。但我还是想多说几句关于春招整体节奏的感受这部分可能比具体的题目更有参考价值。2024年的春招开放时间比往年更早很多大厂在2月底就启动了3月中旬已经密集进入笔试期。对于应届生来说这意味着一件事寒假是最后一整块的准备时间绝对不能浪费。我在寒假期间保持了每天至少4小时的学习时间上午算法、下午基础、晚上复盘这个节奏让我在笔试来临时没有手忙脚乱。另一个很深的感受是春招的流程推进比秋招快很多。从投简历到笔试往往只有不到两周时间如果前期没有积累临时抱佛脚根本来不及。所以如果你现在还有时间请务必把刷题和基础复习当成一个持续的习惯而不是等到笔试通知下来再开始冲刺。然后是心态管理。我参加蚂蚁这批笔试之前其实心里很没底毕竟是第一批不知道竞争有多激烈。但考完我发现题目的难易和批次并没有绝对的关系更多还是看你的基本功是否扎实。与其担心竞争对手有多强不如专注于把自己会做的题做到不丢分。最后想说的是一场笔试的结果不应该定义你的整个求职季。我身边有朋友笔试挂掉之后收到了更好的offer也有笔试高分却在面试环节被刷的案例。春招是一场长跑笔试只是第一道关卡保持稳定的心态把每一个环节都当成学习的机会这个过程本身就是成长。如果你正在准备蚂蚁集团的研发岗笔试希望这篇复盘能帮到你。祝笔试顺利我们面试见。
返回列表