Java学习思维导图
2021-04-09 17:11:06 1 举报
AI智能生成
指导Java开发人员,成为Java架构师。
作者其他创作
大纲/内容
指令系统
微命令
微操作
微指令
机器指令
控制器
算术逻辑单元(ALU)
累加器
状态寄存器
通用寄存器组
运算器
外存储器
内存储器
存储器
输入设备
输出设备
硬件基础架构(冯·诺依曼体系结构)
总线
主板
中央处理器
CPU
内存
硬盘
GPU图形处理器
显卡
鼠标
键盘
触摸屏
TODO: 待补充……
显示器
打印机
计算机的组成
计算机组成原理
Windows
Windows Server
CentOS
以桌面应用为主
Ubuntu
Linux
Unix
iOS
Android
操作系统
物理层
数据链路层
IP协议
ICMP协议
网络层
UPD协议
TCP协议
传输层
三次握手、四次挥手
HTTP协议
FTP协议
SMTP协议
应用层
计算机网络
数组(Array)
链表(Linked List)
先进先出
堆(Heap)
后进先出(先进后出)
栈(Stack)
队列(Queue)
完美二叉树
完全二叉树
完满二叉树
二叉树
AVL树
红黑树
B树/B+树
树(Tree)
深度优先遍历
广度优先遍历
图(Graph)
散列表(哈希表 - Hash table)
数据结构(Data Structure )
递归与分治
动态规划
贪心
回溯法
分支限界法
五大常用算法
顺序查找
二分查找
插值查找
斐波那契查找
树表查找
分块查找
哈希查找
查找(检索)
冒泡排序
快速排序
交换排序
简单插入排序
希尔排序
插入排序
简单选择排序
堆排序
选择排序
二路归并排序
多路归并排序
归并排序
比较类排序
计数排序
桶排序
基数排序
非比较类排序
排序
Raft
Paxos
ZAB
Gossip
一致性Hash
分布式一致性算法
加权随机(Weight Random)法
随机(Random)法
加权轮询(Weight Round Robin)法
轮询(Round Robin)法
最小连接数(Least Active)法
源地址一致性哈希(Consistent Hash)法
负载均衡(Load Balance)算法
算法(Algorithm)
数据结构与算法
计算机基础
WebStorm(JetBrains出品)
Visual Studio Code(简称:VS code)
HBuilder
Atom(GitHub出品)
Adobe Dreamweaver CC(Adobe出品)
Sublime Text
前端
Model代码简化插件,结合maven或gradle的lombok的jar包工作
Lombok
阿里代码规范插件
Alibaba Java Coding Guidelines
统计项目代码量
Statistic
检查代码BUG,如:逻辑问题、依赖问题、性能问题、安全问题、存在漏洞等等
FindBugs
常用插件
IDEA
Eclipse
MyEclipse
后端
IDE(开发工具)
mvn package
mvn install
mvn clean
mvn deploy
Maven常用命令
Nexus
私有仓库
阿里云效Maven仓库
云仓库
Maven仓库
最新版本查看
<dependency> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-checkstyle-plugin</artifactId> <version>3.1.2</version></dependency>
CheckStyle
<dependency> <groupId>org.codehaus.mojo</groupId> <artifactId>findbugs-maven-plugin</artifactId> <version>3.0.5</version></dependency>
Maven
Gradle
项目构建管理工具
GitLab安装教程
自动化单元测试
maven插件:CheckStyle
代码规范校验
maven插件:FindBugs
代码BUG检测
CI/CD(持续集成/持续交付)
用于功能分支合并到主分支时使用的功能
Push Request
GitLab
GitHub
Gitee
Coding
阿里云效代码管理
Git仓库
分支使用规范
分支(Branch)
Git
SVN
代码版本管理工具
开发工具
Linux常用命令
Shell脚本
Linux系统
Docker常用命令
Dockerfile
Docker
容器技术
Jenkins
自动化部署
K8s
服务治理
运维技术
lambda
@FunctionalInterface
函数式接口
方法引用、构造函数引用
对集合的操作
Stream API
接口中的默认方法(default)和静态方法(static)
新时间日期API
避免空指针异常
Optional
ConcurrentHashMap.computeIfAbsent嵌套的死锁BUG
该JDK版本自带BUG
JDK1.8新特性
面向对象
封装
继承
多态
三大特性
特点
语法学习
package
import
interface
transient
class
enum
extends
implements
this
super
new
类型和实例
short
int
long
float
double
true
false
boolean
byte
char
基本数据类型
null
void
类型
default
private
protected
public
访问修饰符
static
final
abstract
线程安全编程需要
synchronized、volatile
非访问修饰符
修饰符
try、catch、finally
throw
throws
return
continue、break
do
while
for
if、else
switch
instanceof
native
关键字
基础语法
布尔型
0
0L
字符型也属于整数型,因为它由2字节组成,与0~2的16次方-1的数字内存一致
'u0000'
字符型
整数型
0.0f
0.0d
浮点型
数值型
抽象类
类
接口
数组
空类型
引用类型
数据类型
枚举
泛型
空指针:NullPointerException
参数非法:IllegalArgumentException
RuntimeException(无需throws)
类未找到:ClassNotFoundException
IO异常:IOException
非RuntimeException(需throws或捕获处理)
异常(Exception)
内存溢出:OutOfMemoryError
未找到类定义:NoClassDefFoundError
错误(Error)
异常(Throwable)
有序
可重复
链表
常用数据结构
特性
ArrayList
LinkedList
Vector
List接口
List
无序
不可重复
TreeSet
SortedSet接口
LinkedHashSet
HashSet
Set接口
Set
常用方法
Collections工具类:方便操作集合
Collection
TreeMap
SortedMap接口
ConcurrentHashMap
ConcurrentMap接口
LinkedHashMap
HashMap
Hashtable
Map接口
Map
集合
IO
Socket
网络编程
JDBC
反射
注解
静态代理
只支持对接口进行代理
JDK动态代理
CGLib
Javassist
ASM
ByteBuddy
动态代理
代理
语言基础
Single Responsibility Principle:单一职责原则
Open Closed Principle:开闭原则
Liskov Substitution Principle:里氏替换原则
Law of Demeter:迪米特法则
Interface Segregation Principle:接口隔离原则
Dependence Inversion Principle:依赖倒置原则
六大设计原则
工厂方法模式
抽象工厂模式
单例模式
建造者模式
原型模式
创建型模式(5种)
适配器模式
装饰器模式
代理模式
外观模式
桥接模式
组合模式
享元模式
结构型模式(7种)
策略模式
模板方法模式
观察者模式
迭代子模式
责任链模式
命令模式
备忘录模式
状态模式
访问者模式
中介者模式
解释器模式
行为型模式(11种)
三大类设计模式(23种)
设计模式
多线程/并发编程
语言进阶
阿里开发手册
Alibaba Java Coding Guidelines plugin support
阿里P3C插件
阿里巴巴P3C规范
用于检查代码的BUG。此插件即有IDE插件,也有maven插件。
BUG查找插件
更优代码
Java代码规范
Oracle JDK
基于OpenJDK开发的新的JVM
SpringBoot2.4开始兼容该JVM
比OpenJDK性能更高、运行更稳定
GraalVM
OpenJDK
HotSpot VM
Exact VM
J9 VM(IBM公司开发)
JVM的不同实现
JDK1.7:永久代:PermGen,HotSpot VM才有
JDK1.8:元空间:Metaspace
规范的不同实现
方法区(永久代):Method Area(一种规范)
老年代:Old(占2/3堆内存)
Eden区:80%
Survivor区1:10%
Survivor区2:10%
年轻代:Young(占1/3堆内存)
堆:Heap
栈帧:Frame
虚拟机栈:VM Stacks
本地方法栈:Native Method Stack
栈:Stack
程序计数器:Program Counter Register
运行时数据区
执行引擎:Execution Engine
本地库接口:Native Interface
图片示例
内存结构
Minor GC:清理年轻代
Major GC:清理老年代
Full GC:清理整个堆内存(包括年轻代和老年代)
三种垃圾回收方式
算法
GC(Garbage Collection):垃圾回收机制
Class Loader:类加载机制
-help
-server | -client
-version | -showversion
-cp | -classpath
标准参数
-Xint
-Xcomp
-Xmixed
X参数
格式:-XX:[+-][name],例:-X:+UseConcMarkSweepGC、-X:-UseG1GC
-X:[+-]UseConcMarkSweepGC:是否启用CMS垃圾收集器
-X:[+-]UseG1GC:是否启用G1垃圾收集器
Boolean类型
格式格式:-XX:[name]=[value],例:-XX:CICompilerCount=2
缩写写法:-X??[value],例:-Xms100M
-Xms(-XX:InitialHeapSize):初始堆内存大小
-Xmx(-XX:MaxHeapSize):最大堆内存大小
-Xss(-XX:ThreadStackSize):线程堆栈内存大小
非Boolean类型
XX参数
非标准参数
JVM参数
PID:进程ID
Thread:线程
IO:输入输出
Heap Memary:堆内存
Stack Memary:栈内存
Memary:内存
GC
JVM信息
JVM进程分析
Visual GC
插件
jvisualvm
jstat [-命令选项] [vmid] [间隔时间/毫秒] [查询次数]
使用教程
jstat
jstack
Java自带工具
官网
用户文档
GitHub开源项目
Arthas JVM
阿里开源工具
JVM调优工具
内存泄漏、内存溢出
使用java工具:jstack,导出所有线程的堆栈信息,并检查死锁的原因。
死循环、死锁
频繁执行GC
CPU占用很高
IO占用很高
问题及解决
JVM调优
JVM(Java虚拟机)
Java语言
库
表
字段
约束
索引
Atomicity(原子性)
Consistency(一致性)
Isolation(隔离性)
Durability(持久性/耐久性)
事务的特点:ACID
使用数据库默认隔离级别,每种数据库支持的事务隔离级别不一样。并且可以修改默认隔离级别。
select @@tx_isolation
MySQL查询当前隔离级别的SQL
@Transactional(isolation = DEFAULT)
可读取未提交事务的操作数据,最低的隔离级别,一般都没有用的。这种情况会出现脏读
READ_UNCOMMITTED(读未提交)
一个事务等另一个事务提交之后才可进行读取,解决了脏读问题,但会出现不可重复读
READ_COMMITED(读已提交)
解决一个事务重复读取数据,但由于其他事务修改了数据导致多次读取的数据不一致的问题
REPEATABLE_READ(可重复读)
最高的事务隔离级别,事务串行化顺序执行,可以避免脏读、不可重复读与幻读。但是这种事务隔离级别效率低下,比较耗数据库性能,一般不使用
SERLALIZABLE(序列化/串行化)
四种隔离级别
隔离级别
脏读
不可重复读
幻读
使用隔离级别解决图示
并发事务产生的问题及解决解决方案
Spring声明式事务@Transactional 详解,事务隔离级别isolation和事务传播行为propagation
事务相关参考资料
事务
SQL语句
支持事务
InnoDB
不支持事务
只有Insert和Select的数据表
使用场景
MyISAM
只有Insert和Select的数据
日志数据
归档数据
例子
Archive
临时数据
数据量不大
Memory
各引擎能力表格
存储引擎
MySQL
Oracle
关系型数据库(RDBMS)
Redis
MongoDB
非关系型数据库(NoSQL数据库)
第一范式:确保表中每列的原子性
第二范式:确保表中的每列都和主键相关
第三范式:确保每列都和主键列直接相关,而不是间接相关
三大范式
PRIMARY KEY:主键约束
UNIQUE:唯一性约束
DEFAULT:默认值约束
NOT NULL:非空约束
FOREIGN KEY:外键约束
五大约束
1. 需求分析阶段
2. 概念结构设计阶段
3. 逻辑结构设计阶段
4. 数据库物理设计阶段
5. 数据库实施阶段
6. 数据库运行与维护阶段
六大设计步骤
数据库设计
SQL分析:explain
SELECT子句中避免使用“*”
WHERE子句的连接顺序
减少访问数据库的次数
日常积累
SQL性能调优
数据库系统参数优化
性能优化
数据库
HTML、HTML5
CSS、CSS3、CSS4
jQuery
Ajax
JavaScript
NodeJS
Vue
Angular
React
前端框架
Tomcat
Jetty
负载均衡
反向代理
HTTP服务器(包含动静分离)
正向代理
Nginx
Web服务器
Servlet & JSP
Cookie & Session
JSON
XML
文件流
数据交换类型
协议:超文本传输协议(Hypertext Transfer Protocol,HTTP)
数据:JSON为主,部分也有使用XML
WebAPI
协议:简单对象访问协议(Simple Object Access Protocol,SOAP)
WSDL:Web Service定义语言
UDDI:用于描述、发现、集成Web Service的技术
数据:XML
WebService
长连接
服务端可以主动向客户端推送数据
WebSocket
数据交换方式
API
Web
IOC & DI
JointPoint(连接点)
execute
within
target
args
@within
@annotation
@target
@args
expression(表达式)
@Before
@AfterRunning
@AfterThrowing
@After
@Around
切入位置
@Pointcut(切入点)
Advice(通知)
@Aspect(切面)
Weaving(织入)
Proxy(代理)
Target(目标对象)
AOP
Bean的生命周期
Spring容器的初始化过程
JDK动态代理(默认)
Spring原理
SpringWebMVC
SpringWeb
SpringWebFlux
SpringWebSocket
propagation(事务传播模式)
isolation(事务隔离级别)
readOnly(只读事务)
timeout(事务超时时间)
rollbackFor(触发回滚的异常类型)
noRollbackFor(不触发回滚的异常类型)
@Transactional
SpringJdbc
SpringJPA
SpringRedis
SpringMongoDB
SpringData
SpringSecurity
SpringFramework
Spring
@SpringBootConfiguration
org.springframework.boot.actuate.autoconfigure.web.ManagementContextConfiguration
org.springframework.boot.autoconfigure.AutoConfigurationImportListener
org.springframework.boot.autoconfigure.AutoConfigurationImportFilter
org.springframework.boot.autoconfigure.EnableAutoConfiguration
org.springframework.boot.autoconfigure.template.TemplateAvailabilityProvider
org.springframework.boot.diagnostics.FailureAnalyzer
org.springframework.boot.diagnostics.FailureAnalysisReporter
org.springframework.boot.env.EnvironmentPostProcessor
org.springframework.boot.env.PropertySourceLoader
org.springframework.boot.SpringApplicationRunListener
org.springframework.boot.SpringBootExceptionReporter
org.springframework.context.ApplicationContextInitializer
org.springframework.context.ApplicationListener
spring.factories配置文件
spring-autoconfigure-metadata.properties配置文件
@EnableAutoConfiguration
@ComponentScan
@SpringBootApplication
内置Web服务器
前提条件:IDE中必须先安装springboot插件
SpringBoot-2.3.9中关于该描述文件官方资料
spring-configuration-metadata.json:配置信息描述文件
配置提示
components:当前组件包含的其他组件
UP
Down
code:状态枚举
description:状态描述
status:当前组件状态
当前组件的其他属性
样例截图
/actuator/health:查看服务健康状况JSON
management配置项
此信息都是自定义的
/actuator/info页面:查看info配置信息JSON
info配置项
服务监测:spring-boot-actuator
SpringBoot-2.3.9.RELEASE的PDF下载链接
参考文档
SpringBoot
权限控制
授权
黑名单与白名单拦截
限流
熔断
日志拦截
隐藏服务端的IP
解决跨域问题
网关的作用
Gateway
Zuul
网关
默认端口:8761
Eureka Server
Eureka
默认端口:8848
Nacos Server
Nacos
默认端口:2188
Zookeeper
Consul
Etcd3
Sofa
注册中心
Apollo
SpringCloudConfig
配置中心
@EnableFeignClients
@FeignClient
OpenFeign
Alibaba Dubbo
Apache Dubbo
微服务调用
基于Netflix Ribbon开发
Ribbon
服务熔断
服务降级
作用
Hystrix
熔断器
可视化:Zipkin
Zipkin
SkyWalking
链路跟踪
SpringBootAdmin
服务监控
ACID
与分布式事务对应的是本地事务的特点
C:一致性(Consistency)
A:可用性(Availability)
P是必须的,所以CAP中,只对C和A进行选择
P:分区容错性(Partition tolerance)
CAP理论
BA:基本可用(Basically Available)
S:软状态(Soft State)
E:最终一致性(Eventually Consistent)
BASE理论
分布式事务的原理
2PC
3PC
消息补偿
分布式事务实现方案
悬挂
空回滚
幂等
分布式事务存在的问题
阿里开源-seata
阿里云-GTS
蚂蚁金服-DTX
已经停更,官网域名也已过期,不建议使用
TX-LCN
分布式事务框架
分布式事务
SpringCloud
实时监测
机器发现
规则配置
控制台
集群限流
调用关系限流
热点限流
限流控制
异常熔断
线程数隔离
慢调用降级
调用链路
速率控制
系统自适应保护
削峰填谷
来源访问控制
功能
动态规则配置
Sentinel
每个接口都需要考虑在一个全局事务中,当前接口该怎样传播事务。
默认值:REQUIRED
超时后还是begin状态时,TC会将其标记为超时回滚状态进行异步全局回滚操作
默认值:30秒
timeoutMills(全局事务超时时间)
@GlobalTransactional
全局事务
原名:Fescar
满足了CAP中的CP
强一致性
数据源代理
SQL解析
前镜像
后镜像
镜像数据压缩功能(seata1.5即将发布的新特性)
undo_log
@GlobalLock
分布式锁
支持可重入锁
支持防悬挂和幂等:由本地undo_log表支持控制
AT模式
基于数据库的XA协议的实现
不支持可重入锁
XA模式
对数据进行加减的场景
金融
库存
应用场景:可预约资源场景
对应的PR #3545
最新版本(1.4.1)中,暂不支持防悬挂和幂等控制,功能开发中
一阶段
Try阶段
二阶段
Confirm阶段
Cancel阶段
理解
王良开发的PR,目前还未合并
异步提交功能
TCC模式
柔性事务
保证最终一致性
基于BASE理论
满足了CAP中的AP
直接对服务进行编排的语言
除了服务编排信息外,还包含了各节点的坐标信息等。满足设计器可视化展示。
在线编排设计器
基于设计器的服务编排语言
statelang(状态描述语言)
服务编排
状态机(State Machine)
状态机引擎(State Machine Engine)
状态(State)
正向服务(Service)
逆向补偿(Compensate)
部分情况下无法进行逆向补偿,将会通过正向重试的方式保证最终一致性
正向重试(Forward)
异常处理
SAGA模式
模式
开始时,向TC发起begin请求,开始一个全局事务,获取xid
成功时,向TC发起全局提交请求
异常时,向TC发起全局回滚请求
TM(事务发起者/管理者:TransactionManager)
AT:DataSourceManager
TCC:TCCResourceManager
XA:ResourceManagerXA
SAGA:SagaResourceManager
AbstractResourceManager
RM(事务资源管理者:ResourceManager)
TC(事务协调者:TransactionCoordinator)
角色
RPC框架:Netty
seata自研
protobuf
kryo
fst
hessian
序列化方式(SerializerType)
none
gzip
zip
sevenz
bzip2
lz4
deflater
压缩方式(CompressorType)
RPC
8
AsyncCommitting
处理状态
全局事务存在可异步提交的线程时,交由此定时任务处理。
AsyncCommitting(异步提交)
3
CommitRetrying
2
Committing
子主题
RetryCommitting(重试提交)
4
Rollbacking
5
RollbackRetrying
6
TimeoutRollbacking
7
TimeoutRollbackRetrying
RetryRollbacking(重试回滚)
1
Begin
全局事务超时时,由Begin状态变更为TimeRollbacking状态。并交由RetryRollbacking定时任务处理
TxTimeoutCheck(超时检测)
AT模式专用,异步向RM发起删除N天前的undo_log数据
UndoLogDelete
5个异步定时任务
协调器:DefaultCoordinator
核心代码:DefaultCore
服务端:seata-server
File:不使用注册中心,在文件中配置seata-server地址
ZK:Zookeeper
Custom:自定义实现
支持类型(RegistryType)
seata中使用注册中心
File:不使用配置中心,在文件中配置
支持类型(ConfigType)
seata中使用配置中心
阿里开源项目:seata
SpringCloudAlibaba
官网指南
MyBatis 3 官网指南
一级缓存
二级缓存
缓存
Mapper
MyBatis
MyBatis-Plus官网指南
BaseMapper<T>
ServiceImpl<T>
IService<T>
接口和基类
分页查询插件
SQL性能监测插件
MyBatis-Plus
JPA
ORM框架
Flyway
数据库版本管理框架
持久层框架(ORM框架)
Netty/NIO
gRPC
Thrift
RPC框架
logback
log4j
SLF4J(Simple logging Facade for Java)
日志框架
XXL-JOB
Elastic-Job
Staturn
Quartz
uncode-schedule
LTS
TBSchedule
Opencron
Antares
sia-task
任务调度框架
EhCache
常用缓存框架
缓存穿透
缓存击穿
缓存雪崩
CSDN博文
问题及解决方案
后端框架
内存数据库
单线程
多路复用
网络请求模块
索引模块
数据存储模块
高可用集群支撑模块
数据操作模块
模块
MemCache
Publisher
Exchange
Queue
RoutingKey
Consumer
Confirm
RabbitMQ
Kafka
RocketMQ
ActiveMQ
消息队列
Solr
ElasticSearch
Lucene
搜索引擎
一个方法或一条数据只能被一个机器的一个线程执行
高可用的获取锁与释放锁
高性能的获取锁与释放锁
具备可重入特性
具备锁失效机制,防止死锁
具备非阻塞锁特性,即没有获取到锁将直接返回获取锁失败
应具备的条件
常用实现方案
阿里巴巴的开源项目:seata
阿里云收费项目:GTS
蚂蚁金服:DTX
E:ElasticSearch
L:LogStash、Beats
K:Kibana
ELK
分布式日志
FastDFS
分布式文件系统
中间件
服务提供者
Provider
服务消费者
ServiceMesh(服务网格)
分布式架构:强调的是服务化以及服务的分散化
微服务架构:强调的是服务的专业化和精细分工
从概念角度理解
微服务架构通常是分布式架构的,反之则未必成立。所以,选择微服务通常意味着需要解决分布式架构的各种难题。
从实践角度理解
与分布式架构的区别
概念
Dubbo
微服务框架
微服务架构
Docker(容器化部署)
K8s(服务治理)
微服务连接
安全保障
管理
监控方式
Istio(大型微服务系统管理工具)
分布式事务难题
服务降级、熔断
服务雪崩
调用链路变长,问题难以排查
服务太多,验证以监测
分布式架构产生的问题及解决方案
分布式架构
Java学习思维导图
0 条评论
回复 删除
下一页