在vps的服務器到期了,在hw又不能訪問,直接在博客園寫筆記了。html
1. 集合類的繼承關係,源碼實現原理,初始大小和如何增加。java
- list類初始大小10,加載因子爲1,擴容到1.5+1。底層是個Object數組,調用 System.arraycopy進行拷貝。redis
- Vector同上,擴容倍數是兩倍,是同步的,線程安全。數組
- HashMap初始大小16,加載因子0.75f,擴容到2倍。底層是數組+鏈表,調用resize()調整位置。ConcurrentHashMap分段鎖,至關於若干個hashtable。安全
-散列衝突:開放定址法,鏈地址法,最壞狀況下如何優化。服務器
- HashTable初始大小11,加載因子0.75f,擴容到2倍+1。同步,線程安全。Hashtable不容許空key空value異步
- TreeMap. 底層紅黑樹,可以保持有序,效率略低。函數
-阻塞隊列LinkedBlockingQueue,非阻塞隊列ConcurrentLinkedQueue,經常使用在線程pipe上。性能
指定大小能夠提升性能。可能還會問Collections和Arrays中經常使用的方法。優化
2. interface和abstract class的區別
-接口能夠多重實現,抽象類不能多重繼承。
-抽象類中能夠有attribute,接口只能有method。
-接口的方法必須沒有實現,抽象類能夠有實現的方法。
-接口中的方法默認且必須是public的,抽象類能夠protected。
3. 實例化一個未加載過的類的過程。 class.forName,classLoader 加載類卸載類,
- 先加載類時觸發父類靜態域初始化、而後觸發子類靜態域,再調用父類構造函數,再調用子類構造函數。
- Class.forName:http://www.cnblogs.com/zabulon/p/5826610.html
- ClassLoader模型,使用:http://www.cnblogs.com/eoss/p/5992499.html
4.錯誤Error和異常Exception的分類,throws和throw的區別,return和finally的執行順序。
Java的異常(包括Exception和Error)分爲 checked exceptions 和 unchecked exceptions :
-checked exceptions :除了RuntimeException及其子類之外,其餘的Exception類及其子類。Java編譯器會檢查它,並強制要求處理。
-unchecked exceptions:包括運行時異常(RuntimeException與其子類)和錯誤(Error)。
還有ArrayIndexOutofBoundsException、SecurityException等。
5.Object有哪些方法?
-toString,hashCode,equals
-clone(淺複製),finalize,getClass
-wait,notify,notifyAll
6. ==、equals、hashCode的關係。有可能配合String問,有可能配合set問。
- ==對基本類型比較值,對引用類型比較地址。
- equals對於基本類型比較值,默認對引用類型也比較地址,(String重寫了equals方法)。
- hashCode默認返回地址,一般須要與equals一塊兒重寫。
- String a= "abc"; String b = new String("abc"); String c = "ab"+"c";
下面這些表達式的值爲真: a!=b; a==c; a.equals(b); a.equals(c);
7.基本數據類型佔的空間和範圍是多少,int大小和JVM的位寬有關係嗎?
-boolean、byte、char、short、int、long
-float、double
無關。
8.列舉一些你用過的類、包、異常,新特性。
10.volatile關鍵字的做用?
防止編譯器優化,保證cache一致性。
11.樂觀鎖悲觀鎖,公平所不公平鎖,原子類,原理實現方法。
樂觀鎖:只在提交操做時檢查是否違反數據完整,java中的實現爲cas
悲觀所:讀寫所有加鎖。
12線程協做,wait、notify、notifyAll,鎖和while條件檢查的位置,如何實現生產者消費者模式。
一般把synchronized放在while外面,防止信號丟失。
synchronized(syncObject){ while(condition){ suncObject.wait(); } }
還可使用lock、await和signal實現線程協做。見:http://www.cnblogs.com/alphablox/archive/2013/01/20/2868479.html
還可使用blockingqueue實現。
實現生產者消費者模式,見:https://zhuanlan.zhihu.com/p/20300609
13.線程狀態轉換圖,異常的處理。
-圖不貼了,比較簡單。。
-線程產生的異常須要在線程內補獲,set異常處理器。
14.string、stringbuilder、stringbuffer區別。
String是final的,因此修改效率不高,StringBuilder是線程安全的。
16IO和獲取鎖的阻塞操做能被interrupt麼?
不能拋出異常,可是會記錄下,經過isInterrupted查看。
17 BIO NIO AIO的區別
http://blog.csdn.net/anxpp/article/details/51512200
19編碼UTF-8 和GBK和ANSI的區別?
UTF-8:它對英文使用8位(即一個字節),中文使用24爲(三個字節)來編碼,通用性強.
GBK:不論中、英文字符均使用雙字節來表示.
轉碼使用unicode做爲中轉。如 String str1 = "hello";
byte[] bytes = str1.getBytes("utf-8"); //能夠將unicode的string轉碼成{"utf-8"}編碼模式下的二進制編碼
String gbk = new String(bytes , "utf-8"); //將二進制編碼按{"utf-8"}規則轉爲String。
20.異步回調的實現。
基於com.google.common.util.concurrent.ListenableFuture;
redisFuture.addListener(Runnable );
21對象序列化。
ObjectOutoutStream.writeObjet(),
22.