標籤:常量 rac 介面 ref lin 範圍 修改 style 單線程
1. java 中 wait()與sleep() 區別:
答:兩者都是暫停當前啟動並執行線程。sleep()是Thread類的方法;wait()是Object類的方法 。調用sleep(),線程不會釋放對象鎖,其他線程依然無法訪問這個對象;調用wait(),線程會釋放對象鎖,其他線程能訪問這個對象。
2. java中代表價格的資料類型用哪個BigDecimal還是double?
答:如果需要精確計算的結果,使用BigDecimal類,但是比較消耗記憶體和效能;否則可以直接使用float或double。
3. a = a + b 與 a += b 的區別?
答:記憶體上分析:如果加法操作的結果比 a 的最大值要大,則 a+b 會出現編譯錯誤;但是 a += b 沒問題,+= 隱式的將加操作的結果類型強制轉換為持有結果的類型。
4. 我們能在 Switch 中使用 String 嗎?
答:從 Java 7 開始,我們可以在 switch case 中使用字串,但這僅僅是一個文法糖。內部實現在 switch 中使用字串的 hash code。從Java 5開始,Java中引入了枚舉類型enum。
5. Java 中 WeakReference(弱引用) 與 SoftReference(軟引用)的區別?
答: WeakReference 與 SoftReference 都有利於提高 GC 和 記憶體的效率。 WeakReference ,一旦失去最後一個強引用,就會被 GC 回收;軟引用可以延遲到 JVM 記憶體不足的時候被 GC 回收。
6. Java 中堆和棧有什麼區別?
答:JVM中堆和棧是不同的記憶體地區。棧用於儲存方法的一些基本類型的變數和對象的引用變數,當超過變數的範圍後,java會自動釋放掉為該變數分配的記憶體空間;堆記憶體用於存放由new建立的對象,由JVM的GC來管理。
7. “a==b”和”a.equals(b)”有什麼區別?
答:如果 a 和 b 都是對象,則 a==b 是比較兩個對象的引用,只有當 a 和 b 指向的是堆中的同一個對象才會返回 true,而 a.equals(b)是比較邏輯一致,兩個對象必須具有相同的 hashCode才返回true,所以通常需要重寫equals()方法來提供邏輯一致性的比較。
8. ArrayList 與 LinkedList 的區別?
答:都實現了List介面。
1.ArrayList是實現了基於動態數組的資料結構,LinkedList基於鏈表的資料結構。
2.對於隨機訪問get和set,ArrayList覺得優於LinkedList,因為LinkedList要移動指標。
3.對於新增和刪除操作add和remove,LinedList比較佔優勢,因為ArrayList要移動資料。
9. String和StringBuilder、StringBuffer的區別?
答:String是唯讀字串,也就意味著String引用的字串內容是不能被改變的。
而StringBuffer/StringBuilder類表示的字串對象可以直接進行修改。StringBuilder是Java 5中引入的,它和StringBuffer的方法完全相同,區別在於它是在單線程環境下使用的,因為它的所有方面都沒有被synchronized修飾,因此它的效率也比StringBuffer要高。
線上程安全上,StringBuilder是線程不安全的,而StringBuffer是安全執行緒的。
10. 抽象類別(abstract class)和介面(interface)有什麼異同?
答:抽象類別和介面都不能夠執行個體化,但可以定義抽象類別和介面類型的引用。一個類如果繼承了某個抽象類別或者實現了某個介面都需要對其中的抽象方法全部進行實現,否則該類仍然需要被聲明為抽象類別。介面比抽象類別更加抽象,因為抽象類別中可以定義構造器,可以有抽象方法和具體方法,而介面中不能定義構造器而且其中的方法全部都是抽象方法。抽象類別中的成員可以是private、預設、protected、public的,而介面中的成員全都是public的。抽象類別中可以定義成員變數,而介面中定義的成員變數實際上都是常量。有抽象方法的類必須被聲明為抽象類別,而抽象類別未必要有抽象方法。
11. 用Java寫一個單例類。
答:
- 餓漢式單例
public class Singleton { private Singleton(){} private static Singleton instance = new Singleton(); public static Singleton getInstance(){ return instance; }}
-懶漢式單例
public class Singleton { private static Singleton instance = null; private Singleton() {} public static synchronized Singleton getInstance(){ if (instance == null) instance = new Singleton(); return instance; }}
Java 基礎面試題 匯總