2019/11/5 XXX三家公司面试

一: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;
}



}

发布了33 篇原创文章 · 获赞 1 · 访问量 995

猜你喜欢

转载自blog.csdn.net/weixin_44734394/article/details/102926384