找工作要面試,有面試就有對付面試的辦法。以下一些題目來自我和我朋友痛苦的面試經(jīng)歷,提這些問題的公司包括IBM, E*Trade, Siebel,Motorola, SUN,以及其它大小公司。
面試是沒什么道理可講的,它的題目有的不合情理、脫離實際。有在紙上寫的,有當(dāng)面考你的,也有在電話里問的,給你IDE的估計很少(否則你趕快去買彩票,說不定中)。所以如果你看完此文后,請不要抱怨說這些問題都能用IDE來解決。你必須在任何情況下準(zhǔn)確回答這些問題,在面試中如果出現(xiàn)一兩題回答不準(zhǔn)確很有可能你就被拒之門外了。
當(dāng)然這些都是Java的基本題,那些面試的人大多數(shù)不會問你Hibernate有多先進,Eclipse的三個組成部分,或command design pattern,他們都是老一輩了,最喜歡問的就是基礎(chǔ)知識。別小看了這些基礎(chǔ),我朋友水平一流,結(jié)果就栽在一到基礎(chǔ)知識的問題下,和高薪無緣。
好了廢話少說,開始正題。
第一,談?wù)刦inal, finally, finalize的區(qū)別。
最常被問到。
第二,Anonymous Inner Class (匿名內(nèi)部類)是否可以extends(繼承)其它類,是否可以implements(實現(xiàn))interface(接口)?
第三,Static Nested Class和Inner Class的不同,說得越多越好(面試題有的很籠統(tǒng))。
第四,&和&&的區(qū)別。
這個問得很少。
第五,HashMap和Hashtable的區(qū)別。
常問。
第六,Collection和Collections的區(qū)別。
你千萬別說一個是單數(shù)一個是復(fù)數(shù)。
第七,什么時候用assert。
API級的技術(shù)人員有可能會問這個。
第八,GC是什么?為什么要有GC?
基礎(chǔ)。
第九,String s = new String(xyz);創(chuàng)建了幾個String Object?
第十,(11.5)等於多少? (-11.5)等於多少?
第十一,short s1 = 1; s1 = s1 1;有什么錯? short s1 = 1; s1 = 1;有什么錯?
面試題都是很變態(tài)的,要做好受虐的準(zhǔn)備。
第十二,sleep()和wait()有什么區(qū)別?
搞線程的最愛。
第十三,Java有沒有g(shù)oto?
第十三的問題,如果哪個面試的問到這個問題,我勸你還是別進這家公司。
第十四,數(shù)組有沒有l(wèi)ength()這個方法? String有沒有l(wèi)ength()這個方法?
第十五,Overload和Override的區(qū)別。Overloaded的方法是否可以改變返回值的類型?
常問。
第十六,Set里的元素是不能重復(fù)的,那么用什么方法來區(qū)分重復(fù)與否呢?是用==還是equals()?它們有何區(qū)別?
第十七,給我一個你最常見到的runtime exception。
如果你這個答不出來,面試的人會認為你沒有實際編程經(jīng)驗。
第十八,error和exception有什么區(qū)別?
第十九,List, Set, Map是否繼承自Collection接口?
第二十,abstract class和interface有什么區(qū)別?
常問。
第二十一,abstract的method是否可同時是static,是否可同時是native,是否可同時是synchronized?
第二十二,接口是否可繼承接口?抽象類是否可實現(xiàn)(implements)接口?抽象類是否可繼承實體類(concrete class)?
第二十三,啟動一個線程是用run()還是start()?
第二十四,構(gòu)造器Constructor是否可被override?
第二十五,是否可以繼承String類?
第二十六,當(dāng)一個線程進入一個對象的一個synchronized方法后,其它線程是否可進入此對象的其它方法?
第二十七,try {}里有一個return語句,那么緊跟在這個try后的finally {}里的code會不會被執(zhí)行,什么時候被執(zhí)行,在return前還是后?
第二十八,編程題:用最有效率的方法算出2乘以8等於幾?
有C背景的程序員特別喜歡問這種問題。
第二十九,兩個對象值相同((y) == true),但卻可有不同的hash code,這句話對不對?
第三十,當(dāng)一個對象被當(dāng)作參數(shù)傳遞到一個方法后,此方法可改變這個對象的屬性,并可返回變化后的結(jié)果,那么這里到底是值傳遞還是引用傳遞?
第三十一,swtich是否能作用在byte上,是否能作用在long上,是否能作用在String上?
第三十二,編程題:寫一個Singleton出來。
下面是答案
第一,談?wù)刦inal, finally, finalize的區(qū)別。
final—修飾符(關(guān)鍵字)如果一個類被聲明為final,意味著它不能再派生出新的子類,不能作為父類被繼承。因此一個類不能既被聲明為abstract的,又被聲明為final的。將變量或方法聲明為final,可以保證它們在使用中不被改變。被聲明為final的變量必須在聲明時給定初值,而在以后的引用中只能讀取,不可修改。被聲明為final的方法也同樣只能使用,不能重載finally—再異常處理時提供finally塊來執(zhí)行任何清除操作。如果拋出一個異常,那么相匹配的catch子句就會執(zhí)行,然后控制就會進入finally塊(如果有的話)。
finalize—方法名。Java技術(shù)允許使用finalize()方法在垃圾收集器將對象從內(nèi)存中清除出去之前做必要的清理工作。這個方法是由垃圾收集器在確定這個對象沒有被引用時對這個對象調(diào)用的。它是在Object類中定義的,因此所有的類都繼承了它。子類覆蓋finalize()方法以整理系統(tǒng)資源或者執(zhí)行其他清理工作。finalize()方法是在垃圾收集器刪除對象之前對這個對象調(diào)用的。
第二,Anonymous Inner Class (匿名內(nèi)部類)是否可以extends(繼承)其它類,是否可以implements(實現(xiàn))interface(接口)?
匿名的內(nèi)部類是沒有名字的內(nèi)部類。不能extends(繼承)其它類,但一個內(nèi)部類可以作為一個接口,由另一個內(nèi)部類實現(xiàn)。
第三,Static Nested Class和Inner Class的不同,說得越多越好(面試題有的很籠統(tǒng))。
Nested Class (一般是C的說法),Inner Class (一般是JAVA的說法)。Java內(nèi)部類與C嵌套類最大的不同就在于是否有指向外部的引用上
。具體可見// /> 注:靜態(tài)內(nèi)部類(Inner Class)意味著1創(chuàng)建一個static內(nèi)部類的對象,不需要一個外部類對象,2不能從一個static內(nèi)部類的一個對象訪問一個外部類對象
第四,&和&&的區(qū)別。
&是位運算符。&&是布爾邏輯運算符。
第五,HashMap和Hashtable的區(qū)別。
都屬于Map接口的類,實現(xiàn)了將惟一鍵映射到特定的值上。
HashMap類沒有分類或者排序。它允許一個null鍵和多個null值。
Hashtable類似于HashMap,但是不允許null鍵和null值。它也比HashMap慢,因為它是同步的。
第六,Collection和Collections的區(qū)別。
Collections是個下的類,它包含有各種有關(guān)集合操作的靜態(tài)方法。
Collection是個下的接口,它是各種集合結(jié)構(gòu)的父接口。
第七,什么時候用assert。
斷言是一個包含布爾表達式的語句,在執(zhí)行這個語句時假定該表達式為true。如果表達式計算為false,那么系統(tǒng)會報告一個
Assertionerror。它用于調(diào)試目的:
assert(a >0); // throws an Assertionerror if a <= 0
斷言可以有兩種形式:
assert Expression1;
assert Expression1: Expression2 ;
Expression1應(yīng)該總是產(chǎn)生一個布爾值。
Expression2可以是得出一個值的任意表達式。這個值用于生成顯示更多調(diào)試信息的String消息。
斷言在默認情況下是禁用的。要在編譯時啟用斷言,需要使用source 1.4標(biāo)記:
javac -source 1.4要在運行時啟用斷言,可使用-nableassertions或者-ea標(biāo)記。
要在運行時選擇禁用斷言,可使用-da或者-disableassertions標(biāo)記。
要系統(tǒng)類中啟用斷言,可使用-esa或者-dsa標(biāo)記。還可以在包的基礎(chǔ)上啟用或者禁用斷言。
可以在預(yù)計正常情況下不會到達的任何位置上放置斷言。斷言可以用于驗證傳遞給私有方法的參數(shù)。不過,斷言不應(yīng)該用于驗證傳遞給公有方法的參數(shù),因為不管是否啟用了斷言,公有方法都必須檢查其參數(shù)。不過,既可以在公有方法中,也可以在非公有方法中利用斷言測試后置條件。另外,斷言不應(yīng)該以任何方式改變程序的狀態(tài)。