更新於 2024/11/13閱讀時間約 8 分鐘

準備北美軟體工程師面試時用的資源整合

當初由香港來到加拿大找軟體工程師工作時,第一個問題就是不知道這邊的面試問什麼、面試的模式、面試官期望在應徵者身上看到什麼…

花了一個星期大概了解北美面試的結構後,到了真正面試時又發現跟認知的有些少出入,導致頭幾次面試都是在浪費機會。

經過2個多月的研究和親身試錯後,我整合了一條為準備軟體工程師面試的資源清單,最後亦附上一些有助學習和面試準備的工具,希望對各位正在努力找工作的朋友有幫助。


軟體工程師面試考核內容

北美的軟體工程師面試主要考核內容包括:

  1. 數據結構和算法 (Data Structure and Algorithms)
  2. 系統設計 (System Design)
  3. 行為問題 (Behavioral Questions)

數據結構和算法 (Data Structure and Algorithms)

大部份從香港來的軟體工程師感受應該都很深刻,由知道北美面試會有Live Coding,到開始在Leetcode做第一條簡單(Easy)的題目,然後發現自己竟然連簡單的題目都卡關(!?)的時候就懷疑自己在香港幾年寫程式的經驗是不是都是白過的。

同樣是寫程式,香港對工程師的要求可謂與眾不同,香港的工程師普遍十八般武藝樣樣都會,由寫程式碼,到前後端開發、系統設計、雲端技術、專案管理、團隊管理,但就是沒有一項精通。香港的面試也不太著重技術上的考核,更不用說Live Coding、White Boarding這類題目。

數據結構和算法可以說是我當初花最多時間惡補的地方,我主要利用Google的Tech Dev Guide學習,這平台包含了不同數據結構的教學,有文章、影片、寫程式練習和測驗,對初學者是不錯的學習資源。

另外有部份我想了解更深入的,或者是指定的Leetcode題目,我會在YouTube找教學,其中我比較喜歡的是William Fiset的影片,他會由淺入深地解釋算法的概念,利用不同例子去演練算法,而且他的影片以英文錄製,有助我習慣面試的語言。

我自問看了他頻道裏差不多7成的影片,唯一感覺解釋得不太清楚,或者是我聽不懂的是競爭性編程(Competitive Programming)類的題目,不過這類題目在面試出現的機會不高,聽不懂的跳過就算了。

在Live Coding方面,我主要使用2個平台練習題目:

  1. leetcode.com
  2. www.hackerrank.com

由簡單(Easy)開始,感覺自己掌握了解題方式就向中等(Medium)和困難(Hard)邁進,大部份公司的面試題目都落在這2個難度。每天刷1–2小時,先以量為目標,對每種題目都有個印象後再逐漸加插時限、算法複雜度、空間複雜度的挑戰。


系統設計 (System Design)

我在香港工作的時候也有負責過系統設計,但是每家公司都有自己一套的框架和設計步驟,是先由資料庫開始還是由API開始?以往我都是先查看團隊以前的系統設計文件,再大概跟隨前人的步伐著手。

雖然系統設計有“設計”這2只字,意昧著創意的意思?但其實市場上有一套大家都默認的解題方式,未接觸過系統設計面試的我建議先看幾段示範影片,初步了解面試官期望怎樣去釐清題目、由哪方面著手,需要畫什麼…

喜歡文字版本的可以參考:

如果你應徵的是AWS、GCP或Azure團隊,或者你知道公司主要應用某一個雲端平台的話,可以溫習以下資源:

系統設計面試通常會以白板 (White Boarding) 的形式應考,線下面試有人會買白板在家練習,線上面試可試用以下2個工具:

線上白板工具功能都大同小異,所以選用哪一個關係不大,我只是視它為練習Think Out Loud的工具,熟悉如何一邊思考一邊畫圖解題。


行為問題 (Behavioral Questions)

行為問題並不是專屬於軟體工程師面試,隨便在Google上搜尋一下就會有成千上萬的題庫,不少人亦會在LinkedIn、Indeed等工作平台分享。

我自己在面Amazon後發覺其實不同公司問的行為題目都相差無幾,所以無頭緒要準備什麼的可以先由Amazon的Leadership Principles開始:


學習和面試工具

當我知道兩地在面試要求的差距後,我明白了準備面試是一段漫長且艱苦的旅程,大學一個學期是3個月,這邊找工作大家都說要3個月起跳,所以在準備期間我使用了以下這些工具,協助整理學習的資料。

Google Document / Google Sheets

由於大部份軟體工程師面試都在線上進行,我在面試前會準備有機會用到的資料,例如行為問題的要點、公司背景、要問面試官的問題,一一寫在Google Document上。面試時分拆螢幕做上下或左右兩邊,一邊是面試用到的會議軟件,一邊是Google Document。

有人亦建議用Google Sheets加上篩選功能,在遇到不熟悉的問題時使用篩選功能快速查找預先準備的資料/答案,我個人偏好Google Document左邊的選單/導覽列,在考官發問後能讓我在2–3秒內找到相關資料,再不行就Ctrl+F搜尋,總比沒任何準備好得多。

抽認卡/閃卡 (Flash Card)

身為一位全端工程師,半年前的我無論是前端還是後端的職位都應徵過。曾經有一次技術面試是應徵C#後端加React前端的全端工程師職位,為了準備面試我重新把Javascript的基礎重溫一遍,例如Event Loop、ES6、Promise等等。途中發現很多概念在溫習過幾天後就忘記,於是便尋找一些製作抽認卡(Flash Card)的工具。

抽認卡是不少學校在教學中會用到的工具,尤其是語言、歷史課,在卡面寫問題,卡底寫答案。溫習時抽取一張解答,從而鞏固學習記憶。

製作抽認卡我推薦使用Memo.cards,不用半小時,它就可以從PDF/YouTube影片/文字/錄音中生成抽認卡,直接在它們家網頁使用。

以下我以在Google上找到的Effective Java Third Edition為例子生成抽認卡模擬準備Java工程師的面試。

它有免費的試用版,註冊會員後選擇“New Deck”。

選擇PDF後上載文件。

免費版只支援最多50,000字的文件,這次我選取章節10 Exceptions的頁數,剛好在字數限制內。

系統在讀取文件後左邊會顯示文件預覽,右邊選擇“AI-Generated”。

最上邊可以看到除了抽認卡外,它們還支援生成多項選擇題和填空題,可根據不同喜好選擇。

選取“Standard”後按“Next”。

按“Render Topics”後系統就會開始生成一些題目,按“Confirm and Generate Cards”確認。

系統正在炮製我的抽認卡…

叮噹!新鮮滾熱辣的抽認卡就這樣出爐了!由上載PDF、到設定、生成抽認卡,整個過程不用半小時。

按右上的“Flash Card”,選擇要不要所有題目和開啟隨機模式後按“Review”。

然後就開始溫習了(已經不想再回到要為面試準備的那段時光😭)


以上是我在準備面試時用到的資源和工具,希望對各位正在為面試準備的同行有幫助!


我平常有在Medium上分享我在移居加拿大後的生活,遇到的難題和解決辦法,有興趣閱讀更多我的文章的話可以造訪我的Medium專頁

分享至
成為作者繼續創作的動力吧!
© 2024 vocus All rights reserved.