公司动态

滴滴计算机视觉与智能交互算法岗笔试复盘与高频考点全解析

📅 2026/8/30 5:48:44
滴滴计算机视觉与智能交互算法岗笔试复盘与高频考点全解析
2018年秋招那会儿我通过学长内推拿到了滴滴出行“计算机视觉研发及智能交互技术研发工程师”的笔试资格。当时滴滴的AI团队正在大扩张车内司机人脸识别、疲劳驾驶检测、车载语音助手、智能客服这些方向全在招人这两个岗位挂在同一个申请入口下笔试也是同一套卷子。笔试在牛客网线上完成平台全程监控时长两个小时题量不算大但覆盖面非常广从数学基础到深度学习理论再到手写代码都有涉及。这篇文章我会结合当年那场笔试的真实体验把考察思路、高频考点、编程题复盘和踩过的坑系统整理一遍给准备视觉算法岗校招的同学一个可以直接参考的复习框架。1. 从岗位JD反推考察逻辑这套笔试题为什么这么出1.1 双岗位共用一张卷的底层逻辑第一次看到笔试通知时我也有点疑惑计算机视觉和智能交互技术研发这两个方向怎么会用同一套题后来实际做下来才明白滴滴把这两个岗位放在一起考察是有意的。这两个岗位在技术栈上高度同源。计算机视觉研发偏图像和视频理解智能交互技术研发偏语音、文本和多模态交互但在深度学习时代两者的基本功完全重叠——神经网络结构、反向传播、损失函数设计、序列建模、模型部署这些是共通的。滴滴在校招笔试阶段的核心目标不是区分你是视觉方向还是语音方向而是把具备扎实算法功底和工程能力的候选人筛出来具体方向对口与否留到后续技术面去验证。另外滴滴的场景本身就决定了这两个方向经常需要协同。比如做司机驾驶行为分析既要识别司机的面部表情和动作视觉又要结合车内语音指令和告警提示交互做智能客服既要理解用户语音输入交互也可能需要识别用户上传的图片问题视觉。所以共同考察一套基础能力是完全合理的筛选逻辑。想明白这一点复习方向上就不会跑偏——不用去死磕特别冷门的偏题怪题把机器学习、深度学习、数据结构和算法这些地基打牢才是通过笔试的关键。1.2 题型结构与时间分配的实战判断我印象中当时试卷的结构大致分成三块约20道单选题覆盖概率统计、线性代数、机器学习基础概念、深度学习理论每题1-2分两三道简答题要求写出公式推导过程或算法流程描述两道编程题一易一难需要在线编写可运行的代码提交总时长120分钟。这个结构其实很有讲究单选题用来快速筛基础知识是否成体系简答题看你能不能把原理讲清楚编程题则直接考察工程编码能力。三个维度组合起来基本能判断一个候选人有没有经过系统的算法岗训练。时间分配上我后来复盘觉得比较合理的方案是单选题控制在40分钟内简答30分钟编程题50分钟最后留10分钟检查。之所以强调这个是因为我当年在单选上磨了太久导致第二道编程题只写了一半就交卷了这是个非常惨痛的教训。2. 高频考点拆解视觉与交互方向共同的地基2.1 数学与机器学习基础绕不开的送分题和送命题单选题里数学基础占了相当比重尤其是概率统计和线性代数。贝叶斯公式、条件概率、常见分布正态分布、二项分布、泊松分布的期望与方差、最大似然估计的基本概念这些属于送分题但前提是你真的动手算过而不是只在课本上扫过一眼。线性代数考察的重点集中在特征值分解、奇异值分解SVD和矩阵的秩这些概念上。我当时被一道关于特征值在PCA中的应用题卡了一会儿现在回头看这类题的核心在于理解“特征向量构成数据变化的主要方向”这个几何含义而不只是死记公式。机器学习基础部分逻辑回归、SVM、决策树、集成学习是绝对高频。特别是几个经典问题L1正则和L2正则的区别L1产生稀疏解L2让权重趋向于小值。原因是L1在零点不可导优化时容易把系数推到零。精确率、召回率、F1、AUC各自的适用场景不平衡样本下准确率会失真这时候AUC和F1更能反映模型真实水平。样本不平衡的处理过采样、欠采样、Focal Loss、调整分类阈值这些都要能说上几句。单选里不会考太深但简答题有概率出现“请说明如何解决类别不平衡问题”这类开放性问题所以这些知识点不仅要懂概念还要能组织语言写出来。2.2 深度学习理论手推反向传播是分水岭深度学习的考察是整套试卷的核心也是区分度最大的部分。首先绕不开的是反向传播。我当时遇到一道简答要求推导一个两层全连接网络的BP过程。虽然题目设置了具体的网络结构和损失函数但本质上考察的就是链式法则的熟练运用。这里的关键经验是不要只背结论一定要自己完整推导过一遍。从损失函数对输出层权重的梯度到对隐藏层权重的梯度每一步写在纸上把维度对齐检查一遍这个过程在笔试和面试中都极其重要。另一个高频考点是Sofmax交叉熵的梯度推导。这个结论非常优美——对某个类别输出的梯度等于预测概率减去真实标签即∂L/∂z_i p_i - y_i。这个公式笔试经常考面试更常考建议自己推一遍。其他经常出现的理论点包括激活函数的对比Sigmoid、Tanh、ReLU各自的优缺点以及ReLU解决梯度消失的原理BatchNorm的作用缓解内部协变量偏移、允许更大的学习率、有轻微正则化效果Dropout为什么能防止过拟合训练时随机丢弃神经元等价于训练多个子网络的集成优化器发展脉络SGD → Momentum → RMSProp → Adam以及各自的适用场景这些知识现在依然是算法岗笔试面试的标配我当时是通过画图加手写公式的方式复习的每个知识点都用自己的话写一遍到了考场上遇到原题或变体都能较快反应。2.3 计算机视觉专项从图像分类到目标检测视觉方向的考察集中在经典网络结构和目标检测算法这两块。图像分类网络中VGG的“小卷积核堆叠”思想、ResNet的残差连接解决深层网络退化问题、Inception的多尺度卷积核并行这三个是最常出现的。我当时遇到一道选择题问ResNet解决了什么问题答案是网络退化而非梯度消失——注意细节这是常见的干扰项。目标检测是考察的重头戏。从R-CNN的候选区域加分类结构到Fast R-CNN的ROI Pooling加速再到Faster R-CNN引入RPN实现端到端训练这条演进路线要能讲清楚每个版本的改进点和性能提升来源。另外YOLO把检测当作回归问题的思路、SSD的多尺度特征图预测也都是高频考点。我当时还准备了一些更贴近滴滴场景的技术点虽然笔试没有直接考到但在后面的技术面试中帮助很大司机疲劳驾驶检测通过摄像头获取人脸关键点计算眼睛闭合时间比例PERCLOS来判定疲劳状态人脸识别的基本流程人脸检测 → 人脸对齐 → 特征提取 → 特征比对目标跟踪在车载场景的应用多目标跟踪MOT处理路上行人、车辆有一个高频简答题值得单独提写一下NMS非极大值抑制的实现思路。这个几乎是检测相关岗位笔试面试的必考题。思路很简单按置信度排序依次选择最高分框删除与之IoU超过阈值的其他框迭代直到处理完所有框。2.4 智能交互专项语音序列建模与多模态融合智能交互技术研发方向的知识点集中在语音识别和自然语言处理两块。语音识别的基础链路我复习时总结成一条线音频 → 分帧 → 特征提取MFCC → 声学模型 → 语言模型 → 解码输出文本。MFCC即梅尔频率倒谱系数模拟人耳对不同频率的非线性感知是语音识别最常用的特征。传统声学模型以DNN-HMM混合架构为主用HMM建模时序状态转移用DNN建模每个状态的观测概率。这里有一个关键考点循环神经网络为什么适合语音和文本这类序列数据。答案是RNN通过隐藏状态传递历史信息天然处理变长序列但长距离依赖问题需要LSTM/GRU的门控机制来解决。另外序列到序列模型加注意力机制彻底改变了语音识别和机器翻译的范式——注意力机制的本质是让解码器在每一步生成时自动聚焦到编码器输出的最相关信息上。自然语言处理方向Word2Vec的CBOW和Skip-gram两种训练方式、词向量的语义表示能力也是高频考点。我当时还专门看了任务型对话系统的框架自然语言理解NLU负责意图识别和槽位填充对话管理DM维护对话状态自然语言生成NLG组织回复。这个框架后来在面试中被问到过。智能交互方向还有一个容易忽略的点多模态融合。滴滴的智能交互场景往往是视觉和语音联合的比如车载系统结合驾驶员视线方向和语音指令来响应用户请求。笔试虽然不会深入考但了解常见的早期融合和晚期融合策略能让你在开放性问题里更有话说。3. 编程题实战复盘两道题磨掉一个半小时3.1 热手题数组中第K大的元素第一道编程题是“找出无序数组中第K大的元素”这道题非常经典考察的是排序和分治思想完全不涉及领域知识属于热手和筛选基础代码能力的题目。我看到这题的第一反应是直接排序后取下标但很快意识到这样做的复杂度是O(n log n)而这道题隐含的要求通常是O(n)。所以正解是快速选择算法利用快排的partition操作每次确定一个元素的最终位置然后根据这个位置与K的关系只处理一侧。平均时间复杂度O(n)最坏O(n²)可以通过随机选择pivot来避免最坏情况。我当时用Python大概写成了这样import random def find_kth_largest(nums, k): def partition(left, right): pivot_idx random.randint(left, right) nums[pivot_idx], nums[right] nums[right], nums[pivot_idx] pivot nums[right] i left for j in range(left, right): if nums[j] pivot: nums[i], nums[j] nums[j], nums[i] i 1 nums[i], nums[right] nums[right], nums[i] return i left, right 0, len(nums) - 1 target k - 1 while left right: pos partition(left, right) if pos target: return nums[pos] elif pos target: left pos 1 else: right pos - 1这道题有几个容易出bug的细节需要特别注意一是循环条件应该是left right而不是left right否则有可能在最后一步漏掉相等情况的判断二是pivot的选择固定取最右元素在数据有序的情况下会退化到O(n²)随机化能明显提升稳定性。另外很多候选人会忽略“K大”和“K小”的转换题目问第K大目标下标就是K-1而不是从后往前数。另一种解法是用大小为K的小顶堆维护当前最大的K个元素堆顶就是第K大。时间复杂度O(n log K)当K较小时这个方法很高效而且不用修改原数组。笔试时如果环境里的语言堆实现方便这个解法代码更不容易出边界bug。3.2 进阶题网格最短路径的DP推导第二道编程题我记得是一个搜索和动态规划结合的问题大意是给定一个m x n的网格每个格子有一个非负权重要求从左上角走到右下角每次只能向下或向右移动求权重和最小的路径。这道题虽然包装成了路径规划场景核心就是经典DP。假设dp[i][j]表示从起点走到(i, j)这个格子的最小路径权重和因为只能从上方或左边走过来转移方程就是dp[i][j] min(dp[i-1][j], dp[i][j-1]) grid[i][j]边界条件要单独处理第一行只能从左往右累加第一列只能从上往下累加。空间上可以优化成滚动数组只需要一维的dp数组因为当前行的计算只依赖上一行的值和当前行左边已经更新的值。我当时写的版本是def min_path_sum(grid): if not grid or not grid[0]: return 0 m, n len(grid), len(grid[0]) dp [0] * n dp[0] grid[0][0] for j in range(1, n): dp[j] dp[j - 1] grid[0][j] for i in range(1, m): dp[0] grid[i][0] for j in range(1, n): dp[j] min(dp[j], dp[j - 1]) grid[i][j] return dp[-1]这个解法时间复杂度O(m n)空间复杂度O(n)在笔试环境里已经足够了。复盘的时候我觉得这道题真正的考察点不只是DP公式本身而是边界条件的处理和空间优化的意识。很多人在纸上会写二维转移方程但落地到代码时经常漏掉第一行第一列的初始化或者滚动数组的更新顺序搞错。另外这个题目背景和滴滴的地图导航业务有很强的关联面试时也容易被追问“如果地图很大怎么办”“能不能并行加速”所以在笔试阶段就培养这类思考习惯会对后续面试很有帮助。3.3 现场节奏和编码细节的教训两段代码写下来我最深的感受是笔试编程题调试成本非常高平台只允许在线编辑没有本地编译器那么强大的报错提示每写错一次手动定位再改可能就要耗费五到十分钟。所以答题策略应该是在脑子里把完整逻辑过一遍再动笔尤其是边界条件和数组下标越界这类问题一次性写对远比写快重要。另外代码风格和注释也能体现专业度。我当时在关键步骤写了简单注释说明转移方程的物理含义虽然不一定会被机器判分但后续如果有面试官调出答题记录这会是额外的加分项。4. 踩坑实录与备赛清单4.1 线上笔试环境和设备问题牛客网这种在线笔试平台最怕的不是题难而是环境出问题。我当时的教训有几点值得分享提前半小时进入考试系统做设备检测包括摄像头、麦克风、浏览器兼容性。有些浏览器对在线代码编辑器支持不好可能出现代码无法提交的情况准备稳定的网络最好用有线网络或者信号强的WiFi考试中途断网会让你极度被动手机保持畅通有些笔试平台在断网或异常操作时会通过短信验证码让你重新进入另一个容易被忽略的是代码语言的选择。笔试时默认可以用Python、C、Java等主流语言我的建议是选你最有把握、语法最熟的语言。不要因为“算法岗应该用C”就临时切换笔试现场没有时间让你回忆语法细节。4.2 做题顺序和取舍的艺术整套卷子最聪明的策略是从易到难也就是先快速扫一遍所有题目按知识块分类标记然后按自己熟悉的程度排序答题。我当时的问题是在单选题上耗时过多遇到不确定的题反复纠结结果挤占了编程题的时间。现在回看更合理的策略是单选题单题超过两分钟果断先标记跳过编程题先写有把握的那道简答题宁可写要点也不要空白因为阅卷是按点给分的。笔试通过看的是总分不是单题满分抓大放小这句话在笔试里特别适用。4.3 笔试之后的晋级路径通过笔试不等于拿到offer但笔试成绩会影响后续流程的节奏。我当时的感受是内推笔试通过后大概一周左右会收到面试邀约一般流程是两到三轮技术面加一轮HR面。技术面里仍然会反复问到笔试里出现过的类似问题比如手推反向传播、讲目标检测的演进路线。所以千万别把笔试当终点。考完当天趁记忆还清晰把不确定的题目查一遍、不会的知识点补一遍这比盲目刷下一家的题库有用得多因为大厂笔试的高频考点高度重叠。4.4 备赛资源清单根据自己的准备过程我整理了一份偏实战向的资源清单对准备这类算法岗笔试的人都适用编程题LeetCode热题100加剑指Offer重点练数组、字符串、二叉树、动态规划四类题型深度学习基础李沐的深度学习课程加经典论文原文论文重点看目标检测系列机器学习基础李航的统计学习方法前六章逻辑回归、SVM、决策树、集成学习要吃透语音交互方向重点看语音识别经典综述和白板推导系列视频刷题后总结准备一个错题本按知识点归档考前一晚只看错题问题类型典型表现解决办法单选耗时过长一题纠结超过3分钟先标记跳过完成编程题后再回看编程题边界出错数组越界或漏判空输入写完代码后手工模拟一组小用例验证简答逻辑混乱公式推导丢步骤按“已知 → 公式 → 代入 → 结论”固定节奏时间不够用最后编程题没写完考前至少完整模拟一套笔试控制节奏我在考完滴滴这场笔试之后最大的体会是算法岗笔试拼的不是你会多少难题偏题而是基础知识的熟练度和代码落地能力。信息论里有个词叫“信道容量”其实笔试也是这个逻辑——在两个小时内你要保证所有知识点的“传输效率”足够高。这个“传输效率”靠临场发挥解决不了只能靠平时的积累和刻意练习。再多说一句内推笔试对简历筛选有豁免但并不等于笔试可以裸考相反内推批次往往竞争对手更强准备得越扎实后面面试的心态才能越稳。