2019年總結:Java中高級面試題228道系列(6),查漏補缺!

2019年Java面試題中高級系列228道

Java面試題(一)

第一篇更新1~20題的答案解析

第二篇更新21~50題答案解析

第三篇更新51~95題答案解析

Java面試題(二)

第四篇更新1~20題答案解析

第五篇更新21~50題答案解析

v2-1ff1224b3a0ef8e322f582abdc2a0199_b.png


Java面試題(二)

51、ArrayList 與 LinkedList 的不區別?

52、用哪兩種方式來實現集合的排序?

53、Java 中怎麼打印數組?

54、Java 中的 LinkedList 是單向鏈表還是雙向鏈表?

55、Java 中的 TreeMap 是採用什麼樹實現的?(答案)

56、Hashtable 與 HashMap 有什麼不同之處?

57、Java 中的 HashSet,內部是如何工作的?

58、寫一段代碼在遍歷 ArrayList 時移除一個元素?

59、我們能自己寫一個容器類,然後使用 for-each 循環碼?

60、ArrayList 和 HashMap 的默認大小是多數?

61、有沒有可能兩個不相等的對象有有相同的 hashcode?

62、兩個相同的對象會有不同的的 hash code 嗎?

63、我們可以在 hashcode() 中使用隨機數字嗎?

64、Java 中,Comparator 與 Comparable 有什麼不同?

66、在我 Java 程序中,我有三個 socket,我需要多少個線程來處理?

67、Java 中怎麼創建 ByteBuffer?

68、Java 中,怎麼讀寫 ByteBuffer ?

69、Java 採用的是大端還是小端?

70、ByteBuffer 中的字節序是什麼?

71、Java 中,直接緩衝區與非直接緩衝器有什麼區別?

72、Java 中的內存映射緩存區是什麼?

73、socket 選項 TCP NO DELAY 是指什麼?

74、TCP 協議與 UDP 協議有什麼區別?

75、Java 中,ByteBuffer 與 StringBuffer 有什麼區別?(答案)

76、Java 中,編寫多線程程序的時候你會遵循哪些最佳實踐?

77、說出幾點 Java 中使用 Collections 的最佳實踐

78、說出至少 5 點在 Java 中使用線程的最佳實踐。

79、說出 5 條 IO 的最佳實踐(答案)

80、列出 5 個應該遵循的 JDBC 最佳實踐

v2-eef64513caffb6a9bb9ec2a0e1c971f2_b.png

本篇更新21-50題的答案

51、ArrayList 與 LinkedList 的不區別?

最明顯的區別是 ArrrayList 底層的數據結構是數組,支持隨機訪問,而LinkedList 的底層數據結構書鏈表,不支持隨機訪問。使用下標訪問一個元素,ArrayList 的時間複雜度是 O(1),而 LinkedList 是 O(n)。

52、用哪兩種方式來實現集合的排序?

你可以使用有序集合,如 TreeSet 或 TreeMap,你也可以使用有順序的的集合,如 list,然後通過 Collections.sort() 來排序。

53、Java 中怎麼打印數組?

你可以使用 Arrays.toString() 和 Arrays.deepToString() 方法來打印數組。由於數組沒有實現 toString() 方法,所以如果將數組傳遞給 System.out.println()方法,將無法打印出數組的內容,但是 Arrays.toString() 可以打印每個元素。

54、Java 中的 LinkedList 是單向鏈表還是雙向鏈表?

是雙向鏈表,你可以檢查 JDK 的源碼。在 Eclipse,你可以使用快捷鍵 Ctrl + T,直接在編輯器中打開該類。

55、Java 中的 TreeMap 是採用什麼樹實現的?

Java 中的 TreeMap 是使用紅黑樹實現的。

56、Hashtable 與 HashMap 有什麼不同之處?

這兩個類有許多不同的地方,下面列出了一部分:

a) Hashtable 是 JDK 1 遺留下來的類,而 HashMap 是後來增加的。

b)Hashtable 是同步的,比較慢,但 HashMap 沒有同步策略,所以會更快。

c)Hashtable 不允許有個空的 key,但是 HashMap 允許出現一個 null key。

57、Java 中的 HashSet,內部是如何工作的?

HashSet 的內部採用 HashMap 來實現。由於 Map 需要 key 和 value,所以所有 key 的都有一個默認 value。類似於 HashMap,HashSet 不允許重複的key,只允許有一個 null key,意思就是 HashSet 中只允許存儲一個 null 對象。

58、寫一段代碼在遍歷 ArrayList 時移除一個元素?

該問題的關鍵在於面試者使用的是 ArrayList 的 remove() 還是 Iterator 的remove()方法。這有一段示例代碼,是使用正確的方式來實現在遍歷的過程中移除元素,而不會出現 ConcurrentModificationException 異常的示例代碼。

59、我們能自己寫一個容器類,然後使用 for-each 循環碼?

可以,你可以寫一個自己的容器類。如果你想使用 Java 中增強的循環來遍歷,你只需要實現 Iterable 接口。如果你實現 Collection 接口,默認就具有該屬性。歡迎大家關注我的公種浩【程序員追風】,2019年多家公司java面試題整理了1000多道400多頁pdf文檔,文章都會在裏面更新,整理的資料也會放在裏面。

v2-93ba9fc9c76400e7829a0936d6317872_b.png

60、ArrayList 和 HashMap 的默認大小是多數?

在 Java 7 中,ArrayList 的默認大小是 10 個元素,HashMap 的默認大小是16 個元素(必須是 2 的冪)。這就是 Java 7 中 ArrayList 和 HashMap 類的代碼片段:

// from ArrayList.java JDK 1.7private static final int DEFAULT_CAPACITY = 10;//from HashMap.java JDK 7static final int DEFAULT_INITIAL_CAPACITY = 1 << 4;// aka 16

61、有沒有可能兩個不相等的對象有有相同的 hashcode?

有可能,兩個不相等的對象可能會有相同的 hashcode 值,這就是爲什麼在hashmap 中會有衝突。相等 hashcode 值的規定只是說如果兩個對象相等,必須有相同的 hashcode 值,但是沒有關於不相等對象的任何規定。

62、兩個相同的對象會有不同的的 hash code 嗎?

不能,根據 hash code 的規定,這是不可能的。

63、我們可以在 hashcode() 中使用隨機數字嗎?

不行,因爲對象的 hashcode 值必須是相同的。參見答案獲取更多關於 Java 中重寫 hashCode() 方法的知識。

64、Java 中,Comparator 與 Comparable 有什麼不同?

Comparable 接口用於定義對象的自然順序,而 comparator 通常用於定義用戶定製的順序。Comparable 總是隻有一個,但是可以有多個 comparator 來定義對象的順序。

65、爲什麼在重寫 equals 方法的時候需要重寫 hashCode 方法?

因爲有強制的規範指定需要同時重寫 hashcode 與 equal 是方法,許多容器類,如 HashMap、HashSet 都依賴於 hashcode 與 equals 的規定。

66、在我 Java 程序中,我有三個 socket,我需要多少個線程來處理?

這個需要看你是並行處理還是串行處理了。

67、Java 中怎麼創建 ByteBuffer?

byte[] bytes = new byte[10];ByteBuffer buf = ByteBuffer.wrap(bytes);

68、Java 中,怎麼讀寫 ByteBuffer ?

69、Java 採用的是大端還是小端?

70、ByteBuffer 中的字節序是什麼?

71、Java 中,直接緩衝區與非直接緩衝器有什麼區別?

72、Java 中的內存映射緩存區是什麼?

73、socket 選項 TCP NO DELAY 是指什麼?

74、TCP 協議與 UDP 協議有什麼區別?

75、Java 中,ByteBuffer 與 StringBuffer 有什麼區別?

76、Java 中,編寫多線程程序的時候你會遵循哪些最佳實踐?

a)給線程命名,這樣可以幫助調試。

b)最小化同步的範圍,而不是將整個方法同步,只對關鍵部分做同步。

c)如果可以,更偏向於使用 volatile 而不是 synchronized。

d)使用更高層次的併發工具,而不是使用 wait() 和 notify() 來實現線程間通信,如 BlockingQueue,CountDownLatch 及 Semeaphore。

e)優先使用併發集合,而不是對集合進行同步。併發集合提供更好的可擴展性。

77、說出幾點 Java 中使用 Collections 的最佳實踐

a)使用正確的集合類,例如,如果不需要同步列表,使用 ArrayList 而不是Vector。

b)優先使用併發集合,而不是對集合進行同步。併發集合提供更好的可擴展性。

c)使用接口代表和訪問集合,如使用 List 存儲 ArrayList,使用 Map 存儲HashMap 等等。

d)使用迭代器來循環集合。

e)使用集合的時候使用泛型。

78、說出至少 5 點在 Java 中使用線程的最佳實踐。

這個問題與之前的問題類似,你可以使用上面的答案。對線程來說,你應該:

a)對線程命名

b)將線程和任務分離,使用線程池執行器來執行 Runnable 或 Callable。

c)使用線程池

79、說出 5 條 IO 的最佳實踐

IO 對 Java 應用的性能非常重要。理想情況下,你不應該在你應用的關鍵路徑上避免 IO 操作。下面是一些你應該遵循的 Java IO 最佳實踐:

a)使用有緩衝區的 IO 類,而不要單獨讀取字節或字符。

b)使用 NIO 和 NIO2

c)在 finally 塊中關閉流,或者使用 try-with-resource 語句。

d)使用內存映射文件獲取更快的 IO。

80、列出 5 個應該遵循的 JDBC 最佳實踐

有很多的最佳實踐,你可以根據你的喜好來例舉。下面是一些更通用的原則:

a)使用批量的操作來插入和更新數據

b)使用 PreparedStatement 來避免 SQL 異常,並提高性能。

c)使用數據庫連接池

d)通過列名來獲取結果集,不要使用列的下標來獲取。

最後

歡迎大家一起交流,喜歡文章記得點個贊喲,感謝支持!


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