去年我集中面了一批视觉算法岗的社招,前后折腾了快两个月,收获不小,教训也不少。当时市面上大量文章都在讲校招怎么准备,真正针对社招、特别是视觉方向的经验贴却比较零散。所以这篇东西我一直想写,把2021年这一轮社招面试里我遇到的高频问题、踩过的坑、以及事后复盘出来的门道整理成文。内容纯属个人经历,结合了和同期跳槽朋友的交流,保证真实,但不保证覆盖所有公司。希望能给正在准备视觉算法社招的朋友一些参照,至少让你知道面试官坐在对面时,脑子里大概在盘算什么。
1. 为什么2021年视觉算法社招面试越来越看重"落地能力"
先说一个整体感受:2021年的社招面试,和两三年前相比有一个明显转向——考察重点从"你会什么"变成了"你能解决什么问题"。这不是我一个人的判断,和我同期在看的几个朋友都有同感。
背后原因不复杂。前几年AI视觉岗大量扩招,是个算法工程师就能拿到不错的package,但到了2020年下半年到2021年,行业进入洗牌期。各家公司在视觉上的投入变得非常谨慎,尤其是非头部公司,预算有限,招一个人进来是希望他尽快产出,而不是来搞两年研究再发篇论文。所以面试官很自然地把筛选重心放在:你过去做的项目能不能讲清楚、能不能经得起追问、业务指标是否有真实提升、遇到困难时你是怎么解决的。
另一个信号是,手撕代码和现场推导的比例明显增加。不只是算法题,还包括从零手写NMS、手写IoU计算、手推BatchNorm反向传播这类视觉岗专属题目。这说明公司希望确认你不是只会调包,而是真正理解底层原理,因为部署、优化、debug的时候,底层理解决定了一个工程师的上限。
还有一个趋势值得注意:模型部署和TensorRT优化相关内容出现在面试中的频率变高了。哪怕你简历里没有写部署经验,面试官也会试探性地问"你这个模型上线了吗""在什么硬件上跑的""延迟多少"。如果你一脸茫然,大概率会被判断为只做过离线实验。2021年这个信号已经很强烈了,到2022年后更是几乎成了标配,所以如果你还在准备阶段,强烈建议至少把ONNX导出、TensorRT基本流程、INT8量化原理这些摸一遍。
聊完大背景,下面按面试流程,把每个环节最值得说的细节拆开讲。
2. 简历筛选阶段:技术栈不匹配是最常见的隐形淘汰点
很多人以为简历筛不过是因为学校不够好或者大厂经历不够,但实际上,视觉算法岗2021年简历被刷的最大原因其实是技术栈不匹配。我在面试过程中接触到的几位面试官都提到,他们筛简历时第一眼看的就是项目关键词:检测、分割、OCR、跟踪、人脸、自动驾驶、工业质检,这些方向是否和团队当前需求吻合。
2.1 项目中一定要出现"动词+指标"结构
视觉算法岗的简历,满篇堆名词是没用的。写了"熟悉目标检测、熟悉图像分类"这类描述,在面试官眼里等于什么都没写。我后来把自己的项目描述统一改成了"动词+方案+指标"的结构,效果明显好很多。比如:
- 不好的写法:负责电力设备缺陷检测算法的开发
- 好一点的写法:基于Faster R-CNN改进的特征融合检测算法,在电力设备缺陷数据集上mAP从76.3%提升到82.1%,推理速度达25FPS(GPU 1080Ti)
面试官一天看上百份简历,这种带指标的描述能让他三秒钟内判断你是否匹配,也自动过滤掉很多没做过真实项目的人。社招不是校招,简历里没有项目和数字,基本等于放弃了第一轮筛选。
2.2 学校和前公司是加分项,但不是决定项
2021年我观察到的一个现象是,大厂背景确实有优势,但纯视觉方向的落地项目经验反而更能掰回一局。因为视觉岗流动性大,很多团队已经受够了招进来只会跑开源代码的人。一个在普通公司独立做过完整质检项目、能从数据标注管到模型上线的人,和一个在头部公司只负责调参其中一个模块的人竞争同一个岗位,前者胜出的概率不低。
所以你如果学历背景一般,简历里就要重点突出自己从0到1做过的完整链路,最好把数据清洗、标注规则制定、模型训练、服务封装、部署上线这几段都写出来。社招面试官看到这种简历反而更放心——他不需要从头教你怎么做工程。
2.3 简历中尽量不要写的几类内容
- 写"熟悉Caffe"这种上古框架,会让人觉得你技术栈更新慢,至少两年没接触新东西了
- 别写"精通目标检测",这个词太重,面试官看到后一定会往死里问,问到你答不上来反而更扣分
- 论文部分如果只是挂名三作四作,建议别放上去,否则被追问论文细节时你会非常被动
总结一句话:2021年社招简历,项目比出身重要,指标比名词重要,完整链路比单点技术重要。
3. 笔试与在线测评:算法题之外还有视觉基础知识的暗坑
2021年视觉算法岗的笔试,基本分两派:一类是直接发牛客网链接做算法题,以字节、百度、快手为代表;另一类是发一份试卷,里面有算法题也有视觉基础题,以海康、大华、商汤、旷视这些AI安防/视觉公司为代表。
3.1 在线算法题:中等难度是主流
纯算法题部分,社招普遍是两个题,难度在LeetCode中等区间,很少出Hard。我遇到的题目包括:二叉树的层序遍历、三数之和、最长回文子串、合并区间、接雨水(这题出现频率异常高)。建议准备阶段把LeetCode热题HOT 100刷两遍,特别是数组、链表、二叉树、动态规划这几类。
有一个容易被忽略的点:在线评测系统对输入输出的处理非常严格,很多人挂掉不是因为不会做,而是因为没处理好多组输入、空数组这些边界情况。我身边真有朋友因为循环读取输入写错,白白丢了AC。建议练习时用牛客网的在线编程模式多练,别只在自己本地IDE里写。
3.2 视觉基础知识笔试:这些题反复出现
如果是发试卷的形式,视觉基础题的考点相对固定,我把2021年出现频率最高的几类罗列一下:
- BatchNorm的公式、训练和推理阶段有什么区别
- 卷积感受野的计算公式
- 1x1卷积的作用
- 池化层的作用、最大池化和平均池化分别适合什么场景
- 常见激活函数的优缺点比较(ReLU、Leaky ReLU、Sigmoid、Tanh)
- Softmax的数值稳定性问题,为什么减最大值
- 样本不均衡的处理方法
- 梯度消失和梯度爆炸的原因与解决办法
- 过拟合的解决方法,从数据、模型、训练策略三个层面回答
还有一些开放性题目,比如"如果你有一个分类任务,正负样本比是1000:1,你会怎么处理"这类,考察的是面对实际问题时的解决思路,而不是背标准答案。
3.3 笔试环节的时间分配策略
我在笔试上吃过一次亏,前面太谨慎,每道题都反复验算,结果后面算法题时间不够,只AC了一题。后来总结出的策略是:先花5分钟把所有题过一遍,判断每道题的难度和分值,优先做分值高、思路清晰的题;遇到卡壳超过15分钟的题先跳过,最后再回头解决。尤其是视觉基础题,会就是会,不会就是不会,别浪费时间纠结,把时间留给能拿分的算法题。
提示:大部分公司的笔试成绩只在面试筛选初期起作用,不会影响后续定级,所以只要不是太离谱,过了及格线就行,不用追求满分。
4. 技术面第一轮:项目深挖是重头戏,面试官最在意这三个维度
过了笔试,进入技术面环节。第一轮通常是技术骨干或资深工程师,时间大约45到60分钟。这一轮的核心就一个字——挖。项目深挖的程度决定了你能不能进入下一轮。
4.1 让你"讲一下项目",实际上在考察什么
当面试官说"你先介绍一下你最近做的项目"时,大多数人会开始讲用了什么模型、数据量多少、准确率多少。这其实是误区。面试官真正想听到的是:你在这个项目里扮演什么角色,你做的部分和其他人的边界在哪里,你遇到的最难的问题是什么,以及你解决问题的思考链路。
我推荐一个自我介绍项目的"STAR-L"结构:
- Situation:项目背景,一句话说清楚为什么要做这个项目
- Task:你负责的具体任务,不是整个项目的目标
- Action:你采取的技术方案,以及为什么选这个方案,对比过哪些替代方案
- Result:结果指标,最好是业务指标而非论文指标
- Learning:踩过什么坑,如果重来会怎么优化
其中Learning部分是我觉得最加分的。比如你发现数据标注质量对模型影响极大,然后自己写了一套标注质量抽检工具;或者你发现某个数据增强策略在离线测试有用、上线后效果反而变差,然后分析出了原因。这些细节才是面试官区分"做过"和"做透"的关键。
4.2 项目深挖时的高频追问
面试官在听完你的项目介绍后,通常会有一连串追问,2021年我被问过最多的包括:
- 为什么选择这个模型而不是其他模型?你对比过哪些?
- 训练集和验证集的划分方式是什么?有没有数据泄漏的风险?
- 标注数据的来源是什么?标注错误怎么处理?
- 线上效果和离线测试差距大吗?差在哪里?
- 模型的参数量和计算量分别是多少?有没有考虑过压缩?
- 这个项目上线了吗?如果上线了,线上的QPS和延迟是多少?
- 如果让你重新做这个项目,你会改变什么?
这些问题没有一个是可以临时编出来的,只能靠真实项目经验支撑。所以如果你手上的项目不是自己主导的,一定要在面试前把技术细节补清楚,不然被问穿帮的后果会比不会更严重。
4.3 被问到知识盲区时怎么处理
技术面一定会遇到不会的问题,这很正常,面试官通常也是故意留一个更深的问题看你的反应。我2021年面试时被问过一个关于TensorRT plugin实现细节的问题,说实话之前没深入看过,当场有点慌。
后来复盘,正确的处理方式是:坦诚告诉面试官这个问题我没有深入实践过,然后基于已有认知给出一些方向的推断,同时表达自己愿意去学习的意愿。千万不要不懂装懂,社招面试官都是实干出身,编造的回答很容易被当场戳穿。2021年一个面试官告诉我,他判断候选人主要看三点:能讲清楚做过的,能快速理解没做过的,遇到不会的敢承认。
5. 技术面第二三轮:手撕代码与视觉理论的高频考点集锦
通过了项目深挖,二面三面就进入技术和理论的集中考察阶段。这里说的技术面二三轮,通常包括手撕代码、视觉理论深入、机器学习基础和数学基础。我把2021年遇到的、以及朋友反馈的高频题整理成了一份清单。
5.1 视觉方向手撕代码:NMS和IoU是出场率最高的
如果说2021年视觉算法岗面试手撕题有一个永恒的主角,那就是NMS(非极大值抑制)。我前后遇到三次,表现形式不同:有直接手写NMS的,有让你在给定框列表基础上实现soft-NMS的,还有让你讲NMS的缺点和替代方案的。
手写NMS的Python实现大概是这样的:
import numpy as np def nms(dets, thresh): x1 = dets[:, 0] y1 = dets[:, 1] x2 = dets[:, 2] y2 = dets[:, 3] scores = dets[:, 4] areas = (x2 - x1 + 1) * (y2 - y1 + 1) order = scores.argsort()[::-1] keep = [] while order.size > 0: i = order[0] keep.append(i) xx1 = np.maximum(x1[i], x1[order[1:]]) yy1 = np.maximum(y1[i], y1[order[1:]]) xx2 = np.minimum(x2[i], x2[order[1:]]) yy2 = np.minimum(y2[i], y2[order[1:]]) w = np.maximum(0.0, xx2 - xx1 + 1) h = np.maximum(0.0, yy2 - yy1 + 1) inter = w * h ovr = inter / (areas[i] + areas[order[1:]] - inter) inds = np.where(ovr <= thresh)[0] order = order[inds + 1] return keep这里有几个容易被追问的细节:为什么要加1(像素坐标下宽高计算要加1,否则像素点数量会少算);为什么不直接改原数组(面试时用numpy切片传递会更简洁);soft-NMS和NMS的区别是什么(soft-NMS用分数衰减代替直接删除,解决密集场景下两个高IoU目标互相抑制的问题)。
IoU计算也一样,写起来不难,但面试官会问:IoU在什么场景下会失效(两个框不相交时损失为0无法梯度回传,这时可以用GIoU/DIoU/CIoU);为什么FCOS这类anchor-free模型不用IoU匹配正样本。
5.2 重要理论考点:BN和卷积的前向反向
手写BatchNorm的forward和backward在2021年出现频率非常高,特别是在重视基础的公司。主要考察点包括:
- 训练阶段是用每个batch的均值和方差,推理阶段是用全局统计量,为什么
- 卷积层后面为什么通常接BN而不是Dropout
- BN在batch size很小的时候(比如目标检测里两张图一个batch)效果为什么会变差,有没有替代方案(GroupNorm、LayerNorm)
- BN层在反向传播时,梯度是怎么通过均值和方差传回去的
我当时被要求手推了一下BN的反向。核心在于记住:梯度要分别经过方差、均值、归一化后的变量三条路径回传,每一条都不能漏。面试官看的是你是否真明白BN的数学过程,而不是背结论。
卷积部分,除了手推卷积计算,2021年还高频出现了以下问题:
- 卷积的参数量和计算量怎么算
- 输入尺寸为HxWxC、卷积核为KxK、padding为P、stride为S时,输出尺寸是多少
- 分组卷积(Group Convolution)和深度可分离卷积(Depthwise Separable Convolution)的参数量对比
- 空洞卷积(Dilated Convolution)的作用是什么、感受野怎么变化
- transposed convolution(转置卷积)和反卷积的区别,以及棋盘效应产生的原因
5.3 常用检测模型的演进对比
视觉算法岗面试,目标检测几乎是绕不开的话题。2021年比较常见的问法有两种:一种是让你讲讲你了解的检测模型发展脉络;另一种是直接拿两代模型做对比(Faster R-CNN vs YOLOv4)。
我个人总结的回答框架是:把检测模型先分成两阶段和单阶段,两阶段代表Faster R-CNN(RPN+ROI Pooling),单阶段代表YOLO系列和SSD。然后点出两者的核心区别——精度和速度的权衡。再往后延伸,2021年Anchor-free逐渐成为趋势,代表是FCOS和CenterNet,它们省去了Anchor的调参过程,让检测头变得更简洁。最后可以提一下Transformer结构引入视觉后的影响,如果你面试时DETR已经发布,那么这个问题几乎一定会被讨论到。
一个比较容易加分的动作:你自己跑过哪个模型,在什么数据集上对比过什么指标。有实际对比数据,哪怕只是COCO上跑了一两个模型,面试效果都会比纯背八股好得多。
5.4 机器学习基础和数学基础:不能丢的底子
虽然岗位名是视觉算法,但2021年面试中机器学习基础被问的频率并不低。高频问题:
- SVM的损失函数、核函数的作用、SMO是什么
- 决策树和随机森林的区别,为什么随机森林能降低方差
- GBDT和XGBoost的对比
- K-Means的缺点,K值怎么选
- 逻辑回归和线性回归的区别
- L1和L2正则化的原理,为什么L1能产生稀疏解
- 准确率、精确率、召回率、F1、AUC的适用场景
数学基础方面,PCA和SVD的关系、极大似然估计、贝叶斯公式、矩阵求导、特征值和特征向量的意义都被问过。这不是在为难你,而是视觉算法工程师日常工作中真的会用到这些知识——你在设计loss函数时,在推导梯度时,在理解特征分布时,都需要数学功底。
提示:面试前把线性代数和概率论的基础概念过一遍非常有必要,即使这些问题已经很久没在实际工作中直接用过了,但面试官不问不代表可以不准备。
6. 交叉面与Leader面:系统设计、业务理解和抗压能力
如果技术面顺利通过,下一轮通常是交叉面(技术委员会或兄弟团队的人来面)或者直接到Leader面。2021年这轮面试的风格差异很大,有的公司纯粹是压力面,有的公司会重点考察系统设计能力,还有的会问业务理解。三种情况我详细说说。
6.1 系统设计题:不是让你设计算法,而是让你设计方案
系统设计题在2021年视觉岗面试中明显变多。典型题目包括:
- 设计一个人脸识别系统,从数据采集到布署上线
- 要给一个工厂做缺陷检测,产线节拍要求每秒处理10张图,怎么设计方案
- 现在有一个商品识别需求,端侧部署,要求内存小于500MB,你会选择什么方案
- 视频流实时检测,单路1080p25fps,给你一块GPU,能处理多少路,瓶颈在哪里
这类题没有标准答案,考察的是工程视野。一个好的回答需要覆盖:数据层面的方案(采集、清洗、标注、增强)、模型层面的方案(选什么模型、为什么、精度和速度怎么权衡)、部署层面的方案(用什么框架、硬件是什么、怎么加速)、持续迭代的方案(数据回流、模型更新、badcase分析)。
我的经验是,回答时要把"假设"说清楚。比如每秒处理10张图,先算一下:如果选择YOLOv5s,输入640x640时在1080Ti上大概能跑50-60FPS,单卡理论上可以满足,但要考虑多路并发、前后处理、CPU占用,实际可能需要双显卡。这种先把数字算出来、再给结论的方式非常加分。
6.2 Leader面:在考察你的业务敏感度
Leader面通常不抠技术细节,更关注你这个人能不能和他合作、能不能理解业务优先级。2021年我被问过的一些问题包括:
- 你的项目最终对业务产生了什么价值
- 如果算法准确率已经很高了,但业务方还是不满意,你会怎么处理
- 面对一个不确定是不是值得做的需求,你怎么权衡
- 你怎么评估技术方案的投入产出比
这类问题的核心是看你有没有"业务视角"。有的候选人技术很强,但对业务漠不关心,Leader面上的评价就会比较低。我当时学到一个技巧:把业务目标翻译成技术目标。比如业务方说"识别出错会导致赔付成本上升",对应到技术上就是"误检率比召回率更重要",那么loss设计可以考虑加Focal Loss、阈值调整时优先保证precision。
6.3 压力面怎么应对
2021年有几家公司的面试风格非常硬核,面试官会连续追问,直到你答不上来,然后再换一个角度继续问。这种压力面其实不是要你全答对,而是想看你在压力下是否还能保持逻辑清晰、态度冷静。
我经历过的压力面中,比较典型的画面是:面试官拿着我的简历,逐行质疑项目指标——"你这个82.1%怎么测的""你用了哪些测试集""标注质量有没有验证过"。这种追问可能会让你怀疑自己项目的真实性,但面试官其实是在验证两件事:项目是不是你真的做的,以及你知道不知道指标的边界。
应对压力面,我的三个原则:一是所有数据都要能解释来源;二是遇到不会的直接说"这个问题我需要再看一下",不硬编;三是保持语速平稳,不要越说越快。
7. HR面与Offer选择:薪资谈判和入职前的背调细节
过了技术面,HR面看似轻松,但实际上暗藏不少细节。2021年我听到周围朋友谈Offer时出现分歧的情况不少,这里把重要的点列出来。
7.1 HR面会问什么
HR面一般20到30分钟,表面的问题都是常规的:为什么离职、为什么选我们、未来规划是什么、目前手上有没有其他offer。但HR真正想了解的是:你的稳定性、薪资期望范围,以及你手上offer的竞争情况。
其中"为什么离职"是一个送命题。千万不要说前公司坏话,也别说"没有成长空间"这种大而空的话。比较好的说法是:希望业务方向更聚焦、希望从研究走向落地、希望承担更大的技术责任等。注意,2021年面试时HR普遍会追问上一份工作的薪资结构,"税前总收入=base×12+年终奖+股票/期权"这种说法要提前心里有数。
7.2 谈薪资的几个技巧
薪资谈判的本质是信息博弈。你手上同时有多个offer,是最强的谈判筹码。2021年我见过最成功的谈薪案例,是一个朋友拿着A厂的offer去和B厂谈,直接把base提升了25%。
但需要注意的是,不要虚构offer去抬价,这种行为一旦被背景调查发现,offer会被直接撤回。如果你的期望薪资和HR给的范围差距较大,可以这样表达:我理解贵司的薪资体系,但我手上的其他选择确实给了更高的package,如果贵司能调整,我会优先考虑这边。措辞要温和,但立场要坚定。
另外,建议把每年的总包(base+奖金+补贴+期权)都算清楚再对比。有些公司的base看起来不高,但年终奖是4个月以上,总包反而更好。期权部分要问清楚归属期(vesting schedule)和回购条件,不要只看纸面数字。
7.3 背调环节需要提前准备
很多公司会在发正式offer之前做背景调查,除了验证工作经历和学历,还会联系你前公司的HR或直属上级。2021年我身边有一例因为背调出问题丢offer的:候选人在简历里写的在职时间和实际有出入,前公司HR反馈时多说了两句,结果offer被撤回。
所以,从简历提交开始,所有信息必须真实。即使有一些瑕疵,比如项目经历描述得漂亮了一些,面试时可以圆回来,但简历上的时间、职位、公司名称绝对不能造假。另外,提前和自己的直接领导打声招呼,告知可能会有背调电话,是对双方都负责任的做法。
8. 复盘总结:视觉算法社招面试的底层逻辑与建议
整轮面试走完,回头再看2021年视觉算法岗社招,我的核心感受是:面试的本质是"全方位验证"。技术深度、项目真实性、工程能力、业务敏感度、沟通表达,五个维度各占一席,缺一不可。
8.1 面试准备的优先级排序
如果给准备时间排一个优先级,我的建议是:
第一优先级:项目复盘。把自己做过的项目按STAR原则整理成稿,每个指标、每个技术选型、每个踩坑点都要能说清楚。这是最容易在短时间内提升的部分,也是性价比最高的准备。
第二优先级:手撕代码和视觉基础。手撕NMS、IoU、BN反向、卷积计算这类题目熟练度要练到形成肌肉记忆。视觉基础里的检测模型演进、BN原理、激活函数对比等高频考点反复过。
第三优先级:机器学习基础和数学基础。重点复习L1/L2、SVM、决策树、PCA、极大似然估计、贝叶斯这些经典知识点,不需要太深,但要能说清原理。
第四优先级:系统设计题。提前思考人脸识别、缺陷检测、OCR识别这类通用场景的方案设计,把数据、模型、部署、迭代四个环节标准化成自己的回答框架。
8.2 个人在多次面试后最重要的三个教训
第一个教训是"项目一定要是自己做透的"。我面过一些候选人,项目讲得天花乱坠,但问到某个细节时就开始含糊其辞。如果你面试前发现项目里某些部分自己已经记不清了,那这一轮面挂的概率极高。与其花时间包装简历,不如花时间把自己做的每个细节重新啃一遍。
第二个教训是"算法题不能临时抱佛脚"。视觉算法岗的面试,代码题通常不难,但如果你很长时间没刷题,手很生,一紧张就容易翻车。我建议面试前至少留出两周时间,每天刷2到3道LeetCode中等难度的题,保持手感。
第三个教训是"面试过程中保持真实反而更有力量"。2021年这个市场,面试官见过太多包装精美的候选人,当所有人都试图展示完美时,一个能坦诚说出"这个方案我当时没有做对比,后来复盘发现用另一个结构可能更好"的人,反而会让人更信任。真实感在工程岗面试里是稀缺品。
8.3 最后再分享一个小经验
我在准备这轮面试时养成了一个习惯:每次面试结束后,第一时间把面试官问到的每一个问题、自己怎么回答的、哪里卡壳了,全部记录下来。坚持了大概十场之后,发现高频考点非常集中,而且自己随着记录和复盘,对项目的理解会越来越深——很多问题第一次被问到时会卡,但复盘后下一次就能答得更好。
这个方法很笨,但实测有效。如果你也正在准备视觉算法岗的社招,不妨一试。祝愿你能早日拿到心仪的offer。