頻率較高的Java面試題

頻率較高的Java面試題
  1. 面向對象的三大特性:
    封裝:把數據和操作數據的方法綁定起來,暴露出想要暴露的方法,供其他類調用。
    繼承:是從已有類中獲得信息創建新類的過程,提供信息的類叫做父類(超類,基類),繼承的類爲子類(派生類), 繼承具有傳遞性。
    多態(最精髓的東西):不同類型的對象對同一消息做出的不同的響應,條件:方法重寫,父類引用指向子類對象
  2. java中多態的機制:運行時綁定,只有到需要的時候纔會決定具體使用哪個類的哪個方法,並不是聲明該類的方法
  3. java異常:
    編譯時異常:運行前的異常,都必須要顯示處理;處理方式有兩種(1)利用trycatch語句(2)定義方法時拋出異常
    運行時異常:數組下標越界異常,類型轉換異常,空指針異常,除數是0異常,IO異常,FilenotExist異常
  4. 下面的語句執行的結果是:3。  因爲異常機制有一個原則,當try或者catch語句中有返回語句,會先執行finally語句,然後繼續執行返回語句(防止一些流打開了沒有關閉就返回,導致程序異常),可是當執行到第八行的時候語句已經返回,所以不會在執行catch中的語句
  5.  java基礎類型所佔字節數:
    byte:1    short:2    char:2    int:4    float:4    double:8      long:8     boolean:1(有時多個boolean也只佔一個字節)
  6. linkedhashmap有序
  7. ArrayList 、HashSet、 HashMap都不是線程安全的,都沒有加鎖,使用下列方法可以變成線程安全的
  8. java創建多線程的三種方式:(1)new thread對象(無參),重寫run方法  ,並調用start方法;(2)new thread對象(參數爲new runnable)(3)實現runnable接口,重寫run方法;
  9. java中wait()和sleep()的不同之處在於:wait會釋放鎖,而sleep會持有鎖,wait通常用於線程間交互,sleep用於暫停執行
  10. synchronized 和volatile:
    volatile:(1)保證了不同線程對這個變量操作的可見性,即一個線程修改這個變量的值,其他線程立即可見
                   (2)只能作用於變量
                   (3)不會造成線程阻塞
                   (4)不能被編譯器優化
    synchronized :(1)鎖定當前變量,只有當前線程可以修改
                              (2)可作用於變量,方法,類
                              (3)可能造成線程阻塞
                              (4)可以被編譯器優化
  11. 下面的代碼的輸入結果是:

    輸出結果一定小於1000,每一個線程運行時都有一個線程棧,線程棧中保存了線程運行時的變量的信息,但線程運行時,首先通過變量的引用找到變量在堆內存中的值,然後複製到線程棧中,當線程運行時修改的是線程棧中的值,線程運行完畢,會將線程棧中的值在傳回到堆內存中,所以在圖中的程序中就會出現線程安全問題,因此結果一般小於1000;
  12.  線程池:事先將多個線程放到一個容器中,當使用的時候就不是去new線程,而是直接去線程池中拿線程即可,節省了開闢子線程的時間,提高代碼執行效率
    有點:(1)通過重複使用已創建的線程降低線程創建和銷燬帶來的消耗
               (2)提高響應速度,當任務到達時,不需要等待線程創建就能立即執行
               (3)提高線程的可管理性,線程是稀缺資源,如果無限制的創建,不僅消耗系統資源,還會降低系統的穩                     定性,使用線程池可以進行統一分配,調優和監控。






發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章