台灣軟體工程師在倫敦 — T2 求職攻略

Pei-Ya Chiu
16 min readNov 2, 2020

--

倫敦市中心 Covent Garden 的可愛桌遊店(跟內文完全沒關係)

2019 年上半年,由於另一半抽到了英國打工度假簽證,我們決定將倫敦當作下一個求職據點。在陸續投遞了 90 家左右的公司後,我最後成功拿到了 7 個 offer(皆有 T2 VISA sponsorship。)

求職期間,我發現網路上有非常多針對一線 FAANG 大公司的面試心得分享,卻很少有文章分享大公司與中小公司同時海投的經驗。本文把我當時求職時的面試經歷歸納整理,希望能提供未來其他來到英國求職的軟體工程師們做為另外一種參考。

個人背景

2012 年從台大資訊系畢業,在台灣新創公司 Skywatch 從事了 5 年的 Full Stack Web + Embedded 開發。2016 年回到台大資訊所念碩士,2019 年 1 月取得碩士學位。

這次求職我的履歷上寫的是 6 年經驗工程師(碩士期間有繼續在原公司工作)這個資歷在英國能投遞的職位程度大概是 Mid — Senior Level 之間,以 Backend 及 Full Stack Web 為主。

英文能力部分,本人一路在台灣受教育且此前從未規劃過出國唸書或工作。所有的英文技能都只點在讀跟寫,聽與說相對來說很廢(連英文歌也不太聽、美劇也不太看)。出發前買了 8 堂 engoo 跟線上老師練習聊天,以及參加了 MDT 課程抱佛腳練習口說一個月左右。

由於我沒有工作簽證,這次只以有贊助 T2 工作簽證的公司作為目標

面試前準備

履歷準備

我在台灣時參加了 MDT 的「履歷、自我介紹、求職信」課程,並依照課中所教來撰寫履歷(剛剛搜尋這門課在 MDT 似乎沒開了,有點可惜。)

那時是依照課程中教的準則寫 resume。但有趣的是某些課裡教的「鐵則」在英國(或是近年)似乎不一定那麼鐵。例如課程中有強調「resume 的長度就是固定 1 頁,不管你工作經歷幾十年都只能 1 頁」,但我後來在開始工作並參與面試時,收到的履歷永遠都至少 3 頁以上 -__- |||。

建議履歷最好能找到 native English speaker 或是專業的履歷編修服務幫忙 review。再怎麼不想花錢最少也要請英文好的朋友幫忙看過。若沒有給別人先看過的話,很多時候會寫出令人誤解的語句而不自知。

然後,履歷中有錯字是死罪

刷題

由於這次我一起面試了倫敦的 Google, Facebook 等大公司,所以在開始面試前先安排了一個月專心練習刷題。雖然後來還是被 Google 刷掉了,但這整個月集中準備對我後來面試中小型公司的技術關也幫助非常大。

這部分的準備直接參考 FAANG 公司的面試來刷題即可,中小型公司的技術面試也同樣適用。

常見的中小型公司面試流程

由於網路上已經有非常多的一線軟體公司面試流程分享,本篇只集中介紹倫敦中小型公司的軟體工程師面試流程(以 Full Stack Web 及 Backend 為主)。我將流程分為四個階段,每個階段介紹我遇到過的不同面試方式與攻略心得分享:

  1. HR phone call.
  2. Technical Interview:包含電話面試, 線上互動 coding, HackerRank coding 及 回家作業。
  3. On-site Interview:包含 pair programming, system design 及 culture fit。
  4. Offer Selection.

第一階段:由 HR 或 Recruiter 做 initial phone call

此階段大多是由非技術背景的 HR 或 Recruiter 約定 15~30 分鐘的電話聯繫初步認識你這個人。內容方面會聊比較固定的問題,例如:

  • 求職者現在所在位置:倫敦有非常多的跨國求職者,如果不是 FAANG 型大公司,大多數不願意提供參加 on-site interview 的機票與食宿。不過現在(2020 / 11)因為 COVID-19 的關係大部分公司已經改成全線上面試,或許面試者所在地點會變得相對不重要。
  • 求職者簽證狀況:來自歐盟國家的求職者在英國不需要額外工作簽證。有些台灣人是拿 Working Holiday VISA(T5),在英國可以直接合法工作兩年。而我沒有 T5 就要想辦法拿到 T2 VISA sponsorship。這個條件可以有效過濾掉一堆公司(也就是被一堆公司刷掉 XD),很多公司是不願意負擔 T2 VISA 費用的。
  • 簡單的單選 / 多選技術問題:少數公司會用跟履歷上的技術相關的選擇題來初步過濾面試者,這部分就只能見招拆招。例題:在 Python 中,以下哪個資料型別是不可變的 (a) List (b) Tuple (c) Dictionary (d) Set
  • 求職者期望薪資:有些文章建議在這個階段不要透露期望薪資,以求在最後談 offer 時保有資訊不對稱的優勢 (?)。但我認為可以講一個很 rough 的範圍,如果 HR 透露該公司連薪資下限都無法達到,那就可以提早說掰掰了。我那時跟每家公司講的期望薪資都是 £45k / yr ~ £55k / yr,是滿大的範圍。另外,到了最後 offer 階段時每家公司都重新跟我聊了一次期望薪資,這也可以看出本階段的薪資範圍其實不太重要。
  • 閒聊履歷(Introduce your career path):這部分準備約 1 分鐘內的固定講稿簡要的說明你的工作經歷。我一開始準備了太長的版本(約3~5分鐘),有好幾次直接被 HR 打斷 😂,後來多次修正了講稿。這階段 HR 想要聽到的是一個簡短的 overview不用擔心漏了什麼沒講,如果該公司有對什麼特別感興趣, HR 會直接問。

這通電話的時間通常不長,提早結束並不代表出局(約定了 15 分鐘卻 5 分鐘就結束很常見),有時候 HR 跟工程師真的沒有那麼多東西好聊,把一些法規相關事項溝通完後就會趕快移到下一階段。

第二階段:Initial Technical Interview

第二階段開始就會是技術關,型態滿多元的,我自己遇過的有以下幾種:

Technical Phone Call

由面試的公司有經驗的工程師來跟你尬聊技術,時間約 30分鐘 ~ 1 小時左右。這部分準備只要把握一個原則:「對自己履歷上寫到的關鍵字都可以侃侃而談建議要對平常使用的技術深入了解背後的原理。

另外可以理解一般人都會在履歷上稍微澎風,尤其是在人人都莫名其妙自信心爆棚的歐洲,履歷要寫得夠漂亮才能增加自己的能見度。那就只能要求自己負起責任啦,履歷寫了什麼就要講得出來。

Interactive Coding Test

這類型會由公司內的 1~2 位工程師跟面試者 con-call,並搭配 CodePen 等線上平台一邊討論解法一邊 coding,也可以試跑程式結果(幾乎只有 FAANG 等級像是 Google 這種公司才會用文字編輯器不給 Run 的變態考法)

準備的方式跟 FAANG 面試一樣:多刷題,並且要練習用英文解釋自己的 idea,溝通時要言簡意賅,寫扣的準確率也要高,並且要能找出自己的 bug,平常就要大量練習。

另外,「隨便改一個地方就跑跑看一直亂戳 (try-error) 」是非常糟糕的 debug 方式,如果在這關(或後面 on-site interview 的 pair programming 關)使用了這種 debug 法,有極大的機率會被刷掉。而就算面試者這樣做了沒被刷掉,也可能體現了這家公司的整體工程師水準不怎麼樣,有幸被錄取也要小心跟同事的合作狀況……所以平時練習就儘量不要 try-error 了,想清楚邏輯再開始寫吧。

這類面試時間長度會在 30 分鐘 ~ 1.5 小時不等,時間短的可能會考得比較簡單。時間長的可能會考比較難的題目或是考 2, 3 題以上。

Online Coding Test (HackerRank)

這種也是考 coding,只不過不用一邊跟別人溝通一邊寫。

公司會寄一個 HackerRank 的 Link 給你,要求你在 1 ~ 2 週內完成。你可以在這段時間區間內的任何時間開始寫,一旦開始就要在時限內(通常是 1 ~ 1.5 小時)寫完。

HackerRank 跟 LeetCode 不太一樣:LeetCode 只有 Accepted 跟 Wrong (Wrong answer / TLE) 兩種結果。而 HackerRank 每個測資是分開給分,就算沒寫出最佳解也會有部分分數。

這關建議可以在時間快結束時花幾秒把這次寫的程式都 copy 下來,原因是若分數 ok 進到下一關,面試官跟你討論你的程式,例如:

  • 假設因為 TLE (Time Limit Exceed) 而只拿到部分分數的話,面試官可能會問 TLE 的原因?知不知道如何避免 TLE?
  • 就算拿到 full score,面試官也可能想討論說有沒有更好的寫法。程式碼在 HackerRank 平台上都有紀錄,有面試官問過我是否能把我拿到 full score 的程式寫得更簡短,也有分享別的面試者更簡短的程式給我看過。

Take Home

公司可能出一份程式作業,請你在 1 週內寫完把程式寄回。

回家作業的面試因為給的時間比較長,公司想看的就是面試者平常「會在 production 寫出怎樣的程式 / coding style。

幾個簡單建議:

  • 一定要寫 Test case 跟 README。
  • docstring 不要省、function 切分也要仔細設計。
  • 如果專案夠大,folder structure 要稍微斟酌一下。

我自己只有遇過一家公司考 take home 而且 我 被 刷 掉 了。所以這部分只簡短分享,詳細注意事項請參考網路上其他有被錄取的大大們的心得。

第三階段:On-site Interview

通過前面 1~2 次 technical interview 後,公司已經很初步的認可了面試者的溝通能力與技術能力,通常接下來就會是 on-site interview。

以往 on-site interview 會邀請面試者去辦公室跟多位未來主管與同事見面,這是一個很好的機會去認識環境以及感受一下跟同事合不合。很可惜 COVID-19 時代這階段應該都改成線上了。(這點對台灣求職者或許是好事,不管目標 T2 or T5,現在都有機會遠端在台灣完成整個面試。)

特別提醒人在英國的求職者要注意網路頻寬。英國普遍網路穩定度滿糟的,除了租屋處的 wifi 以外,建議多準備 50GB 的手機流量備用。

On-site interview 通常會排 2 個以上的 session,其中一個會是 culture fit。時間長度由於每家公司的流程不同,有些公司喜歡一次排 2.5 小時、塞 3 個 session、一次面試完之後直接談 offer。也有些公司喜歡每次只約 1 小時、約 2, 3 次以上的面試 拖台錢

而 on-site 的內容大致會從下列幾個項目取排列組合:

Pair Programming

面試者會被要求與公司內另一個工程師用 pair programming 的方式解決一個技術問題。

問題類型不好預測,有可能是一起解一題 leetcode、一起為現有的假專案開發 feature、或是一起解 bug。這階段有機會被要求用 TDD 的方式執行,通常考 TDD 的公司會在面試前就明確提出希望你熟悉 TDD 的開發流程,這部分就自己事前多做點功課吧。

整體來說,會使用 Pair Programming 面試的公司就是希望測試面試者的溝通技巧與合作能力。儘量多跟面試官討論不同可能的解法、優缺點、以及個人偏好的解法。技術溝通必須盡量保持簡短、使用最少的字數表達出最多的資訊,否則除了會壓縮到 coding 的時間,面試官也可能會覺得面試者講話沒重點而大扣分。

不用擔心英文不夠好讓自己無法言簡意賅。從我後來當面試官的經驗,面試者是有重點的在回答問題 還是在 流利的產出廢話 其實非常容易分辨。回答重點比任何漂亮的句子都重要。

System Design

System design 比較常見於 mid level 以上的工程師面試。

公司會要求面試者設計一個系統來達成一組功能需求(越資深的職位越希望面試者也考慮到 non-functional requirements。例如要支援大流量時需要怎樣修改設計 / 效能瓶頸會先出現在哪裡?)這部分就看你面試的是什麼職位會有不同的考題,網路上也有很多教學。

印象中在求職期間被考過的東西包含:database schema design、primary key / foreign key、index 或是 inner join / outer join 的差異等等。RESTful API design / API server scale out 的問題也很常見。

大原則是先快速給出一個簡單能達成需求的 MVP 架構。然後根據面試官提出的各種考量去迭代修改成更成熟、支援高流量 / high availability 的結構。迭代的能力對 senior role 非常重要,如果是 junior 工程師的話可能面試角度會比較偏向這個架構到底 work 不 work,迭代會比較少。

除了技術內容外,有個重點是請儘量使用白板或是 screenshare + diagramming tool 來輔助溝通(除非面試官制止你這樣做)。原因是就算母語者也很難光用口語把系統架構溝通清楚,更何況面試時會需要多次修改設計,面試官也會需要使用圖像來輔助溝通。

我自己在當面試官考別人 system design 時會明確的要求面試者使用對方熟悉的 diagramming tool(簡單的 box / line 即可,不需使用標準 UML)。通常會考到這項面試的職位都不是 entry level 了,畫 diagram 的能力應該是滿基本的要求 XD

Culture Fit ( Behavioral Interview )

Culture fit 面試就是俗稱的 behavioral interview。除了 Amazon 有名的 14 Leadership pricinples、Google 的 Googleyness 以外,很多中小型公司也有各自偏好的人格特質。

現在軟體業主流價值會希望工程師具有不斷學習善於合作樂於分享知識等特質,面試官會用情境題來理解你的個性與工作時的偏好。

這部分的練習可以搜尋關鍵字「SAR answer for behavioral interview」,搭配網路上能查到大量的 behavioral interview 的考古題做準備。例如:舉例說明你如何處理跟同事間意見不合的狀況?面試者在回答時必須擷取過往工作中的事件來描述及佐證你聲稱的特質。

(搜尋時你可能也會看到另一個 “STAR method” — Situation, Task, Action, Result,STAR 基本上跟 SAR 是一樣的東西。但我自己覺得 STAR 結構不利於口語表達的流暢度,SAR 對於表達是比較直覺的。)

這關儘量誠心作答,可以修飾但不要說謊。面試是雙方交流的過程,不只是公司在面試人、面試者也在面試公司,雙方特質契合很重要。舉個例子,對於非常早期的 startup 來說,公司可能需要的是擅長 hack 的人快速 prototype 出 MVP,此時若面試者是一個極為注重 best practice 且不願妥協的人,那可能文化上就不太合。

第四階段:Offer 選擇

通常通過 on-site 後公司就準備發 offer 了 🎉

公司可能會再確認一次你的期望薪資。發出 offer 後,通常期望面試者在 1 到 2 週內回覆是否接受,如果拿到的第一個 offer 就很滿意的話,可以直接接受然後快樂慶祝去。或是也可以選擇累積多個 offer 做量化比較後選出最好的,甚至進一步跟每家公司做薪水談判

如何量化比較不同 Offer

在這波求職中我一共拿到了 7 個 offer。由於不同 offer 間很難比較優劣,因此我使用量化的方式來幫助客觀比較 offer:

首先,我參考了網路上一些 “how to choose among job offers” 的方法,並選擇了一些比較在意的指標,包含了 薪資、公司名聲、成長空間、bonus 等等,加起來約 10 個左右。

接著我為這些指標制定兩種量化分數的方式:分別是 1~5 分 或是 二分法的 0 或 1 兩種。以薪資指標為例,[x, x+4k] 的區間是 1 分、(x+4k, x+8k] 是 2 分,依此類推。另一種二分法的分數用在不確定性比較高的指標,例如 bonus 就算在 offer 已經明確寫出第一年是 10% 薪資了,也有可能因公司年度營運狀況而減少甚至取消,所以 bonus 的部分我沒有加進薪資一併計算,而是有 bonus 這項就 1 分、沒有就 0 分。

確立指標後可以把每個 offer 的得分計算出來,這時就能明顯感受到有些 offer 比其他選項好。建議最後不一定要選最高分的,如果前面幾個 offer 得分都只差 1, 2 分,那直接照直覺選喜歡的就可以了。

薪水談判

若想要最大化這段辛苦求職的效益,並已經拿到一個以上的 offer 的話,可以考慮使用手上有的 offer 跟每家公司做薪水談判,把薪資談更高。

薪水談判的基本原則是「你願意放棄手上任何一個 offer」。要是其中一個是夢幻工作的話就別談判啦,快接受 😂

談判當然伴隨著一些風險 — 最慘的是你可能會失去這個 offer。但站在公司的角度想,他們這段期間動用了許多人員的工作時間、面試了 10 個甚至 20 個以上的人才找到一個適任者(越資深的職位越難找人)。這個情況下「直接幫面試者加薪」比起「重新開始一輪面試」來的划算得多。

而我自己雖然拿了多個 offer ,但因為其中一家公司是我感興趣的產業,所以最後沒有做薪水談判就接受 offer 了。這邊建議有興趣的人 google 關鍵字 “offer salary negotiation”,網路上有很多文章分享。

(另外,除非特別註明,否則 offer letter 不算是機密文件,做談判時可以分享別家的 offer letter 給不同公司,這也是在證明面試者真的有拿到其他 competing offer。)

面試時程安排

面試時程安排的大原則是讓最後 offer 階段的 1 ~ 2 週間,手上同時有越多 offer 越好,以便比較不同 offer 或是做薪水談判。

通常越大的公司動作會越慢,有時候要等一兩個月才會收到回音及約定第一階段的 HR phone call。而跟中小型公司來往則會快很多,每個關卡約 3 天 ~ 1 週不等,整個流程能在 3~5 週內結束。

所以若這波求職是大公司及中小型公司一併投遞的狀況,建議流程為:

  • 先投遞大公司履歷。
  • 等 2 ~ 4 週讓大公司處理履歷。這段時間可以拿來刷題或是練英文口說。
  • 接著開始大量投遞中小型公司。
  • 接著是 3 ~ 5 週密集面試。你可能會發現第 1 週時一直在做 HR phone call。第 2, 3 週開始較多 technical interview,甚至有些流程比較快的公司已經面到 on-site。第 4, 5 週漸漸 on-site interview 比例已經大於 technical interview,此時若已經拿到夠多的 on-site interview 的話,就可以不用再約了 HR phone call 了,節省時間與心力。
  • 最後是 Salary Negotiation 與決定去向。

心得

2020 年 11 月的現在,我已經結束了倫敦的工作回到台灣生活了。

到現在回想起來都覺得投到 90 家公司是個很瘋狂的行為。這種海投策略當然有好處也有壞處。最大兩個的好處是:

  1. 把 pool 做大備案多,因此在被公司拒絕的心裡的焦慮感不會那麼大
  2. 最後接受的 offer 薪水比最先拿到的 offer 高了 £10k / yr 左右。

而最大的壞處就是 很 累。不只是體力上的累,還有準備不同類型面試的累、必須跟許多 HR / HH 保持聯絡的累、找理由拖延回覆 offer 的累、手機響都要接、對話內容都要做筆記、還有如何得體的拒絕 offer 之類雜七雜八的事情。

當然網路上也可以搜尋到很多不用經過那麼多關卡就拿到 offer 的面試經驗。這可能是因為我找的是 tier 2 sponsorship 的工作,公司需要為我負擔數千英鎊的簽證費用,所以在篩選上會比較謹慎。

以上分享自己的經驗,希望能反映一種類型的求職歷程,或許能幫助到需要的人,謝謝收看。

--

--

Responses (1)