面試準備&總結-Java基礎篇

  在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.

相關文章
相關標籤/搜索