1、synchronized和volatile的区别是什么?
1、synchronized是修饰方法、代码块。volatlie是变量修饰符
2、synchronized可以保证变量的修改可见性和原子性。volatile仅能实现变量的修改可见性和禁止jvm指令重排
3、synchronized会造成线程阻塞而volatile不会造成线程阻塞
2、说一下你熟悉的设计模式
1、单例模式:保证被创建一次,节省系统开销
2、工厂模式(简单工厂、工厂方法):解耦合
3、代理模式:代理模式分为静态代理和动态代理,动态代理有jdk动态代理和cglib动态代理
4、模板方法模式:定义了一个算法的骨架,而将一些步骤延迟到子类种,模板方法使得子类可以在不改变算法的情况下,重新定义算法的步骤
5、观察者模式:定义了对象之间的一对多的依赖。这样一来每当一个对象改变时,它的所有的依赖者都会收到通知并自动更新
6、适配器模式
7、策略模式
8、责任链模式
3、动态代理是什么?
动态代理是运行时动态生成代理类
动态代理的应用有:spring的aop,java注解对象的获取等
4、单例的实现方式 ?
1、饿汉模式
public class EHan{
privated static EHan ehai=new Ehan;
private EHan(){}
public static EHan create(){
return ehan;
}
}
2、懒汉模式
public class LaiHan{
private static volatile LaiHan laihan;
private LaiHan(){}
public static LaiHan create(){
if(laihan!=null){
synchronized(LaiHan.class){
if(laihan!=null){
laihan=new LaiHan;
}
}
}
return laihan;
}
}