应用优化总结
来源:互联网 发布: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代码逆向对象图参考
- 应用优化总结
- 应用服务器性能优化总结
- 搜索引擎应用优化技能总结
- 搜索引擎应用优化技能总结
- Android应用的性能优化总结
- HBase应用设计性能优化方法总结
- Android应用的内存优化总结
- Android Studio下的应用性能优化总结--布局优化
- Android Studio下的应用性能优化总结-内存优化
- Android Studio下的应用性能优化总结-内存优化
- Android Studio下的应用性能优化总结--布局优化
- Android Studio下的应用性能优化总结-内存优化
- Android Studio下的应用性能优化总结--布局优化
- Android Studio下的应用性能优化总结-内存优化
- Android 内存泄漏总结----Android应用优化---Android应用性能优化实践
- android应用开发 网络编程与常见功能优化总结
- 第二节 JVM优化应用以及知识总结
- 嗡汤圆的Angular2 单页应用一些优化总结
- 1-2 输出N个数的平方和立方值
- 架构设计的立方体扩展
- Python中raw_input()与input()的区别
- (VS)浏览器导航栏-网站标题、logo
- C++ ".exe"触发了一个断点 解决
- 应用优化总结
- android实现可以滑动的平滑曲线图
- redis数据库
- Github分页助手的使用
- 数组初始值的问题
- 【Bug解决】【转载】version `GLIBCXX_3.4.21' not found
- 关于FrameLayout布局 2017.9.14
- 吴恩达【深度学习工程师】学习笔记(二)
- 不明怎觉厉(一):servlet详解