之前在板上潛水已久,去年有幸拿到幾個offer,現在來回饋一下找工作的心得。
[背景]
學歷:112學士、CMU碩士,皆非CS本科系
實習:因為疫情回台實習,只有台灣外商經驗
工作:約一年的後端經驗
[前言 aka很長的murmur,完全無重點可略過]
在CMU這間出了名的作業大學,還貪心選了好幾門硬課,不意外一開學就被課業轟炸
每天熬夜到四五點還寫不完,一週七天都在無止盡的死線摧殘下苟活
導致完全無法抽空改履歷,更別說投職缺了
開學一個多月了,我卻一題都沒刷,後來是聽到室友已經要面試了
才下定決心海投一波,那時已經是九月最後幾天了,我才丟出第一封履歷
比起其他暑假就開始投的人我真的是慢了很多
我是五月才畢業,所以似乎也沒有到非常緊急,畢竟還有春招
但我還是抱著破釜沉舟的心,一股腦申請下去了
只能說希望看到這篇文的人有空好好準備
不要像我一樣,完全 沒有 準備...像個靶子被...射死
我好像是趕鴨子上架般地找工作,其實後來反省了一下應該要選輕鬆而且少一點課
或乾脆就下學期再找就好,54學分而且幾乎都CS的課,真的太多了...
(CMU學分制有點怪,大約要除以3才是其他學校的學分)
整個學期都過得很痛苦,OA常常是到死線最後一天的凌晨兩三點才在做
因為白天有課、晚上有作業deadline、反而凌晨才是最能自由運用的時間
但其實那個時間都在用精神力硬撐,可能也大幅影響表現,所以感覺OA都發揮很差
不過這樣找下來也發現海投還是有一定的機會被看到,差不多每八間會收到一次OA
找工作這兩三個月真的是跌跌撞撞,中間一度有狀態很差的時期
OA怎麼寫怎麼炸,大概有一個月的時間每個OA都寫爆
最慘的是有次本來感覺時間不夠只好寫brute force解,結果兩個test case沒過
後來開始拼binray search解,但最後來不及要換回本來答案的時候
不知道哪裡出了問題,一直無法compile導致那題直接全爆 = =
總之就是各種不順,平常寫得出來但當下就會當機,覺得自己變好笨
那個月唯一沒有炸掉的OA是一間FAANG,最後也有進到onsite
其他好幾個重要的OA,包含少數請人內推的公司也都這樣浪費掉了
除了做題狀態差,學校事情太多也是搞得生活一團糟,連約面試時間都可以一直雷自己
期中考和期末考各分別撞到一間onsite,一天內面試4-5小時再去考試2-3小時
能活著真的是奇蹟...
打到這邊突然覺得又回憶起上學期的感覺
當時真的是有夠鬱悶、負能量滿滿XD
[履歷]
履歷的準備倒是沒花太多時間,拿去年找實習的版本更新資訊
大致上就學歷、skills、工作經驗、projects
給學校的career advisor看過她覺得很不錯,就直接一路投下去了
不過後來發現她好像對大家都說很不錯...XD
[刷題]
過去自學資料結構加上找實習刷了200題,
過一年沒碰了,連基本題都忘得一乾二淨
主要策略是把之前刷過的題目複習好,之後兩三個月陸陸續續刷了近100題新的
這些新的題目大多是針對公司的高頻題
我蠻討厭刷題,身邊剛好也都是不傾向瘋狂刷題的人
認識最多大概就是刷到400多去臉書,但也有只刷個100多去蘋果的
或是不到100就去推特的朋友,所以並不追求500題之類的熟練度
非本科系的人光是要把基本的資料結構和演算法重新複習一遍就需要一陣子
再加上時間寶貴,我是只要一卡住就直接看解法,不會跟他拼拳
當然這樣會不夠熟,所以就是想辦法多看幾遍
大部分的面試我都來不及好好準備,就是硬著頭皮上了
第一間onsite的時候程度約莫100題吧
但以下的準備程度是指十二月的第三個onsite時的狀況,差不多200題
資料結構方面:
linked list, hash map, stack, queue, heap, tree, graph 弄到蠻熟的
實作細節到基本變化題都有準備到
演算法方面:
只有binary search, common sorting algos, DFS/BFS, greedy, backtracking
可以算是有準備
其他像是shortest path, minimum spanning tree, dynamic programming
或是各種進階sorting(radix, bucket, etc.)我都是半放棄狀態
尤其是DP要維持手感真的要持續練習,我大概放著兩週就無感了
所以在沒有多於時間之下只好先略過不準備這些
我花了較多精力集中在各種tree的變化題以及monotonic stack
前者是因為覺得tree的變化題比graph更tricky(至少以medium題來說啦)
所以就加強練習
後者則是因為發現對不少FANNG高頻題來說是重要觀念
蠻推薦大家多練習
補充一下,半放棄的意思是沒寫題目,這些演算法都學過但忘了差不多
更別題實作細節,所以複習時都是觀念瀏覽完,頂多做一兩題就跳過
這也代表除非遇到超高頻題或最基本題,不然穩死哈哈
但我的策略就是只要有複習到的部分都盡量相當紮實
如果面試真的碰到冷門題目就認了,不過基本觀念穩住至少能解決大部分題型
延伸變化或許也能夠靠觀念推出來
雖然跳過部分題型蠻可怕的,但還是會建議時間不夠的人這樣做
就像GRE要果斷跳過長篇閱讀一樣(?)
忘記在哪看了個統計,依稀記得最愛考DP的G家也只有10%機率遇到
臉書可能2-3%之類的,可是DFS出現的機率卻是15%
所以面試前prioritize準備的題型挺重要的,雖然我一開始也是盲目亂刷哈哈哈
-
本來覺得好像也該提一下BQ準備,但老實說我可以算是毫無準備...
在時間不足下可能也是prioritize的一種(?)
[統計]
應徵:15X(大概4-5個內推,其他就是linkedin無腦海投)
收到OA:18
拿到面試:12(其中4間因為有offer了就沒面完)
進到onsite:4(兩間FANNG、一間crypto unicorn、一間hedge fund)
[心得]
- 大公司(FANNG之類的)
採比較制式的coding interview
去參加過幾個info session他們也明講就是考刷題、不問履歷、不考system design
所以在準備刷題時基本上就是為了這些大公司
另外個人經驗是也蠻常考string processing和class design
作為使用Java刷題的人,前者有點吃虧,後者倒是不錯
- 新創
上述的coding interview加上多問一些履歷以及你對公司的瞭解和興趣
有些會考system design,也有遇過pair programming的面試法
感覺比較偏好有些實作經驗的人
舉例來說,有間onsite是要現場用Dropwizard搭配JDBI實作REST API
這兩個framework我都沒聽過,面試官是直接把初始檔案傳來後要我分享螢幕開始實作
如果遇到問題只能查官方文件
好險我剛好蠻熟Spring Boot也略懂JDBC,所以還算順利寫完
後來還因為提早20分鐘完成,被臨時加了兩題
其中包含要寫DDL做DB migration,個人感覺是非常實務的考題
面試當下因為挺順利的所以無感,但後來想想這樣考試壓力蠻大的
畢竟完全無法準備,真的是看過去累積的經驗
而且超赤裸的,像是我curl指令不到很熟,因為平常都用postman
在測試endpoint時還要查怎麼打POST request、怎麼帶header/payload之類的XD
不過語法畢竟是小問題,如果以前沒寫過REST API,應該直接現場掛掉吧...
這種考法就不會出現在大公司
- Hedge fund
他們問題比較雜,並且會期待你瞭解CS基礎知識,只會刷題應該是很難上
尤其是OS, networking, distributed systems, database systems
要準備起來算是沒有範圍,但我面下來的感覺是他們也沒有要把你問倒
比較像是希望在討論過程中知道你知識的深度廣度
我遇到的問題除了基礎知識(TCP/UDP差異)以外
大部分進階問題都是從過去經驗延伸而來
所以如果在履歷上澎風在這邊會被電爆
跟一個當過面試官的CMU校友聊過,他之前當過15410的大助教
履歷上如果有特別標註修過OS課程,他都會聊聊相關知識
我的例子是其中有一輪被問了對學校哪門課有興趣,我答distributed systems
接下來就是半個小時的深入瞭解...LOL
另外coding的部分網路上都說很難,但我自己是覺得差不多medium左右
也可能因為我不是面quant職位,就沒有超難吧
[後記]
其實學期開始前我完全不知道結果會怎樣,畢竟我清楚自己的準備十分不足
開學之前沒有好好刷題和準備履歷
所以寫這篇文章也是希望鼓勵未來跟我差不多處境的人,只要開始努力都不嫌晚
從第一間phone screen到最後一間onsite,其實也就短短兩個月而已
但這中間發生的種種真的是不敢想像怎麼度過的
學期到尾聲的時候真的很怕犧牲了課業成績、休閒娛樂、睡眠時間
要是全滅換來一場空,下學期又要重頭開始,每天想到就覺得壓力山大
幸好最後有了好的結果,下學期能夠專心上課
不用找工作的爽感遠大於有工作的爽感啊!
最後感謝幫我內推的人、一路上鼓勵支持我的人、也感謝我自己。