1. 程式人生 > 程式設計 >JAVA基礎面試題整理

JAVA基礎面試題整理

1.Java中final、finally、finalize的區別

簡單區別:

final用於宣告屬性,方法和類,分別表示屬性不可交變,方法不可覆蓋,類不可繼承。

finally是異常處理語句結構的一部分,表示總是執行。

finalize是Object類的一個方法,在垃圾收集器執行的時候會呼叫被回收物件的此方法,供垃圾收集時的其他資源回收,例如關閉檔案等。

2.error和exception有什麼區別?

Error(錯誤)表示系統級的錯誤和程式不必處理的異常,是java執行環境中的內部錯誤或者硬體問題。比如:記憶體資源不足等。對於這種錯誤,程式基本無能為力,除了退出執行外別無選擇,它是由Java虛擬機器丟擲的。

Exception(違例)表示需要捕捉或者需要程式進行處理的異常,它處理的是因為程式設計的瑕疵而引起的問題或者在外的輸入等引起的一般性問題,是程式必須處理的。

Exception又分為執行時異常,受檢查異常。

執行時異常,表示無法讓程式恢復的異常,導致的原因通常是因為執行了錯誤的操作,建議終止程式,因此,編譯器不檢查這些異常。

受檢查異常,是表示程式可以處理的異常,也即表示程式可以修復(由程式自己接受異常並且做出處理), 所以稱之為受檢查異常。

3.Set裡的元素是不能重複的,那麼用什麼方法來區分重複與否呢? 是用==還是equals()? 它們有何區別?

1、什麼是Set?(what)

Set是Collection容器的一個子介面,它不允許出現重複元素,當然也只允許有一個null物件。

2、如何來區分重複與否呢?(how)

“ 用 iterator() 方法來區分重複與否 ”,這是在網上流傳的答案,個人認為這是個錯誤的答案。JPI中寫的很明白:“set 不包含滿足

e1.equals(e2) 的元素對 e1 和 e2 ”,由此可見回答使用equals()區分更合適。

3、為什麼用equals()而不用==來區分?(why)

應該從它倆的區別談起,==是用來判斷兩者是否是同一物件(同一事物),而equals是用來判斷是否引用同一個物件。再看一下Set裡面存的是物件,還是物件的引用。根據Java的儲存機制可知,set裡面存放的是物件的引用,所以當兩個元素只要滿足了equals()時就已經指向同一個物件,也就出現了重複元素。所以應該用equals()來判斷。

Static Nested Class (靜態巢狀類)是Inner Class(內部類)的一種,

Static Nested Class是被宣告為靜態(static)的內部類,它可以不依賴於外部類例項被例項化。而通常的內部類需要在外部類例項化後才能例項化。

Overload和Override的區別?

Override是重寫:方法名稱、引數個數,型別,順序,返回值型別都是必須和父類方法一致的。它的關係是父子關係
Overload是過載:方法名稱不變,其餘的都是可以變更的。它的關係是同一個類,同一個方法名,不同的方法引數或返回值。

備註:它們都是是Java多型性的不同表現

構造器constructor是否可被override

1.Constructor不能被繼承,所以Constructor也就不能被override,但是可以overload,所以你可以看到有多個建構函式這種情況。

2.不可以 ,每一個類必須有自己的建構函式,負責構造自己這部分的構造

子類不會覆蓋父類的建構函式,相反必須負責在一開始呼叫父類的建構函式

List、Map、Set三個介面,存取元素時,各有什麼特點?

List 以特定次序來持有元素,可有重複元素。即,有序可重複。

Set 無法擁有重複元素,內部排序。即,無序不可重複。

Map 儲存 key-value 值,value可多值。一一對映。

Hashtable和HashMap的區別:

都屬於Map介面的類,實現了將惟一鍵對映到特定的值上。

HashMap類沒有分類或者排序。它允許一個null鍵和多個null值。

Hashtable類似於HashMap,但是不允許null鍵和null值。它也比HashMap慢,因為它是同步的。

jsp中動態include與靜態include

動態INCLUDE在使用的時候,會先解析所要包含的頁面(你例子中的included.jsp),解析後在和主頁面放到一起顯示;

靜態INCLUDE在使用的時候,不會解析所要包含的頁面(你例子中的included.htm),也就是說,不管你的included.htm中有什麼,我的任務就是把你包含並顯示,其他的一概不管

jsp:include是先編譯一下included.jsp檔案,然後再包含 先編譯,後包含@ include是先把檔案包含就來,然後統一編譯 先包含,後編譯

Java中 forward 和redirect的區別

使用forward的時候瀏覽器不知道它所請求的具體資源來源,所以位址列不會變;

使用redirect,服務端根據邏輯,傳送一個狀態碼,告訴瀏覽器重新去請求那個地址.所以位址列顯示的是新的URL。

forward,轉發頁面和轉發到的頁面可以共享request裡面的資料.

redirect,不能共享資料.

jsp有哪幾個內建物件?

1.request -->觸發服務呼叫的請求 -->範圍是:request

2.response -->對請求的應答 -->範圍是:page

3.session -->為請求的客戶建立的session物件 -->範圍是:session

4.application -->從 servlet 配置物件獲得的 servlet 上下文(如在getServletConfig() getContext()的呼叫中) -->範圍是:application

5.out -->向輸出流寫入內容的物件 -->範圍是:page

6.pageContext -->本 JSP 的頁面上下文 -->範圍是:page

7.page -->實現處理本頁當前請求的類的例項 -->page

8.config -->本 JSP 的 ServletConfig -->page

9.exception -->表示JSP頁面執行時產生的異常 -->Page

Servlet 生命週期:

Servlet 載入--->例項化--->服務--->銷燬。

1,初始化階段 呼叫init()方法

2,響應客戶請求階段  呼叫service()方法

3,終止階段  呼叫destroy()方法

left join inner join right join 區別

left\right join是外部連線,inner join是內連線

外部連線有主表與從表,主表在left中是左側表,right中是右側表,主表資料會全部顯示,從表資料則只顯示關聯部分匹配的資料,無匹配的資料用null補全

內連線則只顯示兩表關聯條件匹配的資料

注:所謂關聯條件即是指on的條件

oracle常用函式

Oracle SQL 提供了用於執行特定操作的專用函式。這些函式大大增強了 SQL 語言的功能。函式可以接受零個或者多個輸入引數,並返回一個輸出結果。 Oracle 資料庫中主要使用兩種型別的函式:

1. 單行函式:對每一個函式應用在表的記錄中時,只能輸入一行結果,返回一個結果,

比如:MOD(x,y)返回 x 除以 y 的餘數(x 和 y 可以是兩個整數,也可以是表中的整

數列)。常用的單行函式有:

  • 字元函式:對字串操作。
  • 數字函式:對數字進行計算,返回一個數字。
  • 轉換函式:可以將一種資料型別轉換為另外一種資料型別。
  • 日期函式:對日期和時間進行處理。

2. 聚合函式:聚合函式同時可以對多行資料進行操作,並返回一個結果。比如 SUM(x)

返回結果集中 x 列的總合。

索引是為了加速對錶中資料行的檢索而建立的一種分散的儲存結構。索引是針對表而建立的,它是由資料頁面以外的索引頁面組成的,每個索引頁面中的行都會含有邏輯指標,以便加速檢索物理資料。

在資料庫關係圖中,可以在選定表的“索引/鍵”屬性頁中建立、編輯或刪除每個索引型別。當儲存索引所附加到的表,或儲存該表所在的關係圖時,索引將儲存在資料庫中。

資料庫索引是為了增加查詢速度而對錶欄位附加的一種標識。

索引的作用:

1.通過建立唯一索引,可以保證資料記錄的唯一性。
2.可以大大加快資料檢索速度。
3.可以加速表與表之間的連線,這一點在實現資料的參照完整性方面有特別的意義。
4.在使用ORDER BY和GROUP BY子句中進行檢索資料時,可以顯著減少查詢中分組和排序的時間。

以上就是本次介紹全部知識點內容,感謝大家的學習和對我們的支援。