2017 後端工程師面試以及準備經驗(旋轉/Shopline/17/Appier/蝦皮)

約 2017/5 月底(是的你沒看錯,已經面試完將近半年 lol)開始找工作,雖然沒有面試很多間可以做很仔細的分享,也不是什麼感人勵志的故事,但因這段期間許多網路上無私分享的文章幫助了我許多,也希望能分享自身的準備與面試經驗,有機會幫到需要的人。

個人背景與應徵目標

自身過去三、四年都在創業,因為一些私人因素與職涯規劃決定離開這個充滿自己青春與心血的地方。也花了許多時間思考下一步該往哪走,最後決定要找尋一個符合以下條件的公司:

  1. 英文工作環境
  2. 國際市場
  3. 新創氛圍
  4. 累積或處理的資料量大
  5. 產品分數 20~80 快速成長階段的公司(假設 IPO 為 100 分)

過去一路從五專、插大到研究所都是資訊相關科系,求學中一直都有接案與實習增加社會歷練,不過英文倒是五專搞爛了,大學一度面臨因為英文無法畢業,近一兩年透過 engoo 與 EF English 算是有慢慢進步中,這歷程又是另外一個故事了。

畢業後就開始在新創圈,在接觸的面向廣度以及同時做很多件事的能力有非常顯著的提升?!但一直缺少資料量大的實務經驗以及較為深度研發的經驗,在訂下這些公司條件後也以此作為下階段職涯的學習目標。

以下按照應徵結束順序排列

Carousell

旋轉拍賣是個以二手拍賣的為主的 C2C 平台,主要市場在新加坡,台灣一樣有分公司設立,但大家目前較為熟知的應都是蝦皮。運氣很好的是,剛好開始找工作的同時,旋轉拍賣大舉在台灣徵才,也非常符合我心中設定的所有條件,算是初步的首選目標。

第一階段

是在台灣的辦公室進行,剛好因大舉徵才,所以面試官飛到台灣來做面試。面試我的是一位 Senior Engineering Manager 與人資,一開始不免俗先自我介紹一下,然後開始針對過去經歷作些問答,其中問到過去架構設計的部分,還拿出電腦直接展示之前畫的架構圖 XDD。後面聊到 CI/CD 所用到的種種服務、之前帶團隊最大的挑戰是什麼、怎麼帶人、之前公司的開發流程怎麼跑得、為什麼想加入等等。

最後換我問問題時,瞭解到公司內部對於 open source contribution 還有各大 conference 贊助參加等都是非常開放與支持,而且還提供遠端工作的福利,算是蠻不錯的。當天下午就收到一份回家作業。

回家作業

作業主要是請你用一個前端框架(建議 React.js)與後端語言(建議 Node.js)做一個 Reddit 的網站,並希望我在週五前可以給出(週一第一階段面試),才有機會當週末參與下階段面試

這邊有個小插曲是原先花了一整天念 react 但最後發現無法速成,與其交個完成品但架構不好,不如用自己擅長的語言做好架構與寫好 README。所以最後用了 Rails + Vue.js 花了幾個夜晚在他們期望的八小時內作完。

第二階段面試

在週五交完作業後下午就收到當週日的面試邀約,共兩個小時兩個 round 有四位面試官,比較妙的是這四位的名字都有在 email 上,所以就狠狠的在 google 以及 linkedin 上研究了一下他們的 background,猜測他們可能會問什麼問題(雖然最後都沒用 XDD)。

當天記得午後下超級大雨,開車去小樹屋會議室,還到了錯的據點,只好快速傳個 email 說會遲到趕快過去,一抵達馬上就被安排進去,一進去連自我介紹什麼都沒有,就直接白板題開始寫惹。

在兩小時(前三題第一 round,後四題第二 round)內解了七題...

  1. 硬幣問題,有不同種幣別,如何用最少的數量達到一個數字?
  2. 如何處理 google doc 的文件編輯同步問題?你會用哪種資料庫?relational db 跟 nosql 差異?(選了其中一個後)會有什麼問題?
  3. 九宮格的迷宮問題,如何用最少成本從起點到終點?(類似 shortest path)
  4. 如何設計 stack insert and pop,時間複雜度只能是 O(1)
  5. 設計一個 reddit with db schema and infrastructure(聽到這題想說我不是作業做過了嗎 XDD 但這部分就比較著重在架構設計)
  6. 如果很多人同時去 up/down vote 一個超級熱門的主題,你應該怎麼改架構
  7. 如果同時很多人衝進來留言呢?(不用很即時的顯示其他人留的沒關係)

算是非常充實的一次經驗,面試完覺得全身被榨乾,還去旁邊的飲料店坐著發呆快半小時才恢復正常。但過程被問到許多次「為什麼」你會這樣設計?這樣做?,可以感受到即使是管理者(面試官)也需要不錯的邏輯與技術底,才有辦法問出應試者是否真的懂。

最後一階段,與 Co-Founders 面試

大約也是隔天就收到下階段面試的邀約,就在當週禮拜四。這一面算四平八穩,因為知道是面試人格特質以及公司文化等內容,事前就先網路上找一下這方面的網路精選面試題,非常幸運(?!)的命中率有九成...我自己也嚇到,印象中記得有這幾題:

  1. 為什麼離開現在的公司?
  2. 為什麼想要加入 Carousell?
  3. 想在旋轉扮演什麼樣的角色
  4. 接下來三年有什麼目標
  5. 除了工作有什麼休閒活動
  6. 之前工作遇到最大的困難是什麼
  7. 同事都怎麼說你?他們曾經因為什麼事情討厭你?

結果

拿到 Offer。旋轉的人資非常有效率,從第一個週一面試、第一個週五交作業、第一個週日第二階段面試、第二個週四 co-founder、第二個週五拿到 offer。

Shopline

這間是透過以前的一位同事做履歷的投遞,而 Shopline 是個給商家做品牌購物官網的服務,算跟過往產品經驗相似,所以也有一定程度的興趣。

第一階段

一開始與人資聊了大約半小時關於過往經驗以及為什麼想加入 shopline,中間也交流了未來的規劃等等,整個過程蠻開心的。後續則請了工程師主管以及一位後端工程師繼續面試技術部分。

整個過程也像是聊天,交流一些過去的經驗, 像是開發流程、架構設計、CI/CD 還有他們目前的運作方式,以及主管帶人的理念等。因為這位工程師主管過往社會經驗蠻豐富的,所以在交流一些過去創業經驗與心得時還蠻好聊的,對於整體公司氛圍以及想幫助每個商家成功的理念算蠻符合我心中期待。

後續就等待與香港工程團隊以及 CEO 面談。

結果

因已收到 Carousell 的 Offer 故主動婉拒後續的面試。

Odigo

是一個非常有趣的共享日本行程服務,主要是透過虛擬幣以及遊戲機制的方式,鼓勵在平台上面分享自己的行程,也因這樣的行程若有幫助到人或是獲得許多瀏覽次數等達成遊戲機制目標,自身也能不斷獲得「玩幣」,而這「玩幣」還能換取真正的錢做購物喔。而母公司是一間日本旅遊企業,更覺得這個服務有很高的機會能夠做起來。

因為自身很喜歡日本這個國家,過去不僅常出去玩,還有過兩三個比賽題目都跟旅遊相關,所以感到非常的有興趣,也很感謝 Simon 網友大大的鼎力協助,很快的就獲得面試的機會。

第一階段

第一次的面談有三位一同參與,分別是 PM, CTO(大陸人), 以及一位工程師(日本人,東大畢業)。過程其實問的非常廣,從機器學習、大數據甚至到寫程式的習慣與工具都有涉及到,印象比較深刻是被問到了兩個很硬的問題:

  1. 有寫過 linux kernel 嗎?
  2. 是否曾經讀過 HA Proxy 的原始碼?

第一時間真的有嚇到,一來是沒想到他們的工程師底這麼厚,二來是腦中馬上浮現「東大特訓班」這個日本漫畫。後續則收到了一份回家作業,也是個需要幾天晚上才做的完的網站規模。

結果

主動婉拒後續的面試。其實當初要婉拒真的思考的蠻久,主要是這個題目真的超級喜歡,但在回想一開始設定的目標後,還是忍痛的婉拒。

17 直播

職位:SRE

是個主打直播社交的平台,自己也跟許多人一樣,最開始認識這間公司的契機點主要因為老闆是黃立成,最近也看到許多被投資甚至成立 17 media 要開打東南亞市場的新聞。另外也因有以前同事先進去裡面,聽到一些像是他們要開始經營一些自產節目等等。

投 17 比較特別的是丟了 SRE 的職位,算是給自己的一個挑戰,畢竟過去沒任何直接經驗,他們的面試也很乾脆在一個早上兩個小時聊天過程中就有了決定。

面試

一進去是由他們的 HR 做接洽,當時是在 operation 相關部門辦公區域外的許多小餐桌上進行面談,時不時還有許多直播主進進出出,或許也是這樣沒有答的很好(愛牽拖)。

接下來與他們的 SRE 進行面談,途中考了許多 linux 的指令以及伺服器知識,像是怎麼知道那個 port 有在用?如何測試某個 ip 的某個 port 有沒有開放?504 gateway error 可能會是什麼原因,要怎麼知道問題點在哪?如何看連到某個網站的路由路線?等等。

最後則是與他們的後端 lead 做談話,這位主管過去曾在美國 google 上班過,後來因家庭因素回到台灣去 HTC 最近才到 17。整個聊天過程很開心,也趁機多問了一下美國跟台灣工作狀況,額外收穫蠻多的。

結果

感謝信。

Appier

這是間人工智慧為主軸的廣告公司,過去因為合作伙伴關係有些接觸,加上 Appier 已是世界知曉的 AI 技術團隊,對於在數據處理以及大流量上相信有許多挑戰,還曾看過有不少外國工程師在 linkedin 上有 follow Appier,整體上印象分數很好,所以也納入選項之一。

除了工作以外,朋友一直說 Appier 對面就是健身工廠,對於一直無法穩定健身的自己,算是另外一大誘因 lol

第一階段面試

當時他們採取的方式是有興趣的組(團隊)會來進行面試,記得跟了三、四個 team 面試,有後台的、前台廣告追蹤的、Business Analysis、數據蒐集等幾個 team,有印象兩個演算法考題(有做些 leet code 應都能 cover 過去):

  1. longest-palindromic-substring
  2. coin problem

數據蒐集部分還有問到如何處理 raw data,像是 log,比如說有 user name, timestamp, json 等,如何根據他們需求處理,比較困難的部分在於 I/O 的處理,如何妥善運用空間(space complexity)換取時間(time complexity),或是時間換取空間會是其中的關鍵。

第一天面完幾個 team 後,便接續跟他們的 PM 與 Tech Lead 聊,被問到蠻多大量數據與流量處理上的架構問題,當時對於 distributed architecture 與相關的服務還沒那麼熟悉,覺得沒答特別到位。問題像是,該如何處理一分鐘數十萬的 requests、若使用 queue 該如何確保他們能夠在短時間內被處理完進行分析等等。

第一階段算蠻硬的,一連面了四個半小時左右,最後 HR 則接待等下階段通知便離開了。比較窘的是,可能擴張太快制度還沒定下來,所以跟每個 team 面談前都會先自我介紹一下,以及被問些履歷上的東西,會有種人生不斷 repeat 的錯覺。

第二階段面試

這也算是最後一階段面試,因為是與 CXO 們的面試,所以在他們最有辦法一同出現的時間,也就是禮拜天下午進行面談,也是很辛苦 XDD。

一開始是與 CTO 聊天,沒太多考試,主要都是聊聊過去經驗,為什麼想加入 appier 等等,也因為這聊天才知道原來 Appier 並不是他們第一個產品,雖都是做資料與 AI 相關的題目,但在這之前也失敗了三四項題目,非常的不容易。

接著與 COO 與 CEO 聊天,這部分就比較偏向人格特質跟公司文化,很喜歡 COO 的想法,我問了請問 Appier 對於員工的未來規劃與發展有什麼想法?大方向的回答是,希望每個人都能在這發揮自己所長做出貢獻,並且能夠不斷進修自己(他們提供很多額外課程給大家進修),同時也能因為在這裡工作感到快樂並過好生活與家庭。雖然沒有太多的所謂「理想」、「夢想」,但卻是很實在。

結果

錄取。

蝦皮(新加坡 SEA)

蝦皮最近應都被人所熟知也就不多做介紹,在與人資聊天過程當中得知原來公司今年要開始改叫 SEA(原 Garena),且公司主要多為大陸人。比較特別是,原先本預計跟旋轉拍賣一樣都會是全英文,沒想到從頭到尾都是中文,一度腦筋還轉不過來 XDD

跟人資聊完接著就是線上考試,最一開始用任意程式語言寫一個 binary search 的架構,算是很快就過關進入連環的問答題,這邊就簡單分享幾個被考的題目:

  • 3 handshake 是什麼?
  • 4 handshake 是什麼?
  • HTTP vs WebSocket vs Socket
  • 什麼是 HTTP2
  • PostgreSQL vs MySQL
  • 各種排序演算法的時間與空間複雜度
  • Google Protobuf 是什麼?
  • TCP 該如何做流量控制
  • 有用過 Elixir (ruby syntax-like for erlang structure) 嗎
  • C thread 怎麼運作?
  • 該如何 ping 某個 protocol 或是 port?
  • telnet 如果防火牆擋住了會怎麼樣?

其實除了這些還被考了許多問題,花了超過一個小時,但可以看到面試官拿著一份看起來就是題庫的本子在找要問什麼問題。印象比較深刻是他們都沒用過 AWS 或是 GCP 之類的服務,公司的伺服器甚至整個雲端架構都是自己組建的(不愧是陸資公司),對於我這時的職涯規劃與團隊想法是蠻大的扣分,所以後續也就請 HH 討論不繼續往後面試。

結果

沒下文。

準備資源

根據面試幾間下來,大致上可以把應徵準備分為四大塊:演算法、商業知識、系統設計、公司文化。

演算法/資料結構

這部分大家都相當清楚有 Leet Code,也推薦另個好物:演算法筆記,是個從大學時期參加程式競賽陪伴到現在的好伙伴。

另外最近國內許多公司也開始效仿國外用些 online judge 的系統作第一階段的測驗與篩選,像是 HackerRank 或是 codility 都是目前常見的。

系統設計

這部分推薦 High Scalability 以及 HiredInTech 的 System Design,都有許多實務經驗分享,以及可能的面試題型可以參考。

商業知識與公司文化

這部分就沒有太多訣竅,很吃個人特質,但可以透過多練習(對練、冥想模擬等方式),以及多閱讀、多分享來進行改進。幾個跟公司文化相關的部落格可以參考:themuse.com 以及 100offer

以上分享,希望可以給些人帶來幫助 :D