預計會遇到的Angular面試問題

作者 Aaron Cao · 更新於

預計會遇到的Angular面試問題
首先會問變更偵測:什麼會觸發一次檢查、OnPush改變了什麼,以及signals如何融入其中。接著是相依性注入、RxJS操作子選擇和訂閱清理。大多數面試流程還會加入一個實作練習,通常是用service、debounceTime和switchMap打造的自動完成搜尋。

首先會問變更偵測:什麼會觸發一次檢查、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渲染結果。
  • debounceTimedistinctUntilChangedswitchMap打造自動完成搜尋。
  • 撰寫帶自訂驗證器和可見錯誤狀態的反應式表單。
  • 在父子元件之間傳遞資料,再把它提升到service中。
  • 加入一條帶延遲載入元件與守衛的路由。

舉例來說,一位面試中階產品職缺的前端工程師可能會先打造自動完成搜尋,接著被追問:回應不按順序抵達時會發生什麼、如何顯示載入狀態、使用者清空輸入框時該怎麼處理。這些延伸問題才是決定面試結果的關鍵,因此要多練習這些追問,而不只是練順利路徑。Angular面試仍常以相鄰題型開場,包括純JavaScript和TypeScript基礎,詳見題庫中心

怎麼練習才能真正用到實戰面試中?

閱讀問題清單只能建立辨識能力,而不是回憶能力,而面試考驗的正是有人注視下的回憶能力。解法是依照面試的真實形式反覆練習:從空白專案開始建置標準練習題,一邊打字一邊大聲說出你的變更偵測與訂閱決策,並在被打斷時仍能不失去思路。把整組題目當作口說演練來練習,一次一題並附帶追問,這正是模擬面試練習的用途。

有一點值得說清楚:Angular現場面試幾乎總是在共享編輯器中進行,或是畫面對面試官可見,畫面上的一切面試官都看得到。助手適合用在準備階段和以對話為主的面試環節,而不是共享畫面上。哪些形式允許什麼,詳見面試類型

常見問題

還需要了解NgModules嗎?

達到能讀懂的程度就需要。仍有大量正式環境的Angular程式碼運行在NgModules上,因此要能回答一個模組宣告了什麼、providedIn如何取代了大多數provider陣列。而關於新程式碼的問題會圍繞獨立元件展開,這是近期版本的預設方式。

AngularJS和Angular是同一個東西嗎?

不是,面試官有時會特意確認這一點。AngularJS是1.x系列,使用scope、digest週期和controller。從版本2開始的Angular是基於TypeScript和元件的獨立框架。如果職缺描述寫的是AngularJS,準備之前先確認對方指的是哪一個。

如果團隊使用signals,還需要掌握多少RxJS?

仍然需要掌握很多。signals能很好地涵蓋元件狀態,但HTTP呼叫、路由事件和表單值串流仍然是observable,因此操作子選擇和清理仍會不斷被問到。團隊通常兩者都用,說明各自適用場景是常見的資深問題。

面試官會問測試相關的問題嗎?

通常是問測試策略,而不是死背API。要能說明你會在元件層級測試什麼、與端對端測試的對比,TestBed如何搭建一個元件,以及如何偽造一個service。說清楚取捨比背出某個matcher更重要。

應該能討論多少個Angular版本?

你實際用過的那個版本,加上此後發生的變化。面試官問獨立元件、控制流區塊和signals,是因為這些答案能體現你的經驗是否新。說明你最近上線用的版本,並對其餘部分做出推理,就是一個完整的回答。

相關問題

← 更多關於 依職位與主題分類的面試問題