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 介面,默認就具有該屬性,
60、ArrayList 和 HashMap 的默認大小是多數?
在 Java 7 中,ArrayList 的默認大小是 10 個元素,HashMap 的默認大小是16 個元素(必須是 2 的冪),這就是 Java 7 中 ArrayList 和 HashMap 類的代碼片段:
// from ArrayList.java JDK 1.7
private static final int DEFAULT_CAPACITY = 10;
//from HashMap.java JDK 7
static final int DEFAULT_INITIAL_CAPACITY = 1 << 4;
// aka 1
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)通過列名來獲取結果集,不要使用列的下標來獲取,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/5236.html
標籤:其他
