18道Java面試題,都是今年頻繁會出現的,趕快看看哪裡不會!

學習之路很艱辛,來不得一點馬虎,這裡是小編整理的18道面試題,在很大程度上這18道題不能改變大傢什麼,但是能夠給小夥伴們參考一下,查漏補缺。將自己的知識庫完善。

在介紹這篇文章之前,先給大家介紹一下,我是一名5年Java開發的程序員現在辭職在家,在此我跟大家說一下,我從今年開始就一直在做一個Java學習的分享,包括了Java視頻(案例化+系統化),學習筆記,開發工具,名企面試題等資料,每天更新!送給學習Java的每一個小夥伴。領取方法:關注後右上角私信發我“資料” 就可以馬上加入我們了!

18道Java面試題,都是今年頻繁會出現的,趕快看看哪裡不會!

1、訪問修飾符public,private,protected,以及不寫(默認)時的區別?

答:修飾符 當前類 同 包 子 類 其他包

public √ √ √ √

protected √ √ √ ×

default √ √ × ×

private √ × × ×

類的成員不寫訪問修飾時默認為default。默認對於同一個包中的其他類相當於公開(public),對於不是同一個包中的其他類相當於私有(private)。受保護(protected)對子類相當於公開,對不是同一包中的沒有父子關係的類相當於私有。Java中,外部類的修飾符只能是public或默認,類的成員(包括內部類)的修飾符可以是以上四種。

2.String 是最基本的數據類型嗎?

答:不是。Java中的基本數據類型只有8個:byte、short、int、long、float、double、char、boolean;除了基本類型(primitive type)和枚舉類型(enumeration type),剩下的都是引用類型(reference type)。

3.float f=3.4;是否正確?

答:不正確。3.4是雙精度數,將雙精度型(double)賦值給浮點型(float)屬於下轉型(down-casting,也稱為窄化)會造成精度損失,因此需要強制類型轉換float f =(float)3.4; 或者寫成float f =3.4F;

4.Static Nested Class 和 Inner Class的不同

答: Nested Class (一般是C++的說法),Inner Class (一般是JAVA的說法)。Java內部類與C++嵌套類最大的不同就在於是否有指向外部的引用上。注: 靜態內部類(Inner Class)意味著1創建一個static內部類的對象,不需要一個外部類對象,2不能從一個static內部類的一個對象訪問一個外部類對象

5.&和&&的區別

答: &是位運算符,表示按位與運算,&&是邏輯運算符,表示邏輯與(and)

6.Collection 和 Collections的區別

答: Collection是集合類的上級接口,繼承與他的接口主要有Set 和List.Collections是針對集合類的一個幫助類,他提供一系列靜態方法實現對各種集合的搜索、排序、線程安全化等操作

7.什麼時候用assert

答: assertion(斷言)在軟件開發中是一種常用的調試方式,很多開發語言中都支持這種機制。在實現中,assertion就是在程序中的一條語句,它對一個boolean表達式進行檢查,一個正確程序必須保證這個boolean表達式的值為true;如果該值為false,說明程序已經處於不正確的狀態下,系統將給出警告或退出。一般來說,assertion用於保證程序最基本、關鍵的正確性。assertion檢查通常在開發和測試時開啟。為了提高性能,在軟件發佈後,assertion檢查通常是關閉的

8.ThreadLocal變量含義(線程局部變量)

18道Java面試題,都是今年頻繁會出現的,趕快看看哪裡不會!

9.、abstract class和interface有什麼區別

答: 聲明方法的存在而不去實現它的類被叫做抽象類(abstract class),它用於要創建一個體現某些基本行為的類,併為該類聲明方法,但不能在該類中實現該類的情況。不能創建abstract 類的實例。然而可以創建一個變量,其類型是一個抽象類,並讓它指向具體子類的一個實例。不能有抽象構造函數或抽象靜態方法。Abstract 類的子類為它們父類中的所有抽象方法提供實現,否則它們也是抽象類為。取而代之,在子類中實現該方法。知道其行為的其它類可以在類中實現這些方法接口(interface)是抽象類的變體。在接口中,所有方法都是抽象的。多繼承性可通過實現這樣的接口而獲得。接口中的所有方法都是抽象的,沒有一個有程序體。接口只可以定義static final成員變量。接口的實現與子類相似,除了該實現類不能從接口定義中繼承行為。當類實現特殊接口時,它定義(即將程序體給予)所有這種接口的方法。然後,它可以在實現了該接口的類的任何對象上調用接口的方法。由於有抽象類,它允許使用接口名作為引用變量的類型。通常的動態聯編將生效。引用可以轉換到接口類型或從接口類型轉換,instanceof 運算符可以用來決定某對象的類是否實現了接口

18道Java面試題,都是今年頻繁會出現的,趕快看看哪裡不會!

10.Java中的volatile變量有什麼特點

volatile是一個變量修飾符,有且只有成員變量才能用它修飾。多線程當中如果缺少同步,一個成員變量被修改之後就不一定被其他線程可見,如果對該變量加上volatile修飾,那麼就可以保證下一次讀操作一定會在上一次操作之後發生。

11.線程安全的概念,Vector是否是線程安全類?

有多個線程同時運行代碼,如果每次運行的結果都跟單線程運行結果一樣,各種變量的值也一直跟預期的一樣,這就可以稱這段代碼是線程安全的,記住是一直,某次跟單線程運行的結果一樣是不行的

集合類根據線程是否安全可以分為兩類,線程安全和非線程安全。Vector是使用同步的方法來實現線程安全的JDK1.1的時候引入的而和它類似的Arraylist是在JDK1.1引入的,並且不是線程安全的。

12.ArrayList和Vector的區別,HashMap和Hashtable的區別

答: 就ArrayList與Vector主要從二方面來說.一.同步性:Vector是線程安全的,也就是說是同步的,而ArrayList是線程序不安全的,不是同步的二.數據增長:當需要增長時,Vector默認增長為原來一培,而ArrayList卻是原來的一半就HashMap與HashTable主要從三方面來說。一.歷史原因:Hashtable是基於陳舊的Dictionary類的,HashMap是Java 1.2引進的Map接口的一個實現二.同步性:Hashtable是線程安全的,也就是說是同步的,而HashMap是線程序不安全的,不是同步的三.值:只有HashMap可以讓你將空值作為一個表的條目的key或value

13.GC是什麼? 為什麼要有GC

答: GC是垃圾收集的意思(Gabage Collection),內存處理是編程人員容易出現問題的地方,忘記或者錯誤的內存回收會導致程序或系統的不穩定甚至崩潰,Java提供的GC功能可以自動監測對象是否超過作用域從而達到自動回收內存的目的,Java語言沒有提供釋放已分配內存的顯示操作方法。

14.Java有沒有goto?

答:goto 是Java中的保留字,在目前版本的Java中沒有使用。(根據James Gosling(Java之父)編寫的《The Java Programming Language》一書的附錄中給出了一個Java關鍵字列表,其中有goto和const,但是這兩個是目前無法使用的關鍵字,因此有些地方將其稱之為保留字,其實保留字這個詞應該有更廣泛的意義,因為熟悉C語言的程序員都知道,在系統類庫中使用過的有特殊意義的單詞或單詞的組合都被視為保留字)

15.談談final, finally, finalize的區別

答: final—修飾符(關鍵字)如果一個類被聲明為final,意味著它不能再派生出新的子類,不能作為父類被繼承。因此一個類不能既被聲明為 abstract的,又被聲明為final的。將變量或方法聲明為final,可以保證它們在使用中不被改變。被聲明為final的變量必須在聲明時給定初值,而在以後的引用中只能讀取,不可修改。被聲明為final的方法也同樣只能使用,不能重載finally—再異常處理時提供 finally 塊來執行任何清除操作。如果拋出一個異常,那麼相匹配的 catch 子句就會執行,然後控制就會進入 finally 塊(如果有的話)finalize—方法名。Java 技術允許使用 finalize() 方法在垃圾收集器將對象從內存中清除出去之前做必要的清理工作。這個方法是由垃圾收集器在確定這個對象沒有被引用時對這個對象調用的。它是在 Object 類中定義的,因此所有的類都繼承了它。子類覆蓋 finalize() 方法以整理系統資源或者執行其他清理工作。finalize() 方法是在垃圾收集器刪除對象之前對這個對象調用的

18道Java面試題,都是今年頻繁會出現的,趕快看看哪裡不會!

16.解釋內存中的棧(stack)、堆(heap)和靜態區(static area)的用法。

答:通常我們定義一個基本數據類型的變量,一個對象的引用,還有就是函數調用的現場保存都使用內存中的棧空間;而通過new關鍵字和構造器創建的對象放在堆空間;程序中的字面量(literal)如直接書寫的100、”hello”和常量都是放在靜態區中。棧空間操作起來最快但是棧很小,通常大量的對象都是放在堆空間,理論上整個內存沒有被其他進程使用的空間甚至硬盤上的虛擬內存都可以被當成堆空間來使用。

17.String和StringBuilder、StringBuffer的區別?

答:Java平臺提供了兩種類型的字符串:String和
StringBuffer/StringBuilder,它們可以儲存和操作字符串。其中String是隻讀字符串,也就意味著String引用的字符串內容是不能被改變的。而
StringBuffer/StringBuilder類表示的字符串對象可以直接進行修改。StringBuilder是Java 5中引入的,它和StringBuffer的方法完全相同,區別在於它是在單線程環境下使用的,因為它的所有方面都沒有被synchronized修飾,因此它的效率也比StringBuffer要高。

18.HashMap和Hashtable的區別

答: HashMap是Hashtable的輕量級實現(非線程安全的實現),他們都完成了Map接口,主要區別在於HashMap允許空(null)鍵值(key),由於非線程安全,效率上可能高於Hashtable。HashMap允許將null作為一個entry的key或者value,而Hashtable不允許。HashMap把Hashtable的contains方法去掉了,改成containsvalue和containsKey。因為contains方法容易讓人引起誤解。 Hashtable繼承自Dictionary類,而HashMap是Java1.2引進的Map interface的一個實現。最大的不同是,Hashtable的方法是Synchronize的,而HashMap不是,在多個線程訪問Hashtable時,不需要自己為它的方法實現同步,而HashMap 就必須為之提供外同步。 Hashtable和HashMap採用的hash/rehash算法都大概一樣,所以性能不會有很大的差異。

想要更多關於Java的知識點嗎?關注後右上角私信發我“資料” 然後可以領取更多的關於Java的面試題


分享到:


相關文章: