- nacos心跳检测机制:
- nacos实时更新:
- Zuul网关(Gateway):
- springbean生命周期
- BeanFactory和ApplicationContext区别(FactoryBean)
- spring出现循环依赖 如何解决
- spring bean的动态代理
- concurrenthashmap1.7和1.8
- syz修饰静态和普通的区别
- cas自旋是什么
- redis的过期机制
- docker
- java虚拟机堆空间模型
- 大对象为什么直接放入老年代
- gc怎么判断对象什么时候回收
- 空间担保原则
- MQ消息丢失怎么解决:
- 消息有几种类型:
- 双写一致性(缓存同步):
- 高可用方案:
- 分布式事务:
- mysql的锁
- mysql索引失效:
- 执行流程
- redis为什么快:
- switch可以传string吗?
- FullGc怎么排查:
- 什么软件监控JVM
- Linux操作:
redis使用场景">
redis使用场景- springboot解决了依赖冲突,starter
- 分布式锁
- Mybatis执行流程
- Mybatis如何实现一对多映射
- 自动装备什么时候初始化
- 怎么设置redis过期时间
nacos心跳检测机制:
对于临时实例,是微服务自身定时发送消息告诉nacos自己还是健康的。
当不健康状态超过一定时间就会从nacos删除。
非临时实例,是nacos定时向微服务发送消息确认是否健康。
不健康也不会被删除,永久保存再nacos中,等待他恢复。
nacos实时更新:
Zuul网关(Gateway):
一般是配合ribbon实现负载均衡
ribbon负载均衡策略:轮询,权重,随机,分发给并发量最小的~~~
springbean生命周期
1、实例化对象
2、填充属性
3、如果这个Bean实现了BeanFactory方法,传递的是spring工厂本身
4、如果这个bean实现了ApplicationContextAware,传入spring上下文中
5、如果配置了inti-method就用配置的初始化方法
6、如果bean实现了disposableBean接口,执行实现的destroy方法
7、如果这个bean不在需要,且配置了destroy方法,就执行配置的销毁方法。
BeanFactory和ApplicationContext区别(FactoryBean)
1、包不同:beans.jar~ context.jar
2、BeanFactory是spring的顶级接口,ApplicationContext是他的子接口,beanfactory的功能他都有。
3、BeanFactory是需要再创建,ApplicationContext是一开始就初始化所有的bean
FactoryBean
BeanFactory是一个工厂,或者说就是IOC容器,所有的bean归他管理,但是FactoryBean就是一个bean,特殊的bean可以对其他bean生产和装饰的bean,利用工厂+装饰者设计模式
spring出现循环依赖 如何解决
三级缓存
一级:初始化的bean
二级:实例化的bean(一些属性未赋值,或所有属性)
三级:实例化bean的工厂
spring bean的动态代理
JDK:java动态代理,反射机制实现代理接口的匿名类,再调用具体方法前调用invokerHandler来处理
cglib:基于ASM开源包,对.class文件加载,字节码来生成一个目标类的子类,执行的是这个子类。
spring先使用jdk来创建AOP代理,目标类没有实现接口的时候再调用Cglib代理。
实现方式:
jdk是针对接口,而sglib是针对类的
所以saglib代理的类方法不能用final修饰,他是子类,继承原因。
sglib性能更高,使用字节码生成代理类比反射更快。
原文地址:
https://blog.csdn.net/mywaya2333/article/details/122399020?spm=1001.2101.3001.6650.4&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7ERate-4-122399020-blog-83549841.pc_relevant_antiscanv3&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7ERate-4-122399020-blog-83549841.pc_relevant_antiscanv3&utm_relevant_index=6
concurrenthashmap1.7和1.8
syz修饰静态和普通的区别
静态是锁的.class,由他创建的所有实例化对象都上锁
而普通方法只针对单个实例化对象,不同的线程执行不同的实例化对象不受影响
cas自旋是什么
compare and swap :比较和交换
在对一行数据操作前,先记录操作前的数据,对数据操作玩后,准备修改这个数据前用之前记录的值和现在的数据值做一个比较,如果符合预期,说明没有其他人操作,就执行修改操作,如果不符合,就重复该过程。
redis的过期机制
docker
java虚拟机堆空间模型
大对象为什么直接放入老年代
因为如果大对象可以进入年轻代的话,占据太多幸存者区,导致YGC过于频繁,使得对象进入老年代太快了,从而导致FULLGC频繁。
gc怎么判断对象什么时候回收
可达性分析算法、引用计数法,看该对象的标记是否对象头的mark word是11
空间担保原则
YGC之前会判断老年代空间是否满足年轻代所有对象放入,如果可以就放心GC,如果不可以,判断之前每次平均有多大的对象放入老年代,如果够也继续YGC,不够就先执行FGC
MQ消息丢失怎么解决:
生产者——发送交换机——队列——消费者
MQ自身:持久化
生产者confirm和return机制,消费者:重试,返回给队列,spring默认的,内部重试,超过重试次数放入死信队列。
消息有几种类型:
普通模式:消费者监听队列信息,有就执行,
工作模式:可以指定每次分配给不同消费者的消息量
fanout:发送给交换机,交换机再给绑定的队列
direct:直连交换机,带有key,不支持通配符
topic:支持通配符
双写一致性(缓存同步):
1、加锁,读写操作都必须获得锁再操作,很耗费性能
2、先更新库,再删缓存
3、延时双删:先删除缓存,再更新数据库,隔一段时间,再删除缓存
高可用方案:
应用层:无状态、不适用session,负载均衡访问任意节点,如果宕机就移除
服务层:
核心服务和非核心服务分开部署,非核心服务采用降级
设置超时时间,超时后:重试、降级、转移
没有即时性要求的服务采用异步调用的方式。
缓存层:
分布式事务:
mysql的锁
全局锁,防止主从同步时带来的数据不一致,
表锁、元数据锁、意向锁
增删改查跟表定义语句的冲突,加了元数据锁
意向锁(共享、互斥):因为判断每一行太耗费性能,为了帮助表锁判断是否可以加read(可读)/write(不可读,不可改)锁。
行锁:
间隙锁
mysql索引失效:
字符串加’ ‘,不加的话,相当于给索引加了转换的函数,所以失效了。
回表:
执行流程
redis为什么快:
switch可以传string吗?
FullGc怎么排查:
1、首先查看GC日志,通过jstat -gcutil -t pid 1000 1000查看GC日志,看到FullGC的次数达到了接近两万次。。。并且GC速率没有下降的趋势。
2、又通过jmap -heap pid查看堆内存情况,发现Old区Free剩余2M。。
3、通过jmap -hsito pid查看哪些类占用的空间多,看到我们自定义的一个类占用很大,因此定位到是我们项目的代码问题。
4、通过jmap -dump:format=b,file=xxxx.hprofDump下我们的堆内存日志,通过MAT内存分析工具分析日志。查看到MAT帮助分析出来的两个问题
什么软件监控JVM
1、JDK自带的几款在线监控工具(JPS、jstat、jstack、jmap),用户实时监控JVM运行状态
2、JVM离线分析工具(VisualVM),用于分析dump下来的堆内存文件,远程监控JVM状态。
3、第三方在线监控工具(Arthas的使用)
Linux操作:
redis使用场景
springboot解决了依赖冲突,starter
分布式锁
Mybatis执行流程
Mybatis如何实现一对多映射
collection标签,property对应实体类属性,,oftype对应关联表的字段
自动装备什么时候初始化
怎么设置redis过期时间
setex(),setnx()分布式锁
expire(key,6)