计算机视觉算法工程师面试题及答题要点
CV算法岗面试通常 3-5 轮:1-2 轮技术面(基础+项目深挖+手撕代码)、1 轮交叉面或主管面、1 轮 HR 面。重点考项目真实性、深度学习基础和代码能力,最容易挂在项目细节被追问三层答不上来,以及手撕代码紧张写崩。
专业基础
讲一下卷积神经网络里感受野是什么,怎么计算的?
考察点:考察对 CNN 基本机制的理解是否扎实,能否推导而非背概念。
- 先给定义:某一层特征图上一个像素对应输入图像的区域大小。
- 给出递推公式:第 l 层感受野 =(第 l-1 层感受野 -1)× stride + kernel size,能现场推一层。
- 补充实际意义:感受野决定了网络能看到的上下文范围,与目标尺度匹配很重要。
- 可延伸:空洞卷积能在不增加参数的情况下扩大感受野。
别踩:只背定义不会推导,或把 stride 和 kernel size 的作用说反。
目标检测里 one-stage 和 two-stage 的区别是什么?各自的代表算法?
考察点:考察检测算法体系的知识框架,是否理解精度和速度的权衡。
- two-stage 先生成候选框再分类回归,代表是 Faster R-CNN 系列,精度通常更高。
- one-stage 直接回归框和类别,代表是 YOLO、SSD 系列,速度快适合部署。
- 说清权衡点:正负样本极度不均衡导致 one-stage 精度损失,Focal Loss 是针对这个的改进。
- 最好补一句自己实际用过哪类、在什么场景下选的哪种。
别踩:只报算法名说不出权衡原因,显得是背的而非用过。
过拟合你是怎么判断和处理的?
考察点:考察工程实践经验,是否真的训过模型、看过训练曲线。
- 判断:训练集指标持续上升但验证集指标停滞或下降,训练损失远低于验证损失。
- 处理按优先级说:先加数据或数据增强,再考虑正则化(weight decay、dropout)。
- 模型层面:减小网络规模、early stopping、用预训练权重微调。
- 强调会先排查数据泄漏,这是比过拟合更常见的假象。
别踩:把所有方法一口气罗列,没有优先级和判断依据。
BN 层的作用是什么?训练和推理时行为有什么不同?
考察点:考察基础细节,这是区分「用过」和「理解」的经典题。
- 作用:对每层输入做标准化,缓解内部协变量偏移,加速收敛,允许更大学习率。
- 训练时用当前 batch 的均值方差,推理时用训练阶段累积的移动平均。
- 说明为什么推理要用统计量:batch 不稳定,且部署时可能是单样本推理。
- 可延伸:batch 很小时 BN 统计量不准,可用 GroupNorm 替代。
别踩:说不清训练和推理的区别,或不知道移动平均统计量这回事。
项目经历深挖
挑一个你最熟悉的项目,讲讲你负责的部分和最终效果。
考察点:考察表达结构、项目真实性和个人贡献边界。
- 用「背景-任务-方案-结果」结构,控制在两分钟内,先讲清业务问题。
- 量化结果:mAP 提升多少、推理耗时降到多少毫秒、覆盖多少场景。
- 明确说「我做了什么」而不是「我们做了什么」,贡献边界要清楚。
- 留一两个有深度的细节不讲,等面试官追问时展开。
别踩:讲成流水账,全程「我们」,听不出你个人的贡献。
这个项目里你遇到最大的困难是什么,怎么解决的?
考察点:考察解决真实问题的能力,验证项目是不是你亲手做的。
- 选一个技术性强的真问题,比如小目标漏检、恶劣光照下误检。
- 讲排查过程:怎么定位原因(可视化、分场景统计错误分布),体现方法论。
- 讲尝试过的失败方案和为什么失败,失败的尝试最能证明真实性。
- 最后给量化的改进结果,形成闭环。
别踩:编一个「加班努力就解决了」的故事,没有技术细节,一追问就露馅。
为什么这个项目选这个模型/方案,而不是别的?
考察点:考察技术选型的思考能力,是否做过对比实验。
- 从约束条件出发:算力预算、延迟要求、精度目标、数据量大小。
- 给出至少一个被否掉的备选方案及否掉的理由,说明做过权衡。
- 有对比实验数据最好,没有就说清理论上的判断依据。
- 承认方案的不足和后续可优化点,显得客观。
别踩:只说「这个模型效果最好」,说不出当时有哪些备选和权衡逻辑。
如果让你重新做这个项目,你会改进哪些地方?
考察点:考察复盘能力和技术视野,看你是执行者还是有全局思考的人。
- 准备 2-3 个具体改进点,分数据、模型、工程三个维度各想一个。
- 每个改进点说明预期收益和代价,比如「数据侧补采困难场景,预计小目标召回能提」。
- 不要全盘否定原方案,说明当时的约束条件下已是合理选择。
- 如果已部分落地,提一句进展,加分明显。
别踩:说「都挺好的没什么可改」,或反过来把原项目贬得一文不值。
代码手撕与算法
手写一个 NMS(非极大值抑制)的实现。
考察点:CV 岗最高频手撕题,考察代码基本功和对检测流程的理解。
- 先口述思路再写:按置信度排序,取最高分框,删掉与它 IoU 超阈值的框,循环。
- 注意边界:空输入、按类别分别做 NMS、坐标顺序约定。
- IoU 计算单独写一个函数,交集面积注意 max(0, ...) 防负数。
- 写完主动跑一个两三个框的小例子验证,展示严谨习惯。
别踩:直接埋头写不口述思路,交集坐标算错(写成 min-max 混用)。
写代码实现 IoU 的计算,然后问怎么改成 GIoU / DIoU?
考察点:从基础题延伸,考察对检测回归损失演进的理解。
- IoU 部分注意交集为空时返回 0,除零保护。
- GIoU:在 IoU 基础上减去最小外接矩形面积与并集面积之差的比例。
- 说清动机:IoU 为 0 时梯度消失,GIoU 能提供优化方向。
- DIoU 再加中心点距离惩罚,CIoU 再加长宽比一致性,演进逻辑讲清楚即可。
别踩:IoU 写对了但说不清为什么要改进,只记得名字记不住公式含义。
给一个数组相关的算法题,比如滑动窗口或双指针。
考察点:考察通用算法能力,大厂 CV 岗也常考 LeetCode 中等难度题。
- 先确认输入范围和边界条件,再说思路,思路认可后再写。
- 写的时候保持变量命名清晰,i、j 的含义说清楚。
- 写完主动逐行检查一遍,再给时间复杂度分析。
- 卡住时说出当前的思路和卡点,不要长时间沉默。
别踩:不确认条件就开写,改来改去越写越乱;或卡住时完全沉默不沟通。
工程与部署
模型训练完了,怎么把它部署到线上?你了解哪些加速手段?
考察点:考察算法到落地的完整链路认知,很多公司要算法工程师懂部署。
- 讲链路:模型导出、转换格式、量化/剪枝、推理引擎、服务化接口。
- 加速手段分层说:工程层面如半精度推理、算子融合;模型层面如剪枝、蒸馏。
- 量化重点讲:INT8 量化的原理和精度损失怎么评估。
- 有实际部署经验就讲具体踩过的坑,没有就诚实说训练侧为主、了解原理。
别踩:只说「用某个框架就行」,讲不出量化和剪枝的区别与代价。
线上模型效果变差了,你怎么排查?
考察点:考察线上问题的系统排查思维,这是真实工作里最常见的事。
- 先确认范围:是整体掉点还是特定场景掉点,拉分场景指标。
- 对比线上数据分布和训练数据分布,大概率是分布偏移或新场景未覆盖。
- 检查输入链路:预处理是否一致、图像质量、分辨率、编码问题。
- 给出闭环方案:bad case 回流、标注、增量训练或数据增强补齐。
别踩:只回答「重新训练一下」,没有排查分层的思路。
数据标注质量差、标注量不够,你怎么办?
考察点:考察数据侧的工程手段,CV 岗一半工作在数据上。
- 先做标注质量审计:抽样检查、一致性检验,量化脏数据比例。
- 用模型预标注降低人工成本,人工只做校验和修正。
- 数据不够时:自监督/半监督、合成数据、难例挖掘回流。
- 说明会评估每条路线的成本收益,而不是无脑选最贵的。
别踩:只说「让标注团队重标」,显得没接触过数据侧的实际工作。
行为面试与 HR 面
你为什么想从上家公司离开?
考察点:考察稳定性和动机,判断你会不会很快再跳。
- 归因于发展诉求:想深耕的方向、更大的业务场景、更完整的算法链路。
- 不说前公司坏话,不提与领导同事的矛盾。
- 把离职原因和目标公司的优势对上,形成合理逻辑。
- 准备好被追问「为什么是我们公司」的答案。
别踩:抱怨加班、薪资、领导,或说「想换个环境」这种空泛理由。
和工程/产品同事在方案上有分歧,你怎么处理?举真实例子。
考察点:考察协作方式,算法岗经常要和工程团队拉扯资源与方案。
- 用 STAR 结构讲一个真实冲突,分歧点要具体(如精度与延迟的取舍)。
- 展示做法:先对齐目标,用数据说话,做对比实验代替口头争论。
- 结果上体现双方各退一步或找到更优解,不是「我说服了他们」。
- 总结一句方法论:对齐目标比争对错重要。
别踩:讲成「都是对方不懂技术」,或例子太假一听就是编的。
你的期望薪资是多少?
考察点:考察自我定位是否清晰,以及谈判成熟度。
- 先给区间不给单点,区间下限是你真实能接受的数。
- 参考依据:当前薪资基数、同级别市场行情、面试表现,说明这是综合判断。
- 表达弹性:薪资之外也看重方向和成长,但不要说「多少都行」。
- 被压价时问清总包结构:base、绩效、股票/期权、调薪机制。
别踩:报一个远超行情的数不解释依据,或一被压就立刻大幅让步。
面试准备清单
| 什么时候 | 要做什么 |
|---|---|
| 面试前 3 天 | 把简历上每个项目按「背景-任务-方案-结果-踩坑」重写一遍,每个项目准备 3 个可深挖的技术细节,量化指标背熟。 |
| 面试前 3 天 | 过一遍高频基础题:感受野计算、BN、IoU/NMS/GIoU 系列、one-stage vs two-stage、常见损失函数,能白板推导的练到能白板写。 |
| 面试前 1 天 | 手撕练习:NMS、IoU、翻转链表类基础题各限时写一遍,重点练「边说思路边写」的习惯。 |
| 面试前 1 天 | 查目标公司的业务方向和近期技术动态,准备「为什么选我们」和「你能带来什么」的答案,各 30 秒版本。 |
| 面试当天 | 准备 3 个反问问题:团队当前的技术挑战、入职后前三个月的期望、数据标注和算力资源情况。避免一上来就问薪资福利。 |
| 面试当天 | 线上面试提前测试设备、准备白纸和笔(手撕可能要求开摄像头写);现场面试带几份纸质简历。 |