
最近不少读者私信我聊校招笔试的事尤其深度学习算法岗大家都觉得“题海战术”不好使刷了一堆 LeetCode 却不知道重点在哪。这让我想起自己当年参加网易 2018 实习生招聘笔试的场景——那次笔试给我留下的印象特别深不是因为它难而是因为它把“算法基本功”和“深度学习理论基础”结合得非常紧密很多题乍一看是工程题实际上在考你有没有真正理解模型背后的原理。这篇文章我就以那次笔试为蓝本把深度学习算法实习生岗位最常考的几类题目、背后涉及的算法原理和复习方法一次性拆透希望能给准备大厂算法岗的同学一个清晰的方向。无论你是刚入门深度学习、还在啃 CNN 和反向传播还是已经有项目经验但担心笔试翻车这篇复盘都值得你花十几分钟看完。我会用“题目类型 核心知识点 避坑经验”的方式展开重点讲清楚为什么这样出题、应该怎么答、平时怎么练内容完全是干货向的。1. 笔试整体思路与考察范围解析1.1 为什么这样出题算法岗要的不是“调包侠”先聊聊大厂的招聘逻辑。深度学习算法实习生招进去之后要做模型训练、调优、上线但这些工作的前提是你得具备两种能力一是扎实的数学和算法基础二是对深度学习模型原理的真正理解。如果只会调用框架的 API那和“调包侠”没区别遇到新问题就抓瞎。网易 2018 实习生的这套笔试很多人以为会出大量神经网络结构题结果拿到卷子发现数据结构、算法设计、数学基础占了很大比重深度学习相关的题目反而更偏向“理解判断题”和“计算推导题”。这是很典型的大厂算法岗风格——因为实习生要接触真实业务场景模型需要改结构、调损失函数、处理数据不平衡这些都需要底层原理支撑不是会跑个开源代码就能解决的。1.2 四类高频模块的分值排布根据我当时的回忆和周围同学的反馈这套笔试基本可以分成四个大模块机器学习与深度学习理论基础占 30% 左右。考的是 LR、SVM、CNN、RNN 的核心概念以及过拟合、激活函数、梯度消失等基础问题的理解。数学基础占 20% 左右。概率论、线性代数、最优化方法尤其是与梯度下降相关的推导。数据结构与算法占 35% 左右。排序、KMP、动态规划、贪心、二叉树等经典题。编程题与综合题占 15% 左右。给一个场景要求设计解决方案考察工程思维。这个分值结构告诉我们一个非常重要的信号深度学习和数据结构算法是两条腿缺一条都走不稳。很多人只盯着神经网络皮毛却忽视了“算法”这两个字在岗位名称里的分量。1.3 按岗位定制复习方向如果你是冲着“深度学习算法实习生”这个岗位去复习我建议你把时间这样分配第一优先级数据结构与算法刷题LeetCode 中等难度为主Hot 100 够用每天 2-3 道保持手感和思路。第二优先级深度学习基础理论尤其是 CNN、反向传播和激活函数做到能手推、能解释。第三优先级机器学习经典模型LR、SVM、决策树、随机森林、GBDT重点理解损失函数和适用场景。第四优先级数学基础概率论里的贝叶斯、线性代数里的特征值、最优化里的梯度下降变体。这样安排的原因是笔试的淘汰率主要靠算法题拉开的而深度学习题大多只要理解到位就能答对拉分效果不如算法题明显。所以你要用“算法题保底理论题拉分”的思路来备考不要本末倒置。2. 深度学习核心考点拆解2.1 卷积神经网络不仅是“知道”还要“会算”CNN 是深度学习算法岗笔试的绝对重点。网易的笔试不会直接问你“什么是卷积”而是给你一个具体输入尺寸和卷积核参数让你算输出尺寸、参数量、感受野。这要求你不仅要理解卷积的“滑动窗口”直觉还要把公式记住并且熟练运用。我当时遇到的题目是输入 32×32×3 的图像经过一个 5×5×3 卷积核、步长 1、填充 2 的卷积层输出尺寸是多少这时候用公式输出尺寸 (输入尺寸 2×填充 - 卷积核尺寸) / 步长 1代入可得(32 2×2 - 5) / 1 1 32。这类题就是送分题但如果你只看懂了卷积的示意图没动手算过考场上很容易蒙圈。我给的建议是把卷积、池化、全连接的输出尺寸计算、参数量计算列成一个速查表考前反复默写三遍做到看到参数直接出答案的程度。2.2 池化层为什么它能减少计算量又不伤特征池化层在笔试中出现频率也不低。考察点主要分散在三个方向一是最大池化和平均池化的区别二是池化的作用包括降低计算量、增强平移不变性、防止过拟合三是池化层的梯度传播规则。这里容易出错的是梯度传播。最大池化在前向传播时记录最大值位置反向传播时把梯度传给那个位置其他位置梯度为 0平均池化则是把梯度平均分配到每个位置。很多同学在面试或笔试时能说出前三点但一问梯度传播就卡壳这就是基础不扎实的表现。我当时的经验是把每个层的反向传播规则都用小例子手推一遍比如一个 2×2 的最大池化输入 [[1, 3], [2, 4]]最大值是 4反向时梯度就全给 4 这个位置。推过一遍之后这类题就再也难不倒你了。2.3 激活函数与梯度消失老生常谈但要说到点子上激活函数是笔试必考题但大多数人的回答都停留在“ReLU 比 sigmoid 好”。网易的笔试题会把梯度消失问题、梯度爆炸问题、ReLU 死亡问题放在一个综合题里考要求你解释原因并给出解决方案。梯度消失的本质是链式法则连乘导致的。如果用 sigmoid它的导数最大值只有 0.25多层反向传播时梯度每层至少乘以 0.25十几层之后梯度就趋近于 0导致浅层参数几乎不更新。解决办法有几个方向改用 ReLU 这类导数恒为 1正区间的激活函数添加 Batch Normalization把每层输入分布拉回合适区间使用残差连接ResNet让梯度有一条“高速公路”直接传给浅层合理初始化权重比如 He 初始化避免一开始就进入饱和区。笔试答题时如果问“ReLU 有哪些缺点”你不能只说“神经元死亡”要补充说明原因——当输入为负数时梯度为 0如果某个神经元的所有输入都落在负区间它的权重就永远不会更新了。解决方案可以用 Leaky ReLU 或 PReLU。把因果链条讲清楚得分率会明显高一个档次。2.4 反向传播与链式法则必须会手推反向传播是深度学习最底层的原理。网易的笔试有时候不给神经网络结构而是直接给一个简单计算图让你求梯度。这类题说难也不难关键是熟练。我的建议是考前把 BP 的推导过程完整写三遍从最简单的两层网络开始。我当时遇到的是一个带 Sigmoid 激活的两层全连接网络输入 x 是一维标量隐藏层一个神经元输出一个标量均方误差作为损失函数。这种题没有捷径就是按照链式法则一层一层求偏导第 1 步前向传播求出每一层的输出值第 2 步从损失函数开始对输出层激活函数的输入求导第 3 步把梯度向后传播到隐藏层再传播到权重参数第 4 步整理成权重更新的表达式。如果你能做到不看资料独立推导这个计算过程笔试里的 BP 题基本就稳了。深度学习岗不会写代码还能理解但不会反向传播那就完全说不过去了。3. 机器学习与数学基础必考题型3.1 经典模型对比LR、SVM、决策树的本质区别虽然岗位是深度学习方向但机器学习基础一样会考。网易笔试常出现“比较逻辑回归和支持向量机”这种开放题这时候你不能只罗列“一个用交叉熵一个用合页损失”而是要有层次感。我的回答思路是先讲两者都是监督学习的分类模型再从决策边界的角度说LR 是一种线性分类器输出是概率天然适合排序场景SVM 则通过最大化间隔寻找最优超平面在样本量小、维度高时更有效配合核技巧可以处理非线性问题。最关键的差异在于损失函数和优化目标——LR 优化的是对数似然SVM 优化的是几何间隔这决定了它们对离群点的敏感度不同。3.2 损失函数与评价指标不能只背公式算法岗笔试对损失函数的考察往往和实际场景结合。你得能说出什么时候用交叉熵什么时候用均方误差什么时候要加正则化项。交叉熵更适合分类因为它对概率分布的差异敏感梯度更新也更稳定均方误差适合回归但如果和 Sigmoid 一起用在分类任务里会导致梯度更新缓慢。评价指标也一样。有一个经典问题在正负样本极不平衡的数据集里准确率是否有意义答案是没有意义——假设 99% 是负样本模型全预测负样本也有 99% 的准确率。这时应该用精确率、召回率、F1 或者 AUC。这种思维题考察的是你能否在真实业务里发现“看似正确实则错误”的评估方式非常能体现候选人的水平。3.3 概率与统计一个容易被忽视的提分点数学基础里概率论是考试重头戏。网易这类大厂笔试很喜欢考贝叶斯公式、期望方差、最大似然估计。复习时不需要把概率论整本书啃下来但有几个点一定要掌握条件概率和贝叶斯公式尤其是“先验概率 似然 → 后验概率”的理解高斯分布的参数估计本质就是求最大似然的过程大数定律和中心极限定理的直觉。我当时遇到贝叶斯相关的题时很快联想到朴素贝叶斯模型因为面试官问我“为什么朴素贝叶斯要假设特征独立”答案是为了简化计算但现实中特征往往不完全独立所以它本质上是一个简化模型。这种“算法原理 数学基础”结合的复习方式效率很高一举两得。4. 数据结构与算法笔试高频题解析4.1 排序算法复杂度对比表是你必须背下来的东西我现在都记得网易笔试有一道关于排序的题目要求选择不稳定的排序算法然后针对快排在最坏情况下的时间复杂度进行分析。这种题看起来常识但非常检验基础能力。你至少需要心里有一张清晰的排序算法复杂度表排序算法平均时间复杂度最坏时间复杂度空间复杂度稳定性冒泡排序O(n²)O(n²)O(1)稳定快速排序O(n log n)O(n²)O(log n)不稳定归并排序O(n log n)O(n log n)O(n)稳定堆排序O(n log n)O(n log n)O(1)不稳定我更建议你深入理解为什么排序算法是稳定的或者为什么不稳定。比如快排为什么不稳定因为交换操作可能跨越多个位置把相同元素的相对顺序打乱。堆排序同理堆的调整过程无法保证相同元素的相对位置。搞清楚原因后即使笔试换个角度问你也能应对自如。4.2 KMP 算法next 数组推导是高频考点KMP 算法在笔试里的高频程度超出了很多人的预期。它典型的出题方法是给定模式串让你求 next 数组并说明 KMP 和朴素模式匹配的复杂度对比。比如给定 p abacaba你需要亲手推导它的 next 数组。下面我完整演示一遍推导过程方便你理解里面的规律手动失配时我们把 next[i] 定义为“模式串前 i 个字符组成的子串中最长的相同前后缀长度”。i 0定义 next[0] -1i 1子串 a没有真前后缀next[1] 0i 2子串 ab前缀 a 与后缀 b 不同next[2] 0i 3子串 aba最长相同前后缀是 anext[3] 1i 4子串 abac最长相同前后缀是空next[4] 0i 5子串 abaca最长相同前后缀是 anext[5] 1i 6子串 abacab最长相同前后缀是 abnext[6] 2i 7子串 abacaba最长相同前后缀是 abanext[7] 3。所以 next 数组依次是 [-1, 0, 0, 1, 0, 1, 2, 3]。我在笔试前专门用一天时间把 KMP、BM、Sunday 三种字符串匹配算法的 next 数组推导都练了一遍这类题在考场上基本就是送分题。如果你时间有限至少要保证 KMP 的 next 数组能手工推导因为出题成本低、区分度又高。4.3 动态规划与贪心核心是“推导状态转移”动态规划是笔试压轴题的常客网易特别喜欢出这一类题因为 DP 题能直接反映逻辑思维和代码实现能力。我在那次笔试中印象最深的一道题类似于爬楼梯费用问题给定一个数组 cost每当你爬上一个台阶就要花费对应的体力值然后你可以选择迈一步或者两步求到达楼层顶部的最低花费。思路是维护一个一维 dp 数组dp[i] 表示到达第 i 级台阶所需的最小花费状态转移方程就是 dp[i] min(dp[i-1], dp[i-2]) cost[i]。如果你能把 dp 数组的含义和转移方程讲清楚即使代码有些小 bug面试官也会认为你具备基本算法素养。笔试时DP 题最关键的不是“想出一个办法”而是“想办法证明你的办法是对的”也就是最优子结构。5. 大模型时代的新增考点浮点数格式与模型部署5.1 FP32、FP16、BF16、TF32 的格式区别深度学习算法岗位笔试里浮点数格式的题在线下笔试中出现得不多但近两年大模型相关的笔试和面试非常爱考尤其是当岗位涉及模型训练、推理性能优化时。2018 年那会儿其实还没有这么普及但以现在的视角复盘如果你打算走这条路线这个考点值得提前了解。我们可以这样类比训练好的模型是一个庞大的实数集合这些数字精度越高占用的内存和计算资源就越大。FP32 是单精度浮点数用 1 位符号位、8 位指数位、23 位尾数位可以表示很大范围的数精度较高但训练大模型时显存占用很高。FP16 用 1 位符号位、5 位指数位、10 位尾数位优点是省显存、计算快缺点是表示范围有限容易出现溢出和精度丢失。BF16 是用 1 位符号位、8 位指数位、7 位尾数位动态范围与 FP32 几乎一致只是精度变低非常适用于大模型训练时的梯度缩放。TF32 则是 NVIDIA 专门针对 Ampere 架构设计的格式它用 8 位指数但只截断 10 位尾数结合了 FP32 的动态范围和接近 FP16 的运算速度。5.2 笔试和面试中如何回答这类问题如果在笔试题里遇到“FP16 训练为什么需要 loss scaling”你仅仅回答“防止梯度下溢”还不够要补充为什么梯度会下溢——FP16 的指数范围只有 5 位可以表示的最小正数约为 2^-24而正常训练过程中梯度数值往往小于这个范围导致梯度变成 0权重没法更新。所以我们需要把损失值放大若干倍梯度相应放大更新完成后再缩回去。还有一个高频问题是“量化会导致精度下降为什么大家都在用”。答案也很有层次一是模型参数和激活值分布往往集中在一个小范围内用低精度表示时损失有限二是推理阶段量化可以显著降低内存带宽和计算量吞吐量提升明显三是对大多数业务场景而言少量精度损失换来的速度提升是值得的。对这个知识点我的复习建议是不要只看格式要理解“动态范围 vs 精度”的取舍关系学会画出一个浮点数格式的字段分布图然后把常见的数值溢出和精度问题都过一遍这样无论题目从哪个角度切入你都答得出来。6. 常见问题与排查技巧实录6.1 笔试时间分配最常见的翻车原因深度学习和算法岗的笔试题量通常不小尤其是选择题部分看起来每道题都很简单但做起来会占用大量时间。我见过太多同学在选择题上花太多时间导致最后的编程题没时间写而这恰恰是整张卷子分值最重的一部分。我的习惯是先花 3 到 5 分钟快速浏览整张试卷标记出编程题的难度然后用 1 小时左右解决选择题和填空题再留出至少 1 小时专攻编程题或综合设计题。如果你在做题时卡了一道题超过 5 分钟先跳过把能拿的分拿完再说——这种策略对任何笔试都适用。6.2 失分点复盘这些问题一定要提前规避根据我的复盘笔试失分点集中在以下几个地方手推公式时的计算错误尤其是 BP 推导和浮点数计算时符号和下标特别容易错。建议平时训练时每写一步都回看一眼用值代入法检查比如假设输入为 1看损失是否为 0。对“稳定性”理解不清晰很多人在排序问题上只记住结论不理解定义。笔试时他会把定义换一种方式表达你就容易乱。解决方法是记定义而不只是记结论。答题没有条理逻辑混乱主观题不是只写公式就够要让面试官看出你的推导过程。推荐用“已知 → 解 → 结论”的格式写解答尽量呈现思考过程。忽略边界条件代码题目中一般需要注意数组为空、长度为 1、输入为负数这些边界情况。我在考场上吃过亏所以特别提醒写代码时一定多检查边界。6.3 结合深度学习的独特避坑技巧深度学习算法岗笔试有一个独特的坑它经常会问一些“看起来是编程、实际是理论技巧”的题。比如实现 Dropout很多考生直接写“随机将神经元置 0”但忽略了“训练时进行缩放、测试时保持不变”这个关键细节。所以在复习深度学习算法岗位时一定要比普通算法岗多一个步骤把每个经典模型的实现细节和推理阶段的差异过一遍。包括 Batch Normalization 在训练和测试时的不同行为、Dropout 在训练和测试时的不同行为、数据增强在训练和测试时的处理方式。这些细节都是笔试出题人非常爱放的地方。我个人的方法是看完一节论文或者模型后给自己出一道“如果我是面试官我会怎么问”然后尝试回答这样才会在一个模型里挖出更多层次比自己只看别人的总结要有效得多。笔试不是为了刷题而刷题而是在复习中不断加深对模型原理的理解把知识和工程实现真正串起来。7. 总结与给后来者的实用建议7.1 一套完整的复习路线图如果你现在还是大一、大二时间充裕那最好的路线是先学数据结构与算法推荐《算法导论》相关章节配合 LeetCode然后学机器学习基础至少把吴恩达的课程过一遍再学深度学习把《深度学习》花书里 CNN、RNN、优化算法、正则化这几个核心章节读透最后多看大厂技术博客了解他们在真实业务中遇到的问题和解决方案。如果你是临近笔试才开始复习那就抓大放小。首选高频考点排序和 KMP 这类算法题一定要熟练CNN 的前向传播和反向传播要做到能推能算。深度学习的开放性题目要会列点回答不要求深度多高但要有条理。掌握“先保底再拉分”的节奏远比花大量时间啃冷门知识点有效。7.2 资料推荐与使用方式最后推荐一些我一直觉得不错的资料组合算法刷题LeetCode Hot 100 和剑指 Offer按“数组 → 链表 → 树 → DP → 字符串”顺序推进。机器学习理论李航《统计学习方法》第一版即可重点看感知机、LR、SVM、决策树、AdaBoost 这几章。深度学习基础花书 李沐的《动手学深度学习》一边看理论一边跑代码效果最好。神经网络架构CS231n 的课程笔记尤其是卷积神经网络和反向传播的部分。浮点数与部署优化NVIDIA 官方文档和 Hugging Face/OneFlow 等技术社区的部署实践理解大模型训练为什么需要混合精度。7.3 笔试之外别忘了准备这些笔试只是第一步过了笔试还有面试。网易这类公司的面试非常看重项目经历和思考深度。如果你没有相关项目经验强烈建议自己找一个小的开源数据集从零训练一个简单的模型完整记录整个过程中的踩坑经历。面试官真正想听的不是“我用 PyTorch 跑通了 ResNet”而是“我在训练时遇到了 loss 不下降的问题通过排查发现是学习率太大导致震荡调整后 loss 正常下降”。这份真实经历比十篇高深的技术博客都有说服力。哪怕项目很小只要你能把来龙去脉讲清楚就已经跑赢了大多数候选人。根据我个人实际体验深度学习算法岗的笔试是一个“筛选器”它把那些只懂得调用框架、却不明白底层原理的人挡在门外。把基础打牢把推导练熟把经验沉淀成自己的话术你会发现笔试并没有想象中那么可怕。希望这篇复盘能帮你把复习路线理清楚少走一些我当年走过的弯路。