常見Java面試整理

  1. 接口的意義
    規範,可拓展,回調
  2. 抽象類的意義
    爲其子類提供一個公共的類型,封裝子類中重複的內容,定義抽象方法,子類雖然有不一樣的實現,可是定義是一致的
  3. 內部類的做用
    內部類能夠用多個實例,每一個實例都有本身的狀態信息,而且與其餘外圍對象的信息相互獨立。
    在單個外圍類中,可讓多個內部類以不一樣的方式實現同一個接口,或者繼承同一個類。
    建立內部類對象的時刻並不依賴於外圍類對象的建立。
    內部類並無使人迷惑的「is-a」關係,他就是一個獨立的實體。
    內部類提供了更好的封裝,除了該外圍類,其餘類都不能訪問
  4. 父類的靜態方法是否能夠被子類重寫
    static靜態的方法是屬於類的,而繼承和重寫是相對於對象來講的。
    若是子類中有父類中的靜態方法,只能說是隱藏父類的靜態方法
  5. java虛擬機的特性
    通常的高級語言若是要在不一樣的平臺上運行,至少須要編譯成不一樣的目標代碼的,而引入了java虛擬機後,java代碼在不一樣的
    平臺上運行不須要從新編譯
  6. 哪些狀況下的對象會被垃圾回收機制處理掉
    Java垃圾回收機制最基本的作法是分代回收,內存中的區域被劃分紅成不一樣的世代,年輕,年老永久,當一個對象存活時間足夠久的時候
    就會被複制到年老代中,對於不一樣的世代可使用不一樣的垃圾回收算法。進行世代劃分的出發點是對應用中對象存活時間進行研究以後得出的統計規律。通常來講,一個應用中的大部分對象的存活時間都很短。好比局部變量的存活時間就只在方法的執行過程當中。基於這一點,對於年輕世代的垃圾回收算法就能夠頗有針對性。
  7. == 和 equals 的區別
    == 是一個操做符 而equals是一個方法,而且這個方法是Object中的方法,咱們能夠經過重寫來equals方法來實現咱們本身的比較邏輯
  8. 爲何說對象的equals方法比較爲true,那麼他們的hashcode方法返回的int值也要相同?
    若是兩個對象根據equals()方法比較是相等的,那麼調用這兩個對象中任意一個對象的hashCode方法都必須產生一樣的整數結果。
    若是兩個對象根據equals()方法比較是不相等的,那麼調用這兩個對象中任意一個對象的hashCode方法,則不必定要產生相同的整數結果
    從而在集合操做的時候有以下規則:
    將對象放入到集合中時,首先判斷要放入對象的hashcode值與集合中的任意一個元素的hashcode值是否相等,若是不相等直接將該對象放入集合中。若是hashcode值相等,而後再經過equals方法判斷要放入對象與集合中的任意一個對象是否相等,若是equals判斷不相等,直接將該元素放入到集合中,不然不放入。
    回過來講get的時候,HashMap也先調key.hashCode()算出數組下標,而後看equals若是是true就是找到了,因此就涉及equals
  9. String , StringBuffer , StringBuilder
    String : 字符串常量
    StringBuffer , StringBuilder :字符串變量
  10. Java多態的理解
    多態存在的三個必要條件:java

    1. 要有繼承
    2. 要有重寫
    3. 父類引用指向子類對象
  11. 線程的阻塞
  12. 里氏替換原則
    子類不能重寫父類已經實現的方法
    子類重寫父類的方法時,返回值必須比父類更嚴格
  13. try...finally try中有return時的執行順序
    首先finally代碼塊裏的代碼是必定會執行的程序員

    1. 若是try中有return語句,會先將return的結果保存起來,而後執行finally中的代碼,若是在finally中改變了要return
        的數據的值,也不會影響到return的值
    2. 若是在finally中寫了return語句,那麼就會返回return的值
  14. 常見的異常算法

    • ArithmeticException(算術異常)
    • ClassCastException (類轉換異常)
    • IllegalArgumentException (非法參數異常)
    • IndexOutOfBoundsException (下標越界異常)
    • NullPointerException (空指針異常)
  15. 面向對象6原則一法則
    單一職責原則 : 說的就是高內聚,一個類只應該作一件事
    開閉原則 : 對拓展開發,對修改關閉 ,想要表達的意思是:把可能會修改的地方抽象出來(接口),具體的實現是能夠改變和拓展的
    里氏替換原則 : 在用到父類的地方必定可用其子類代替,想要表達的是:同一個繼承體系中的對象應該具備共同的行爲特徵
    依賴注入原則 :要依賴抽象,不要依賴具體的實現,爲了實現這個原則,就要求咱們在編程的時候針對抽象類或者接口編程
    接口分離:不該該強迫程序依賴他們不須要的接口 一個接口不須要提供太多的行爲,一個接口應該只提供一種對外的功能,不該該把全部的操做都封裝到一個接口中。
    迪米特法則 :一個對象應該對象其餘對象儘可能少的瞭解,意思是要咱們下降程序的耦合度
  16. sleep() 和 wait()的區別
    sleep()會讓出cpu的執行時間一段時間,可是不會釋放鎖,若是在同步的環境中,有可能出現死鎖
    wait是指在一個已經進入了同步鎖的線程內,讓本身暫時讓出同步鎖,以便其餘正在等待此鎖的線程能夠獲得同步鎖並運行
  17. 何時使用同步
    當多個線程使用一個共享資源時,使用同步
  18. 何時使用異步
    當一個操做須要會費很長的時間去作,而且不但願讓程序等待方法的返回時,採用異步,這樣效率更高
  19. 什麼是內存泄漏
    程序員建立了一個對象,之後一直不使用這個對象了,可是這個對象一直被引用,即這個對象無用可是卻沒法被垃圾回收器回收
    例如:長生命週期的對象持有短生命週期對象的引用可能會發生內存泄漏,編程

    一個外部類對象返回了一個內部類的對象,這個內部類對象一直被引用了,即便那個外部類實例對象再也不被使用,但因爲內部類持久外部類的實例對象,這個外部類對象將不會被垃圾回收,這也會形成內存泄露
相關文章
相關標籤/搜索