应用优化总结

来源:互联网 发布:java 数字选择控件 编辑:程序博客网 时间:2024/06/12 05:31

hashmap

数组 + 链表, key的hashcode() 取数组中链表位置Index (算法是 hashcode&数组长度-1) , equals()在链表中查值

为了降低Java开发的复杂性, Spring采取了以下4种关键策略:

-基于POJO的轻量级和最小侵入性编程;
-通过依赖注入和面向接口实现松耦合;
-基于切面和惯例进行声明式编程;
-通过切面和模板减少样板式代码。

bean生命周期

1. Spring对bean进行实例化;
2. Spring将值和bean的引用注入到bean对应的属性中;
3.如果bean实现了BeanNameAware接口, Spring将bean的ID传递给
setBean-Name()方法;
4.如果bean实现了BeanFactoryAware接口, Spring将调
用setBeanFactory()方法,将BeanFactory容器实例传入;
5.如果bean实现了ApplicationContextAware接口, Spring将调
用setApplicationContext()方法,将bean所在的应用上下文的
引用传入进来;
6.如果bean实现了BeanPostProcessor接口, Spring将调用它们
的post-ProcessBeforeInitialization()方法;
7.如果bean实现了InitializingBean接口, Spring将调用它们的
after-PropertiesSet()方法。类似地,如果bean使用init
method声明了初始化方法,该方法也会被调用;
8.如果bean实现了BeanPostProcessor接口, Spring将调用它们
的post-ProcessAfterInitialization()方法;
9.此时, bean已经准备就绪,可以被应用程序使用了,它们将一直
驻留在应用上下文中,直到该应用上下文被销毁;
10.如果bean实现了DisposableBean接口, Spring将调用它的
destroy()接口方法。同样,如果bean使用destroy-method声明
了销毁方法,该方法也会被调用。

应用优化

前端优化:合并js css 图片 ,前置css 后置js
后端优化:
1.读写分离系统
2.分表分库(使用mycat shark做数据库路由,模糊查询使用solr es),不常改动的数据加缓存,合并对数据库操作命令(存储过程 和 Alisql对同一行数据修改操作命令收集合并),合并对缓存操作命令(Redis批处理Pipeline或者Lua脚本)
3.消息路由: nginx (限制流量),就近访问服务器
4.数据分类,生命周期长(不容易变化)的页面数据缓存到redis
同步远程调用RPC =》dubbo (二进制数据压缩传输)、springcloud
异步远程调用MQ =》kafka、rabbitmq (可以消息对接和回溯)
数据库悲观锁for update,改成乐观锁update version:加个版本号,每次改数据前查到对应版本号,根据版本号修改数据和版本号 => 数据库变更移到redis缓存(IO效率高)=>分布式锁redisson(线程1创建数据1和超时时间,处理事务结束之后查询数据1和时间,时间超时不需要删除数据1,没超时,删除数据;线程2创建数据1失败了,查询数据1超时了GETSET如果是老时间说明成功,否则就是失败)=>分布式乐观锁 multi创建事务前watch数据超时时间,改变了就回滚
5.数据库存储过程事务:oracle存储过程是默认在一个事务中的,mysql和mssql需要手工加入事务控制语句

6.缓存redis的问题:
6.1穿透 : 大量查询不存在的数据(缓存和db大量不命中) =>缓存空对象+实时同步新数据
6.2无底洞:大量新增缓存节点+批量命令(大量多次网络交互)=>根据路由算法合并对应key对应的命令 并发发送批处理
6.3雪崩:缓存宕机,请求在db爆发=>redis 3.0缓存集群 + 多个线程池管理不同的资源请求和限流 使用java Hystrix
6.4热门数据key重建速度慢,大量请求:分布式锁 或者使用专门线程去更新数据
6.5单品高并发读(突发高并发)导致宕机:针对某些数据冗余存于所有节点+路由访问各个缓存节点=>zk分布式锁同步数据一致;或者多级缓存 本地+集群缓存+消息队列同步

管理优化

1.用户故事地图 需求分析

2.文档BUG管理工具 JIRA 、代码管理工具GITHUB

3.数据模型设计 powerdesigner

3.1用例图 描述系统功能
3.2 cdm描述类对象关系 =》pdm描述具体属性 =》数据库表结构sql
3.3oom描述java类关系(设计模式)=》生成java代码 java代码逆向对象图参考
原创粉丝点击