2020 後端面試心得:Hahow / PicCollage / Shopback / Trend Micro / PopDaily

James Yu
16 min readAug 16, 2020

--

Photo by Charles Deluvio on Unsplash

背景

5 年左右軟體開發經驗。一開始碰的東西比較雜,Android、ML、web 全端都有碰過。現在則專注在後端(Node.js),主要使用的語言為 JavaScript、Java 和 Python。

目標 & 結果

目標職位是後端工程師,偏資深的缺,薪資期待設定在 150 左右(最後實際落在哪就不方便透露了)。公司的選擇重點有兩個,產品和文化:

  • 產品:最好是自己有在使用或是喜歡的
  • 文化:希望有相對開放的團隊文化,也就是組織比較扁平,對產品的走向能有一定的影響力

最後有投遞且走完面試流程的有下面五家:

  • Hahow:Offer get
  • PicCollage:Offer get
  • Trend Micro:Offer get
  • Shopback:最後一輪後 reject
  • PopDaily:只有一輪,reject

Hahow、PicCollage 和 Shopback 蠻符合我想要的產品和文化,算是一開始就鎖定了吧!

Trend Micro 是朋友內推的,雖然公司性質跟其它家比起來不太一樣,但自己合作過不少這裡出來的高手,想藉由實際的面試多了解它們的工程文化。

PopDaily 也是朋友介紹的,面試前其實對他們不太熟悉(產品面向的是女性市場),因此比較偏向交流的心態。

準備

由於一直很嚮往能在國際化的團隊中工作,所以準備項目偏向矽谷的面試方式,也就是演算法和系統設計。

  • 演算法:刷了約 400 題,難度以 medium 為主,加上少量的 hard。
  • 系統設計:除了自身工作經驗外,主要參考 Grokking the System Design Interviewsystem-design-primer。後端面試中蠻常會遇到架構的設計,有先準備過的話,比較能保持清晰的思路去拆解問題。也可以用同樣的方式去分析自己做過的專案,更有條理地展現出自己知識的深度與廣度。

雖然後來因為疫情只有面試國內公司,但演算法和系統設計依然是重要考點。以我這次面試來說,大多還是有考演算法,難度約 easy 到 medium 間。系統設計每一家都有問到相關的知識點,有兩家直接考白板題。另外,五家裡面有三家有作業,主要看重自動化測試、文件與程式碼的品質。

Hahow

流程 & Timeline

  • 6/3:透過朋友內推
  • 6/10:電話面試(HR 和工程師)
  • 6/12:作業,完成一個後端的小專案,期限約一週
  • 7/1:現場面試,總共兩輪(技術、 product owner 各一輪)
  • 7/10:Co-founder 電話面試

面試細節

電話面試的部分比較輕鬆,主要就是聊聊過去的經歷,以及詢問一些基本的技術問題(以 Node.js 和 JavaScript 為主)。由於這個位置進去之後是要負責一個新產品線的開發,所以也對新產品做了一些基本介紹。

作業是從頭打造一個 API service,需要包含完整的文件與測試。需求本身非常單純,主要側重面試者的開發風格以及程式碼的品質。我是在設計測試上花比較多心力,另外也在文件中探討了系統未來在不同情境下,可以如何進行 scale。

現場面試有兩輪,第一輪的陣仗有點嚇到我,由四位後端工程師(其中二位是 leader)直接坐在你對面輪流發問。但過程不會太嚴肅,當成同事間在討論問題就好了。問題的範圍很廣泛,像是專案架構、資料庫設計、語言特性等等,另外還有一些可能是他們實際遇過的情境題(串流相關)。

這輪沒有出現太刁鑽的題目,大多是順著話聊。建議就是平常心,有說多少說多少,不要挖洞給自己跳。然後也可以準備一些問題,關於技術或是文化都可以,多一點互動氣氛會比較輕鬆。

第二輪是跟新產品的 PO(product owner)交流,問題會比較偏向個人特質、職涯規劃方面。當然產品的討論和公司發展也是重點,可以事前先多做功課。我的話是因為本來就是 Hahow 的長期使用者,對線上教育這塊也一直有興趣和關注,所以聊起來自己還蠻興奮的。

最後是跟 co-founder 的視訊面試,沒有再考察技術,以行為類問題為主。算是問得比較深,有些情境我也只能用想像的。最後的提問時間,我以使用者的角度許了個願,也得知這有在他們計劃中,就期待一下囉~

心得

HR 在帶我參觀公司的時候,各處感覺蠻有活力。Hahow 的團隊偏年輕,在這邊工作的氣氛應該很不錯。

公司文化方面,面試過程可以感受到他們強調的公開透明。作為一個面試者,很多時候我都覺得自己的問題可能已經接近公司比較機密的部分了,但還是都能獲得回答。

整體來說 Hahow 的面試經驗還蠻愉快的。當然,進去之後可以自由觀看各種線上課程對我來說也是很加分。

PicCollage

PicCollage 是英文為主的工作環境,裡面有許多來自不同國家的成員,所以接下來的面試流程大多是用英文進行!

其實我自認英文程度蠻普通的,過往工作中也是以讀、寫為主,沒什麼口說的機會。知道是英文面試後一開始有點小緊張。但真正開始面試後,發現面試官非常友善,其實只要敢講,並且對方能明白你的意思就好!國際化的團隊組成和工作環境也是 PicCollage 非常吸引我的地方。

流程 & Timeline

  • 6/2:官網投遞(有間接認識的人在裡面,但不算內推)
  • 6/5:接到 CEO 的回覆,信件來回了幾次
  • 6/18:和 engineering manager 視訊一面
  • 6/22:和 HR、後端工程師視訊二面
  • 6/23:邀請加入 slack,給作業,時間約一週
  • 6/29:和後端工程師視訊討論作業
  • 7/6:現場面試,含 lunch meeting 約半天時間

從上面這一串 timeline 就可以看出 PicCollage 真的很重視招募這件事。面試時間雖然拉得比較長,但是 HR 跟進的非常快,基本上每一關結束隔天就會有下一階段的安排。

面試細節

我是直接從官網投遞的,不久後接到回信,主要針對我的經歷做進一步的詢問。一開始以為是 HR,拿名字去 Google 才發現是 CEO 本人。而且把履歷看得很仔細,拋出的問題蠻客製化的。信件來回了幾次後接到一面的邀請。

和 engineering manager 視訊一面,主要針對我在上一家公司負責的專案內容進行提問。中間有 10 分鐘左右的線上白板題,題目不難,我想是考察面試者在解決技術問題時,思考的脈絡和釐清需求(clarification)的能力。

PS:後來聽說如果英文口說沒有達到基本要求的話,這輪就會止步了。

視訊二面,與 HR、後端工程師一起進行。一開始大家輕鬆聊聊,了解為什麼會想來面試之類的。接著分享螢幕,開始 pair programming。題目是一個常見的系統設計題,使用的語言和框架沒有限制。由於時間有限,並不需要將整個系統實作出來。

二面通過的話,接下來還蠻特別的,PicCollage 會邀請你加入他們的 slack,並專門為你開一個 channel,裡面都是將來會有緊密合作的成員。後續的面試流程或是途中你有任何問題,都是直接在 slack 上面交流,不需要再等待信件往返。就好像真的已經在 PicCollage 工作那樣!

加入 slack 後會給一個回家作業,內容就是完成先前二面的系統,需要包含測試和說明文件。雖然需求看起來不難,但實作起來有很多的細節要注意。建議不要只滿足最基本的功能,各種 corner case 都要仔細思索過。

最後是現場面試,一到門口就可以看到螢幕上寫著你的名字的歡迎畫面,還有專屬的保留會議室。接下來半天,這間會議室就包場啦,一票玩到底!

HR 介紹完環境後大家會先一起到公司附近共進午餐,這邊可以中英文夾雜輕鬆聊,突然發現 tech manager 的中文講得很遛!

回到公司後,由該職位相關的工作夥伴們輪番上陣,我的 sessions 有:

  • 和 engineering manager 設計一個系統架構(系統設計白板題)
  • 和工程師上機 pair programming,在自己寫的作業上加入新功能
  • 和 PM、行銷一起規劃功能(由於面對的不是工程師,這邊我的英文表達突然有點小卡。大家可以自行想像、練習一下類似的情境)
  • 和 CEO 聊天,問了兩題有趣的數學問題。有一題我只能用猜的,但思考過程應該比較重要
  • 和 iOS leader 設計一個經典的小遊戲(白板題,偏 coding)
  • 和 HR 討論團隊文化、個人職涯規劃等等。另外我在系統設計的 session 花了比較長時間,有些問題來不及向 engineering manager 提問,所以他又特地回來讓我問一些關於工程團隊方面的問題

現場面試的考察範圍蠻廣的,很難說這部分要如何準備。建議就是放輕鬆、保持交流,想像你和面試官是要一起解決這個問題。基本上只要能清晰地表達出自己的思路,如果方向岔了,對方都有適時的給予提示。

半天下來真的是非常緊湊,建議中午 lunch meeting 的時候吃飽一點,面完的瞬間有夠餓(後來才想到零食桌有很多零食飲料,我一個都沒拿…)。

心得

不得不說面試 PicCollage,雙方都要花費不少的時間和精力,但同時也有非常多的機會可以讓面試者對公司的團隊和文化有進一步的了解。

整體感覺是一個很開心、有創造力的工作環境。而他們想找的應該偏向積極、能夠有條理地釐清需求,並勇於提出自己的看法的人。另外,有持續學習的熱忱(例如 side project、自己開發的小工具)或是很酷的興趣我猜應該也會蠻加分的!

Shopback

流程 & Timeline

  • 6/5:LinkedIn 上 HR 主動聯繫
  • 6/8:和 HR 電話聯繫,提交履歷
  • 6/12:作業,時間約一週
  • 6/19:和 engineering manager 電話面試
  • 7/14:現場面試

Shopback 我以前曾經面試過,中間因為個人原因沒有繼續往下面。所以這次就直接先發作業給我,然後再和 engineering manager 電話面試。正常流程這兩個順序應該會反過來。

面試細節

和 engineering manager 電話面試(沒有視訊),主要是了解過往的經歷和做過的專案。圍繞著系統架構、技術、在專案中扮演的角色等問題。跟其它家比起來算問得比較深入,細節聊得很多,建議好好準備一下。

作業我覺得蠻有意思,要寫一個 Node.js 的 module 提供給其他開發者使用。相較於平常工作中,大多時候是將商業邏輯轉換為程式碼,然後搭配框架來完成需求。面對到一個通用的 module,想要同時兼顧易用、易擴展和易維護性,在設計上就有很大的想像空間。我後面有和面試官稍微聊到這部分,若是比較資深的工程師,他們會希望在作業上能展現更多程式架構的能力。

作業提交後會由三位工程師個別審查,人選不會和現場面試的重複。所以面試一個人至少出動了 6 位工程師及 engineering manager。 Shopback 表示這樣做是為了避免個人的偏見,這點我覺得很用心。

現場面試有兩輪,分別是工程師和 engineering manager:

第一輪總共和三位工程師一起進行,一開始先介紹我在上一間公司的專案,面試官的問題比較著重在系統架構和資料庫,尤其是關聯式資料庫的部分問得蠻多。然後是演算法白板題(Leetcode 的原題,難度 medium),這邊雖然最後有寫出來,但是自己覺得過程有點卡。

第二輪和 engineering manager 面試,問了不少行為類問題的情境題,聊得蠻深入的。只有比較抽象的回答可能不太夠,最好是有過往工作上的具體例子。最後考了一題系統設計白板題,題目不算太偏,也是他們工作上真的需要用到的系統。

心得

Shopback 的工程師普遍都蠻資深,面試官感覺得出來底子很硬,面試的問題也相對比較深入一點。特別是關聯式資料庫,還被問到一些底層儲存引擎相關的問題,建議這部分可以多做準備。

其實面完技術輪的時候已經稍微感覺不太妙了,有些問題自己都覺得答不出來不太應該。一方面也是自己當時手上已經有了其它 offer,狀態就有點鬆懈了,最後真的被 reject 也只能說自己準備的還不夠充分。

題外話,和 engineering manager 面試時,因為時間拉得比較長,雖然當時已經進入了最後的提問環節,他仍然推掉了其它的會議繼續回答我的問題。期間有瞄到他的手機一直有訊息進來,但他一直很專注在面試上,感受得到對面試者的尊重。

Trend Micro

流程 & Timeline

  • 6/2:透過朋友內推
  • 6/21:完成 Codility 的線上演算法測驗
  • 6/24:和兩位 team leader 現場面試
  • 7/3:和 director、HR 視訊面試

面試細節

前測是三題的演算法,使用的平台是 Codility,難度大概是 easy 到 medium之間。這個平台的題目跟別家最不一樣的就是問題描述有夠長,建議先去看官網的 lessons 習慣一下。另外可能是因為我走內推的關係吧,前測都還沒寫就已經先約好現場面試的時間了(後來才發現信上有註明,前測考太爛現場面試是可以被取消的)。

現場面試是同時和兩位 team leader 進行,沒有再考白板題。主要針對上一份工作負責的專案進行提問,然後從中延伸。可能是因為我是該專案後端的主要開發者,專案中的每一個環節,技術的考量、trade-off 都要解釋得很清楚。最後的提問時間,因為趨勢的團隊規模很大、產品線很多,所以我比較針對該職缺的工作內容進行提問。

最後一關是和 director 視訊面試,沒有考技術,偏向 culture fit 吧。因為我對於趨勢的團隊和工程文化很感興趣,director 很詳細地跟我說明了他們的 DevOps 文化。這邊指的不是軟體開發流程(e.g. CI/CD)的那個 DevOps,而是持續地用 data-driven 的方式,去改進產品和客戶的滿意度。自己過去蠻常遇到憑“直覺”下決策的的隕石式開發,這部分我是非常認同,且相信他們投入了不少資源在做這件事的。

心得

相較於我投遞的其它公司,趨勢給我的感覺就是四平八穩。可以在一個相對穩定的環境和良好的組織架構下,持續地精進自己的能力。另外我面試的 team,內部各種常見的語言和框架都有使用。只要能提出合理的分析,應該有很多的機會可以嘗試不同的新技術。

PopDaily

流程 & Timeline

  • 6/4:現場面試,約半天時間

面試細節

透過朋友內推,直接安排現場面試。

第一輪是和兩位工程師進行技術面試,問了 JavaScript 以及兩到三題演算法(難度 easy 左右)。後端的一些知識點也有聊到,但整體來說沒有遇到太刁鑽的問題。

第二輪和 CTO,主要介紹一下上一個專案,接著都在聊團隊文化和溝通方面的議題。CTO 其實到職沒有很久,正在著手打造一個他理想中的工程團隊。根據他過往的經驗,應該有很多的心得和想法想要在這裡實現。

第三輪是 PM 和 designer,這邊就是放鬆聊天,還蠻開心的。主要應該是認識一下未來可能的合作夥伴吧。

最後由 HR 介紹一下薪資福利,第一次碰到這個環節有投影片。假期和遠端工作給的很大方,應該是新任 CTO 上任後嘗試推行的工作模式。

心得

雖然這家放最後面,但這其實是我第一家面試的公司。事後透過朋友得知沒有錄取的原因,一方面是自己很久沒面試了,有些地方可能沒有表達的很好。另一方面是在 culture fit 的部分,我不是 CTO 理想中的團隊成員。在和 CTO 面試的過程中其實也發現彼此想法上有一些落差。

以結果來說,想法不同而沒有錄取,我覺得倒也不是什麼壞事。建議要面試這家公司的話可以先看過 CTO 在 medium 的文章,評估一下雙方的想法契不契和囉~

補充心得

除了準備演算法和系統設計以外,這次面試我認為還有兩個部分可能比較容易被忽略,但非常有用:

  1. 行為問題(behavior question)要好好準備
  2. 理想職缺的開獎時間盡量排在一起

1. 行為問題(behavior question)要好好準備

所謂的行為問題,泛指技術以外的所有問題,例如:

  • 為什麼離開上一份工作?為什麼會想投我們公司?
  • 和同事、主管有發生過意見不合嗎?如何解決?
  • 可以跟我分享你職涯中遇過最困難的挑戰嗎?

若技術問題自認回答的還不錯,薪資期待也在合理的區間,但最後卻沒有錄取,就很可能是在行為問題踩到了一些雷。

這類型的問題,在我這次面試中佔了非常大的比重。我猜是我的目標公司大多規模比較小,成員間合作緊密,且都很以公司的文化自豪。一個新成員的加入,是否能在團隊起到良好的化學作用很重要。

行為問題可以說沒有標準答案,但還是有一些共通的原則可以遵循。我的方式是不要說謊,但也不要太直白,最好適度的潤飾一下,並加上實際的例子來輔助說明。

例如幾乎每次都會問的問題:為什麼想離開前公司?

在沒有事先準備的情況下,面試者可能會開始列舉前公司的缺點。面試官一般也會表現得心有戚戚焉,於是我們越講越 high,卻默默在別人心裏留下出個不斷抱怨的形象。

因此,在不偏離事實的前提下,同樣的回答可以加上一些潤飾,例如:

『因為前公司的某某部分,在實際工作了一段時間後,發現和當初預期的有所落差,我覺得長期來說對我的職涯發展是不太好的。雖然也和主管溝通過,並嘗試了某某方法來改善,但最終個人影響力還是有限。我知道貴公司這部分做得很好,這也是我投遞履歷的主要原因』

這樣的回答方式,雖然不至於對面試結果有多加分,但至少四平八穩。我的想法是:技術問題要盡力表現,行為問題就做到不要挖洞給自己跳即可!

另外不要忘記:

行為問題,公司在面試你的同時,你也在面試公司。

所以我也很喜歡拿同樣的問題反問對方,看看他們是如何回答的,還有是不是能分享一些在工作中具體的例子。

很可能你會發現,有些問題面試官追問得很犀利,但是真的反問他,回答時卻也有點打高空。如果真的有些很在意的點,隱隱約約感覺到對方開始含糊其詞,或是彼此想法有不小的落差,那麼真的要好好考慮清楚!

2. 理想職缺的開獎時間盡量排在一起

最後是薪資談判的環節,只有一個重點:選擇越多的一方,越握有主動權!

對於公司來說,這個職缺的優秀應徵者越多,它就越不擔心你拒絕 offer。對於面試者來說,手上同時握有的 offer 越多,就越敢和公司協商 offer 內容。

前者我們沒有辦法控制,但後者可以。

所以對於那些很想去的公司,我們可以打聽一下整個流程走完大概要多久,然後盡量將面試結果出來的時間排在一起。以我這次面試來說,所有的結果幾乎都在同一兩周內出來,那就比較有空間可以去做協商。

以上是我這次面試後端職缺的心得。這次求職的過程從別人的心得文獲得了不少幫助。而這也是我寫這篇文章的主要原因,希望也能對他人有所幫助。

老實說,沒有錄取的公司的面試過程,寫起來感覺蠻微妙的。但這些失敗的例子,對大家來說可能更有用,也算是對自己不足之處做一個紀錄吧!

Ever tried. Ever failed. No matter.

Try again. Fail again. Fail better.

- Samuel Beckett -

--

--

James Yu

Ever tried. Ever failed. No matter. Try Again. Fail again. Fail better.