单例
public class Singleton2 {
private Singleton2() {
}
private static class Innrer {
private static final Singleton2 INSTANCE = new Singleton2();
}
public static Singleton2 getInstance() {
return Singleton2.getInstance();
}
}
public class Singleton1 {
private static Singleton1 instance;
private Singleton1() {
}
public static Singleton1 getInstance() throws InterruptedException {
if (instance == null) {
synchronized (Singleton1.class) {
if (instance == null) {
TimeUnit.SECONDS.sleep(1);
instance = new Singleton1();
}
}
}
return instance;
}
}
传播属性 描述
REQUIRED 如果有事务在运行,当前方法就在这个事务内运行,否则就启动一个新事务,并在自己的事务内运行
REQUIRED_NEW 当前方法必须启动新事务,并在它自己的事务内运行,如果有事务在运行,应该将它挂起
SUPPORTS 如果有事务在运行,当前的方法就在这个事务内运行,否则它可以不运行在事务中
NOT_SUPPORTED 当前方法不应该运行在事务中,如果有事务运行则应该将它挂起
MANDATORY 当前方法必须运行在事务当中,如果没有运行的事务,则抛出异常
NEVER 当前方法不应该运行在事务当中,如果有运行的事务则抛出异常
NESTED 如果有事务在运行,当前的方法就应该在这个事务的嵌套事务内运行,否则,就启动一个新事务,并在他自己的事务内运行
数据库隔离级别
一般用读已提交
POST请求中文乱码问题,在web.xml中配一个CharacterEnCodingFilter 过滤器
GET请求中文乱码问题解决方式,修改Tomcatserver.xml配置文件
Linux常用命令
简单说说你了解的类加载器,可以打破双亲委派么,怎么打破。
类加载器 就是根据指定全限定名称将class文件加载到JVM内存,转为Class对象。
启动类加载器(Bootstrap ClassLoader):由C++语言实现(针对HotSpot),负责将存放在\lib目录或-Xbootclasspath参数指定的路径中的类库加载到内存中。
其他类加载器:由Java语言实现,继承自抽象类ClassLoader。
扩展类加载器(Extension ClassLoader):负责加载\lib\ext目录或java.ext.dirs系统变量指定的路径中的所有类库。
应用程序类加载器(Application ClassLoader)。负责加载用户类路径(classpath)上的指定类库,我们可以直接使用这个类加载器。一般情况,如果我们没有自定义类加载器默认就是用这个加载器。
打破: 线程上下文加载器(Thread Context ClassLoader) 打破双亲委派机制则不仅要继承ClassLoader类,还要重写loadClass和findClass方法。
1:自己写一个类加载器
2:重写loadclass方法
3:重写findclass方法