总结
2021-08-09 11:10:46 22 举报
AI智能生成
知识架构总结
作者其他创作
大纲/内容
spring
spring事务
1、什么是事务
2、事务的ACID特性
3、并发事务的问题
4、SQL标准定义了四个隔离级别
5、Spring对事务的支持
编程式事务管理
子主题
声明式事务管理
6、Spring事务管理接口
事务传播行为
支持当前事务的情况
REQUIRED
SUPPORTS
MANDATORY
不支持当前事务的情况
REQUIRES_NEW
NOT_SUPPORTED
NEVER
其他情况
NESTED
事务属性
propagation 属性
isolation 属性
timeout 属性
readOnly 属性
rollbackFor 属性
noRollbackFor属性
参考
@Transactional 注解使用详解
@Transactional 的作用范围
@Transactional 的常用配置参数
@Transactional 事务注解原理
@Transactional失效场景
1、@Transactional 应用在非 public 修饰的方法上
2、@Transactional 注解属性 propagation 设置错误
3、@Transactional 注解属性 rollbackFor 设置错误
4、同一个类中方法调用,导致@Transactional失效
5、异常被你的 catch“吃了”导致@Transactional失效
6、数据库引擎不支持事务
IoC
什么是Ioc
Ioc解决了什么问题
DI(依赖注入)Dependency Injection
3种方式
AOP
Spring Bean的作用域
bean的生命周期
Spring解决循环依赖的问题
Spring 三级缓存如何解决循环依赖
容器循环依赖
setter循环依赖
构造器循环依赖
为什么Spring不能解决构造器的循环依赖
为什么多实例Bean不能解决循环依赖?
Bean 注册与使用
BeanFactory和FactoryBean的区别
Spring中的设计模式
工厂设计模式
单例模式
代理设计模式
模板方法
观察者模式
适配器模式
装饰者模式
@Autowired注解实现原理(Spring的自动装配)
Spring,SpringMVC,SpringBoot,SpringCloud的理解
Controller是单例的,是线程安全的吗
SpringBoot
什么是SpringBoot
SpringBoot自动装配的原理
什么是 SpringBoot 自动装配
SpringBoot 是如何实现自动装配的?如何实现按需加载?
如何实现一个 Starter
总结
参考:
Spring Boot 配置加载顺序,几种方式来加载配置
SpringCloud
eureka
eureka-server
- Register(服务注册):把自己的 IP 和端口注册给 Eureka。
- Renew(服务续约):发送心跳包,每 30 秒发送一次。告诉 Eureka 自己还活着。
- Eviction(服务剔除):当 Eureka Client 和 Eureka Server 不再有心跳时,Eureka Server 会将该服务实例从服务注册列表中删除,即服务剔除。
- Cancel(服务下线):当 provider 关闭时会向 Eureka 发送消息,把自己从服务列表中删除。防止 consumer 调用到不存在的服务。
- Get Registry(获取服务注册列表):获取其他服务列表。
- Replicate(集群中数据同步):eureka 集群中的数据复制与同步。
- Make Remote Call(远程调用):完成服务的远程调用。
- Renew(服务续约):发送心跳包,每 30 秒发送一次。告诉 Eureka 自己还活着。
- Eviction(服务剔除):当 Eureka Client 和 Eureka Server 不再有心跳时,Eureka Server 会将该服务实例从服务注册列表中删除,即服务剔除。
- Cancel(服务下线):当 provider 关闭时会向 Eureka 发送消息,把自己从服务列表中删除。防止 consumer 调用到不存在的服务。
- Get Registry(获取服务注册列表):获取其他服务列表。
- Replicate(集群中数据同步):eureka 集群中的数据复制与同步。
- Make Remote Call(远程调用):完成服务的远程调用。
缓存机制
自我保护机制
Eureka Server 进入自我保护机制,会出现以下几种情况:
通过在 Eureka Server 配置如下参数,开启或者关闭保护机制:
eureka.server.enable-self-preservation=true
eureka.server.enable-self-preservation=true
eureka-client
配置
参考
springcloud如何实现服务的注册和发现
ribbon和feign区别
ribbon负载均衡策略
配置
feign重试机制
配置
常见的负载均衡策略
SpringCloud断路器的作用
熔断器配置
MQ
为什么使用消息队列
解耦
异步
削峰
消息队列有什么优点和缺点
常见的MQ
activemq
入门
rabbitmq
入门
rrocketmq
入门
kafka
入门
总结
MQ如何保证消息的幂等性
消息出现重复消费的原因
解决办法
数据库场景
redis
如何保证消息不丢失
rabbitmq
生产者弄丢了数据
rabbitmq自己丢了数据
消费端弄丢了数据
kafka
生产者弄丢了数据
kafka自己丢了数据
消费端弄丢了数据
参考
如何保证消息按顺序执行
kafka
kafka一个topic,
一个partition,
一个consumer,
但是consumer内部进行多线程消费
一个partition,
一个consumer,
但是consumer内部进行多线程消费
具有顺序的数据写入到了不同的partition里面,
不同的消费者去消费,
但是每个consumer的执行时间是不固定的,
无法保证先读到消息的consumer一定先完成操作
不同的消费者去消费,
但是每个consumer的执行时间是不固定的,
无法保证先读到消息的consumer一定先完成操作
rabbitmq
一个queue,有多个consumer去消费,这样就会造成顺序的错误,
consumer从MQ里面读取数据是有序的,
但是每个consumer的执行时间是不固定的,
无法保证先读到消息的consumer一定先完成操作
consumer从MQ里面读取数据是有序的,
但是每个consumer的执行时间是不固定的,
无法保证先读到消息的consumer一定先完成操作
一个queue对应一个consumer,
但是consumer里面进行了多线程消费
但是consumer里面进行了多线程消费
参考
消息积压在消息队列里怎么办
场景
解决方案
消息设置了过期时间,过期就丢了怎么办
解决方案
积压消息长时间没有处理,mq放不下了怎么办
解决方案
如果让你设计一个MQ,你怎么设计
Kakfa详解
消息
Topic & 分区 & Log
Kakfa的broker机制
Producer
Consumer
Consumer Group
副本
kafka副本机制
kafka的副本都有哪些作用
说说follower副本为什么不对外提供服务?
leader副本挂掉后,如何选举新副本?
ISR副本集合保存的副本的条件是什么?
producer的acks参数
其他
参考
redis
redis概述
redis是什么
为什么要用Redis
缓存的基本思想
缓存给系统带来了什么问题
本地缓存
分布式缓存
缓存读写模式/更新策略
旁路缓存模式(Cache Aside Pattern)
读写穿透模式(Read/Write Through Pattern)
异步缓存写入模式(Write Behind Pattern)
分布式缓存常用的技术
Redis和Memecached的共同点和区别
共同点
区别
缓存处理数据流程
Redis常见数据结构及使用场景分析
string
list
hash
set
sorted set
其他使用场景
geospatial
hyperloglog
bitmap
Redis持久化机制
为什么要持久化
RDB(快照持久化)
AOF(append-only file)
RDB和AOF优缺点比较
如何选择持久化方式
Redis过期数据的删除策略
Redis给缓存设置过期时间有啥用
Redis的内存淘汰机制
lru算法描述
lru算法参考
Redis的线程模型
Redis 单线程模型详解
既然是单线程,怎么监听大量客户端连接
文件事件处理器(file event handler)主要是包含 4 个部分
Redis为什么不用多线程
原因
Redis6.0之后为什么引入了多线程
Redis事务
Redis 事务没有隔离级别的概念
Redis 单条命令是保证原子性的,但是事务不保证原子性
Redis 单条命令是保证原子性的,但是事务不保证原子性
代码语法错误:(编译时异常)所有的命令都不执行
代码语法错误:(运行时异常) 其他命令能正常执行 ——> 所以不保证事务的原子性
redis常见异常处理
缓存穿透
布隆过滤器
缓存空对象
缓存击穿
设置热点数据永远不过期
加互斥锁
缓存雪崩
redis高可用
限流降级
数据预热
参考
Redis的集群方案
解决的问题
主从复制模式
具体工作机制为
主从复制的优缺点
Sentinel(哨兵)模式
具体工作机制为
Cluster模式
具体工作机制为
其他理解
参考
Redis实现分布式锁
特性
互斥性
不会发生死锁
具有容错性
解铃还须系铃人
锁不能自己失效
Redlock
Redission
lua脚本保证原子性
过期时间n/3延长
多线程
线程概述
线程和进程
线程的状态
并行和并发
线程死锁
线程死锁的四个必要条件
避免死锁
sleep和wait方法
sleep和yeild方法
调用start方法,为什么不直接调用run方法
线程中断
线程创建的方式
Synchronized关键字
了解
使用
synchronized底层原理
synchronized锁优化过程(锁升级)
偏向锁
轻量级锁
自旋锁
锁的使用场景
JMM和volatile关键字
CPU缓存模型
JMM
volatile关键字
volatile禁止指令重排序
并发编程的特性
CAS算法 compare-and-swap--比较并替换
ABA问题
synchronized和volatile的区别
内存泄漏——ThreadLocal
内存泄漏
1、Thread中有一个map,就是ThreadLocalMap
2、ThreadLocalMap的key是ThreadLocal,值是我们自己设定的。
3、ThreadLocal是一个弱引用,当为null时,会被当成垃圾回收
4、重点来了,突然我们ThreadLocal是null了,也就是要被垃圾回收器回收了,但是此时我们的ThreadLocalMap生命周期和Thread的一样,它不会回收,这时候就出现了一个现象。那就是ThreadLocalMap的key没了,但是value还在,这就造成了内存泄漏。
2、ThreadLocalMap的key是ThreadLocal,值是我们自己设定的。
3、ThreadLocal是一个弱引用,当为null时,会被当成垃圾回收
4、重点来了,突然我们ThreadLocal是null了,也就是要被垃圾回收器回收了,但是此时我们的ThreadLocalMap生命周期和Thread的一样,它不会回收,这时候就出现了一个现象。那就是ThreadLocalMap的key没了,但是value还在,这就造成了内存泄漏。
Java中内存泄漏的类型
static字段引起内存泄漏
未关闭的资源导致内存泄漏
不正确的hashCode和equals
引用了外部类的内部类
重写了finalize方法
ThreadLoacl造成内存泄漏
ThreadLocal
参考
线程池
为什么要使用线程池
参数
队列执行流程
几种典型的工作队列
常见的线程池
SingleThreadExecutor
FixedThreadPool
CachedThreadPool
ScheduledThreadPool
线程池详解:https://yanglei1992.github.io/2021/02/01/java/juc/java-juc-%E7%BA%BF%E7%A8%8B%E6%B1%A0/#more
线程池的状态
线程池异常的处理方法
ThreadPoolExecutor中的execute方法和submit方法区别
shutdown()和shutDownNow()
Atomic原子类
JUC 包中的原子类是哪4类?
使用
AtomicInteger 类的原理
AQS
AQS
AQS的原理
AQS资源共享方式
公平锁和非公平锁
独占锁
ReentrantLock
独占锁的实现主要涉及到以下方法
共享锁
CountDownLatch
CyclicBarrier(循环栅栏)
Semaphore
AQS的状态
并发容器
JDK提供的
ConcurrentHashMap
1.7
1.8
CopyOnWriteArrayList
ConcurrentLinkedQueue
BlockingQueue
ArrayBlockingQueue
LinkedBlockingQueue
PriorityBlockingQueue
ConcurrentSkipListMap
跳表
乐观锁和悲观锁
volatile关键字不保证线程安全
自旋锁-手动实现
JVM
JVM体系结构
程序计数器
Java虚拟机栈
本地方法栈
堆
方法区
为什么元空间取代了永久代
运行时常量池
直接内存
Java对象的创建过程
类加载检查
分配内存
内存分配的方式
指针碰撞
空闲列表
内存分配并发问题
初始化零值
设置对象头
执行init方法
对象的内存布局
对象头
实例数据
对齐填充
对象的访问定位
句柄
直接指针
String类和常量池
String类和常量池
String常量池的实现方式
String s1 = new String("abc");这句话创建了几个字符串对象?
8 种基本类型的包装类和常量池
垃圾分代收集
堆的基本结构
对象默认存活年龄
对象分配
对象死亡判断
如何判断一个对象已经失效
引用计数法
可达性分析算法
可作为GC Roots的对象包括下面几种:
引用
不可达的对象并非“非死不可”
如何判断一个常量是废弃常量?
如何判断一个类是无用的类
垃圾收集算法
标记-清除算法
复制算法
标记-整理算法
分代收集算法
垃圾收集器
Serial 收集器(单线程)
ParNew 收集器(Serial+多线程)
Parallel Scavenge 收集器
CMS 收集器(并发)
G1 收集器
类加载
类加载过程
加载
连接
验证
准备
解析
初始化
类卸载
类加载器
BootstrapClassLoader(启动类加载器)
ExtensionClassLoader(扩展类加载器)
AppClassLoader(应用程序类加载器)
双亲委派模型
双亲委派的好处
打破双亲委派
GC参数和调优
堆大小设置
子主题
子主题
内存溢出
ThreadLocal
分布式
分布式ID
方法一:使用数据库的 auto_increment 来生成全局唯一递增ID
方法二:单点批量ID生成服务
方法三:uuid/guid
方法四:取当前毫秒数
方法五:类snowflake算法
分布式锁
数据库乐观锁;
子主题
子主题
基于Redis的分布式锁;
基于ZooKeeper的分布式锁。
参考
分布式事务
两阶段提交方案/XA方案
2PC
3PC
TCC
本地消息表
消息事务
最大努力通知
MySQL
MySQL语句执行顺序
MySQL 事务
ACID特性
隔离级别
事务不考虑隔离性可能会引发的问题
避免幻读
MVCC
具体实现
优缺点
如何解决幻读
MySQL 索引
为什么要使用索引。
什么是索引
索引底层数据结构
hash
hash索引的缺点
B+Tree索引
主键索引(聚簇索引)
非主键索引(二级索引、非聚簇索引)
覆盖索引
区别
参考
联合索引
做联合索引多个字段之间顺序你们是如何选择的
索引下推
索引这么多优点,为什么不对表中每个字段都创建索引呢。
查询优化器
索引是如何提升查询速度的。
请说出你知道的索引失效的几种情况。
谈谈你对最左前缀原则的理解。
参考
索引的本质。
参考
谈谈如何对SQL进行优化。
explain
id
select_type
table
type
system
const
eq_ref
ref
range
index
all
possible_keys
key
key_len
ref
rows
Extra
MySQL InnoDB-锁
共享锁(S锁,读锁)
排它锁(X锁,写锁)
意向共享锁(IS)和意向排它锁(IX)
悲观锁
间隙锁(Next-Key锁)
临键锁
死锁
面试题
请举出可能形成数据库死锁的原因、如何能避免死锁。
数据库中的乐观锁和悲观锁有什么区别、各适用于什么场景。
请结合你的开发经历,谈谈数据库中的乐观锁和悲观锁是具体如何被应用的。
参考
MySQL 存储引擎。
MyBatis
Mybatis的二级缓存
一级缓存
二级缓存
开启二级缓存
1、配置
2、需要实现序列化
开启或者更新缓存
useCache
flushCache
二级缓存整合ehcache
自带二级缓存的弊端
ehcache
ehcache二级缓存架构
图片
导入包
配置
整合缓存
配置缓存参数
二级缓存的应用场景
参考
子主题
MyBatis是否支持方法重载
参考
Mybatis动态代理实现方式的原理解析
参考
面试
总结1
spring
Sring中的Bean的生命周期
实例化
填充属性
BeanNameAware
BeanFactoryAware
ApplicationContextAware
后置处理器的before-InitializingBean
后置处理器的InitializingBean
属性设置
定制方法调用
后置处理器的after-InitializingBean
bean准备就绪
bean销毁
BeanFctory、FactoryBean是干什么的及其区别
BeanFctory
FactoryBean
区别
代理
代理的理解
静态代理
特点
静态代理存在的问题
动态代理
理解
JDK代理
Cglib代理
Spring的AOP技术(动态代理实现AOP)
声明式事务
事务的隔离级别
事务的传播行为
线程池
线程池的好处
创建线程池的参数
新的任务进来的处理方式
集合项目讨论我们那里使用了线程池:
抓图任务
分析任务
并发包
CopyOnWriteArrayList与ArrayList
ConcurrentHashMap 和 HashMap
CopyOnWriteArrayList底层个结构
add源码
底层是动态数组
扩容采用ReentrantLock锁定后复制一份后赋值
扩容采用ReentrantLock锁定后复制一份后赋值
ConcurrentHashMap底层结构
JDK7
数据结构
加锁机制
JDK8
数据结构
加锁机制
HashMap在jdk1.7之前和jdk1.8下的线程安全问题
JDK7 扩容环链 丢数据
JDK8 数据覆盖
参考
设计模式
策略模式
根据不同的维度,计算考勤
模板模式
业务系统与MCU控制单元的通信,发送信息定义模板,每次以模板类调用请求
Jvm结构
缓存Map过大导致现场频繁FullGC
jvm结构的重点-运行数据区
redis的理解
数据结构
String
token
直播人数统计
hash
第三方对接:接口数据返回
sort set
各种维度统计信息排序
多路IO复用模型,事件处理器
MySQL
Hash索引、B+Tree树索引的底层数据结构
索引失效
索引的理解:聚集索引,非聚集索引(覆盖索引)
spring的核心模块
WEB
websocket
Servlet
Web Mvc
WebFlux
Data Access/Integration
JDBC
ORM
XML
JMS
Transactions
中间层
AOP
Aspects
Instrument
Messaging
核心容器
Beans
Core
Context
Expression
面试题
Hash算法有哪些种
参考
如何保存缓存一致性
子主题
参考
参考
参考
@Resource和@Autowired的不同点:
@Autowired
@Resource
总结
如何写一个自己的注解?
参考:https://zhuanlan.zhihu.com/p/109056524
降级、熔断、限流
概念
降级
熔断
限流
限流算法
计数器固定窗口算法
漏斗算法
令牌桶算法
总结
https://zhuanlan.zhihu.com/p/228412634
负载均衡算法及实现
git如何合并分支
什么是eureka
子主题
算法
如何判断一个链表是环链
内存溢出和内存泄漏的区别
内存溢出
内存泄露
泄漏的分类
https://zhuanlan.zhihu.com/p/103274367
完全理解同步/异步与阻塞/非阻塞
https://zhuanlan.zhihu.com/p/22707398
springboot启动流程
springboot 由哪些注解组成
@ComponentScan
@SpringBootConfiguration
@EnableAutoConfiguration
自由主题
0 条评论
下一页