[心得] Google/Meta SWE/MLE面試

軟工

1261241


[TL;DR]
這會提到我怎麼看MLE/SWE 然後面試的內容 然後我覺得面Meta的準備方向
最後有結果的部分,但那也還沒確定所以就看看就好

如果有要面FB/Meta那真的TL;DR可以往下拉到有亮色 [看這就好] 就好
是我相信對大多數人比較有幫助的 剩下大部分是我murmur XD

[前情提要]

在風口上的豬也會飛,運氣不錯比大多數的人早踏進ML這塊
個人認為說ML有點太"空洞",不過我還真的就是做的很空洞... 基本上什麼都做
我自己大學時做的偏optimization 研究所/實習做偏modeling 工作就full stack...
目前看起來MLE還是一個variance很大的一個工作。畢竟ML要真搞出東西並不容易..
有所產出的話,MLE升的速度快到不行(我有朋友MS畢業後5年在FB升到E7的)
但其實大多數相對SWE是比較難有產出的,或是說其實做的事就跟SWE一樣

從畢業在水果店也待了快四年了,最一開始是做inference,基本上就某智能助手的model
丟給我們必須要讓他在你的耳機/錶/手機上跑快快 (well, 一開始是要可以跑XD)
所以我做過的東西挺多的,從跟researcher說你們這model太慢了,直接幫他們修model
或是換換拆拆數學式,到搞Halide/TVM讓kernel跑快快
甚至直接下去跟硬體仔們討論怎麼memory map一個transformer model全都做過

基本上就是做的很廣但卻沒有很深的下海搞research或是design silicon

其實在水果店過的還是挺舒適的,而且做的東西也挺有趣的。
可是世事無常,去年我親人診斷癌症,剛好疫情我就大量remote。我的manager也覺得ok
但我們team從最一開始3人膨脹到現在70人左右,終於輪到我中間多一層manager了XD
所以我跟原manager中間就插了另一個manager,很強硬的說一年最多2週remote
在疫情之前我一年大概都有3個月左右的remote,想想跟我原本的manager講也沒啥意思
我就開始找公司裡其他team

剛好這時候Google有個三月ping過我,那時候我沒面因為我說不考慮relocate到bay
說她手上有些Seattle的缺問我有沒有興趣 我就順水推舟說sure
然後上面說那個FB (Meta?) E7的朋友也說他們有新project大概50個HC問我有沒興趣
我也就順順的跟這兩家開始面試了XD


[大致心態]

我心裡想的優先程度是 內轉到training team ~= Meta >>> Google
因為Google實在是太不確定要做什麼了,我就把Google面試全部往前排當作Meta的練手
內轉到training team的優點是水果股價上漲太多了... golden handcuffs 而且那個team
的manager我很熟 所以傾向滿大的
Meta的優點是要做的那個東西scope很大 非常大 而且他們是很想把東西搞出來所以才有
那麼多HC,另外就是team裡面超過6成都是E6+,基本上不需要擔責任(誤)而且我滿確定
裡面的人都是強的,可以學的東西很多


[General]
我面試都用C++,除了中間一個有用Python。基本上interviewer問我要用什麼語言我都會
說我看題目是什麼來決定我用什麼來寫code,除非他有特別要求我用什麼語言我也行。
所以基本上string/data preprocessing之類的我會用Python,其他大部分都C++...
PS. 我有個室友特愛Java,我也不知道為啥XD
他最近也在面試 用Java吃虧了一輪 可是勸不聽......

[Google]
Google我的面試算中規中矩,但也不是典型的Google面試(幾乎沒leetcode style演算法)
我的Phone screen直接跳過,所以跟recruiter講過一次電話就直接5輪virtual面試

Round 1.
behavioral基本上就那樣,我滿喜歡一個形容就是,Behavioral就是講科幻故事
但是講的故事是硬科幻,基於事實所編造出來的科幻故事LOLLLL

Round 2.
這輪Design是友善光頭大叔,長超像Walter White... 差點問他是不是兼職工程師= =
這大叔是UCB畢業的,在谷歌待了快20年 他說他thesis是做生醫影像處理 所以有搞過很
多GPU有的沒的
那基本上他問的東西就是ML應用在encoding/decoding上面,只是他是一個非常specific
的scenario... 所以不是單單比較PSNR之類的,那這東西最大的問題其實跟我實習時做
ads的query expansion有異曲同工之妙 我認為回答的算ok,討論起來也滿開心的

Round 3.
這輪Coding是一個上交ACM班的小姊姊,他看我resume上面有玩過ICPC就尬聊了10分鐘
然後問了一個極簡單的樹問題,我確認了一次他說 恩 然後大概30秒解決...
我後來有去leetcode稍微找一下,有個那問題的困難版(generalized)但被歸在easy LOL

後來他就問了那個問題的怪延伸,但那問題應該是無最優解,所以後面變得比較像是
design round,但在design過程,討論pros/cons同時有叫我寫些code implementation

Round 4.
這輪Coding是俄羅斯人。我對俄羅斯人沒什麼好印象,因為我自己面試過的俄羅斯人都有
夠變態強,而且我認識的俄羅斯人也都強飛天... 面試官是俄羅斯人通常難度都SSS級
這輪也是我覺得最hardcore的...
他先問了我要用什麼語言,我說C++,後來的問題沒演算法,但就要我寫類似Forward
Iterator的東西。整個流程差不多30分鐘後,他說ok沒問題
然後看還有時間就說 我們來點好玩的,will not be official
後面他問了3題bitwise operation的問題,我還記得以前看農場文都說Google最愛問
腦筋急轉彎,開始工作都一笑置之,放屁都leetcode吧 沒想到竟然被我遇到腦筋急轉彎
總之最後五分鐘最後一題問我怎麼bitwise取負我沒來得及想出來G_G

Round 5.
這輪Coding是個來自youtube的大叔,也是待了10來年
問了一個Streaming的問題,基本上也是leetcode不會出現的東西,因為沒正解
所以跟第三輪一樣有點像是做design但又沒那麼design
討論pros/cons然後要我寫。總之這輪有點像是Round 3+4,因為最後產出來的東西
也是類似Forward Iterator。
他最後說他沒想過有人interview會主動要用C++,這題他是design給Python的
我就恍然大悟 喔~~~然後口頭跟他講一下Python yield之類然後generator的東西
他看起來也挺滿意的就結束了


[Meta]

Meta的面試因為是內推,所以我一開始就已經定好了team
一開始的phone就直接跟director phone screen,基本上就先做team match
然後接下來就5輪virtual onsite (2 coding + 2 design + 1 behavorial)

Round 1.
這輪coding的面試官沒很強,不然就是對C++沒很熟。
問的第一個問題leetcode上肯定找得到或是大學演算法課一定提過的那種經典問題。
我一開始寫step by step聽到她問我某一行是不是該放進去for迴圈就知道不妙了XD
總之後來我寫的code沒給最優解,給了個複雜度一樣,但是space比較差的作法
但是space比較差的那種寫法比較清晰易懂,然後我再口頭跟他講這東西可以怎麼把
space壓到O(1)
這場基本上整個interview就我在drive的,想辦法讓他懂code,我再問他需不需要我做
優化,他問的兩個問題我都寫比較簡單的做法 但他都要看著code想 然後再跟我說
沒關係 It's good.

Round 2.
這輪的面試官是個UCB出來Kurt Keutzer的學生。所以面試前我有特別去讀這個人的
paper大概知道他做什麼東西還有主要研究方向。然後另外自己去多讀一些相關paper

這輪他基本上是問Convolution/Padding/Inner Product相關的問題,他也有問我要用
Python還是C++ 雖然用Python因為indexing的關係會比較簡單,但我還是選了C++,後面
會提為什麼XD

基本上coding的部分也是不到15分鐘就結束了,但是我留的小心機就在這時發揮作用了XD
他看我用C++寫就開始問有沒有可以優化的部分。我就開始把一些memory localization或
像是for的順序,tiling之類的跟他討論,他的研究就Parallel/Distributed computing
所以也是聊東聊西大家都很開心 他也就very good very good XD

Round 3.
Behavorial 沒什麼 講故事

Round 4.
這輪是個俄羅斯人G_G
這輪Design完全毀掉 他要我Design一個CI/CD System. 這輪我面的過程我就知道毀了。
我跟他的溝通完全沒有辦法scope down,我完全不知道他想要我做怎樣的CI,他也講的
很模糊,感覺就是不想跟我講他想要什麼要我去通靈他要什麼,大概直到最後才稍微
有碰到一點點邊要CI能夠handle不同precision下的regression要如何處理。我這整個
時間裡面從hardware fleet/networking/deployment/testing/data generation都碰
他對testing跟data generation"貌似有興趣" 尤其是data generation的部分
可是我一直沒辦法scope下來,所以到最後我其實也不太知道他是要問什麼orz

這輪很有趣的是有一個人Shadow,然後這個人我聽過,是個愛丁堡大學的教授lol
我還讀過他的paper XD 可是我看他的page跟linkedin完全沒提到他來FB了XD

Round 5.
這輪還是個俄羅斯人orz
但還好這輪Design算是愉快的結束。基本上就是一開始是討論要如何Design IR,然後
有新的kernel要怎樣才能做high-performance implementation。
然後還有針對不同的ML Framework我們的IR要注意什麼樣的東西
ML Framework的IR比起一般像是LLVM IR有什麼可以擴展或是更restrictive來讓我們
更好針對ML problem做optimization。
整個過程我覺得well scoped然後每個sub problem都還算是有in depth的討論,還行


[後話]
面試的時候其實公司事情很忙,所以也沒太多時間準備... 而且原本安排好面試完回
台灣,但是剛好我親人病危,就提早回台灣,Google面試跟Meta的前三輪都是在防疫
旅館面。Meta最後兩輪在自主管理時,但隔天是告別式 所以整個也是微微煩躁
但可能冥冥之中就是這樣所以我面試的過程沒什麼leetcode東西,主要是design方面
平常有好好上班 RFC跟doc好好寫都還算能好好回答的問題

[看這就好]
個人認為谷歌這種面試滿難準備的,但是Meta我後來一問才知道 我毀掉的那個第四輪
其實在Meta裡面就是負責Pytorch CI/CD的部分,所以他在意的沒意外應該同時要是
numerical還有performance,然後像是unit test的部分對於不同precision還有hardware
都應該要有所著墨,畢竟他的team關心的就是kernel implementation。仔細想想我那
時候有提到Conv跟MatMul之間的關聯然後他就有問test data還有unit test的design跟
decision好像就有那麼點影子了。算我腦子短路GG
Meta在面試的時候會有個頁面是說要面試你的人會是哪些人,我當初有查Round 4面我的
那個人可是Linkedin上沒太多資訊,只知道他在NV/Intel待過,不像Round 2那個人那麼
多資訊,如果我當初能像Round 2那個一樣多肉搜(?)一些資訊或許會好很多orz
要面Meta的人我覺得應該要好好掌握這點,多瞭解面試你的人的背景,其實滿容易抓到他
可能會問的問題,會問的Design問題的方向,畢竟Design問題都是open的,那會要scope
down的部分通常就是他們熟悉的部分,畢竟這樣他們能問的更多,評估會更精準一點。

[暫時結果]
反正我終極目標是要越remote越好,畢竟我想多花點時間陪家人,但又不是純當社畜
做些自己沒興趣的工作
所以我跟HM開門見山第一句都是問他能接受多remote XD
我直接先把那些不太喜歡remote的HM排除不考慮了

谷歌team match了幾個team,有其中2個我覺得都不錯。兩個都算是"full stack" ML.
一個是GPU,可是他們同時又硬又軟。他舉了一個例子是他們有一個second-order method
可是發現GPU perf不好,那有兩種解法,一個是數學上改變求導順序,另一種就是修改
GPU compiler的部分讓他utilization可以上去。他說我想做numerical optimization
的話他有很多問題可以讓我做,想做compiler也行,或是他們也有team member在做TF的
API這樣可以expose一些GPU特有的hint來做優化
另一個是MLPerf相關,像是train BERT in 30 secs HM說從numerical optimization到
TF/JAX然後XLA往下到TPU或是類似HugeCTR那種Model Parallelism都是可以explore的。
我想做什麼他基本上都會有東西讓我做

Meta我後來得知我的Round 4直接吃了一個Strong no hire XD 而且在Debrief的時候R4
的面試官無法理解怎麼會有人這麼笨lol 其他輪都是Strong Hire 最後R5的面試官跟
director力保之下的最後結果就本來target E6可是給了個E5


至於薪水... 還在談XD 畢竟水果這幾年漲得兇,我現在unvest還很多
所以我是直接拿W2跟unvest去談,沒拿offer compete

谷歌HR直接跟我說我的W2他們有點難達成 我是說沒關係,你只要給我remote多點
我錢少些沒關係。HR說他會跟那些HM說。
臉書的話他們直接給了我E5的頂,可是還是比我現在少XD 但是有說要突破band的話可以
但是要VP approval。說Base可能沒辦法動,但可以給到E6的RSU
然後我那E7朋友說沒關係,他們要做的東西已經算explore完了 我進去沒意外應該可以
直接收割,我很在意level的話以那東西的impact升E6沒啥問題

其實還有Tiktok是面試in process,HR跟我說他們no budget limit。但是最吸引我的是
他們offer說可以在亞洲時區(新加坡/中國)工作... 這應該比任何comp都還吸引我
總之一切還滿未定的

那就預祝自己Tiktok面試順利 還有各位找工作的朋友們面試順利了
當然還有大家平平安安疫情快點結束

--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 114.32.9.248 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/Soft_Job/M.1637313854.A.D19.html
niobafrog1樓強者先推 文長正在慢慢看~ 11/19 17:26
niobafrog2樓train BERT in 30 secs 11/19 17:33
niobafrog3樓這個原Po有理解怎麼做的嗎? 有夠好奇 11/19 17:33
doranako4樓好強,謝謝分享 11/19 17:37
min866155樓強者推推 11/19 17:38
Findagreen6樓這篇文強到不知道怎麼稱讚… 謝謝分享 11/19 17:40
duck107047樓跪著看完 好強… 11/19 17:46
viper97098樓推分享~這個真大佬,只能跪了orz 11/19 17:46
aassdd9269樓好強… 11/19 17:47
inte629l10樓強 感謝分享! 11/19 17:49
eju90167711樓 11/19 17:51
vi00024612樓只能推了 11/19 17:56
yungyuan13樓好強.. 11/19 18:11
jackkao114樓好強.... 11/19 18:19
hduek15315樓通篇看不懂 強者 11/19 18:38
taffy128s16樓是鬼 11/19 18:43
DrTech17樓除了佩服強者以外,還很佩服打字,中英切換超辛苦的 11/19 18:50
caeserhaha18樓太強了..... 11/19 18:53
koka81319樓眼界不一樣,覺得好強 11/19 18:55
aa0669720樓碩畢四年拿E5~E6好猛 11/19 19:02
humanfly21樓高手感謝分享 11/19 19:24
Lhmstu22樓推,謝分享 11/19 19:29
lukelove23樓 11/19 19:33
Mike110924樓 11/19 19:36
alan2327385025樓這些技術如果不先在業界學個幾年的話自學學得來嗎? 11/19 19:46
sumsum26樓強者推 謝謝分享,祝順利 11/19 20:10
wulouise27樓是不是人家都聽過你所以不太問leetcode了xd 11/19 20:12
TWkobe28樓好猛 推推 11/19 20:29
mangocat199929樓推,一堆名詞都看不懂 11/19 20:38
weifan30樓推強者 感謝分享 11/19 20:48
更多心得
[心得] 2021海內外數據科學、資料分析求職心得
[心得] Agoda Software Engineer (Backend)
[心得] 財金/旅遊業5年/轉職JAVA(文長)
[心得] FinMind 大數據專案X架構解析
[心得] Glints 不推薦
[心得] 產品PM如何從需求海淘金
[心得] 新創公司給人的綺麗幻想與殘酷現實
[心得] 近期面試,簡單分享