java基础知识框架管理方法分享
2022-10-31 10:32:27 0 举报
AI智能生成
登录查看完整内容
java基础知识框架管理方法分享
作者其他创作
大纲/内容
amp;quot;show variables like amp;apos;%slow_query_log%amp;apos;amp;quot;
慢日志
sql 优化
事务管理
like条件是以%开头的
索引失效
database
启动加载过程
tomcat
this.processBeanFactory()
this.invokeBeanFactoryPostProcessor()
this.registerBeanPostProcessor()
this.initMessageSource()
this.initApplicationEventMulticaster()
this.onRefresh();
this.registerListeners();
this.finishBeanFactoryInitialization(beanFactory)
this.finishRefresh()
refresh流程
为IOC容器及bean的生命周期管理提供条件
作用
SpringApplication.run()中的refresh方法
转换beanName
尝试从缓存中获取实例
实例化bean
检测parentBeanFactory
初始化依赖的bean
创建bean
逻辑
ctx.getBean()方法
singleton
针对每一次getBean方法都会创建一个实例
prototype
每个http请求创建一个实例
request
每个session创建一个实例
session
globalSession
bean的作用域
BeanPostProcessor.postProcessBeforeInitialization()
InitializingBean.afterPropertiesSets()
定制的bean init方法
BeanPostProcessor.postProcessAfterInitialization()
bean初始化完毕
bean的生命周期-创建
bean的生命周期-销毁
bean加载过程
方法:依赖注入
创建实例的时候不需要了解其中的细节
IOC Container优势:
IOC
织入方式
InvocationHandler接口和Proxy类
核心
通过java内部反射机制
实现
JDKProxy
以继承的方式动态生成目标类的代理
借助ASM技术
CGLib
代理类和真实实现类要实现 接口
接口+真实实现类+代理类
原理
真正实现类的逻辑在getBean()方法里
getBean()方法实际返回的是Proxy的实例
Proxy实例是spring使用JDKProxy或者CGLib动态生成的
spring代理模式的应用
代理模式
AOP
原子性
atomic
consistency
isolation
durability
ACID
serializable
保证事务不会修改另一个事务未提交或未回滚的数据
repeatable read
保证事务不会读取另一个事务未提交或未回滚的数据
read committed(默认)
保证不会读取任何非法数据
read uncommitted
隔离级别
@Transactional(propagation=Propagation.SUPPORTS) :如果外层调用方法存在事务,则加入该事务;如果外层调用方法没有事务,则以非事务的方式继续运行。
@Transactional(propagation=Propagation.NOT_SUPPORTED) :以非事务方式运行,如果外层调用方法存在事务,则把当这个事务挂起。
@Transactional(propagation=Propagation.MANDATORY) :如果外层调用方法存在事务,则加入该事务;如果外层调用方法没有事务,则抛出异常
@Transactional(propagation=Propagation.NEVER) :以非事务方式运行,如果外层调用方法存在事务,则抛出异常。
@Transactional(propagation=Propagation.NESTED) :如果外层调用方法存在事务,则创建一个事务作为当前事务的嵌套事务来运行;如果外层调用方法没有事务,则该取值等价于TransactionDefinition.PROPAGATION_REQUIRED
事务传播
事务
spring
@Configuration
@ComponentScan
根据类路径下的jar包和配置动态加载配置和注入bean
这样能把许多功能做成公共的自动配置的启动器(starter)
@EnableAutoConfiguration
@SpringBootApplication
springboot开启注解
自动配置
springBoot
完全打开
半开
正常工作
关闭
状态
断路器
基于HTTP和TCP的客户端负载均衡
在客户端中配置ribbonServerList 来设置服务端列表去轮询访问以达到均衡负载的作用
ribbon
Feign是一个声明式的Web Service客户端
使用Feign来创建一个接口并用注解来配置它既可完成
feign
客户端负载均衡器
springCloud
缺省协议
采用单一长连接和异步NIO通讯
dubbo
阻塞式(同步)短链接和JDK标准序列化方式
rmi
hessian
http
redis
协议
应用信息
注册中心相关信息
服务协议
所有暴露服务缺省值
暴露服务
引用服务缺省值
引用服务
配置信息
Failfast
Failsafe
Failback
Forking
Broadcast
集群容错
随机策略
Random LoadBalance
轮询策略
RoundRobin LoadBalance
最少活跃调用
LeastActive LoadBalance
余数hash
一致性hash
hash算法
一致性hash策略
ConsistentHash LoadBalance
负载均衡策略
宕机处理
防止由于脑裂造成集群不可用
奇数节点
zookeeper
注册中心
为什么使用微服务
微服务
解析服务
直接暴露
注册中心暴露
直接引用
注册中心引用
curd文档
搜索
常用的数据操作
term dictionary
term Index
分级索引
ElasticSearch
synchronized(this)锁是当前类实例对象
同步代码块
锁是当前对象的实例对象
同步非静态方法
对象锁
synchronized(Class)锁是当前类
锁是当前对象的类对象
同步静态方法
类锁
synchronize
Thread类
可以使用Future接收返回值
callable接口
runnable接口
创建线程
wait和sleep区别
SingleThreadPool
FixedThreadPool
CachedThreadPool
Executors
SingleThreadExecutor
ThreadPoolExecutor
ScheduledThreadPoolExecutor
SingleThreadScheduledExecutor
创建方式
各种方式的优缺点
corePoolSize(线程池基本大小)
ArrayBlockingQueue
LinkedBlockingQueue
SynchronousQueue
PriorityBlockingQueue
用于保存等待执行的任务的阻塞队列
runnableTaskQueue(任务队列)
MaxPoolSize(线程池允许创建的最大线程数)
直接抛出异常
AbortPolicy
只用调用者所在线程来运行任务
CallerRunsPolicy
DiscardOldestPolicy
DiscardPolicy
处理方式
RejectedExecutionHandler
线程池参数
shutdownNow
shutdown
关闭线程池
AbortPolicy直接抛出异常
CallerRunsPolicy只用调用者所在线程来运行任务
不适用executors的原因
线程池
多线程
通过parent.loadClass()方法来检查是否已经加载
CustomClassLoader-amp;gt;AppClassLoader-amp;gt;ExtensionClassLoader-amp;gt;BootstrapClassLoader
自底向上检查类是否加载
amp;quot;Load JRE\\lib\t.jar或Xbootclasspath指定的jar包amp;quot;-amp;gt;amp;quot;Load JRE\\lib\\ext\\*.jar或-Djava.ext.dirs指定下的jar包amp;quot;-amp;gt;amp;quot;Load CLASSPATH或Djava.class.path所指定的目录下的类和jar包amp;quot;-amp;gt;amp;quot;通过java.lang.ClassLoader的子类自定义加载的classamp;quot;
自顶向下尝试加载类
双亲委派防止类重复加载
loadClass()方法的实现
双亲委派机制
ClassLoader
举例反射使用
java反射
1)通过一个类的全限定名来获取定义此类的二进制字节流。
2)将这个字节流所代表的静态存储结构转化为方法区的运行时数据结构。
3)在java堆中生成一个代表这个类的Class对象,作为访问方法区中这些数据的入口。amp;lt;bramp;gt;amp;nbsp; amp;nbsp; amp;nbsp;加载的时候第三步生成的Class对象的作用是作为入口,而真正的对象是经过加载、连接后才能初始化的,Class对象是一个特殊的对象,不同于普通对amp;nbsp; amp;nbsp; amp;nbsp; amp;nbsp; amp;nbsp; amp;nbsp;象,因此可以在加载的时候生成。
加载
链接
类装载过程
无法检查循环引用
缺点
高效
优点
引用计数算法
虚拟机栈中引用的对象(栈帧中的本地变量表)
方法区中常量引用的对象
方法区中类静态属性引用的对象
本地方法栈中JNI(native方法)引用的对象
活跃线程的引用对象
GC ROOT
可达性分析
判断是否垃圾
标记-清除算法
将内存分为空闲面和对象面
触发回收时整个对象面清除
复制算法
标记-整理算法
eden区
两个survivor区
年轻代(1/3)
经历一定次数的minorGC
survivor空间不足
晋升为老年代
老年代(2/3)
持久代(jdk7及以前才有)
分代
minorGC
对整个堆进行垃圾回收
fullGC
收集时机
分代收集算法
回收算法
垃圾回收GC
线程当前执行的字节码行号指示器
程序计数器
java本地方法的调用栈
本地方法栈
虚拟机栈
所有线程共享的内存区域,一般用来存放对象实例及数组,垃圾收集器的主要区域,划分为老年代和新生代
java堆
所有线程共享的内存区域,存放虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据
方法区
内存模型
参数调优
jvm虚拟机
32bit
Integer
int
64bit
Long
long
16bit
Short
short
Character
char
8bit
Byte
byte
Double
double
Float
float
1bit
Boolean
bool
8种基础数据类型
使用数组存key的hash值
hash所在的数组位置保存相同hash的key-value的单链表
数组加单链表的形式
底层数据结构
HashMap
HashTable
数组+红黑树
jdk8+
数组+segment+分段锁
jdk7
节点是红色或黑色
根节点是黑色
每个叶子节点都是黑色的空节点
每个红色节点的两个子节点都是黑色
从任一节点到其每个叶子的所有路径都包含相同数目的黑色节点
规则
红黑树
ConcurrentHashMap
TreeMap
SortedMap
Map
stack
Vector
ArrayList
LinkedList
List
HashSet
TreeSet
SortedSet
Set
Collection
Array
CountdownLatch
CyclicBarrier
Semaphore
Exchanger
同步器
...
BlockingQueue
J.U.C
数据框架
BIO
channel
buffer
selector
NIO
AIO
JAVA IO
newInstance()必须保证类被初始化加载和链接
new 和 newInstance()
final作用
重载和重写
各种排序算法
java基础
Controller
ServiceImpl
Service
DAO
DTO
Utils
Resources
绿动project
经验教训总结知识库搭建
知识管理
技术风险应对专家团队支撑
技术风险
资源问题各层级领导支撑
资源风险amp;lt;bramp;gt;
风险预先识别、事前报备,事中追踪,风险预警,及时识别amp;lt;bramp;gt;研发物料采购单独搭建支撑amp;lt;bramp;gt;
采购风险
风险管控
管控:项目关键资源需求集成,资源集成窗口,优先级排序amp;lt;bramp;gt;amp;nbsp;amp;nbsp;amp;nbsp;amp;nbsp;amp;nbsp;amp;nbsp;amp;nbsp;amp;nbsp;amp;nbsp;amp;nbsp; 项目资源日历整合表,制定资源问题层级解决方法amp;lt;bramp;gt;
沟通:资源问题分级管控,依层级反馈方式解决amp;lt;bramp;gt;
资源
管控:项目关键物料采购需求管理,设计时提前报备,采购前提前沟通
沟通:研发物料敏捷化采购
采购
外部协调
管控:项目里程碑、甘特图amp;lt;bramp;gt;
考核:项目按时达成率
进度
管控:项目目标变更记录表、相关影响分析图amp;lt;bramp;gt;
考核:项目目标达成率
目标
管控:项目设计返工率;工艺技术验证
考核:返工率、返工引起的沉没成本
质量
管控:项目月度预实分析
考核:项目预算达成率分析
成本
内部管控
java基础知识框架管理方法分享
0 条评论
回复 删除
下一页