多線程、并發(fā)及線程的基礎(chǔ)問題
volatile 能使得一個非原子操作變成原子操作嗎?
一個典型的例子是在類中有一個 long 類型的成員變量。如果你知道該成員變量會被多個線程訪問扭粱,如計數(shù)器、價格等震檩,你最好是將其設(shè)置為 volatile琢蛤。為什么?因為 Java 中讀取 long 類型變量不是原子的抛虏,需要分成兩步博其,如果一個線程正在修改該 long 變量的值,另一個線程可能只能看到該值的一半(前 32 位)迂猴。但是對一個 volatile 型的 long 或 double 變量的讀寫是原子慕淡。
Swing 是線程安全的?(答案)
不是沸毁,Swing 不是線程安全的峰髓。
JVM 底層 與 GC(Garbage Collection) 的面試問題
Serial 與 Parallel GC之間的不同之處?(答案)
它們之間主要不同 serial 收集器是默認(rèn)的復(fù)制收集器息尺,執(zhí)行 GC 的時候只有一個線程携兵,而 parallel 收集器使用多個 GC 線程來執(zhí)行。
Java 中 WeakReference 與 SoftReference的區(qū)別搂誉?(答案)
SoftReference(軟引用)和WeakReference的區(qū)別在于徐紧,假如下次GC的時候,發(fā)現(xiàn)內(nèi)存充足炭懊,沒有溢出并级,則不會回收SoftReference關(guān)聯(lián)的對象;但是對于WeakReference侮腹,在下一次GC的時候嘲碧,一定會回收,無論內(nèi)存是否滿凯旋。
弱引用相當(dāng)于
Object obj = new Object();
obj = null;
Java 基本概念面試題
45)a.hashCode() 有什么用呀潭?與 a.equals(b) 有什么關(guān)系?(答案)
hashCode() 方法是相應(yīng)對象整型的 hash 值至非。它常用于基于 hash 的集合類钠署,如 Hashtable、HashMap荒椭、LinkedHashMap等等谐鼎。它與 equals() 方法關(guān)系特別緊密。根據(jù) Java 規(guī)范趣惠,兩個使用 equal() 方法來判斷相等的對象狸棍,必須具有相同的 hash code身害。
Java 集合框架的面試題
50)Java 中 LinkedHashMap 和 PriorityQueue 的區(qū)別是什么?(答案)
PriorityQueue 保證最高或者最低優(yōu)先級的的元素總是在隊列頭部草戈,但是 LinkedHashMap 維持的順序是元素插入的順序塌鸯。當(dāng)遍歷一個 PriorityQueue 時,沒有任何順序保證唐片,但是LinkedHashMap 課保證遍歷順序是元素插入的順序丙猬。
52)用哪兩種方式來實現(xiàn)集合的排序?(答案)
你可以使用有序集合费韭,如TreeSet或 TreeMap茧球,你也可以使用有順序的的集合,如 list星持,然后通過 Collections.sort()來排序抢埋。
更多的不同之處參見答案。
57)Java 中的 HashSet督暂,內(nèi)部是如何工作的揪垄?(answer答案)
HashSet 的內(nèi)部采用 HashMap來實現(xiàn)。由于 Map 需要 key 和 value损痰,所以所有 key 的都有一個默認(rèn) value福侈。類似于 HashMap酒来,HashSet 不允許重復(fù)的 key卢未,只允許有一個null key,意思就是 HashSet 中只允許存儲一個 null 對象堰汉。
關(guān)于 OOP 和設(shè)計模式的面試題
113)適配器模式和裝飾器模式有什么區(qū)別辽社?(答案)
適配器模式被用于橋接兩個接口
裝飾模式的目的是在不修改類的情況下給類增加新的功能(比如繼承)。
124)什么時候使用享元模式翘鸭?(答案)
JDK 中 String 池滴铅、Integer 池以及 Long 池都是很好的使用了享元模式的例子。
Java 面試中其他各式各樣的問題
127)Java 中就乓,受檢查異常 和 不受檢查異常的區(qū)別汉匙?(答案)
checkedexception(檢查異常)要求你必須要在方法里面或者捕獲或者繼續(xù)拋出。
132)說出 5 個 JDK 1.8 引入的新特性生蚁?(答案)
Lambda 表達(dá)式噩翠,允許像對象一樣傳遞匿名函數(shù)
Stream API,充分利用現(xiàn)代多核 CPU邦投,可以寫出很簡潔的代碼
Date 與 Time API伤锚,最終,有一個穩(wěn)定志衣、簡單的日期和時間庫可供你使用
擴展方法屯援,現(xiàn)在猛们,接口中可以有靜態(tài)、默認(rèn)方法狞洋。
重復(fù)注解弯淘,現(xiàn)在你可以將相同的注解在同一類型上使用多次。