5一、ArrayList 與 LinkedList 的不區別?vue
最明顯的區別是 ArrrayList 底層的數據結構是數組,支持隨機訪問,而LinkedList 的底層數據結構書鏈表,不支持隨機訪問。使用下標訪問一個元素,ArrayList 的時間複雜度是 O(1),而 LinkedList 是 O(n)。java
5二、用哪兩種方式來實現集合的排序?面試
你可使用有序集合,如 TreeSet 或 TreeMap,你也可使用有順序的的集合,如 list,而後經過 Collections.sort() 來排序。數據庫
5三、Java 中怎麼打印數組?數組
你可使用 Arrays.toString() 和 Arrays.deepToString() 方法來打印數組。因爲數組沒有實現 toString() 方法,因此若是將數組傳遞給 System.out.println()方法,將沒法打印出數組的內容,可是 Arrays.toString() 能夠打印每一個元素。緩存
5四、Java 中的 LinkedList 是單向鏈表仍是雙向鏈表?數據結構
是雙向鏈表,你能夠檢查 JDK 的源碼。在 Eclipse,你可使用快捷鍵 Ctrl + T,直接在編輯器中打開該類。多線程
5五、Java 中的 TreeMap 是採用什麼樹實現的?併發
Java 中的 TreeMap 是使用紅黑樹實現的。socket
5六、Hashtable 與 HashMap 有什麼不一樣之處?
這兩個類有許多不一樣的地方,下面列出了一部分:
a) Hashtable 是 JDK 1 遺留下來的類,而 HashMap 是後來增長的。
b)Hashtable 是同步的,比較慢,但 HashMap 沒有同步策略,因此會更快。
c)Hashtable 不容許有個空的 key,可是 HashMap 容許出現一個 null key。
5七、Java 中的 HashSet,內部是如何工做的?
HashSet 的內部採用 HashMap 來實現。因爲 Map 須要 key 和 value,因此全部 key 的都有一個默認 value。相似於 HashMap,HashSet 不容許重複的key,只容許有一個 null key,意思就是 HashSet 中只容許存儲一個 null 對象。
5八、寫一段代碼在遍歷 ArrayList 時移除一個元素?
該問題的關鍵在於面試者使用的是 ArrayList 的 remove() 仍是 Iterator 的remove()方法。這有一段示例代碼,是使用正確的方式來實如今遍歷的過程當中移除元素,而不會出現 ConcurrentModificationException 異常的示例代碼。
5九、咱們能本身寫一個容器類,而後使用 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
6一、有沒有可能兩個不相等的對象有有相同的 hashcode?
有可能,兩個不相等的對象可能會有相同的 hashcode 值,這就是爲何在hashmap 中會有衝突。相等 hashcode 值的規定只是說若是兩個對象相等,必須有相同的 hashcode 值,可是沒有關於不相等對象的任何規定。
6二、兩個相同的對象會有不一樣的的 hash code 嗎?
不能,根據 hash code 的規定,這是不可能的。
6三、咱們能夠在 hashcode() 中使用隨機數字嗎?
不行,由於對象的 hashcode 值必須是相同的。參見答案獲取更多關於 Java 中重寫 hashCode() 方法的知識。
6四、Java 中,Comparator 與 Comparable 有什麼不一樣?
Comparable 接口用於定義對象的天然順序,而 comparator 一般用於定義用戶定製的順序。Comparable 老是隻有一個,可是能夠有多個 comparator 來定義對象的順序。
6五、爲何在重寫 equals 方法的時候須要重寫 hashCode 方法?
由於有強制的規範指定須要同時重寫 hashcode 與 equal 是方法,許多容器類,如 HashMap、HashSet 都依賴於 hashcode 與 equals 的規定。
6六、在我 Java 程序中,我有三個 socket,我須要多少個線程來處理?
這個須要看你是並行處理仍是串行處理了。
6七、Java 中怎麼建立 ByteBuffer?
byte[] bytes = new byte[10]; ByteBuffer buf = ByteBuffer.wrap(bytes);
6八、Java 中,怎麼讀寫 ByteBuffer ?
6九、Java 採用的是大端仍是小端?
70、ByteBuffer 中的字節序是什麼?
7一、Java 中,直接緩衝區與非直接緩衝器有什麼區別?
7二、Java 中的內存映射緩存區是什麼?
7三、socket 選項 TCP NO DELAY 是指什麼?
7四、TCP 協議與 UDP 協議有什麼區別?
7五、Java 中,ByteBuffer 與 StringBuffer 有什麼區別?
7六、Java 中,編寫多線程程序的時候你會遵循哪些最佳實踐?
a)給線程命名,這樣能夠幫助調試。
b)最小化同步的範圍,而不是將整個方法同步,只對關鍵部分作同步。
c)若是能夠,更偏向於使用 volatile 而不是 synchronized。
d)使用更高層次的併發工具,而不是使用 wait() 和 notify() 來實現線程間通訊,如 BlockingQueue,CountDownLatch 及 Semeaphore。
e)優先使用併發集合,而不是對集合進行同步。併發集合提供更好的可擴展性。
7七、說出幾點 Java 中使用 Collections 的最佳實踐
a)使用正確的集合類,例如,若是不須要同步列表,使用 ArrayList 而不是Vector。
b)優先使用併發集合,而不是對集合進行同步。併發集合提供更好的可擴展性。
c)使用接口表明和訪問集合,如使用 List 存儲 ArrayList,使用 Map 存儲HashMap 等等。
d)使用迭代器來循環集合。
e)使用集合的時候使用泛型。
7八、說出至少 5 點在 Java 中使用線程的最佳實踐。
這個問題與以前的問題相似,你可使用上面的答案。對線程來講,你應該:
a)對線程命名
b)將線程和任務分離,使用線程池執行器來執行 Runnable 或 Callable。
c)使用線程池
7九、說出 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)經過列名來獲取結果集,不要使用列的下標來獲取。