大厂算法岗笔试怎么准备?从数据结构到机器学习全拆解 📅 发布时间:2026/8/30 20:24:40 👁 浏览次数: 2023年蚂蚁集团秋招的算法岗笔试我是在牛客网上完成的。三个小时一套卷子从选择题一路做到编程题中间几乎没有喘息的机会。整场笔试下来最深的感受是它不是在考你会不会某个算法而是在考你在有限时间内能不能迅速调动整个知识体系并且把思路转化成可运行的代码。这篇文章不涉及具体题目内容的泄露只从题型结构、考察重点、复习路径和实战技巧几个维度把这场笔试拆开聊一聊供接下来要参加大厂算法岗笔试的同学参考。先说清楚这篇文章适合谁。如果你是准备校招的应届生、正在刷LeetCode但不知道算法岗笔试还要复习什么、或者对机器学习理论题和数据结构编程题的比例没有概念那么这篇文章能帮你建立一个相对完整的准备框架。如果你已经是有经验的工程师想投算法岗也可以借此反推自己的知识短板在哪里。1. 笔试整体形态与考察方向解读1.1 线上笔试的流程与时间分布蚂蚁的秋招笔试采取线上模式主流平台一般在牛客网或赛码网。整个笔试时长通常在2.5到3.5小时之间不同批次、不同岗位方向会有些差异。今年算法岗的卷子给我的体感是题量不小时间偏紧如果某道题卡住超过20分钟后续节奏就会非常被动。从流程上看开考后第一件事是仔细读题。平台会先展示一道简短的考试说明包括允许使用的语言范围C、Java、Python基本都能选、代码提交规则、是否允许本地IDE编译等。这里有个很多人忽略的细节牛客网和赛码网的系统对输入输出格式要求极其严格尤其是多组用例输入、字符串带空格这类情况本地跑通了但提交0分的情况每年都有不少。建议考前至少用目标平台做三五道模拟题专门练习它的牛客输入输出模板而不是只在自己电脑的IDE里跑。1.2 题型构成与学科覆盖范围这套卷子的题型大致分为四块单选题、多选题、编程题、问答题/简答题。比例上不固定但整体来看选择题覆盖的面非常广包括数据结构、算法分析、机器学习、深度学习、概率统计、线性代数甚至还有少量工程类常识题编程题则是典型的算法题难度大致在LeetCode Medium到Hard之间问答题则会让你手写公式推导或者描述某个模型的原理和适用场景。从学科覆盖来看蚂蚁算法岗笔试的要求比纯后端研发岗更宽。数据结构和经典算法是底线机器学习基础是加分项深度学习相关知识则看你投的是哪个具体方向。投搜广推、CV、NLP这些方向的同学深度学习理论和项目经验的占比会更高如果投的是通用算法岗机器学习的经典模型和数学基础就更关键。我在准备时把知识模块划分成六块数据结构与经典算法、动态规划与图论、机器学习经典模型、深度学习与优化理论、概率统计与线性代数、工程与场景应用题。后面我会逐个讲讲每块的高频考点和复习思路。2. 核心知识考点拆解与高频题型分析2.1 数据结构与基础算法从排序到KMP数据结构相关题目在选择题里出现频率很高编程题里也会作为前置工具出现。数组、链表、栈、队列、二叉树、哈希表这些基础结构必须非常熟练尤其是它们的遍历和复杂度分析几乎是必考内容。排序算法是个重点不只是快排和归并堆排序、冒泡排序的变体、稳定性的判断也经常出现在选择题里。不要只背结论要能手动模拟一趟排序过程这在考场上比代码能力强更有用因为选择题往往不给你运行环境。字符串算法里KMP是高频考点。我复习的时候专门推导过模式串pabacaba的next数组。如果采用next[i]表示前i个字符组成子串的最长相等前后缀长度next[0]-1这是很多教材的约定从i1开始算a的最长相等前后缀长度为0next[1]0ab为0next[2]0aba为1前缀a后缀anext[3]1abac为0next[4]0abaca为1前缀a后缀anext[5]1abacab为2前缀ab后缀abnext[6]2abacaba为3前缀aba后缀abanext[7]3。所以数组是[-1, 0, 0, 1, 0, 1, 2, 3]。这个推导过程一定要自己写一遍因为不同教材对next数组的定义有微小差异有的定义为以当前字符结尾的最长相等前后缀长度有的定义为失配时应该跳转到的位置。考场上看到题目先确认它的下标约定否则很容易算错。除了KMPTrie树、并查集、堆的调整也是高频考点并查集在笔试里经常用来判断图是否连通、集合合并等场景路径压缩和按秩合并的复杂度分析要能讲清楚。2.2 动态规划、贪心与图论编程题的主战场编程题里面动态规划和贪心出现的概率极高。状态设计、转移方程、边界条件是三个核心环节很多同学状态设计没问题却挂在边界条件上。以最长递增子序列为例dp[i]定义为以第i个元素结尾的最长递增子序列长度转移时dp[i] max(dp[j]1, dp[i])其中j i且nums[j] nums[i]。这个题看起来简单但实际编码时要特别注意dp数组初始化为1而不是0否则结果就少了1。类似这种细节平时刷题时就要养成下意识检查的习惯。贪心算法也经常出现。贪心的难点不在写代码而在证明贪心策略正确笔试现场没法做严格证明所以复习时可以通过交换论证法和反例法来快速判断题目的贪心性质。比如区间问题、活动安排、分糖果这类经典题先把区间按右端点排序再逐一选择基本就是套路。如果一道题你用贪心做但找不到一个反例那大概率贪心是对的如果隐隐觉得有反例那就果断转动态规划。图论方面Dijkstra最短路、拓扑排序、二分图匹配都是备选项。热词里提到的二分图HK算法如果投搜广推方向可以重点看因为用户和物品的匹配关系经常建模成二分图。但常规笔试里Dijkstra堆优化、Floyd简单版本、拓扑排序判断有向无环图已经是覆盖面很高的考点。注意Dijkstra不能处理负权边这点选择题经常挖坑。2.3 机器学习经典模型的理论题蚂蚁算法岗笔试的选择题和问答题里机器学习模型简直是必考区。逻辑回归的损失函数推导、为什么用交叉熵不用均方误差SVM的间隔最大化思想、对偶问题、核函数的作用决策树的信息增益和基尼指数计算GBDT和XGBoost的区别。这些知识点在面试里也是必问笔试阶段至少要把公式推导到看得懂每一步的程度。聚类算法和KNN的对比也出现过这两者一个是有监督、一个是无监督但很多人一紧张就忘记。K-Means的初始中心选择、K值确定、收敛条件KNN的距离度量方式欧氏距离、曼哈顿距离、余弦相似度、K值对偏差方差的影响、特征归一化的必要性都是选择题理想素材。我做这类题的经验是不只看结论还要能举出那个经典反例比如K-Means对离群点敏感、对初始值敏感KNN对特征尺度敏感。热词里提到的粒子群算法、模拟退火算法这类启发式优化算法也偶尔出现在问答题里尤其是涉及具体优化问题的时候。它们不算机器学习的核心但属于算法岗的知识储备。准备时把粒子群的速度-位置更新公式、惯性权重的作用、模拟退火的Metropolis准则和温度衰减策略记清楚遇到这类题至少能写出一二。2.4 深度学习与优化理论深度学习在算法岗笔试里的占比看方向但通用卷也至少占10%到20%。CNN的就地覆盖卷积核尺寸、步长、填充值与输出特征图尺寸的关系式(W - F 2P) / S 1这一条几乎每场笔试都会考。感受野的计算也值得专门复习公式是RF_new RF_old (K - 1) × stride_accum记不住就现场推。池化层的参数数量为0这类小知识点经常藏在选择题里送分。RNN和LSTM方面梯度消失与梯度爆炸的原因、LSTM三个门遗忘门、输入门、输出门的作用、为什么LSTM能缓解长期依赖问题这些都要能用自己的话说出来。Transformer近两年出现的频率越来越高自注意力机制中Q、K、V的维度关系softmax(QK^T / sqrt(d_k))V中为什么要除以sqrt(d_k)防止点积过大导致softmax梯度消失位置编码是绝对位置还是相对位置都是一些可以出选择题或者简答题的考点。优化器也是一个值得复习的点。SGD、Momentum、RMSProp、Adam的区别和参数更新公式L1和L2正则化对权重的影响Dropout训练和测试时的区别测试时权重要乘以keep_prob这些属于深度学习基础知识里的高频考区。我在笔试前把优化器更新公式写了一遍觉得效率很高推荐你也试试手写一遍的记忆效果远超看十遍。3. 备考路线、刷题方法与笔试实战技巧3.1 三个月复习时间表怎么排如果从现在开始到笔试还有三个月大体可以这样安排第一个月打基础所有数据结构过一遍LeetCode按标签刷题每天至少两道同时把机器学习经典模型的公式推导过一遍第二个月进入专题强化阶段针对动态规划、贪心、图论这些大块头做专题训练每天控制在一到两道Hard级别的题并且每周做一次全员笔试模拟在限定时间内做一套完整卷子第三个月进入冲刺阶段主要刷目标公司的历年笔试回忆题整理错题把机器学习、深度学习、数学公式再过一遍同时每天保持手感。这个时间表看起来简单但我踩过最大的坑是只刷题不复盘。第一周每天刷四道新题感觉很充实一个月后发现类似的题还是不会做。后来改成一道题吃透胜过四道题掠过每道题做完后强迫自己写三行小结考了什么数据结构、状态转移的核心是什么、如果换一种数据范围还能不能解。这样坚持下来效率反而高了很多。3.2 刷题平台选择与刷题策略刷题平台我比较推荐LeetCode搭配牛客网。LeetCode适合按类别刷题解质量高牛客网适合刷企业真题和熟悉国内平台风格。具体到蚂蚁牛客网上可以搜到往年算法岗笔试的回忆题虽然不保证完全准确但题型和难度层次非常有参考价值。另外热词里提到的华为OD机试真题题库这类内容在牛客上也很多虽然公司不同但算法考察范围高度重叠可以作为补充练习。刷题策略上我建议按专题刷而不是按难度刷。把动态规划、贪心、二分、字符串、图论、树这些专题分别集中刷一遍每个专题至少20题。难度分布可以控制在easy 30%medium 50%hard 20%。hard题不用死磕很多笔试编程题虽然有hard难度但放在一个半小时内完成的话大部分人的策略是拿partial分就换题。所以刷题时要训练写出正确但不一定最优的能力笔试得分是按用例过多少算的能在有限时间内通过更多用例才是目标。3.3 笔试当天的节奏管理与避坑笔试当天有几个细节一定要重视。第一提前30分钟进入笔试页面测试摄像头、网络、IDE环境。第二开考后先花两分钟通读全部题目不要拿到题就埋头做。选择题里可能有一两道一眼就能看出答案的送分题编程题里也可能有一道比想象中简单的题先整体扫一遍再分配时间比按顺序硬扛更划算。第三编程题的输入输出格式一定要仔细读尤其是多组输入包含空格输出保留几位小数这些地方。时间分配上我个人建议编程题每道控制在25到35分钟选择题平均每题1分钟以内。遇到卡壳的题立刻标记跳过最后留10到15分钟回来补。这里有一个很多人容易犯的错误担心时间不够跳过选择题先做编程题结果编程题做完了选择题没时间读题只能乱蒙。其实选择题里大部分是记忆性内容有时候扫一眼就知道答案拿分效率非常高所以至少保证选择题有10到15分钟的完整阅读时间。另一个实战技巧是编程题没思路时先想暴力解法。很多同学上来就想最优解结果想了20分钟没想出来最后暴力代码都没时间写。笔试是按用例给分的暴力解法通过30%的用例也比零分好。所以我的建议是3分钟内没思路先写一个能处理小数据范围的暴力版本再在这个基础上优化。既保底又不会浪费太多时间。4. 常见问题与复盘建议4.1 高频翻车点从输入输出到公式推导笔试里最容易翻车的地方有四个。第一个是输入输出格式尤其使用Python时input()读取多行数据如果用list(map(int, input().split()))强行读入遇到空行就会报错建议提前把牛客网上的Python输入输出模板背下来。第二个是数组越界和边界条件动态规划里初始化数组的长度、循环的起点和终点差一个下标整个结果就错。第三个是选择题里选出不正确的一项很多人往往看到熟悉的选项就直接选忽视了题目问的是反选。第四个是问答题公式推导不规范LR的梯度推导写到一半符号混乱或者SVM的拉格朗日对偶写错符号这种题平时一定要动手完整推几遍不能只看。4.2 复盘方式与面试衔接笔试结束不等于这个流程就结束了。无论结果如何我都会在当天把做过的题目复盘一遍尤其是编程题哪怕提交了也把题目重新讲一遍给自己听这个过程能帮你在后续面试里更游刃有余。因为笔试中出现的算法题面试时很可能以口述思路手写简化版的形式再次出现。复盘时我一般会建立一个错题表格式类似题目来源、考点分类、错误原因、正确思路、一句话总结。错误原因会特别标注是思路错误边界条件漏了输入输出格式问题时间复杂度超了中的哪一类。统计几次之后你会发现自己的错误集中在某几个类型接下来针对性练习就非常高效。4.3 笔试中的实用小技巧最后再分享一个我实际用下来很有用的小技巧笔试前把常用的模板代码整理好比如快速排序、归并排序、并查集、Dijkstra堆优化、二分查找模板、字符串处理的KMP模板。这些模板倒不用背得一字不差但要能在5分钟内在编辑器里默写出来。笔试现场时间紧张如果每次都要临时想while循环条件会白白消耗大量脑力。把这些固定结构变成肌肉记忆把额外的脑力留给真正的解题环节这是性价比最高的准备方式之一。另一个小技巧是做选择题时看到时间复杂度空间复杂度这类问题先在草稿纸上把循环嵌套或者递归展开写一遍不要凭感觉选。很多同学觉得这类题简单反而在这里丢分。递归的时间复杂度尤其容易算错比如斐波那契数列的朴素递归是O(2^n)而不是O(n)这种典型陷阱要牢记。对算法岗笔试的整体印象就像一次高强度的知识体检。它的覆盖面很广但并不要求你每一块都是专家只要核心的数据结构算法掌握扎实机器学习深度学习基础概念清晰再加上临场的时间管理能力和稳定的心态通过的可能性就会大很多。希望这篇拆解能帮你在准备路上少走一些弯路。