单例
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方法