想進入科技業當軟體工程師,面試關卡是最大的挑戰。不同於傳統面試只聊經歷和態度,軟體工程師面試會考驗你的程式能力、演算法思維、系統設計能力,甚至還有行為面試。準備不足的人,往往在第一關就被刷掉。
這篇文章整理了軟體工程師面試的完整準備攻略,從 LeetCode 刷題策略、資料結構基礎、系統設計準備、到行為面試技巧,讓你有系統地備戰,提高拿到 offer 的機率。
一、軟體工程師面試的四大關卡
科技公司的軟體工程師面試通常包含以下幾個階段:
1. 線上測驗(Online Assessment)
許多公司會先發一個線上測驗,通常是 1-3 題演算法題,限時 60-90 分鐘。這是第一道篩選,目的是過濾掉完全沒準備的人。常見平台包括 HackerRank、Codility、LeetCode。
2. 技術電話面試(Phone Screen)
通過線上測驗後,會有一輪電話或視訊面試。面試官會出一題演算法題,你需要在共享的線上編輯器(如 CoderPad)上即時解題,同時解釋你的思路。這關考驗的不只是解題能力,還有溝通能力。
3. 現場面試(Onsite Interview)
現場面試通常是 4-6 輪,每輪 45-60 分鐘,內容可能包括:
- 演算法與資料結構:2-3 輪,每輪解 1-2 題
- 系統設計:1 輪,設計一個大型系統(資深職位必考)
- 行為面試:1 輪,問你過去的經驗、如何處理衝突等
- 專業領域:有時會考你應徵領域的專業知識(如前端、後端、ML)
4. 團隊配對面試(Team Match)
部分公司在通過現場面試後,會有一輪團隊配對,讓你和不同團隊聊聊,雙向選擇最適合的組別。
二、LeetCode 刷題策略:不是越多越好
很多人聽到要準備軟體工程師面試,第一反應就是「狂刷 LeetCode」。但盲目刷題效率很低,你需要有策略地練習。
推薦的刷題數量與時間
根據過來人的經驗,一般建議:
- 新手:至少刷 100-150 題,準備時間 2-3 個月
- 有經驗:刷 70-100 題複習,準備時間 1-2 個月
- 高手:刷 50 題重點題型,準備時間 2-4 週
LeetCode 刷題的正確順序
不要從 Easy 一路刷到 Hard,應該按照題型分類來刷:
- 陣列與字串(Array & String):最基本,先從這裡開始
- 雙指標(Two Pointers):很常考,必須熟練
- 滑動視窗(Sliding Window):中等難度常見題型
- 雜湊表(Hash Map):快速查找的利器
- 堆疊與佇列(Stack & Queue):括號匹配、BFS 必備
- 鏈結串列(Linked List):指標操作要練熟
- 樹與圖(Tree & Graph):遍歷、DFS、BFS
- 動態規劃(Dynamic Programming):最難但最常考
- 回溯法(Backtracking):排列組合問題
- 貪婪演算法(Greedy):局部最優解
每題要練到什麼程度?
不是「做出來」就好,而是要達到以下標準:
- 看到題目,15 秒內知道要用什麼方法
- 能在 15-20 分鐘內寫出 bug-free 的程式碼
- 能清楚解釋時間複雜度和空間複雜度
- 能說出至少一種優化方法或替代解法
推薦刷題清單
以下是面試高頻題,建議優先練習:
- Blind 75:75 題經典題,涵蓋所有題型,適合時間有限的人
- NeetCode 150:Blind 75 的延伸版,多了一些補充題
- LeetCode Top 100 Liked:最多人按讚的題目,代表常考
三、資料結構與演算法基礎
刷題之前,你需要先把基礎打好。如果連基本的資料結構都不熟,刷題只會事倍功半。
必須精通的資料結構
| 資料結構 | 核心操作 | 常見應用 |
|---|---|---|
| 陣列(Array) | 存取 O(1)、插入刪除 O(n) | 幾乎所有題目的基礎 |
| 鏈結串列(Linked List) | 插入刪除 O(1)、查找 O(n) | 反轉、合併、找環 |
| 雜湊表(Hash Map) | 存取/插入/刪除 O(1) | 計數、快速查找 |
| 堆疊(Stack) | LIFO,push/pop O(1) | 括號匹配、單調堆疊 |
| 佇列(Queue) | FIFO,enqueue/dequeue O(1) | BFS、滑動視窗 |
| 堆積(Heap) | 取最大/最小 O(1)、插入 O(log n) | Top K 問題、優先佇列 |
| 樹(Tree) | 遍歷 O(n)、查找 O(log n) | BST、二元樹遍歷 |
| 圖(Graph) | DFS/BFS O(V+E) | 最短路徑、連通性 |
必須熟練的演算法
- 排序:Quick Sort、Merge Sort 的原理和實作
- 搜尋:Binary Search 的各種變體
- 遍歷:DFS、BFS 的遞迴與迭代寫法
- 動態規劃:自頂向下(記憶化)與自底向上(表格法)
- 貪婪演算法:區間問題、活動選擇
四、系統設計面試準備
系統設計面試是中高級工程師必考的項目。即使是初級工程師,也建議了解基本概念,因為有些公司會考簡化版的設計題。
系統設計面試在考什麼?
面試官想看的是你的:
- 需求分析能力:能否釐清模糊的需求
- 架構設計能力:能否設計可擴展的系統
- 技術深度:能否解釋每個選擇背後的原因
- 權衡取捨能力:能否在不同方案間做出合理選擇
系統設計的標準流程
- 需求釐清(5 分鐘):問清楚功能需求和非功能需求(QPS、延遲、可用性)
- 估算(5 分鐘):估算流量、儲存、頻寬需求
- 高層架構(10 分鐘):畫出主要元件和資料流
- 深入設計(15 分鐘):選擇 1-2 個元件深入討論
- 瓶頸與優化(5 分鐘):討論潛在問題和解決方案
必須知道的系統設計概念
- 負載均衡(Load Balancer):Round Robin、Least Connections
- 快取(Caching):Redis、Memcached、CDN
- 資料庫:SQL vs NoSQL、分片(Sharding)、主從複製
- 訊息佇列(Message Queue):Kafka、RabbitMQ、解耦非同步
- 微服務(Microservices):服務拆分、API Gateway
- CAP 定理:一致性、可用性、分區容錯的取捨
常見系統設計題目
- 設計 URL 縮短服務(TinyURL)
- 設計 Twitter / Facebook Feed
- 設計即時通訊系統(WhatsApp)
- 設計網頁爬蟲(Web Crawler)
- 設計搜尋自動完成(Autocomplete)
- 設計分散式檔案儲存(Dropbox)
五、行為面試(Behavioral Interview)技巧
很多工程師只準備技術題,忽略行為面試,結果技術過了卻在這關被刷掉。行為面試考的是你的軟實力和文化契合度。
STAR 法則回答問題
行為面試的標準答題框架是 STAR:
- S(Situation):描述當時的情境和背景
- T(Task):說明你的任務或目標
- A(Action):詳細描述你採取的行動
- R(Result):分享最終結果,最好有數據
常見行為面試問題
- 說說你最有成就感的專案
- 描述一個你和同事意見不合的情況,你怎麼處理的?
- 說說一個你犯過的錯誤,以及你從中學到什麼
- 你如何處理緊急的 deadline?
- 為什麼想加入我們公司?
準備 5-7 個故事
建議準備 5-7 個工作或專案的故事,每個故事要能展現不同的特質:
- 領導力 / 主動性
- 團隊合作
- 解決衝突
- 面對挑戰
- 學習成長
六、面試當天的實戰技巧
解題時的溝通技巧
- 先釐清問題:不要急著寫 code,先問清楚輸入輸出、邊界條件
- 說出思路:在動手寫之前,先口述你的解法,讓面試官知道你的方向
- 從暴力解開始:先說最直觀的解法,再討論如何優化
- 邊寫邊說:寫 code 的過程中持續解釋你在做什麼
- 測試你的程式碼:寫完後用簡單的測試案例走一遍
卡住時怎麼辦?
- 不要沉默超過 30 秒,說出你目前的想法和卡住的點
- 嘗試用更簡單的例子思考
- 問面試官能否給一點提示(這不會扣分,但不要太依賴)
- 換個方向思考:有沒有類似的題型?
面試禮儀
- 準時上線 / 到場(建議提早 5 分鐘)
- 保持網路穩定,測試好攝影機和麥克風
- 準備紙筆記錄重點
- 面試結束後發一封感謝信
七、準備時程建議
3 個月準備計畫(適合新手)
| 週數 | 重點 |
|---|---|
| 第 1-2 週 | 複習資料結構與演算法基礎 |
| 第 3-6 週 | 每天刷 3-5 題,按題型分類練習 |
| 第 7-8 週 | 系統設計基礎,每週練 2 個設計題 |
| 第 9-10 週 | 模擬面試(找朋友或用 Pramp) |
| 第 11-12 週 | 複習弱點、準備行為面試、投履歷 |
1 個月衝刺計畫(適合有經驗者)
| 週數 | 重點 |
|---|---|
| 第 1 週 | Blind 75 快速過一遍 |
| 第 2 週 | 重點題型加強、系統設計複習 |
| 第 3 週 | 模擬面試、修正弱點 |
| 第 4 週 | 行為面試準備、公司研究 |
八、推薦學習資源
刷題平台
- LeetCode:最主流,題目最多,有討論區
- NeetCode:有分類和影片講解,適合入門
- AlgoExpert:付費但講解清楚,適合趕時間的人
系統設計資源
- System Design Interview(Alex Xu 著):最推薦的系統設計書
- Designing Data-Intensive Applications:深入了解分散式系統
- ByteByteGo(YouTube):系統設計影片講解
模擬面試
- Pramp:免費,和其他求職者互相模擬面試
- Interviewing.io:匿名和真實工程師模擬面試
結語:面試是場馬拉松,不是短跑
軟體工程師面試的準備確實需要投入大量時間和精力,但這是值得的投資。不要被刷題數量嚇到,重點是有策略地準備,而不是盲目刷題。
記住幾個關鍵:
- 按題型分類練習,比隨機刷更有效率
- 每題要練到能「教別人」的程度
- 系統設計需要長期累積,早點開始
- 行為面試不要忽略,準備好你的故事
- 模擬面試非常重要,找人練習
祝你面試順利,拿到心儀的 offer!
圖片來源:Photo by Ofspace LLC on Unsplash