1 Integer int相等問題
Integer對象和int比較的時候會有一個拆箱的過程,始終相等
Integer和new Integer對象不會相等,引用不一樣
兩個Integer對象比較,Integer ii=3,等同於Integer ii=Integer.valueof(3);當值在-128-127之間從cache中取回引用,其餘的new,因此在區間內的對象相等,值相等
Integer.equals是比較intvalue()
String.equals也是比較內容是否相同
StringBuffer類中沒有從新定義equals這個方法,所以這個方法就來自Object類,而Object類中的equals方法是用來比較「地址」的
2 HashMap工做原理
負載因子 0.75,自動resize參考
選擇常量做爲鍵值,這也是選擇String的緣由
數據存放在Entry[]自定義數組裏,Entry實現了鏈表功能,也就是bucket(key,value,next(key,value))
vector線程安全的,其餘都和ArrayList同樣
ArrayList和CopyOnWriteArrayList
HashMap和ConcurrentHashMap
itorator遍歷增刪改 ,前者都是fail-fast,有增減元素時候觸發,由於後者 Iterator從新實現了,不會checkForComodification
5 ThreadLocal
線程隔離的祕密,就在於ThreadLocalMap這個類。ThreadLocalMap是ThreadLocal類的一個靜態內部類, 每一個線程中都有一個獨立的ThreadLocalMap副本,它所存儲的值,只能被當前線程讀取和修改
6 handlermapping放的什麼
7事務嵌套
8 mybatis原理
鏈接池
當咱們須要建立SqlSession對象並須要執行SQL語句時,這時候MyBatis纔會去調用dataSource對象來建立java.sql.Connection對象
MyBatis將鏈接池中的PooledConnection分爲兩種狀態: 空閒狀態(idle)和活動狀態(active),這兩種狀態的PooledConnection對象
分別被存儲到PoolState容器內的
idleConnections和
activeConnections兩個List集合中
PooledConenction實現了InvocationHandler接口,而且,proxyConnection對象也是根據這個它來生成的代理對象, 咱們調用PooledDataSource
的getConnection()方法返回的就是這個proxyConnection對象,當咱們調用此proxyConnection對象上的任何方法時,都會調用PooledConnection對象內invoke()方法
Configuration 加載
org.apache.ibatis.session.Configuration 對象做爲一個全部配置信息的容器,Configuration對象的組織結構和XML配置文件的組織結構幾乎徹底同樣
MyBatis初始化的過程,就是建立 Configuration對象的過程, mybatis的初始化就發生在 SqlSessionFactoryBuilder.builder, 方法中調用了XMLConfigBuilder的parse()方法,而後返回了Configuration對象
MyBatis的事務管理的實現機制
MyBatis的事務管理分爲兩種形式:
1、使用JDBC的事務管理機制:即利用java.sql.Connection對象完成對事務的提交(commit())、回滾(rollback())、關閉(close())等
2、使用MANAGED的事務管理機制:這種機制MyBatis自身不會去實現事務管理,而是讓程序的容器如(JBOSS,Weblogic)來實現對事務的管理
mybatis框架分爲:接口層、數據處理層(框架支撐)
接口層 MyBatis和
數據庫的交互有兩種方式:
a.使用傳統的MyBatis提供的API
(
SqlSession根據
Statement ID, 在
mybatis配置對象
Configuration中獲取到對應的
MappedStatement對象,
而後調用
mybatis執行器來執行具體的操做。
b. 使用Mapper接口,純粹是爲了知足面向接口編程的須要,原理和a同樣
框架支撐
事務管理機制
鏈接池管理機制
緩存機制
<context:property-placeholder
location
=
"classpath:/config/ibatis/jdbc.properties"
/>
CountDownLatch用來進行多線程測試
redis過時時間設置
hash內部key設置過時時間?
Spring MVC的實例化和自動裝配工做
<content:component-scan base-package="" annotation-config="true"/>
<
aop:aspectj-autoproxy
/>
系統初始化時,component-scan 掃描(Controller、Service、Repository)後將BeanDefinition實例放入BeanFactory,
同時annotation-config的設置註冊AutowiredAnnotationBeanPostProcessor(實例執行了自動裝配 )到bean工廠,
Bean實例初始化是在第一次請求Bean實例的時候,spring調用BeanFactory的getBean,Spring會檢查肯定調用的構造器,並實例化該Bean.
實例化完成後,Spring會調用Bean工廠的populateBean方法, populateBean方法即是調用了BeanPostProcessor實例來完成屬性
元素的自動裝配工做,來填充bean實例的屬性,也就是咱們前面提到的自動裝配了,Spring會檢查被裝配的屬性是否存在自動裝配的
其餘屬性,而後遞歸調用getBean方法,直到全部@Autowired的元素都被裝配完成
@Autowired是根據類型進行自動裝配的。若是當
spring上下文中存在不止一個UserDao類型的bean時, 可使用@Qualifier配合@Autowired來解決這些問題
@Aspect
public class aspectAnotationClass{
@PointCut("execution(* *(..)&&annotation(com...classname))")
public void gg(){}
@Before("gg()")
public void beforefun(){}
@After("gg()")
public void afterfun(){}
@Around("gg()")
public Object aroundfun(ProceedingJoinPoint pjp){}
}