一:spring事务传播机制有哪些?
1、是什么?
Spring在TransactionDefinition接口中规定了7中事务传播行为,主要发生在事务方法和事务方法发生嵌套调用时的传播机制
2、分类,传播行为
3、项目中的使用
事务注解
@Transactional(rollbackFor = {Exception.class})
这是元注解
@Target({ElementType.METHOD, ElementType.TYPE}) //在哪里使用 方法
@Retention(RetentionPolicy.RUNTIME) //什么时间使用
@Inherited //继承这个注解
@Documented //生成的文档
public @interface Transactional {
AOP实现事务:异常情况会回滚
二:dubbo底层支持哪些协议
1、底层
是tcp长连接实现的,对象需要实现序列化,对象流传递,对信息进行加密处理,底层是动态代理和反射实现。
2、支持的协议
Dubbo支持dubbo、rmi、hessian、http、webservice、thrift、redis等多种协议,但是Dubbo官网是推荐我们使用Dubbo协议的。
3、dubbo消费者是何时拿到服务的地址的
在消费者启动时候,订阅注册中心的服务。注册中心返回服务列表给消费者。如图
三:linuxc查看日志文件后300行
tail -f -n 100 文件名
ps -ef|grep “字符”
四: redis持久化和内存管理
持久化
rdb:每隔一段时候生成日志文件
aof:针对操作而言的,效率低下,每时没刻。
内存管理
lru算法,定制规则根据规则来删除数据,比如时间,比如次数
五:Zookeeper怎么实现分布式锁
根据zookeeper的顺序节点概念
步骤:
1创建一个parentLock
2每个线程执行代码时,都创建一个childLock
3当A执行时创建child1Lock,此时获取parentLock下的所有的childLock,如果排序在第一个则执行,此时排序在。
4当B执行时创建child2Lock,此时火气parentLock下的所有的childLock,然后排序,发现了排序在第二位,因为child1Lock还在执行状态,此时child2Lock进入阻塞状态,等待child1Lock执行。
5当C也来执行,同理他会排在第三个,阻塞,等待child2Lock释放锁。这样就实现了分布式锁 卧槽牛逼
六:动态代理怎么实现的
proxy.newPro(类加载器,接口名,invocationHandler()); 其中invocationHandler创建时会自动执行invoke()方法,反射创建对象,得到代理类。 卧槽牛逼
七:mysql的事务隔离级别,以及mysql自带的是那种,工作用的那种,事务。
ACID:原子性,一致性,隔离性,持久性
脏读 :事务A读到了事务B的更新数据,然后B却回滚了,导致读到的数据是脏数据
不可重复读:A第一次读到的数据为1,第二次读的过程中,B将其修改为2了,导致A第二次读的数据不一致,A两次读数据是一个事务
幻读:A第一次读到的数据有100条,但是在第二次读数据的过程中,B插入了一条数据,导致了A第二次读的时候数据为101数据不一致了,就像产生了幻觉一样
丢失更新:A将数据 1改为2,发现不对,然后回滚,在回滚的过程中,B将2已经改为了3,然后导致了回滚结果为1直接覆盖了3这个数据
mysql默认的隔离级别是:读未提交 读已提交(工作:幻读和不可重复的问题) 可重复读(mysql幻读) 串行化 (这就有了并发编程)
工作:使用读已提交
八:mybatis的缓存级别
sqlSession 和namespace
九:aop:
1底层实现:是动态代理,
2功能:日志,权限。
十:jvm知识:
内存模型
pc寄存器 java虚拟机栈 本地栈
堆 方法区(常量池)
类加载机制:
装载-(校验-准备-解析)-初始化-使用-卸载
垃圾回收:
1、什么是垃圾?
gcroot可达性
指针
2、怎么回收?
标记清除、复制算法(两块区域:新生代收集)、标记整理(老年代)、分代收集
十一:单例模式
package com.xmjianhui;
/**
* 单例模式 --饿汉模式--线程安全 01 方法为静态方法
* 单例模式 --懒汉模式--线程安全 02
*/
public class Single {
/* private final static Single single = new Single();
private Single(){
//构造方法私有化
}
public static Single getSingle(){
return single;
}
*/
private static Single single ;
private Single(){
}
public static Single getSingle(){
single=new Single();
return single;
}
}