预计会遇到的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基础,详见题库汇总。