2019.0*** 商汤科技,见习研究员,一面offer

从下午两点到下午三点,

0,介绍实习时间

Bala Bala

1,简单介绍自己

学校,研究方向,三篇论文(都是相机标定方向),暑假实习,分析vins和kinfu的经历。

2,介绍第一篇论文,以及缺陷讨论

解释PT相机,说明标定对象(算法的output),说明标定输入条件(算法的input),解释了论文的思想。随后就这篇论文的做了简短的讨论。

3,介绍第三篇论文,以及实验精度

解释阵列相机,说明标定对象(算法的output),说明标定输入条件(算法的input)。讲述设计标定物的来龙去脉。分析了不同标定物的差异,提出新的标定物。讨论特征点是否共面对求解矩阵秩的影响。

4,介绍第三篇文章的缺陷

两个缺陷,以及改正措施。面试官提出一种思路。

5,介绍cuda实现kinfu ICP过程

两步,分别是找匹配点,根据匹配点得到约束,等等。

6,思考不用GPU的icp匹配?

用特征点,不是最好答案。面试官解释了一波,最近邻匹配,用kd树。说明了动态点云匹配的思路

7,介绍去年暑期实习的工作

基本上是算法测试,和代码分析工作。UWB技术细节,融合思路。编写一键导航代码。

8,重点交代UWB融合思路,以及UWB细节

解释一波。

9,解释vins fusion的初始化过程

分成四步,每一步说一下,跟vins mono比较。最后两步说的有点啰嗦。

10,最熟悉的编程语言

Matlab很熟。C++一般。

11,用c++做过什么项目

点云融合,大体说一下。非常简单,面试官觉得我代码能力很菜。

12,问几个c++问题,多态,引用和指针区别,类的概念

统统回答不上。。

13,向面试官问一个问题

实际上问了两个,第一个问题,如果面试通过,会做那一块的工作,面试官解释了一波,动态三维重建;第二个问题,自身的不足和改正,面试官说理论还凑合,代码很菜,需要改进。

14,附加问题,解释TSDF地图

本来要解释的,面试官收回这个问题。

面试结束。恰好一个小时,都没有写代码。

 

核心缺陷:没有足够的slam背景下c++开发经验

 

C++知识点拾遗:

 

C++的Class概念:

在C++中,程序员用"类"来描述 "对象", 所谓的"对象"是指现实世界中的一切事物。那么类就可以看做是对相似事物的抽象, 找到这些不同事物间的共同点。抽象是通过特定的实例抽取共同特征以后形成概念的过程。一个对象是现实世界中一个实体的抽象,一个类是一组对象的抽象。封装是将相关的概念组成一个单元,然后通过一个名称来引用它。面向对象封装是将数据和基于数据的操作封装成一个整体对象,对数据的访问或修改只能通过对象对外提供的接口进行。下面是Class中常见名词。类名:遵循一般的命名规则; 字母,数字和下划线组合,不要以数字开头。类成员:类可以没有成员,也可以定义多个成员。成员可以是数据、函数或类型别名。所有的成员都必须在类的内部声明。没有成员的类是空类,空类也占用空间。构造函数:构造函数是一个特殊的、与类同名的成员函数,用于给每个数据成员设置适当的初始值。成员函数:成员函数必须在类内部声明,可以在类内部定义,也可以在类外部定义。如果在类内部定义,就默认是内联函数。析构函数:当对象结束其生命周期,如对象所在的函数已调用完毕时,系统自动执行析构函数。析构函数往往用来做“清理善后” 的工作。Effective C++讨论关于class的三种运算,构造构析赋值。使用this指针。继承:继承可以使得子类具有父类的属性和方法或者重新定义、追加属性和方法等。多态:C++的多态性用一句话概括就是:在基类的函数前加上virtual关键字,在派生类中重写该函数,运行时将会根据对象的实际类型来调用相应的函数。如果对象类型是派生类,就调用派生类的函数;如果对象类型是基类,就调用基类的函数。

 

可以用自己的语言说这些概念:

1,多态,面向对象,接口函数,纯虚函数。比如ceres中定义了最原始的误差类,就是基类base class,这个误差类提供一个误差函数,就是纯虚函数,需要每一个被继承的类自己定义。我们在使用ceres时候,有时候针对重投影误差构建一个误差类,这里涉及到两件事,第一件事是继承,第二件是多态,因为我重新定义了误差函数。比如说处理imu数据,就要构建一个对象描述imu;处理光流法匹配的特征点,就要构建一个对象描述特征点。构建对象,代码更加模块化,各个类独有的变量聚在一起,而不是散乱的堆砌着,方便整个代码的维护和修改。此外,外部数据要实时和类内数据不断交互,所以每个类都配有接口函数,比如捕获imu数据后,利用imu的接口函数,可以得到imu预积分。此外,在kinect fusion中,为了维护TSDF地图和TSDF中每一个元素的权值,自然要设计一个class描述TSDF地图。尽管我是非科班出身,不能用标准的语言描述它们,但是在分析代码的时候,发现c++面向对象的思想无时无刻不发挥着作用。

 

C++是基本工具,虽然不要求掌握太深,但是不知道面向对象这一基本编程思想,不利于代码的实现。

一个人要清楚知道自己长处和短处,才能更好的成长。一方面深化自己的优势,一方面克服短板,夯实基础。

 

面试总结:

2019.0*** 下午两点 商汤科技(一面,口述解释需要锻炼,C++基本功薄弱,用具体的语言去解释这些概念。经过长时间的面试压力,也要努力打节奏,吸引面试官注意。先给出一个轮廓,再不断细化。分点答题,思路清晰)

#商汤科技##面经##内推##实习##春招##算法工程师#
全部评论
商汤只有一面吗?今天下午面的商汤,不过只面了差不多四十分钟
点赞 回复
分享
发布于 2019-03-22 17:05
可能我的部门缺人吧。其实问我c++不会,又没有让我写代码,我以为自己已经凉了,希望你能加油!
点赞 回复
分享
发布于 2019-03-22 18:48
博乐游戏
校招火热招聘中
官网直投
商汤总共几轮技术面呢?
点赞 回复
分享
发布于 2019-03-23 00:29
膜拜,大佬是研三么?同论文做的标定这块,想在三维重建方向拓宽下,大佬有什么建议
点赞 回复
分享
发布于 2019-04-09 19:18
老哥方便留个联系方式吗?我投的也是见习视觉算法工程师,项目聊的也都是slam相关的,一面二面一共面了大概1个小时,本来以为要凉了,今天突然给我电话通知,让我准备hr面
点赞 回复
分享
发布于 2019-04-09 21:47
我一面面了一个半小时。。。这是为啥,而且答的感觉不好。。。
点赞 回复
分享
发布于 2019-06-06 21:07

相关推荐

4 44 评论
分享
牛客网
牛客企业服务