Re: [北美] Perception in Self-Driving Car面试经验

楼主: teracahou   2017-10-08 08:51:29
刚好最近换工作 也是换到 Autonomonus Driving 相关的position (Software)
也想把面试经验纪录一下~
我是去年底才master毕业 硕士也在做deep learning/computer vision 相关的东西
二月开始在一家startup做一些3D computer vision 相关的东西
做一做发现做不太下去所以就决定找自动车相关的新工作
其实这样工作经验算是不到一年 所以其实我觉得跟new grad面试条件是差不多的
大概投了四家自动车相关的公司 也只有拿到一家的offer:
Waymo: 内推简历直接被拒 这间门槛应该真的很高
Drive.ai:OA -> 人资 -> 电面1 -> 电面2 -> 拒信
景驰: 人资 -> 电面 -> 拒信
DiDi USA:人资 -> 电面 -> Onsite 5 rounds -> 电面 -> offer
另外还有Uber ATG人资有联络要面试 但那时已经有offer就推掉了
目前这个领域工作机会应该算是非常多 但可能大部分都会想要有经验的engineer.
当初有看到有招自动车相关的公司还有: Lyft, AutoX, Nuro, Zoox, Nauto,
NIO, pony, tusimple...etc
面试过程:
我投的职位大部分是 software engineer 偏 perception 加上我的背景也是偏
deep learning 相关 所以面试题目大部分都是已leetcode为主 加上一些
deep learning 的相关知识
drive.ai:
一开始发了一个OA 给了六十分钟 里面什么类型的题目都有 像是统计 ML OS 然后有两题
算法 好像是考DFS相关的
OA 过了之后就有第一轮电面 因为我based在湾区所以可以直接去office面
第一轮只考了一题coding 应该不是leetcode原题 有点忘记题目但主要就是 他会给了
一个encoding 的规则 你要根据那个规则写出一个encoder跟decoder
写到最后有写出来但是觉得有点花太久 但过两天收到第二轮的通知
第二轮就问了很多deep learning的东西 像是怎么算层数 xavier initialization, bn
然后还有问之前的project的细节 最后考了一个LRU cache (leetcode hard)
虽然很高频但我刚好没刷到 但最后还是有想到用 bidirectional linked list
原本以为会有onsite但还是没过 觉得有可能电面两轮是一起考虑 因为感觉第一轮
面的比第二轮差
Jingchi:
这是一家现在非常红的一个自动车新创 都是之前百度无人车高层出来创的
成立两个月就拿到加州上路执照 号称今年底要在中国上路
但我觉得这家让我感觉有点跩 面试前HR一直跟我说 我劝你刷题刷多一点再来,
你coding行吗 我们bar 很高 blablabla. 结果电面 问了三题leetcode
easy - medium 的题 45分钟内bug-free做完 然后面试官也说人资会跟你约
结果过几天被拒
DiDi USA:
其实这家是除了waymo, uber之外最想去的 我觉得didi的优势就是他跟uber一样
商业模式很清楚 一做出来马上就有市场 资金也够大 不会像很多自动车 startup
其实目标就是把技术做出来然后卖掉
面试第一关是人资 然后就第一轮技术面 问了一个非常简单的题
有点像sliding window median 那样 只是改成要维护 mean 跟 variance.
过了之后就是一个五轮onsite:
第一轮 (中文):
面试官是一个之前waymo的小姊姊, 一开始问了前工作的project, 然后考了两题
leetcode 一题easy就是 buy/sell stock 另一题hard alien dictionary.
第二题给提示后做出来
第二轮 (中文):
面试官是一个百度前无人车team的, 直接考题 第一题写quick sort要求inplace
第二题问了一个我觉得很难的题目 就是要维护一个locking tree 一个binary tree
每个node可以是locked or unlocked 但是要lock一个node的条件是那个node 所有的
descendant and ancestor 必须是 unlocked 然后要求你实现 lock, unlock 然后
要求complexity 要 O(lgn). 我那时怎么想都只有O(n) 然后这关面试官还满严厉的
跟他讲想法 他直接回我你不是在说废话吗XD 所以面完之后觉得GG
第三轮 (英文):
这一轮就吃饭关, 面试官其实是中国人但还是跟我讲英文 可能就还是想考一下
沟通能力吧, 这关几乎都在问履历 吃完饭后还是考了两题 leetcode 但都算是简单
一题就给了很多edge 要怎么把它变成一个tree 然后第二题考给一个array 要找出一个数
跟array 上每个数相差平方和最少 (就是median)
另外这关是另外一个team 所以他跟我说他这关不太重要
第四轮 (中文):
面试官是前waymo perception team的负责人 也是didi自动车team现在的主管
所以这关应该是最重要的一关 一开始问了一个非常简单实现binary search
然后第二题就问了一个很实用的问题 要设计一个 pedestrian detector
using lidar data. 然后要求必须要real time 一开始我的想法是直接做3D
semantic segmentation 再用connectted component做detection 但是后来
他跟我说不能用segmentation因为如果人车离很近会没办法分辨
所以他就引导用最简单sliding window + CNN的办法去设计一个detector 然后
因为sliding window, CNN会太慢 所以他就问了系列该怎么加速的问题
像是用integral image 去reject proposals 有些会直接叫你implement提出来的方法
最后设计完之后 会问你的算法要怎么evaluation 然后怎么影响precision recall
等等 算是一个非常有趣的问题 也非常实用 比leetcode好多了
第五轮:
最后一轮就是人资关 一堆behavior questions. 我觉得我的状况比较不一样是他们
都会问你为什么做半年就想换工作 这边我都是说我需要更多mentorship因为现在
公司可能senior人比较少 然后不会去讲现在公司的不好的点 然后诚恳点
我觉得他们都满能接受的
最后一轮面试:
这一轮应该是加面 跟第一轮电面的面试官是同一个人 问了很多履历上的细节
然后最后考一题3D renderer 的design题 也有问一些behavior
总结 (Software):
其实面试下来大多数还是以coding题为主, 然后可能PhD真的会比较多一些, 目前在
DiDi好像我是唯一一个MS, 除非是MS研究就跟有些PhD一样强, 不然MS应该还是
以刷题为主 然后整握好基本的 vision/deep learning知识, 应该就可以应付面试了
欢迎对这领域有兴趣的人站内信联络:)
※ 引述《wWindaZz (Ryan WindaZ)》之铭言:
: 网志好读版
: https://goo.gl/iSwj5Z
: https://ryanwindaz.blogspot.com/2017/10/umich-robotics-06-perception-in-self
: .html
: 今年2017暑假的时候,我去了Q公司实习,实习内容与无人车无关,但是我的兴趣在
: computer vision和perception,所以我一直有在看公司里面有什么我有兴趣的部门,结
: 果幸运的获得了面试无人车部门的机会,所以想记录一下面试过程。我面试的部门在
: research lab下,所以面试内容可能会跟一般部门稍有不同,然后职称是system
: engineer,不是software也不是hardware,其实同部门下还有software engineer,但是
: 做得事情不一样,system engineer是着重在算法部分,可能写python或是matlab就好
: 。Software engineer是负责把system engineer决定要用的算法用C++ implement出来
: ,所以software engineer在面试时问的问题会偏向coding(不过这里仅供参考,因为我没
: 有面试software engineer)。System engineer的问题则会偏向你做过的project,
: project里面用到的数学公式可能会叫你推导。
: Phone Interview
: 当初我以为会直接onsite interview,毕竟我人都在公司了XD,但没想到还是先有一关
: phone interview,我想可能是想先过滤一次,如果不适合就也不用浪费时间onsite
: interview了,其实phone interview是直接打公司内部分机过来面试,面试时间大约
: 45min~60min,一开始先叫我稍微自我介绍一下,还有讲一下目前Intern在做什么?但我实
: 习的部门其实跟无人车一点关系都没有哈哈,所以就只有简单带过。我履历上列了4个
: projects,都是和computer vision或是perception相关的,面试官就叫我一个一个讲一
: 下project内容,这时候他还不会问太多技术上的问题,主要问题都是就他不清楚的地方
: 提问,然后最后问我有没有问题要问,到这边就结束了。其实算是蛮轻松的,只要把自己
: 的履历讲清楚就可以了。
: Onsite Interview
: 因为intern快结束了,所以很有效率的隔一星期马上就onsite interview了,面试时间是
: 我离职前一天和离职当天XD,我离职当天识别证都缴回去了还跑回公司去面试。Onsite
: interview原本要面试4个人,但是有一个人好像出差了所以变成面试3个人。
: 1st Run (~60min)
: 第一天面试了两个人,第一位面试官一样叫我简单自我介绍一下后就直接进入主题,因为
: 他看我履历上有用deep learning做image segmentation,就问我如果他现在有一个简单
: 的场景要辨识,只要区分街道跟不是街道就好(classification problem),我会怎么设计
: neural network,我就开始在白板上画出neural network,并讲解每一层分别用什么还有
: 每一层的output number,不过这边有被他纠正说我用的output number太大了,后来发现
: 他说的没错,因为他要辨别的场景很简单,不需要用到这么大的output number。他接下
: 来就针对deep learning的很多观念提问,这部分我觉得我回答得还可以,最后他问我用
: 什么tool写,我说Caffe,他说他都用Tensorflow,很想知道PyCaffe怎么写的,就叫我在
: 白板上用PyCaffe写出怎么train neural network,我一听到就囧了,一方面是过了有点
: 久,一方面是谁会记得PyCaffe这么多function的名称......,我就只有写pseudo code,
: 然后跟他说我真的忘记那些function名称了,最后他也因为还有meeting,所以就到这边
: 结束了,出来后很懊悔没有去复习PyCaffe......。
: 2nd Run (~70min)
: 隔了一个小时左右又接着第二位面试官,原来他和上一位面试官是同个team,所以他们有
: 分工好分别要问的部分,一样先简单自我介绍后,他先问了我如何从两张不同角度拍的照
: 片中算出depth,我之前没做过这个,但我尝试讲一些我的想法,最后他说没关系可以回
: 去再想想这个问题XD。由于我project有做visual odometry,所以他叫我解释一下流程,
: 然后在白板推导公式,还好我知道这里可能会考(因为前几次经验发现大家很爱问这个),
: 所以我事先有准备。接着他就抛出一个题目:要如何判断一个点在rectangular bounding
: box里?一开始我以为是正的bounding box,我就说可以用座标判断是否在中间,但他说这
: 个bounding box是可以任意旋转的,我现场想了一下后,提出可以用那个点到bounding
: box四点所围出面积来判断,接着就这个问题一直延伸,这真的是考临场反应,因为我之
: 前没在做detection的问题,还好现场有想出来。最后闲聊了一下还发现他知道我mentor
: lol。
: 3rd Run (~75min)
: 隔了一天终于来到最后一轮,他其实就是一开始跟我电面的人,一样简单自我介绍后,又
: 问了我visual odometry的东西,哈哈昨天才刚推导过记忆犹新。接着看到我之前做3D
: voxel semantic segmentation,叫我在白板上画一下流程,把neural network大概画出
: 来,然后跟我讨论了一下3D环境会遇到的问题,例如voxel表示法会有大部分区域都是空
: 的问题,其实花了很多computation在算一些没意义的区域。结束前他说要考一题coding
: problem,听到时我内心大惊!如果有看我上一篇文章就知道我根本没准备刷题
: ......,不过还好题目蛮简单的:output all of the prime numbers from 1 to 100,他
: 问我平常用什么语言,我说python,于是就在白板上边讲解思路边写,其实我的code应该
: 不是100% bug free,但是他理解后就说可以了。之后就边聊天边送我出去,到这边终于
: 解脱了XD
: 最后
: 因为在准备面试前,常常上网都找不到相关领域的面经,所以想把自己的经验分享出去,
: 希望在这个大CS时代下,能帮助到一些跟我一样对computer vision和perception有兴趣
: 的人。
作者: wixter (hmm)   2017-10-08 10:21:00
push
作者: FRAXIS (喔喔)   2017-10-08 10:25:00
quick sort inplace.. 是说不能用 recursion 吗?
楼主: teracahou   2017-10-08 11:06:00
不是 就只是做partion的时候要in place
作者: mmonkeyboyy (great)   2017-10-08 11:07:00
只能用swap方式吧 ?
楼主: teracahou   2017-10-08 11:13:00
作者: wWindaZz (Ryan WindaZ)   2017-10-08 11:25:00
推~希望能越来越多人分享
作者: bluebluelan (新阴流大目录免许皆传)   2017-10-08 12:36:00
景驰只想收top coder 上一间这样的已经GG惹quick sort不需要recursion吧另外还是应该蛮看重过去CV的经验才有办法过履历关惹
作者: FRAXIS (喔喔)   2017-10-08 18:15:00
iterative quicksort in place 很难做的..
作者: mmonkeyboyy (great)   2017-10-08 22:11:00
这个问的应该就是用挑 pivot 移来移去 比p大的不移那个方法吧 最后决定 pivot之后再重排一次 应该还好好多强调刷题高手的真的都GG 其实不只一间两间了XDrecursive还没有遇有人这样问 但 iterative就是要个stack是这样吧@[email protected] 我记得这也可以recursion没想过就是了 对程式没有帮肋我错了 in place XD 那就是慢一点的index就好了
作者: edwardboy26 (Yuho)   2017-10-08 23:54:00
值得推的分享!!
作者: flyawayla (想飛)   2017-10-09 04:28:00
作者: bowin (尽其在我)   2017-10-11 23:24:00
推分享!
作者: erichoco (邱伯)   2017-10-14 13:40:00
猛 推分享

Links booklink

Contact Us: admin [ a t ] ucptt.com