## 1. ArrayList 和 LinkedList 的使用如何選擇?
很多人回答二者不同的時候會認為ArrayList不像鏈表那樣可以靈活的增加元素或者刪除元素,但二者都提供了下面的方法可以靈活增加元素:
~~~
public void add(int index, E element)
~~~
另外LinkedList還提供了offer方法可以在前后增加元素
~~~
public boolean offerFirst(E e)
public boolean offerLast(E e)
~~~
如果要是從尾部刪除元素,那么LinkedList將是不錯的選擇,因為下面的方法是它獨有的。
~~~
public E removeLast()
//Retrieves and removes the last element of this list, or returns null if this list is empty.
public E pollLast()
~~~
## 2. 為什么重寫類的equals方法,還要同時重寫hashcode方法?
保證兩個等價對象得到相同的hashcode
## 3. SerialVersionUID的作用
在運行時判斷類的SerialVersionUID驗證版本的一致性
## 4. java的 check 和 uncheck 異常的區別是什么?
check exception是exception的子類,這類異常必須通過try-catch進行處理,否則無法編譯通過,而uncheck exception是runtime exception的子類,這類異常可以不捕獲,直接向外拋出,讓外界處理。
## 5. 簡要介紹jvm的垃圾回收機制
1)標記清除:遍歷對象圖標記可到達的對象,然后掃描堆棧,發現未標記的對象并釋放內存;
2)分代回收:將內存區域分為新生代和舊生代,使用復制算法掃描出存活對象并復制到新的未使用的空間中,指針保存在最后一個分配對象所處的位置,當新生代滿了之后,就全部轉移到舊生代,清空新生代區域,繼續裝載,直至最后內存溢出。
## 6. jvm內存模型

1)方法區:虛擬機加載的類信息、常量、靜態變量,所有線程共享該內存區域
2)虛擬機棧:方法執行時都會創建一個棧幀,用于存儲局部變量表包括方法參數、操作棧和方法出口等信息
3)本地方法棧:為Native方法服務
4)堆:被所有線程所共享,存儲了所有new的對象
5)程序計數器:選取下一條需要執行的字節碼指令,分支、循環、異常處理都需要它完成
## 7. 如何理解面向對象的開閉原則
一個軟件實體如類、模塊和函數應該對擴展開發,對修改關閉。
## 8. 簡單介紹JS的事件冒泡
事件冒泡指的是子級元素先觸發,父級元素后觸發,事件捕獲與之相反。W3C標準同時支持兩種方式,任何事件發生,從頂層元素開始事件捕獲直達事件發生的源元素,然后從事件源向上冒泡。可以通過addEventListener()對元素進行監聽,最后一個參數為true是事件捕獲。
## 9. 介紹利用log4j配置日志
## 10. 如何基于spring配置數據庫事務
## 11. 介紹使用的數據庫連接池配置
## 12. 抽象類可以在spring中定義成一個bean嗎