預計會遇到的Angular面試問題
作者 Aaron Cao · 更新於

首先會問變更偵測:什麼會觸發一次檢查、OnPush改變了什麼,以及signals如何融入其中。接著是相依性注入、RxJS操作子選擇和訂閱清理。大多數面試流程還會加入一個實作練習,通常是用service、debounceTime和switchMap打造的自動完成搜尋。
最常被問到的Angular概念是什麼?
Angular的API範圍很大,網路上流傳的面試題清單常把每個裝飾器都當成同等重要,實際上並非如此。本節整理真正決定大多數面試結果的領域,讓你的練習更貼近真實分布。四大類問題最為關鍵:
- 變更偵測:什麼會觸發檢查、Zone.js如何為非同步API打補丁、
OnPush改變了什麼,以及signals如何讓Angular跳過部分工作。 - 相依性注入:階層式注入器、
providedIn、注入權杖,以及inject()函式與建構函式參數的對比。 - RxJS:observable與promise的差異、如何選擇合適的操作子,以及在元件銷毀前清理訂閱。
- 元件架構:獨立元件、輸入輸出屬性、內容投影,以及生命週期鉤子。
版本意識在這裡比在大多數框架面試中更重要,因為Angular改變了方向。獨立元件、內建控制流區塊@if和@for、可延遲檢視,以及signals都是在近期主要版本中加入的,因此面試官常會問你現在會怎麼寫,並與舊程式碼庫的寫法做對比。同時了解兩者,並說明框架為何轉向,會比單純選邊站更有說服力。
RxJS和signals相關問題會問到多深?
遠不只是操作子的名字。真正區分程度的RxJS問題,是該選哪個扁平化操作子:switchMap會取消前一個內部請求,適合自動完成搜尋;mergeMap並行執行所有請求;concatMap會保持順序;而exhaustMap在有請求進行中時會忽略新事件,因此適合提交按鈕。接著面試官會問洩漏問題:手動訂閱在元件銷毀時會發生什麼,以及為什麼async pipe或takeUntilDestroyed能消除這個問題。
signals相關問題較新,通常會從設計動機而非API本身問起。要能解釋什麼是signal、computed如何從中衍生、effect的用途,以及為什麼signals能讓Angular以更細緻的方式知道發生了什麼變化,而不必重新檢查整個元件樹。好的回答會把兩者連結起來:signals和OnPush都能減少變更偵測的工作量,但signals是靠追蹤讀取來實現,而不是縮小檢查觸發的範圍。
面試官並不期待你已經用過每一項最新功能上線過專案。他們期待你說明自己最近使用的版本,並對其餘部分做出清楚的推理。
應該預期哪些現場程式練習?
大多數Angular面試流程都包含在面試官注視下建置一個小功能。反覆出現的練習在各家公司之間相當一致:
- 從service呼叫API,並用async pipe渲染結果。
- 用
debounceTime、distinctUntilChanged和switchMap打造自動完成搜尋。 - 撰寫帶自訂驗證器和可見錯誤狀態的反應式表單。
- 在父子元件之間傳遞資料,再把它提升到service中。
- 加入一條帶延遲載入元件與守衛的路由。
舉例來說,一位面試中階產品職缺的前端工程師可能會先打造自動完成搜尋,接著被追問:回應不按順序抵達時會發生什麼、如何顯示載入狀態、使用者清空輸入框時該怎麼處理。這些延伸問題才是決定面試結果的關鍵,因此要多練習這些追問,而不只是練順利路徑。Angular面試仍常以相鄰題型開場,包括純JavaScript和TypeScript基礎,詳見題庫中心。