1. 程式人生 > >Java面試題集錦

Java面試題集錦

logs servlet引擎 方式 ava 錯誤 有關 屬於 如果 linked

1. String、StringBuffer和StringBuilder的區別。

(1) String:存儲數值不可改變的字符串

(2) StringBuffer:可變字符序列、線程安全、效率低

(3) StringBuilder:可變字符序列、線程不安全、效率高


2. final, finally, finalize的區別。

(1) final修飾的類不能被繼承,修飾的方法不能被子類重寫,修飾的屬性為常量。一旦初始化後,不可再被賦值。習慣上,常量

用大寫字符表示。

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

(3) finalize是Object類的一個方法,在垃圾收集器執行的時候會調用被回收對象的此方法,可以覆蓋此方法提供垃圾收集時的其

他資源回收,例如關閉文件等。


3. HashMap和Hashtable的區別。(都完成了Map接口)

(1) HashMap是Hashtable的輕量級實現(非線程安全的實現),效率較高,而Hashtable是線程安全的,效率較低。

(2) Hashtable不允許使用 null 作為 key 和 value,而HashMap 可以。

(3) Hashtable的方法是Synchronize的,而HashMap不是,在多個線程訪問Hashtable時,不需要自己為它的方法實現同步,而

HashMap 就必須為之提供外同步。


4. abstract class和interface有什麽區別?

(1) 抽象類與接口定義不同:

抽象類abstract class,接口 interface

(2) 接口裏只能包含抽象方法,不包含已經實現的方法;抽象類則完全可以包含普通的方法。

(3) 接口裏不能定義靜態方法;抽象類可以定義靜態方法

(4) 接口裏只能定義靜態常量屬性,不能定義普通屬性;抽象類裏既可以定義普通屬性,也可以定義靜態常量

(5) 接口不包含構造函數;抽象類可以包含構造函數,抽象類裏的構造函數並不是用於創建對象,而是讓其子類調用這些構造函

數來完成屬於抽象類的初始化操作。

(6) 接口不包含初始化塊,但抽象類可以包含初始化塊。

(7) 一個類最多只能有一個直接父類,包括抽象類;但一個類可以直接實現多個接口,通過實現多個接口可以彌補Java的單繼承

不足


5.Overload(重載)和Override(重寫)的區別。Overloaded的方法是否可以改變返回值的類型?(可以)
(1)方法重載是指在一個類中,多個方法的方法名相同,但是參數列表不同,根據不同參數調用相應方法。

(2)方法重寫發生在父類和子類之間,必須和被重寫的方法具有相同的方法名、參數列表和返回值類型。子類的對象使用這個方法

時,將調用子類中的定義,父類中的定義會被覆蓋。


6. Collection 和 Collections的區別

(1)Collection是集合類的上級接口,繼承與他的接口主要有Set 和List.

(2)Collections是針對集合類的一個幫助類,他提供一系列靜態方法實現對各種集合的搜索、排序、線程安全化等操作。


7.Java的異常(包括Exception和Error)分為可查的異常(checked exceptions)和不可查的異常(unchecked exceptions)。

(1)可查的異常(編譯器要求必須處置的異常)

(2)不可查的異常(編譯器不要求強制處置的異常)


8. error和exception有什麽區別

Error: JVM系統內部錯誤、資源耗盡等嚴重情況//無法控制,不處理

Exception: 其它因編程錯誤或偶然的外在因素導致的一般性問題,是程序本身可以處理的。比如:空指針訪問、試圖讀取不存在的

文件等。


9. 說出ArrayList,Vector, LinkedList的存儲性能和特性

(1)ArrayList 和Vector都是使用數組方式存儲數據,數組元素數大於實際存儲的數據以便增加和插入元素,允許直接按序號索引元

素,但是插入元素要涉及數組元素移動等內存操作,所以索引數據快而插入數據慢。

(2)Vector由於使用了synchronized方法(線程安全),通常性能上較ArrayList差。

(3)LinkedList使用雙向鏈表實現存儲,按序號索引數據需要進行前向或後向遍歷,但是插入數據時只需要記錄本項的前後項即

可,所以插入速度較快。


10.重定向和轉發的區別
(1)重定向:兩次請求。 轉發:一次請求,一次響應。

(2)重定向:地址欄的url會隨之改變為定向後的那個url。

轉發:地址欄的url不會改變。

(3)重定向:在客戶端執行,所以可以在不同的服務器上。重定向速度慢。

轉發:在服務器端執行,所以必須在同一臺服務器上。轉發速度快。

(4)重定向:以前的request中存放的變量全部失效,並進入一個新的request作用域。

轉發:以前的request中存放的變量不會失效,就像把兩個頁面拼到了一起。


11. char型變量中能不能存儲一個中文漢字?為什麽?

只能存儲一個中文漢字,因為java中以unicode編碼,一個char占2個字節,計算機中為char類型分配的空間為16位,也就是2個字節,所以放一個中文是沒問題的。


12. JSP的內置對象及方法。
(1)request表示HttpServletRequest對象。它包含了有關瀏覽器請求的信息,並且提供了幾個用於獲取cookie, header, 和session數據的有用的方法。

(2)response表示HttpServletResponse對象,並提供了幾個用於設置送回 瀏覽器的響應的方法(如cookies,頭信息等)

(3)out對象是javax.jsp.JspWriter的一個實例,並提供了幾個方法使你能用於向瀏覽器回送輸出結果。

(4)pageContext表示一個javax.servlet.jsp.PageContext對象。它是用於方便存取各種範圍的名字空間、servlet相關的對象的

API,並且包裝了通用的servlet相關功能的方法。

(5)session表示一個請求的javax.servlet.http.HttpSession對象。Session可以存貯用戶的狀態信息

(6)applicaton 表示一個javax.servle.ServletContext對象。這有助於查找有關servlet引擎和servlet環境的信息

(7)config表示一個javax.servlet.ServletConfig對象。該對象用於存取servlet實例的初始化參數。

(8)page表示從該頁面產生的一個servlet實例

(9)exception代表了JSP文件運行時所產生的例外對象

13.創建索引的優缺點

優點:

創建索引可以大大提高系統的性能:
(1)通過創建唯一性索引,可以保證數據庫表中每一行數據的唯一性。
(2)可以大大加快數據的檢索速度,這也是創建索引的最主要的原因。
(3)可以加速表和表之間的連接,特別是在實現數據的參考完整性方面特別有意義。
(4)在使用分組和排序子句進行數據檢索時,同樣可以顯著減少查詢中分組和排序的時間。
(5)通過使用索引,可以在查詢的過程中,使用優化隱藏器,提高系統的性能。

缺點:
(1)創建索引和維護索引要耗費時間,這種時間隨著數據量的增加而增加。
(2)索引需要占物理空間,除了數據表占數據空間之外,每一個索引還要占一定的物理空間,如果要建立聚簇索引,那麽需要的空間就會更大。
(3)當對表中的數據進行增加、刪除和修改的時候,索引也要動態的維護,這樣就降低了數據的維護速度。

14.sleep和wait方法區別

(1)sleep是線程類(Thread)的方法,導致此線程暫停執行指定時間,給執行機會給其他線程,但是監控狀態依然保持,到時後會自動恢復。調用sleep 不會釋放對象鎖。
(2)wait 是Object 類的方法,對此對象調用wait 方法導致本線程放棄對象鎖,進入等待此對象的等待鎖定池,只有針對此對象發出notify 方法(或notifyAll)後本線程才進入對象鎖定池準備獲得對象鎖進入運行狀態。


15.為什麽不能用abstract修飾屬性、私有方法、構造器、靜態方法、final的方法
答:abstract可以用來修飾類(抽象類:不可實例化)和方法(抽象方法:沒有方法體)
(1)abstract只是聲明,屬性是系統賦初值直接定義的。
(2)構造器不能被重寫
(3)子類不能重寫private修飾的方法(私有方法)
(4)static修飾的方法(類方法)可以直接通過類來調用,而abstract修飾的方法沒有方法體,不能調用,二者矛盾
(5)final修飾的方法不能重寫

Java面試題集錦