java面試問題收集(2)

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
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容器內的 idleConnectionsactiveConnections兩個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){}
     
}
相關文章
相關標籤/搜索