1. 程式人生 > >Java面試-常見基礎筆試題目

Java面試-常見基礎筆試題目

1. Vector, ArrayList, LinkedList的區別

  Vector:①長度可變,以類似陣列的形式儲存於記憶體中,執行緒安全(同步),因為其大部分方法都有synchronized 關鍵字,正因為是同步的,所以進行頻繁的資料操作時,必然會導致效能的下降。

      ②當增加的元素長度超過Vector 長度時,增加原來一倍的長度。

      ③如果是單執行緒應用,推薦使用ArrayList 來代替Vector 效率更高。

      ④如果是多執行緒應用,可以使用Vector 來代替ArrayList 實現同等功能,且能保證資料一致性。

 

  ArrayList

:①長度可變,以類似陣列的形式儲存於記憶體中,執行緒不安全(非同步),正因為是非同步的,所以在多執行緒環境下使用是其常用方法是不安全的,如果一定要在多執行緒環境下使用,應該使用Colletions類中的靜態方法synchronizedList() 對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是執行緒安全的

  檢視詳細解釋