该面经来自深蓝学院用户投稿,作者为东北大学自动化专业硕士。
作者2022年秋招情况:投递的岗位包括决策规划,规划控制和控制岗位。本人累计投递70家自动驾驶公司,最终收获10多家公司的笔试或面试反馈。最终拿到的offer包括主机厂、新势力、自动驾驶公司等。整体上偏向决策或规划岗位。
整体节奏
研一主要学习了深度学习、强化学习和多伦多大学的自动驾驶课程,以及自动驾驶仿真平台CARLA;研二上学期学习了C++和leetcode相关知识,以及深蓝学院、百度的公开课,10月开始学习C++知识,断断续续的看代码随想录的笔记,对于学习的过程中要记好笔记,掌握一题多解,比如对于树的题目而言,不仅学习递归的解法也要掌握迭代的解法。
第二年(研二下学期)3月份开始高强度刷题,持续到6月份,累计刷题200+保持手感,每天都要花时间写题目,不然手生疏的话再捡回来就比较困难了。
在6月份到9月份期间,面试的同时,也要复习并且刷一些常见的题目,这个阶段是提前批阶段,不需要笔试,一般直接进入面试环节,每次面试后及时复盘,整理面试的问题和答案,方便后续总结提升自己。
在9月份到10月份,开始了正式批环节。由于提前批面了一些公司,经验更加丰富,面试的时候相对会更加顺利,一些公司还需要做笔试,笔试包括计算机基础知识和稍微困难的编程题目,因此还需要继续刷题保持手感。
在10月份后基本上到了谈薪的环节,可以拿已有的offer和其他公司讨论,争取拿到满意的薪资。
秋招的基础知识准备
C++
通过如黑马课程等了解基本概念,掌握基本的C++知识,并且在学习的过程中要多敲代码,比如继承多态的写法,各种STL容器的用法等等,可能面试的时候也会写简单的结构。而对于应付面试来说,还需要理解的记忆一些常见八股文,基本是面试的必考环节,常考的如虚函数、智能指针、多态等知识,如果背的不够的话,很可能回答的时候漏掉一些关键的知识点,导致面试官认为你的基础掌握不够扎实,因此只有背的足够多才能在面试中从容的面对。
leetcode
手撕代码比较关键,代码的难度一般不高,基本属于hot100里的题目,算法岗位的话动态规划、深度优先搜索和广度优先搜索的题目比较多,而对于自动驾驶而言,图的相关题目也需要重点掌握,整体上建议题量在200+即可,另外对于常见的困难题也应当非常熟悉,比如接雨水、N皇后等。
另外还需要学会在本地IDE中编写代码,能够自己定义如链表、树等结构体,并且写测试案例通过测试,自己定义数组、建立一个树并且赋值,也会定义一些图的结构,了解邻接表、邻接矩阵等,并且能够很快的debug代码,在本地中快速调试并运行成功。
规划控制理论
由于投递的岗位以规划为主,这里主要学习了PID和LQR等知识,需要有一些PID调参的经验,如PID各自的作用以及PID如何调参才能满足预期的控制功能,了解增量式PID和位置式PID的区别。这部分更强调实践的内容,最好要手动编写一部分代码,并且在一些仿真平台做尝试来实践一下,可以选择CARLA或者CarSim等。
优化
规划岗位对优化有一定的要求,可以看一些最优化的课程,了解常见的QP方法,并且也需要用代码来实现求解,学会调用一些求解器的库函数。对凸优化的一些基本概念应该了解,此外凸优化和矩阵分析联系也比较密切,比如正定矩阵等,需要有一定了解。
深度学习
基于深度学习的预测或者决策方法对深度学习基础有一定要求,需要掌握卷积的计算、梯度下降的方法和区别、手撕一些深度学习的公式。对于预测而言的话,又需要了解预测的常见指标,包括ADE和FDE等,以及每个指标是如何计算的,在实践中这些指标的数值大小是多少。
实践
(1)多参加自动驾驶相关比赛,如果是规划控制岗位,多一些基于规则的方法规划算法编写和控制经验。这部分主要有轨迹预测的比赛和规划控制的比赛,需要自己多关注一些公众号,多收集一些比赛的相关资料,并且和志同道合的同学一块参加,共同进步,不断提出一些好的想法并且付诸实践。
(2)多参加实习,有助于提升自动驾驶实践经验,在投实习的过程中,面试的算法题以简单或者中等为主,而且也是高频的题目,因此只要整体上表现中等就可以,一般来说实习的面试比正式批的面试会少一轮。有了自动驾驶丰富的实践经验,在秋招中是极大的加分项,在简历筛选和面试中具有很大的优势。
(3)多积累一些项目,可以放一些博客的链接或者github链接,让面试官看到你的认真态度。在博客的撰写中,可以将自己学习自动驾驶的过程记录下来,比如各种数学的学习过程,各种自动驾驶算法的分享,体现了扎实的技术功底,而github中可以放一些比赛的实践代码或者一些自己写的小项目,证明自己有相关的代码经历。
总结
常见的一些C++八股
虚函数和抽象类
有哪些智能指针
const和static关键字的作用
map和unordered_map的区别
vector中reserve和resize的区别
常见的规划和控制问题
lattice planner和EMplanner的联系和区别
DP和QP的cost公式
PID参数的作用
建议
今年绝大部分行业的就业形式非常糟糕,像自动驾驶等科技类行业也是如此。鉴于当下经济形势,给大家一些建议:
(1)在投递建议上,广撒网比较重要,目前自动驾驶行业紧缩,只有多投才能多有面试机会。比赛、实习或者论文都非常重要,会增加通过建立初筛的概率。
(2)在刷题上,保持手感,熟悉常见的题目即可,面试中基本是以简单或者中等题为主,并且也包含一些自动驾驶的数学题。
(3)多参与实践项目,多写相关的代码,公司更看重动手能力强的同学。
注:知名招聘网站拉勾发布了《2022数字化科技人才招聘白皮书》,其数据显示,2022年一线和新一线城市招聘岗位缩减,新发布职位量同比降幅超10%。北上广深分别减少16%、14%、15%和13%。而2022年全国高校毕业生人数创历年新高,达1076年。
(来源拉勾:历年高校应届毕业生人数)
期望
真心希望对自动驾驶有热情的同学能够加入到自动驾驶这个行业中来,贡献自己的一份力量,也希望通过这个面经,启发更多的同学,让大家有所收获,只要按照合理的时间线来进行学习,认真学习和复习相关的课程,一定能够在面试披荆斩棘,拿到满意的工作,加油!
深蓝学院经验
调研一个岗位对候选人的知识储备要求,最直接的方法是从招聘网站上梳理各大企业对应岗位的招聘描述。以低速机器人/自动驾驶企业的规划岗位为例,职位要求中需要候选人掌握的基础知识主要有4类:
(1)C++编程;
(2)基础的规划算法(A*, RRT*, Lattice based, MPC, POMDP等);
(3)参数化曲线构造(多项式、贝塞尔、样条曲线);
(4)数值优化常用方法。
普通的理工科在校生,熟练掌握以上4类基础知识需要多少多长时间?根据深蓝学院的培养经验,少则9个月,多则1年半。3年来,数千位深蓝学员已陆续入职各大自动驾驶/机器人企业,他们扎实的基础功底备受企业青睐。