- wait和sleep的区别
wait只能在同步(synchronize)环境中被调用,而sleep不需要。
进入wait状态的线程能够被notify和notifyAll线程唤醒,但是进入sleeping状态的线程不能被notify方法唤醒。
wait通常有条件地执行,线程会一直处于wait状态,直到某个条件变为真。但是sleep仅仅让你的线程进入睡眠状态。
wait方法在进入wait状态的时候会释放对象的锁,但是sleep方法不会。
wait方法是针对一个被同步代码块加锁的对象,而sleep是针对一个线程。
- 过滤器和拦截器之间的区别
1.拦截器是基于Java的反射机制的,而过滤器是基于函数回调。
2.拦截器不依赖于servlet容器,过滤器依赖于servlet容器。
3.拦截器只能对action请求其作用,而过滤器则可以对几乎所有的请求其作用。
4.拦截器可以访问action上下文,值栈里的对象,而过滤器不能访问。
5.在action的生命周期中,拦截器可以多次被调用,而过滤器只能在容器初始化时被调用一次。
- classLoader与双亲委派机制
- 在类被加载的时候,是自底向上去执行的,考量是否以前被加载过,如果加载过,直接返回,反之就进行第二步。
- 如果没有加载过,就交给AppClassLoader,也就是Custom ClassLoader的父类,看看AppClassLoader有没有加载过。
- 循环一直到Bootstrap ClassLoader,如果都没有加载过,就会自顶向下,去加载类。
- 首先来到的是rt.jar或者看看是否是自己导入进来的jar包,去加载一下
- 如果没有,就会依次按照所给路径,按照Bootstrap ClassLoader->ExtClassLoader->AppClassLoader->CustomClassLoader去负责寻找他们对应所管辖的加载类的路径去负责加载对应的类文件。
- 需要注意的是,类加载器本身都是用同步锁包裹着的,防止多线程同步加载类。
·
- 造成oom的原因
摘自:https://blog.csdn.net/fly910905/article/details/90179225
- 对于MVCC的理解
https://juejin.im/post/5c68a4056fb9a049e063e0ab
- 线程池参数
作者:https://blog.csdn.net/u011001084/article/details/78297285
- mybatis中的#{}和${}区别
1.#将传入的数据都当成一个字符串,会对自动传入的数据加一个双引号。如:order by #user_id#,如果传入的值是111,那么解析成sql时的值为order by “111”, 如果传入的值是id,则解析成的sql为order by “id”.
2. $将传入的数据直接显示生成在sql中。如:order by
u
s
e
r
i
d
user_id
userid,如果传入的值是111,那么解析成sql时的值为order by user_id, 如果传入的值是id,则解析成的sql为order by id.
3.#方式能够很大程度防止sql注入。
4.$方式无法防止Sql注入。
5.$ 方式一般用于传入数据库对象,例如传入表名.
6.一般能用#的就别用$.