vinqi.com

计算机视觉算法工程师面试题及答题要点

CV算法岗面试通常 3-5 轮:1-2 轮技术面(基础+项目深挖+手撕代码)、1 轮交叉面或主管面、1 轮 HR 面。重点考项目真实性、深度学习基础和代码能力,最容易挂在项目细节被追问三层答不上来,以及手撕代码紧张写崩。

专业基础

讲一下卷积神经网络里感受野是什么,怎么计算的?

考察点:考察对 CNN 基本机制的理解是否扎实,能否推导而非背概念。

答题要点:
  1. 先给定义:某一层特征图上一个像素对应输入图像的区域大小。
  2. 给出递推公式:第 l 层感受野 =(第 l-1 层感受野 -1)× stride + kernel size,能现场推一层。
  3. 补充实际意义:感受野决定了网络能看到的上下文范围,与目标尺度匹配很重要。
  4. 可延伸:空洞卷积能在不增加参数的情况下扩大感受野。

别踩:只背定义不会推导,或把 stride 和 kernel size 的作用说反。

目标检测里 one-stage 和 two-stage 的区别是什么?各自的代表算法?

考察点:考察检测算法体系的知识框架,是否理解精度和速度的权衡。

答题要点:
  1. two-stage 先生成候选框再分类回归,代表是 Faster R-CNN 系列,精度通常更高。
  2. one-stage 直接回归框和类别,代表是 YOLO、SSD 系列,速度快适合部署。
  3. 说清权衡点:正负样本极度不均衡导致 one-stage 精度损失,Focal Loss 是针对这个的改进。
  4. 最好补一句自己实际用过哪类、在什么场景下选的哪种。

别踩:只报算法名说不出权衡原因,显得是背的而非用过。

过拟合你是怎么判断和处理的?

考察点:考察工程实践经验,是否真的训过模型、看过训练曲线。

答题要点:
  1. 判断:训练集指标持续上升但验证集指标停滞或下降,训练损失远低于验证损失。
  2. 处理按优先级说:先加数据或数据增强,再考虑正则化(weight decay、dropout)。
  3. 模型层面:减小网络规模、early stopping、用预训练权重微调。
  4. 强调会先排查数据泄漏,这是比过拟合更常见的假象。

别踩:把所有方法一口气罗列,没有优先级和判断依据。

BN 层的作用是什么?训练和推理时行为有什么不同?

考察点:考察基础细节,这是区分「用过」和「理解」的经典题。

答题要点:
  1. 作用:对每层输入做标准化,缓解内部协变量偏移,加速收敛,允许更大学习率。
  2. 训练时用当前 batch 的均值方差,推理时用训练阶段累积的移动平均。
  3. 说明为什么推理要用统计量:batch 不稳定,且部署时可能是单样本推理。
  4. 可延伸:batch 很小时 BN 统计量不准,可用 GroupNorm 替代。

别踩:说不清训练和推理的区别,或不知道移动平均统计量这回事。

项目经历深挖

挑一个你最熟悉的项目,讲讲你负责的部分和最终效果。

考察点:考察表达结构、项目真实性和个人贡献边界。

答题要点:
  1. 用「背景-任务-方案-结果」结构,控制在两分钟内,先讲清业务问题。
  2. 量化结果:mAP 提升多少、推理耗时降到多少毫秒、覆盖多少场景。
  3. 明确说「我做了什么」而不是「我们做了什么」,贡献边界要清楚。
  4. 留一两个有深度的细节不讲,等面试官追问时展开。

别踩:讲成流水账,全程「我们」,听不出你个人的贡献。

这个项目里你遇到最大的困难是什么,怎么解决的?

考察点:考察解决真实问题的能力,验证项目是不是你亲手做的。

答题要点:
  1. 选一个技术性强的真问题,比如小目标漏检、恶劣光照下误检。
  2. 讲排查过程:怎么定位原因(可视化、分场景统计错误分布),体现方法论。
  3. 讲尝试过的失败方案和为什么失败,失败的尝试最能证明真实性。
  4. 最后给量化的改进结果,形成闭环。

别踩:编一个「加班努力就解决了」的故事,没有技术细节,一追问就露馅。

为什么这个项目选这个模型/方案,而不是别的?

考察点:考察技术选型的思考能力,是否做过对比实验。

答题要点:
  1. 从约束条件出发:算力预算、延迟要求、精度目标、数据量大小。
  2. 给出至少一个被否掉的备选方案及否掉的理由,说明做过权衡。
  3. 有对比实验数据最好,没有就说清理论上的判断依据。
  4. 承认方案的不足和后续可优化点,显得客观。

别踩:只说「这个模型效果最好」,说不出当时有哪些备选和权衡逻辑。

如果让你重新做这个项目,你会改进哪些地方?

考察点:考察复盘能力和技术视野,看你是执行者还是有全局思考的人。

答题要点:
  1. 准备 2-3 个具体改进点,分数据、模型、工程三个维度各想一个。
  2. 每个改进点说明预期收益和代价,比如「数据侧补采困难场景,预计小目标召回能提」。
  3. 不要全盘否定原方案,说明当时的约束条件下已是合理选择。
  4. 如果已部分落地,提一句进展,加分明显。

别踩:说「都挺好的没什么可改」,或反过来把原项目贬得一文不值。

代码手撕与算法

手写一个 NMS(非极大值抑制)的实现。

考察点:CV 岗最高频手撕题,考察代码基本功和对检测流程的理解。

答题要点:
  1. 先口述思路再写:按置信度排序,取最高分框,删掉与它 IoU 超阈值的框,循环。
  2. 注意边界:空输入、按类别分别做 NMS、坐标顺序约定。
  3. IoU 计算单独写一个函数,交集面积注意 max(0, ...) 防负数。
  4. 写完主动跑一个两三个框的小例子验证,展示严谨习惯。

别踩:直接埋头写不口述思路,交集坐标算错(写成 min-max 混用)。

写代码实现 IoU 的计算,然后问怎么改成 GIoU / DIoU?

考察点:从基础题延伸,考察对检测回归损失演进的理解。

答题要点:
  1. IoU 部分注意交集为空时返回 0,除零保护。
  2. GIoU:在 IoU 基础上减去最小外接矩形面积与并集面积之差的比例。
  3. 说清动机:IoU 为 0 时梯度消失,GIoU 能提供优化方向。
  4. DIoU 再加中心点距离惩罚,CIoU 再加长宽比一致性,演进逻辑讲清楚即可。

别踩:IoU 写对了但说不清为什么要改进,只记得名字记不住公式含义。

给一个数组相关的算法题,比如滑动窗口或双指针。

考察点:考察通用算法能力,大厂 CV 岗也常考 LeetCode 中等难度题。

答题要点:
  1. 先确认输入范围和边界条件,再说思路,思路认可后再写。
  2. 写的时候保持变量命名清晰,i、j 的含义说清楚。
  3. 写完主动逐行检查一遍,再给时间复杂度分析。
  4. 卡住时说出当前的思路和卡点,不要长时间沉默。

别踩:不确认条件就开写,改来改去越写越乱;或卡住时完全沉默不沟通。

工程与部署

模型训练完了,怎么把它部署到线上?你了解哪些加速手段?

考察点:考察算法到落地的完整链路认知,很多公司要算法工程师懂部署。

答题要点:
  1. 讲链路:模型导出、转换格式、量化/剪枝、推理引擎、服务化接口。
  2. 加速手段分层说:工程层面如半精度推理、算子融合;模型层面如剪枝、蒸馏。
  3. 量化重点讲:INT8 量化的原理和精度损失怎么评估。
  4. 有实际部署经验就讲具体踩过的坑,没有就诚实说训练侧为主、了解原理。

别踩:只说「用某个框架就行」,讲不出量化和剪枝的区别与代价。

线上模型效果变差了,你怎么排查?

考察点:考察线上问题的系统排查思维,这是真实工作里最常见的事。

答题要点:
  1. 先确认范围:是整体掉点还是特定场景掉点,拉分场景指标。
  2. 对比线上数据分布和训练数据分布,大概率是分布偏移或新场景未覆盖。
  3. 检查输入链路:预处理是否一致、图像质量、分辨率、编码问题。
  4. 给出闭环方案:bad case 回流、标注、增量训练或数据增强补齐。

别踩:只回答「重新训练一下」,没有排查分层的思路。

数据标注质量差、标注量不够,你怎么办?

考察点:考察数据侧的工程手段,CV 岗一半工作在数据上。

答题要点:
  1. 先做标注质量审计:抽样检查、一致性检验,量化脏数据比例。
  2. 用模型预标注降低人工成本,人工只做校验和修正。
  3. 数据不够时:自监督/半监督、合成数据、难例挖掘回流。
  4. 说明会评估每条路线的成本收益,而不是无脑选最贵的。

别踩:只说「让标注团队重标」,显得没接触过数据侧的实际工作。

行为面试与 HR 面

你为什么想从上家公司离开?

考察点:考察稳定性和动机,判断你会不会很快再跳。

答题要点:
  1. 归因于发展诉求:想深耕的方向、更大的业务场景、更完整的算法链路。
  2. 不说前公司坏话,不提与领导同事的矛盾。
  3. 把离职原因和目标公司的优势对上,形成合理逻辑。
  4. 准备好被追问「为什么是我们公司」的答案。

别踩:抱怨加班、薪资、领导,或说「想换个环境」这种空泛理由。

和工程/产品同事在方案上有分歧,你怎么处理?举真实例子。

考察点:考察协作方式,算法岗经常要和工程团队拉扯资源与方案。

答题要点:
  1. 用 STAR 结构讲一个真实冲突,分歧点要具体(如精度与延迟的取舍)。
  2. 展示做法:先对齐目标,用数据说话,做对比实验代替口头争论。
  3. 结果上体现双方各退一步或找到更优解,不是「我说服了他们」。
  4. 总结一句方法论:对齐目标比争对错重要。

别踩:讲成「都是对方不懂技术」,或例子太假一听就是编的。

你的期望薪资是多少?

考察点:考察自我定位是否清晰,以及谈判成熟度。

答题要点:
  1. 先给区间不给单点,区间下限是你真实能接受的数。
  2. 参考依据:当前薪资基数、同级别市场行情、面试表现,说明这是综合判断。
  3. 表达弹性:薪资之外也看重方向和成长,但不要说「多少都行」。
  4. 被压价时问清总包结构:base、绩效、股票/期权、调薪机制。

别踩:报一个远超行情的数不解释依据,或一被压就立刻大幅让步。

面试准备清单

什么时候要做什么
面试前 3 天把简历上每个项目按「背景-任务-方案-结果-踩坑」重写一遍,每个项目准备 3 个可深挖的技术细节,量化指标背熟。
面试前 3 天过一遍高频基础题:感受野计算、BN、IoU/NMS/GIoU 系列、one-stage vs two-stage、常见损失函数,能白板推导的练到能白板写。
面试前 1 天手撕练习:NMS、IoU、翻转链表类基础题各限时写一遍,重点练「边说思路边写」的习惯。
面试前 1 天查目标公司的业务方向和近期技术动态,准备「为什么选我们」和「你能带来什么」的答案,各 30 秒版本。
面试当天准备 3 个反问问题:团队当前的技术挑战、入职后前三个月的期望、数据标注和算力资源情况。避免一上来就问薪资福利。
面试当天线上面试提前测试设备、准备白纸和笔(手撕可能要求开摄像头写);现场面试带几份纸质简历。

常见问题

CV算法工程师面试一定会手撕代码吗?
绝大多数公司会考,大厂几乎必考。高频题集中在 NMS、IoU、卷积实现这类 CV 相关题,加上 LeetCode 中等难度的通用算法题。建议至少把 NMS 和 IoU 练到 10 分钟内能写对。
没有大厂项目经验,面试会吃亏吗?
项目本身大小不是关键,面试官看的是你对细节的掌握深度。把小项目讲透:为什么这么选型、踩了什么坑、怎么验证效果,比空泛的大项目更有说服力。可以补充开源贡献或复现论文的经历。
面试官问的论文细节答不上来怎么办?
诚实说「这个细节我记得不确切」,然后讲你确定的部分和整体思路,再补一句「我的理解是……如果不对请您指正」。硬编一个错误答案比承认不记得扣分多得多。
一般几轮面试,多久有结果?
常见 3-5 轮:技术面 1-2 轮、交叉或主管面 1 轮、HR 面 1 轮。流程快的公司一周内走完,慢的可能两三周。面完 3-5 个工作日没消息,可以礼貌跟进 HR 确认进度。

继续看这个岗位

相关岗位