Momenta SLAM 算法实习生 面试体验。

自学slam已经有大半年了,也找到一个小公司在负责vio优化。但是渐渐觉得自己学得很慢,一直听说momenta非常注重人才培养,技术氛围也很强。所以当momenta给我面试机会的时候我果断去了。

一面

一面基本上是让我自我介绍了以下,因为最近工作在做VIO所以了看了MSCKF以及相关的论文延伸。
Q1: 说一下msckf的过程,介绍一下msckf,与EKF有什么不同?
EKF的状态向量包含feature信息,状态向量维度很大,导致计算量很大,通过上一时刻的state对下一时刻state_hat进行估计。最后计算卡尔曼增益k来纠正state_hat.
msckf的状态向量除了IMUstate以外还有N(滑动窗口)个camstate。在我的理解里面msckf是对状态的误差进行估计。。
我以为他会想我通过论文的顺序来讲,所以我按照论文顺序讲的时候,没讲清楚F矩阵(system matrix)和Phi矩阵(state transition matrix)的关系,这里卡了一下。然后踉踉跄跄的继续往下讲。

Q2:构建残差模型的时候,观测值Z_hat是如何求的?
这问题是我讲到update的时候提出来的。有点蒙说实话。应该是用最小二乘来解的。

Q3: 最小二乘是如何求解的?
由于观测函数与噪声项线性相关,所以观测值也服从高斯分布,当我们有了state 的预测时,可以根据观测函数计算Z_hat,按照14讲的内容把问题转化成求关于P(Z)的最大似然,然后转化成求负对数的最小值,这时候发现跟error有关,转而构建目标函数. 后面就是一阶二阶,GN和LM这些办法了。最后问题会编程HdX=g的问题,解之。。

Q4: 熟悉RAII吗?请你根据RAII设计一个智能指针,并且用代码实现。
说实话我不熟悉,在面试官介绍完之后我写了个智能指针的实现。基本上就是指针作为一个类,private:里面放了一个 static map counter.这个做法有很多问题。所以没做好

Q5:虚函数了解吗?虚函数的作用以及何时用?
虚函数一般是类的成员函数,在每个类实例里面会有一个虚函数表,以及指向该表的虚函数指针,他明确了每个实例应该用哪个虚函数。虚函数可以实现类的泛化(我自己的理解),然后我说了一下为什么析构函数要用虚函数。假设有一个base类,他的析构函数不是虚函数,若子类A继承Base类,A比base有更多的资源,并且没有重载析构函数,那么在A类的实例被释放的时候将会调用Base类的析构函数。内存释放不完全,导致内存泄露。

Q6: 代码阅读题。。我忘了,但是不难

Q7: 最近有关注什么比较前沿的论文吗?
我最近在忙着把msckf_vio改成单目版本。并且融入depth信息。所以没怎么看。(这个回答很致命,因为单目没改好,depth还没融入)

二面

接力赛开始

Q1: 了解VINS吗?
VINS是batch 优化的(批量优化)优化过程会同时调整feature和系统位姿。(没有细讲)

Q2: 你在高德做过什么?

Q3:汽车里程计模型了解吗?不了解的话根据你的想法,大致描述一下。

Q4:函数指针,以及const的用法?

Q5:假设我现在有一张图片,图片上有很多人站在同一个平面上。我能帮你把人用方框框出来,你能计算每个方框的边的被覆盖率吗?
因为是站在同一平面,人不可能飞上天,所以脚底下的线的y轴坐标越小,代表离相机越远,这样就可以判断哪个框覆盖哪一个。然后直接计算覆盖率。。但是计算覆盖率的方法我没想好。。所以凉

二面还有一些问题。不太记得了。
第一轮面试面了大概一个半小时,第二轮面试大约一个小时,然后面试官送走我了。有一点吐槽一下。14:00-16:25期间真的一滴水都没喝。。我能感觉到自己基础不扎实,所以最后结果自然是没有offer,不过没关系。继续努力~还有机会~

部分问题的理解我不确定是否正确,因为解除slam的时间还是挺短的。如果有错误请大佬指正~

你可能感兴趣的:(面试经历)