秋招总结|自动驾驶算法工程师攻略
本人背景介绍:本+硕双中末流985,leetcode500+左右,两段实习,论文成绩中上。
由于本科及硕士专业为传统的工科控制专业,对开发没有投入过多精力,恰逢自动驾驶行业发展壮大,因此秋招目标一开始就选定为自动驾驶规控算法相关岗位,并成功拿到小米,华为等一众大厂相关offer, 现已成功上岸百度IDG事业部算法岗。鉴于本次秋招在牛客上与大家一起分享交流经验,收获了很多经验与快乐,故回来分享自己的一些经验与拙见,为后面的牛油们(尤其传统工科不想转纯开发的童鞋们)踩坑铺路~
先说结论: 刷题 + 基础 = 互联网行业敲门砖 +大厂or独角兽实习 = 刷出大厂offer概率翻倍
1. 实习:
先说实习,在实习的选择上,个人认为大厂最佳,独角兽也可,中小厂其次。
时间上越早越好,但是考虑到大部分研一同学都有学业上的任务,因此研二下学期(2-3月份)为实习的关键窗口期,此时正值春招,会有一部分实习岗位同步放出,把握好机会,实习面试经历也会为你后面的秋招面试打下良好的基础。因此想要冲击互联网的同学在研二寒假乃至研一暑假即可开始准备一些实习面试内容,越早越好。
(PS:相信很多跟我一样学工科的同学导师都是不同意出来实习的,导师就想把你留在实验室干活儿打工,我的建议是:能冲则冲,不撕破脸就行,实习对于硕士冲互联网算法大厂至关重要,跟找到一份满意的工作相比,导师的刁难根本算不上什么。这里还有一个前提就是,你得先达到学校的毕业要求,因此研一包括大二上学期要抓紧准备,为后面的实习乃至秋招打好基础~)
本人是分别在美团以及图森未来有过两段算法工程师的实习经历,虽然都不算太长(两个月左右),但是收获可比在实验室大太多了。
- 美团实习:笔试 + 三次面试:笔试就是三道中等难度编程题+5道技术通识选择,面试的话由于本人课题方向与美团要面的组方向比较一致,因此基本都是在问一些课题的问题,纯属偶然,参考意义不大,在此不再赘述~
- 图森算法部实习:两面:技术面 + 代码面,技术面主要是在询问一些课题以及控制理论相关的专业知识,比较容易,但是基础的专业知识一定要复习下;代码面就是在牛客面试平台写两道题+C++基础原理(这一部分后面会说到),要求不是很高,我基本上写对一道题+部分问题回答就收到了offer,可见实习相比正式秋招难度还是要小不少,因此要好好把握机会~
总结:两段实习虽然没有太多技术上的进步,但是非常重要的是让你熟悉了面试的基本流程与一些面试的基本问题,方便后续秋招进行更加有针对性的准备,同时实习经历也会为你的秋招简历增光添彩,同时如果觉得各方面都还可以,想要实习留用的话也会比正常秋招要简单一些。
(PS:关于我为什么没有选择留用这件事:首先是因为个人实习期间由于学校这边的原因出勤率不高因此没有什么大的产出,同时实习时间较晚,面临秋招提前批的冲击,感觉留用无望果断选择放弃重新开始秋招,看到今年很多选择实习留用的同学都被放了鸽子or给了白菜,更加感觉自己当初的判断是正确的,即:实习期间没有特别突出的的产出,切不可all in留用,一定要及时放弃或者好好准备秋招,更不能相信leader给你画的饼,血与泪的经验教训,一定要谨记!!!)
2. 刷题
这一部分同样是重中之重,甚至决定了你有没有面试的机会。因此一定要加以重视!考虑到这一部分很多牛油们都已经总结了丰富的经验,在此我只提简单的几点:
- 刷题要尽早,很多题目都需要时间来慢慢消化理解(尤其对像我这种基础薄弱的人来说)
- 刷题尽量看相关的教程刷,切勿盲目刷题,最好是分类刷,算法题一共也就那么几个类别,分类刷题有助于总结相关题目的解题技巧,加深印象,彻底搞懂此类题目
- 经典的题目值得反复品味(剑指offer等),适当的总结往往可以达到事半功倍的效果
- 算法复杂度的分析与优化
3. 知识基础
关于知识基础这方面,开发的同学总结得比较多了,在此不再赘述。但是据我个人了解,自动驾驶算法类岗位并不过多要求传统的操作系统,计算机原理,数据库方面的知识,主要的考点在数据结构方面,同时也会对自动驾驶相关的专业知识进行一定的考察,下面分别进行介绍:
关于数据结构:由于本人使用的语言为C++,因此相关问题主要集中在C++方面,大多是也是一些常规问题,在此列举一些本人面试中出现的高频考点作为参考:
- static的作用(包含static变量与static成员函数)
- 指针常量与常量指针的区别
- 多态的原理与底层实现
- 智能指针的用法
- 多线程编程基础
- 几种不同的构造函数的写法
- 虚函数占用的内存
- 优先队列的内部实现原理
- 不同的继承方法与继承属性
- struct与class的区别
- 其它
关于专业知识:由于我的主攻方向为PnC(Prediction and Control)相关,在此只针对该方面做一些知识点的简单介绍:
- 控制系统的可控性与可观测性
- 一般系统稳定性的判定方法
- PID控制的原理与手撕
- MPC控制原理与稳定性
- 卡尔曼滤波的原理
- 常用的轨迹规划方法分类,原理以及使用场景
- 非线性优化基础知识
- 其它项目相关
4. offer相关
关于简历的投递,其实个人并不赞同海投这种行为,这样会大量浪费自己宝贵的精力与时间,因此我的建议是要有目标性地进行岗位的投递,10家左右为最佳,如果觉得没啥面试经验需要刷面试经验,可以从春招的实习入手,也可以投一些自己不大想去的秋招提前批,借此来积累经验,进入秋招的面试状态。对于自己意向非常强烈的公司,一般建议在自己面试状态较好的前提下尽早投递,一些提前批的机会往往要比正式批大不少,因此秋招要尽早开始布局规划,做到有的放矢,从容不迫。
关于面试,我的建议是,尽可能将笔试面试安排的紧凑一些(一段时间集中笔试,一段时间集中面试),因为笔试面试这种东西其实跟手感状态都有很大的关系,因此集中的笔试面试有助于保持状态与手感,免去了很多准备过程中的精力与情绪消耗。至于面试过程,首先要保证面试环境的整洁与安静,同时注意礼貌与尊重,回答不上来的问题直接说就好,大多数面试官也不会刻意刁难你,如果遇到个别态度不好的面试官,切忌让他引起自己情绪的波动与外漏,始终做到彬彬有礼,从容不迫,给面试官留下尽可能好的第一印象,方便后面offer的争取。
关于谈薪,三个原则:切记过早暴露自己的底线;能a则a(argue也有利于为自己争取一定的时间);真真假假(大家自己体会)
关于offer的选择,大多数准备充分的同学都会在秋招中后期收到一些offer,有的offer可能发放时间比较早会出现一些逼签的情况,对于这种情况我的建议是能拖就拖,尽可能地为自己多争取一些时间,这样就可以拿到别的offer进行综合比较,做出最优选择。对于实在拖不了的offer,如果是自己的意向单位,条件也还不错,建议可以直接下手,没必要为了继续等后面的offer而错失良机。对于HR的一些稳定话术,听听就好,主要是要根据当前情况拥有自己的判断,切忌all in死等一家,一切都要以意向书与正式的offer为准!
以上就是我的秋招的经验之谈了,倾囊相授,希望对大家有所帮助,最后希望大家都能拿到自己满意的offer,得偿所愿,勇敢前行~