视频算法校招笔试复盘:从目标检测到DeepSORT的考点与避坑指南

📅 发布时间:2026/8/31 15:27:44
视频算法校招笔试复盘:从目标检测到DeepSORT的考点与避坑指南 网易2023校招提前批的笔试我是在线上完成的投递方向是视频算法工程师。两个多小时的笔试做下来最直观的感受是这个岗位的考察面比我预想的要宽不是单纯刷题就能应付的那种它同时覆盖了深度学习、图像处理、视频编解码甚至还有一小部分工程和安全相关的内容。如果你正在准备类似的视频算法校招笔试这篇复盘应该能帮你把复习范围再收敛一下少走点弯路。我会把整个笔试的考点、真题复盘、以及我当时踩过的坑全部拆开讲包括技术原理和答题思路。后面还有几道典型的代码/算法题讲解以及针对这个岗位的复习路径建议。1. 笔试前夜先搞清楚视频算法工程师在考什么1.1 岗位要求决定笔试考点很多人在复习校招笔试的时候有一个误区就是拿通用后端开发那套刷题清单来准备结果吃亏了。视频算法工程师跟纯后端开发最大的区别在于它要求你同时具备“算法模型能力”和“音视频/图像处理能力”所以笔试命题的逻辑也完全是围绕这两条线展开的。我当时投的这个方向从事业群来看很可能是网易云音乐、网易传媒或者游戏部门。这几个业务线对视频算法的需求点各不相同云音乐侧重于视频内容分析和画质优化传媒偏向视频编解码和传输优化游戏部门则更看重渲染合成、图像增强、以及AI相关的视频生成。但校招笔试通常不会分得这么细它更倾向于考“公共底座”也就是不管你最终去哪个部门都应该掌握的通用视频算法能力。这个“公共底座”拆开来看主要有四块第一计算机视觉与深度学习基础包括目标检测、目标跟踪、图像分类、卷积网络结构第二视频编解码与封装格式知识比如H.264、GOP、I/P/B帧、TS和MP4的区别第三数据结构与算法编程能力笔试里会有一到两道代码题需要用C或Python现场手写第四工程落地思维会让你针对一个视频场景设计技术方案考察你考虑问题是否全面。备考阶段如果只盯着深度学习不看视频编码笔试容易懵反过来只抠视频编码不练模型手推和手写代码也拿不到分。建议把复习时间按6:3:1分配六成深度学习视觉三成视频编码一成通用编程和工程方案。1.2 网易笔试的题型分布与时间分配网易2023校招提前批的笔试时长大约在120分钟到150分钟之间具体科目不同会有差异。以我当时参加的场次为例题型分三块单选题/多选题、编程题、简答/设计题。选择题一般放在最前面大概20道左右。内容覆盖很杂有机器学习基础损失函数、优化器、正则化、深度学习网络结构感受野、参数量、BN层、图像处理基础滤波、边缘检测、色彩空间、视频编码码率、帧类型、GOP。这部分建议控制在30分钟内完成不会的题快速标记不要在单选题上纠结太久因为后面的简答题分值更高也更需要时间组织语言。编程题通常有两道一道偏算法比如动态规划或数组操作一道偏视觉/视频处理比如手写NMS、图像缩放插值、目标跟踪的级联匹配。大部分在线笔试环境支持Python/C/Java我选的是Python效率高一些但如果你主攻C也完全没问题关键是速度和正确性。简答/设计题是最能拉开差距的部分一般是两到三题。题目形式会很贴近实际业务比如“请设计一个视频目标跟踪方案”“如何对一个视频流进行内容审核”甚至还会给一段实际项目的背景让你分析。这种题没有标准答案考察的是你的知识广度和工程思维。我当时给自己的时间分配是选择题30分钟、编程题40分钟、简答设计题40分钟剩下时间检查。2. 核心考点拆解从图像基础到目标跟踪2.1 图像与视频基础笔试里的“送分题”和“送命题”视频算法笔试中图像与视频基础概念的出现频率极高。这些题说送分也送分说送命也送命取决于你对底层原理的理解程度。图像方面色彩空间是必考项。RGB、YUV、HSV之间为什么要互相转换在视频编码里为什么优先用YUV核心原因是人眼对亮度Y的分辨率比对色度U/V的敏感度高得多把色度做下采样如4:2:0可以在肉眼几乎无感知的情况下压缩掉一半数据。笔试有时候会给你一张图让你分析它是什么色彩空间下的或者问你YUV 4:2:0和4:4:4的码率差异是多少。我当时遇到一道题1080p、8bit、YUV 4:2:0一帧原始数据是多少字节答案不是1920×1080×3正确计算是亮度分辨率1920×1080×1字节加上色度每像素0.5字节合计1920×1080×1.5字节大概3.1MB。很多人在这道题上栽了。视频方面帧内编码和帧间编码是绝对的重点。I帧是帧内编码帧不依赖其他帧可作为随机访问点P帧参考前面的帧B帧参考前后两个方向的帧。笔试很喜欢考一个概念GOPGroup of Pictures问GOP长度对码流的影响。答案是GOP越长帧间编码效率越高压缩率越好但随机访问能力和纠错能力变差。具体到直播场景GOP过大会导致开播秒开时间变长具体到点播场景GOP过长则拖不动拖拽进度。所以笔试作答时不能只写定义要结合业务场景说清楚取舍得分的概率会高很多。2.2 目标检测笔试中的“必答题”目标检测几乎是视频算法岗位笔试的必考模块因为它是视频分析的基础跟踪需要检测初始化内容审核需要检测违规物视频推荐需要检测封面主体。笔试里对目标检测的考察分两个层面。第一个层面是模型结构对比。Faster R-CNN、YOLO系列、SSD、以及Anchor-Free的FCOS各自的特点和适用场景需要能背能讲。我的记忆方法是抓住一条主线两阶段检测器精度高但速度慢适合离线分析任务单阶段检测器速度快但精度相对低适合在线实时任务。笔试遇到“在移动端做实时目标检测选什么方案”这类题时答案方向基本就是YOLO家族加轻量化骨干MobileNet、ShuffleNet再加量化剪枝。第二个层面是手推与计算。感受野的计算公式、特征图尺寸随卷积/池化的变化、IoUIntersection over Union计算、NMSNon-Maximum Suppression过程的实现都是高频考点。我笔试时遇到一道编程题要求手写NMS核心逻辑是先按置信度排序选最高分框删除与它IoU超过阈值的框然后对剩余框重复操作。这道题本身不难但如果平时只调包没有自己实现过一遍考场上就会卡壳。2.3 目标跟踪从SiamRPN到Transformer目标跟踪是视频算法方向最具辨识度的考点对应社会上讨论很多的“基于深度学习的视频目标跟踪算法研究”。笔试不会让现场实现一个完整的跟踪器但一定会考跟踪问题怎么定义、主流方法有哪些、和检测的区别是什么。先搞清楚一个关键区别目标检测是每帧独立做检测无时间相关性目标跟踪则是利用帧间的时间连续性在视频序列中持续定位目标需要在连续帧中保持目标的ID。跟踪任务又分单目标跟踪和多目标跟踪笔试问到多目标跟踪时除了要讲检测器还必须讲数据关联Data Association。SiamRPN是经典的孪生网络跟踪架构。它的思路是用模板分支提取第一帧目标的特征用搜索分支提取后续帧的区域特征两个分支之间做互相关得到响应图再通过RPNRegion Proposal Network回归目标框和置信度。这类方法的优势是速度快在CPU上也能跑出不错的帧率适合单目标跟踪场景。我当时准备笔试时把SiamRPN的loss函数分类分支交叉熵回归分支Smooth L1 Loss和训练策略都背了一遍笔试选择题里真的考到了Smooth L1和L1、L2的区别。多目标跟踪现在的主流范式是Tracking-by-Detection也就是先检测后关联。DeepSORT是绕不开的代表方案它用卡尔曼滤波器预测目标在下一帧的位置和运动状态用匈牙利算法做匹配再用外观特征计算余弦距离来辅助ID关联。这块在后面代码题部分我还会展开讲。至于Transformer在跟踪中的应用笔试一般考概念把目标跟踪看作查询问题parse object queries利用注意力机制建模长距离关联。你不需要把论文每个细节背下来但要知道它解决了传统方法在遮挡、相似目标干扰下的局限。3. 代码题实录现场手撕DeepSORT与算法原理题3.1 一道关于多目标跟踪的编程题我在笔试当天的编程题里遇到了一道跟多目标跟踪框架有关的题要求实现DeepSORT中“动态匹配级联匹配”的一部分逻辑。题目给了一个场景有若干个已跟踪的轨迹track和当前帧检测到的目标detection每个track有一个连续丢失帧数time_since_update每个track和每个detection之间有一个代价矩阵cost matrix要求你完成匹配过程。这道题考察的不只是你会不会背公式而是你能否理解级联匹配的意义。DeepSORT之所以要“级联”是因为如果一个目标被遮挡了很久它的卡尔曼预测位置会越来越不可靠此时如果仍然用全局的匈牙利匹配它可能会抢走其他更可靠track的匹配机会。级联匹配的做法是按time_since_update从小到大排序优先为最近更新过的track分配detection把“老轨”放在后面处理这样就减少了ID Switch。结合代码实现我当时写的大致框架是这样的def cascade_match(tracks, detections, cost_matrix, max_age70): # 按time_since_update升序排列track索引 track_indices [i for i in range(len(tracks)) if tracks[i].time_since_update 0] unmatched_detections set(range(len(detections))) matches [] for t_idx in track_indices: # 用匈牙利算法在当前track和剩余detection之间匹配 row_indices, col_indices linear_assignment(cost_matrix[t_idx, unmatched_detections]) for r, c in zip(row_indices, col_indices): if cost_matrix[t_idx, c] threshold: matches.append((r, c)) unmatched_detections.remove(c) return matches, unmatched_detections注意这里有一个关键点匹配的阈值threshold不是越大越好也不是越小越好。阈值太大会引入错误关联导致ID Switch阈值太小会漏匹配导致轨迹断裂。DeepSORT原论文里一般用马氏距离和外观余弦距离的加权和阈值选在0.3上下。笔试的时候把这一点解释清楚比代码本身更重要因为面试官想看到的是“你懂原理”而不是“你会抄函数”。3.2 视频编解码与封装格式题计算机视觉之外的另一大块是音视频基础占比约三成。前面提到我遇到了一道YUV一帧数据量的计算题这算是基础了。编程题里还考过一道和H.264推流有关的给你一个视频文件要求判断它的编码类型和关键帧间隔。这道题的思路其实不复杂用FFprobe命令看编码格式和GOP大小。但在笔试环境下没有终端只能靠对封装结构的基础理解来答。比如MP4的核心结构是Box如moov、mdatmoov里存元数据mdat里存媒体数据TS流的特征则是以188字节为一包包里有PID标识音频/视频。我当时在简答题里写的是封装格式对比MP4适合点播因为moov可以前置支持快速seekTS适合直播和流媒体传输因为包结构固定支持错误恢复。如果笔试中让你设计一个视频传输方案一定要提到GOP、关键帧间隔、码率控制方式CBR/VBR/ABR。CBR是恒定码率网络波动容忍性好但画质不均匀VBR是可变码率压缩效率高但直播场景容易卡顿ABR是平均码率介于两者之间。这些概念不背不行更重要的是记住适用范围直播多用CBR或ABR点播VBR为主。3.3 工程落地题模型量化与部署优化笔试的最后一道简答题不出意外是工程方案设计。给我的是这个场景一个视频目标检测模型要在移动端实时运行模型原始大小180MB单帧推理耗时120ms现在要求模型压到50MB以内推理耗时低于30ms你怎么做这类题表面是技术方案实质上考察你是否具备端侧视频算法的实战经验。答案是分三步走模型选型、模型压缩、框架加速。先把模型结构换成轻量网络。把原本可能是ResNet-50甚至更大的骨干替换为MobileNetV3或EfficientNet-Lite这一步能最直接地把计算量降一个数量级。再用知识蒸馏拿大模型当老师让小模型学大模型的输出能在保持精度的前提下进一步缩小结构。接着做量化。INT8量化是移动端推理的标配权重从FP32变到INT8体积直接压缩到原来的四分之一。但量化不是无脑做需要做校准Calibration用一小部分代表性数据统计每个激活层的数值范围再根据范围确定缩放因子。校准数据选不好量化后精度会掉得很难看。我当时写方案时还专门提了一句如果模型内部有对数值范围敏感的层比如检测层的回归头需要对这些层做混合精度保留FP16或FP32。最后是推理框架选型。移动端一般用NCNN或者MNNGPU接入腾讯的TNN也行。利用框架的算子融合、内存复用和SIMD指令加速单纯换框架往往就能获得1.5到2倍的加速。另外还可以做硬件层面优化比如线程数调整、OpenCL跑GPU、或者部分层用NPU加速。这个方案的逻辑链条是结构变轻精度回退推理加速三者缺一不可。4. 那道关于视频加密的题从cks到签名算法的思路4.1 视频防盗链的基础原理笔试里有一道题让我印象很深视频网站的播放地址如何防止被恶意抓取和随意分享当时技术圈里确实有人在讨论一些视频站点的签名算法实现比如CK$这种基于时间戳和参数拼接的签名方式。题目没有指名道姓但它想考的就是“签名算法”在视频安全里的作用。视频防盗链的常见做法是URL签名URL Signature。原理很简单客户端发起播放请求时服务器根据一系列参数请求时间、用户ID、视频ID、过期时间、IP等拼接成字符串再通过不可逆的摘要算法如MD5、SHA-256或对称加密如AES/DES生成一个签名串拼到播放URL后面。服务端收到请求后用同样的算法重新计算签名再与URL带上来的签名比对。如果不一致说明URL被篡改过如果过期时间小于当前时间说明链接已经失效。为什么需要把签名算法设计得很隐蔽核心原因是服务器在明处客户端在暗处如果签名规则太简单攻击者拿到几个样本就能逆推出规则。所以成熟的方案会在签名中加入随机的动态因子让每次生成的URL都不一样同时把过期时间压得很短比如CDN鉴权链接只给10到30分钟的有效期。这样即使URL被泄露出去了别人也拿不到能成功播放的链接。4.2 防篡改与时效性两道笔试变体题笔试的简答通常会给一个变体场景我记得当时还有一个配套问题是如果有用户把视频的播放链接发到了公开群里如何让这个链接在短时间内自动失效这个问题的答案有两个层次。第一层是常规的过期时间校验也就是前面提到的URL中携带ts参数服务端判断当前时间是否超过ts 有效期。第二层是单IP绑定把签名和首次请求的IP绑定如果同一个签名突然在不同地区多个IP上被大量请求就判定为异常自动拉黑。还有一道变体题是如果视频是付费内容怎么做用户级别的授权这个就要结合用户ID和内容ID生成专属的签名串并且把签名跟登录态Token绑定。即使用户把URL分享给别人别人没有这个用户的Token也拿不到视频流。这也就是为什么很多视频网站的分享链接在未登录状态打不开或者是打开后只能看预览片段的底层原因。笔试答题时建议从三个维度去组织答案身份认证是谁在访问、时效控制还能访问多久、数据防篡改URL参数有没有被改过。这三个维度对应三个技术实现用户Token校验、过期时间戳、HMAC签名。把这三个点答全基本就能拿到这个题的绝大部分分值。4.3 从算法角度看视频安全还有一个值得展开的点是视频安全不仅包括防盗链还包括内容安全审核。近两年校招的笔试里内容安全方向的出现频率明显上升。“视频内容审核系统如何检测违规片段”这类题目的思路是先抽帧一般是1秒抽1到2帧然后做图像分类/目标检测检测到可疑目标后再用音视频指纹做二次确认最后结合上下文时间序列判断是否违规。核心是把单帧的图像模型和跨帧的视频序列模型结合起来。所以视频算法工程师的“安全”职责其实是分两块的一块是防止内容被外部非法获取对应编码加密、签名鉴权另一块是防止非法内容进入平台对应内容审核、异常检测。笔试如果出了相关内容答题时把这些维度全面地写出来会让面试官觉得你对这个岗位的理解是有广度的。5. 复盘与避坑提前批考生最容易踩的坑5.1 五大高频失误点笔试结束后我回忆了一下整个答题过程再结合其他同学的反馈总结出五个最容易丢分的地方。第一基础概念背得含糊。比如I/B/P帧的编码参考关系、感受野的递推公式、YUV采样格式的码率计算这些必须能在没有参考资料的条件下纯手算。很多人只记住了结论没记住推导遇到稍微偏一点的题就露馅。第二代码题卡在输入输出。很多在线笔试平台要求自己处理输入输出常见坑是忽略了多组测试样例、或者字符串读取有空格导致解析失败。多目标跟踪那道题里输入是一个二维代价矩阵很多人不知道用Python的sys.stdin读取整数矩阵导致后面逻辑写对也白搭。建议备考时把所有常用输入解析方式写成模板考试直接复制。第三损失函数与正向传播推得不熟。深度学习题不会只问选择常常会让你推一个Loss对输入的梯度。Smooth L1 Loss在|x|1时梯度为±1在|x|1时梯度等于x这个推导要多练几遍。第四只准备模型不准备编解码。视频算法岗位天然要求音视频基础这个坑最明显。如果你连GOP和关键帧间隔都讲不清笔试分数会被拉低很多即使深度学习再好也很难补回来。第五简答题不写思路只写结论。网易的笔试简答是“按点得分”的每给出一个可行性方案或者说出一个取舍原因就能得一部分分。比如设计移动端实时检测方案哪怕你不确定具体量化参数也要写出“INT8量化”“模型蒸馏”“NCNN部署”这些关键词用完善的逻辑链条把答案撑起来。5.2 复习路径建议如果你还有两到三周时间准备这类笔试建议按下面的节奏来规划。第一周主攻视觉基础。把经典网络的VGG/ResNet/Faster R-CNN/YOLO系列梳理一遍重点把特征图尺寸变化、感受野计算、IoU/NMS手写代码练熟同时把总损失函数的梯度推导做一遍。第二周主攻视频专项。学习H.264/H.265的编码结构、GOP、码率控制理解TS/MP4/FLV封装格式。可以实际用FFmpeg压一份视频观察不同GOP、码率下的输出差异用实践带动记忆。目标跟踪方面至少要把SORT/DeepSORT的核心代码跑通一遍理解了卡尔曼滤波和匈牙利匹配的流程面试题基本就都覆盖到了。第三周主攻编程与方案设计。每天刷1到2道中等难度算法题重点练习贪心、动态规划和二分查找这些是视频算法笔试中的常客。同时每天写两道方案设计题模拟“在某个视频场景下设计方案”的答题套路训练自己按“需求分析→方案设计→关键细节→兜底策略”的结构化思维。第四周如果还有时间就把模拟笔试做起来严格卡时间训练自己在压力下快速分配答题顺序。模拟的时候可以重点练练在两小时内同时完成选择题、代码题和简答题的节奏。视频算法笔试最考验的不是单点深度而是你在有限时间内能否把多个方向的知识快速调动起来。这个技能不是临场能发挥出来的全靠备考期的刻意练习。5.3 一个实用的小技巧最后分享一个笔试中的实战技巧拿到编程题先不要急着写代码先在草稿箱或者注释区把时间复杂度和边界条件写出来。视频算法方向的代码题往往带有矩阵或数组输入边界条件很容易踩坑比如检测框坐标越界、代价矩阵为空、track列表初始化状态下卡尔曼滤波的维度不匹配。把这些问题在写代码之前用注释列出来边写边对照能降低至少三成的Bug率。我在笔试时就是用这个策略多目标跟踪那道题在写主循环之前先写了两个辅助函数一个是计算框的IoU一个是读入矩阵并转成代价矩阵。这两个函数写完主逻辑就顺理成章了。笔试表面上考的是你会不会实际上考的是你有没有工程习惯。一个平时习惯了在动手前想清楚边界条件的候选者天然比上来就埋头写的人更有优势。这个习惯不仅笔试有用以后做实际项目一样受用。