
去年年中那会儿我从上一家做安防业务的公司提了离职前后花了一个多月时间面试视觉算法岗面了七八家规模不一的团队拿了几个offer也踩了不少坑。现在回头看2021年社招市场上视觉算法岗的考察方式已经很成型了简历筛、笔试/测评、技术面两到三轮、交叉面或总监面、HR面每一轮都有自己的侧重点和校招那种“全面考基础”的打法完全不同。这篇文章不聊虚的把我真实的准备过程、被问过的问题、挂在的地方以及事后复盘总结出来的避坑经验全部整理出来给准备走社招或者明年想跳槽的朋友做个参考。这篇内容适合谁如果你是工作一两年、想换个平台的CV工程师或者应届生想提前了解社招面试的考察逻辑都可以按这个思路准备。我自己是主攻目标检测方向所以文章里检测相关的内容会多一些但整体面试准备框架、项目复盘的思路、手撕代码的踩坑点放到分割、跟踪、3D视觉这些方向也一样适用。1. 面试准备简历与知识体系梳理1.1 社招和校招的区别简历怎么写更抓人先说一个很关键的认知社招面试官最想确认的不是“你懂多少”而是“你能不能直接用”。校招大家都没什么经验面试官考的是潜力是基础扎不扎实社招不一样岗位是要你过去就上手干活的所以整个面试过程都在围绕你简历上写的那些项目展开问得非常细。我前期也犯过错误把简历写成“项目说明书”大段大段堆技术名词后来面了几家反馈说“简历看着挺满但抓不住重点”。回头总结社招简历应该按这个逻辑来组织每个项目必须写清楚三件事业务背景你负责的模块量化结果。量化结果越具体越好比如“检测精度从76.4%提升到81.2%推理耗时从38ms降低到25ms”这种信息比“大大提升了模型效果”有说服力得多。技术栈写精不写多。写一堆“熟悉TensorFlow/PyTorch/Caffe”不如写得有层次日常主力框架是什么用过哪些模型结构熟悉哪些工具链这样面试官能快速判断你适合哪个坑。项目数量控制在三个左右选最有代表性的宁缺毋滥。我后来把简历改成三四个核心项目的结构每个项目下面的描述都围绕“解决什么问题、怎么做的、有什么收益”来写后面面试明显顺了很多。还有一个容易被忽略的地方社招简历上的工作经历和项目经历时间线要对得上。面试官会顺着时间线问“你上一家公司做的这个项目后来怎么样了”如果时间线混乱或者项目之间出现逻辑断裂很容易让对方怀疑项目的真实性这是社招大忌。1.2 给自己画一张知识点地图别跟着感觉复习视觉算法岗位涉及的知识面很宽如果不先梳理框架很容易陷入“什么都想看、什么都看不完”的状态。我第一周就做了个知识地图把面试要准备的内容分成四个模块后续每天按模块推进面试前基本能把整个地图过两遍。第一个模块是深度学习基础包括CNN核心概念卷积计算、感受野、池化、BN、常见网络结构ResNet系列、MobileNet系列、Vision Transformer的基本原理、损失函数设计交叉熵、Focal Loss、Smooth L1等、优化相关SGD、Adam、学习率策略。这部分是地基面试官往往从最基础的概念问起如果这里答得含糊后面可能直接掉档。第二个模块是视觉算法方向我重点准备的是目标检测、实例分割、多目标跟踪三条线。检测是主线R-CNN系列、YOLO系列、FCOS等anchor-free方法要能讲清楚原理和演进关系分割方向至少要知道FCN、UNet、DeepLab的核心思路跟踪方向要熟悉SORT、DeepSORT的流程和工程坑。这个模块是重头戏基本占了我整个准备周期的一半时间。第三个模块是工程能力包括模型部署ONNX推理、TensorRT加速的基本流程、数据标注与清洗、训练框架的使用细节PyTorch的DataLoader、分布式训练等。我后来发现很多面试官会专门问工程化相关的问题毕竟社招是招来干活的不是招来做研究的。第四个模块是数学与代码数学主要是微积分、线性代数、概率论中与算法相关的部分代码就是LeetCode热门题加CV领域特有的手写题NMS、IoU、mAP的计算这部分的详细内容我放在后面专门章节说。这个地图画完之后我每天按模块推进面到后面越来越有信心因为至少知道“我准备过什么”心里有底。2. 完整面试流程与各轮次考察重点2.1 常规社招流程从简历投递到HR面要过几道关视觉算法岗的社招流程不同团队差别不是特别大一般是这样一条线简历筛选通过后先来一轮电话面或者笔试然后进入正式的技术面试通常有两轮到三轮最后是HR面或者部门负责人面谈薪和背景核实一般安排在offer阶段。电话面不建议轻视它虽然是“筛选性质”但很多团队会拿电话面问一些基础和项目相关的问题快速判断要不要约现场。我遇到过电话面直接问二十分钟项目细节的也遇到过电话面问了一道中等难度代码题的。这个环节主要考察你的沟通表达能力和基础扎实程度如果电话里都讲不明白项目到现场大概率也讲不明白。笔试环节看团队有的给线上测评链接有的直接发两道代码题限时完成。笔试内容一般是算法题加少量深度学习的题目算法题难度普遍在LeetCode中等偏上。如果笔试没通过很多公司会直接结束流程所以笔试准备不能放松我后面专门讲代码怎么准备。到场面试才是重头戏。技术一面通常是团队里的核心开发或者技术骨干着重看你基础扎不扎实、项目是不是真的自己做过技术二面一般会上升到技术Leader或者资深工程师级别问得更宏观比如技术选型、整体架构、方案的取舍权衡如果有交叉面或者总监面那就是看你的技术视野、沟通协作能力和解决问题的思路不一定会死抠细节。最后HR面谈薪资、聊发展预期也会问一些离职原因、职业规划这类软性问题。2.2 各轮面试的侧重点用一张表看懂面了几个团队之后我整理了一张表格把不同轮次的考察重点和攻防策略都写下来了这里直接分享出来面试轮次主要考察内容常见问题类型准备策略电话面/笔试基础能力、项目真实度专业知识快问快答、代码题准备好简历上的每个项目的简述练熟常见代码题技术一面基础细节、项目深挖模型原理、项目细节追问把项目里用到的每个技术点都理解到“为什么”层面技术二面架构设计、技术选型方案对比、技术演进路线整理一套自己的技术判断逻辑能说清优缺点交叉面/总监面解决问题的能力、沟通协作开放性问题、场景设计题多准备几种“从问题到方案”的表达框架HR面稳定性、薪资期望、文化匹配离职原因、职业规划提前想好说辞保持真诚但不过于激进需要特别提醒一点二面往后面试官不再只关注你“会不会某个模型”而更关注你“面对一个不熟悉的问题时怎么思考”。我被问过“如果给你一个全新的工业质检场景只有几百张缺陷样本你准备怎么做”这种问题没有标准答案面试官想看的是你拆解问题、逐步落地方案的思路所以平时可以多做这种“从零设计流程”的练习。3. 视觉算法核心技术考点深度剖析3.1 深度学习基础与CNN细节这些问题不容忽视不管面几家深度学习基础都是必问的而且面试官经常从简单的概念一层层往下追问问到你卡住为止。我印象最深的一次面试官从“说一下卷积是怎么计算的”开始一路问到“感受野怎么算”“1x1卷积的作用”“分组卷积和深度可分离卷积的区别”然后又追问“BN在训练和推理时有什么区别”。这些问题单独拿出来都不难但连续追问下来很考验平时的积累。卷积计算的基本过程一定要能讲明白包括输入输出尺寸的关系公式、stride和padding的作用以及“为什么卷积能提取特征”。感受野的计算出现在不止一家面试里公式要记牢更关键的是能理解为什么网络越深感受野越大、为什么空洞卷积能在不增加参数的情况下扩大感受野。1x1卷积被反复问到作用是降维和升维、增加非线性、以及实现跨通道的信息融合在MobileNet里也有应用场景这些都要能流利说出来。BNBatch Normalization也是高频考点至少要能回答三件事BN解决了什么问题内部协变量偏移让训练更稳定、收敛更快、训练时怎么计算均值和方差按batch维度、推理时用的是什么东西训练过程中累积的全局统计量不是当前batch的。我有一次就是因为没有把推理和训练时BN参数的区别讲清楚被面试官追问了整整五分钟最后只能承认自己平时没太注意这个细节。反向传播的基本原理也要掌握不用把公式推得特别深但至少要理解链式法则、梯度的流向、以及常见的梯度消失和梯度爆炸问题。ResNet为什么能解决梯度消失要能从“残差连接让梯度可以直达前层”这个角度说清楚。3.2 检测、分割、跟踪方向必背内容与演进逻辑目标检测是我面试的主战场也是被问到最多的部分。首先R-CNN系列是必背的R-CNN用Selective Search生成候选区域然后逐个送入CNNFast R-CNN加了RoI Pooling让共享卷积成为可能Faster R-CNN引入RPNRegion Proposal Network把候选区域生成也融入网络实现端到端训练。这套演进逻辑要能讲得顺面试官非常喜欢问“每一步改进解决了什么问题”这比死记硬背结构参数重要得多。YOLO系列同样是高频考点特别是YOLOv3和YOLOv5的设计细节。YOLOv3的多尺度预测、anchor聚类、FPN结构都是常问的点YOLOv5虽然原作者没有发正式论文但它在工程上的改动对训练和部署的影响很值得深挖。我被问过“为什么YOLOv5用自适应anchor计算”“CSP结构解决了什么问题”“Focus模块的作用是什么”每一个都需要对代码实现有了解才能答好。anchor-free方法也是2021年的热点方向FCOS和CenterNet是最常被问到的两个。FCOS用中心度来抑制低质量检测框CenterNet把目标检测转化为关键点检测这两种思路都要能讲明白最好还能和anchor-based方法做个对比说说各自适合什么场景。分割方向至少要知道FCN、UNet和DeepLab系列。FCN引入了全卷积网络和上采样UNet的编码器-解码器结构和跳跃连接在医学图像上很有名DeepLab系列的关键是空洞卷积和ASPP模块。面试官常问“为什么分割网络要用跳跃连接”这个问题可以从低层特征和高层特征的信息互补角度回答。多目标跟踪方向SORT和DeepSORT是核心。SORT用卡尔曼滤波加匈牙利算法做帧间关联DeepSORT在SORT基础上加了ReID外观特征来减少ID Switch。要能讲清楚跟踪的完整流程还要知道实际工程里跟踪最头疼的问题是漏检和遮挡以及怎么缓解。3.3 训练优化技巧学习率、数据增强和损失函数除了模型结构面试官还会考察你对训练细节的理解。学习率策略问得很多包括固定学习率、Step Decay、余弦退火、warmup等为什么需要warmup可以从“训练初期模型参数不稳定太大学步长容易震荡”这个角度解释。还有自适应学习率方法Adam为什么效果好、SGD在验收效果时更稳定这类经验性问题也需要准备。数据增强是另一个必问模块因为它是提升模型泛化能力最直接的手段。基础的翻转、随机裁剪、颜色扰动要能说出来Mosaic、MixUp、CutOut、RandAugment这些增强方法也要熟悉特别是Mosaic在YOLOv4和YOLOv5中的应用。面试官还喜欢问“数据增强会不会导致模型过拟合到增强方式上”这种问题要能辩证地分析。损失函数设计是区分机械调包和真正理解算法的重要分水岭。Smooth L1为什么比L2 Loss对离群点更鲁棒Focal Loss是怎么解决正负样本不平衡的Dice Loss在分割里的作用这几个经典设计要能讲清楚公式含义和适用场景。4. 手撕代码与数学功底4.1 现场手撕代码类型分布和刷题建议社招的代码考察和校招比难度差不多但更偏向“能写到能跑”的实战状态。我统计了一下自己遇到的代码题可以分成这么几类数据结构类链表反转、二叉树遍历、LRU缓存、最小栈这些都是常客。二分查找与双指针有序数组相关的题目比如三数之和、盛最多水的容器考频率很高。动态规划爬楼梯、最长递增子序列、背包问题这类经典题目。随机设计与字符串处理实现一个带权随机函数、最长回文子串等。刷题策略上不建议直接开LeetCode按顺序刷那样效率太低。我当时把高频TOP 100题过了两遍然后重点刷了数组、链表、二叉树、哈希、双指针、动态规划这几个模块。实际面试下来遇到的题大部分都在这些模块里。4.2 视觉算法岗特有的手写题NMS、IoU、mAP视觉算法岗和纯后端岗位面试有个很大的不同就是经常会让现场手写一些CV领域独有的代码这几个算法我强烈建议提前写到“闭着眼睛都能写出来”的程度。第一个是IoU的计算。输入两个框输出两个框的交并比代码很简单但要注意边界条件比如框完全不相交时交叠面积为0以及坐标可能传成归一化值还是像素值。第二个是NMS非极大值抑制。这个几乎是视觉算法岗手撕代码的“必答题”我在面试中遇到不下三四次。核心思想是按置信度排序选最高分的框删除与它IoU大于阈值的其他框重复直到处理完所有框。写的时候要注意用while循环处理候选框列表别在遍历列表时删除元素导致下标越界。第三个是mAP计算。这个稍微复杂一点核心是recall-precision曲线的计算和AP积分实际写的时候要分两步先按置信度降序排列所有检测框逐框判断是否匹配到GT并记录TP/FP然后逐点计算recall和precision算平滑后的PR曲线下面积。我在一家面试里被要求手写这个当时因为没准备充分卡了很久最后虽然写出来了但代码结构不够清晰面试官给了一个“还行但可以更好”的评价那次面试就没过后续。还有几个进阶手写题也可能被问到比如基于卡尔曼滤波的预测、基于匈牙利算法的目标匹配、以及CenterNet的热图高斯分布生成。这些不一定会考但如果简历写了相关项目就一定要能写出核心代码。4.3 数学与概率题这些坑别踩算法岗的数学考察不会像AI研究员那么深但基础的数学功底还是会被检验到主要集中在概率统计和线性代数两块。概率题常考的有贝叶斯公式、朴素贝叶斯分类、概率分布正态分布、伯努利分布的期望与方差、最大似然估计。我遇到过一个有意思的问题“一个检测器在某个类别上的precision是80%recall是60%如果在一个有1000张图的测试集上做了推理预测了500个正样本请问真正例大概有多少个”这个问题本质是考precision和recall的定义要能反推出真正例数量。这类题目其实不难但如果不熟悉基本定义就会很尴尬。线性代数主要是矩阵运算和SVD分解的应用比如PCA为什么用SVD、协方差矩阵的含义、矩阵的秩在实际问题中的意义。不需要会推全套公式但概念要清楚。5. 项目深挖与行为面试5.1 用STAR框架复盘项目让面试官听得懂、跟得上社招面试百分之六七十的时间都在聊项目所以项目复盘做得怎么样直接决定了面试的成败。我用的是STAR框架也就是背景Situation、任务Task、行动Action、结果Result每个项目都按这个逻辑梳理成一段3到5分钟的完整讲述。背景部分要一句话讲清“当时在做什么业务、遇到了什么问题”不要铺垫太多。任务部分是“我这里要解决的具体问题是什么”越明确越好。行动部分是最重要的要讲清楚技术方案是怎么选型、怎么迭代的这里面试官会疯狂追问细节。结果部分要有量化数据指标提升或者业务收益都行。比如我做过一个工业零件缺陷检测的项目按STAR梳理就是背景是生产线上要靠人工目检来发现零件表面的划痕和凹坑效率低且漏检率高任务是把检测精度做到95%以上同时处理速度要跟上产线节拍行动是我们基于Faster R-CNN做了一套检测流程先做数据增强扩充缺陷样本再用迁移学习初始化主干网络后期用TensorRT加速推理结果是精度做到了96.3%单帧推理时间压到了30ms以内上线后漏检率降低了70%。5.2 高频项目问题及回答角度这几个方向提前准备项目讲完面试官会开始密集追问有几个问题几乎每个人都会被问到我提前准备过答案但真正被问到时发现还是需要随机应变。以下是我汇总的高频问题每个都附了回答角度“这个项目为什么选这个模型”回答角度从数据规模、实时性要求、部署环境三个维度分析说明不是简单跟风而是基于业务约束做的选型。“模型效果不好时你怎么排查”回答角度先看数据质量标注准不准、样本分布均不均匀再看训练过程loss有没有收敛、有没有过拟合最后再看评估方式指标选得对不对、阈值调得好不好。“如果让你重新做一遍这个项目你会改哪里”回答角度结合现在的理解指出当初设计上的不足比如数据方案可以更合理、模型结构可以更轻量、评估流程可以做得更自动化。“这个项目上线后出现了什么问题”回答角度如实说但重点要放在“怎么发现、怎么解决、后续怎么避免”上社招面试官其实很看重你对线上事故的复盘能力。除了技术追问软性问题也可能会穿插在项目复盘中比如“你在这个项目里承担的角色”“和同事意见不一致时怎么处理”“项目延期了你会怎么办”。这类问题不考技术但能体现你的沟通协作和责任心回答时尽量具体多举例说明。5.3 关于“为什么跳槽”和职业规划说辞想好再开口“为什么离开上一家公司”这个问题在HR面和直属Leader面都会遇到。我的建议是不要说前东家的坏话也不要抱怨薪资低或者加班多这些说辞虽然真实但会给面试官带来“稳定性存疑”的负面印象。更好的角度是“追求更大的技术挑战”“希望在更正规的团队里做更复杂的业务”听起来积极向上。职业规划问题也一样不要说“我要三年内做到管理层”对于一个还在面试一线的视觉算法工程师来说说“希望在视觉算法方向深耕逐步积累从算法到产品的全链路经验”会更稳妥。关键是让人感觉你是有计划、有追求的同时又不激进到让面试官担心你待不久。6. 我踩过的坑与给后来者的建议6.1 面试中常见的翻车点这些坑我一个个踩过面试经历多了自然就会积累一些反面教材。我碰到最多的翻车情况有三个都是真实经历过、事后痛定思痛的。第一个是“讲项目时没有保护自己的边界”。我说的是在准备项目讲述时只准备了核心流程但一旦面试官顺着细节往外延伸比如问“你用的这个数据增强策略在验证集上有没有效果对比”或者“你这个损失函数是怎么调试出来的”就会答得很泛。这个问题本质是项目复盘不够细建议每个项目的所有关键决策都能拿出至少一个实验对比来说明为什么这么做。第二个是“代码题不检查边界条件就仓促开始”。有一次在线编程我拿到题目就想写核心逻辑结果忽略了空链表和单节点的情况最后跑测试用例直接报错。后来我总结写代码题先花30秒想清楚边界不要急着动键盘这个习惯能救很多分。第三个是“对不熟悉的方向硬答反而露馅”。被问到一个我确实没有深入做过的方向时我最初会因为面子硬着头皮说“了解”然后面试官追问两句就露馅。后来我学会坦诚说“这块我没有实际工程经验但我从原理上理解大概是这样的”反而面试官会觉得你诚实、逻辑清楚不再深挖。6.2 给准备跳槽的朋友几条实用建议都是真金白银换来的第一准备时间至少留一个月不要仓促上阵。我见过有朋友投完简历第三天就约面试结果第一周连续挂了两家才意识到准备不充分再约下面的面试时自信心已经受挫。合理的节奏是第一周梳理简历和项目第二到第三周按知识地图复习加刷题第四周开始投递和面试。第二面一场就做一场复盘。每次面完当天把被问到的问题记下来哪些答得好哪些答得差然后针对短板补课。我的经验是前两场面试基本是“交学费”的状态第三场开始状态会明显回升。第三多和同行沟通交流特别是目标团队的前员工。如果能找到在目标公司工作过的朋友或者网上认识的人问问他们团队技术栈、面试风格、团队氛围这些信息非常值钱能帮你避免很多“踩雷”和“踩空”。第四心态放平把面试当成技术交流。视觉算法岗的社招面试不仅考察你会不会也在考察你遇到未知问题时怎么思考。你越紧张越容易在开放性问题里发挥失常。我后面几场面试状态好的时候其实就是把它当成一次和同行的技术聊天反而能聊出很多平时积累的东西。最后再分享一个我后来一直用的小技巧面试前一周把简历上的每个项目都压缩成三个版本的讲述——1分钟版、3分钟版、10分钟版分别对应面试官问“简单介绍一下”“详细讲讲”“深挖细节”三种情况。这个技巧帮我撑过了很多场面试也推荐给你。