
2018年那会儿智能驾驶这四个字在出行行业里几乎就是“高薪”和“技术壁垒”的代名词。滴滴那年的校园招聘内推里智能驾驶研发工程师这个岗位的笔试绝对是不少想进自动驾驶圈子同学的第一个硬门槛。我当时身边有不少朋友投了这个岗位自己也完整跟了一遍笔试准备的过程对这套考察体系的思路印象很深。这篇文章我想换个角度来聊——不谈那些零零散散的“真题回忆”而是把“智能驾驶研发工程师笔试”当成一个系统来拆出题人到底在考什么、每个模块背后的专业逻辑是什么、你在考场上怎么分配时间才能把已有水平全部兑现出来。适合正在准备自动驾驶方向校招的同学也适合刚入门想了解这个岗位技术栈的朋友。1. 智能驾驶研发工程师笔试先看清岗位再谈刷题1.1 从岗位职责反推考点先搞懂出题人的逻辑很多人备考的思路是“什么热门刷什么”深度学习火了刷检测SLAM火了刷SLAM结果上了考场发现题目分布和想象中完全不一样。这个问题的根源在于没有站在岗位的角度去反推笔试设计。智能驾驶研发工程师在2018年前后这个时间点是出行平台为了构建自动驾驶能力而重点招聘的一类人才。这个岗位的职责不是单一的它横跨感知、定位、规划、控制、系统集成几个大模块。所以笔试的出题逻辑天然就是“一专多能”你可以在某个方向上有深入的理解但基础能力不能有明显短板。从出题人的角度看笔试要解决的核心问题是在海量简历中筛出“具备自动驾驶研发底层素质”的候选人。这个素质包含三层——第一层是编程功底能不能把想法高效地写成代码第二层是算法理解尤其是几何、状态估计、机器学习相关的数学基础第三层是工程意识对传感器、坐标系、实时性这些工程细节有没有概念。所以那份笔试卷子表面上是一道道题目本质上是一个能力扫描仪。这也是为什么我建议所有准备这个方向的同学别急着刷题先把岗位描述里的每个关键词列出来逐个问自己“如果我是出题人我会怎么考这个点”这种逆向思维比盲目刷题高效得多。1.2 智能驾驶笔试的典型模块和出题惯性按照我当时对多家公司智能驾驶岗位笔试的观察这类笔试通常可以分为几个固定模块滴滴的题目在结构上也比较接近这个框架。第一个模块是专业基础选择题/填空题覆盖C语言细节、数据结构复杂度、概率统计、线性代数。第二个模块是编程题通常两到三道难度从中等到偏难重点考察动态规划、图论、滑动窗口、二分答案这些经典算法思想。第三个模块是算法/系统设计题用文字描述一个贴近自动驾驶场景的问题让你给出方案——比如如何设计一个目标追踪模块、如何融合相机和激光雷达数据、如何优化某个计算瓶颈。还有一个容易被忽略的隐性模块数学推导。有些题目会以选择题形式出现但背后需要你对坐标变换矩阵、卡尔曼滤波更新公式、最小二乘解的形式有清晰的记忆。我当时见过不少同学算法题写得很好结果在“用公式表达一个旋转矩阵”这种基础题上翻车非常可惜。出题惯性上智能驾驶方向的笔试会比通用后端岗位更看重“几何直觉”和“物理意义”。同样考动态规划通用岗可能考背包智能驾驶岗可能把同一个思想包装成“路径规划中的资源分配”同样考图论通用岗可能考最短路径模板智能驾驶岗可能问你“如何在地图网格上做覆盖搜索”。理解了这个惯性你就知道复习的时候应该多做什么样的思维转换。2. 笔试核心知识模块四个板块逐一攻克2.1 编程基础与算法绕不开的硬门槛不论你投的是哪个方向的技术岗编程能力一定是笔试的第一关。智能驾驶研发工程师的编程题从语言选择上通常只给C和Python两个选项个别时候会允许Java但C始终是优先推荐。为什么推荐C因为自动驾驶的工程落地几乎绕不开C。感知、定位、规划模块的高性能代码嵌入式控制器上的核心逻辑都是C写的。笔试里用C作答至少说明你具备阅读和编写这类代码的基础能力。算法准备的重心我建议按优先级排序。动态规划是绝对的核心——很多看起来复杂的场景题剥开外壳都是线性DP或者区间DP其次是图和树的搜索BFS/DFS、拓扑排序、最短路径需要手到擒来然后是滑动窗口和双指针这两类题在工程中的映射是“传感器数据流上的滑窗处理”出题人很喜欢把它们包装成流式数据场景。准备方法上我不推荐按题号刷几千道题。更高效的方式是“题型归纳法”每做一道题问自己三个问题——这道题属于什么范式有没有做过同范式的其他题如果换个背景比如从数组变成传感器序列还能不能识别出来这个方法对于应对智能驾驶方向的场景化编程题特别有用因为出题人一定会把算法包装在具体场景里。2.2 感知算法从经典CV到深度学习一个都不能漏感知模块是智能驾驶笔试的重头戏也是区分“真正想做自动驾驶的人”和“泛泛了解人工智能的人”的关键板块。经典图像处理和计算机视觉的内容在笔试中出现频率很高。图像滤波、边缘检测、特征点提取与匹配SIFT、ORB这些、光流法、背景建模这些是感知算法的地基。笔试很少会让你从零推导SIFT的完整流程但会考你特征匹配中的RANSAC原理、图像金字塔的作用、非极大值抑制NMS的动机——这些细节恰恰是很多“调包侠”的知识盲区。深度学习相关的考点则集中在目标检测、语义分割、目标跟踪几个方向。目标检测几乎是必考两阶段和单阶段检测器的区别、Anchor机制的作用、IoU和mAP的计算方式、损失函数里分类和回归分支怎么平衡。语义分割则会涉及FCN、U-Net这类经典结构的设计动机。跟踪方向需要理解匈牙利匹配、卡尔曼滤波在轨迹关联中的角色。这里我特别想提醒一个点笔试中的深度学习题很少直接问“背一个网络结构”更多是给你一个具体问题让你分析某个设计是否合理。比如“把YOLO的检测头从单尺度改成FPN多尺度对性能有什么影响”。这种题考察的是你对技术演进逻辑的理解而不是背参数的能力。准备时多问“为什么要这么设计”比记住结构本身更重要。2.3 定位建图与规划控制理解自动驾驶的“大脑回路”如果说感知是智能驾驶的眼睛那么定位、建图、规划、控制就是它的小脑和大脑。这一整块是智能驾驶研发岗区别于通用AI岗的特色内容也是很多人复习时最没底的部分。定位模块的考点集中在几个方向GPS/IMU/里程计的基础原理和误差模型、卡尔曼滤波及其扩展EKF、UKF的适用场景、多传感器融合的基本架构松耦合vs紧耦合、高精度地图在定位中的作用。你会发现这些考点的共性都是“不确定性处理”——怎么在噪声中估计自己在哪里是定位问题的核心哲学。建图SLAM部分如果笔试涉及通常会考察前端配准ICP、NDT和后端优化图优化、回环检测的基本概念以及一些经典框架的优劣势讨论。对于2018年这个时间点视觉SLAM和激光SLAM的对比也是热门出题方向。规划与控制模块的考点则更加“算法化”。路径规划中的A*、RRT、Dijkstra是笔试常客轨迹规划可能涉及多项式曲线拟合、贝塞尔曲线、样条曲线的基本概念。控制部分更偏概念——PID控制器的参数整定逻辑、MPC的基本原理和它相对PID的优势这些理解到“能用一句话说清楚核心思想”的程度就够应对选择题和简答题了。学习这一块时我有个很深的体会与其死记硬背每个算法的步骤不如先把“自动驾驶系统从传感器数据到车辆控制指令的完整链路”画一遍理解每个模块的输入输出是什么、上下游依赖是什么。脑中有了这张全局图很多独立的考点会自动串起来记忆负担会小很多。2.4 数学基础与工程素养容易被忽视的隐形考点智能驾驶笔试里有一类题目不会单独成为一个大模块但会“埋伏”在各个题目里——这就是数学基础和工程素养。它们最容易被忽视也最容易成为拉开差距的地方。线性代数的考察集中在矩阵运算、坐标变换、特征值分解、奇异值分解。坐标系变换在智能驾驶里是家常便饭相机坐标系、雷达坐标系、车辆坐标系、世界坐标系之间的转换本质就是旋转矩阵和平移向量的组合。你必须对“外参标定是干什么的”“为什么要做刚体变换”有直觉而不只是会背公式。概率统计的考察集中在高斯分布、最大似然估计、贝叶斯公式、最小二乘法。这些知识点会出现在感知、定位、融合的很多场景里。比如“用一个高斯分布建模某个测量的噪声怎么求参数”这种题本质上就是最大似然估计。再比如“两个传感器对同一目标分别给出测量怎么融合”这个经典问题最优答案往往就是贝叶斯框架下的加权平均。工程素养的考察则更“软”。笔试可能出现关于ROS通信机制的选择题——话题和服务有什么区别也可能出现关于嵌入式环境资源限制的简答题——为什么模型要量化。这些题没有固定的复习提纲全靠平时积累。我建议准备期间多看看自动驾驶技术团队的工程博客特别是那些讲系统架构、数据流、性能优化的文章对培养工程直觉有帮助。3. 笔试实战策略时间分配与答题技巧3.1 拿到试卷后的三分钟决策决定你整场的心态笔试时间通常紧张尤其是既有选择题又有编程题还有设计题的混合卷。很多人一上来就从第一道选择题开始按顺序做结果到编程题的时候时间已经不够用了这是最典型的策略失误。我的建议是拿到试卷先别动笔用三分钟把整张卷子快速浏览一遍。目的有三个第一确认题型分布和分值权重第二标记出自己最有把握的题目第三识别出可能耗时的大题估算每道题的时间预算。时间分配的总原则是“先拿确定性分数再攻坚难题”。选择题和填空题虽然单题分值不高但它们是你最有把握的部分应该快速而准确地拿下。编程题通常分值最高建议留出至少一半的时间来处理。设计题如果写不完完整方案至少把框架和关键词写出来拿部分分。我见过有些同学在选择题上反复纠结一题耗时五分钟最后编程题草草提交。这种本末倒置的做法非常可惜。选择题不会做就标记跳过整张卷子做完一轮后如果有时间再回头思考这个习惯在限定时间的笔试中特别重要。3.2 编程题的AC方法论从读题到提交的完整流程编程题是笔试的大头也是最容易因为细节失分的地方。我总结了几个实战中验证过的步骤可以帮你稳定地拿到尽可能多的分数。第一步是读题时划出关键约束。数据范围决定了算法复杂度要求输入输出格式决定了代码的边界处理。比如题目给出的数组长度是10^5还是10^9直接决定了你该用O(n log n)还是O(n)的算法。很多同学不是不会做而是没注意数据范围用了过慢的算法导致超时这就很冤了。第二步是先想清楚再写代码。在草稿纸上画出状态转移方程、递推关系或者遍历顺序确认样例输入能跑通逻辑再开始写。动笔写代码前思路越清晰写出来的代码越简洁调试时间越短。第三步是小数据量自测。提交前至少构造一个极简输入、一个边界输入比如空数组、单元素、最大数值来自测这一步能避免大量因为下标越界、空指针、整数溢出导致的低级错误。第四步是代码风格。虽然笔试评测主要是看结果但如果你的代码结构清晰、变量命名有意义万一需要人工review观感会好很多。更重要的是清晰的代码能让你在调试时更快定位问题。3.3 主观设计题的回答框架让面试官看到你的系统思维笔试里的主观设计题是最像“工作场景”的题目——它没有唯一答案但可以通过回答框架体现你的专业素养。这类题通常描述一个自动驾驶中的具体问题比如“如何设计一个城市道路场景下的前方车辆检测与追踪模块”然后让你给出方案。我的建议是严格按照“模块拆解→数据流→关键技术选型→评估方法”这个框架来答。模块拆解部分把问题分解成输入、处理流程、输出。具体到车辆检测追踪问题输入是环视相机或前向相机的图像序列处理流程包含目标检测、特征提取、帧间关联、状态估计输出是车辆列表及运动状态。数据流部分说明每个子模块的输入输出如何衔接。检测模块输出bounding box特征提取模块输出外观特征关联模块用IoU外观特征做匹配状态估计用卡尔曼滤波器平滑车辆位置和速度。关键技术选型部分说明你用什么方法实现每个步骤以及为什么选它。比如检测用YOLO因为速度够快关联用匈牙利算法解决匹配问题状态估计用恒速度模型CV model做预测。评估方法部分给出精度指标和效率指标mAP或mOTA衡量检测和追踪精度帧率FPS和延迟latency衡量实时性。这个框架的好处是即使你的方案不是最优的面试官也能看出你有完整的系统思考能力——而这恰恰是智能驾驶研发工程师最需要的素质之一。4. 备考避坑经验这些失分点我见得最多4.1 只会调包不理解原理是最大的隐患备考过程中我最常看到的一个问题是很多同学对深度学习框架和开源库用得非常熟练但被问到底层原理时却答不上来。比如Loss里为什么要加正则项、BatchNorm在推理时用的是什么统计量、RoI Pooling和RoI Align的区别在哪里。这类问题在笔试中经常以“技术辨析”的形式出现用以区分“用过”和“懂”的人。出题人很清楚一个只会调包的同学在真实工作中很难独立解决新问题。所以我的建议是在准备深度学习基础的时候别满足于“会跑通”要追问每一步的数学形式和物理含义把经典论文的核心公式亲手推导一遍。深入理解原理还有一个实际收益即使笔试遇到没见过的开放式问题你也能从第一性原理出发推导出合理方案而不是只能等一个熟悉的题目。4.2 忽略“传感器物理约束”方案再好也落不了地智能驾驶的很多问题本质上都是带物理约束的问题。比如车辆运动受限于动力学特性传感器受限于量程、噪声和失效模式计算平台受限于算力和功耗。笔试题目里那些看起来“只要用深度学习就能解决”的问题其实背后都藏着物理约束。例如目标检测的输入图像分辨率受限于相机硬件和算力激光雷达点云在雨雾天气下会退化这时候单纯靠激光的感知方案就会失效。我的建议是准备笔试的同时多积累一些传感器的基础知识——相机的内参外参标定、激光雷达的工作原理和点云特性、IMU的漂移特性、GPS的多路径效应。这些知识不仅帮助你在选择题上拿分更能让你在设计题中体现出“工程落地意识”这是区分普通答题者和有潜力工程师的重要信号。4.3 眼高手低推导“会了”但计算“错了”还有一类失分很隐蔽有些同学看答案觉得“我会了”但自己动手算的时候错误百出。比如坐标系变换矩阵的手算、卡尔曼滤波更新方程的数代、匈牙利算法在小规模样例上的手工推演一做就错。原因很简单看答案是被动接收动手算才是主动建构。我对备考的建议是凡是涉及公式推导的考点一定要亲手在纸上完整推导至少三遍直到不需要看任何参考资料就能独立完成。更进一步把常用的数学工具练到“肌肉记忆”的程度。比如旋转矩阵在不同轴上的形式、四元数到旋转矩阵的转换公式、状态转移矩阵F和观测矩阵H在常见模型下的具体形式这些基础公式如果能在考场上条件反射地写出来你的答题速度会明显提升。4.4 只刷题不构体系遇到新场景就懵最后一个常见问题是知识点碎片化。有些同学刷了很多题、背了很多知识点但都是一个个孤立的信息岛。笔试一旦出现综合性强、需要跨模块知识的题目就不知道从何下手了。典型例子是“融合视觉和激光雷达做目标检测”这类题目。它同时涉及传感器特性、数据表示、融合策略、深度学习、评估体系至少横跨三个知识模块。如果平时没有系统性梳理过这些知识之间的联系很难在短时间内组织出好答案。打破碎片化的方法是一边复习一边画技术地图以“一辆自动驾驶汽车从感知输入到控制输出的完整链路”为主干把每个关键技术点挂在对应的位置上。这个地图不是给别人看的而是用来检验自己的知识结构是否完整。当你能不看资料、凭记忆画出这张地图并解释每个节点之间的关联时你的准备工作才算真正到位了。5. 从笔试到面试考完之后的进阶路线5.1 笔试只是起点面试更看重“深挖”能力笔试这张卷子更多是在验证你是否具备“入行资格”——基础扎实、技术面广、有一定工程直觉。但到了面试环节考察方式会从“面广”切换成“挖深”。简历上的任何一段经历、任何一个提到的算法都可能被面试官追问到底层细节。所以我建议笔试结束后不要松懈立刻把精力转到“深挖”模式。选择一两个你最有把握的方向比如目标检测或者多传感器融合定位把相关的经典论文精读几遍尤其吃透它们的动机、方法、实验设计和局限性。经常被追问的问题包括“你提到用过卡尔曼滤波那如果系统模型是非线性的你怎么处理”、“你训练目标检测模型的时候正负样本是怎么定义的怎么解决正负样本不均衡”、“如果你是实时系统的工程师模型推理速度不达标你会从哪些角度优化”这些问题都需要在掌握原理的基础上灵活应变。5.2 动手做一个完整的小项目胜过空谈十篇论文说实话校招笔试和面试能覆盖的内容是有限的真正让你在候选人中脱颖而出的往往是亲手做过的项目经验。如果你现在还有时间我非常建议动手完成一个端到端的小项目哪怕规模很小。比如用开源数据集训练一个目标检测模型然后部署到ROS节点上接上一个话题发布检测结果或者在给定传感器数据上实现一个基于卡尔曼滤波的融合定位模块跑通并评估精度。这类项目做的过程中你会真实遇到数据标注质量、模型过拟合、推理延迟、坐标变换错误等一堆工程问题而解决这些问题的经验恰恰是笔试和面试中最能体现差异化的谈资。从准备笔试的角度看动手项目还有一个直接好处很多笔试题目的场景其实就是你在项目中遇到的问题。你亲手解决过一次考场上再遇到时你的回答会比其他没有实战经验的人更有细节、更有底气。5.3 心态与信息战校招也是一场持久战最后想聊聊一个很多人忽视的点心态和信息搜集能力。智能驾驶方向的校招准备周期长、知识面广很容易在准备过程中产生“我是不是缺了很多东西”的焦虑。这种焦虑的解法不是无限扩大复习范围而是把有限的时间聚焦在高频考点和技术主线上。信息搜集方面多关注目标公司技术团队的公开分享、技术博客、开源项目这些信息能帮你把握团队的技术倾向。比如有的团队更偏感知方向有的团队在规划控制上有深厚积累。如果你能判断出出题团队的技术侧重复习时的精力分配会更有针对性。我自己见过很多笔试分数不错但败在心态上的同学——遇到没见过的题目就慌或者因为前面选择题不确定而影响了编程题的发挥。准备到后面其实每个人都知道60%到70%的内容差距往往在执行力、时间管理能力和面对陌生问题的冷静程度上。你可以把每一次模拟笔试都当作真实考试练节奏、练取舍、练心态这本身就是备考的一部分。