本人985硕,自动驾驶从业者,曾面试过大部分自动驾驶公司、一部分机器人公司以及一些主机厂,方向主要是规划算法、规控算法、规划决策算法等方向。算法的面试难度每年都在不断提高,网友调侃从诸神黄昏到黑夜,可见算法面试有一定难度。
首先要了解自动驾驶算法主要包括感知、预测、规划和控制模块。我主要集中在规划和控制部分,一般机械方向、计算机方向和控制科学与工程方向、机器人方向以及一些其他方向转自动驾驶的研究生或优秀本科生会投递这个岗位。常见的自动驾驶公司如下(来源网络,仅供参考):
可以选取自己感兴趣的赛道,提前关注公司招聘情况。
秋招提前批一般7月就陆续开始、在此之前要完成简历制作、和简历上项目比赛等内容的准备和大量刷题。基本包括:基础知识、计算机能力、比赛项目、实习论文这四个主要方面。
(1)基础知识
主要学习c++,对脚本语言如python也要了解一些。
c++:基本语法、三大特性:封装继承多态、泛型编程、stl、内存管理以及c++11新标准等。
推荐: b站上侯捷老师的课程。此外我还看了黑马程序员(时间充裕入门可以看、很基础)
推荐书籍: c++ Primer/STL源码解析/Effective c++/深度解析c++对象模型等。
数据结构算法:如堆、栈、链表、队列、树、图、时间空间复杂度计算,排序算法(快排、归并)、KMP算法等。其次要学会分析代码的时间复杂度和空间复杂度。
推荐书籍: 大话数据结构
设计模式:单例模式(手写单例代码、如何保证只有一个对象等)、工厂模式、模板等。
推荐推荐: 李建忠老师的设计模式课
数学基础:可以看一些概率论、计算机几何、非线性优化的书籍,夯实基础。
(2)高频面经题
面试前一个月重点复习高频的面试题,代码随想录以及一些网站都有整理。
一般虚函数、智能指针、指针和引用的区别和c++11标准是经常考察的。我也整理了一些资料,需要可以私聊。
关于算法的面经题集中在项目中涉及的算法原理、改进思路
(3)刷题路线
必刷:代码随想录
力扣hoot100、剑指offer
之后可以针对不足进行专题训练,如路径问题、dfs算法、二叉树等。
自动驾驶公司面试喜欢考察dfs\bfs、二叉树最大、最小路径问题以及一些岛屿和图的题目,可重点准备。
每次刷题要先思考,写出来。没思路、看答案,尽量理解不同题解,最后在白板写出,记住解题思路和核心步骤。
最后及时复习,一般都要二刷或者三刷。考前重点复习经典题型、薄弱环节、限时作答。
注意:很多面试笔试都是ACM模式,非力扣得核心代码模式,考前要学会自己写输入输出,以及一些需要建立链表、二叉树等。
ACM处理输入输出大全。
此外注意:自动驾驶算法应用中常常涉及一些处理几何的问题,一些自动驾驶公司面试也会重点考察几何题。遇到过:判断直线相交、点和三角形关系、三点求曲率、折线等分…。后期有时间会专门整理相关算法和代码。
规划算法:
基于搜索、采样、优化和曲线拟合的路径规划算法,推荐我整理的一些路径规划算法博文,重点准备基于优化的规划算法(Em planer、Lattice planer、时空联合的优化算法等),在写写代码。
推荐:深蓝学院移动机器人课程,深入讲解了规划算法。
控制算法:
具备基础的控制理论基础(可控、可观)、主要是一些横纵向控制算法。经典的包括PID算法、LQR算法、MPC算法。还有一些轨迹预测的算法stanly也推荐看看。
推荐: B站Apollo课程、Apollo开源代码。
预测算法:
可以看看常用的预测网络densetnt、vetornet、lanegcn等。还有一些传统的预测方法。
决策算法
有限状态机、决策树、数据驱动和一些策略学习的方法(强化学习DQN等)
传统的预测规划控制算法实践推荐看Apollo项目,自己运行尝试实现不同城市交通场景的自动驾驶仿真(交通灯检测、行人过马路、超车、停车、无保护左转等场景),这部分我们也在做专栏学习,包括环境搭建、算法原理和代码解析,适合缺乏实习经验的同学或者增添简历项目的同学学习。Apollo项目是来自产业界的,推荐学习。
关注一些大厂官网,一般研二寒假就要准备,实习面试更注重基础,因此重点提高基础,实习的几率还是很大的。最好问下是否可以转正。这样秋招可以先人一步。
如果大厂比较困难,一些独角兽车厂也是不错的选择。在实习时争取有产出,在面试会有很大的优势。
在研一发篇会议或者争取发篇自动驾驶相关的sci,会有很多加分。
一般9、10月开题确定好,利用好研二,争取发篇sci。
即便在投,有审稿意见不错的话,也是很有优势的。
面试更注重你论文的创新思路,解决什么样的技术,是否上实车或者距离落地还有哪些不足等
值得注意的是,面试前最好阅读一些自动驾驶的前沿论文,了解前沿技术的趋势。
项目经历:
这部分主要是实验室参加的一些自然基金的纵向项目和企业的一些横向项目。
如果实验室项目相对较少,可以实践一些开源项目,想一些改进的点融合进去,允许的情况下,可以把改进代码开源也是能力的证明。
面试时按照STAR法则讲解:背景是什么?我们的任务?做了哪些工作?获得什么样的结果?
面试官对项目感兴趣,也会主要问项目做了什么事?用了哪些方法?用这种方法的优势?有什么改进?延申问一些问题。经常会问到自动驾驶在特定场景下,算法设计的思路?
比赛:
kaggle、天池和飞桨上面经常发布一些比赛,大家可以关注。
此外一些人工智能大赛、百度Apollo举办的比赛也是不错的比赛,此外国家智能网联车经常发布一些自动驾驶的比赛。
总之,关注学校或者官网发布的一些比赛,参加比赛还是能很好地提高自己的算法代码能力,也可以丰富简历。
计算机类:
参加ACM等编程大赛
在一些开源平台开源项目代码,写在简历上都是代码能力的证明。
c++面经
在网上整理的面经链接,已进行汇总。
自动驾驶相关算法学习专栏、代码学习整理
985硕士,多年自动驾驶经验
自动驾驶技术答疑解惑
求职方向建议,简历修改、项目准备
私信+点赞+关注,提前预约时间
欢迎交流讨论,整理不易,点个赞订阅我们的专栏是对我最大的鼓励。
内容包括:《自动驾驶预测规划控制决策算法学习规划、求职建议、资料分享》
部分内容来源网络整理,侵权联系删~