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