面试

面试题汇总(性能优化)

2019-11-03  本文已影响0人  王勇1024

木桶原理(短板理论)

一个木桶盛水多少,并不取决于桶壁上最高的那块木块,而是取决于桶壁最短的那块。

性能调优的层次

  1. 设计调优
  2. 代码调优
  3. JVM调优
    JVM堆大小、垃圾回收策略等。
  4. 数据调优
  1. 操作系统调优

基本调优策略和手段

系统性能调优的最主要目的就是查找并解决性能瓶颈问题

  1. 有明确的性能目标,清楚地指出优化的对象和最终目的;
  2. 在目标平台上对软件进行测试,确认是否达到目标;
  3. 如果尚未达到性能目标,则需要找到性能瓶颈;
  4. 改进优化,消除瓶颈。

设计优化

善用设计模式

参考:面试题汇总(设计模式)

  1. 单例模式
  2. 代理模式
    将代理模式用于实现延迟加载,可以有效提升系统的启动速度,对改善用户体验有很大的帮助。
  3. 享元模式
    如果在一个系统中存在多个相同的对象,那么只需共享一份对象的拷贝,而不必为每一次使用都创建新的对象。
    享元模式的主要作用是复用大对象

享元模式和对象池的区别?
在一个对象池中,所有的对象都是等价的,任意两个对象在任何使用场景中都可以被对象池中的其他对象替代。
而在享元模式中,享元工厂所维护的所有对象都是不同的,任何两个对象间不能相互替代。

常用优化组件和方法

缓冲(buffer)

缓冲可以协调上层组件和下层组件的性能差。当上层组件性能优于下层组件时,可以有效减少上层组件对下层组件的等待时间

缓冲区不宜过小,过小的缓冲区无法起到真正的缓存作用。
缓冲区也不宜过大,过大的缓冲区会浪费系统内存,增加GC负担。

缓存(cache)

缓存的主要作用是暂存数据处理结果,并提供下次访问使用

使用动态代理无需修改一个逻辑方法的代码,便可以为它加上缓存功能,提高性能。

对象复用——“池”技术

核心思想:如果一个类被频繁请求使用,那么不必每次都生成一个实例,可以将这个类的一些实例保存在一个“池”中,待需要的时候直接从池中获取

应用场景:线程池和数据库连接池。

只有对重量级对象使用对象池技术才能提高系统性能,对轻量级的对象使用对象池,可能反而会降低系统性能。

并行替代串行

多线程技术

负载均衡

时间换空间

空间换时间

典型应用:缓存

Java程序优化

StringBuffer和StringBuilder的区别

StringBuffer支持并发操作,线性安全的,适合多线程中使用
StringBuilder不支持并发操作,线性不安全的,但其在单线程中的性能比StringBuffer高

字符串拼接效率:StringBuilder > StringBuffer > String

上一篇 下一篇

猜你喜欢

热点阅读