本人微信公众号"aeolian"~
秋夜雨巷

Mysql中一级缓存二级缓存区别

一级缓存:   也称本地缓存,sqlSession级别的缓存。一级缓存是一直开启的;与数据库同一次会话期间查询到的数据会放在本地缓存中。   如果需要获取相同的数据,直接从缓存中拿,不会再查数据库。   一级缓存失效的四种情况:       1.sqlSession不同。       2.sqlSession相同,查询条件不同。因为缓存条件不同,缓存中还没有数据。       3.sqlSession相同,在两次相同查询条件中间执行过增删改操作。(因为中间的增删改可能对缓存中数据进行修改,所以不能用)       4.sqlSession相同,手动清空了一级缓存。 二级缓存:全局缓存;基于namespace级别的缓存。一个namespace对应一个二级缓存。       工作机制:1.一个会话,查询一条数据,这个数据会被放在当前会话的一级缓存中。…

秋夜雨巷

Java创建线程的三种方式

一、继承Thread类创建线程类 (1)定义Thread类的子类,并重写该类的run方法,该run方法的方法体就代表了线程要完成的任务。因此把run()方法称为执行体。 (2)创建Thread子类的实例,即创建了线程对象。 (3)调用线程对象的start()方法来启动该线程。 二、通过Runnable接口创建线程类 (1)定义runnable接口的实现类,并重写该接口的run()方法,该run()方法的方法体同样是该线程的线程执行体。 (2)创建 Runnable实现类的实例,并依此实例作为Thread的target来创建Thread对象,该Thread对象才是真正的线程对象。 (3)调用线程对象的start()方法来启动该线程。 三、通过Callable和Future创建线程…

秋夜雨巷

HashMap和HashTable区别

HashMap是基于哈希表实现的,每一个元素是一个key-value对,其内部通过单链表解决冲突问题,容量不足(超过了阀值)时,同样会自动增长。HashMap和HashTable都使用哈希表来存储键值对。在数据结构上是基本相同的,都创建了一个继承自Map.Entry的私有的内部类Entry,每一个Entry对象表示存储在哈希表中的一个键值对。 Hashtable继承自Dictionary类,而HashMap继承自AbstractMap类。但二者都实现了Map接口。 两者计算hash的方法不同:  Hashtable计算hash是直接使用key的hashcode对table数组的长度直接进行取模: int hash = key.hashCode(); int index…

秋夜雨巷

RESTFUL风格 put 报错 HTTP Status 405 - JSPs only permit GET POST or HEAD

出现下图这种情况时是controller所return的jsp视图找不到, 所以提示请求只允许GET、POST、HEAD。  解决方案 1.若返回视图,把表单中name为_method的input值改为GET、POST、HEAD,不能使用PUT、DELETE等。 2.若返回字符串,则加上@ResponseBody。(可以把返回的对象转换为json数据写进response的body区域中)。

秋夜雨巷

jdk动态代理使用及原理

jdk动态代理的使用 1.创建实现InvocationHandler接口的类,实现invoke(Object proxy, Method method, Object[] args)接口,其中invoke()执行的方法就为代理实例对象执行的方法。 其中proxy为代理对象,method为方法,args为方法的参数。 要想在原类方法上在进行再处理(如记录日志等),需要用构造方法把接口子类的实例传入,用method.invoke(原对象,args),则执行invoke里的函数原函数。 2.创建代理实例对象…