J2EE經典面試試題及答案

1、垃圾回收的優點和原理。

J2EE經典面試試題及答案

Java語言中一個顯著的特點就是引入了垃圾回收機制,使c++程序員最頭疼的內存管理的問題迎刃

而解,它使得Java程序員在編寫程序的時候不再需要考慮內存管理。由於有個垃圾回收機制,Java中的對

象不再有“作用域”的概念,只有對象的引用纔有“作用域”。垃圾回收可以有效的防止內存泄露,有效

的使用可以使用的內存。垃圾回收器通常是作爲一個單獨的低級別的線程運行,不可預知的情況下對內存

堆中已經死亡的或者長時間沒有使用的對象進行清楚和回收,程序員不能實時的調用垃圾回收器對某個對

象或所有對象進行垃圾回收。

2、請說出你所知道的線程同步的方法。

wait():使一個線程處於等待狀態,並且釋放所持有的對象的lock。

sleep():使一個正在運行的線程處於睡眠狀態,是一個靜態方法,調用此方法要捕捉

InterruptedException異常。

notify():喚醒一個處於等待狀態的線程,注意的是在調用此方法的時候,並不能確切的喚醒某一

個等待狀態的線程,而是由JVM確定喚醒哪個線程,而且不是按優先級。

Allnotity():喚醒所有處入等待狀態的線程,注意並不是給所有喚醒線程一個對象的鎖,而是讓它

們競爭。

3、在java中一個類被聲明爲final類型,表示了什麼意思?

表示該類不能被繼承,是頂級類。

4、 Error與Exception有什麼區別?

Error表示系統級的錯誤和程序不必處理的異常,

Exception表示需要捕捉或者需要程序進行處理的異常。

5、&和&&的區別。

&是位運算符。&&是布爾邏輯運算符。

6、Collection 和 Collections的區別。

Collections是個下的類,它包含有各種有關集合操作的靜態方法。

Collection是個下的接口,它是各種集合結構的父接口。

7、 HashMap和Hashtable的區別。

都屬於Map接口的類,實現了將惟一鍵映射到特定的值上。

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

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

8、GC是什麼? 爲什麼要有GC? .

GC是垃圾收集器。Java 程序員不用擔心內存管理,因爲垃圾收集器會自動進行管理。要請求垃圾收

集,可以調用下面的方法之一:()

untime()()

9、談談final, finally, finalize的區別。

final—修飾符(關鍵字)如果一個類被聲明爲final,意味着它不能再派生出新的子類,不能作

爲父類被繼承。因此一個類不能既被聲明爲 abstract的,又被聲明爲final的。將變量或方法聲明爲

final,可以保證它們在使用中不被改變。被聲明爲final的變量必須在聲明時給定初值,而在以後的引用

中只能讀取,不可修改。被聲明爲final的方法也同樣只能使用,不能重載。

finally—再異常處理時提供 finally 塊來執行任何清除操作。如果拋出一個異常,那麼相匹配

的 catch 子句就會執行,然後控制就會進入 finally 塊(如果有的話)。

finalize—方法名。Java 技術允許使用 finalize() 方法在垃圾收集器將對象從內存中清除出去

之前做必要的清理工作。這個方法是由垃圾收集器在確定這個對象沒有被引用時對這個對象調用的。它是

在 Object 類中定義的,因此所有的類都繼承了它。子類覆蓋 finalize() 方法以整理系統資源或者執行

其他清理工作。finalize() 方法是在垃圾收集器刪除對象之前對這個對象調用的。

10、String s = new String("xyz");創建了幾個String Object?

兩個對象,一個是"xyz",一個是指向"xyz"的引用對象s。

11、d(11.5)等於多少? d(-11.5)等於多少?

d(11.5)返回(long)12,d(-11.5)返回(long)-11;

12、Java有沒有goto?

Goto—java中的保留字,現在沒有在java中使用。

13、 sleep() 和 wait() 有什麼區別?

sleep()方法是使線程停止一段時間的方法。在sleep 時間間隔期滿後,線程不一定立即恢復執行。

這是因爲在那個時刻,其它線程可能正在運行而且沒有被調度爲放棄執行,除非(a)"醒來"的線程具有更

高的優先級 (b)正在運行的線程因爲其它原因而阻塞。

wait()是線程交互時,如果線程對一個同步對象x 發出一個wait()調用,該線程會暫停執行,被調對

象進入等待狀態,直到被喚醒或等待時間到。

數組有沒有length()這個方法? String有沒有length()這個方法?

在java裏面數組沒有length()這個方法,有length的屬性。String有有length()這個方法。在c#數組和string只有length屬性,沒有方法.

14、 error和exception有什麼區別?

1 Error表示系統級的錯誤和程序不必處理的異常,

Exception表示需要捕捉或者需要程序進行處理的異常。

2 error 表示恢復不是不可能但很困難的情況下的一種嚴重問題。比如說內存溢出。不可能指望程序能處理這樣的情況。

exception 表示一種設計或實現問題。也就是說,它表示如果程序運行正常,從不會發生的情況。

15、List, Set, Map是否繼承自Collection接口?

List,Set是 ,Map不是

16、是否可以繼承String類?

String類是final類故不可以繼承。

17、 構造器Constructor是否可被override?

不能重寫 Overriding,但可以被重載Overloading。

18、 try {}裏有一個return語句,那麼緊跟在這個try後的finally {}裏的code會不會被執行,什麼時候被

執行,在return前還是後?

會執行,在return前執行。

19、用最有效率的方法算出2乘以8等於幾?

2 << 3

20、作用域public,private,protected,以及不寫時的區別

區別如下:

作用域當前類同一package 子孫類 其他package

public √ √ √ √

protected √ √ √ ×

friendly √ √ × ×

private √ × × ×

不寫時默認爲friendly

21、 abstract class和interface有什麼區別?

聲明方法的存在而不去實現它的類被叫做抽象類(abstract class),它用於要創建一個體現某些基本行

爲的類,併爲該類聲明方法,但不能在該類中實現該類的情況。不能創建abstract 類的實例。然而可以

創建一個變量,其類型是一個抽象類,並讓它指向具體子類的一個實例。不能有抽象構造函數或抽象靜態

方法。Abstract 類的子類爲它們父類中的所有抽象方法提供實現,否則它們也是抽象類爲。取而代之,

在子類中實現該方法。知道其行爲的其它類可以在類中實現這些方法。

接口(interface)是抽象類的變體。在接口中,所有方法都是抽象的。多繼承性可通過實現這樣

的接口而獲得。接口中的所有方法都是抽象的,沒有一個有程序體。接口只可以定義static final成員變

量。接口的實現與子類相似,除了該實現類不能從接口定義中繼承行爲。當類實現特殊接口時,它定義(

即將程序體給予)所有這種接口的方法。然後,它可以在實現了該接口的類的任何對象上調用接口的方法

。由於有抽象類,它允許使用接口名作爲引用變量的類型。通常的動態聯編將生效。引用可以轉換到接口

類型或從接口類型轉換,instanceof 運算符可以用來決定某對象的'類是否實現了接口

22、ArrayList和Vector的區別,HashMap和Hashtable的區別

答:就ArrayList與Vector主要從二方面來說.

一.同步性:Vector是線程安全的,也就是說是同步的,而ArrayList是線程序不安全的,不是同步的

二.數據增長:當需要增長時,Vector默認增長爲原來一培,而ArrayList卻是原來的一半

就HashMap與HashTable主要從三方面來說。

一.歷史原因:Hashtable是基於陳舊的Dictionary類的,HashMap是Java 1.2引進的Map接口的一個實

二.同步性:Hashtable是線程安全的,也就是說是同步的,而HashMap是線程序不安全的,不是同步

三.值:只有HashMap可以讓你將空值作爲一個表的條目的key或value

23、 char型變量中能不能存貯一箇中文漢字?爲什麼?

是能夠定義成爲一箇中文的,因爲java中以unicode編碼,一個char佔16個字節,所以放一箇中文是沒問題的

24、 float型float f=3.4是否正確?

答:不正確。精度不準確,應該用強制類型轉換,如下所示:float f=(float)3.4

STRING與STRINGBUFFER的區別。

答:STRING的長度是不可變的,STRINGBUFFER的長度是可變的。如果你對字符串中的內容經常進行操

作,特別是內容要修改時,那麼使用StringBuffer,如果最後需要String,那麼使用StringBuffer的toString()方法.

25、 說出ArrayList,Vector, LinkedList的存儲性能和特性

ArrayList和Vector都是使用數組方式存儲數據,此數組元素數大於實際存儲的數據以便增加和插

入元素,它們都允許直接按序號索引元素,但是插入元素要涉及數組元素移動等內存操作,所以索引數據

快而插入數據慢, Vector由於使用了synchronized方法(線程安全),通常性能上較ArrayList差,而

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

錄本項的前後項即可,所以插入速度較快。

繼承時候類的執行順序問題,以下代碼顯示什麼結果。

父類:public class FatherClass {

public FatherClass() {

tln("FatherClass Create"); }

}

子類: import FatherClass;

public class ChildClass extends FatherClass {

public ChildClass() {

tln("ChildClass Create"); }

public static void main(String[] args) {

FatherClass fc = new FatherClass();

ChildClass cc = new ChildClass(); }

} //執行java ChildClass