视觉算法社招面试全流程复盘:高频考点、项目深挖与手撕代码经验

视觉算法社招面试全流程复盘:高频考点、项目深挖与手撕代码经验 去年我集中面了一批视觉算法岗的社招前后折腾了快两个月收获不小教训也不少。当时市面上大量文章都在讲校招怎么准备真正针对社招、特别是视觉方向的经验贴却比较零散。所以这篇东西我一直想写把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%推理速度达25FPSGPU 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、TanhSoftmax的数值稳定性问题为什么减最大值样本不均衡的处理方法梯度消失和梯度爆炸的原因与解决办法过拟合的解决方法从数据、模型、训练策略三个层面回答还有一些开放性题目比如如果你有一个分类任务正负样本比是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而不是DropoutBN在batch size很小的时候比如目标检测里两张图一个batch效果为什么会变差有没有替代方案GroupNorm、LayerNormBN层在反向传播时梯度是怎么通过均值和方差传回去的我当时被要求手推了一下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-CNNRPNROI 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。