Giovanni 的2021秋招记录
记录自己秋招的整个经历 (目标: 自动驾驶决策规划控制算法工程师)
======================
国内普通的985本科,专业是机械电子,本科取得了还不错的成绩保研到上交,但是一意孤行去到了德国的TU Darmstatdt。没有大厂实习也没有顶会(小菜鸡一枚),因此秋招之前其实抱着试试的心态,春招再来。再者秋招恰好和毕设撞在了一起,所以每天分配一半一半的时间给毕设和准备秋招。毕设刚好适合规划控制相关的,因此算是有一个相对契合的项目经验。具体做的准备如下:
1. Leetcode 刷题
按照一个大佬的网站刷题,秋招前后总共刷了大概200题 (实习的时候一些前辈和我说最好能够刷到400),而且最好能够过两遍以上。第一遍刷的时候主要在熟悉题型,按照题型来刷,如果想了几分钟没有头绪就尝试看懂主要方法的思路,并且自己码一遍;第二遍刷的时候要尽可能自己做出来,最好能掌握不同的方法,对于陌生的题目和题型最好能多做一两遍加强印象。面试或者笔试前,我会大致脑袋里按这个过一遍:
常见排序算法,常用数据结构,复杂度,暴力解法,链表,哈希表,双指针,二分法,滑动窗口,二叉树(前序中序后序,递归和迭代,层序遍历,栈和队列),动态规划(01背包,完全背包,打家劫舍,股票,子序列,回文串),回溯(组合,排列,子集),贪心(覆盖范围)
2. C++ 基础
由于自己的 C++ 代码能力其实比较薄弱,所以在刷题的时候 python 和 C++ 都得码一次。其次,从开始准备秋招到结束依次看了 C++菜鸟教程、清华郑莉老师_C++语言程序设计基础、侯捷_C++面向对象高级开发、侯捷_C++ STL源码剖析、侯捷_C++标准1114,期间如果碰到不会的或者不熟悉的就查阅 cppreference.com 或者一些博客,以及 C++ primer 书籍。
3. 计算机基础等八股文
由于非科班出生,对于计算机基础等八股文自己主要是找一些针对常见面试的文档进行补缺补漏,目前也还在学习,之后有所收获的话会更新学习进程。
4. 相关项目
在硕士阶段,主要是做了一个和机器学习相关的小实习、加入了一个自动驾驶小组了解了感知相关任务、一个和机器人强化学习相关的小项目以及和移动机器人运动规划相关的毕设。我们学校机械专业主要还是偏向传统机械,所以自己接触的项目很杂,其实项目的实际深度都非常非常的浅,也没有很好的论文输出,但也算是让自己对相关的一些算法有了了解,加之自己对规划控制很感兴趣,因此对决策(决策树、MDP)、规划(LQR、MPC、MPPI)有一定的了解。机器学习和深度学习算法方面主要熟悉一下常见的算法(MLP、SVM、KNN、Yolo系列、DQN等)。关于面试的话,一定要对自己的项目足够熟悉,理清项目的难点和项目实际要解决的问题以及最终是否解决了或者如何解决的。
由于在提前批的时候还没准备好,所以错过了很多提前批的机会,后面发现应该好好利用提前批的机会。
主要投的是初创公司,有一些投递过后无音讯的,也有不少笔试之后无音讯的,总共参加过面试的有:
文远知行、华为、百度、毫末智行、元戎启行、小鹏、锐明科技、Momenta、地平线
==============================================================
文远知行(数据分析岗, offer)
一面
- 给定一个数组,对这个数组进行排序去重
- 查看当前目录下的文件 ls
- 讲文件从A拷贝到B cp A B
- 移动 mv A B
- 查看文件里面某个字符 grep
- 数据结构: 数组和链表有什么不同?查询和插入的复杂度?
- 机器学习项目
二面
- 2 道代码题,匹配括号和找不同的index
- 自动驾驶感知一般是怎么做行人识别的?
- QT里面数据是怎么传输的?
- 机器学习项目
三面
- 简单的求路径的题目,即给定一个矩阵,1表示起点,2表示终点,3代表障碍物,0代表可行域,(可用dp或者dfs求解)
- 项目
四面
- 介绍下毕设
- Adda的任务遇到什么困难没有?
- 公司有具体的培养政策,会针对某一块的数据工作
华为(测试岗, offer)
由于当时投的是技术研究岗,但华为hr当时只让我面测试岗位,所以笔试题目是三道编程题,做的一般但是应该是过了基本线 (编程的通过标准是100分就行,解决测试选择题,通过线是60分)。面试的时候都是测试的面试官,所以面试的内容偏测试方向,两天内就面完了三面。
- 如何去评价感知的结果?precision, recall, 准确率,mAP多少,有多少个类别?
- 用了ROS的什么功能?有什么缺点?
- 测试流程?讲讲对单元测试、白盒测试、黑盒测试的理解
- 出了一道简单的测试流程题目,画出流程图即可
- 毕设项目
百度(PnC, offer)
- QP, 如果约束条件是二次方程,还是凸函数吗?
- A* 和 RRT 的区别? A* 能找到最短路径吗?如果启发函数不同,路径还一样吗?
- 代码题1: 一个 DFS的题目, 中等难度
- 代码题2: 给定一系列的点,求其拟合直线
- 代码题3: 力扣153
- 详细的毕设介绍
/* 代码题1 */
//求 最长的通路的长度(最多有多少个0相连) #include <queue> bool is_valid(int a, int b, vector<vector<int>>& grid_map) { int nr = grid_map.size(); int nc = grid-map[0].size(); return 0 < a && a < nr && 0 < b && b < nc; } int find_land(vector<vector<int>>& grid_map) { int result = 0; int nr = grid_map.size(); int nc = grid_map[0].size(); queue<pair<int, int>> neighbors; for (int i = 0; i < nr; i++) { // 遍历整个地图 for (int j = 0; j < nc; j++) { if (grid_map[i][j] == 0) { // 搜索邻居 neighbors.push_back(make_pair(i, j)); while (!neighbors.empty()) { int ans = 1; x, y = neighbors.pop(); for (int p = -1; p < 2; p += 2) { for (int q = -1; q < 2; q += 2) { int cur_a = x + p, cur_b = y + q; if (is_valid(cur_a, cur_b, grid_map) && grid_map[cur_a][cur_b] == 0) { neighbors.push_back(make_pair(cur_a, cur_b)); ans += 1; } } } result = result < ans ? ans: result; } } } } return result; };
毫末智行(PnC, Offer)
两次面试主要是问了毕设的项目和强化学习相关的知识,记得写了一个Leetcode中等难度的题目,还问了 python 装饰器和 C++ 智能指针
元戎启行(PnC,二面挂)
一面
- 主要介绍毕设
- 轨迹预测有做过吗?
- 代码题目: 广度优先搜索
二面(代码面)
- 快速幂 -> 递归, 需要考虑数据是否溢出
- 关于马尔可夫性的题目
- 投骰子, 每个面都能朝上一次的总共投掷次数的期望: dp[i] = i/N * dp[i] + (N-i)/N * dp[i+1] + 1
小鹏(软件测试,offer)
一面
- Hiwi项目介绍, 怎么确定评判标准的0.01? 遇见了什么困难?为什么认为你可以完成这个项目?
- aDDa介绍,模型训练完以后,和testdrive在识别上有什么区别?
- 整车网络了解吗?CAN
- 测试开发工程师方向
二面
- Hiwi介绍, 做了什么数据处理?怎么选择模型?
- IP1介绍, 如何选取到最优抓取点?
- ADP介绍, 帧率?
- aDDa介绍,
- 问了意向工作地点
锐明科技(感知算法,一面挂)
- 讲一下 NMS(非极大值抑制)
- 如何做交叉数据及训练的? Focal loss 是什么?
- 详细把yolo的每一个模块搞懂
- IOU怎么算的?
- Yolo里 有几种loss?
- 蚁群算法了解吗?不了解...
- 数据增强的方式有哪几种?
蛮投一下感知,问题对CV的人应该不难,发现自己太菜了...不过也提醒自己要专注规控的面试。
Momenta(PnC, offer)
一面
- 讲一下用过了什么规划算法? A*, rrt, rrt*, 各自的优劣?
- 讲一下你对EM planner 和 lattice planner 的理解, 各自的适用场景?
- 控制方面有接触过吗? PID、LQR 和 MPC
- 机器学习算法用过哪些? MLP, KNN, 决策树
- 强化学习用过哪些? DQN
- C++ 引用和指针的区别?
- C++ 的多态指的是什么?有几种?
二面
- 代码题1:力扣简单难度
- 代码题2: 最长的回文子串
- 讲一下毕设如何做的的规划控制
- rrt 和 rrt* 有什么区别
- 机器人位姿优化有涉及什么强化学习?
三面
- 主要介绍毕设项目,针对性的提问
- 反问需要补充的规划知识
地平线(PnC, offer)
一面
- KNN 和 K均值的区别, 机器学习项目的输入输出是什么?
- 目标检测用了哪些模型?
- 代码:矩阵乘法
- 熵是什么? 用过什么分类算法?决策树, 不同类型决策树模型的区别?
二面
- 代码: 二叉树是否镜像 (层序遍历)
- 代码: 两个有序数组,大小为N,找到第K个元素 (二分法)
- 基于rule-based / RL 以及 神经网络的决策规划各自的优缺点
- 毕设:规划的输入是什么?是否有动态障碍物的信息
- 如果没有轨迹预测的信息,要怎么做决策规划?
- 为什么想来我们公司?
三面
- 代码题1:已知lnx+x^2 =0 在(0,1)范围内有唯一解,用数值方法求解,精度0.0001
- 项目: 介绍下毕设,以及在PID中如何选择Kp和Kv的?
- EM planner了解吗?QP了解吗?用过什么优化算法?多次曲线?贝塞尔曲线?
### 代码题1
# 已知lnx+x^2 =0 在(0,1)范围内有唯一解,用数值方法求解,精度0.0001 ##采用解法为牛顿迭代法 import math x = 0.5 def func(x): # 函数方程 y = math.log(x) + x ** 2 # 搜一下ln return y def dot_y(x): # 求导数 dy = 1/x + 2 * x return dy def find(x): diff=1 while diff > 0.0001: y = func(x) dy = dot_y(x) new_x = -y * 1./dy + x # 先求出切线方程再令y == 0; new_y = func(new_x) diff = abs(new_y - 0) x = new_x return x result = find(x) print(result)
四面
- 介绍毕设
- 基于rule-based 和 learning-based 的方法,了解多少
- 对自己今后的发展有什么规划
- 德国生活和中国有什么不一样
- 代码: 写一个01随机生成器, 再完成 1-N 随机生成器 (可参考 1到N的等概率生成器)
=================================================
总的来说,秋招真的是出乎自己意料的拿到了几个满意的offer,由于自己没有很好的实习经历,而且代码能力和身边同学以及前辈们还有很大的差距,学历也非顶尖,所以已经非常满意现在能拿到的offer了。在简短的实习过后,觉得实习对于锻炼自身的多方面能力都很有效,后悔之前自己太懒,在国内没有把握机会去实习,建议最好能去自己未来打算发展的岗位实习,多和前辈们交流,吸收一些经验。记得看侯捷老师的视频时,他偶尔说到 "革命尚未结束,同志仍需努力"。作为一个PnC beginner,还有非常非常多的基础知识和技能需要补充,拿到offer只是革命的第一步,真正的挑战还没到来。Fangen wir an!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库