java異經常見面試問題

java異經常見面試問題

1、java異常的理解

異常主要是處理編譯期不能捕獲的錯誤。出現問題時能繼續順利執行下去,而不致使程序終止,確保程序的健壯性。java

處理過程:產生異常狀態時,若是當前的context不具有處理當前異常的能力,將在heap上new出來一個異常對象,中止當前的執行路線,把產生的異常對象拋給更高層的context。面試

 

Throwable:異常類    Error:系統異常;不能恢復;Exception :普通異常;可恢復sql

利用try/catch/finally處理異常數據庫

 

何時使用Finally呢?

某些事物(除內存外)在異常處理完後須要恢復到原始狀態,如:開啓的文件,網絡鏈接等。數組

2、運行時異常和通常異常有何異同:

異常表示程序運行過程當中可能出現的非正常狀態,運行時異常表示虛擬機的一般操做中可能遇到的異常,緩存

是通常常見的運行錯誤。java編譯器要求方法必須聲明拋出可能發生的非運行時異常,可是並不要求必須聲明拋出網絡

未被捕獲的運行時異常。指針

 

異常分爲runtime exception和checked exception對象

checked exception :java編譯器強制要求catch此類異常,如io異常、sql異常。遞歸

runtime exception:不須要強制性處理,一旦出現異常,交由虛擬機接管。

 

 3、遇到的異常類有哪些?產生的緣由?

NullPointException:空指針

ArrayIndexOutOfBoundsException:數組越界

IllegalArgumentException:參數非法

BufferOverflowExeption:緩存溢出

ClassNotFoundException:在編譯時沒法找到指定類

ClassCastException:類型強轉

ExceptionInInitializerError:靜態初始值或靜態變量初始值期間發生異常

UnsatisfiedLinkError:JNI加載dll或者so文件時未找到

NoClassDefFoundError:在編譯時能找到合適的類,而在運行時不能找到合適的類

 

4、OutOfMemoryError(內存溢出)

產生緣由:

一、內存中加載的數據量過於龐大,如上一次從數據庫取出過多的數據。

二、集合類中有對對象的引用,使用完後未清空,使得JVM不能回收。

三、代碼中存在死循環或循環產生過多重複的對象實體。

四、使用的第三方軟件中的Dug

五、啓動參數內存值設定的太小

重點排查一下幾點:

一、檢查代碼中是否有死循環或遞歸循環

二、檢查是否有大循環重複產生新對象實體。

三、檢查對數據庫查詢中,是否有一次得到所有數據的查詢,通常來講,若是一次取出十萬條記錄到內存中,就可能引發內存溢出,這個問題

比較隱蔽,在上線前,數據庫中數據較少,不容易出問題,上線後,數據庫中數據多了,一次查詢就有可能引發內存溢出,所以對於數據庫查詢儘可能採用分頁

的方式查詢。

四、檢查LIst、Map等集合對象是否有使用後,未清除的問題,List、Map等集合對象會始終存有對對象的引用,使得這些對象不能被GC回收。

五、檢查對大文件的讀取是否採用類nio的方式。

相關文章
相關標籤/搜索