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