Yihui’s Blog

除了代码,还有哪些地方可以优化性能?

日期:2026-07-12
标签:#面试 #八股 #后端 #性能优化 #场景题

一句话答案

性能是端到端系统属性,除代码外还可从产品需求、架构、数据、缓存、网络、运行时、操作系统、硬件、部署和容量治理优化。

面试口语版

我会先基于 Trace 和指标找瓶颈,不按清单盲调。产品层可减少不必要字段、改同步为异步或预计算;架构层用缓存、读模型、批量和削峰;数据库优化索引、SQL、连接池和冷热分层;网络用 CDN、压缩、连接复用和就近部署;JVM 调堆、GC、线程池并减少容器 throttling;操作系统看文件描述符、TCP、磁盘调度和 NUMA;硬件选择更合适的 CPU、内存、NVMe 和带宽。最后通过容量规划、预热、限流和自动扩容保持稳定,而不是只追求单次最快。

优化层次

层次典型手段
产品/协议减少工作量、分页、异步、压缩
架构缓存、预计算、批处理、削峰
数据索引、分区、读写分离、OLAP
运行时GC、线程池、连接池、对象分配
基础设施CDN、就近部署、硬件、OS 参数

关键细节

  • 先优化最大瓶颈,局部加速不一定改善端到端延迟。
  • 吞吐、延迟、成本和一致性通常互相制约。
  • 参数调整必须在真实负载压测并可回滚。
  • 观察 P99、饱和度和错误率,不只看平均值。

面试官追问

  1. 如何确定先优化哪一层?
  2. 加机器一定能解决性能问题吗?
  3. 缓存优化有什么代价?

面试官追问参考答案

1. 如何确定先优化哪一层?

用端到端 Trace、CPU/内存/I/O 饱和度和依赖指标定位关键路径,占比最大且可优化的阶段优先。建立基线后一次改变一个因素,用 P99 和资源对比验证。

2. 加机器一定能解决性能问题吗?

无状态应用 CPU 饱和且可水平扩展时有效;数据库锁、热点 Key、串行临界区、外部限额和算法复杂度不会因简单扩应用机器消失。扩容只能缓解可并行资源瓶颈。

3. 缓存优化有什么代价?

会引入一致性、失效、冷启动、穿透、热点和额外运维成本,并占用内存。应明确可接受陈旧时间、事实源和故障降级,不能把缓存当永久数据库。

学习清单

  • 能从端到端视角列出优化层次。
  • 理解性能、成本与一致性的权衡。
维护与整理 · Yihui在 GitHub 上编辑

继续阅读

浏览全部文章