1. 程式人生 > >java面試問題收集(2)

java面試問題收集(2)

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提供的APISqlSession根據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)