资讯动态

滴滴CV岗笔试复盘:从均值滤波到驾驶员状态监测的场景化考点解析

发布时间:2026/8/30 5:18:45 来源:尧图企业网站定制
说实话现在回头看2018年那场笔试很多东西已经和今天的招聘形势不太一样了但滴滴这套题的出题思路放在今天依然有参考价值。尤其是它把计算机视觉的技术点融进了出行场景里不是单纯考你背没背过概念而是看你有没有把理论拿去解决真实问题的意识。我当时报的是计算机视觉研发工程师岗位北京站第三批考完之后最大的感受是这笔试不水是真的在筛人。这篇文章我把当时印象深刻的几类题目、背后的出题逻辑、以及我是怎么拆解的从头到尾复盘一遍。如果你正在准备互联网公司CV方向的校招笔试尤其是出行、自动驾驶、车联网这类偏业务场景的岗位这份复盘应该能帮你少走不少弯路。1. 滴滴CV岗笔试考的不只是你学过什么1.1 出行公司的视觉技术都在哪些地方落地先想明白一件事滴滴为什么要招计算机视觉研发工程师它的CV技术不是用来做人脸解锁、美颜拍照的而是全部围绕出行场景展开。我当时在准备阶段翻了滴滴技术团队公开分享过的一些内容大致梳理出几个视觉方向行车记录仪和车载摄像头的事故检测、司机端的人脸识别与疲劳驾驶监测、路线规划里的街景图像语义分割、以及网约车安全场景下的车内监控分析。这些业务需求决定了笔试题目不会只停留在经典图像分类或目标检测的理论层面它一定会考察你面对真实场景时做技术选型和方案设计的能力。所以这套笔试题的整体气质是基础题考得扎实场景题考得实际。它不会问你ResNet为什么比VGG深还能收敛这种八股而是更偏向给你一个业务问题你怎么设计算法流程。1.2 笔试四个考察维度与我的答题时间节奏我记得第三批的试卷一共分四个模块编程题、CV基础题、深度学习题和场景设计题。每个模块考察的底层能力完全不同时间分配上如果没经验很容易前面做太嗨后面没时间写场景题的大题。我当时的时间策略是编程题留40分钟CV基础题30分钟深度学习题30分钟场景设计题留足40分钟。原因很直接——编程题需要安静状态下写代码思路一旦断了很费时间CV基础题是抢分点会就是会不会磨也没用深度学习题容易陷入知道大概但写不完整的陷阱所以要快速把关键点列出来而场景设计题是区分度最大的一道题它考察的是综合设计能力需要的时间最多也最值得认真写。1.3 这套题真正想筛选的能力考完之后复盘我觉得这套题的核心筛选逻辑是你能不能从我会用某个模型升级到我知道在什么场景下该选什么方案并且能解释为什么。它不追求你把每个算法的细节背得一字不差但要求你对常用的视觉任务有足够的工程直觉。这种出题思路在当年的校招里其实算比较超前的。很多公司还在考SIFT和SURF的区别这类经典题时滴滴已经开始考察疲劳驾驶检测系统怎么设计这种贴近业务、需要全局视野的问题了。所以准备这类笔试光是刷题是不够的你得把自己当成一个正在做出行视觉产品的工程师去思考问题。2. 编程题复盘均值滤波、滑窗与边界条件2.1 现场写一个3x3均值滤波看似送分实则陷阱编程题里有一道很有意思的题目给定一个二维数组表示灰度图像请实现3x3的均值滤波要求原地处理并且不能修改图像边界像素。先别看这题简单它埋了好几个坑。第一个坑是原地处理这四个字。如果你直接遍历每个像素用邻域像素的平均值去覆盖原值那么计算下一个像素时它邻域里可能已经有被覆盖过的像素了算出来的结果就不对。所以正确的做法是要么先复制一份原始数据副本要么用双缓冲两个二维数组交替读写。第二个坑是边界。3x3滤波在图像四个边角像素处邻域是不完整的题目要求不能修改边界像素这意味着边界像素保持原值只处理内部区域。很多人一上来就把所有像素遍历一遍边界处理写得不干净很容易被测试用例卡住。第三个坑是数据类型。图像像素通常是0到255的整数如果直接相加再除以9某些语言的整数除法会丢掉小数。题目如果没有明确要求输出类型最好用浮点数保存结果或者保留整数部分但写明你的处理方式。笔试的判分逻辑不会只看最终结果还会看你代码里有没有考虑到这种细节。我当时写的思路大概是这样的import copy def mean_filter_3x3(image): h, w len(image), len(image[0]) src copy.deepcopy(image) # 保留原始数据 for i in range(1, h - 1): for j in range(1, w - 1): total 0 for di in (-1, 0, 1): for dj in (-1, 0, 1): total src[i di][j dj] image[i][j] round(total / 9) return image这段代码只处理了内部区域边界保留原值。如果你把deepcopy这步漏了直接操作原数组大概率会算出错误结果。2.2 滑动窗口经典题与滑窗检测是同一套思维编程题里还有一道和滑动窗口相关的数组题原题记不太清了大意是找数组中满足某种条件的最长连续子序列。这类题在CV笔试里出现是因为滑动窗口这个思想在计算机视觉里太常用了——滑窗检测在图像上按窗口滑动做目标检测本质上就是同一套逻辑。所以它不只是在考你算法也是在提醒你底层的数据处理思维是相通的。滑动窗口类题目的核心套路是用两个指针维护一个窗口右指针不断向右扩展左指针根据条件收缩。关键点在于什么条件下收缩左指针以及如何高效维护窗口内的状态。比如经典的无重复字符的最长子串你需要维护一个字符到出现位置的映射右指针每走一步就更新答案遇到重复字符时把左指针跳到正确的位置。这类题在笔试时最容易犯的错是对窗口状态理解不够把窗口里需要维护的信息初始化错了。我的建议是笔试前把滑动窗口家族的几道经典题无重复字符最长子串、最小覆盖子串、长度最小的子数组都自己手写一遍不要只看题解写多了手感自然就出来了。2.3 笔试写代码最常见的三类失分点结合我当时和其他同学的交流笔试编程题失分基本集中在三个地方空输入和单元素输入没处理。很多题目要求处理输入为空或只有一个元素的边界情况直接跑索引会越界。循环边界条件写错比如应该用写成了一两个用例过不去整体判分被打折。没有评估复杂度就写写了一个时间超限的暴力解法或者空间浪费太大。我的习惯是写完代码后先自己构造几个边界用例在脑子里跑一遍比如空数组、单元素、全相等、逆序排列确认没有问题再提交。校招笔试的时间虽然紧张但这几分钟的心理测试非常值得花。3. CV基础与深度学习题会推公式才能拿全分3.1 卷积输出尺寸、感受野与参数量的手算套路滴滴这套笔试里的CV基础题考察得比较偏理工科基本功。我记得有一道题是给出一个输入尺寸、卷积核大小、padding和stride要求计算输出特征图的尺寸另一道题是计算一个3x3卷积在某个网络结构里的感受野。这类题在准备阶段是完全可以拿满分的因为计算套路非常固定。输出特征图尺寸公式是out floor((in 2 * padding - kernel_size) / stride) 1感受野的计算我习惯用递推法从当前层往回推维护一个RF值和一个stride_product值表示从当前层到输入层的所有stride的乘积。初始时RF 1每往前推一层RF_new RF (kernel_size - 1) * stride_product stride_product stride_product * stride这个公式的含义是越靠前的层它的一个卷积核覆盖的输入范围会因为它后面的stride累积而被放大。举个例子一个两层3x3卷积stride都是1的感受野是5x5这就是把两次3x3卷积堆叠起来用更少的参数量获得更大的感受野——这个结论在VGG那篇论文里被反复强调笔试也爱考。参数量计算更简单一个卷积层参数量等于(kernel_h * kernel_w * in_channels 1) * out_channels加1是bias。如果要算FLOPs再乘上输出特征图的尺寸即可。这些内容我把公式和经典例子整理在一页纸上反复默写考场上的计算题基本是秒答。3.2 IoU计算目标检测送分题的满分写法有一道题是给两个矩形框用左上角和右下角坐标表示要求计算IoU。这题本身不难但得满分需要写得干净、健壮。我当时敲的代码是def compute_iou(box1, box2): # box: (x_min, y_min, x_max, y_max) x1_min, y1_min, x1_max, y1_max box1 x2_min, y2_min, x2_max, y2_max box2 inter_xmin max(x1_min, x2_min) inter_ymin max(y1_min, y2_min) inter_xmax min(x1_max, x2_max) inter_ymax min(y1_max, y2_max) inter_w max(0, inter_xmax - inter_xmin) inter_h max(0, inter_ymax - inter_ymin) inter_area inter_w * inter_h area1 (x1_max - x1_min) * (y1_max - y1_min) area2 (x2_max - x2_min) * (y2_max - y2_min) union_area area1 area2 - inter_area return inter_area / union_area关键点有四个一是max(0, ...)这个操作保证两个框完全不相交时相交面积为0而不是负数二是计算面积时一定要用坐标差而非坐标本身三是两个框完全重合时IoU是1如果不相交则返回0这两种边界情况心里要有数四是要注意坐标系是像素坐标还是连续坐标如果框是像素索引有的面试官会要求宽高是x_max - x_min 1这个约定要提前问或者在注释里写明避免歧义。这种题只要能跑通几个极端用例基本上就是满分。它考察的不是你会不会用某个框架的现成函数而是你有没有真正理解IoU的定义能不能用代码清晰地表达出来。3.3 简答题过拟合、梯度消失与数据不平衡简答题部分问了几个深度学习的基础概念具体原题记不全了但方向我记得很清楚一个是列举防止过拟合的方法并解释原理另一个是梯度消失的原因和解决方案还有一个是当训练样本中正负样本比例严重不均衡时你会怎么做。前两题属于背了就能答的题但想拿高分需要每一条都写出是什么、为什么有效两个层次。比如L2正则化你要写清楚它给损失函数增加了一个权重平方项在梯度下降时相当于让权重向零收缩减小模型复杂度从而降低过拟合风险Dropout则是训练时随机丢弃部分神经元迫使网络学习到冗余表示相当于对多个子网络做集成。数据不平衡这道题就比较拉开差距了。我当时的回答分了几个层次数据层面先说重采样对少数类过采样、对多数类下采样和数据增强算法层面先说代价敏感学习给少数类分错时设置更高的惩罚权重再说用Focal Loss这类专门设计来缓解类别不平衡的损失函数评估层面说明不能只看accuracy要用Precision、Recall、F1甚至AUC来评估模型。最后还补充了一句如果正负样本差距特别大先考虑是否可以用异常检测的思路把任务从分类问题转成离群点检测问题。这类简答题的得分差距就体现在你能不能从多个维度展开。只列出方法名称没有原理解释得分一般不会高。4. 场景设计题把出行翻译成计算机视觉4.1 驾驶员状态监测从人脸检测到疲劳判定的完整链路场景题是我觉得整套卷子里最值钱的一道。原题大概的意思是网约车场景下需要用摄像头监测驾驶员的状态识别疲劳驾驶、分心驾驶等危险行为请你设计一个完整的算法方案。这道题给了很大的发挥空间但也很容易答散。我在答题时用的是输入-输出-模块拆解-技术选型-评估方案的结构把整个系统拆成几个环节输入车内红外摄像头采集的驾驶员面部视频流。室内光线变化大所以用红外摄像头比较可靠夜间也能工作。人脸检测与对齐先用MTCNN或RetinaFace检测人脸并得到关键点眼睛、鼻子、嘴角然后做对齐把脸矫正到标准姿态。关键点跟踪与人脸姿态估计在连续帧里跟踪关键点同时估计头部欧拉角pitch、yaw、roll判断司机是不是长时间低头或转头。疲劳特征计算这部分的专业术语叫PERCLOS眼睛闭合时间占比统计单位时间内眼睛闭合帧数占总帧数的比例还可以计算EAR眼睛纵横比EAR低于某个阈值就判定为闭眼。哈欠频率可以用嘴部关键点计算嘴巴张开大小来判断。判定逻辑把上述特征串起来设定阈值和持续时间。比如连续3秒闭眼或者1分钟内哈欠超过5次就触发预警。预警与处置触发报警后在车机端提醒司机同时把事件上传到云端由安全运营人员二次确认。4.2 前车距离估计与车道线分割这类问题怎么拆解场景题有时候不只出一题我记得卷子里还有一道和辅助驾驶相关的题大意是问怎么利用单目摄像头估算与前方车辆的距离。这类问题在出行场景下很常见但单目摄像头天然缺少深度信息所以考察重点是你能不能识别出这是个病态问题需要引入额外假设。我当时写方案时先说明单目测距需要借助几何约束比如假设地面是平面的、假设车辆宽度是标准值然后通过检测前车在图像中的底边位置结合相机内外参利用小孔成像模型反推出距离。更进阶的做法是结合目标检测拿到车辆的bounding box再根据车辆实际宽度和相机焦距做三角测量。这个问题还有一条思路是直接用深度估计网络比如Monodepth系列输出单目深度图再结合检测框取深度平均值。但我在答卷上特意补充了一句这类方法的精度受数据分布影响较大在工业落地时通常需要和毫米波雷达或双目摄像头做融合这是纯视觉方案的天然短板。答题时能把方法A 方法A的不足 替代方案B这个逻辑写出来比只写一种方案要加分很多。面试官想看到的是你具备工程判断力而不是一个只会背模型的技术员。4.3 场景题的答题框架这样写面试官才觉得你真做过我后来把场景题的答题方法总结成一个框架笔试和面试都可以用第一步明确问题边界。先写清楚输入是什么传感器类型、数据形式、输出是什么检测结果、预警信号、约束条件是什么实时性要求、算力限制、成本限制。第二步给出整体流程按感知-决策-执行或数据-特征-判断来组织。不用画图但要写清楚每一步的输入输出。第三步把每个模块的技术选型和理由写清楚。尽量写经典且成熟的方法不要一上来就上SOTA模型因为面试官会追问你为什么选这个方案。第四步说明你会怎么评估这个系统。用哪些指标准确率、召回率、误报率、在不同场景下怎么测试白天、夜晚、雨天、最难处理的case是什么。第五步主动写出方案的限制和改进方向。这会让你的答案显得真实且有深度因为真实系统永远有局限性能主动暴露问题的候选人才是工程团队想要的。这套框架我至今还在用带新人的时候也推荐他们这么写技术方案效果非常好。5. 笔试之后面试追问与备考路线修正5.1 面试官会顺着笔试答案追问什么笔试结束到面试通知之间那段时间我做了个很重要的动作把笔试里没答透的地方全部过了一遍。后来面试时果然被追问了好几个相关的问题比如你刚才说的PERCLOS阈值是怎么定的如果摄像头被遮挡或者司机戴口罩怎么办你用MTCNN做检测在低光照下的效果怎么保证。这些问题本质上是面试官想确认你是真的思考过这个方案还是只是背了一个标准答案。所以准备这类岗位时有一个技巧特别重要笔试写下的每个方案都要追问自己三个问题——这个方案的缺点是什么它在极端情况下会怎么失效换一个方案能不能解决提前把这几个问题想清楚面试时你就不会慌。5.2 针对出行视觉方向的三个月备考路线如果时间充裕针对滴滴这种出行场景的CV岗位备考可以按三个月来规划。第一阶段前一个月主攻基础图像处理的经典算法滤波、边缘检测、特征点提取、CNN的核心结构卷积层、池化层、BN、目标检测的经典流程两阶段和单阶段各吃透一个。第二阶段第二个月主攻场景化问题多看看自动驾驶、驾驶员监控、车载视觉相关的公开论文和工程博客自己在纸上设计几个场景方案。第三阶段最后一个月是冲刺实战把LeetCode里数组、链表、字符串、滑动窗口、动态规划这些高频题型刷熟每天限时刷2-3道CV基础的计算题自己整理一页纸的公式场景题找几个真实的业务需求反复练习口述。这个路线的核心逻辑是先有理论基础再有场景意识最后落到代码能力。三重能力一起来笔试的四个模块就都能覆盖到。5.3 我踩过的坑与实际调整最后说说我自己踩过的坑帮你们避一避。第一个坑是前期只顾刷深度学习模型把传统图像处理和基础数学题忽略了结果笔试里好几个计算题和简答题答得并不完善。第二个坑是编程题平时练习用的是本地IDE有自动补全和语法提示到了笔试的在线编辑器才发现手写代码容易出低级语法错误后来专门逼自己在不带提示的编辑器里刷题。第三个坑是场景题一开始写得太论文风堆了很多SOTA模型的名称却没有解释为什么选它、它在业务场景里会遇到什么问题。后来我调整了策略每次答场景题都强迫自己站在一个要真正在产线上部署这套系统的工程师角度来写内容反而扎实了很多。这些坑如果你提前知道就能少花很多时间试错。校招是一个信息差和时间赛跑的游戏希望这篇复盘能帮你把方向走得更准一点。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价