前言
求職階段,我參考了很多心得文,覺得受益良多,因此希望能回饋還在努力找工作的人們,讓大家求職時能更充分地準備。
以我的經驗來說,準備求職的時間相當長(今年2月~6月),也感覺疫情期間找工作是比較困難的,一路上跌跌撞撞,也有壓力山大的時候,幸運地在朋友的鼓勵和幫助下,最後才堅持下來,找到一份理想的工作。
希望還在求職的大家別氣餒,努力堅持下去,好工作就是你們的。
個人背景
112學碩,大學輔CS,碩班做機器學習,研究興趣是NLP和推薦系統。過去沒有軟體公司的實習經驗,也沒有太多競賽相關經驗,履歷只放碩論和課程期末專題。
因為一些個人因素,直到今年1月底才畢業。之後我花大概一個多月的時間,好好地休息和放假,思考我未來要做什麼,同時整理過去的專案和履歷內容。
3月時主要在刷題,並根據目標職缺來複習對應的學科。4、5月開始投履歷,面試階段時,Leetcode累積刷150~230題,以medium為主。
Synology
應徵職缺:Product Developer
請朋友內推,面試的部門由HR分配,是我第一家面試的公司,skype線上面試。
第一關是工程師,主要是聊聊履歷內容,問題會很細節,需要對履歷內容足夠熟悉才行。例如我有做一個SQL的專案,就被問當時怎麼設計schema、為什麼這樣設計、有沒有想過當資料量大時哪裡會有效能問題、那你會怎麼解決。
另外,也問了一些OS的經典題目,例如process和thread是什麼、inter-process communication等。最後,考了一題實作linked list的程式題。
因為我刷題都用python練習,被問到C++很細節的問題,因為不熟直接GG。整體準備不夠充分,在面完第一位工程師以後,直接被HR通知面試結束,等待下一步寄信通知。
# 結果:一週後收到感謝函
玩美移動
應徵職缺:Machine Learning Engineer
透過104主動找我面試的公司,進公司先做python測驗、性向測驗和英文測驗,測驗通關後跟主管面談。
面試前需要先填個人資料表,包含個人照片、身分證號、戶籍地址、家裡電話、父母是誰幾歲做什麼等。我覺得有點侵犯個人隱私,所以有些內容沒填,主管好像不會很在意有留白,給大家參考。
Python測驗為20題左右的選擇題,考題頗有鑑別力,包含python語法 (e.g. map, filter)、numpy語法 (e.g. broadcast, shape, newaxis)和機器學習(e.g. CNN, pooling, batch normalization, gradient descent)。
性向測驗和英文測驗時間都很短,建議一開始就用最快的速度寫完。
面談時,主管先介紹公司產品和商業模式,之後問我影像處理相關的經驗和細節,最後考一題情境題,問要怎麼做微表情的情緒分類,可能可以從資料收集、標註、前處理、模型設計等多方面開始考量。
# 結果:無聲卡
MixerBox
應徵職缺:Engineer Trainee Program
寄email投遞履歷,隔天就收到HackerRank線上測驗邀請,三題難度在easy到medium之間。測驗完成後隔週,收到skype線上面試邀請,整體面試流程約1個半月,因為被告知考題需要保密,以下只提及準備方向。
======
一面技術測驗:(總時長2小時~2.5小時)
與一位工程師面試1.5小時,不用自我介紹,直接開始考技術,使用HackerRank的共編。
總共考了兩個大題,每大題含基本題+2題follow up,難度大概是medium,考題方向是array和graph(bfs, dfs)。
技術問答結束後,30分鐘聽HR介紹公司和團隊,我這邊分享一些內容,讓大家能更認識MixerBox。
公司的商業模式主要仰賴投放廣告和APP內購物,廣告大多在日本和美國投放,台灣因為市場小廣告利潤不多,所以沒有放廣告,常做為演算法A/B test的地區。
公司有主要的三個team,MixerBox、FreeTV和研發導向的lab,當lab裡面有比較成熟的項目就會轉成一個新的team。而MixerBox最近發展方向是推廣podcast,內容需要去各個網站爬蟲抓。
另外,為了提高營運利潤,公司近期也投入遊戲開發,目前正積極招募Unity工程師。
======
二面技術測驗:(總時長2小時)
與兩位工程師面試,每位工程師有一小時,各自考兩題程式題,難度大概是medium到hard,考題方向包含matrix(bfs)、monotonic stack、monotonic queue、3sum變形、intervals、balanced tree等。
整體難度頗高,我大多是跟面試官討論後,得到提示才慢慢解出來,面試官人也很好,會提點思考方向是不是對的。
最後,可能是技術關解題實力不夠,原本是投backend工程師,後來被通知改面Unity工程師,問有沒有興趣繼續。
=====
三面團隊成員:(總時長1小時)
與人資和工程師主管聊天,這關可能是最難的,會問一些難以回答的問題。
例如問你全世界最喜歡哪三間軟體公司?為什麼?那如果都拿到offer會怎麼選擇?比較注重公司名氣、職缺內容或薪水?職缺內容透過面試了解可能還是很抽象,這樣會怎麼抉擇?
平常怎麼自主學習?(問有沒有用刷題網站練習的習慣) 有沒有比較不擅長的領域?比較喜歡做大project或小project?在團隊中喜歡聽指令或是擔任領導者?
最後分享一些Unity團隊的資訊,日常專案的人員組成是一位工程師和一位行銷人員,開發一項小遊戲。如果有開發不錯的項目,打算加速這款遊戲的開發,才會多讓幾位工程師共同開發。
儘管沒能拿到offer,我覺得是新鮮人友善的公司,面試要求只看資料結構和演算法,刷題數可能要200 up比較穩。面試流程也相當舒適,面試前會提點準備方向,該怎麼聊履歷上的個人經歷,才比較符合公司文化,面試後大約一週就能知道結果,推薦有興趣的人去試試看。
# 結果:一週後收到感謝函
趨勢科技
應徵職缺:Software Developer、Software Engineer in Test
透過104投遞履歷,隔週後收到Codility線上測驗邀請,三題難度在easy和medium之間。之後安排到公司面試,由HR自動配對能面試的職缺。
進公司以後,我先做QA職缺的Codility測驗,我猜這份考題是針對Senior缺,範圍包含Windows、Android和IOS的debug工具、瀏覽器、網頁前後端,以及三題系統設計簡答題。
考完的感覺,我是誰?我在哪?你們484找錯人了?
接下來,迎來兩輪小組面談。
第一輪是面試QA,請我聊聊過去的經歷,並問了一題情境題,請問要如何測試一個log in的網頁?另外也問我對QA的角色和想像是什麼,覺得QA都在做些什麼事情?
第二輪面試有兩個團隊,也是先請我介紹過去的經歷,並問了一些OS相關問題。包含解釋race condition和deadlock、怎麼去實作critical section、mutex和semaphore的差異、process和thread的差異、inter process communication有碰過哪些等。
有一題比較印象深刻,如果程式碼的行數到10000行以上,要如何debug?
整體而言,我覺得面試官們知道新鮮人的實力不怎樣,主要還是看對工作的熱忱和態度。最後,人資會詢問你對各組的排序。
# 結果:兩週後主動寄信follow up,收到感謝函
Appier
應徵職缺:Machine Learning Scientist
請朋友幫忙內推,1週後收到線上面試邀請。
一面,與兩位工程師聊天,總時長1個半小時,考題分三個部分。
第一部分是簡單機器學習概念,例如overfit、imbalance data、time series data等。
第二部分是情境題,未來工作會遇到的機器學習問題,但因為我的研究背景跟題目不太搭,回答得沒有很好,後來變成介紹自己碩論的內容。
第三部分是演算法題,考一題難度meidum的DP。
面試當下,我有問面試官自己的表現如何,有得到正面的回饋,但後來就沒後續了。XD
# 結果:無聲卡
Taiwan AILabs
應徵職缺:Machine Learning Scientist
透過LinkedIn投遞履歷,2天內收到HR電話,提及未來可能會做機器翻譯相關的工作,並跟我確認面試日期。
三個小時的線上面試,前兩關考機器學習,最後一關考演算法。
第一位是speech team的ML工程師,先跟我聊聊碩論題目,後來主要在討論文字處理的經驗。
第二位是news team的ML工程師,大多是技術問答,包含碩論用到的技術、如何選擇metric、專案用過的模型等,題型相當活,面試官想到什麼問什麼的感覺。
此外,也有考情境題,例如要在ptt八卦版中蒐集特定人物的相關文章,會怎麼開始?有沒有辦法找出帶風向的網軍們?面試官理解力好反應也快,跟他討論相當有趣XD
第三位是系統工程師,問有沒有開發程式、使用過docker或k8s的經驗、知不知道SQL和NoSQL的差異等,最後考兩題leetcode,與matrix相關,難度medium。
個人感覺面試表現還行,可能過去經歷和工作內容不太吻合,所以沒能拿到工作機會。
# 結果:兩週後主動寄信follow up,HR回需要更多時間來決定,隔週收到感謝函
AICS
應徵職缺:Software Engineer — Big Data
透過官網投遞履歷,被HR要求補寄在校成績單,1週後收到Codiity線上測驗邀請,難度easy到medium。測驗完3週後,收到Microsoft Teams線上面試邀請,面試流程大約1個月。
=====
一面 TS:(總時長1小時)
與工程師主管聊天,考兩題程式,難度easy和medium,基本上主管都會主動與我互動並給予提示,讓我慢慢想出哪裡可以繼續優化,感覺得到他的友善和良好的溝通能力。
=====
二面 TS:(總時長1小時)
與工程師主管聊天,考一題程式,難度medium。這次面試官主要放著我自己慢慢想,幸好我最後有提出解法,他也有詢問我可以再怎麼優化。
=====
三面 Full Loop:(總時長5小時,含中午休息1小時)
總共有四輪,每一輪有一位面試官,大多是前半小時聊天,後半小時考一題程式和Q&A。
第一輪,面試官是ML背景,請我自我介紹,聊過去經歷的專案,大多擔任什麼角色,最驕傲的專案是什麼等。程式題考matrix,難度medium。
第二輪,面試官是系統背景,同樣是聊過去經歷的專案,會問一些系統面的設計問題。另外還問我,如果要設計一個系統,裡面有很多consumer和provider,要怎麼設計比較高效率?還有問在小組合作時,有沒有遇到摩擦或衝突的經驗,會怎麼處理?程式題難度medium偏easy。
第三輪,面試官應該是ML背景,問我碩論的創新點是什麼,有什麼樣的應用價值,能否舉例說明。問我自己的強項和弱點,也問我過去失敗的經驗,學到了什麼。程式題考DP,難度medium。
第四輪,原本安排是HR面試,結果看到面試官才發現,竟然是黃泰一博士。簡單聊聊天以後,說要看看我寫程式如何,如果題目有看過就要換一題,總共考了一題medium和一題hard。
最後很可惜只留1分鐘問問題時間,但黃博士也跟我說,如果有拿到offer,願意再安排30分鐘陪我聊聊。
=====
加面:(共3次,與未來主管聊1小時、與HR聊30分鐘+30分鐘)
三面結束後,經過大概2個工作天,我就收到專案主管的聊天邀請,過程中拿到口頭offer,因此主要在聊專案目前的進度,以及之後的工作內容。
另外還有兩次HR面談,第一次主要聊聊個人特質、職涯規劃、期待薪資和詢問競爭對手公司,第二次是講解薪資福利等。
# 結果:offer get
Yahoo
應徵職缺:Software Engineer
透過官網投遞履歷,請朋友幫忙內推,大概1個月後收到線上面試邀請,面試流程約2週。
=====
一面 HM Phone Screen:(總時長1小時)
與未來主管面試,聽主管講解團隊在做什麼,主要就是聊聊工作內容,看看我有沒有興趣。最後,考了兩題難度easy的程式題,感覺只是看你會不會寫程式。XD
=====
二面 TA Phone Screen:(總時長45分鐘)
與HR面談,第一階段先確認我對職缺的認知是否正確,第二階段請我自我介紹,並針對我的履歷來問Behavior Questions,第三階段問我對第一份工作的期待、如何選擇、以及期望薪資。
值得一提的是,因為近期Yahoo被Apollo收購,所以我特地問問內部員工對這件事的想法。接收到的資訊是,員工大多正面看待此事,組織由上到下採取AMA (Ask Me Anything),讓主管公開透明傳達資訊以消除員工焦慮感。
=====
三面 Panel Interview:(總時長3小時)
和未來的團隊成員聊天,總共四個人,兩位工程主管和兩位工程師。
據說會根據履歷內容調整問題,我遇到的情況是,先考了兩題難度medium的Leetcode,在top interview清單都能找到,也有開放式的follow up問題。
再來,兩題系統設計題。
第一題是給一段程式碼,問覺得哪裡有問題,會怎麼修改程式設計。我先解決簡單的bug以後,還針對未來有可能變動的程式碼,設計要如何refactor,並解釋有用到的design pattern。
第二題是設計一個選課系統,把整體的系統架構和流程列出來,還有會使用到的工具,資料欄位怎麼設計等。
三面結束後的隔週,接到HR電話拿到口頭offer,並告知需要等待總部批准正式offer,還需要約2~3週的時間。
# 結果:offer get
Kronos
應徵職缺:Quantitative Analyst
透過官網投遞職缺,需要附大學成績單,3天後收到Codility線上測驗邀請,限定用C++或Python,測驗完隔天收到線上面試邀請,面試流程2週。
=====
一面:(總時長2小時)
總共有兩輪,每一輪有兩位面試官。
第一輪是統計關,同樣先聊聊過去的經歷,面試官會問跟交易相關的經驗,像我自己比較沒接觸這方面,所以我改為分享過去處理時間序列資料的經驗。
考題包含線性迴歸模型的推導、怎麼算股票與大盤走勢的相關性、擲硬幣的機率問題等。
第二輪是程式關,考deque的實作,因為我用python作答,還另外考一些decorator的問題。
兩輪的面試官們都相當健談,很樂意與我分享工作日常。另外透過面談我才了解,因為公司做高頻交易,所以深度學習都不會碰到,機器學習感覺也偏少,主要用統計模型為主。
=====
二面:(總時長3小時)
總共三輪,分別與CEO、CTO和HR會談一小時。
第一輪,與CEO的面試是全英文,先聽完他自我介紹以後,他問我對Kronos感興趣的理由,還考線性回歸模型的問題。
印象深刻的是,當我問他是什麼驅使你做這份工作,他說交易就像玩西洋棋,每天都跟世界各地最聰明的人們競賽,享受玩遊戲的過程就是熱情的來源。
另一方面,感覺得到他很致力於營造團隊氣氛,他說比起只看交易績效,更希望讓公司的大家喜歡上交易這項工作,並且透過交易和研究更了解市場。
第二輪,與CTO的面試是中文,他問我與交易相關的經歷,還考了兩個題目,分別與數字、機率有關。
我感覺他是個很聰明的人,總能從不同的觀點切入,談論數位貨幣的時事,聊天過程頗受啟發。
第三輪,與HR聊聊可能進去哪個team,有拿到哪些offer,如何計算績效獎金等。
二面結束後,經過3個工作天收到offer letter。
# 結果:offer get
結語
大家看完後可能會覺得,我投遞的職缺真的是五花八門(?),包含軟體開發、網頁後端、機器學習、量化交易的工作。其實,我是打算透過面試過程,漸漸發掘自己未來理想的工作型態。
然而,我也花了更多的時間在準備。除了每天刷題維持手感以外,還複習了各式各樣的學科,包含資料結構、演算法、作業系統、SQL、Design pattern、機器學習、機率統計。
事後回想起來,我覺得刷題和複習知識只能算是基本功,透過持續的練習面試,讓自己有更穩定的面試表現,才是決定能不能拿到offer的關鍵因素。
另外,如果能有明確的目標公司和職缺,集中精力準備少數公司,也是更有效率的做法。
如果喜歡我分享的心得,請給我一些clap,支持我繼續發文,有問題也歡迎你留言。
最後,祝大家未來求職順利,疫情期間身體健康,謝謝。