卷完了!分享下我的秋招面经(投递近50家自动驾驶与机器人公司)
点击下方卡片,关注“自动驾驶之心”公众号
点击进入→自动驾驶之心【求职交流】技术交流群
个人背景
学校双985背景,本科和研究生专业都是车辆相关的,但都不是智驾方向的(本科内燃机相关,硕士燃料电池相关)。
秋招情况
秋招主要投递的是规划控制算法岗/控制算法岗。最终拿到的offer也赛道各异:传统主机厂/造车新势力底盘线控岗/智驾独角兽/机器人独角兽企业等
比较早确定了自己要转码转智驾的路线,所以硕士期间找了一段主机厂大厂实习一段智驾小厂实习,自己做了两个规控方向的小项目,后续看论文做了优化。由于资源受限,没有过实车经验,这也是我在秋招面试中的痛点,以下展开说。
前期自主研究历程
研一确定了自己求职的方向,根据方向去看了很多的经验贴和大佬的项目分享(知乎,CSDN,牛客等),了解自己欠缺的知识。之后学了经典控制理论,开始慢慢把C++捡起来。
研二上学期开始跟着cousera上北大的C++课程学完了C++基础和一些数据结构基础。这里还是很推荐这个课程,是免费的,用学校的邮箱就可以学,同时作业一定要自己完成,感觉代码最重要的不是看懂了,而是脑子里有想法可以敲出来,讨论区里也都能找到答案。
之后开始学习自动驾驶中常用的控制算法,也在B站上看DR_CAN的控制理论的视频,他讲的深入浅出,也不乏味,很适合初学者搭建框架,配合着课程我也找到一个不错的开源MPC项目,做了点简单探究;同时期也在上海这边的一个主机厂的Powertrain部门实习,强化了自己matlab/simulink的熟练度,也为后续我做控制算法仿真建模打下了点基础。
在2021年年末到2022年初的一段时间里,我在B站发现了宝藏的老王,跟着他从头学了一遍LQR算法,从模型到微分方程推导,到算法搭建仿真,都非常详尽,从头到尾跟着做一遍,会有更深入的理解。之后我开始阅读文献,在普通LQR的基础上做一些优化,并拿到搭建的simulink模型里对比验证,做了一些简单的思考,如动态QR矩阵和抗干扰双PID等。
秋招前基础理论知识准备
2022年4、5月份开始因为没有找暑期实习,我就开始力扣刷题,开始复习C++和经典控制理论以及现代控制理论的知识了。7月下旬就有一些企业的提前批开启,之后就是一边投递,一边刷题复习一边改简历再投递的过程了。
这里对我在规划控制算法上所学的以及面试重所考察专业知识做个总结,下一节还有更详细举例:
首先是C++,把基本概念都过一遍,然后面试前要“背八股”,C++是投递算法岗位的基础,很多企业会先机考编程,再在面试环节安排手撕代码,善用Leetcode,并多总结;之后是数据结构的学习,按照模块刷,常用的数据结构的底层实现原理,复杂度最好都要清楚;
然后就要学习控制理论了,经典控制理论和现代控制理论都要学,主要关注pid、lqr、mpc算法原理,了解相关知识点,控制理论需要一定的线性代数基础和微分方程基础,如果这方面基础差的也可以相应的做一些补足;
再就是实践部分了,这里从项目和实习两方面说,如果不是智驾科班出身的,建议跟着别人的项目复现一下,比如用simulink去搭建控制算法模型,去跑一下,对参数有理解,之后再借着这些小的项目经历去找实习,实习不一定非要是大的平台,但最好是能有实车去实践。
控制搞好之后,可以去往规划算法方向研究一下,很多企业规控岗是一起招人的,所以面试官也可能是规划方向的,就会更偏重规划知识的考察,规划算法有DFS,Dijkstra,A,D*,RRT,RRT*,这些掌握就差不多校招够用了,再深入学习去看一些局部规划算法像EM planner,看一看速度规划的细节等。
正式秋招开启
因为我秋招开始的比较早,所以前期投递的时候我还没有感觉到今年这么“寒“,投递策略也是岗位比较契合的大厂才去投一投,也导致我浪费了很多机会,后面正式批开始大家普遍海投,自己真的就没什么优势了,很多投了就石沉大海。我前前后后投了也差不多四五十家大大小小的企业,这里罗列一下不同赛道的,再列举下规控算法高频的面试题。
主机厂赛道:上汽、广汽研究院、蔚来、理想、小鹏、极氪、集度、哪吒、BYD、宇通客车等; 自动驾驶赛道:智加科技、文远知行、地平线、万集科技、旷视、商汤科技、AutoX、行深智能、主线科技、行歌科技、纵目科技、MINIEYE和蘑菇车联等; 机器人赛道:高仙机器人、极智嘉、亿嘉和机器人、杉川机器人等;
面试方面主要围绕自己的项目和实习经历去询问具体的专业性知识点,智驾初创企业有一些会问的很基础,也更重视代码能力。问题主要围绕三个方面,分别是关于车辆和数学的一些知识、C++“八股文”和编程题、控制和规划相关的知识等。下面是一些面试过程中问的比较多的问题:
关于车辆和数学的问题举例:
动力学和运动学模型的区别和不同的使用场景; 轮胎的侧偏特性,侧偏角产生的原因等; 带挂车的动力学模型推导; 当车辆上下乘客(车重发生变化时)对模型参数辨识带来的困难; 坐标变换方法、二次型的概念等 模型线性化和离散化方法;
关于C++的:
面向对象的三大特征; 构造函数可以是虚函数吗?析构函数为什么建议是虚函数?为什么默认的析构函数不是虚函数? map和 unordered_map的区别; 哈希表如何解决键值冲突? malloc / free 和 new / delete的区别是什么? 智能指针 capacity和size的区别等
主要还是围绕一些C++基本的原理和数据结构的问,编程题推荐《代码随想录》认真看认真刷,但是也不要一门心思扑在提升自己代码能力上,先熟悉自己的项目和实习,这个是问题的起源处。
关于控制和规划相关的知识:
PID控制,参数如何调节,优缺点; MPC和LQR的区别; 控制的具体控制量,输入输出量是什么?如何实现的? PID 超调如何解决,积分饱和如何解决? LQR 如何建模,状态量有哪些,控制量有哪些? 离散点的处理方法; Lattice 和 Em Planner 的基本思路等;
秋招过程中心态变化和成长
因为我开始的比较早,算是从七月份就开始投入秋招了,因为要刷题什么的学校这边的项目就一直搁置着没能兼顾。自己前期面试都还算顺利,到八月底也拿到了两个意向书,给了我很大的鼓舞。一直到九月上旬我的心态都很积极也很有动力,后面秋招正式批开始,有一家我觉得很棒很有执念的企业面完后一直没有发意向书(后来才知道自己排序靠后泡池子了),然后那一段时间里每天醒来就是去看有没有新的邮件或者HR微信,也不断地重复问HR进展,加上这个时期刷牛客和脉脉看到了很多人都收到了满意的offer,自己也开始积累焦虑情绪。
后来慢慢告诉自己继续去面试去尝试其他的机会,“命里有时终须有,命里无时莫强求”。十月中上旬又陆续投了一些企业开始面试,放平心态后,能够比较平和的去应对泡池子和拒信了,后面也陆陆续续拿到一些offer,有一些企业也开奖开出了意外之喜。我准备去的企业是我十月中旬才开始面试,十一月才拿到offer的,所以大家可以明显看出秋招是一个周期很长的过程,这个过程中一定要调整好心态,做好自己能做的,多把握机会,剩下的就是等待“无心插柳柳成荫”了。有焦虑情绪是很正常的,适当的宣泄和休息也很重要,我的途径就是每天去跑步以及和关系不错的朋友聚会倾诉下,不要让自己陷入低情绪的漩涡。
个人感悟
单单从自己感受来看,今年企业普遍缩招,加上智驾赛道处于风口,计算机、车辆、机械和控制的同学都参与其中,神仙打架之势一点也不比前几年CV算法岗弱。比较庆幸的是自己开始准备较早,正式投递也较早,陆陆续续也拿到了几个还算满意的offer,斟酌后去了一个氛围还不错的机器人独角兽企业。
我是秋招大军里非常普通的一个,个人求职之路汇聚成一句话就是,提前思考好自己想走的路,尽早的抓住机会,早铺垫,重积累,多练习,遇到机会该出手时就出手,求职时广撒网,不断在面试中积累经验查漏补缺,都能取得还不错的结果。
给想转行同学的一点建议
哪怕一开始专业不是智驾方向的,如果有心想转,互联网上也有很多的资料、教材以及视频可参考学习。仔细挖掘,选择适合自己的材料,多读多看多练手。同时项目经历实习经历真的也很重要,尤其是想去大厂的情况下!实在没有项目经历也要学会创(自)造(建)项目经历!
学习专业知识的同时,也要搭建好自己的基础。比如控制算法其实常用的就那么几种,但是只有掌握好基本的理论才能走得更远。代码能力方面还是要多看多做多敲键盘!最后就是秋招越早准备越早参加越好!
秋招是一条很漫长的路,而职业生涯是一条更为漫长的路,秋招很特别但只占其中很小一部分。求职过程要准备和学习的知识与技能,仅仅只是职业生涯中很基础的一部分,未来还有很多领域知识与技能等待我们去开拓和探索。凡事50分靠常识,50-90分靠技术,剩下10分靠艺术。工程师众,而工匠者少矣!
预祝所有在求职的同学都能顺利上岸!顺利找到适合自己且能长久精进的职业道路!
自动驾驶之心求职交流群
【自动驾驶之心】全栈技术交流群