Momenta 2019秋招技术岗笔试题复盘:自动驾驶算法岗备考指南

发布时间:2026/8/31 11:17:30
Momenta 2019秋招技术岗笔试题复盘:自动驾驶算法岗备考指南 秋招季翻到一份自己当年整理的Momenta 2019秋招技术岗笔试题复盘突然觉得这些内容对现在准备自动驾驶算法岗、感知岗和SLAM岗的同学依然很有参考价值。说实话那会儿我对自动驾驶公司的笔试认知还停留在“刷LeetCode就行”的阶段结果真坐到电脑前才发现这家公司的笔试题型设计比我想象中要复杂得多——既有传统算法题也有深度学习基础、C功底、甚至图像处理概念。我考完之后花了整整两天复盘整理出这份笔记今天把它完整地分享出来希望能给有意投递Momenta或其他自动驾驶公司技术岗的读者一点真实的备战方向。这篇内容不是简单罗列题目而是从“拿到卷子怎么分配时间”“每类题背后在考察什么能力”“我当时哪些题答崩了、为什么崩”几个角度来拆解。无论你是准备2025届秋招还是正在刷题库的阶段我觉得这套复盘思路都能用上。1. 拿到这套题的第一反应考卷结构与你想象的不一样很多人以为技术岗笔试就是纯编程题或纯选择题但Momenta那套卷子给我最大的冲击是结构混合度特别高。我印象中整套题分为选择、编程、简答三个大块而且每块之间没有明显的难度递进选择题里会出现很刁钻的深度学习理论编程题里反而有一道比较基础的链表操作简答则是给一个自动驾驶场景让你分析算法链路。1.1 选择题、编程题、简答题的实际占比与考察意图先说占比。我当时考的那套选择大概有20道上下编程题有3道简答题2道左右。因为是回忆复盘具体数字不是绝对准确但从类型分布来看选择占大头、编程其次、简答压轴。这种结构其实传达了一个信号Momenta想看的不是某一个单项能力而是你作为一个算法工程师的综合储备。选择题考察的是知识面广不广——深度学习、机器学习、C、概率统计、线性代数都可能出现编程题考察的是你在有限时间内能不能把思路落成可运行的代码简答题考察的是你有没有真正理解自动驾驶系统中各个模块的协作关系。你可以说它杂但反过来想如果基础不牢这一套卷子下来基本就暴露了。我当时身边有同学只刷算法题不复习深度学习基础结果选择题做得相当痛苦也有同学深度学得很好但C的指针、内存问题答得一塌糊涂。所以第一点建议准备这种笔试绝对不能单线突击。1.2 编程环境与在线编辑器一个容易被低估的坑还记得当时的编程题是在一个在线编辑器里完成的支持的语言我记得有C、Java和Python。也许是因为我自己平时在本地IDE里写惯了到网页编辑器里突然发现没有自动补全连括号匹配都要自己盯着节奏明显慢了下来。这是个非常现实的问题。在线笔试里你写代码的效率和本地环境差距很大需要提前适应。我的做法是在考前专门去各大在线评测平台用网页编辑器刷了几天题强迫自己不在本地IDE里写代码。这个适应过程很枯燥但确实避免了考场上因为代码补全缺失而浪费大量时间。另外在线编辑器一般不会自动保存如果页面意外刷新写了半天的代码就没了。这种惨案我听说过不少。建议每写完一题把代码复制到本地记事本或草稿箱里备份哪怕麻烦一点也比从头再写要强。1.3 时间分配的前车之鉴选择不要恋战时间分配是我这次最想强调的教训。我当时在选择题上耗费了太多时间尤其是有几道多选题目选项描述很长我反复纠结结果等做到编程题的时候心跳已经明显加快了。回过头来看合理的时间分配应该是选择题控制在30到35分钟内完成剩下时间重点留给编程题和简答题。因为编程题一题可能就占20到30分而选择题每题的就那几分为了几分丢了大头怎么算都不划算。遇到把握不准的选择题我的建议是先标记快速选一个等所有编程题写完再回来纠结。这套策略我从那之后带进了每一次线上笔试基本没有吃过时间不够的亏。2. 单选多选里的“陷阱题”复盘深度学习与机器学习基础选择题是整套卷子信息密度最高的部分。我现在回忆Momenta的选择题不太考那种“背概念”的题而是喜欢把两个知识点混在一起考或者给出一段训练代码问你潜在问题在哪里。如果只看过面经没实际跑过模型很容易被绕进去。2.1 深度学习考点反向传播、过拟合与Batch Normalization我记得有一道题是关于Batch Normalization的问它在训练和推理阶段的行为差异。选项里包括“训练时使用当前batch的均值和方差推理时使用全局统计”“训练时也会更新全局均值和方差”等。很多人对BN的理解停留在“归一化”三个字但真正落到代码实现训练和推理的统计量使用逻辑是完全不同的。另一道印象深刻的题是反向传播相关的给了一个简单的两层网络问某一层的梯度依赖哪些变量。这种题的考点是链式法则但Momenta的描述方式不是干巴巴求导而是结合了损失函数曲线和梯度消失来解释本质上是在考你是否理解深度网络训练中的梯度流。过拟合的内容也出现了我记得是问“哪些措施可以缓解过拟合”选项有L2正则、Dropout、数据增强、增大模型容量。正确答案是前三个增大模型容量反而会加剧过拟合如果你知道“容量”在机器学习里的含义这题才不会错。2.2 C笔试考点指针、内存管理与STL源码级别问题技术岗笔试出现C相关题目并不稀奇因为自动驾驶系统里C的使用比例非常高很多模块对延迟敏感必须用C实现。Momenta的C题不是简单的“指针和引用的区别”而是会往内存管理、智能指针的使用场景、STL底层机制这些方向去出。我记得有一道题问的是shared_ptr和unique_ptr的选择以及循环引用怎么解决。如果你只是背了“shared_ptr基于引用计数、unique_ptr独占所有权”这种概念遇到循环引用问题就会有点慌。正确的思路是用weak_ptr打破循环引用而且需要理解weak_ptr并不会增加引用计数。还有一道题涉及vector的扩容机制。表面上是问“vector在push_back时什么时候会重新分配内存”实际考的是均摊复杂度分析vector的扩容策略通常是倍增所以均摊下来每次push_back是O(1)操作。这类问题如果平时没分析过STL源码靠猜很容易错。我的建议是针对自动驾驶公司的C考题重点复习智能指针、移动语义、STL容器底层结构、内存对齐和内存泄漏排查这些几乎每年都会出现。2.3 概率统计与线性代数看似简单实则对思路要求高数学类题目在选择题里也有一定比例。我记得考了一个最大似然估计的问题给了一组高斯分布样本让你求均值的估计量。这题本身不难但选项里混杂了“无偏性”“一致性”等概念需要对这些统计性质有清晰判断。线性代数方面有一道题考的是矩阵的特征值分解和奇异值分解的区别。自动驾驶中很多算法都依赖矩阵分解比如状态估计里的卡尔曼滤波、视觉里的本质矩阵和基础矩阵估计所以这些概念不应该只停留在会做数学题的层面还得知道它们在实际算法里的角色。有意思的是考察数学的时候题目文字通常不长但偏偏容易让人想多。我发现一个经验这种计算类选择题如果笔算步骤超过三步就该停下来想有没有更简单的思路因为出题人更想考你的数学直觉而不是复杂的计算能力。3. 编程题实战从暴力解到最优解的思路演进编程题是整套卷子的重头戏。我见过有不少人以为自动驾驶公司的算法岗笔试会直接考目标检测或点云处理的代码但实际上笔试更多还是考察通用算法能力也就是LeetCode上那些经典题型加上一些工程化的变形。Momenta的编程题也不例外我记得有三道难度分布大概是简单——中等——偏难。3.1 第一题链表操作类题目考察基本功与代码风格第一道编程题相对基础我记得是实现一个链表的反转但还加了一步——按k个一组反转。如果你没做过这类题第一反应可能是把链表转成数组反转完再转回去。这样当然能过小数据量测试但面试官看代码的时候是能看出你有没有链表操作思维的。当时我的做法是先写出一个单链表反转的函数然后在这个基础上加一个计数器每数到k个节点就反转这一段并且处理好段与段之间的连接。核心是定义好几个辅助指针prev_tail上一段的尾节点、cur_head当前段反转前的头节点等。写出来之后自己用简单用例跑了跑确认边界情况没有问题才提交。这类题拿满分的关键不是算法多高深而是代码是否简洁、边界是否处理清楚。在线笔试没有人和你交流所以注释和命名很重要。我习惯用有意义的变量名比如prev、cur、nextTemp而不是a、b、c。这不仅是给别人看的更是给几个小时后回头检查的自己看的。3.2 第二题动态规划/搜索类题目如何快速定位状态转移第二题我记得是一道动态规划类题目场景被包装成自动驾驶路径规划里的一个简化版给定一个网格左上角到右下角路径上每个格子有花费求最小花费。这不就是经典的“最小路径和”问题。但这里有个细节网格里有些格子不可通过也就是把“障碍物”这个概念加了进来。这样状态转移时就需要判断当前格子是否可达否则dp值会被污染。我记得我当时在初始化第一行和第一列时就踩了个小坑——如果中途出现障碍后面的格子就不能简单累加了而是应该设为无效值。写代码的时候我开了二维dp数组dp[i][j]表示从起点到(i,j)的最小花费转移方程为dp[i][j] grid[i][j] min(dp[i-1][j], dp[i][j-1])但要先判断可通行状态。时间复杂度O(mn)空间可以优化成一维滚动数组。这类题的复盘价值在于面试官其实不指望你用多炫酷的算法而是看你能不能把应用场景抽象成通用模型然后完整地实现出来。如果能额外说清楚状态定义和转移方程即使代码有小bug面试官也愿意给分。3.3 第三题偏工程向的算法题考验系统思维和异常处理第三题我记得相对陌生是一个看起来像“业务场景”的题目大意是给一段传感器数据流要求进行去重和排序并且要对异常值做过滤。它其实混合了哈希表、排序和滑动窗口的思想。我的初始思路是用一个哈希表记录已经出现过的数据点然后对剩余数据排序但这忽略了数据流中时间戳的概念后来我改成维护一个固定时间窗口内的数据去重窗口外的旧数据直接淘汰这样更符合“数据流”的实际特征。这个问题的精髓不在某一种算法而是能否理解时间窗口和数据的实时性考察的更像是工程开发能力。与前面两题相比第三题对代码的完整性要求更高需要考虑输入为空、时间窗口异常等边界条件。我当时在循环里少加了一个越界判断导致部分测试用例没有通过但整体算法框架是对的。复盘之后我认为在线笔试中遇到不熟悉的题目先通过注释把思路写出来再逐步填充实现比闷头写代码要稳得多。3.4 编程题通用经验先看数据范围再决定暴力还是优化编程题里有个非常实用的经验先看数据范围。如果n很小比如只有几百暴力解法完全够用如果n到了10的5次方甚至更大就要考虑O(nlogn)或O(n)的做法。很多时候不是不会优化而是没有先判断需要优化到什么程度。我记得自己早期刷题时不管什么题都先想最优解反而把自己卡住了。后来我调整策略笔试中第一原则是“能在时间内跑过所有用例”第二原则才是“解法优雅”。如果能在这两个原则之间找到平衡编程题的得分一般不会差。4. 自动驾驶专项简答题感知、SLAM与决策规划的真实占比简答题是Momenta 2019这套卷子和普通互联网公司区别最大的地方也是我认为最值得复盘的部分。它不会让你从零写一个目标检测网络而是把自动驾驶系统里某一个环节的问题抽象出来考察你有没有系统性的认知。我记得简答题大概是两道其中一道偏感知方向另一道与决策规划或者状态估计相关。具体题目已经记不全确切表述了但从考点方向上下面这三个方向确实是准备Momenta这类公司笔试时必须重点覆盖的。4.1 感知方向必须理解的概念NMS、Anchor与损失函数如果投递感知算法岗NMS非极大值抑制几乎是必考概念。有一类问法是目标检测后处理中NMS的作用是什么如何实现以及有哪些改进版本。我当时结合Faster R-CNN和YOLO系列讲了一下NMS的处理流程先把所有候选框按置信度排序选择置信度最高的框然后删除与它IoU超过阈值的其他框重复这个过程直到候选框为空。这样就回答了“是什么”和“怎么做”。接着往深一层想Momenta这类公司会更看重你理解NMS的缺点比如密集场景下容易误抑制相邻目标所以后续出现了Soft-NMS、DIoU-NMS等改进。我在简答里补充了这一点虽然没有深入推导公式但至少能让面试官看到你不是机械记忆而是真的懂原理。Anchor的概念也值得关注它是目标检测里连接“特征图”和“真实目标”的桥梁。理解Anchor需要知道它是一组预设的框用于在特征图每个位置生成不同尺度和长宽比的候选框再通过回归修正位置。如果你能把Anchor、IoU和损失函数之间的关联说清楚这道题基本就稳了。4.2 SLAM与状态估计方向考点卡尔曼滤波、图优化与坐标变换自动驾驶里的定位模块是很多技术岗笔试题特别爱出题的领域。卡尔曼滤波作为经典的状态估计算法我印象里出现频率很高。它的核心思想是通过预测和更新两个步骤结合运动模型和观测模型来估计系统状态最终输出的状态不仅包含估计值还包含不确定度。如果笔试时间允许我建议把卡尔曼滤波的五个公式完整推导一遍预测均值和协方差、更新增益、更新均值和协方差。我在备考时把这些公式手写了不止一遍做到闭着眼也能写出来这样遇到类似的题就不会慌。除了卡尔曼滤波还有关于多传感器融合的内容。比如相机、激光雷达、毫米波雷达各自在感知中的优缺点以及为什么要用它们做融合。答案并不唯一关键在于你是否知道相机缺乏深度信息、激光雷达在雨雾天会被干扰、毫米波雷达分辨率有限等特点。这种题没有所谓的标准答案但你需要展示自己的权衡能力。4.3 决策规划方向A* 与动态窗口法的笔试问法决策规划模块在简答题中偶尔会出现最常见的就是路径搜索算法。A*算法的原理是结合Dijkstra的全局最优性和贪心搜索的启发性用一个评估函数f(n)g(n)h(n)来决定节点的优先级。笔试中可能让你写伪代码也可能让你解释启发式函数的设计。动态窗口法DWA也是常见考点它在局部路径规划中把速度空间离散化考虑机器人当前可达到的速度窗口然后根据轨迹评价函数选一条最优轨迹。这个方法和A的视角不同A是全局的、离散的DWA是局部的、连续的。能在笔试中对比这两类思路通常会加分。从整体来看简答题考察的不是背诵而是系统认知。你可以把自动驾驶拆成感知、定位、规划、控制、决策几个模块每个模块说出核心算法、输入输出、主要挑战这个框架在笔试和面试中都非常有用。5. 复盘之后学到的备考策略科目优先级、题感训练与心理建设考完试不等于结束复盘才是这套题带给我的最大收获。我花了两天时间把每道题重新过了一遍哪些是知识点遗忘哪些是时间不够导致发挥失常哪些是纯粹没见过的新题型都做了归类。根据复盘结果我整理了一套针对Momenta 2019秋招技术岗笔试的备考策略分享出来供参考。5.1 复习优先级算法 深度学习基础 C 数学如果时间紧张我会建议按“算法 深度学习基础 C 数学”的顺序来分配精力。算法是笔试的保底分编程题做出来了整个心态就不一样深度学习基础是区分度最高的部分因为选择题里面占比不小C是自动驾驶技术岗的加分项数学这类内容是长期积累短期突击效果有限。这不是说数学不重要而是说它在笔试里的短期提分效率不如算法代码。数学相关的考点往往和深度学习、线性代数交叉出现你复习深度学习的时候顺便也能覆盖到一部分。这里的“算法”不只是LeetCode还包括数据结构、递归、动态规划、搜索等基本模块。我的习惯是把常见题型的模板整理成一个笔记比如二叉树遍历模板、动态规划状态转移模板、图论模板考前快速过一遍比刷一堆新题更有用。5.2 题感训练用真题思维刷题而不是无效刷题这里的“真题思维”指的是刷题时多想一步这道题在自动驾驶场景里会怎么出现我后来刷LeetCode的路径规划题时会主动把它和实际地图场景做类比比如网格里的障碍物对应真实世界中的静态障碍物路径代价对应道路拥堵程度。这种联想训练能让你在笔试里看到改装过的题目时不慌因为你能识别出底层的算法模型。题感训练的另一个重点是限时训练。我考前一周每天会做一套完整的模拟题严格按照考试时间的1.2倍来控制因为线上笔试还要留出读题和调试的时间。如果平时不限时考场上的时间感会非常差。5.3 笔试时的心态调整允许自己跳过先拿能拿的分心态在Momenta这套笔试题里占了很大比重因为它混合题型多很容易让人产生“我是不是漏掉了什么”的错觉。我在考场上就经历过选择题卡住、编程题没思路的烦躁时刻结果越急越写不出来。后来我用的方法是把试卷当成三个独立的小游戏选择是快速积分游戏编程是深度解题游戏简答是表达观点游戏。每进入一个新板块就切换一次心态不把上一板块的挫败感带过来。遇到不会的题先标记最后再回头绝不恋战。如果编程题卡了超过20分钟我建议直接跳到下一题。做完整套卷子之后如果还有时间再回来补你会发现之前卡住的地方在换个思维后往往一下子就有思路了。5.4 从笔试到面试的衔接如何把答题思路变成面试谈资笔试结束后我当时没有干等结果而是把写在草稿纸上的简答题思路重新整理成了结构化的文档。后来进入面试环节这些文档成了我很好的复习材料。因为面试官很大概率会针对笔试内容追问比如“你刚才说NMS有缺陷具体怎么改进”如果笔试结束就丢到一边很容易答不上来。我的建议是每次笔试结束后用1到2小时把简答题思路和编程题解法整理成个人笔记不一定发出去自己看就行。这个习惯会让你在后续面试中特别有信心因为你能清晰地讲出自己当时是怎么思考的而不是支支吾吾地“记得不太清了”。另外笔试中遇到的陌生概念值得额外花时间查一次资料。比如我当时对动态窗口法的理解只停留在名字上笔试后我仔细看了它的数学推导后来面试时恰好被问到了局部规划的细节这段主动学习给我的帮助非常大。6. 写在最后回看Momenta 2019秋招笔试题我总结了三条真正有用的经验距离2019年秋招已经过去好几年期间我也看过不少自动驾驶公司的笔试题风格各有不同但Momenta这套题给我的方法论影响一直延续到现在。第一条经验是一个技术岗候选人的笔试表现本质上反映了知识结构的完整度。只刷题的人会在选择题上露馅只背理论的人会在编程题上卡壳只有平时就注重体系化学习的人才能在混合型卷子里稳定发挥。第二条经验是复盘比刷卷子更重要。每套卷子做完之后的复盘能帮你定位自己最薄弱的环节把有限的备考时间花在最值得花的地方。对Momenta这套题来说复盘的切入点可以围绕选择题的错因分布、编程题的复杂度分析、简答题的系统框架三个方面展开。第三条经验也最重要笔试的结果不是终极目标过程中收获的思考方式才是。哪怕最终没有拿到面试机会你在准备过程中建立的算法功底、深度学习认知和系统集成思维都会在未来的求职或工作中持续发挥作用。我记得那天考完走出房间天色已经暗下来心里其实没底但两天的复盘让我觉得自己没有白考。那套卷子的题目细节会慢慢模糊但“技术岗考察的是综合能力”这个认知从那时起就刻在了我的判断体系里。希望这篇当年考题的复盘笔记也能帮你找到自己的备考节奏。