JAVA知识点
2023-10-26 17:02:20 0 举报
AI智能生成
java知识点概览
作者其他创作
大纲/内容
基础
内部类
静态
可以访问外部所有静态变量、方法
外部类.内部类-直接引用
成员
不能定义静态方法和变量
局部
仅在某方法中使用
匿名
必须继承或实现
没有class
使用new来生成引用
对象复制
浅拷贝
复制引用
深拷贝
复制对象及其引用对象
方式
序列化
重写clone
JVM
java代码的执行
编译器
解释器
字节码文件
内存管理
后台线程
虚拟机线程
周期性任务线程
GC线程
编译器线程
信号分发线程
JVM
线程私有
程序计数器
字节码行号指示器
唯一无OOM
本地方法栈
栈
栈帧
局部变量表
操作数栈
动态链接
方法出口
一个方法一个栈
线程共享
方法区
运行时常量池
永久代
1.8元空间
堆
对象和数组
垃圾回收
垃圾回收
堆
新生代
EDEN
8/10
FROM
1/10
TO
1/10
>15
minorGC复制算法
GC次数记录在对象头
1/3
老年代
majorGC标记清除算法
OOM
2/3
确定垃圾
引用计数
可达性分析
算法
标记清除
碎片
复制
效率
标记整理
分代收集
引用类型
强
被引用就不可回收
软
空间不足就回收
图片缓存
弱
GC就回收
图片缓存
虚
主要用于跟踪对象回收状态
监听finalize之后自定义操作
收集器
CMS
多线程标记清除
碎片
G1
标记整理
低停顿
优先级回收
内存区域
堆外内存
1.8 元空间
用户空间
直接内存
UnSafe
ByteBuffer
不会GC
配合虚引用手动清理
零拷贝
减少拷贝次数,效率高
IO模型
BIO
阻塞IO
流
NIO
channel
buffer
缓冲区
selector
零拷贝
mmap内存映射
内核到堆外
开辟直接内存
堆内到堆外
类加载机制
加载
验证
准备
设置类变量初始值
分配内存空间
解析
符号引用=》直接引用
初始化
类加载器
启动类
扩展类
应用类
自定义
双亲委派
类加载请求先委派给父类
保证不同类加载器最终都是一个对象
安全
集合
父类
Collection
Iterator
Map
List
ArrayList
内存空间连续
适合查询
不适合修改
Vector
LinkedList
不适合查询
有序
Set
去重
无序
Map
HashMap
数组+链表+红黑树
线程不安全
hash冲突
扩容
0.75
2的幂次
位运算
空数组重新hash
红黑树
1.8新特性
>8
概率极低
防止平衡次数过多
ConcurrentHashMap
Segment 段
16
经验和试验,过多消耗内存
1.7
ReentrantLock
1.8
syncronized锁升级
红黑树
putVal
key spread hash
node节点
node为空,cas添加新节点
不为空,是否移动,移动了就转移至新表
synchronized
匹配则更新值
不匹配判断是否是树
判断节点数是否>8
转换树
addCount
多线程
线程创建方式
Thread
start
Runable
run
Callable
返回值
ExecutorService
newCachedThreadPool
newFixedThreadPool
固定、无界
newScheduledThreadPool
定时
newSingleThreadPool
newWorkStealingPool
fork、join
窃取其他忙碌队列
ThreadPool
Future
生命周期
新建
就绪
运行
阻塞
死亡
线程池
防止线程创建销毁太频繁
组成
核心线程数
CPU密集
N+1
IO密集
2N+1
一般不会失活,可设置参数
最大线程数
先进队列,再开启最大数
最大线程失效时间、单位
阻塞队列
Linked
无界
Array
Synchronous
Delay
定时
线程池工厂
拒绝策略
抛异常
丢弃
重试
丢弃最早的
自己扩展RejectedExecutionHandler
hash表维护线程的引用
volatile
MESI
内存变量
JMM内存模型
通知其他线程
可见性
禁止指令重排
CAS
ABA
时间戳、版本号
CPU开销
锁
乐观锁
cas
原子操作
读多写少
悲观锁
synchronized
写多
自旋锁
避免用户态和内核态切换消耗
synchronized
class对象头
MarkWord
hashcode
分代年龄
标志位信息
KlassPoint
指针
monitor
Owner
EntryList
WaitSet
永久代全局共享
JVM级
代码块、自动加解锁
可重入
锁升级
偏向锁
只在threadId切换CAS
MarkWord信息比较
轻量级锁
CAS
重量级锁
ReentrantLock
api级
可重入
公平锁
Condition
signal
notify
手动加解锁
可中断
AQS
state
阻塞队列
共享、独占(读写)
JUC
AtomicInteger
LongAdder
AtomicReference
stamped
CopyOnWriteList
ThreadLocal
每个线程都有ThreadLocalMap
弱引用
内存溢出
参数传递
TraceId
CountDownLatch
线程等待其他线程执行完再执行
CyclicBarrier
阻塞一组线程直到全部到达栅栏
异步、超时
Semphore
信号量
死锁
多个线程同时被阻塞,它们中的一个或者全部都在等待某个资源被释放
Spring
生命周期
扫描类
invokeBeanFactoryPostProcessors
封装beanDefinition对象
放到map
遍历map
验证
是否实例化
是否单例
单例池
concurrentHashMap
得到class
判断构造方法
注入模型
反射、实例化
后置处理器
是否允许循环依赖
填充属性
自动注入
执行aware接口
AOP代理
实例化为bean
入单例池
销毁
IOC
1. 配置:在Spring配置文件(如XML配置文件或使用注解配置)中定义Bean的定义和依赖关系。这些配置信息告诉Spring框架如何创建和管理对象。
2. 实例化:当应用程序启动时,Spring框架会读取配置文件,并实例化Bean对象。Spring框架使用Java的反射机制来创建对象,并调用构造函数或工厂方法来实例化Bean。
3. 依赖注入:在实例化Bean对象时,Spring框架会检查Bean的依赖关系,并将依赖的对象注入到Bean中。这可以通过构造函数注入、Setter方法注入或字段注入来实现。
4. 生命周期管理:Spring框架还负责管理Bean的生命周期。它会调用Bean的初始化方法和销毁方法,以确保Bean在创建和销毁时执行必要的操作。
作用域
单例
多例
request
session
global
循环依赖
属性注入可以、构造器不行
三级缓存
事务
ThreadLocal当前事务
如数据库连接,Map
一个连接一个key,事务不相互影响
用AOP新建立一个连接
共享连接
AOP
静态代理
实现类
动态代理
JDK
反射机制
代理接口匿名类
cgLib
asm字节码动态创建类,基于classLoad装载
注解
AutoWired
按类型
@Qualifier
Resource
按名称
Transactional
事务失效
事务嵌套
异常被捕获
非public
同一个类中方法调用
消息队列
RocketMq
顺序消费
局部有序,无法全局有序
topic中每个queueFIFO
生产者
实现MessageQueueSelector
hash取模保证同一队列
消费者
多线程要使用MessageListenerOrderly
按照FIFO消费
消费丢失
生产者
自带事务机制
MQ
broker时故障
同步刷盘
主从集群备份
消费者
CONSUME_SUCCESS
故障转移其他消费者
死信队列
消费者返回重试进入重试队列,重试16次进入死信队列
保存3天,可控制台重发
%DLQ%+消费组ID
单独消费
消息重复
幂等处理,消息表唯一索引
延迟消息
18个延迟级别
主从架构
broker节点
nameserver节点
kafka
百万级,更适合日志等大批量
分区内顺序发送
发布订阅
broker节点+zk集群
文件系统存储消息
多个副本保证消息的冗余和容错
Redis
基础类型
String
SDS
记录长度,按长度截取
复杂的O(1)
空间预支配,减少空间释放
二进制数据
Hash
字典表、压缩表
hash冲突链表
渐进式rehash
每个字典表两个rehash
list
quickList
set
整数集合
zset
压缩表、跳跃表
score
HyberLogLog
浏览量统计
Bitmap
布隆过滤器
Geo
性能
基于内存
基础数据类型优化
单线程事件循环
IO多路复用
分布式锁
setnx
expire
delete
lua脚本
高可用
持久化
RDB
冷备、5分钟
恢复快
快照文件、消耗cpu
AOF
binlog
数据不会丢失
回复慢,文件大
数据同步机制
主从
指令流
offset
快照
RDB
缓冲区
哨兵
集群监控
消息通知
故障转移
配置中心
脑裂
集群
链表
多主
横向扩容
分片
过期策略
定时
定时器消耗内存
惰性
遗留大量key
定期
随机删除一部分
淘汰机制
LUR 最少使用
限流
漏桶
令牌桶
恒定速度往桶中放token令牌
无令牌拒绝请求
lua脚本
问题
缓存雪崩
过期时间加随机值
集群部署
缓存击穿
热点数据不失效
更新失效时间
互斥锁
缓存穿透
布隆过滤器
双写一致性
延时双删
先删除缓存
写数据库
休眠1s再删除缓存
事务
轻量级事务,不建议用
大key
bigkey命令
Mysql
innodb
B+树
数据页
16k
叶子节点包含数据
支持事务
行级锁
MVCC
外键
聚簇索引
MyIASM
默认
读快
叶子节点不包含数据
无事务,表级锁
非聚簇索引
索引
原则
最左匹配原则
like
经常参与排序、分组、联合的字段
经常作为查询条件的
区分度高的
索引不宜过多,过长
更新表浪费时间
减少参与计算
尽量扩展、不宜新建
函数操作
隐式转换
分析
Explain
类型
普通
唯一
联合
事务
ACID
原子性
一致性
隔离性
永久性
隔离级别
读未提交
无视图概念
读已提交
不同的read view
避免脏读
可重复读
一个read view
避免脏读,不可重复读
序列化
优化
覆盖索引避免回表
不要*
联合索引的顺序
5.6之后索引下推 减少回表
当第一个是范围查询时
MVCC
多版本并发控制
聚簇索引中两个隐藏列
trx_id
读未提交
直接读取最新版本
序列化
加锁
readView
读已提交
每次读取前生成一个
可重复读
第一次生成一个
trx_id不一致去找undo_log读取值
锁
表锁
行锁
间隙锁
范围查询
解决幻读
多条查询时数目对不上
innodb
RecordLock
索引项加锁
GapLock
Next Key
前两种的结合,对记录及间隙加锁
微服务
服务发现
dubbo
基于java的高性能RPC分布式服务框架
容器
Dubbo 的服务容器只是一个简单的 Main 方法,并加载一个简单的 Spring 容器,用于暴露服务。
远程通信
多种基于长连接的NIO框架抽象封装
默认netty框架
序列化
Hessian
Dubbo
Java自带
请求-响应模式
RPC
跨越传输层和应用层
协议
dubbo://(推荐)
hessian://
rmi://
允许多协议
集群容错
容错
失败自动切换,自动重试其他服务器
默认
写操作建议
快速失败,一次调用
负载均衡
Random
默认
group分组
版本号过渡
不同版本间相互不引用
自动发现
zookeeper
注册中心目录
临时目录节点
失效剔除
心跳
CP
强一致性
牺牲可用性,必须要等待数据同步
角色
Leader
Follower
Observer
原子广播
过半选举
节点
registry
provider
consumer
monitor
调用次数、时间监控中心
container
服务运行容器
提供者依赖dubbo
nacos
AP
可用性
可以切换CP
配置中心
动态刷新@RefreshScope
注册中心
基于DNS协议的服务发现
RPC
pull、push同时运作
5秒心跳,15秒不健康,30秒剔除
注册过程
0、服务容器负责启动,加载,运行服务提供者。
1、服务提供者在启动时,向注册中心注册自己提供的服务。
2、服务消费者在启动时,向注册中心订阅自己所需的服务。
3、注册中心返回服务提供者地址列表给消费者,如果有变更,注册中心将基于长连接推送变更数据给消费者。
4、服务消费者,从提供者地址列表中,基于软负载均衡算法,选一台提供者进行调用,如果调用失败,再选另一台调用。
5、服务消费者和提供者,在内存中累计调用次数和调用时间,定时每分钟发送一次统计数据到监控中心。
gateway
授权、监控、负载均衡、缓存、请求分片和管理、静态响应处理
Ribbon
负载均衡
Hystrix
服务熔断
Hystrix Command 请求后端服务失败数量超过一定比例(默认 50%), 断路器会
切换到开路状态(Open). 这时所有请求会直接失败而不会发送到后端服务. 断路器保持在开路状态
一段时间后(默认 5 秒), 自动切换到半开路状态(HALF-OPEN). 这时会判断下一次请求的返回情况,
如果请求成功, 断路器切回闭路状态(CLOSED), 否则重新切换到开路状态(OPEN)
netty
高性能、异步NIO
异步非阻塞
Future-Listener
主动通过通知机制获取IO结果
高性能
多路复用
NioEventLoop 聚合了多路复用器 Selector
异步通信NIO
IO 线程可以并发处理 N 个客户端连接和读写操作
零拷贝
内存池缓冲区
高效的 Reactor 线程模型
串行无锁化、线程绑定不切换
高性能序列化
0 条评论
下一页