java面試問題收集(2)
阿新 • • 發佈:2017-08-13
mybatis con list集合 dst rollback ace 因子 lstat iterator 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工作原理
http://www.importnew.com/7099.html
http://blog.csdn.net/hpc19950723/article/details/64920214?locationNum=8&fps=1
負載因子 0.75,自動resize參考
選擇常量作為鍵值,這也是選擇String的原因
數據存放在Entry[]自定義數組裏,Entry實現了鏈表功能,也就是bucket(key,value,next(key,value))
3 Vector 和ArrayList
http://blog.csdn.net/qq924862077/article/details/48039567
vector線程安全的,其他都和ArrayList一樣
4 Java集合叠代器之fail-fast機制
http://blog.csdn.net/u014558484/article/details/52221458
http://www.cnblogs.com/shamo89/p/6685216.html
http://blog.csdn.net/tkd03072010/article/details/6759234
ArrayList和CopyOnWriteArrayList
HashMap和ConcurrentHashMap
itorator遍歷增刪改 ,前者都是fail-fast,有增減元素時候觸發,因為後者 Iterator重新實現了,不會checkForComodification
5 ThreadLocal
http://blog.csdn.net/lufeng20/article/details/24314381
線程隔離的秘密,就在於ThreadLocalMap這個類。ThreadLocalMap是ThreadLocal類的一個靜態內部類, 每個線程中都有一個獨立的ThreadLocalMap副本,它所存儲的值,只能被當前線程讀取和修改
6 handlermapping放的什麽
http://www.cnblogs.com/dragonfei/p/6148625.html
7事務嵌套
8 mybatis原理
http://blog.csdn.net/luanlouis/article/details/37671851
連接池
當我們需要創建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的事務管理分為兩種形式:
一、使用JDBC的事務管理機制:即利用java.sql.Connection對象完成對事務的提交(commit())、回滾(rollback())、關閉(close())等
二、使用MANAGED的事務管理機制: 這種機制MyBatis自身不會去實現事務管理,而是讓程序的容器如(JBOSS,Weblogic)來實現對事務的管理
mybatis框架分為:接口層、數據處理層(框架支撐)
接口層 MyBatis和數據庫的交互有兩種方式:
a.使用傳統的MyBatis提供的API(SqlSession根據Statement ID, 在mybatis配置對象Configuration中獲取到對應的MappedStatement對象,
然後調用mybatis執行器來執行具體的操作。
b. 使用Mapper接口,純粹是為了滿足面向接口編程的需要,原理和a一樣
框架支撐 事務管理機制 連接池管理機制 緩存機制
9 多表連接的三種方式詳解 HASH JOIN MERGE JOIN NESTED LOOP
http://blog.csdn.net/tianlesoftware/article/details/5826546
<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方法,[email protected]
@Autowired是根據類型進行自動裝配的。如果當spring上下文中存在不止一個UserDao類型的bean時, [email protected]@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){}
}
java面試問題收集(2)