这两年智能驾驶一直是最热的赛道之一,不少师弟师妹问我:“滴滴的智能驾驶研发工程师笔试到底考什么?怎么准备?”说实话,网上的面经大部分都停留在“考了C++、考了深度学习”这种一句话概括,真正能把考察逻辑、复习方向和答题策略讲透的很少。我自己当年也是从这场笔试一路走过来的,工作后还参与过这类岗位的出题和面试。这篇就把滴滴出行2018校园招聘智能驾驶研发工程师笔试背后的事拆开聊一聊,结合我的实际经验,讲清楚笔试在考什么、为什么这么考、以及你应该怎么准备。不管你是正在准备秋招的应届生,还是想转行进入智能驾驶领域的技术人,这篇内容都值得认真看一遍。
1. 笔试考察维度与岗位能力模型拆解
1.1 智能驾驶研发工程师究竟在考什么
先别急着搜题刷题,你得先想明白一件事:这类笔试筛选的不是“会做题的人”,而是“具备智能驾驶研发潜质的人”。滴滴作为出行平台,它在智能驾驶上的布局偏向L4级自动驾驶,也就是Robotaxi方向。这个业务属性直接决定了笔试的出题倾向——不是纯算法竞赛套路,而是要看你对“车如何自己开”这件事有没有系统认知。
从岗位JD来看,智能驾驶研发工程师通常分为感知、预测、规划控制、高精地图与定位等方向,但校招笔试往往不会分得那么细,它更像是一个“通用基础能力测试”。我当年拿到的那套卷子,大致覆盖了四块:C++编程基础、数据结构和算法、机器学习/深度学习基础、计算机视觉或传感器相关常识。前两块是硬底子,后两块是专业分水岭。
这里要特别提醒:很多同学把精力全放在刷LeetCode上,结果笔试中占比很大的深度学习概念题和专业场景题反而丢分严重。这类笔试的筛选逻辑不是让你拿满分,而是通过一套组合拳,快速判断你的知识结构是否匹配智能驾驶研发的要求。所以备考前第一步,是把自己的知识版图对齐到岗位能力模型上,而不是盲目刷题。
1.2 从岗位JD反推笔试重点
我习惯把校招笔试比作一次带体检性质的“能力快照”,它不会给你留出大量时间慢慢推理。120分钟左右的考试时间,既考你会不会,也考你熟不熟。从滴滴这类出行企业的智能驾驶研发岗位JD里,你能反推出几个关键信号:
第一,C++是绝对主力语言。智能驾驶车端系统对实时性和稳定性要求极高,C++是自动驾驶操作系统、感知推理引擎、规划控制模块的主流实现语言。笔试中手写C++代码、问内存管理、考察STL底层的题目几乎必出。
第二,算法题偏工程实现而非竞赛技巧。举个例子,动态规划会考,但更常见的是“给定障碍物坐标和车辆当前位置,用A*或Dijkstra规划一条路径”这类与路径规划直接挂钩的题目。这背后其实是智能驾驶中全局规划模块的简化模型。
第三,深度学习从“会调包”升级到“懂原理”。智能驾驶感知大量依赖深度神经网络,面试官会用笔试题目筛选出那些不仅会用PyTorch,还能讲清楚反向传播、梯度消失、BN原理的候选人。
第四,场景题的出现频率越来越高。比如“在雨天摄像头被泥水遮挡的情况下,如何保证感知性能”这种开放性题目,考察的是系统思维和工程判断力。
1.3 滴滴智能驾驶研发岗的笔试特色
相比其他车企或科技公司的智能驾驶岗位,滴滴的笔试有自己的特色。出行平台做自动驾驶,最核心的场景是城市复杂道路——不是封闭园区或高速简单路况,而是行人乱穿、外卖车逆行、施工封路、恶劣天气交织在一起的真实运营环境。这一点会直接体现在题目设计上。
比如我那次笔试中,有一道规划相关的题目,背景就是“城市十字路口,左转车辆和直行行人同时存在,如何设计决策逻辑”。这类题考查的不是单纯的最短路径算法,而是对安全权衡、交通规则约束、预测不确定性建模的综合处理能力。如果你平时只跑过Carla仿真里的简单赛道,对这种题目会感到比较棘手。
另外一个特色是滴滴的笔试倾向把“高精地图”和“实时感知”结合起来考。因为Robotaxi要在城市里跑,定位精度和地图鲜度是核心痛点,笔试中可能出现关于GPS信号丢失时如何用视觉/激光雷达做定位补偿的问题。这类题目在通用算法面试中很少见,但在智能驾驶研发岗笔试中属于“意料之中”的存在。
2. 核心知识模块深挖:这几个考点务必吃透
2.1 C++与数据结构:笔试的硬通货
无论你投的是感知还是规划方向,C++基础题都是第一大关。这类题目对科班同学相对友好,但对非科班转行的同学是明显分水岭。我把常考点整理了一下,基本逃不出这几个领域:
内存管理是必考中的必考。智能驾驶车端设备的内存资源比服务器紧张得多,代码写得糙不糙直接关系到系统稳定性。常见考点包括:智能指针(shared_ptr、weak_ptr、unique_ptr的实现原理与使用场景)、栈和堆的区别、内存泄漏的排查思路、RAII机制。面试官不会直接问“什么是内存泄漏”,而是让你写一段可能发生内存泄漏的代码,再问你如何修复。
STL底层原理也是高频区。vector扩容机制(这里有个考点:reserve和resize的区别)、map和unordered_map的底层数据结构及时间复杂度的差异、排序相关的sort底层实现。为什么要考这些?因为智能驾驶系统中的传感器数据流是海量的,数据结构和算法选型直接决定系统实时性能。
设计模式偶尔也露露脸,尤其是单例模式和工厂模式。感知模块、规划模块、控制模块之间的解耦设计,在真实工程中大量使用这两种模式。笔试中可能让你手写一个线程安全的单例,这其实是在考验并发编程意识。
数据结构和算法部分,重点不是刷遍LeetCode,而是围绕高频题型做精。链表(反转、合并、找环)、二叉树(遍历、深度、最近公共祖先)、图(最短路径、拓扑排序)、动态规划(路径类、背包类)。智能驾驶的地图搜索、路径规划、状态转移建模,和这些基础题有很强的对应关系。
2.2 机器学习/深度学习:从原理到工程
如果你的方向偏感知,机器学习这块的分量会非常重。笔试不会让你现场训练一个模型,而是通过概念题和简答题考察你对机器学习基本范式的理解深度。
我梳理了近几年相关岗位笔试的高频考点,主要集中在以下方向:
损失函数与优化器的选择逻辑。交叉熵和均方误差在分类、回归任务中的适用性差异是什么?SGD、Momentum、Adam各自解决了什么问题?为什么Adam在Transformer类模型中反而容易出现收敛问题?这类题目表面考理论,实际考的是工程调参经验。
模型训练中的经典问题:过拟合(正则化手段)、梯度消失/梯度爆炸(BN、残差结构)、类别不平衡(focal loss、数据增强)。智能驾驶感知中,困难样本挖掘是永恒话题,笔试题里考focal loss的概率很高。
卷积神经网络的基础组件。卷积层的感受野计算、池化层的作用、1x1卷积的本质、空洞卷积为什么不增加参数却能扩大感受野。一些笔试题会直接给一个特征图尺寸,让你手算卷积输出尺寸。
Transformer在视觉领域的应用。近年(虽然那年在出题时算前沿)BEVFormer这类基于Transformer的鸟瞰视角感知方案已经成了行业主流。笔试可能会考察自注意力机制的计算过程、为什么视觉Transformer需要位置编码。
如果你投的是规划控制方向,笔试的机器学习权重会相应降低,但对搜索算法、优化理论、控制理论的考察会加深。比如PID控制器参数整定、LQR和MPC的区别、RRT与A*的应用边界等。
2.3 感知与定位:智能驾驶的“眼睛”与“坐标系”
智能驾驶笔试里经常出现一些看似“偏硬核”的题目,本质上是在考察你是否理解车端传感器的物理特性与数据特性。这一块虽然不要求你掌握得非常深,但基础的传感器原理和融合思路必须清晰。
先看传感器。摄像头、激光雷达、毫米波雷达是三大主力。常考的对比维度包括:分辨率、探测距离、恶劣天气下的表现、成本、点云/图像的稀疏程度和维度。需要记住一些基础量级:激光雷达的探测距离通常在150米-250米,摄像头在100米左右,毫米波雷达的测距测速优势在恶劣天气下非常明显。
相机模型与标定也是笔试错题高发区。内参和外参如何定义?畸变是怎么产生的?车上有多个传感器时如何做坐标系对齐?这里考察的就是空间变换的基础功底。这类题难住过很多人,是因为平时大家跑模型时直接调包,很少关心点云或像素在物理世界中的投影关系。
定位技术方面,GNSS/IMU/视觉里程计/激光里程计各自的优缺点要能讲清楚。GPS在城市峡谷里有可用性问题,怎么办?IMU有累积漂移,怎么校正?融合定位的经典工具是卡尔曼滤波,笔试题中的考察方式通常是:给你一个运动模型和观测模型,让你列出预测更新和观测更新两个步骤的核心公式,并解释卡尔曼增益的作用。
3. 高频笔试题型与答题策略
3.1 手写代码题:不只求对,更求稳
笔试代码题一般有两到三道,我总结的一个规律是:第一道通常是C++基础代码题(如字符串处理或链表操作),第二道是中间难度的算法题(DFS/BFS或动态规划),第三道可能与智能驾驶场景结合的偏应用算法题。
以“感知候选框去重”为例,这类题本质是NMS(非极大值抑制)的代码实现,但如果你只背过Python版本的NMS,而笔试要求用C++手写,还是有不少细节需要处理。在实现之前先和面试官确认,是单纯按目标检测框处理,还是考虑类间独立的NMS,这能避免方向跑偏。代码题答题策略我总结为四点:
- 先想清楚边界条件再动笔。比如处理链表时,链表为空、只有一个节点、头节点需要删除的情况分别怎么处理,先列出来。
- 变量命名要可读。智能驾驶研发是工程属性极强的岗位,代码风格和逻辑清晰度甚至比答案本身更重要。我参与筛卷时,看到乱糟糟的变量名和函数设计,印象分是很低的。
- 写完代码一定要自己走一遍测试用例。很多同学在编辑器里不检查就提交,往往在循环边界上丢分。
- 如果时间充裕,可以提一下时间复杂度和空间复杂度,这是区分“刷题党”和“理解派”的一个重要信号。
3.2 简答与论述题:系统思维更吃香
除了代码题,笔试里那些简答题才是真正拉开分数差距的地方。这类题通常是一个开放场景,比如“如何设计一个城市道路场景下的前车切入检测系统”“如何评估一个感知模型在雨雪天气下的鲁棒性”“如果一辆车在隧道中丢失GPS信号,如何保持稳定定位”。
答这类题时,最容易踩的坑是“只讲一个点但不展开”。比如一提到GPS丢失,就只写“用视觉里程计补”,但完全不提视觉里程计自身的漂移如何校准、IMU如何提供短期姿态参考、如何通过高精地图匹配来修正累计误差。这暴露出你的知识体系是碎片化的。
我的策略是:按“输入-处理-输出-兜底”的框架来组织答案,这样能覆盖完整链路。以“隧道中GPS丢失”为例,输入层是摄像头、IMU、轮速计可用的信号;处理层是用视觉特征点匹配估计相对位姿变化、IMU积分获得高频姿态增量、轮速计约束纵向速度;输出层是融合后的定位结果;兜底层是提前构建的隧道内高精地图特征库,通过匹配修正漂移。
这样答的好处是:既展示了知识面,又体现了工程系统思维,这正是智能驾驶研发工程师最核心的软实力。
3.3 场景设计题:把自己当成研发工程师
还有一类题是给你一个具体场景,让你设计解决方案。比如“在暴雨天气下,视觉感知性能下降明显,你会从哪些角度解决”。这类题没有标准答案,但考官能从你的答案中看出你思考的广度和深度。
比较推荐从数据、算法、传感器、系统四个维度来回答。数据层面,收集雨天数据训练鲁棒模型,做数据增强;算法层面,设计多传感器融合策略,当摄像头的置信度下降时,提高激光雷达和毫米波雷达的权重;传感器层面,部署防水性能更好的传感器或增加清洗系统(雨刷、喷嘴);系统层面,在融合框架中加入天气状态估计,动态调整各传感器的融合权重,必要时降低自动驾驶等级或进行安全停车决策。
这类题的答题节奏也很重要。我建议先花30秒理清框架,再逐条展开,不要一上来就陷入某个技术细节。比如抓住“摄像头被泥水遮挡”这个具体问题,先定义这是感知输入异常,再拆解成检测(如何判断遮挡)、响应(如何切换传感器权重)、冗余(如何设计系统级兜底)三个层面来答,比泛泛而谈“提高模型鲁棒性”要扎实得多。
3.4 常考基础知识速查表
为了方便大家快速自查,我把这几年智能驾驶研发岗笔试中出现频率较高的基础考点整理成了一张表,你可以对照着查漏补缺。
| 知识模块 | 高频考点 | 考察意图 |
|---|---|---|
| C++ | 智能指针实现原理、内存对齐、左值右值与移动语义 | 判断是否具备车端代码工程化素养 |
| 数据结构 | LRU缓存、跳表、红黑树与AVL的差异 | 判断应对流式数据结构的选型能力 |
| 算法 | 动态规划路径类题目、A*搜索、Dijkstra | 为全局规划与局部规划打基础 |
| 深度学习 | 反向传播推导、BN在训练和推理时的区别、感受野计算 | 判断对感知模型原理的掌握深度 |
| 机器学习 | 正则化、Focal Loss、类别不平衡方案 | 判断对自动驾驶长尾数据的理解 |
| 传感器 | 三大传感器对比、相机标定、LiDAR点云特点 | 判断对感知物理基础的了解程度 |
| 定位 | 卡尔曼滤波预测更新方程、坐标系变换 | 判断对状态估计基础理论的掌握 |
| 控制 | PID整定、LQR与MPC对比、前馈反馈结合 | 判断对车辆控制方案的了解 |
4. 从笔试延伸到面试:智能驾驶研发岗全流程准备
4.1 系统设计题怎么答才能出彩
笔试只是第一关,但在准备笔试的过程中,你实际上也在为后续的面试打底子。尤其是一些系统设计类的问题,笔试时的论述题和面试时的系统设计题在思路上是相通的。很多同学在面试时一上来就画框图、讲模块,结果讲到一半就被追问到卡壳,原因是不够注重需求边界和数据流的梳理。
我认为一个比较好的答题结构是四步。第一步,明确设计目标与约束条件。是做L2辅助驾驶还是L4自动驾驶,是高速场景还是城市复杂场景,这些前提直接决定方案的复杂度。第二步,定义输入输出和数据流。比如做一个前车切入检测系统,输入是前视摄像头图像序列+毫米波雷达点迹,输出是切入目标的轨迹预测与风险等级。第三步,拆解核心模块并细化。感知模块如何检测目标、跟踪模块如何做数据关联、预测模块如何估计切入意图。第四步,谈缺点与扩展方案。任何系统设计都有边界,主动说出“在夜间或逆光场景下这套方案可能失效,需要补充红外或毫米波信息”,比被动等面试官指出要加分很多。
智能驾驶的系统设计,核心挑战往往不是单个算法的精度,而是多个模块之间的耦合与冗余设计。笔试时能体现这种系统级的思考,面试时还会更受看重。
4.2 项目经历如何包装成亮点
笔试和面试准备不冲突的另一个点在于,你写在简历上的项目经历,大概率会成为笔试论述题和面试追问的素材。很多同学在项目描述里写“使用YOLOv5实现目标检测”,只有这一句话,面试官完全找不到深入问的抓手。更好的项目描述方式是:这个项目解决的是什么真实问题 → 我采用了什么方法 → 效果如何衡量 → 我踩过什么坑如何解决的。
有同学曾在项目里写过“在ZED双目相机上做了一个深度估计模块”,面试官很自然地追问了几个问题:你用的是什么网络结构、训练时如何监督、深度尺度怎么恢复、在遮挡区域效果差如何解决、双目视觉和结构光方案相比的优劣。这几个问题其实就构成了一个完整的笔试论述题。如果平时自己不主动深挖项目,到了笔试和面试现场,很容易被层层追问击穿。
建议在项目描述中主动加入一个“攻坚克难”点。比如训练数据不足,你做了什么样的数据增强;模型推理速度慢,你做了量化还是剪枝,效果分别怎么样。这些细节就是笔试和面试里的差异化竞争力。
5. 常见问题与备考时间规划
5.1 应届生常问的5个问题
在带应届生和解答同学疑问的过程中,有几类问题反复出现。我把它们整理成一份问答速查,都是大家最关心的共性问题。
问:非科班出身,没系统学过C++和深度学习,能投智能驾驶研发岗吗? 答:可以,但要有心理准备。智能驾驶研发岗的知识链路比较长,从编程语言到数据结构,从机器学习到传感器融合,再到系统设计,每一环都需要补。建议给自己至少三到六个月的集中准备时间,而不是指望靠刷几套题就通过笔试。
问:笔试时要优先保证代码题还是论述题? 答:代码题是基础门槛,论述题是区分度所在。从时间分配上讲,代码题不能失守,论述题尽量多写、写全。如果时间来不及,论述题至少要把框架列出来——考官能从框架中看出你的思路是否清晰。
问:需要把论文里的最新模型都背下来吗? 答:不需要。笔试考的是核心基础能力和工程思维,对最新模型最多停留在“知道名字、知道核心思想、知道适用场景”的层面。盲目堆砌前沿模型名称,反而容易在追问中暴露出理解不深。
问:要不要为了笔试专门学ROS? 答:ROS本身在笔试中不常直接考察,但如果你投的是偏工程的方向(规划控制、系统集成),了解ROS的通信机制、节点设计、TF坐标系管理会有帮助。笔试中偶尔会出现与话题相关的名称解释或简单设计题。
问:多练几套往年真题是不是就够了? 答:不够。智能驾驶笔试重理解、重组装,不重记忆。真题的作用是帮你校准方向,但你不一定能碰到完全相同的题目。最好的状态是“练一套题,吃透一块知识”,反复总结考点背后的逻辑。
5.2 三轮复习法:一个月冲刺笔试
如果你现在距离笔试还有大约一个月,我建议按下面三轮来安排复习,每一轮的时间占比大致是3:4:3。
第一轮是知识框架扫盲(约9天)。先对照岗位JD列出一份自查清单,把C++基础、数据结构、深度学习核心概念、传感器与定位基础四大块过一遍。不用深挖,但要做到“看到名词能说出大概”的程度。这一步的目的是消灭知识盲区,建立整体地图。
第二轮是重点模块深挖与刷题(约12天)。对照高频考点表,逐个模块深挖。C++重点看智能指针和STL,深度学习重点看反向传播和卷积计算,算法重点做图搜索和动态规划。这一轮要配合刷题,但不要盲目追求数量,每天精做两三道、吃透背后的思路即可。
第三轮是模拟实战与查漏补缺(约9天)。严格按笔试时间做两到三套模拟题,不翻资料、不暂停。做完后逐题复盘,把错题整理成错题本,反过来补充对应模块的基础知识。这轮还有一个任务:手写一遍常见算法的模板,比如NMS、匈牙利匹配、A*搜索、卡尔曼滤波更新方程,保证到了考场上能条件反射地写出来。
三轮复习下来,我认为你至少能在笔试中稳定输出。真正的关键指标不是刷了多少题,而是能不能持续保持对每个问题追问“为什么”的习惯。
5.3 避坑指南与经验心得
从我自身经历和参与校招筛选的经验出发,我想再补充几个容易踩的坑。
第一,不要在笔试前临时去啃太难的理论。有些同学喜欢在考试前突击看BEVFormer的完整论文推导,但这对笔试的成绩提升非常有限。笔试的题目通常更偏基础概念和系统设计,理解透彻核心概念比背诵论文细节更有价值。
第二,时间分配不要失衡。常看到有同学在代码题第一题上花了40分钟,结果后面的大题完全没时间写。遇到卡壳的题,先在草稿纸上写下思路,跳过去做后面的题,有时间再回头补代码。智能驾驶笔试不追求单题满分,而是追求整体得分效率。
第三,论述题千万别空着。哪怕你对某个问题不太确定,也要把思路框架写出来。这一点在方向和框架搭对时特别有效,考官可以从框架中看到你对系统的思考方式。留白基本等于放弃。
第四,注意审题中隐含的业务场景。比如题目出现“城市晚高峰”或者“隧道”,这些不是多余的修饰词,而是答题时会影响你技术选型的关键条件。城市晚高峰意味着大量遮挡,隧道意味着GPS可能失效,你要把这些约束体现在方案设计里。
写到最后的一些体会
回过头来看,智能驾驶研发工程师的笔试题,其实是这个行业技术栈的一面镜子。它不会只考你“算法题刷得多不多”,而是更在意你有没有一套完整的工程思维框架。我自己当年也经历过“代码能跑就行”的迷茫期,后来参与实际项目和校招出题才意识到,笔试里的每一道基础题,背后都对应着真实自动驾驶系统中的某个关键模块。如果你能把刷题备考和系统思考结合起来,你会发现自己不只是在应付一场考试,而是在自己构建一个“自动驾驶工程师”的思维底座。希望这篇拆解能给你一个清晰的方向。最后再说一个个人心得:真正有效的备考,不是堆时间,而是反复追问自己“这个知识点在车上解决什么问题”,一旦建立这种思维习惯,笔试和面试都会顺畅很多。