Java基础-优化

  • 网站性能优化
前端性能优化
优化方法
减少http请求;合并CSS,合并JavaScript,合并图片
使用浏览器缓存;长期不变的资源设置Cache-Control和Expire首部做缓存,更新时逐量更新,修改版本号或修改文件名
启用压缩;注意这会给服务器和浏览器带来一定的压力
CSS放页面最上面,JavaScript放页面最下面
减少Cookie传输,静态资源用额外的域名
CDN加速
用HTTP2.0
反向代理配置缓存功能加速访问
应用服务器性能优化
优化方法
分布式缓存;使用后注意数据不一致和脏读问题,缓存可用性问题,缓存穿透,缓存雪崩等问题
使用消息中间件异步操作;任何应该晚点再做的事情都应该晚点再做
使用集群;减轻单台服务器压力,提升整体的吞吐量
代码优化;多线程,设置合适的线程数=任务执行时间/(任务执行时间-IO等待时间) * CPU内核数;注意线程安全问题
代码优化;资源复用,用单例模式和池技术缓存创建耗时的复杂对象
代码优化;用更好的数据结构,比如HashMap在1.8中引入了红黑树优化链表过长问题,Time33算法算Hash时先MD5一下等
代码优化;JVM调优,合理配置JVM内存的大小,避免FullGC

解决线程安全的方法:

  1. 将对象设计成无状态对象,如Servlet
  2. 使用局部对象
  3. 并发访问资源时使用锁
数据库性能优化
优化方法
硬件升级,用SSD
数据库系统参数调优
数据库索引调优,(执行计划,IO,CPU,优化器,执行计划过长,中间表,临时表,物化表)
SQL语句改写

  • 二叉树
  1. 二叉树常被用于实现二叉查找树和二叉堆。
  2. 二叉树的每个结点至多只有二棵子树(不存在度大于2的结点),通常称为"左子树"和"右子树"
  • 二叉排序树
  1. 二叉排序树(Binary Sort Tree)
  2. 若左子树不空,则左子树上所有结点的值均小于它的根结点的值
  3. 若右子树不空,则右子树上所有结点的值均大于它的根结点的值


    image.png
  • 平衡二叉树
  1. AVL
  2. 它的左子树和右子树的深度之差(平衡因子)的绝对值不超过1
  3. 它的左子树和右子树都是一颗平衡二叉树
  4. 平衡因子(bf):结点的左子树的深度减去右子树的深度,那么显然-1<=bf<=1
  5. 为了解决二叉排序树的不平衡性导致时间复杂度大大下降,如下图
image.png
  1. 新增:左旋,右旋,删除类似,每次都要做到平衡
  • B+树
image.png
  1. N叉排序树
  2. 树的层次最多三层,因此需要5次磁盘访问才能更新一条记录=三次磁盘访问获取数据索引及行ID+一次数据文件读操作+一次数据文件写操作
  3. 所有记录都在叶节点中,并且是顺序存放的
  4. 插入操作如下图


    image.png
  • LSM树
  1. NOSQL产品用
  2. N阶合并树
  3. 使用LSM树极大的减少了磁盘访问次数,加快访问速度
  4. 数据增删改操作在内存中进行,修改会记录新的值,删除会记录一个删除标志
  5. 这些数据在内存中仍然是一个排序树,当数据量达到一定阈值,会将这个排序树和磁盘上最新的排序树合并.当这颗排序树也超过一定阈值后,就会和磁盘的下一级排序树合并.
  6. 合并时会将最新更新的数据覆盖旧的数据(或者标记为不同版本)

你可能感兴趣的:(Java基础-优化)