
文/由 Byron Lee 授權轉載,並同意修訂標題,原文連結。
鳳凰花開,又到了畢業季的季節,最近也開始找實習/正職的公司。因緣際會下,剛好收到蝦皮的校園徵才信,剛好身邊周圍不少人前往新加坡工作了,所以想說嘗試看看。難得有幸參與了這次2020蝦皮的校園面試,特別紀錄一下,分享一下面試的過程。
不得不說蝦皮真是一間相當有效率的公司,整趟面試流程可以在一個月之內完成,來往的溝通非常有效率,唯一可惜的可能是用zoom視訊面試吧…。
我面試的職位是Machine Learning Engineer,除此之外,還有像是Mobile Apps (iOS/Android)、Web Backend/Frontend、Data Engineer…等多達十幾種職位。對於一個大學新鮮人來說,算是相當豐富的選擇,可以選擇自己有興趣或是擅長的類別。
在此先感謝諸多學長的分享,給予很多的資源。基本上我的準備主要參考於這篇,原po面試的應該是跟後端或Database有關的,所以面試的問題集中在OS、網路、以及SQL相關的問題。對於這些領域想好好準備的,非常建議詳讀一下。
雖然面試的題目主題跟我差蠻多的,但整體流程是相同的,跟文章裡頭提到的一樣,面試主要分四個階段:
順利通過的話就能拿到 offer。
這部分就是純聊天,HR跟你介紹蝦皮、新加坡的工作環境以及一些生活方面的介紹。順便約First round面試的時間。
面試的內容大概分四類:Machine Learning 、Deep Learning 、Algorithm以及Coding,總時程 90 分鐘。基本上的流程是從自我介紹開始,你可以講講你自己,聊聊你修過的課,更好的是可以講講你做過的相關project,引導面試官往相關方向詢問。
由於提到了之前做過的新聞推薦以及現在在做的字型風格轉換,我們從Recommendation System以及GAN的問題開始討論。因為自己對這些project蠻熟悉的,就很愉快的跟他分享以及回答他一些問題。然後再問了一些有關於Neural Network 、activation function以及LSTM的問題,問題有些很細,像是實作的細節,或是一些限制特定狀況的結果。
First round也問了很多基本的Machine learning問題,像是word embedding的實作、基本的 Clustering (KNN)、 Bagging以及Boosting,現在回想起來,討論的問題還真的蠻多的。
好像沒有問到演算法的問題,就直接進入Coding的部分,我只遇到一題Binary Search Tree 跟一題大概 leetcode medium 難度的題目。最後面試官會慣例的問有沒有想問的問題,就結束了,那時看了一下時間好像才過 75 分鐘。
First round 隔天下午就得到 Second round 的面試通知。比較特別的是 Second round 以及 Final round 是連在一起的,Second round 過後 15 分鐘就會告訴你有沒有 Final round ,還蠻刺激的。
面試的過程跟上面差不多,時間也是 90 分鐘。只不過問題從演算法開始,問了 Heap 跟 Hash Table 的問題,還問了一些 Hash function 的細節。這部分我有點亂了陣腳,好在面試官人不錯,引導我回歸正軌,我才穩回來。
其他的部分跟 First round 差不多,但如果你 First round 有問題不太會,記得要去查清楚,我就漏掉了一個 activation function 為何是 monotonic 的問題。結果第二階段又問了一次,我就跟 First round 回答的差不多,在打這篇的時候才去查一次。
另外 coding 的部分也有點小小差異,前一個只用看的就說 ok ,但是這一個就要我跑一下,可能看到我有 bug ,希望我能自己解開吧。這次的問題只有一題,跟 Adjacency List 有關,應該也是 medium 難度。
15 分鐘後,收到了 Final round 的通知,這一輪主要是跟你所在的 team 的上層 leader 面談,時長 60 分鐘。
這一關就沒有 Coding,只有問答。我們的問題集中在如何區分一個商品的留言是正向、中立還是負面。看似基本的問題,但其實討論了很多細節,像是 Chinese text segmentation、Word embedding 以及 RNN,但我覺得有些問題我好像都沒有 get 到面試官想問啥(畢竟面了快三個小時,有點失智xD)。
我覺得最後這個面試官還蠻讚的。我原本想說兩輪連續面,這輪就不問問題了,但他就跟我說要把握機會,他說:面試不只是他們在測試我,也是我跟他們溝通的媒介,最好是可以在面試就解決我所有的疑問。最後 Final round 的面試官也花了超多時間回答我臨時生的一個問題:你覺得待在蝦皮,自己進度的幅度有變小嗎?
其實問問題還蠻難的,理論上都要問一點,但也不能問的很隨便,但是又怕得罪面試官。我很感謝最後他跟我講的那一席話,還有那一番回答,這邊我就不打上來了。
最後還是分享一下一些複習的方向,希望能對準備面試或是單純想精進自己的各位有所幫助。
在過程中也是詢問了很多傳統機器學習的問題,基本上所有的領域都問過一輪了,包括clustering、boosting、SVM 等等,因此盡量對一些基礎的知識有全面性的了解,不要漏失一些細節。
如果要推薦課程,我建議參照林軒田老師的機器學習基石/技法課程,或是李宏毅老師的機器學習課程。如果有時間建議完整看過一次影片,或是可以看看上課的投影片,肯定有所幫助。
這方面的問題我覺得除了基本 Deep learning 的模型相關問題。我覺得更重要的是實作與經驗取向的問題,可以把自己做過的 project 好好的整理一下,包括使用的 senario、實驗設計的情境、遇到的難題,更重要的是你在這 project 中,你自己個人的想法。這些都有機會在面試中發揮功用。
像我自己雖然 Recommendation system 做得沒有很成功,但我也把一些我認為的資料特性、失敗原因、diversity 的問題還有自己的經驗分享給面試官。
常見的資料結構要複習一下,這部分我有點小炸,可能多練練 leetcode 吧。
Operating System & Computer Network
剛好這學期有在修OS,面試前讀了很久,但最後只考了個簡單的 race condition,上個 lock 就能解決的問題。
之於網路的部分,我把 TCP/UDP、HTTP、IP Layer 的概念都看了一下,沒有花很多時間,好險最後都沒有問XD。
關於這兩個領域的題目,可以參考上面提到的心得文
最後要來推薦一下意外找到的好東西,Second round 之前在查資料時發現這網站。原先只是想透過一些題目,尋找之前學過但是忘記的概念,因此我把裡面機器學習,深度學習的題目看了個遍,前前後後花了大概半天,邊讀邊查。
結果真的問出了幾題一模一樣的XD,算是不錯的題庫參考。