2010年8月1日 星期日

java 面試題

今天主管拿了一份java試題給我做 ,真的難倒我了...
上了google打了關鍵字 ,發現網路上已經有人po出答案了...
總覺得網路上的答案和我想的有出路,這是我的答案..
不知道哪裡有正確答案....有人要給我正確答案嗎?

第一,談談final, finally, finalize的區別。

這三個沒什麼關係。
final是修飾的關鍵字,可修飾類別、方法 和變數。
final class該類別無法被繼承,final method 該方法不能被override,final variable
該變數一經設定後就無法修改。

finally 在例外處理中(try…catch….finally)最後一定會被執行的區塊。

finalize 當 garbage collector發現某物件已經不被任何物件所參考(reference)

會呼叫該物件的finalize(),finalize()內沒有什特別的動作一般會被

OVERRIDE拿來作為資源的釋放。


第二,Anonymous Inner Class (匿名內部類) 是否可以extends(繼承)其他類,是否可以implements(實現)interface(介面)?

可以,但不能同時extends和implements。(Anonymous inheritance)

Ex:
new ClassName ([參數列]) { 類別內容 }
new InterfaceName (){ 類別內容 }

第三,Static Nested Class 和 Inner Class的不同,說得越多越好。

Static Nested Class不能直接參考它的封裝類別(enclosing class)中的實
體變數或方法,僅能透過object instance的方式存取。
Inner Class可以直接存取它的封裝類別(enclosing class)中的變數或方法。
inner class中不能定義任何的static成員。


第四,&和&&的區別。

& 位元運算符號 && 邏輯運算符號

第五,HashMap和Hashtable的區別。

Hashtable 是thread safe class,HashMap不是。
HashMap 接受 null, 而 Hashtable 不接受。

第六,Collection 和 Collections的區別。
Collection是Interface,Collections是Class。

第七,什麼時候用assert。

測試驗證時。

第八,GC是什麼? 為什麼要有GC?

garbage collector,由JVM做記憶體管理,開發人員無須考慮這部分。

第九,String s = new String("xyz");創建了幾個String Object?

兩個… 一個是”xyz”另一個是new String(“xyz”)。

第十,Math.round(11.5)等於多少? Math.round(-11.5)等於多少?

Math.round(11.5) = 12 , Math.round(-11.5) = -11

第十一,short s1 = 1; s1 = s1 + 1;有什麼錯? short s1 = 1; s1 += 1;有什麼錯?

S1 +1會回傳int,int不能指定給short;
S1 += 1 沒錯。

第十二,sleep() 和 wait() 有什麼區別?

Sleep()無法由其他thread喚起,wait()可以。

第十三,Java有沒有goto?

有,屬於沒有被實作的keyword。

第十四,陣列有沒有length()這個方法? String有沒有length()這個方法?

陣列僅有length的屬性,String有。

第十五,Overload和Override的區別。Overloaded的方法是否可以改變
返回值的類型?

Overload發生在同一類別裡,Override發生在繼承關係間。
Overload為靜態連結,Override為動態連結。
可改變返回值的型態,前提是參數也要變,參數相同傳回值不同是
不被允
許的。

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

用equals()。
==是比較refrence variables的內容,equals()是比較物件的內容。


第十七,給我一個你最常見到的runtime exception。
IndexOutOfBoundsException

第十八,error和exception有什麼區別?

Error 通常為不可補救的嚴重的錯誤,由 Java API或
Java virtual machine 自己丟出。

Exception 指較不嚴重的不正常狀況,他底下又定義了許多不同種類的子類別,
其中一類為 RuntimeException,表示 JVM 在執行期間發生的不正常情形。


第十九,List, Set, Map是否繼承自Collection介面?
List和Set是 ,Map不是

第二十,abstract class和interface有什麼區別?

當一個類別裡面包含有一個(含)以上的abstract method該稱類別為abstract class。
但在java中可故意宣告無abstract method的類別為abstract class。
在abstract class中可有屬性(資料成員),也可有已實作的method。

介面中全部都是abstract method並不能有constructor且僅能有
static final的屬性。


第二十一,abstract的method是否可同時是static,是否可同時是native,
是否可同時是synchronized?

不可,abstract method不可包含private, final, static, native,
synchronized
等關鍵字

第二十二,介面是否可繼承介面? 抽象類是否可實現(implements)介面?
抽象類別是否可繼承實體類別(concrete class)?

介面可繼承介面,抽象類別可implements介面,抽象類別可繼承實體類別
但前提是該實體類別要有明確的建構函數。。

第二十三,啟動一個執行緒是用run()還是start()?
start()會啟動一執行緒並呼叫其run()。

第二十四,構造器Constructor是否可被override?

No.

第二十五,是否可以繼承String類?

否,String是final Class。

第二十六,當一個執行緒進入一個物件的一個synchronized方法後,其他執行緒是否可進入此物件的其他方法?

可以。

第二十七,try {}裏有一個return語句,那麼緊跟在這個try後的finally {}裏的code會不會被執行,什麼時候被執行,在return前還是後?

會在return前執行。

第二十八,程式設計題: 用最有效率的方法算出2乘以8等於幾?

2 <<3

第二十九,兩個物件值相同(x.equals(y) == true),但卻可有不同的
hash code,這句話對不對?

java.lang.Object規範equals()傳回true時,必須擁有一樣的hashcode。
實作還是可以做到不一樣的hashcode。


第三十,當一個物件被當作參數傳遞到一個方法後,此方法可改變這個物件的屬性,
並可返回變化後的結果,那麼這裏到底是值傳遞還是引用傳遞?

Call by reference.

第三十一,swtich是否能作用在byte上,是否能作用在long上,是否能作用在String上?

Switch(exp),exp為整數運算式,故僅有int、 short、 char 或者 byte可以作用。

第三十二,程式設計題: 寫一個Singleton出來。

too easy...

619:
public class ClassicSingleton {

private static ClassicSingleton instance = null;
protected ClassicSingleton() {
// Exists only to defeat instantiation.
}
public static ClassicSingleton getInstance() {
if(instance == null) {
instance = new ClassicSingleton();
}
return instance;
}
}


From~http://chihhsiang-javaidea.blogspot.com/2007/07/java_29.html


=============

Concrete class:
當class 是 abstract class,所以無法實體化(instantiated),也就是說不能產生一個物件由於我們不能產生一個抽象類別的物件,所以對於非抽象類別,我們一般稱之為實體類別(concrete class)

Polymorphism:
Polymorphism又稱為多型,簡單來說,多型是指子類別繼承父類別時,同時改寫父類別的函式或變數,而我們可以宣告一個屬於父類別的變數,去存取子類別中改寫自父類別的函式或變數,這我們稱之為多型。
舉個生活一點的例子,若有一個父類別是動物,那麼有一個子類別鳥繼承自動物這個類別,當我們看到鳥的時侯,可以說牠是一隻鳥,也可以說牠是一隻動物。同樣的東西,卻有不同的表示型態。


Overloaded methods
are methods with the same name signature but either a different number of parameters or different types in the parameter list. For example 'spinning' a number may mean increase it, 'spinning' an image may mean rotate it by 90 degrees. By defining a method for handling each type of parameter you achieve the effect that you want.

Overridden methods are methods that are redefined within an inherited or subclass. They have the same signature and the subclass definition is used.

Polymorphism is the capability of an action or method to do different things based on the object that it is acting upon. This is the third basic principle of object oriented programming. Overloading and overriding are two types of polymorphism .

沒有留言:

張貼留言