Java 面試寶典

來源:互聯網
上載者:User

1 Java 基礎部分

1)Java 的實值型別和物件類型

 boolean,int,float,double,char,byte,short,long

2)記憶體回收的優點和原理

   大多數記憶體回收演算法使用了根集(root set)這個概念;所謂根集就量正在執行的Java程式可以訪問的引用變數的集合(包括局部變數、參數、類變數),程式可以使用引用變數訪問對象的屬性和調用對象的方法。垃圾收集首選需要確定從根開始哪些是可達的和哪些是不可達的,從根集可達的對象都是使用中的物件,它們不能作為垃圾被回收,這也包括從根集間接可達的對象。而根集通過任意路徑不可達的對象符合垃圾收集的條件,應該被回收。

4) Error與Exception有什麼區別

Error(錯誤)表示系統級的錯誤和程式不必處理的異常,是java運行環境中的內部錯誤或者硬體問題,比如,記憶體資源不足等,對於這種錯誤,程式基本無能為力,除了退出運行外別無選擇。
Exception(違例)表示需要捕捉或者需要程式進行處理的異常,它處理的是因為程式設計的瑕疵而引起的問題或者在外的輸入等引起的一般性問題,是程式必須處理的。

5)在java中一個類被聲明為final類型,表示了什麼意思?

   表示該類不能被繼承,是頂級類。

6)Overload和Override的區別。Overloaded的方法是否可以改變傳回值的類型?

  方法的重寫Overriding和重載Overloading是Java多態性的不同表現。重寫Overriding是父類與子類之間多態性的一種表現,重載Overloading是一個類中多態性的一種表現。如果在子類中定義某方法與其父類有相同的名稱和參數,我們說該方法被重寫 (Overriding)。子類的對象使用這個方法時,將調用子類中的定義,對它而言,父類中的定義如同被“屏蔽”了。如果在一個類中定義了多個同名的方法,它們或有不同的參數個數或有不同的參數類型,則稱為方法的重載(Overloading)。Overloaded的方法是可以改變傳回值的類型。

7)Set裡的元素是不能重複的,那麼用什麼方法來區分重複與否呢? 是用==還是equals()? 它們有何區別?

   Set裡的元素是不能重複的,那麼用iterator()方法來區分重複與否。equals()是判讀兩個Set是否相等。

equals()和==方法決定引用值是否指向同一對象equals()在類中被覆蓋,為的是當兩個分離的對象的內容和類型相配的話,返回真值。

8)abstract class和interface有什麼區別?

     聲明方法的存在而不去實現它的類被叫做抽象類別(abstract class),它用於要建立一個體現某些基本行為的類,並為該類聲明方法,但不能在該類中實現該類的情況。不能建立abstract 類的執行個體。然而可以建立一個變數,其類型是一個抽象類別,並讓它指向具體子類的一個執行個體。不能有抽象建構函式或抽象靜態方法。Abstract 類的子類為它們父類中的所有抽象方法提供實現,否則它們也是抽象類別為。取而代之,在子類中實現該方法。知道其行為的其它類可以在類中實現這些方法。

    介面(interface)是抽象類別的變體。在介面中,所有方法都是抽象的。多繼承性可通過實現這樣的介面而獲得。介面中的所有方法都是抽象的,沒有一個有程式體。介面只可以定義static final成員變數。介面的實現與子類相似,除了該實作類別不能從介面定義中繼承行為。當類實現特殊介面時,它定義(即將程式體給予)所有這種介面的方法。然後,它可以在實現了該介面的類的任何對象上調用介面的方法。由於有抽象類別,它允許使用介面名作為引用變數的類型。通常的動態聯編將生效。引用可以轉換到介面類型或從介面類型轉換,instanceof 運算子可以用來決定某對象的類是否實現了介面。

9)Java中如何?多繼承?

  通過內部類進行實現,子類中建立內部類分別繼承需要繼承的父類,在子類中使用內部類的方法。

10)Java 1.4 和1.5以及1.6 的區別

11)ArrayList和Vector的區別,HashMap和Hashtable的區別

    就ArrayList與Vector主要從二方面來說.

   一.同步性:Vector是安全執行緒的,也就是說是同步的,而ArrayList是線程式不安全的,不是同步的

   二.資料增長:當需要增長時,Vector預設增長為原來一培,而ArrayList卻是原來的一半

    就HashMap與HashTable主要從三方面來說。

    一.曆史原因:Hashtable是基於陳舊的Dictionary類的,HashMap是Java 1.2引進的Map介面的一個實現

    二.同步性:Hashtable是安全執行緒的,也就是說是同步的,而HashMap是線程式不安全的,不是同步的

    三.值:只有HashMap可以讓你將空值作為一個表的條目的key或value

12)描述一下JVM載入class檔案的原理機制?

    類從載入到釋放的階段:載入,驗證,準備,解析,初始化,使用和卸載。其中驗證,準備和解析三個部分為串連。

13)Java記憶體溢出的檢查?

    java.lang.OutOfMemoryError: PermGen space 載入的類太多了

     java.lang.OutOfMemoryError: Java heap space

14) 各個實值型別的位元組大小?

15 ) Java 中引用的分類

強引用,軟引用 (SoftReference實現,當記憶體發生溢出之前進行二次回收),弱引用(WeakReference實現,關聯的對象生存到下一次記憶體回收之前),虛引用

2 多線程相關

1)請說出你所知道的線程同步的方法

2)線程間的共用

3)線程同步

3 記憶體相關

4 Spring架構

1)IOC使用原理

2)AOP使用原理

3)AOP使用情境

4)IOC具體的配置如何配置

5)IOC的類型

6)事務層級

    為解決事務之間的3個缺陷,必須在事務之間建立隔離關係來保證事務的完整性。

    ISOLATION_DEFAULT        
        使用資料庫預設的隔離等級

    ISOLATION_COMMITTED    
        允許讀取其他並發事務已經提交的更新(防此髒讀)

    ISOLATION_READ_UNCOMMITTED

        允許讀取其他並發事務還未提交的更新,會導致事務之間的3個缺陷發生,這是速度最快的一個隔離等級,但同時它的隔離等級也是最低

    ISOLATION_REPEATABLE_READ

        除非事務自身修改了資料,否則規定事務多次重複讀取資料必須相同(防此髒讀,不可重複讀取)

    ISOLATION_SERIALIZABLE

        這是最高的隔離等級,它可以防此髒讀,不可重複讀取和幻讀等問題,但因其侵佔式的資料記錄完全鎖定,導致它影響事務的效能,成為隔離等級中最展慢的一個。

5 Hibernate架構

1) 事務類型

2)懶載入

3)實體的狀態

   瞬時:一個實體進行NEW後,沒有和Hibernate的Session建立關係,也沒有手動賦值過該實體的持久化標識。該實體更新不會影響資料庫

   持久化:當一個實體和Hibernate的Session建立了關係,並擷取了持久化標識,而且在Hibernate的Session生命週期記憶體在。此時針對該實體的任何屬性的更改都會直接影響到資料庫中一條記錄對應欄位的更新

    脫管:當一個實體和Hibernate的Session建立了關係,並獲得了持久化標識,而此時Hibernate的Session的生命週期結束,實體的持久化標識沒有被改動過。針對該實體的任何屬性的修改不會及時反映到資料庫中

4)Session

開啟Session:開啟Session不會馬上取得Connection,而是在最後真正需要串連資料庫進行更新或查詢時才會取得Connection,如果有設定Connection pool,則從Connection pool中取得Connection,而關閉Session時,如果有設定Connection pool,則是將Connection歸還給Connection pool,而不是直接關閉Connection。

儲存:透過Session,可以對資料庫進行新增、刪除、更新;save()之後,不會馬上對資料庫進行更新,而是在Transaction的commit()之後才會對資料庫進行更新

擷取:get()和load(),get方法首先查詢session緩衝,沒有的話查詢二級緩衝,最後查詢資料庫;反而load方法建立時首先查詢session緩衝,沒有就建立代理,實際使用資料時才查詢二級緩衝和資料庫。如果對象為空白,get()返回NULL而load()會返回代理對象,當使用具體的屬性時,查詢資料庫中沒有則報ObjectNotFoundException。

刪除:delete();

更新:

合并:merge();

5)狀態轉換

用new建立出對象,這些對象還沒有與資料庫發生任何的關係,不對應於資料庫中的任一筆資料;Persistent 對象通過調用delete()方法,也成為Transient 的,把Detached (脫管)對象轉換成Transient (瞬時)的

當對象與資料庫中的資料有對應關係,並且與Session執行個體有關聯,並且Session執行個體尚未關閉,則它是在Persistent狀態。例:Transient狀態的對象使用Session的save()方法儲存到資料庫後,對象成為persistent狀態

Detached狀態的對象,與資料庫中的具體資料對應,但脫離Session執行個體的管理,例如:在使用load()、get()方法查詢到資料並封裝為對象之後,將Session執行個體關閉,則對象由Persistent狀態變為Detached狀態。

6)快取

      資料庫在記憶體中的臨時容器,從資料庫中讀取的資料在快取中會有一份臨時拷貝,當您查詢某個資料時,會先在快取中尋找是否有相對應的 拷貝,如果有的話就直接返回資料,而無需串連資料庫進行查詢,只有在快取中找不到資料時,才從資料庫中查詢資料,藉由快取,可以提升應用程式讀取資料時的 效能。

7)Hibernate 代理對象

      使用load()載入的對象是代理對象。代理對象為查詢實體的子類。當使用具體屬性時,才去資料查詢。Hibernate使用的是asm.jar和cglig。在記憶體中修改類對象的位元組碼,修改後的位元組碼符合Class規則則可以組建代理程式對象

8)Hibernate Domain對象 不能為fianl

      不呢進行懶載入,因為懶載入使用的是代理對象

6 Hadoop架構

7 設計模式

8 Java WEB

1)JSP中請求轉寄和重新導向?

2) Servlet的生命週期?

9 資料庫知識

1)資料庫中的鎖

共用鎖定(S鎖):

如果事務T對資料A加上共用鎖定後,則其他事務只能對A再加共用鎖定,不能加獨佔鎖定。獲准共用鎖定的事務只能讀資料,不能修改資料。

獨佔鎖定(X鎖):

如果事務T對資料A加上獨佔鎖定後,則其他事務不能再對A加任任何類型的封鎖。獲准獨佔鎖定的事務既能讀資料,又能修改資料。

2)資料不一致的類型:丟資料修改,讀“髒”資料,不可重複讀取,產生幽靈資料

2)暫存資料表

3)事務類型

Read Uncommited :讀未提交資料( 會出現髒讀,不可重複讀取,幻讀 ,避免了 第一類丟失 更新 )

Read Commited :讀已提交的資料(會出現不可重複讀取,幻讀)

Repeatable Read :可重複讀(會出現幻讀)

Serializable :序列化

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.