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