败血症的治疗

注册

 

发新话题 回复该主题

经验分享丨如何准备三维视觉SLAM相关 [复制链接]

1#
北京去哪个医院看白癜风比较好 https://wapyyk.39.net/bj/zhuanke/89ac7.html

找工作这件事总是格外牵动我们的神经。哪家大厂开始招人了,哪位同学拿到了超高薪,哪位同学被拒了...总是能毫无悬念地成为朋友圈的热门话题,再高冷的大神都会忍不住点开、阅读。

秋招马上就到了,我们邀请了一位同学跟大家分享下求职面经(可能是视野范围内写的最用心的一篇),希望能助大家求职一臂之力!

Romewasnotbuiltinaday.以下,enjoy~

本文分为自我介绍、面试准备、如何选择公司三部分,阅读大约需要八分钟。

自我介绍

本人是届的应届毕业生,方向是三维重建相关。求职时投递的岗位一般是算法工程师或者见习研究员。自己平时也比较忙,一般都不怎么写这类的文章。不过此次受深蓝学院邀请,记录下我曾经的求职面试经历,希望能给有相关需求的同学一些帮助。以下将会从我个人经历出发,介绍求职时需要做的准备以及如何挑选自己心仪的公司。

面试准备

对于求职算法类的职位,算法题和本专业知识点是必然会在面试中出现的。网上也有很多教大家如何面试、如何刷题准备的。但是由于每个人的经历以及经验都不太一样,因此切勿对号入座,找到适合自己的方法和节奏就好。

如何准备算法题面试

对于算法题的准备,LeetCode自然是不二之选。LeetCode作为一个在线编程网站,已经从最初的一两百道题增添到了多道题,类型涵盖了链表、树(二叉树以及多叉树)、图、排序、哈希表、贪心、动态规划、数论、搜索(深搜、广搜、二分)、栈、队列、字符串、随机算法等等。以上列出的是在面试中会出现的高频算法类型,因此需要多进行这方面的准备。

刷题的方法也不尽相同。我个人刷题主要分为三个阶段。

第一个阶段是按类型刷题。由于本科毕业之后很久没有刷过题了,这个时候按知识点进行刷题主要是为了复习回顾相关的知识点。比如

链表(LinkList)。头插法和尾插法建表、链表如何判断环以及环出现的位置、链表合并、利用链表进行归并排序、利用链表进行数学运算。

  

树(Tree)。二叉树的先序遍历、后序遍历、中序遍历的递归解法和非递归解法、层次遍历、从先(后)序和中序序列构建二叉树等,都是需要在面试前牢牢掌握的。

  

图论(Graph)。面试过程遇到的会相应少一些,但是也不能忽略。广度优先遍历和深度优先遍历经常出现在和图论相关的问题里。并查集也属于图论问题。除此之外,最小生成树、图的最短路存在的多种解法以及每种解法的时间复杂度和空间复杂度。

  

哈希表(HashTable)。哈希表类型算法一般属于比较简单的类型。一般来说,C++中使用unordered_setT和unordered_mapT就足以应对大部分哈希表的问题了。

  

贪心(Greedy)和动态规划(DynamicProgramming)。这两类放在一起是因为存在一定的相似度。不过贪心算法遇见的比较少,动态规划问题比较主流而且相对来说,基本属于hard级别的题目。对于动态规划算法,可以从easy类型的题目刷起,比如爬楼梯、买卖股票的最佳时间、入室抢劫等入手。其中有些题存在一个系列,可以仔细思考这其中的差异,然后修改自己的状态转移方程来求解问题。除此之外,背包问题、最长公共子串问题也是入门类型的好题。对于有些题目,可以利用滚动数组从O(n^2)的空(时)间复杂度优化到O(n)的时间复杂度。尽管O(n^2)的复杂度对于通过一道题是足够的,但是在面试过程中,如果能给出更优的解法,那么一定会给你的面试加分不少。对于自己已经解出来的题,可以看看Disscuss板块中大家给出的解法,一般最前面获得post数最多的会是大家比较认同的最优解。

  

数论(Math)。这一类统一放在数学问题里。这一类问题可能涉及“位操作(bitmanipulation)”,以及简单的数论(判断素数、快速幂运算等)。easy类型的数学题目一般思路都比较简单直接,medium类型的题目可能就多费时也不一定能想出来,这种题目就需要靠自己的积累总结了。

  

其他类型。以上类型的题目都是出现频率比较高的。其他类型的题目或因频率较低(但也不是没有出现的可能)、或因总体掌握难度不大(比如回溯和二分,频率也高,但是刷过几道经典题之后很容易将解法衍生到其他题目中去)。

  

第二个阶段则是按顺序刷题。这一阶段主要是加深对题目的印象,以及对之前不会做的题进行总结。我个人觉得,刷更多的题不如刷更多遍经典的题,尤其是对于自己不会的题,需要每隔一段时间重复性地做题理解。这一阶段会比之前更快,因为有些题目是自己已经掌握的,对于自己不会的题,我会在markdown中记下来,面试的前几天重点回顾。

第三阶段则是扩展阶段。前两个阶段我基本把LeetCode前道题掌握的差不多了。这个时候我会时不时的做~题之间的一些题目(做更多的题不一定有用,而且这个范围之间的题型面试到的概率相对往后的题目会更大),以及《剑指offer》上的题目。《剑指offer》上面的60多道题都非常经典,大部分题可以在LeetCode上找到对应的题目。不过上面有些题的解法也并非最优的,因此在看的时候可以仔细想想是不是能给出比书上更好的解法。

如何准备三维视觉方向的面试

我个人方向是StructurefromMotion(SfM)。其实和这个方向完全一样的职位需求比较少,但是由于SfM和SLAM是如假包换的异父异母的双胞胎兄弟,在求职时我一般都能选择SLAM相关(这两者基础知识点基本相同)。由于这份面经面向的可能更多的是SLAM方向的同学,我只讲这两者相同部分的知识点,这些知识点主要来源于《计算机视觉中的多视图几何》(MultipleViewGeometryinComputerVision)一书以及数值优化方面。

对于多视图几何,主要有以下方面:

直接线性变换(DirectLinearTransform,DLT)。DLT是求解大多数几何模型的线性代数基础,像Triangulation、Homography、相机姿态的求解等,都可以通过DLT求解出一个初始解。

  

对极几何(EpipolarGeometry)。这一部分包括基本矩阵(FundamentalMatrix)、本质矩阵(EssentialMatrix)的推导。对于基本矩阵,存在基于对极线的几何推导和基于极线簇的代数推导两种方法。对于面试来说,几何推导就已经足够了。不过,如果能够在面试中给出代数推导的方法,一定会让面试官眼前一亮的。除此之外,单应矩阵(Homography)的四点法求解、基本矩阵的八点法(EightPoint)以及七点法(SevenPoint)求解(七点法问到的频率比较低)也是需要掌握的。

  

RANSAC。RANSAC算法的思想很简单,它需要有一个几何模型,然后通过随机采样所需估计的模型的最小点集来计算这个模型,拥有最多内点数的模型是最终解。RANSAC在实际中经常和单应矩阵或是基本矩阵的求解相结合,因为外点是普遍存在的。

  

编辑

为了完整展示公式,以上两部分采取图片的形式展示

除此以外,可能还会衍生出各种各样的问题。不过换汤不换药,如果真正掌握了这几个知识点,应对绝大多数面试应该都没问题。

以上是基础知识点方面。对于硕士及以上的同学面试,如果能有一两个自己参与的与面试方向match的项目或者科研经历的话,会有非常大的帮助。就我个人来说,对三维重建一直都非常感兴趣,硕士期间也一直在从事相关方向的学习研究。其中的一个成果开源之后获得了近个star。在我参与过的面试中(百度IDE组,阿里自动驾驶部门,字节跳动AILab,图森高精地图与定位组,悉见科技),面试官都对我这个项目非常感兴趣并进行了很有意义的交流。因此,对于硕士来说,扎实的基础知识(算法能力和专业知识)是一个基本保障,额外的有价值的项目经历是让面试官青睐的关键。

面试前与临场表现

这一部分可写的不太多,个人觉得多参加几次面试,慢慢就会有感觉了。不过,还是记录上一些自己觉得有用的点吧。

首先,需要对面试自己的部门有一定了解(但也不是必须),至少要知道自己简历被哪个组捞走了。因为可能有的同学在应聘时会有多个职位的选择。面试前的一两天,对于可能涉及的知识点,可以采用快速回顾的方式来复习。比如看到某个知识点,脑子里就快速回想一下思路,不会的话就仔细停下来看,如果觉得自己已经掌握了就可以快速跳过了。对于算法题,传说剑指offer上的面试题被问到的概率非常高,因此可以在面试前多回顾一下这里面的题目(不过也只是传说,我自己就从来没遇到过面试官问这上面的题,多准备才是根本)。

临场面试的时候,首先需要做自我介绍的准备,基本会限定在三分钟左右。这方面根据个人经历在面试前准备好就行,尽量说重点,像自己的个人爱好之类的面试官基本不care。其次是临场发挥。遇到不会或者很难一开始就给出最优解的题,不要放弃思考。可以首先给出一个比较暴力的解法,实在没办法做下去之后可以询问面试官,在面试官给出提示之后一步步优化。需要记住的是,题目不会不可怕,要让面试官看到自己在努力思考。有的公司会把好几场面试放在一块儿,有的公司则可能因为时间关系在不同日期安排好几场面试。对于前者,如果当场面试通过,面试官一般会通知你等待下一场面试;如果是后者,则需要自己问清楚下一场面试是什么时候(有可能自己面试不通过而白白等待,当然好一些的公司面试不通过的话可能会发邮件或者电话通知吧)。如果技术面都通过的话,最后就是HR面了。这一步大家可以网上找一些例子(知乎上),因为和HR姐姐(哥哥?)谈话有可能是雷区最多的一面了,稍有不慎可能就会让HR觉得候选人不适合(比如遇到字节跳动AILab的HR姐姐问怎么看待字节跳动大小周这个问题)。但是也不用太担心,情商正常的话一般不会有什么问题的。

如何选择心仪的公司

如果技术面和HR面都通过的话,HR接下来就会通知你入职相关的信息。对于手握多个offer的同学,该怎么选择适合的公司呢?

前面提到,需要对于面试自己的部门有一定了解(但也不是必须),至少要知道自己简历被哪个组捞走了。这步可以在HR邀请参加面试的时候问清楚。我就曾经遇到过因为参加商汤在北京场的TechDay的活动而接到HR的面试邀请电话(其实当时挺懵的因为我仅仅是因为活动需要投递过简历但并没有求职需求),因为不清楚自己被哪个部门面试了所以在电话里问了面试官的专业方向。自己的问题可以大大方方地向HR提出,毕竟求职是一个双向的过程,公司在选择你的同时也是你在对公司进行选择。两者都觉得合适才是最重要的。

其次是入职的职位和技术方向是不是自己真正喜欢的。对于实习岗位来说,需要明白自己之后真正想从事的专业是什么,然后从实习生培养制度、能提供的项目经历等方面综合考虑,选择适合自己的。有转正需求的可以在入职之初问清部门的是否还有转正的HC,以及转正的话需要有什么准备。这对于之后找一份正式工作也是非常重要的。

最后,强烈推荐几家自己曾入职过的公司。旷视科技的SLAM组氛围很不错,每周都有paperreading,以及贺一家博士镇场。公司节假日都会有小礼物给每位员工,还有吃不完的午后小点心。在图森未来是自己目前最开心以及收获最多的一份实习了。如果是perception或者其他深度学习相关的组,有乃岩每周的paper带讲。高精地图与定位组的赵季大哥是一位非常低调又尽心尽责的好mentor,在赵季大哥的指导下自己在短短的时间内进步飞快。公司还包非常美味的一日三餐。

(本文未经授权,禁止转载)

分享 转发
TOP
发新话题 回复该主题