java知识体系

大家好,我叫大鸡腿,大家可以关注下我,会持续更新技术文章还有人生感悟,感谢~

在这里插入图片描述

思维导图

Java
Java基础
基础类型
线程池
Concurrent包
NIO
分布式
代码规范
Spring
IOC容器
资源
验证,数据绑定
AOP
SpringCloud
JVM
内存模型
回收器
G1,CMS
回收算法
复制算法
标记回收
标记整合
分代回收
中间件
数据库
算法
缓存
Redis
8种基础数据结构
持久化rdb,aof
消息队列
定时器
Xxl-Job
Saturn
RockerMQ
事务消息
持久化
确保消息准确性
Kafka
基础结构
生产者,消费者,broker,partition
零拷贝
服务注册中心
Eureka
AP
Nacos
Zookeeper
CP
网关
Zuul
Gateway
日志追踪
Sleuth,Zipkin
熔断器
Hystrix
远程调用
Fegin
Ribbon
Dubbo
Mysql
Mongodb
索引
聚集索引
非聚集索引
最左原则
引擎
Innodb
索引数据结构
B+
MyIsam
事务
隔离级别
RR,RC,串行读,读未提交
MVCC

Java基础

  1. Java基础类型:char,byte,boolean,long,double,float,int

  2. sleep,wait区别:sleep是Thread方法,wait是对象的方法。锁的话,wait会释放锁,一般锁指对象锁。

  3. 死锁4要素:持续占用,不可剥夺,互斥,循环等待

  4. 线程安全3要素:可见性,原子性,有序性

  5. volitial可见性,但是保证不了原子性。原子性就是大家一起成功,一起失败。

  6. 动态代理:cglib,jdk代理 cglib是字节码生成子类,jdk代理是通过实现方法来创建子类

  7. Http状态码: 301永久转移 302 临时转移

  8. springboot热部署:devtools

  9. java双亲委派:Boostrap Classloader 加载,Application Classloader加载,保证类的唯一性

  10. 类加载过程: 加载->检测-> 准备->解析->初始化

  11. Nio,Aio,Bio
    Nio同步非阻塞,Aio异步非阻塞,Bio同步阻塞
    IO 流 Nio Buffer
    Nio selector来管理channel ,当channel准备了,就可以进行接通
    Direct Buffer直接缓冲区,channel.transferTo 零拷贝

  12. 线程池
    1)核心参数:初始化线程数,最大线程数,拒绝策略,队列
    2)工作原理:当线程数小于核心数量,会继续创建
    当线程数大于核心数量,小于最大线程数,会把他们放到队列里面
    当线程数大于最大线程数,之后会执行拒绝策略
    合理的设计:核心线程数+队列数量>最大线程数
    3)线程池的创建:Executors还有ThreadPoolExecutor创建。由于上面的原理可以知道,最好是手动创建,因为Executors使用一些无界队列。

    报错
    1)execute会输出日志,submit不会输出日志
    2)submit返回Future,可以使用try,catch来捕获异常
    3)Thread实现setUncatchExceptionHandler

  13. BeanFactory跟FactoryBean区别
    类工厂,工厂类。BeanFactory会创建FactoryBean
    ApplicationContext跟FactoryBean区别
    ApplicationContext是FactoryBean子类,新增国际化,资源等等

  14. 事务管理器同步

TransactionSynchronizationManager.registerSynchronization(new TransactionSynchronization(){
           void afterCommit(){
                //do what you want to do after commit
           }})
  1. spring循环依赖
  • @Qualifier
  • @Lazy
  1. 本地事务、分布式事务
本地事务 ACID 原子性,一致性,隔离型,持久性

分布式事务 CAP 一致性,可用性,分区容错性
XA两段式提交
AP  
    TM事务管理器
    TC统一的事务管理器
    RM资源管理器

BASE理论:最终一致性
  1. AOP
    aop顺序:around->before->after
    @Order值越高,越先进,越后出

  2. spring事务传递性(主要的)
    required 默认级别 有事务就用当前事务,没有的话就新建
    required_new 新建事务 如果当前有事务就挂起,再新建一事务
    Nested 嵌套事务 里面回滚外面也回滚
    Not_supported 挂起事务

Spring

  1. 官网:https://docs.spring.io/spring-framework/docs/current/reference/html/core.html#spring-core

  2. Ioc容器
    Java通常讲:控制反转,依赖注入
    按照一般情况是去new一个对象,但是spring的话是交给了容器

  3. @Resource按照name去加载
    @Autowired是按照type来加载

  4. 国际化i18n
    MessageSource

  5. 资源 Resource

  6. 验证,数据绑定和类型转换
    Validator

  7. BeanWrapper操作类属性

  8. 具有AspectJ切入点的Spring AOP

  9. 记录 LogFactory MDC

JVM

  1. 内存模型
    程序计数器,堆,栈,方法区,本地方法栈
    static放在方法区里面
  2. 回收算法:复制算法,标记清理算法,标记整理算法,分代回收
    新生代 复制算法,快,碎片多
    老年代 标记清理算法
    永久代
  3. 回收器类型
    G1 会将空间划分,然后进行回收
    CMS 目的是为了缩短回收的时间,标记清理算法
    CMS与G1对比
  4. Eden,Survior比例是1:2 由于新生代采用复制算法,可以快速的回收
  5. OOM处理
    Mat分析泄露日志
    jvm命令
    jstat 查看gc日志
    jmap 导出gc日志
  6. jvm参数
    -Xmx 堆最大值
    -Xms 堆初始值
    -Xx:survivorRatio = 8 也就是Eden:Survivor 8:2

中间件

redis

  1. 8种类型:string,list,hash,set,zset,geo,hyloglog,bitmap
  2. redis持久化rdb,aof
    rdb全量定期刷
    aof增量刷
  3. redis批量获取
    mget
    Pipeline
  4. redis分布式锁
    setnx ->px delete判断是否是当前的获取到锁
    存在问题:nx,px的时候,不安全,lua
  5. redission
    看门狗,在业务没有结束的时候会自动续期
  6. redlock解决集群分布式锁同步的问题
  7. redis单线程
    多线程存在线程上下文切换的问题,IO多路复用

消息队列

RocketMQ

  1. 事务消息
    在这里插入图片描述
    事务开启时会有half消息,根据本地事务来判断这个half消息是commit还是rollback,至于MQ接收方的处理采用最终一致性来实现,如果消费不了,会重试。最后不行会放到死信,或者人工处理。
  2. 顺序消费,只需放在同个MQ集群
  3. 重复消费,需要业务方自行处理,mysql唯一键
  4. 持久化,commitLog 同步刷盘,异步刷盘
  5. 重发机制messageDelayLevel = 1s 5s 10s 30s 1m 2m 3m 4m 5m 6m 7m 8m 9m 10m 20m 30m 1h 2h
  6. 准确性:最多一次,刚好一次,最少一次
    生产者 最多一次,保证消费者可以消费
    消费者 刚好一次消息,业务控制

Kafka

  1. 概念
    topic:
    生产者跟消费者根据topic进行消费,对数据分类
    consumer group:
    逻辑概念,客户端组,一个topic会广播给不同组,一个组只能一个客户端收到信息
    broker:
    物理概念,kafka节点,一个客户端一个broker
    partition:
    物理概念, kafka数据存储基本单元,一个topic会分布在不同的patition里面,patition里面是有序
    Replication:
    相当副本作用,增加容错性,可扩展性
    在这里插入图片描述

  2. 零拷贝
    磁盘->内核->用户空间->socket
    在这里插入图片描述
    The operating system reads data from the disk into pagecache in kernel space
    操作系统将数据从磁盘读入到内核空间的页缓存
    1)The application reads the data from kernel space into a user-space buffer
    应用程序将数据从内核空间读入到用户空间缓存中
    2)The application writes the data back into kernel space into a socket buffer
    应用程序将数据写回到内核空间到socket缓存中
    3)The operating system copies the data from the socket buffer to the NIC buffer where it is sent over the network
    操作系统将数据从socket缓冲区复制到网卡缓冲区,以便将数据经网络发出

  3. 持久化
    储存在文件系统

  4. kafka消息保证
    So effectively Kafka guarantees at-least-once delivery by default and allows the user to implement at most once delivery by disabling retries on the producer and committing its offset prior to processing a batch of messages. Exactly-once delivery requires co-operation with the destination storage system but Kafka provides the offset which makes implementing this straight-forward.

    kafka默认是保证“至少一次”传递,并允许用户通过禁止生产者重试和处理一批消息前提交它的偏移量来实现 “最多一次”传递。而“正好一次”传递需要与目标存储系统合作,但kafka提供了偏移量,所以实现这个很简单。

    To achieve this, the broker assigns each producer an ID and deduplicates messages using a sequence number that is sent by the producer along with every message。

    为了实现这一点,broker向每个生产者分配一个ID,并通过生产者发送的序列号和每个消息,达到消除重复消息的目的。

  5. 分区越多消费越快,consumer可以去多个分区拿数据

  6. kafka快原因:批量处理,分区,零拷贝,消息压缩,顺序写盘

Spring cloud

服务注册中心

  • Eureka AP
  • Zookeeper CP
  • Nacos AP

ZK

  1. 临时,永久,顺序
  2. zk实现分布式锁,临时顺序节点,通过监听节点的变更

Hystrix

  1. 有两种熔断方式:线程池模式,信号量
  2. 那么他们的区别?
    线程池是可以使用线程池拒绝策略进行限制的,资源消耗比较大,可以支持超时处理,信号量的话比较单一

微服务断路器Hystrix思考

数据库

Mysql

  1. 索引 B+树 最左原则
    聚集索引,主键
    非聚集索引,普通索引
    二分法最快查询到数据

  2. 引擎 Innodb MyIsam

  3. 事务 ACID 原子性 一致性 隔离性 持久性

  4. 隔离级别RR RC主要
    RR MVCC

  5. 索引下推
    aa like ‘林%’ and xx = 20

    这时会忽略xx,先把aa 符合的数据先查出来,然后再进行筛选。
    索引下推之后:
    这时没有忽略xx,在判断aa的时候会连同xx的条件判断进去。
    在这里插入图片描述

  6. 左模糊会用到索引

  7. 总结阿里专家mysql讲解笔记

  8. 悲观锁 for update 乐观锁 version

  9. 死锁的处理方式:show innodb status查看死锁的日志

  10. explain查看sql执行计划

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值