Skip to content

高频面试题

谈谈你了解的最常见的几种设计模式,说说他们的应用场景。

面试官问这题,通常不是要一个孤立定义,而是看你能否把概念、机制、场景和工程风险连起来。

适合阶段:前端开发 / 一面到二面核心能力:抽象能力 · 模式适用边界 · 代码可维护性

面试官想考什么

  • 你能不能先给出清晰定义?
    考察是否理解这个概念解决的真实问题,而不是只背 API 名称。
  • 你是否知道它的运行机制和关键流程?
    考察是否能从浏览器、框架运行时、构建链路或网络链路解释原因。
  • 你能不能说出适用场景和不适用场景?
    考察工程取舍意识,避免把一种方案当万能答案。
  • 你有没有生产落地经验?
    考察异常兜底、性能影响、可维护性、调试手段和团队协作边界。

一句话回答

text
设计模式是对变化点的命名和隔离,价值在于让代码在扩展时少改旧逻辑。

面试回答详解

这道题的核心不是把文档里的概念复述一遍,而是讲清楚:它为什么存在、内部大致怎么工作、什么时候该用,以及在线上项目中有哪些坑。

1. 先明确它解决什么问题

设计模式是对变化点的命名和隔离,价值在于让代码在扩展时少改旧逻辑。

在面试现场可以先用一句话建立边界:它不是单纯的语法点,而是为了解决某类工程问题。这样回答会比直接罗列 API 更稳。

text
业务需求 / 用户操作 -> 前端抽象或运行时机制 -> 状态变化 / DOM 更新 / 网络交互 -> 可验证的页面结果

2. 说明核心机制

回答要讲参与者、调用流程、典型前端场景、替代方案和过度设计风险。

如果题目涉及框架能力,要尽量说明编译期和运行时分别做了什么;如果题目涉及浏览器或网络,要说明请求、缓存、连接、渲染和事件循环之间的关系;如果题目涉及工程化,要说明源码如何被转换、拆分、缓存和发布。

3. 讲清它和相邻概念的区别

  • 概念边界:不要把语法糖、运行时机制和工程策略混成一件事。
  • 使用频率:高频操作更关注性能和状态复用,低频操作更关注代码清晰度。
  • 控制位置:有些问题应该由框架解决,有些应该由业务代码、构建配置或服务端配合解决。
  • 验证方式:能用类型、单测、E2E、性能指标或线上监控验证的,不要只靠人工感觉。

4. 讲工程取舍

成熟答案要能说清适合场景、不适合场景、维护成本、性能成本和团队协作成本。

常见判断方式是先看需求是否稳定、数据量是否可控、团队是否需要复用、是否会影响首屏和交互延迟。如果只是小范围一次性需求,简单实现通常更好;如果是跨页面、跨团队复用能力,就要补齐 API 设计、文档、测试和降级策略。

5. 讲生产落地和风险控制

生产落地时要关注异常处理、兼容性、可观测性、回归测试和用户体验。

落地时建议至少做四件事:第一,明确输入输出契约;第二,补充错误态和空态;第三,用开发工具或监控确认性能影响;第四,把容易回归的行为沉淀成测试用例。面试官更想听到这种闭环,而不是只听“我会使用某个 API”。

可直接背诵的 30 秒回答

text
我会先把这题理解成一个工程问题,而不只是语法点。设计模式是对变化点的命名和隔离,价值在于让代码在扩展时少改旧逻辑。 实际使用时,我会关注它的触发条件、状态变化和最终渲染结果,同时说明和相近方案的区别。落地上还要看数据规模、性能成本、异常兜底和团队维护成本,不能只说“能实现”,还要说明为什么这样实现更合适。

扩展知识

一个通用回答框架

text
定义 -> 机制 -> 场景 -> 取舍 -> 风险 -> 验证

常见答题误区

  • 只背 API,不解释它解决的工程问题。
  • 只说优点,不说代价和边界。
  • 只讲前端实现,不提浏览器、网络、构建或服务端配合。
  • 只说“可以优化”,没有指标、工具和验证方法。

面试官追问链

追问一:如果线上出现异常,你会怎么排查?

  • 考察点:是否具备真实项目的问题定位能力。
  • 回答方向:先复现问题,再看控制台、网络请求、性能面板、日志和监控;能缩小到输入、状态、渲染、网络或构建哪一层,再决定修复方式。

追问二:这个方案有什么缺点?

  • 考察点:是否知道技术方案的边界。
  • 回答方向:从复杂度、性能、兼容性、可测试性、团队理解成本和长期维护成本说明,不要把任何方案说成绝对最优。

追问三:如果数据量或访问量变大,你会如何调整?

  • 考察点:是否能从小功能扩展到生产场景。
  • 回答方向:引入分层设计、缓存、懒加载、分页或虚拟列表;必要时把计算、校验和聚合下沉到服务端,并用指标验证优化效果。

推荐阅读

基于 MIT 协议开源