一、性能优化的核心思想
先发现问题 → 再定位瓶颈 → 最后优化
不要盲目优化!优化顺序:
- 前端/接口
- 代码层
- 数据库层
- 中间件层
- 架构层
二、架构设计五大原则(面试必说)
- 高可用:不宕机、集群、冗余
- 高性能:响应快、吞吐量高
- 高扩展:方便加功能、加机器
- 高安全:防攻击、防注入、权限控制
- 可监控:日志、告警、链路追踪
三、性能优化五大方向(最实战)
1. 接口性能优化(最常用)
- 减少接口响应时间(目标 200ms 内)
- 避免循环调用数据库
- 异步处理:使用 MQ、线程池
- 分页、只查需要的字段
- 合并请求、减少网络开销
- 接口限流,防止被打垮
2. 代码层优化
- 减少创建对象,使用池化技术
- 集合选择正确(ArrayList vs LinkedList)
- 避免死循环、O(n²) 算法
- 线程池合理设置
- 使用流式编程、并行流
- 日志合理打印,避免频繁IO
3. 数据库优化(重中之重)
- 加索引(最有效)
- 避免索引失效(like %xx、null 判断、类型转换)
- SQL 优化:避免 select *、避免子查询
- 分库分表、读写分离
- 事务控制:缩小事务粒度
- 慢查询监控与优化
4. 缓存优化(Redis)
- 热点数据全部缓存
- 解决三大问题:
- 缓存穿透 → 布隆过滤器 / 缓存空值
- 缓存击穿 → 互斥锁 / 热点永不过期
- 缓存雪崩 → 过期时间随机 + 集群 + 降级
- 合理设置过期时间
5. 架构层面优化
- 读写分离
- 服务拆分(微服务)
- 异步解耦(MQ)
- 分布式锁、分布式事务
- 网关、负载均衡
- 服务熔断、限流、降级
四、架构设计常用方案(背会直接面试)
1. 高并发架构
- 缓存 + 异步 + 分库分表 + 扩容
- 读写分离 + 多级缓存
- 消息队列削峰
2. 高可用架构
- 集群部署
- 异地多活
- 熔断、降级、限流
- 重试、超时控制
- 监控告警
3. 高扩展架构
- 模块化、服务化
- 配置中心
- 开闭原则
- 松耦合
五、性能优化工具(必须会)
- Arthas:阿里Java诊断工具(排查性能神器)
- JMeter:接口压测
- Prometheus + Grafana:监控
- SkyWalking:分布式链路追踪
- MySQL Explain:SQL分析
- GC日志:JVM调优
六、高频面试题(标准答案)
1. 你们项目如何做性能优化?
标准回答模板:
- 先压测,找到瓶颈
- 优化SQL、加索引
- 引入Redis缓存
- 异步化、使用消息队列
- 优化代码、减少循环查询
- 分库分表、服务拆分
- 扩容机器、负载均衡
2. 接口响应慢怎么排查?
- 看日志
- 看是否慢SQL
- 看是否死锁、线程阻塞
- 看是否缓存未命中
- Arthas 排查方法耗时
3. 高并发下如何保证系统不崩溃?
- 缓存
- 限流
- 熔断降级
- 消息队列削峰
- 扩容
- 读写分离
4. 如何设计一个高可用架构?
- 集群
- 负载均衡
- 异地多活
- 熔断、降级、限流
- 监控、告警、自动扩容
七、最精简总结(背会就够)
架构 = 高可用 + 高性能 + 高扩展
优化 = 缓存 + 异步 + 索引 + 拆分 + 扩容