Java基礎常見的面試題
技術標籤:JavaSEMybatis字串資料庫java設計模式python
JavaSE常見的面試題
- 介面和抽象類的異同點
- 過載(overload)和重寫(overwrite)區別
- StringBufferStringBuilderString區別
- 什麼是值傳遞和引用傳遞?
- 解釋一下資料庫連線池
- 空字串(“”)和null的區別
介面和抽象類的異同點
相同點
都不能建立物件
都可以定義抽象方法,並且一定要在子類中重寫
不同點
關鍵字不同 抽象類是abstract 介面是 interface
抽象方法中既可以有抽象的方法也可以有普通的方法
抽象類的方法可以任意許可權,介面中方法只能是public
抽象類只能單繼承,介面可以多實現
過載(overload)和重寫(overwrite)區別
重寫的規則
子類和父類,子類重寫了父類的方法
- 方法名、引數列表必須和父類完全一致
- 返回值型別要麼相同,要麼子類方法的返回值型別是父類方法返回值型別的子類!
- 訪問修飾符要麼相同,要麼子類訪問修飾符範圍大於父類
- 方法中丟擲的異常,要麼相同。要麼子類方法丟擲的異常比父類被重寫方法丟擲的異常更小或相同!
-
過載的規則(兩同一不同)
1)同一個類中
2)方法名相同
3)引數列表不同(個數,列表,型別)
4)和返回值無關
StringBufferStringBuilderString區別
String字串常量不可變使用字串拼接時會開闢新空間
StringBuffer字串變數可變執行緒安全字串拼接直接在字串後追加
StringBuilder字串變數可變非執行緒安全字串拼接直接在字串後追加
1.StringBuilder執行效率高StringBuffer,高於String.
2.String是一個常量,是不可變的,所以對於每一次+=賦值都會建立一個新的物件, StringBuffer和StringBuilder都是可變的,當進行字串拼接時採用append方 法,在原來的基礎上進行追加,所以效能比String要高,
3.對於大資料量的字串的拼接,採用StringBuffer,StringBuilder.
什麼是值傳遞和引用傳遞?
(1)值傳遞:形參型別是基本資料型別,方法呼叫時,實際引數把它的值傳遞給對應的形式引數,形式引數只是用實際引數的值初始化自己的儲存單元內容,是兩個不同的儲存單元,所以方法執行中形參值得改變不影響實際引數的值
(2)引用傳遞:形參型別是引用資料型別引數,也稱為傳地址,方法呼叫時,實際引數是物件(或陣列),這時實際引數與形式引數指向同一個地址,在方法執行中,對形式引數的操作實際上就是對實際引數的操作,這個結果在方法結束後被保留下來,所以方法執行中形式引數的改變將會影響實際引數。
解釋一下資料庫連線池
概念:一種關鍵的有限的昂貴的資源
影響因素:最大連線數,最小連線數
功能:分配、管理和釋放資料庫連線
資料庫連線池負責分配、管理和釋放資料庫連線,它允許應用程式重複使用一個現有的資料庫連線,而不是再重新建立一個,釋放空閒時間超過最大空閒時間的資料庫連線來避免因為沒有釋放資料庫連線而引起的資料庫連線遺漏。這項技術能明顯提高對資料庫操作的效能。
原理
連線池基本的思想是在系統初始化的時候,將資料庫連線作為物件儲在記憶體中,當用戶需要訪問資料庫時,並非建立一個新的連線,而是從連線池中取出一個已建立的空閒連線物件。使用完畢後,使用者也並非將連線關閉,而是將連線放回連線池中,以供下一個請求訪問使用。而連線的建立、斷開都由連線池自身來管理。同時,還可以通過設定連線池的引數來控制連線池中的初始連線數、連線的上下限數以及每個連線的最大使用次數、最大空閒時間等等。也可以通過其自身的管理機制來監視資料庫連線的數量、使用情況。
空字串(“”)和null的區別
空字串是"",會建立一個物件,內容是"",有記憶體空間。
而null,不會建立物件,沒有記憶體空間
空字串是String類的一個物件,而null是指一個引用變數沒有引用物件,在值為null的引用變數上呼叫方法或變數,將會導致NullPointerException。通過以下程式碼來驗證變數x是否為null,x==null,通過”".equals(x)來驗證x是否為空字串。