日期:2026-07-12
标签:#面试 #八股 #后端 #性能优化 #场景题
一句话答案
性能是端到端系统属性,除代码外还可从产品需求、架构、数据、缓存、网络、运行时、操作系统、硬件、部署和容量治理优化。
面试口语版
我会先基于 Trace 和指标找瓶颈,不按清单盲调。产品层可减少不必要字段、改同步为异步或预计算;架构层用缓存、读模型、批量和削峰;数据库优化索引、SQL、连接池和冷热分层;网络用 CDN、压缩、连接复用和就近部署;JVM 调堆、GC、线程池并减少容器 throttling;操作系统看文件描述符、TCP、磁盘调度和 NUMA;硬件选择更合适的 CPU、内存、NVMe 和带宽。最后通过容量规划、预热、限流和自动扩容保持稳定,而不是只追求单次最快。
优化层次
| 层次 | 典型手段 |
|---|---|
| 产品/协议 | 减少工作量、分页、异步、压缩 |
| 架构 | 缓存、预计算、批处理、削峰 |
| 数据 | 索引、分区、读写分离、OLAP |
| 运行时 | GC、线程池、连接池、对象分配 |
| 基础设施 | CDN、就近部署、硬件、OS 参数 |
关键细节
- 先优化最大瓶颈,局部加速不一定改善端到端延迟。
- 吞吐、延迟、成本和一致性通常互相制约。
- 参数调整必须在真实负载压测并可回滚。
- 观察 P99、饱和度和错误率,不只看平均值。
面试官追问
- 如何确定先优化哪一层?
- 加机器一定能解决性能问题吗?
- 缓存优化有什么代价?
面试官追问参考答案
1. 如何确定先优化哪一层?
用端到端 Trace、CPU/内存/I/O 饱和度和依赖指标定位关键路径,占比最大且可优化的阶段优先。建立基线后一次改变一个因素,用 P99 和资源对比验证。
2. 加机器一定能解决性能问题吗?
无状态应用 CPU 饱和且可水平扩展时有效;数据库锁、热点 Key、串行临界区、外部限额和算法复杂度不会因简单扩应用机器消失。扩容只能缓解可并行资源瓶颈。
3. 缓存优化有什么代价?
会引入一致性、失效、冷启动、穿透、热点和额外运维成本,并占用内存。应明确可接受陈旧时间、事实源和故障降级,不能把缓存当永久数据库。
学习清单
- 能从端到端视角列出优化层次。
- 理解性能、成本与一致性的权衡。