前端系统设计通用答题框架
1. 先澄清需求
不要听到“设计一个后台系统”就立即画组件树。先确认:
- 核心用户和最重要的操作是什么?
- 数据规模、并发量、更新频率如何?
- 首屏、交互延迟和可用性的目标是什么?
- 是否需要 SEO、离线、实时协作、国际化?
- 浏览器、移动端和旧设备兼容范围是什么?
- 多团队是否需要独立发布?
如果面试官不给数字,可以主动声明合理假设,并说明数字变化后哪些设计会改变。
2. 给出高层结构
先让面试官看到页面、数据和外部系统的边界,再逐层深入。
3. 设计组件与状态
状态通常分为:
- URL 状态:筛选、分页、当前视图,适合分享和前进后退。
- 服务端状态:接口数据、缓存、加载和错误状态。
- 全局客户端状态:用户、主题、权限等跨页面状态。
- 局部状态:表单输入、弹窗和单组件交互。
不要把所有状态都放进 Redux/Pinia。重点说明状态的所有者、生命周期、更新来源和一致性要求。
4. 设计数据流
至少说明:
- 接口粒度及 REST、GraphQL、BFF 的选择。
- 请求缓存、过期、去重和取消策略。
- 分页、游标、增量更新和预取。
- 乐观更新、失败回滚和冲突处理。
- 弱网、断网与重连。
5. 性能预算
把“性能优化”变成可验证指标:
- LCP、INP、CLS 目标。
- 首屏 JavaScript 和关键资源体积。
- 列表最大 DOM 数量。
- 单次主线程任务耗时。
- 实时消息处理频率和内存上限。
然后再选择代码分割、虚拟列表、Worker、缓存、SSR 等手段。
6. 稳定性与安全
- 错误边界、降级 UI、超时与重试。
- 日志、错误、性能和业务指标。
- 版本灰度、功能开关与快速回滚。
- XSS、CSRF、CSP、鉴权和权限校验。
- 敏感数据脱敏,不在客户端保存秘密。
7. 演进与取舍
优秀答案会明确:
- 当前规模下为什么选择简单方案。
- 规模扩大后的瓶颈在哪里。
- 何时才值得引入微前端、GraphQL 或复杂状态管理。
- 哪些指标能证明需要升级架构。
回答模板
我会先确认用户、数据规模和性能目标;然后画出页面、数据服务与实时通道的边界。状态按 URL、服务端、全局和局部拆分,接着设计缓存、一致性及错误恢复。最后用性能预算、监控、灰度和安全策略收口,并说明当前方案的瓶颈和后续演进条件。