CTO知识框架(JAVA)
2021-12-28 22:50:28 0 举报
AI智能生成
CTO知识框架(JAVA)知识大纲
作者其他创作
大纲/内容
怎么做好技术Leader?
架构师职责与定位
CTO职责与定位
云原生
云原生发展历程
云基础
云架构
DevOps
服务网格
混沌工程
k8s实战
Docker
istio
Python核心编程
简介
标准数据类型
Number(数字)
String(字符串)
List(列表)
Tuple(元组)
Set(集合)
Dictionary(字典)
系统架构设计方法论专题
架构的意义
架构的输入
架构的输出
架构的内容
业务架构
功能架构
技术架构
物理架构
数据架构
架构设计原则
基础架构设计原则
高并发设计原则
高可用设计原则
高可用设计原则
架构设计模式
分层架构
事件驱动架构
微内核架构
分布式架构
微服务架构
复杂业务DDD设计
DDD领域驱动设计原则
DDD领域发现
事件风暴
业务能力建模
领域讲故事
业务模型画布
示例映射
影响映射
wardley maps
DDD领域建模
边界 + 设计
贫血/充血模型
领域事件与CQRS
DDD高可扩展业务架构
服务化架构治理
服务注册与发现
服务监控
服务监控
服务控制
服务升级
架构设计协议
CAP/BASE
PAXOS
ZAB
RAFT
Gossip
知识图谱与人工智能专题
知识抽取
非结构化数据抽取
实体抽取
实体识别与链接
关系抽取
事件抽取
结构化数据抽取
RDB TO GRAPH DB
半结构化数据抽取
知识建模
OWL语义
Protégé
Jena
知识存储
Neo4j
ArangoDb
Rdf
gStore
Nebula Graph
JanusGraph
知识融合
知识消岐
知识检索
智能问答
计算机操作系统专题
深入理解Linux系统专题
机器学习经典算法专题
JAVA核心编程
Java体系结构图
体系结构图
JDK
Java Develorment K
JRE
Java Runtine Environment
JVM
Java Virtual Machine
JDK类库、高级特性与源码专题
数据类型
基本数据类型
byte:1字节,8bit,取值范围:(-2)^8^~2^7^-1
short:2字节,16bit,取值范围:(-2)^16^~2^15^-1
int:4字节,32bit,取值范围:(-2)^32^~2^31^-1
long:8字节,64bit,取值范围:(-2)^64^~2^63^-1
float:符号位:1位,指数位8位,小数位23位
double:符号位:1位,指数位11位,小数位52位
char:unicode表示,2字节,16bit
boolean:true\false
包装类型
Byte
Short
Integer
Long
Float
Double
Character
Boolean
自动拆装箱
valueOf()
xxxValue()
JAVA特性
封装
对象
多态
多态是同一个行为具有多个不同表现形式或形态的能力。
父类引用指向子类对象
继承
单继承、多重继承
特点
子类拥有父类非 private 的属性、方法。
子类可以拥有自己的属性和方法,即子类可以对父类进行扩展。
子类可以用自己的方式实现父类的方法。
提高了类之间的耦合性(继承的缺点,耦合度高就会造成代码之间的联系越紧密,代码独立性越差)
字符串处理
类图
String
线程安全
可变性
不可变
StringBuffer
线程安全
安全
缓存区
private transient char[] toStringCache;
@Override
public synchronized String toString() {
if (toStringCache == null) {
toStringCache = Arrays.copyOfRange(value, 0, count);
}
return new String(toStringCache, true);
}
@Override
public synchronized String toString() {
if (toStringCache == null) {
toStringCache = Arrays.copyOfRange(value, 0, count);
}
return new String(toStringCache, true);
}
性能
低
可变性
可变
StringBuilder
线程安全
不安全
缓存区
@Override
public String toString() {
// Create a copy, don't share the array
return new String(value, 0, count);
}
public String toString() {
// Create a copy, don't share the array
return new String(value, 0, count);
}
性能
高
可变性
可变
枚举
子主题
集合框架
List接口
ArrayList
数据结构
特点
使用场景
LinkedList
数据结构
特点
使用场景
Map接口
HashMap
Set接口
Queue接口
异常分类与处理
多线程与JUC
并发编程模型
线程
基本方法
wait:线程等待
notifyAll:
sleep:线程睡眠
join
yield
状态转换
上下文切换
死锁
都被阻塞,互相等待
JAVA实现多线程
线程池
组成
线程管理器
工作线程
任务接口
任务队列
类图
参数
corePoolSize
maximumPoolSize
keepAliveTime
unit
workQueue
threadFactory
handler
拒绝策略
AbortPolicy
CallerRunsPolicy
DiscardOldestPolicy
DiscardPolicy
实现RejectedExecutionHandler接口
工作过程
阻塞队列
CyclicBarrier:让一组线程阻塞到某一个状态,再全部执行
CountDownLatch:类似于计数器
Semaphore:信号量,控制线程访问的个数
ConcurrentHashMap
ThreadLocal
volatile
变量可见性
禁止重排序
比 sychronized 更轻量级的同步锁
在访问 volatile 变量时不会执行加锁操作,因此也就不会使执行线程阻塞,因此 volatile 变量是一
种比 sychronized 关键字更轻量级的同步机制。 volatile 适合这种场景:一个变量被多个线程共
享,线程直接给这个变量赋值。
种比 sychronized 关键字更轻量级的同步机制。 volatile 适合这种场景:一个变量被多个线程共
享,线程直接给这个变量赋值。
适用场景
值得说明的是对 volatile 变量的单次读/写操作可以保证原子性的,如 long 和 double 类型变量,
但是并不能保证 i++这种操作的原子性,因为本质上 i++是读、写两次操作。在某些场景下可以
代替 Synchronized。但是,volatile 的不能完全取代 Synchronized 的位置,只有在一些特殊的场景下,才能适用 volatile。总的来说,必须同时满足下面两个条件才能保证在并发环境的线程安
全:
(1)对变量的写操作不依赖于当前值(比如 i++),或者说是单纯的变量赋值(boolean
flag = true) 。
(2)该变量没有包含在具有其他变量的不变式中, 也就是说,不同的 volatile 变量之间,不
能互相依赖。 只有在状态真正独立于程序内其他内容时才能使用 volatile
但是并不能保证 i++这种操作的原子性,因为本质上 i++是读、写两次操作。在某些场景下可以
代替 Synchronized。但是,volatile 的不能完全取代 Synchronized 的位置,只有在一些特殊的场景下,才能适用 volatile。总的来说,必须同时满足下面两个条件才能保证在并发环境的线程安
全:
(1)对变量的写操作不依赖于当前值(比如 i++),或者说是单纯的变量赋值(boolean
flag = true) 。
(2)该变量没有包含在具有其他变量的不变式中, 也就是说,不同的 volatile 变量之间,不
能互相依赖。 只有在状态真正独立于程序内其他内容时才能使用 volatile
生产者消费者模型
JAVA锁体系
乐观锁
悲观锁
自旋锁
可重入锁(递归锁)
公平锁与非公平锁
共享锁和独占锁
重量级锁
轻量级锁
偏向锁
分段锁
锁优化
减少锁的持有时间
减小锁粒度
锁分离
锁粗化
锁消除
Synchronized
属于悲观锁、可重入锁
作用范围
锁优化
核心组件
实现原理
底层语义原理
Java 虚拟机中的同步(Synchronization)基于进入和退出管程(Monitor)对象实现, 无论是显式同步(有明确的 monitorenter 和 monitorexit 指令,即同步代码块)还是隐式同步都是如此。在 Java 语言中,同步用的最多的地方可能是被 synchronized 修饰的同步方法。同步方法 并不是由 monitorenter 和 monitorexit 指令来实现同步的,而是由方法调用指令读取运行时常量池中方法的 ACC_SYNCHRONIZED 标志来隐式实现的,关于这点,稍后详细分析。下面先来了解一个概念Java对象头,这对深入理解synchronized实现原理非常关键
Java对象头和Monitor
具体流程
ReentrantLock
实现了Lock接口,是一种可重入锁,可以实现synchronized工作,提供避免死锁的方法。(响应中断、轮询、定时锁)
公平锁
非公平锁
ReadWriteLock
Semaphore
是一种基于计数的信号量,可以设定一个阈值,多个线程获取许可信号,处理完归还。构建资源池、对象池。
Atomic
ABA
CAS
AQS(抽象的队列同步器)
IO/NIO
IO模型
阻塞IO模型
非阻塞IO模型
多路复用IO模型
信号驱动IO模型
异步IO模型
JAVA IO
JAVA NIO
介绍
包
NIO原理
网络模型
Channel
FileChannel(IO)
DatagramChannel(UDP)
SocketChannel(TCP Client)
ServerSocketChannl(TCP Server)
Buffer
Selector
能够检测多个注册通道上是否有事件发生,如果有事件发生,便可以对每个事件做相应的处理。
Netty
反射
概述
API
Class 类
Field 类
Method 类
Constructor 类
步骤
获取Class
aa.getClass()
Person.class
Class.forName("类的全路径")
创建对象
Class对象的newInstance()
Constructor对象的newInstance()
代理
静态代理
动态代理
java原生实现
cglib类库实现
类加载
类加载过程
加载:通过全限定类名获取定义此类的二进制字节流,转换为方法区的运行时数据结构,内存中生成一个代表这个类的 java.lang.Class 对象,作为方法区这个类的各种数据的访问入口
链接
验证
文件格式验证
元数据验证
字节码验证
符号引用验证
准备:为类变量分配内存并设置类变量初始值,这些变量所使用的内存都将在方法区中进行分配。
解析
初始化
使用
卸载
双亲委派模型
Bootstrap class loader
Extensions class loader
System class loader
用户类加载器继承:java.lang.ClassLoader
new Object()过程中发生了什么
JNDI
RMI
JMX
简介
JMX(Java Management Extensions)是一个为应用程序植入管理功能的框架。JMX是一套标准的代理和服务,实际上,用户可以在任何Java应用程序中使用这些代理和服务实现管理。
在JMX中,给定的资源被抽象成Java对象,即Managed Bean或MBean。这些MBean注册在一个核心管理的对象服务器中,即MBean server。
JMX 规范用 Java 编程语言定义了用于应用程序和网络管理和监控的体系结构、设计模式、API 和服务。
使用 JMX 技术,给定资源由一个或多个称为托管 Bean 或 MBean 的 Java 对象进行检测。这些 MBean 在核心托管对象服务器(称为 MBean 服务器)中注册,该服务器充当管理代理并且可以在大多数支持 Java 编程语言的设备上运行。
规范定义了 JMX 代理,您可以使用这些代理来管理符合规范检测的资源。JMX 代理由一个 MBean 服务器和一组用于处理 MBean 的服务组成,MBean 服务器在其中注册。通过这种方式,JMX 代理直接控制资源并使它们可用于远程管理应用程序。
检测资源的方式完全独立于管理基础设施。因此,无论其管理应用程序是如何实现的,都可以使资源变得可管理。
JMX 技术定义了标准连接器(JMX 连接器),允许您从远程管理应用程序访问 JMX 代理。使用不同协议的 JMX 连接器提供相同的管理接口。因此,无论使用何种通信协议,管理应用程序都可以透明地管理资源。JMX 代理也可由不符合 JMX 规范但支持 JMX 代理的系统或应用程序使用。
在JMX中,给定的资源被抽象成Java对象,即Managed Bean或MBean。这些MBean注册在一个核心管理的对象服务器中,即MBean server。
JMX 规范用 Java 编程语言定义了用于应用程序和网络管理和监控的体系结构、设计模式、API 和服务。
使用 JMX 技术,给定资源由一个或多个称为托管 Bean 或 MBean 的 Java 对象进行检测。这些 MBean 在核心托管对象服务器(称为 MBean 服务器)中注册,该服务器充当管理代理并且可以在大多数支持 Java 编程语言的设备上运行。
规范定义了 JMX 代理,您可以使用这些代理来管理符合规范检测的资源。JMX 代理由一个 MBean 服务器和一组用于处理 MBean 的服务组成,MBean 服务器在其中注册。通过这种方式,JMX 代理直接控制资源并使它们可用于远程管理应用程序。
检测资源的方式完全独立于管理基础设施。因此,无论其管理应用程序是如何实现的,都可以使资源变得可管理。
JMX 技术定义了标准连接器(JMX 连接器),允许您从远程管理应用程序访问 JMX 代理。使用不同协议的 JMX 连接器提供相同的管理接口。因此,无论使用何种通信协议,管理应用程序都可以透明地管理资源。JMX 代理也可由不符合 JMX 规范但支持 JMX 代理的系统或应用程序使用。
架构
分层
设备层
代理层
分布式服务层
附加管理协议API
案例
SPI
JVM优化专题
什么是JVM
JVM是可运行Java代码的假想计算机,包括一套字节码指令集、一组寄存器、一个栈、一个垃圾回收器,
堆和一个存储方法域。JVM是运行在操作系统之上的,它与硬件没有直接交互。
堆和一个存储方法域。JVM是运行在操作系统之上的,它与硬件没有直接交互。
内存模型
线程私有
程序计数器
指向虚拟机字节码指令位置
无OOM区域
虚拟机栈
虚拟机栈和线程的生命周期相同,是描述java方法执行的内存模型。
一个线程中每调用一个方法产生一个栈帧
栈帧结构
异常
线程请求的深度大于JVM所允许的深度:StackOverflowError
子主题
本地方法栈
和虚拟机栈的作用类似,本地方法栈作为Native方法服务。
线程共享
堆区
新生代(1/3)
Eden(8/10)
新生对象的出生地(如果新生对象占用内存很大直接分配到老年代)。
当Eden区内存不够的时候触发MinorGC
当Eden区内存不够的时候触发MinorGC
From Survior(1/10)
上一次GC的幸存者,作为这一次GC被扫描的对象
To Survior(1/10)
保留了一次MinorGC过程中的幸存者
老年带(2/3)
存放应用程序中生命周期长的对象
不会频繁执行,MagorGC之前一般都进行了一次MinorGC,使得有对象晋升到了老年带。
异常
OuofMemoryError
方法区(永久代)
JVM加载的类信息、常量、静态变量、即时编译后的代码等数据。
JAVA8与元数据
java8中永久代被移除了,被元空间代替。其功能与永久代类似。字符串和常量放在堆中。其他放入本地内存
直接内存
NIO提供了基于Channel和Buffer的IO方式,它可以使用Nativce函数库直接分配堆外存,然后shiyongDirectByteBuffer对象作为块内存的引用进行操作。
本地内存
元空间(1.8)替换了永久代
GC要做的事情
哪些东西需要回收
什么时候回收
怎么回收
垃圾判定
引用计数算法
一个对象如果没有任何与之关联的引用,引用计算为0,那么这个对象就是可以被回收的对象。
可达性分析算法
Gcroot->对象是否可达,不可达至少被标记两次才能回收
GC算法
Mark-Sweep(标记-清除)
Copying(复制)
Mark-Compact(标记-整理)
GC回收器
模型
分代模型
Serial(单线程、复制算法)
ParNew(Serial+多线程)
Parallel Scavenge(多线程+复制算法)
Serial Old(单线程标记整理)
Parallel Old(多线程标记整理)
CMS(多线程标记清理)
常见组合
子主题
分区模型
G1
ZGC
OOM排查策略
0、查看进程
1、查看虚拟机参数:jinfo
2、查看jvm运行情况:jstat
top -Hp pid
printf "%x" pid
jstack pid |grep
jstat -gc pid 1000
3、查看内存信息,生成堆内存快照:jmap
4、分析快照文件:jhat
5、生成jvm当前时刻线程快照:jstack
OOM排查工具
JVM调优实战案例
高并发下ThreadLocal实现线程私有业务上下文
现象
压测时TPS降低,用virtualvm监测jvm情况,发现ygc频繁
分析
解决方案
ES ygc时间长
现象
分析
解决方案
报表系统OOM,后无法提供服务
现象
分析
解决方案
Neo4j OOM
现象
分析
解决方案
Java生态框架使用专题
Java生态框架源码实践专题
spring farmwork
什么是spring
spring farmwork架构
spring IOC
spring AOP
spring MVC
spring TX
实现方式
声明式事务管理:@Transactional(Isolation.READ_COMMITTED)
编程式事务管理:获取事务管理器——》 开启事务——》提交、回滚事务
传播机制
PROPAGATION_REQUIRED(默认)
Spring默认的传播机制,能满足绝大部分业务需求,如果外层有事务,则当前事务加入到外层事务,一块提交,一块回滚。如果外层没有事务,新建一个事务执行
Spring默认的传播机制,能满足绝大部分业务需求,如果外层有事务,则当前事务加入到外层事务,一块提交,一块回滚。如果外层没有事务,新建一个事务执行
PROPAGATION_REQUES_NEW
该事务传播机制是每次都会新开启一个事务,同时把外层事务挂起,当当前事务执行完毕,恢复上层事务的执行。如果外层没有事务,执行当前新开启的事务即可
该事务传播机制是每次都会新开启一个事务,同时把外层事务挂起,当当前事务执行完毕,恢复上层事务的执行。如果外层没有事务,执行当前新开启的事务即可
PROPAGATION_SUPPORT
如果外层有事务,则加入外层事务,如果外层没有事务,则直接使用非事务方式执行。完全依赖外层的事务
如果外层有事务,则加入外层事务,如果外层没有事务,则直接使用非事务方式执行。完全依赖外层的事务
PROPAGATION_NOT_SUPPORT
该传播机制不支持事务,如果外层存在事务则挂起,执行完当前代码,则恢复外层事务,无论是否异常都不会回滚当前的代码
该传播机制不支持事务,如果外层存在事务则挂起,执行完当前代码,则恢复外层事务,无论是否异常都不会回滚当前的代码
PROPAGATION_NEVER
该传播机制不支持外层事务,即如果外层有事务就抛出异常
该传播机制不支持外层事务,即如果外层有事务就抛出异常
PROPAGATION_MANDATORY
与NEVER相反,如果外层没有事务,则抛出异常
与NEVER相反,如果外层没有事务,则抛出异常
PROPAGATION_NESTED
该传播机制的特点是可以保存状态保存点,当前事务回滚到某一个点,从而避免所有的嵌套事务都回滚,即各自回滚各自的,如果子事务没有把异常吃掉,基本还是会引起全部回滚的。
隔离级别
DEFAULT
READ_UNCOMMITTED
READ_COMMITTED
REPEATABLE_READ
SERIALIZABLE
回滚原则
在默认设置下,事务只在出现运行时异常(runtime exception)时回滚,而在出现受检查异常(checked exception)时不回滚
mybatise
代码管理与部署专题
SVN
Git
Gitlab
Gitlab+Jikens
分布式与微服务专题
分布式理论
CAP
C:强一致性(Consistence)
A:可用性(Availability)
P:分区容错性(Partition tolerance)
BASE
Basically Available(基本可用)
Soft-state(软状态)
Eventually Consistent(最终一致性)
分布式事务
分布式锁
分布式id
分布式搜索
分布式协调
数据结构
leader选举
CAP:CP
子主题
分布式数据存储与处理
传统存储
mysql
引擎
InnoDB
MyIASM
Memory
数据页
行格式
记录额外信息
变长字段字段列表
NULL值列表
记录头信息
记录真实数据
列值
页格式
File Header
Page Header
Infimum + Supermun
User Recoeds
Free Space
Page Directory
File Trailer
数据索引
B+树:
聚簇索引
二级索引、联合索引
索引使用
选择唯一性索引
为经常需要排序、分组和联合操作的字段建立索引:
为常作为查询条件的字段建立索引
限制索引的数目
如果索引的值很长,那么查询的速度会受到影响
如果索引字段的值很长,最好使用值的前缀来索引
删除不再使用或者很少使用的索引
最左前缀匹配原则,非常重要的原则
尽量选择区分度高的列作为索引
尽量选择区分度高的列作为索引
索引列不能参与计算,保持列“干净”:带函数的查询不参与索引
尽量的扩展索引,不要新建索引
执行计划
三大范式
列是不可再分的
每个表只描述一件事情
表中的列不存在对非主键列的传递依赖
锁
乐观锁
悲观锁
事务
性质
原子性
隔离性
一致性
持久性
事务问题
脏读
幻读
不可重复读
事务隔离机制
未提交读(Read Uncommitted)
提交读(Read Committed)
可重复读(Repeated Read)
串行读(Serializable)
oracle
postgre
Mogondb
Redis
数据结构及内部编码
String
Hash
List:链表
lpush+lpop=Stack(栈)
lpush+rpop=Queue(队列)
lpush+ltrim=Capped Collection(有限集合)
lpush+brpop=Message Queue(消息队列)
Set:集合
zSet:有序集合
应用场景
关注模型
阅读量
信息流
购物车
分布式队列、栈、阻塞队列
点赞
抽奖
排行榜
持久化
集群架构
内存
缓存问题隐患
缓存雪崩
缓存穿透
缓存击穿
缓存预热
缓存更新
缓存降级
IO模型
IO多路复用
Tidb
Hbase
Hive
Flink
Clickhouse
分布式消息中间件
RocketMQ
RabbitMQ
Kafka
微服务架构技术体系
注册中心
配置中心
服务鉴权
服务通信
服务网关
服务熔断
服务降级
服务限流
限流算法
服务监控
链路追踪
日志中心
springcloud alibaba&&spring cloud
业务模型专题
SSO:单点登录
项目实践专题
通用知识图谱系统
舆情知识图谱系统
架构管理知识图谱系统
舆情监测与发现平台
基于爬虫技术系统
亿级数据存储与检索平台
微服务平台
数据结构与算法专题
数据结构
栈
队列
链表
散列表
堆
树
二叉搜索树
红黑树
B树
B+树
图
有向图
无向图
斐波那契堆
算法
排序算法
查找算法
高级设计和分析技术
图算法
其他算法问题
计算机网络专题
经典设计模式专题
单一职责原则
接口隔离原则
依赖倒置原则
迪米特法则
开闭原则
里氏替换原则
单例模式
原型模式
代理模式
静态代理
动态代理
工厂模式
简单工厂
工厂方法
抽象工厂
策略模式
模板方法模式
责任链模式
适配器模式
装饰者模式
订阅模式
建造者模式
组合模式
桥接模式
0 条评论
下一页