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