Java工程師常見面試題集錦(二)網際網路人必看!(附答案及視訊教程,持續更新)

CSDN學院發表於2019-01-09

大牛也怕面試題,尤其是基礎題,在面試中如果出現一兩題回答不準確很有可能你就被拒之門外了。CSDN學院年終傾情奉獻,海量面試題(附答案)免費分享,幫助大家順利過關。

本週繼續更新10道面試題。

Java工程師常見面試題集錦(一)網際網路人必看!https://blog.csdn.net/CSDNedu/article/details/85602533

如果覺得文字學習較慢,也可以跟著老師一起視訊學習:

Java面試題視訊學習連結:https://edu.csdn.net/course/detail/10533

 11.HashTable與HashMap的區別

1)同步性:Hashtable是執行緒安全的,也就是說是同步的,而HashMap是執行緒序不安全的,不是同步的。

2)HashMap允許存在一個為null的key,多個為null的value 。

3)hashtable的key和value都不允許為null。

 

12.如何解決HashMap的執行緒不安全問題

1)替換成Hashtable,Hashtable通過對整個表上鎖實現執行緒安全,因此效率比較低

2)使用Collections類的synchronizedMap方法包裝一下。方法如下:

public static <K,V> Map<K,V> synchronizedMap(Map<K,V> m)  返回由指定對映支援的同步(執行緒安全的)對映

3)使用ConcurrentHashMap,它使用分段鎖來保證執行緒安全

通過前兩種方式獲得的執行緒安全的HashMap在讀寫資料的時候會對整個容器上鎖,而ConcurrentHashMap並不需要對整個容器上鎖,它只需要鎖住要修改的部分就行了

 

13.Collection 和 Collections 的區別

Collection 是 java.util 下的介面,它是各種集合的父介面,繼承於它的 介面主要有 Set 和 List;Collections 是個 java.util 下的類,是針對集合的 幫助類,提供一系列靜態方法實現對各種集合的搜尋、排序、執行緒安全化等操作 。

Java工程師常見面試題集錦(一)網際網路人必看!https://blog.csdn.net/CSDNedu/article/details/85602533

如果覺得文字學習較慢,也可以跟著老師一起視訊學習:

Java面試題視訊學習連結:https://edu.csdn.net/course/detail/10533

14. List、Map、Set 三個介面,存取元素時,各有什麼特點

List 以特定次序來持有元素,可有重複元素。

Set 無法擁有重複元素,內部 排序。

Map 儲存 key-value 值,value 可多值。

 

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

Set 裡的元素是不能重複的,用 equals ()方法來區分重複與否。

覆蓋 equals()方法用來判斷物件的內容是否相同,而”==”判斷地址是否相等,用來 決定引用值是否指向同一物件。

 

16.TreeMap和TreeSet在排序時如何比較元素?Collections工具類中的sort()方法如何比較元素

TreeSet要求存放的物件所屬的類必須實現Comparable介面,該介面提供了比較元素的compareTo()方法,當插入元素時會回撥該方法比較元素的大小。                                                                                                                                              TreeMap要求存放的鍵值對對映的鍵必須實現Comparable介面從而根據鍵對元素進行排序。                                            Collections工具類的sort方法有兩種過載的形式,第一種要求傳入的待排序容器中存放的物件比較實現Comparable介面以實現元素的比較;第二種不強制性的要求容器中的元素必須可比較,但是要求傳入第二個引數,引數是Comparator介面的子型別(需要重寫compare方法實現元素的比較),相當於一個臨時定義的排序規則,其實就是是通過介面注入比較元素大小的演算法,也是對回撥模式的應用。

 

17.Map集合

實現類:HashMap、Hashtable、LinkedHashMap和TreeMap

HashMap是最常用的Map,它根據鍵的HashCode值儲存資料,根據鍵可以直接獲取它的值,具有很快的訪問速度,遍歷時,取得資料的順序是完全隨機的。因為鍵物件不可以重複,所以HashMap最多隻允許一條記錄的鍵為Null,允許多條記錄的值為Null,是非同步的。

Hashtable與HashMap類似,是HashMap的執行緒安全版,它支援執行緒的同步,即任一時刻只有一個執行緒能寫Hashtable,因此也導致了Hashtale在寫入時會比較慢,它繼承自Dictionary類,不同的是它不允許記錄的鍵或者值為null,同時效率較低。

ConcurrentHashMap,執行緒安全,並且鎖分離。ConcurrentHashMap內部使用段(Segment)來表示這些不同的部分,每個段其實就是一個小的hash table,它們有自己的鎖。只要多個修改操作發生在不同的段上,它們就可以併發進行。

LinkedHashMap儲存了記錄的插入順序,在用Iteraor遍歷LinkedHashMap時,先得到的記錄肯定是先插入的,在遍歷的時候會比HashMap慢,有HashMap的全部特性。

TreeMap實現SortMap介面,能夠把它儲存的記錄根據鍵排序,預設是按鍵值的升序排序(自然順序),也可以指定排序的比較器,當用Iterator遍歷TreeMap時,得到的記錄是排過序的。不允許key值為空,非同步的。

 

18.ArrayList擴容機制【必考】

1)發生擴容的條件:

根據傳入的最小需要容量minCapacity來和陣列的容量長度對比,若minCapactity大於或等於陣列容量,則需要進行擴容。(如果實際儲存陣列是空陣列,則最小需要容量就是預設容量)

2)實現擴容:

jdk7中採用>>位運算,右移動一位。 容量相當於擴大了1.5倍;

3)舉例說明:新增20個元素到ArrayList中

當第一次插入元素時才分配10(預設)個物件空間。之後擴容會按照1.5倍增長。

也就是當新增第11個資料的時候,Arraylist繼續擴容變為10*1.5=15;

當新增第16個資料時,繼續擴容變為15 * 1.5 =22個

 

19.Java 中的異常處理機制的簡單原理和應用

當 JAVA 程式違反了 JAVA 的語義規則時,JAVA 虛擬機器就會將發生的錯誤表 示為一個異常。違反語義規則包括 2 種情況。一種是 JAVA 類庫內建的語義檢查。 例如陣列下標越界,會引發 IndexOutOfBoundsException;訪問 null 的物件時會 引發 NullPointerException。另一種情況就是 JAVA 允許程式設計師擴充套件這種語義檢 查,程式設計師可以建立自己的異常,並自由選擇在何時用 throw 關鍵字引發異常。 所有的異常都是 java.lang.Thowable 的子類。

 

20.程式設計題:寫一個Singleton示例

Singleton:在Java中即指單例設計模式,它是軟體開發中最常用的設計模式之一。

單:唯一;例:例項,單例設計模式,即某個類在整個系統中只能有一個例項物件可被獲取和使用的程式碼模式。

例如:代表JVM執行環境的Runtime

要點:一是某個類只能有一個例項:u構造器私有化;

二是它必須自行建立這個例項:u含有一個該類的靜態變數來儲存這個唯一的例項;

三是它必須自行向整個系統提供這個例項u對外提供獲取該例項物件的方式:(1)直接暴露(2)用靜態變數的get方法獲取    

幾種常見形式:

1)餓漢式:直接建立物件,不存線上程安全問題

直接例項化餓漢式(簡潔直觀)

列舉式(最簡潔)

靜態程式碼塊餓漢式(適合複雜例項化)

2)懶漢式:延遲建立物件

執行緒不安全(適用於單執行緒)

執行緒安全(適用於多執行緒)

靜態內部類形式(適用於多執行緒)

 

Java工程師常見面試題集錦(一)網際網路人必看!https://blog.csdn.net/CSDNedu/article/details/85602533

如果覺得文字學習較慢,也可以跟著老師一起視訊學習:

Java面試題視訊學習連結:https://edu.csdn.net/course/detail/10533

相關文章