Java面試-常見基礎筆試題目
1. Vector, ArrayList, LinkedList的區別
Vector:①長度可變,以類似陣列的形式儲存於記憶體中,執行緒安全(同步),因為其大部分方法都有synchronized 關鍵字,正因為是同步的,所以進行頻繁的資料操作時,必然會導致效能的下降。
②當增加的元素長度超過Vector 長度時,增加原來一倍的長度。
③如果是單執行緒應用,推薦使用ArrayList 來代替Vector 效率更高。
④如果是多執行緒應用,可以使用Vector 來代替ArrayList 實現同等功能,且能保證資料一致性。
ArrayList
List list = Collections.synchronizedList(new ArrayList<>());
②當增加的元素長度超過ArrayList 長度時,增加原來50% 的長度。
LinkedList:①以雙向連結串列儲存於記憶體中,執行緒不安全(非同步),正因為是非同步的,如果在多執行緒環境下使用它,用Colletions類中的靜態方法synchronizedList() 對 LinkedList進行操作。例如:
List list = Collections.synchronizedList(new LinkedList(...));
②因為是雙向連結串列,LinkList 可以很方便在連結串列頭或者連結串列尾插入資料,或者在指定結點前後插入資料,所以LinkList 的插入效率高於ArrayList ,但也因為是雙向連結串列,所以查詢效率低於ArrayList。
2. static塊,構造塊,建構函式的執行順序
3. 重寫override 跟過載overload 的區別
重寫是在子類中完全覆蓋父類的方法,且方法返回值、方法名、方法引數、方法引數型別跟父類的完全一樣,子類丟擲的異常應該等於或者少於基類
過載是類的內部可以允許有兩個同名字的方法,但方法的引數個數或者引數型別不一樣,即可稱之為過載。例如:
①:
void func1(int a, int b)
void func1(int a, float b)
②:
void func1(int a, int b)
int func1(int a, int b)
以上兩種情況可以稱之為過載,但下面這種情況不可以稱為過載,且寫法是錯誤的,例如:
int getCount(int a , int b)
void getCount(int a, int b)
呼叫時,兩個引數傳進去,但是返回的是int 呢?還是void 呢?所以這種寫法是不存在的,即使寫了編譯器也無法通過。
4. String,StringBuilder,StringBuffer三者的區別
①執行速度:StringBuilder > StringBuffer > String
因為String 一建立就是字串常量, 而其他兩者為字串變數
②StringBuilder是執行緒不安全的,而StringBuffer,String是執行緒安全的