原文傳送門:Java Interview Questions?
Java Interview Question
通常面試對于純語言知識性的東西問的不算太多,但是很多算法或者設計模式里恰恰需要用到一些經典的語言特征。因此往往這類問題會作為面試開始時一個入門菜。因此,準確的掌握一些基礎知識便尤為重要了。
1. Java String 類的基礎知識
Q1: String 類到底創建幾個對象?
String str = "Hello, World";
String str2 = "Hello, World";
String str3 = new String("Hello,World");
String str4 = new String("Hello, World");
A1: String 構造時,如果是常量賦值的話,首先會去常量Pool中查找是否已經存在常量,如存在則直接把常量字符串的引用賦值便可,如果不存在則需要在常量池中創建新的常量引用在賦值給變量的引用;而如果是new操作的化,則是在堆中創建,且每次都會新創建一個常量池中的對象,然后在把這個對象用過new構造函數賦值給其在堆中的新對象。所以答案為:
1
1
2
2
Q2: String 中的== 和 equals操作符含義?
str == str2 ?
str equals str2 ?
str3 == str4 ?
str3 equals str4 ?
A2: 通常對于字符串內容的比較我們通過equals()函數來進行,而==運算符則是比較兩個字符串引用是否指向同一個對象。兩者的區別用下面stackoverflow上的回答:

因此
答案
為:
true
true
false
true
2. Synchronized 類線程安全和效率的比較Q1: ArrayList, Vector and LinkedList 三者之間的區別? A1: 可以從兩方面來比較,首先對于ArrayList和Vector其底層都是通過Array的連續存儲空間實現,可以按位快速存取,但是當出入值時需要順序后移,因此效率較低,而LinkedList則是用過鏈表的方式因此其插入效率很高,但查找效率降低。 然后,如果單從線程安全的角度來看,Vector是實現synchronized,因此是線程安全,但是卻會因此降低了其效率。引用JavaRanch上的一個回答:
Q2: HashMap 和 HashTable的區別? A2: 可以從兩方面來回答。首先是線程安全的角度;其次是是否允許空值的角度。而HashTable都可以看作是對HashMap的限制和提高。因此HashMap是非線程安全的,且是允許一個null鍵和多個null值的,而HashTable是線程安全的,且是不允許null值和鍵的。最后可以從擴展性上來看,如果想要默認插入順序的,可以選擇LinkedHashMap,如果想要線程安全的可以使用ConcurrentHashMap,更詳細的解答,仍舊是看stackoverflow上的解答:
3. Overloading vs override in JavaQ1: Overloading 和 Override之間有什么區別? A1: Overloading稱之為重載,通常是同一個功能的函數,為了實現不同的輸入參數個數和類型等需要,在一個對象中定義的多個函數。而Override則通常是存在與父類和子類中的,同一個函數,其參數類型和個數都相等,在子類中對其重新實現,且覆蓋了原先的方法。而Overriding通常有兩種,一種是vitual函數的overriding,另一種是非virtual函數的overriding。前者是一種動態的綁定,而后者是一種靜態的。 具體區別如下: