ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

网易CV算法岗笔试全解析:题型考点与备考策略

2026/9/1 16:30:33 拓冰建站 浏览量
网易CV算法岗笔试全解析:题型考点与备考策略 网易2023校招提前批的计算机视觉算法工程师笔试我完整走了一遍。这篇文章不聊投递流程和面试玄学只把笔试本身掰开揉碎讲清楚——考什么、怎么准备、答题节奏怎么安排、哪些坑是我实际踩过的。如果你正准备CV算法岗的校招笔试或者对这类技术岗的考核方式好奇这篇直接拿去参考。我参加的批次是在线笔试时长两个小时题目形式不单一选择题、编程题、问答题混在一起整体感觉更像“在限定时间内完成一套综合知识考察”而不是纯粹刷LeetCode那种单题攻坚。有意思的是这套题里计算机视觉和深度学习相关内容占比明显高和常规后端岗的笔试题风格差别很大。1. 笔试的整体结构和常规算法岗不一样CV岗有自己的侧重1.1 考试形式与平台体验网易提前批的笔试走的是牛客网这类在线评测系统支持多种语言提交代码C、Java、Python都行选择题直接在网页上勾选编程题需要在一个编辑器里写完并跑测试用例。我那个批次全程开着摄像头屏幕切出会有提醒整体环境监管比较严格。时间分配上两个小时听起来充裕实际做起来并不轻松。理由不是题目数量多到写不完而是每道题都需要一定思考深度尤其编程题和问答题磨时间的方式五花八门。我身边的同学考完交流几乎没有人做到“时间还剩很多”的状态。提前批的笔试和正式批一个明显区别时间更早很多人的知识体系还没完全过完一轮。我那个批次里周围不少同学的状态是“数据结构刷过但深度学习基础还没系统复习”结果遇到机器学习和CV相关的选择题时特别吃亏。1.2 客观题的考察范围比想象中宽我整理的客观题部分单选多选按知识点可以大致分成四块知识模块典型考点占比感受数据结构与基础算法KMP的next数组、排序算法稳定性、堆与快排、贪心策略约三成机器学习与深度学习过拟合缓解方案、交叉熵、梯度消失、BN的作用约四成图像处理与视觉基础卷积输出尺寸、感受野、双线性插值、图像锐化约两成工程与场景题检测后处理、类别不平衡、数据增强约一成看到这个分布你就明白准备方向不能只押算法题。我曾预期这套选择题全是“LeetCode Hot 100”那种代码题前置知识结果不少题目直接考手推公式和模型理解比如给一个输入尺寸、卷积核大小、步长和padding让你算输出特征图尺寸。这类题看着简单但一旦公式不熟练或者对padding模式理解不透很容易算错。1.3 题型设计上的几个“反套路”传统印象里算法工程师笔试主要考代码题但这次的感觉是客观题占了相当比重而且和CV方向紧密结合。这其实反映了岗位需求——CV算法工程师不只是写代码调模型还得对图像处理、特征提取、模型结构有底层理解。另一个反套路是笔试里出现了一些“工程取向”的题目比如多任务处理优先级选择、A/B实验如何分析、训练数据质量如何评估等。这类题目没有标准计算过程更多考察工程直觉。我当时一度觉得这些题有点像大厂产品经理的题但它们出现在算法岗笔试里恰恰说明企业希望候选人不仅懂理论还要有工程落地的思维。2. 选择题核心冲刺从数据结构到深度学习的知识扫描2.1 数据结构与基础算法KMP、排序、快选等高频考点选择题里的数据结构部分一个很集中的方向是字符串匹配和排序算法。我在考卷里确实看到了和KMP相关的题目具体形式是给一个模式串让算next数组或者判断某次匹配失败后模式串的移动位置。这种题不能靠死记硬背得理解失配后“最长公共前后缀”的跳转逻辑。我记得复习时用了这样一个例子模式串 p abacaba要算出它的 next 数组。先手动列一遍它的前缀后缀长度为1时前缀 a后缀 a相同长度为1长度为2时前缀 ab后缀 ba不同长度为3时前缀 aba后缀 aba相同长度为3更长的前缀后缀就不一样了所以 next[3] 可以取1next[5] 可以是3。这类题的关键在于快速准确地提取“最长相等前后缀长度”而不是背一个死板的模板。建议考前自己手动推几个典型模式串比如 “ababcabaa”或“aaaa”推一遍就形成肌肉记忆了。排序算法也是选择题的常客。我当时遇到的具体问题包括哪种排序在最坏情况下时间复杂度仍是O(n log n)、快速排序在什么样的情况下退化、归并排序的空间复杂度。最经典的考察点是“稳定性和原地性”这里整理一个常用对照表算法平均时间复杂度最坏时间复杂度空间复杂度稳定性快速排序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)不稳定冒泡排序O(n²)O(n²)O(1)稳定插入排序O(n²)O(n²)O(1)稳定这个表格值得考前过一眼因为选择题里真的会问“下面哪个排序算法是稳定的”“归并排序的空间复杂度是多少”这种看似基础但容易混淆的点。数据结构部分还有一个容易被忽略的点二叉树。笔试里出现过按层遍历的顺序判断、完全二叉树的节点计算、前序中序还原后序等。这些都是模板类知识但需要熟练到“看到就能秒选”的程度。我的建议是考前把二叉树遍历前序、中序、后序、层序的递归和迭代写法各过一遍尤其注意层序遍历用队列、迭代前序用栈这种细节。2.2 机器学习与深度学习基础从梯度消失到BN选择题里占比最大的一块是机器学习与深度学习基础。我遇到的题目包括交叉熵损失如何处理多分类问题、什么情况下使用Focal Loss、批量归一化BN在训练和推理时的差异、梯度消失产生的原因及缓解方案等。这里特别提一嘴BN。不少同学对BN的理解停留在“对上一层输出做归一化然后缩放平移”但笔试里会问到细节训练时用的是当前batch的均值和方差推理时用的是训练阶段累计的全局统计量。这个差别特别容易被忽略但它既是选择题考点也是面试常问的切入点。我在复习时专门做了个笔记训练阶段更新global mean和global variance推理阶段直接用global值做归一化不参与梯度更新。梯度消失的题目也很有代表性。题目通常给几个激活函数要求选出哪些能缓解梯度消失或者问梯度消失的原因。我自己的理解框架是链式法则连乘导致梯度递减sigmoid函数在饱和区的导数趋近于0所以深层网络用ReLU类激活函数会更稳。这个结论笔试里直接用面试时也得会解释。关于优化器选择题里出现过SGD、Adam、带动量SGD的区别。我当时重点复习了动量项的意义加速收敛、减少震荡Adam则结合了一阶动量和二阶动量自适应调整学习率。这类题陷阱在于问“Adam是否保证收敛到全局最优”时大部分情况应该选“否”因为随机目标函数和自适应学习率并不提供全局收敛保证。2.3 图像处理与视觉基础卷积尺寸、感受野与插值方法这部分是CV岗笔试的“护城河”题型也是区分候选人的一个分水岭。最基础也最高频的是卷积层输出尺寸计算。公式是output_size (input_size - kernel_size 2 * padding) / stride 1这个公式必须刻进脑子里。我考场上遇到的是输入 7×7卷积核 3×3stride2padding1算输出。代入公式(7-32)/21 16/21 4。简单但要特别注意除法是否整除以及“same”模式下的输出尺寸计算。如果题目故意设一个不能整除的尺寸往往是在考察你知不知道“以向下取整为准”还是“以向上取整为准”——torch里默认是向下取整floor但有些框架实现不同这个细节容易踩坑。感受野计算也是一道“送分但容易错”的题。我当时给自己总结了一套递推法从最后一层往前逐层推或者直接用公式RF_output RF_input (kernel_size - 1) * stride_cumulated关键是步长要连乘。比如两层3×3卷积stride都为1则输出感受野是5×5如果第二层stride是2感受野会更大。笔试时如果时间紧可以直接按“每经过一个卷积层感受野线性增加 (kernel-1)”来速算前提是前层stride都为1。双线性插值的题目也出现过。它不是直接让你手写代码而是给一个目标坐标让你结合四个邻近像素的灰度值做加权计算。我当时在草稿纸上画出水平和垂直方向的比例关系然后逐步计算。复习这个小知识点时我特意拿了一张实际灰度图在Python里跑了一遍cv2.resize用不同插值方法对比结果加深了“双线性插值是做了两次线性插值先在x方向、再在y方向”的理解。图像锐化相关的题目在热词中也有呈现拉普拉斯算子就是最典型的例子。笔试如果考锐化通常会给一个卷积核模板0 -1 0 -1 5 -1 0 -1 0这就是原图加上四邻居拉普拉斯算子的结果本质是边缘增强。如果题目让你判断某个卷积核是锐化还是模糊核心就看中心系数是否明显大于周围系数且总和是否接近1。这个判断在选择题里能救急。2.4 工程经验与场景题类别不平衡、数据增强与后处理最后的工程场景题虽然占比不高但我觉得最考验“积累”。题目往往设计成一个真实项目场景比如“检测模型在类别分布极不平衡时你会怎么处理”“训练集与测试集分布不一致怎么办”“如何设计一个提升小目标检测效果的数据增强策略”。我得到的直接经验是类别不平衡最基本的套路是重采样、调整类别权重、用Focal Loss或OHEM在线困难样本挖掘。如果题目里给的是检测任务那还可以提及调整anchor比例或增加正样本预标注。数据增强方面针对小目标比较实用的方案是复制粘贴copy-paste增强或马赛克增强mosaic把多个图像拼在一起增加目标密度。我答这类题时的方法套路是先定性说清楚“问题的本质是什么”再给出2-3个具体手段最后补一句“需要根据验证集指标来评估效果”。3. 编程题的核心思路代码能力之外的考察点3.1 编程题最常见的几种类型编程题在整张试卷中占大概30-40%的分值考法比较标准。我那个批次遇到的编程题类型大致是数组处理类找第K大、合并区间、最大子数组和字符串类字符串匹配、编辑距离图与搜索最短路、DFS/BFS模板题动态规划背包问题变体、最长递增子序列这些题对应届生来说都不算超纲但有两层隐藏考察第一是基本功熟练度第二是代码风格比如边界条件是否考虑周全、是否写出注释、命名是否可读。我个人强推的复习方式是考前把“高频模板题”刷透不追求刷题数量而追求“每个模板都能5分钟内默写出来”。常见模板包括二分查找的闭区间写法、二叉树层序遍历、拓扑排序、KMP、Dijkstra、归并排序的merge过程、快排的partition过程。能把它们写到“肌肉记忆”程度笔试编程题就没那么慌了。3.2 一道“找第K大”题目的完整复盘我那次遇到的一道编程题和“找数组中第K大的数”高度相似。题目大概是给定一个无序数组要求在不使用内置排序函数的前提下尽可能高效地返回第K大的数。输入规模没有明说但看测试数据量O(n log n)应该可行O(n²)有风险。我当时写了两种方案对比考场上的节奏是先把最简单的快排partition方案写了再根据剩余时间和题目限制决定要不要优化。这里给出一个基于快速选择QuickSelect的参考实现import random def find_kth_largest(nums, k): def partition(left, right): pivot_idx random.randint(left, right) nums[pivot_idx], nums[right] nums[right], nums[pivot_idx] pivot nums[right] i left for j in range(left, right): if nums[j] pivot: nums[i], nums[j] nums[j], nums[i] i 1 nums[i], nums[right] nums[right], nums[i] return i left, right 0, len(nums) - 1 k k - 1 # 转成索引 while True: pos partition(left, right) if pos k: return nums[pos] elif pos k: left pos 1 else: right pos - 1几个我踩过的细节随机化pivot很重要否则最坏情况退化到O(n²)。题目问“第K大”partition时用“大于pivot”放左边这样pos索引位置直接对应第(pos1)大。如果题目改成“第K小”只需要把比较符号换一下方向。如果时间宽裕我会补充一个“如果数据规模极大且内存受限”的讨论比如用大小为K的最小堆维护。这种叙述性补充有时比代码本身更能体现工程思维。3.3 编程语言选择与写法上的细节笔试系统支持的编程语言我印象里至少有C、Java、Python三种。我自己的选择是纯逻辑题用Python涉及复杂数据结构和手动内存管理倾向的题目用C。原因很简单Python写得快容易在有限时间内跑通C则更稳性能上限高但开发速度慢一些。不过有几个细节需要注意输入输出格式在线笔试系统往往要求手动读入读出要明确用sys.stdin/input()还是scanf/cin。建议固定一种输入解析模板不要考场上现推。边界样例数组长度为1、空数组、K等于数组长度这种极端情况必须提前想好。变量命名我一向建议用有意义的命名而不是a、b、c因为笔试现场回看代码时好命名能让你快速定位错误。编程题环节还有一个容易忽略的“隐形分数”——时间复杂度的说明。有些题目在解答末尾附一句“算法时间复杂度O(n)空间复杂度O(1)”之类的备注面试官看代码时会觉得你思路清晰。虽然在线评测不一定看这行字但养成这个习惯对后续面试也有帮助。4. 计算机视觉专项题模型结构、损失设计与目标检测4.1 模型结构对比从ResNet到轻量化设计深度学习在CV领域的笔试考察通常会从“你熟悉的模型”展开。网易这套题里出现了几道和模型结构相关的选择题比如ResNet的残差连接解决了什么问题、为什么比VGG更容易训练、Depthwise Separable Convolution相比普通卷积减少了多少计算量等。ResNet那道题的正确答案思维链我理一遍深层网络退化不是因为过拟合而是因为训练变得困难残差连接让梯度可以绕过非线性层直接传播至少让网络在训练初期表现得像“浅层网络恒等映射”从而缓解退化。如果你在面试里答这道题建议进一步举例说明一个34层的残差网络和一个34层的plain网络同样的训练轮次下plain网络的训练误差反而更高。选择题里如果考轻量化模型我建议准备MobileNet系列的基础概念深度可分离卷积把标准卷积拆成“逐通道卷积”加“逐点卷积”参数量和计算量大约降为标准卷积的 1/9 到 1/8取决于输出通道数。这个结论能快速响应“如何减少模型参数量”一类题目。4.2 检测与分割任务的经典考点目标检测是CV算法工程师笔试的重头戏。考察方向包括Anchor Box如何设计、NMS的作用和实现细节、IoU计算、mAP如何计算等。其中“NMS的作用”最常考我的回答框架是移除冗余检测框对同一类别的框按置信度排序选择置信度最高的框并删除与其IoU大于阈值的其他框然后迭代这个过程。IoU计算的代码笔试里可能让你现场实现也可能给几个框让你算结果def compute_iou(box1, box2): # box [x1, y1, x2, y2] x1 max(box1[0], box2[0]) y1 max(box1[1], box2[1]) x2 min(box1[2], box2[2]) y2 min(box1[3], box2[3]) inter_w max(0, x2 - x1) inter_h max(0, y2 - y1) inter_area inter_w * inter_h area1 (box1[2] - box1[0]) * (box1[3] - box1[1]) area2 (box2[2] - box2[0]) * (box2[3] - box2[1]) union_area area1 area2 - inter_area return inter_area / union_area if union_area 0 else 0关键点是不重叠时IoU为0而不是负数。我当时看完题目才发现题目里给的框坐标可能顺序不同有的给xyxy有的给xywh考场上务必先确认格式再写代码。mAP的计算也经常出现在问答题里对每个类分别算AP再对所有类取平均。AP通常基于precision-recall曲线或11点插值计算这里如果能把“召回率上升时精确率下降”的权衡关系说清楚答题质量会提升不少。4.3 问答题的“开放题”怎么答anchor、小目标、长尾笔试的问答题部分有时会出一道没有标准答案的开放题。我遇到的类似题目包括“如果目标检测中小目标检测效果差你打算怎么解决”“训练集中类别分布极不均衡怎么办”“如何设计一个数据增强策略来提升鲁棒性”。这类题我给一个“结构化答题模板”亲测好用先定义问题小目标检测难在哪低分辨率、特征提取后信息损失严重、IoU计算对像素偏移敏感。再给出方案多尺度特征融合FPN、提高输入分辨率、复制粘贴增强、针对小目标的anchor尺寸调整、增加小目标的采样权重。最后补一个验证方案在验证集上按目标尺寸分组看AP对比不同方案的提升幅度。这个模板最大的优点即使你对具体细节了解不深也能让阅卷人感受到你有工程思路而不是只会背模型名字。5. 时间分配与答题策略笔试里的隐形分差5.1 我实际用的时间分配我那次笔试把两个小时拆成了大致四块时间段任务策略前10分钟快速浏览全部题目标记简单题和难题40分钟单选题多选题先做会做的不会的凭记忆排除法40分钟编程题从最熟悉的模板题开始30分钟问答题和开放题结构化作答写关键词和公式最后5分钟复查选择题重点复查计算类题目这个安排的关键在于不把时间卡死在单个难题上。选择题里有一道手推双线性插值的题我当时算了两遍看起来浪费了5分钟但有效避免了低级计算错误。5.2 遇到不会的题怎么“抢分”笔试不像面试不会的题硬写没有意义但抢分策略是有的选择题排除法优先。先去掉明显不对的选项再在剩下两个中凭概率能明显提高命中率。编程题写出暴力解法或部分正确解法往往也能拿到部分测试样例的分数。不要一上来就追求最优解先拿分再优化。问答题把从题目中能想到的关键词、公式、步骤全部列出来即使逻辑不完整也比空白强。我答题时习惯用“第一步、第二步”的结构不仅自己好组织阅卷人也方便抓采分点。5.3 草稿纸与公式推导的使用细节在线笔试虽然用不上实体草稿纸或白板但系统往往提供一个在线编辑器或记事本。我的使用习惯是先在编辑器顶部用注释写关键公式比如卷积输出尺寸、感受野递推式、KMP的next数组定义。这样做的好处是遇到计算类题目时直接调出公式不需要重新推导。用注释写公式也有副作用有些在线平台会把这个附注写上“代码注释”计入答案但通常不会扣分。另一个常用操作把不确定的编程题用一个小测试用例先跑一遍验证思路后再提交完整代码。有些平台支持在线运行务必要利用好这个功能比直接用脑子硬想到底稳得多。5.4 复查清单我每次笔试都会留最后5分钟做一次快速复查核心顺序是所有题目是否都已作答包括不确定的选择题。编程题是否处理了数组长度为0、K越界这类边界情况。选择题里的计算题是否代入过公式验证。姓名/学号/岗位代号等基本信息是否填写正确有时候这决定成绩是否有效。这套复查看起来琐碎但确实能救回不少分。6. 备考路线与笔试后的复盘6.1 考完当晚我做的几件事笔试结束不等于可以彻底放松。我习惯在记忆还新鲜的时候用半小时左右的时间把考过的知识点记下来。比如“数据结构部分考了KMP的next数组”“选择题里出现了BN训练和推理的差异”“编程题考了找第K大”。这样做的原因是同一场招聘可能还有下一批笔试有些知识点复现率很高哪怕不为了二批笔试也能整理成一份“个人错题集”留给后续其他公司的笔试。时间充裕的话我还会把编程题在本地再写一遍加一些极端用例跑一遍。比如找第K大的题我会把k改为1、len(nums)、以及数组全一样的情况确认代码不是碰巧通过。6.2 从笔试暴露的短板倒推复习方向如果笔试里发现自己某个知识块明显薄弱后续复习就要立刻调整。比如我当时发现自己在“图像处理基础”上有疏漏插值算法、边缘检测模板虽然知道概念但计算不熟练。于是花了两个晚上把双线性插值、拉普拉斯锐化、Sobel算子做了集中练习还整理了一个小抄模板方便考前翻阅。建议大家也做一次“笔试错题归因”是知识盲区、计算不熟、答题策略不对还是时间分配失控。归因不同备考的侧重点完全不一样。完全归因于“知识盲区”的去背公式归因于“计算不熟”的就多做几道推导题归因于“时间分配”的下次直接调整做题顺序。6.3 几条通用的复习路线从我自己的备考经历来看针对网易这类大厂校招笔试可以按下面这个优先级安排复习第一优先级必拿分数据结构与基础算法尤其是数组、链表、二叉树、排序、二分、动态规划的模板题保证编程题至少有一半能快速写出。第二优先级区分度机器学习和深度学习基础概念包括损失函数、优化器、正则化、批归一化、经典CNN结构。第三优先级CV特色图像处理基础、目标检测后处理、常用CV任务评价指标、小样本和类别不平衡问题。第四优先级工程思维开放场景题这类题没有标准答案但可以通过结构化表达提升得分。另外笔试前最好在牛客网或类似平台把真实在线笔试环境模拟一遍哪怕只是看看题型和输入输出格式也不至于考场上因为操作不熟练而浪费宝贵的5分钟。6.4 笔试和后续流程的衔接笔试只是整个招聘流程的一环尤其是提前批笔试之后往往很快就进入面试环节。如果笔试通过面试官很可能直接拿着你的笔试卷子来问“这道编程题你为什么这么写”“这道开放题你再说说思路”。所以笔试结束后的复盘实质上也是为面试做的准备。我在复盘编程题时会额外想清楚各种解法的优劣比如堆方案和快选方案的空间复杂度差异、最坏情况下哪个更稳。这些内容面试时随时可能被追问。如果笔试没有通过也不用过度纠结。提前批本身就是试水很多人的笔试题量是攒出来的后续正式批还有机会。关键是每一次笔试都尽量让自己暴露问题、积累经验。6.5 一道实操题把“复习笔记”转化为“答题模板”最后分享一个小技巧。我复习时会把每个高频考点整理成“快答模板”格式是题目可能怎么问我要答的几个要点。举例题目可能怎么问如何缓解类别不平衡问题答题要点数据层面重采样、数据增强、损失函数层面Focal Loss、OHEM、评估层面使用mAP或PR曲线而非accuracy。这个模板的好处是答题时不用现场组织语言直接按清单输出既快又不容易漏点。我在考前把卷积输出尺寸、感受野计算、KMP next数组、BN训练推理差异、NMS流程、mAP计算都做了这样的模板总共大概十来个。笔试时碰到原题或变形题写起来特别快而且准确率明显提高。这个“快答模板”方法我觉得对新手尤其友好可以参考。