2023届-SLAM算法校招面经

有需要可以帮看简历:
mail:[email protected]

23年6月初终于尘埃落定,今年受大环境影响,这一路可以说是步履维艰,我的投递的行业主要面向机器人和自动驾驶,投递岗位大部分是算法工程师,其中也包括C++开发和少量的测试岗,在面试过程中加深了对车企、自动驾驶、扫地机、测绘等的认识,现在关于这几个领域的话题也能侃侃两句。就校招面试过程中的一些经历做个记录(涉及隐私的就删去了哈):

某纵算法

一面0913

1.自我介绍
2.问项目
3.问ORBSLAM、问字典
其他的忘了

二面0922

1.自我介绍
2.问项目 问实习
3.问了cmake怎么编译的,怎么添加库

追觅

一面0921

一面技术官面
1.自我介绍
2.问项目
3.coding(忘了什么题,是一道简答题目)

二面0924

二面算法负责人面,反而没细问,不知道是不是kpi
1.自我介绍
2.问项目
其他的忘了

某滴

一面0930

一面面试没有自我介绍,面试官看我有古月居和B站经历就没有多问了,C++八股只是问了一下会不会没有考,关于项目也是一直在聊怎么做的,有哪些loss,现场还加了微信,向我共享了屏幕展示了他们目前的工作总结ppt,主要是做一个用iPhone拍出的图像进行三维重建的项目

二面1009

后来知道面试官是后端的,不太懂算法
1.自我介绍
2.slam是什么,全称是
3.定位是什么意思
4.coding
没有后端的思维,第一题没太听懂,大致意思是写一个抽奖小程序
第二题是给一个字符串返回第一个只出现一次的字符的下标。哈希表两个遍历。

三面1020

面了20+分钟,没有coding没有八股,问的多是测试
1.自我介绍
2.讲一下一个算法要测试哪些方面
3.建图效果测试
4.耗时分析?
5.平时用什么社交软件?微信消息传输机制测试哪些点?
6.回家要开门,发现没有钥匙,有几种情况
7.算法的为什么要投测试?
8.职业规划
反问:
1.偏测试还是偏算法?
2.新人培养机制?

某新势力

一面1010

没有问项目,电话面试,10+分钟
1.自我介绍
2.问了一下Linux和ros
3.问了cmake怎么编译的,怎么生成可执行文件、动态链接库和静态链接库
4.问了一下C++八股文
C++三个特性、进程和线程
其他的忘了

二面1018

晚上8点突然一个电话打过来开始面试
1.介绍一下自己做的项目
2.问了项目相关,用的什么计算设备,耗时多少
3.是不是每个项目都写了回环
4.代码量多少
5.C++八股
6.多线程读同一片内存会引发什么问题( 当两个或多个线程同时对一块内存区域进行“只读”时,不会有问题,但如果发生“写”时,就会有问题,需要加锁)

7.单例模式是什么

保证整个系统中一个类只有一个对象的实例,单例模式节省公共资源、方便控制
饿汉模式的意思是,我先把对象(面包)创建好,等我要用(吃)的直接直接来拿就行了
懒汉模式的意思是,我先不创建类的对象实例,等你需要的时候我再创建。

8.说说你对自动驾驶的看法
9.说说代码编程规范
反问:
1.部门做什么的
2.多少人
3.还有几轮,几天出结果

HR面1021

1.自我介绍
2.看你学的
3.问目前拿了哪些offer,那你考虑哪些地域?你期望薪资是多少?拿到的offer多少薪资?
4.你求职对公司更看重什么?(行业、职业发展)

某安汽车

一面0920

hr面,感觉是kpi面,同门面问了平时打不打游戏
1.自我介绍
2.问时事
3.问了其他的乱七八糟,还说什么自动驾驶算法很难要加油,一共20+分钟吧

电话1010

打电话说我这岗位竞争激烈,2w多简历,双非怕我竞争不过问我转不转岗,一面面评很好,之后拒了转岗要求

某瑞

一面0929

群面

二面0930

直接谈薪
直接offer,薪资超低 总包12个w左右

某马

一面1014

1.自我介绍
2.coding
3.问为什么不在之前实习的公司、就业地点考虑、工作规划
4.问项目
背景?怎么做的?
框架?
创新点?
策略?
回环检测?
5.实习做了两个项目?没细问
6.可能是前面耽误了太多时间,直接反问
部门做什么业务?
什么传感器?
组里主要做什么?
建图、定位、标定等

某测

一面1015

一个老哥推荐,没有自我介绍,没有coding,直接项目,主要是问特殊环境下slam的解决思路
1.地下slam最难的是什么,解决
2.精度评定过没
3.针对地图重叠有什么好的方法
4.异地组网、分布式怎么弄;地下无卫星信号怎么办
5.实习的时候为什么用legoloam不用别的
6.他们也用过r3live,发现很吃性能,怎么办
7.为什么不做紧耦合,esikf之类
8.小树林没有gps,或者信号弱怎么办,提示说livox的imu精度比较低,换用九轴imu
9.简历里写售出一台产品什么意思
10.职业规划
11.反问
问:这个方向目前多少人在做

二面1025

一个博士面的
1.论文在投?什么期刊?
2.说说激光雷达在测绘的了解
3.legoloam有没有做后处理
4.激光的打在一片白墙上怎么解算
5.为什么用ndt
6.你精度评估做得不好,想看看你论文因为B站和博客都偏向于工程应用,交谈也很流利
7.做导航定位的时候imu是怎么用的
8.基于ros的,有没有不用ros的,比如其他分布式,效率提高30%,可以去了解了解
9.为什么要做基于手机的定位
10.学硕吗?三年专硕?估计以为是学硕才问论文

恒某

一面1018

1.为什么要做融合
2.在哪种情况激光失效、视觉呢
3.会不会画pcb
4.直接法基于一个什么假设
5.项目偏工程应用?
6.有没有offer

二面1019

面试前:hr打电话约面的时候说线下宣讲的时候笔试分挺高,一面是leader面,说我学校有点难,目前公司这个slam应用岗位也是要求会算法的,我询问了他的意见,他说回去根据面试结果和leaders商量后给具体岗位。

三面1021

1.自我介绍
2.讲一下数字孪生项目
3.激光什么情况下退化?
为什么?
有没有从激光打在平面上造成的夹角角度分析?
4.怎么融合?松耦合?怎么判定哪个失效
5.面向墙壁问题

INDEMIND

一面1019

slam部门,虽然面试题目一看就是准备好的,但是有水平的
1.自我介绍
2.多融合用了哪些传感器
3.具体怎么融合的
4.激光失效怎么用视觉补偿
5.时间上怎么处理,激光imu频率分别是多少,有没有做过内参和外参的标定
6.长直走廊前后退化,但是两侧是可以作为约束的,有没有考虑过
7.听出来你这个系统很吃性能,你说正在优化,怎么优化
8.原始点怎么筛选
9.ORB熟悉2还是3,2的整体框架是什么
10.后端优化常用什么,stsam、ceres还是g2o,后端怎么优化的,局部优化还是全局
11.重定位、词袋怎么解决灰度变化问题
12.共视图是什么
13.回环误判定怎么解决
14.平时用的什么语言编程,c++,问八股

什么操作会导致内存泄露?
指针指向改变,未释放动态分配内存。 
如何防⽌内存泄露?
将内存的分配封装在类中,构造函数分配内存,析构函数释放内存;使⽤智能指针

智能指针讲一下?
多态中的虚函数

在基类中实现虚函数的方法是在函数原型前面增加 virtual.

虚函数与纯虚函数

纯虚函数首先是虚函数,其次它没有函数体,取而代之的是用“=0”。
纯虚函数是在基类中声明的虚函数,它在基类中没有定义,但要求任何派生类都要定义自己的实现方法。

反问:
1.部门主要做什么
2.多少人

二面1024

1.自我介绍
2.外参标定算法框架、loss
3.imu预积分
4.legoloam算法
5.orbslam框架
6.接受北京吗?
反问:
1.做什么?
2.产品还是技术方案?
在北京

某安

一面1019

1.自我介绍
2.主要是问项目,符合他们的技术栈,对答也比较流畅,还算满意
3.问了一个重定位相关
4.问了一个特征点与直接法
5.问了之前用的哪个回环检测,有什么改进
6.问了评判标准
反问:
1.主要做那个方向
2.有没有3d激光的规划
3.加班情况
4.新人培训
6.slam岗位主要看重啥?
算法体系
各个算法框架、理论体系、优缺点
编程能力

二面1027

1.自我介绍
2.学过哪些SLAM算法
3.讲一个SLAM框架
4.SC回环怎么做的
5.后端是GTSAM?
反问:
您主要是做什么的?
公司 对slam有什么要求?

苏某

一面1020

投的是C/C++,面试问题也就c++八股,C++八股背的很少不是很熟
1.自我介绍
2.最近做的一个项目是啥?这个项目里用到了C++里的哪些std?
3.vector和list有什么区别?

1. vector底层实现是数组;list是双向链表
2. vector是顺序内存,⽀持随机访问,list不⾏,list是链式存储结构
3. vector在中间节点进⾏插⼊删除会导致内存拷⻉,list不会
4. vector⼀次性分配好内存,不够时才进⾏翻倍扩容;list每次插⼊新节点都会进⾏内存申请
5. vector随机访问性能好,插⼊删除性能差;list随机访问性能差,插⼊删除性能好

4.vector特性?

5.map、set、unordered_map等?

set,map,multiset,multimap底层实现为红黑树,unordered是哈希表;
set不允许两个元素有相同的实值。
multimap和map的唯一不同就是:map中的key是唯一的,而multimap中key是可以重复的

6.C++多态?虚函数?

多态的实现主要分为静态多态和动态多态,静态多态主要是重载,在编译的时候就已经确定;动态多态是用虚函数机制实现的。
没有函数体的虚函数就是纯虚函数

7.讲一讲进程与线程?

进程是程序的⼀次执⾏过程,是系统运⾏程序的基本单位,系统运⾏⼀个程序即是⼀个进程从创建,运⾏到消亡的过程。
但线程是⼀个⽐进程更⼩的执⾏单位。⼀个进程在其执⾏的过程中可以产⽣多个线程。
线程不拥有系统资源,但⼀个进程的多个线程可以共享⾪属进程的资源;进程是拥有资源的独⽴单位。

8.多进程之间的通信方式

1)基于内存的⽅式
1. 匿名管道
2. 信号
3. 消息队列
4. 共享内存
(2)基于磁盘的⽅式
1. ⽂件 
2. 命名管道 
(3)基于⽹络的⽅式
1. socket
2. 消息队列
3. RPC
4. HTTP等各种⽹络协议

9.线程安全怎么保证?
10.访问一个网页是怎么样的一个流程?

用代码把共享数据锁住,其他尝试操作共享数据的线程必须等待 锁定->操作->解锁

死锁
至少两个锁头(互斥量)才能产生死锁问题
解决死锁的办法
1.只要保证两个锁头的上锁顺序一致。
2.std::lock(mutex1,mutex2),
3.std::lock_guard<mutex> mylocgad(mutex1,std::adopt_lock);这个函数可以让lock_guard不执行构造函数,只执行析构函数,意思是可以手动lock,让lock_guard来帮助自动unlock,在lock的时候更加灵活了,在unlock的时候也更加方便了

11.做了两个题,coding,都写出来了

反问:
1.是做什么的?有哪些业务?

二面1025

hr面。
1.在电脑面前从远走到镜头
2.拿起身份证,报身份证号
3.自我介绍
4.核对本硕学校,是否非全日制
5.老家远,为什么投这
6.对苏小妍的了解
7.预计上班会遇到的挑战
8.职业规划
反问:
还有几轮?
新人培养机制?

三面1028

1.自我介绍
2.实习过吗?实习中的C++项目?
3.c++编程最难的是?
4.HTTP属于应用层
5.tcp/ip属于什么层?
6.C++三大特性
7.为什么选择中国移动?
8.目前有什么offer

某电源

一面1021

1.自我介绍
2.讲一下实习机器人定位这一块
3.ndt怎么定位
4.讲一下数字孪生,数字孪生跟你这个做的不相关吧?
5.地下空间怎么定位
6.地下空间这个项目背景
7.了解什么slam算法?ORB的流程?
8.三角化的原理讲一下?重投影?共享屏幕画一下
9.研究生比赛等

反问:
1.工作base哪里?

2.做什么项目?

3.还有几轮面试?

二面1026

27min左右
1.自我介绍
2.实习项目你遇到的问题怎么解决
3.实习代码量写了多少?
4.做题:两个题,选了个简单的爬楼梯,另一个是数据结构相关
5.B站和CSDN
反问:
这个岗位需要学些什么?

某润

一面1026

智能功能安全工程师,因为研究方向不符,所以面试官先给我介绍了一些这个岗位的工作职责
1.自我介绍
2.数字孪生系统项目介绍?做到了什么程度
3.几个人做的?如何分工?
4.怎么评估性能的?
5.时间同步?有没有做过对比?
6.硬件了解到什么程度?通信是自己写的吗?
7.Linux底层自己写的吗?
8.参加了比赛?
9.论文?专利、软著都是数字孪生相关吗?
10.成绩排名?
11.英语怎么样?四六级过了吗?口语如何?跟老外交流过吗?
12.期望工作地点?

反问:

岗位不符,如果要进应该学些什么?

后面约二面,感觉岗位不符,拒了

某动力

一面1027

1.自我介绍
2.给我介绍他们那边的工作相关
3.你做的项目介绍一下
4.C怎么样
5.电赛和智能车竞赛讲一下C相关
6.matlab会吗
反问:
进入这个行业具体还要学什么?

岗位像本科做的嵌入式,不太符合

旷某

一面 1104

1.自我介绍
2.实习legoloam
3.z轴偏移解决,在那些情况下发生这种情况
4.r3live了解多少,改进在哪
5.ORB初始化讲一下
6.r3 vio初始化是怎么的
7.r3 lio讲一下
8.loam和fastlio区别
9.古月居课程?
10.看了B站和古月居
11.C++构造函数的四种方式?

问的很多,什么都问,地图测量过没,怎么解决问题,撕了一道题,数组找第k大,快排忘了
我说能不能转实习,实习可以的,估计还有一轮面试,难度低一点,本场面试1个多小时

某石

一面 1104

1.自我介绍
2.ndt定位讲一下
3.ORB的初始化,imu怎么参与
4.标定做过imu的标定嘛
5.其他的忘了
面了半个多小时,总体来说还行,会有一轮更简单的复试

二面 1108

hr综合面,半个小时,考察综合能力,问了对自动驾驶的了解,有哪些公司在做自动驾驶,实习,做过最难的项目,对公司的了解,为什么不考虑在之前实习的公司留下,公司规模什么样才好
然后给讲了公司的大致情况,成立时间,规模

某城

一面 1109

半个多小时,全程被拷打
1.自我介绍
2.问算法,问项目,问slam十四讲很深

  1. 为什么引入李代数、李代数算法里怎么应用

2023届-SLAM算法校招面经_第1张图片
旋转矩阵自身是带有约束的,正交且行列式为1,他们作为优化变量时,会引入额外的约束,优化变的困难,通过李群李代数的转换关系,把位姿估计变成无约束的优化问题。它们之间的关系通过指数映射完成
李群上只有乘法没有加法,所以没有办法求导,所以要转换为李代数,通过李代数求导。
李代数 se(3) 的维数是6,3×1的平移向量ρ和3×1的旋转向量Φ组成。

  • 详解对极几何,哪个是极线、极点,对极几何的方程还记得吗

O1O2P组成极平面,O1O2的连线与两帧图像的交点称为极点,极平面与两帧图像的交线称为极线

  • 词袋中的物体在orb中怎么表示

词袋向量、特征向量

  • 详解orb特征点、特征不变性怎么表示

ORB特征是采用FAST方法定位特征点坐标,但FAST特征本身是不具有方向性的,所以在ORB特征中添加对特征方向的计算是采用矩方法计算特征点方向,使用BRIEF计算特征点描述子并根据特征点方向使得描述子具有旋转不变性
灰度质心法计算特征点的方向

  • 解F这些需要几个方程,手推公式

H 8
F 7
E 5

  • orb初始化匹配分解得到初始位姿后还有处理吗

在ORBSlam2的Tracking线程中,进行相机状态初始化的时候,当使用对极约束时,求解了第一帧和第二帧之间的单应矩阵和基本矩阵,并通过三角测量得到两帧匹配点的三维位置之后,使用了全局BA算法进行了一次细致的位姿优化。
这一过程比较单调,就是普通的BundleAdjustment优化过程
先设定帧顶点,再设置MapPoint顶点,然后添加边信息。

  • 针对orb有没有做算法改进
  • 有了位姿和3d点怎么优化
  • brief描述子是什么向量

2023届-SLAM算法校招面经_第2张图片

  • 如何解决匹配点的筛选问题

2023届-SLAM算法校招面经_第3张图片
最简单的利用经验值筛选最小距离4倍的matches或者小于最大距离的0.6倍;
通过RANSAC方法计算透视变换矩阵来筛选符合相同透视的特征点,这样做可以去除很多错误的匹配。

  • 说明RANSAC原理

随机采样一致性(RANSAC)是⼀种根据含有外点的数据拟合参数模型的迭代⽅法。外点(outlier) 是“不符合”模型的测量,内点(inlier)是“符合”模型的测量。RANSAC是⼀种概率算法,只有花费⾜够时间去搜索,才能确保(提⾼)找到合理答案的概率。
RANSAC以迭代的⽅式进⾏。在基础版本中,每个迭代包括以下五个步骤:
(1)在原始数据中随机选取⼀个⼦集作为假设的内点(例如,如果根据数据拟合一条二维直线,则选择两个点)。
(2)根据假设的内点拟合⼀个模型(例如,根据两个点拟合直线)。
(3)判断剩余的原始数据是否符合拟合的模型,并将其分为内点和外点。如果内点太少,则该次 迭代被标记为⽆效并中⽌。
(4)根据假设的内点和上⼀步中划分出的内点重新拟合模型。
(5) 计算所有内点的残差,根据残差和评估模型。
迭代上述步骤,把具有最⼩残差和的模型作为最佳模型。
RANSAC的优点是它能鲁棒的估计模型参数,它能从包含大量outlier的数据集中估计出高精度的参数。RANSAC的缺点是它计算参数的迭代次数没有上限,如果设置迭代次数的上限,得到的结果可能不是最优的结果,甚至可能得到错误的结果;RANSAC只有一定的概率得到可信的模型,概率与迭代次数成正比;RANSAC只能从特定的数据集中估计出一个模型,如果存在两个(或多个)模型,RANSAC不能找到别的模型。

反问:
公司成都这边什么业务?多少人?

2023

某镜

0206

面一小时,问项目、写题、C++只问了多线程
1.自我介绍
2.问项目,问去畸变,跟图像去畸变区别
3.配准效果,精度和耗时看重哪个
4.teaser++自己改了还是直接调用
5.fpfh是直接调用还是自己写(公司更看重自己写库)
6.ndt
7.数字孪生系统介绍
8.手机orb没有做成app
9.orb哪个部分耗时
10.多线程了解吗,orb里的多线程讲一下
11.激光相机怎么标定的,相机尺度问题怎么解决(找适配场景)
12.相机标定过吗,标定结果参数是什么
13.因为面的算法,做一题
反问
1.后面还有几轮
2.部门做什么
3.要适配该工作应该怎么努力

后面就闲聊,工资啊地区差异等(不计入面试成绩)

某行

0206

一小时多一点,全程不卑不亢 差点吵起来
1.自我介绍
2.你在旷视做了啥,用的什么雷达,频率是多少,问了很多都忘了
3.为什么要用legoloam巴拉巴拉
4.地下矿井针对退化怎么解决,(视觉),视觉也会不行的怎么办
5.古月居
6.电赛做的啥

后面是hr来面:
1.拿了多少offer
2.为啥选择XX不选XX
3.XX开多少
4.职业规划
5.找工作看重什么

反问:
1.项目组做什么的,是不是解决方案提供商(3d 2dslam 有产品我觉得是吹)
2.几个人

某臻

0209

1.自我介绍
2.视觉相关做过什么
3.激光和视觉的区别
4.左乘和右乘区别
5.为什么用四元数

四元数四个变量,矩阵9个更难操作

6.为什么用李群和李代数

旋转矩阵行列式为1,引入多余的约束

7.回环检测方法
8.IMU预积分推过没有
9.讲一下卡尔曼滤波
10.项目中你改进最大的一个是什么,举例说说
11.在嵌入式开发过没有
12.极大似然估计和贝叶斯
13.对极几何、本质矩阵、三角化

面了40min,觉得基础还可以,就没有问C++和编程相关
面试官是视觉派,战队特斯拉,公司视觉多,他视觉slam十四讲看了多遍 用过livox40
他觉得我激光更会一点,视觉太少,至于融合 对于视觉+激光觉得我还欠缺

某东

一面 0302

20年8月投的,23年3月捞起来,京东主要负责slam的,面的不太好,大概没了
1.自我介绍
2.旷视负责什么
3.teaser++原理
4.fpfh什么原理
5.项目,sc原理
6.你还知道哪些回环检测方法
7.词袋模型介绍
8.BOW的正反

某润

新投的成都部门

0309

自我介绍
介绍旷视实习
数字孪生系统
问的不多不深,看过CSDN
了解公司吗
公司系统老熟人了hhh

后面说岗位匹配度不是很大

某特

一面 0309

hr
2月投的,现在校招刚开始 还在找工作吗
之前签了三方了嘛
问了期待薪资
英语怎么样 六级多少
用英文面:
介绍自己
你会的能为ADAS做什么

后面还有两轮面试,一轮国内一轮德国 德国是全英语国内部分英语
我人傻了,突然来个电话 以为是约面试而已 直接开始测试英语水平
全程“OK OK that’s all 3q my name is auto car"尬住

某宝

一面 0403

问项目,问三种slam框架优劣势,问了很多C++八股,问git等等

二面 0412

问实习
问项目

写一个总结:

  1. 量化简历:面对大量的竞争者和雇主,在大量的简历中脱颖而出是非常重要的。记得针对招聘岗位制定一个量化的工作或实习经历清单,并准确描述自己的成就和技能。
  2. 深度交流:要深度了解自己所在的行业、涉及的知识面,在拓展人际网络、想要获得更多的就业机会时,努力与人建立深度和长期的交流关系,而不是短暂的“面试闪光”效果。要试着去了解雇主的背景和公司文化,准备有针对性的提问,以便更好地了解他们的需求。
  3. 实际操作:实践证明,“动手做”是学习成长的最佳途径之一,因此应该在自己的领域中多做实践,争取更多自己的实践机会和能力修炼。算法岗位要求非常高,面试官更看重对算法体系的认识、理论体系、优缺点以及实际上你做出的贡献,需要较强的coding能力,需要较好的数学功底,然后与学校里发论文不一样,公司更看重的是工程落地能力,平时应该尽可能多地利用机会在自己的领域中多做实践,以此提高自己的实践能力。

写一个建议:

  1. 不断优化简历,我的简历从找实习开始一直到春招结束都还在不停完善修改,简历需真实、切合岗位需求,不可造假
  2. 简历要多投,海投,针对不同岗位设置针对性的简历
  3. 尽可能早的开始准备,实习应该在春节开始投递,秋招应该在7.8月开始,而且现在越来越卷
  4. 面试是常态的,面试没过很正常,要汲取经验,千万稳住心态,尤其是周边人已经签了的时候
  5. 一定要进行复盘,这个公司为什么没有通过,他们需要什么样的人才,我在哪方面还需要改进。可以将面试的过程录屏或者录音,面试结束后整理成文档,定期回顾
  6. 可以在秋招结束12月前签下第一个合适的单位稳住心态,但是不要放弃追求更好的,春招继续求职
  7. 关于抉择,面对多份offer,选择哪个工作可能是一件非常困难的事情。就此提出5点建议:围绕自己的兴趣、评估公司的文化、比较薪资和福利、和前辈交流、work and life
  8. 最后越卷战线越长,0offer状态可能长期存在,不要气馁,稳住心态,都会有光明的未来。共勉。

你可能感兴趣的:(slam,算法,人工智能,机器人)