更新時間:2019-08-05 17:10:56 來源:動力節點 瀏覽3037次
Java程序員面試是必過的一關,如果能在面試前做好充足的準備,就離高薪更近一些,本文是由動力節點java學院小編總結的java面試常問的java問題及答案,大家快來學學吧。
1、數組有沒有length()這個方法?string有沒有length()這個方法?
數組無,數組是成員變量,length.String是成員函數length();我不知道這個題意義何在,平時都用eclipse的,會在意這個么...
2、overload和override的區別。overloaded的方法是否可以改變返回值的類型?
常問。
我寫的一篇隨筆詳細說明了重載,重寫和多態之間的關系,返回值類型不包含在函數簽名中,所以只有返回值不同的重載不成立。
3、set里的元素是不能重復的,那么用什么方法來區分重復與否呢?是用hashcode()還是equals()?它們有何區別?
這個屬于集合類的查找機制問題,在集合類中,確定兩個元素是否相同,是用equals方法進行比較,hashcode的存在在于可以給元素快速分配一個index來存儲。可以將collection看做很多個大箱子,index是箱子的編號,先將要扔進去的物品進行hash確定index,扔進響應箱子,然后再喝箱子里德其它物品equals()來比較是否相同。
此外,相等的物品一定具有相同的hashcode,不等的物品不一定。具有相同hashcode的元素不一定相等。不同的hashcode的元素肯定不等。以上規則可以想象一下相等物品一定要分在同一個箱子中的情況。
4、給我一個你最常見到的runtimeexception。
如果你這個答不出來,面試的人會認為你沒有實際編程經驗。
NullPointerException,空引用異常.說實話,中軟的筆試題就有這個,我連題目意思都理解錯了,壓根沒認出來runtime exception是指運行時異常。
5、error和exception有什么區別?
為什么水的題最容易出現?
感覺這個題很水,要說C++的話有區別,感覺JAVA里區別不大。反正中軟的題目里我就瞎扯了。單純從字面的角度去說,error就是嚴重的錯誤,像JVM產生的一些錯誤等,會停止程序運行或產生錯誤結果。exception是一定程度上可預見的錯誤,可以捕獲以及處理。其實error也可以捕獲...
6、list,set,map是否繼承自collection接口?
Collection的子接口包括BeanContext, BeanContextServices, BlockingQueue, List, Queue, Set,SortedSet.不包括Map
差點被某網頁忽悠了,還是JAVA DOC比較專業。
7、abstractclass和interface有什么區別?
常問。
真的是常問...
抽象類可以有抽象方法和普通方法,也可以有自己的數據成員。接口只允許有常量,抽象方法和靜態類成員。接口可以被多繼承,抽象類不行。接口被實現時,所有方法必須被重寫。抽象類被繼承時如果有抽象方法沒被重寫,則子類也為抽象類。
8、anonymousinnerclass(匿名內部類)是否可以extends(繼承)其它類,是否可以implements(實現)interface(接口)?
不行,對于匿名內部類,看到的一句話說的很到位:
new <類或接口> <類的主體>
這種形式的new語句聲明一個新的匿名類,他對一個給定的類進行擴展,或實現一個給定的接口。他還創建那個類的一個新實例,并把他作為語句的結果而返回。
這就是匿名類的實質,它本身就是一個類的繼承或一個接口的實現,所以繼承其它類或借口是無意義的.在eclipse中冶證實了我的想法.無論是繼承其它類還是實現其它借口都顯示Syntax error on token。
9、abstract的method是否可同時是static,是否可同時是native,是否可同時是synchronized?
abstact方法需要子類重寫,重寫的概念是就實例方法而言, 所以不能是static。因為同一原因,要重寫就不能native,抽象方法在抽象類中,無實例,不能被調用,也沒有內容,所以synchronized沒有意義。abstract方法的修飾符只有private和public。
10、接口是否可繼承接口?抽象類是否可實現(implements)接口?抽象類是否可繼承實體類(concreteclass)?
接口可以繼承接口,抽象類可以實現接口,抽象類可以繼承實體類。換句話說,抽象類除了不能實例化以外和普通類沒什么區別。
11、啟動一個線程是用run()還是start()?
用start(),start()會通過調用run()來實現多進程。
12、構造器constructor是否可被override?
構造函數不能被重寫。
13、兩個對象值相同(x.equals(y)true),但卻可有不同的hashcode,這句話對不對?
這句話本身沒有錯,equals和hashcode都是Object的方法,都可以覆蓋并由程序員自己決定算法,完全可以做到以上要求,但問題是如果是Collection中的元素,這樣做會帶來一些錯誤,一些不可預知的錯誤,所以在Collection中這樣做是禁止的。
14、當一個對象被當作參數傳遞到一個方法后,此方法可改變這個對象的屬性,并可返回變化后的結果,那么這里到底是值傳遞還是引用傳遞?
引用傳遞,毫無疑問,對象傳遞只能是引用.你可以換改變引用的內容,但并不能改變引用本身。
15、swtich是否能作用在byte上,是否能作用在long上,是否能作用在string上?
switch語句中的表達式只能是整數類型,即必須是int,char或者枚舉類型數據。不能是boolean或浮點型,甚至其他類型的整數數據(byte,short及long)。
從教材上摘錄而來,應該相當權威了。
16、編程題:寫一個singleton出來。
singleton模式即確保一個類只有一個實例,應用級singleton好像比較復雜,但最簡單的singleton還是很好實現的。
17、&和&&的區別。
這個問得很少。
&和^,<<,<<<,|同屬于位運算符,其中&是按位與,例如,1&1=1,1&0=0,&&是邏輯運算符,處理真假值,例如,true&&true=true。
如果你想學習Java可以來這個群,首先是二二零,中間是142,最后是906,里面可以學習和交流,也有資料可以下載。
18、hashmap和hashtable的區別。
常問。
hashmap可以看做是hashtable的替代者,HashMap的Value和Key都可為NULL,而HashTable不可以,同時,HashTable是線程同步的,而HashMap不是.HashTable用Iterator遍歷,HashMap用Enumeration遍歷。HashTable中hash數組默認大小是11,增加的方式是 old*2+1。HashMap中hash數組的默認大小是16,而且一定是2的指數。計算index的方法不同,HashTable直接利用hashcode()得出,HashMap對hashcode重新計算得出。
19、collection和collections的區別。
你千萬別說一個是單數一個是復數。
collection是結合類的上級接口,子接口有List和Set等,Collections是java.util下的一個工具類,提供一些列靜態方法對集合搜索排序線程同步化等。
20、什么時候用assert。
api級的技術人員有可能會問這個。
在調試和優化中使用,用于判斷邏輯表達式真假,若為假,終止程序并返回異常.assert比if的優點在于可以選擇是否開啟assert檢查,也就是說assert產生的測試代碼可以在正式發布時候選擇忽略,這帶來極大便利,默認assert檢查是關閉的。此外,Junit相比assert來說,有著相似但更強大的測試能力。
21、sleep()和wait()有什么區別?
搞線程的最愛。
1.sleep()是java.lang.Thread中的靜態方法,wait()是java.lang.Object中的方法;
2.sleep()用作當前線程阻塞自己,并在制定時間后恢復,wait()用于當前線程決定其他線程阻塞,是線程通信的表現;
3.sleep()不釋放資源,wait()釋放資源;
4.sleep()必須捕獲異常,而wait()不需要。
22、java有沒有goto?
很十三的問題,如果哪個面試的問到這個問題,我勸你還是別進這家公司。
goto是java的關鍵字,但java不支持goto,goto會影響程序的可讀性,使邏輯顯得混亂。我的這本java教程上說因為同樣的原因,要盡量少用continue和break,且可以用等價的無continue/break循環代替,更不要說goto了...總之一句話,java不支持goto。
23、是否可以繼承string類?
String類為final,不可被繼承。
24、當一個線程進入一個對象的一個synchronized方法后,其它線程是否可進入此對象的其它方法?
多線程編程涉及不多,運用到鎖的更是少的可憐
1 可以進入此對象其他非同步方法.
2 不可進入此對象此同步方法
3 不可進入此對象其他同步方法
25、try{}里有一個return語句,那么緊跟在這個try后的finally{}里的code會不會被執行,什么時候被執行,在return前還是后?
return前被執行,有程序為證:
結果是:
retrun
finally
return 1
26、編程題:用最有效率的方法算出2乘以8等於幾?
有c背景的程序員特別喜歡問這種問題。
27、staticnestedclass和innerclass的不同,說得越多越好(面試題有的很籠統)。
static nested class 指靜態嵌套類,或稱嵌套類,是C++中常用的說法,inner class指內部類,是JAVA中的說法。
內部類是一個類內部類的統稱,具體分為四種:成員類,靜態成員類,局部類,匿名類。其中匿名類是局部類的特殊情況。對于成員類和靜態成員類都存在于類的頂層代碼中。相當于類的靜態方法和非靜態方法的關系。區別在于成員類依賴于類實例而靜態成員類不依賴。
所以前者只能訪問實例方法和成員而后者只能訪問靜態方法和成員。它們都用于創建一個只和當前類有關。和其它類無關的依賴類.是否靜態取決于是否依賴類的實例。局部類相當于局部變量。存在于類的局部代碼中。相當于在main()中隨意定義和使用類。
唯一的不同是它只能使用final型的局部變量。這和垃圾回收機制有關。即局部變量會在代碼塊結束后被回收。而對象不一定。所以對象只能使用final的局部變量。
同樣,局部類存在的局部代碼塊也可以有靜態和非靜態的差別。局部類罪常見的應用就是匿名類。匿名類就是無名子的局部類。常在SWING設計中的添加監聽中出現。
static nested class相當于inner class中的靜態成員類。
28、gc是什么?為什么要有gc?
基礎。
GC 即 garbage collection(垃圾收集),是JAVA用于回收內存的一種方式,主要的實現方法有引用計數,標記回收,復制清除等,GC可以避免內存泄露和堆棧溢出,有效提高內存的利用效率,同時將程序員從繁瑣的內存管理中釋放出來。
29、string s=new string("xyz");創建了幾個stringobject?
2個,文字池中1個,堆中1個,先在文字池中創建1個"xyz"對象,再在堆中拷貝一個"xyz"對象,并將其賦給引用s。
30、math.round(11.5)等於多少?math.round(-11.5)等於多少?
Math.round(x)相當于(int)Math.floor(x+o.5f),
故math.round(11.5)=Math.floor(11.5+0.5)=Math.floor(12)=12;
Math.round(-11.5)=Math.floor(-11)=-11;
31、short s1=1;s1=s1+1;有什么錯?short s1=1;s1+=1;有什么錯?
面試題都是很變態的,要做好受虐的準備。
s1=s1+1會出錯,s1+1是int型,不能將int賦值給s1.需要顯示轉換,s1=(int)(s1+1).而s1+=1不會出錯,至于原因,有人說和編譯器的機制有關,需要看編譯原理,話說編譯原理什么的最討厭了,就這樣吧。
以上是動力節點java學院小編分享的“java面試常問java問題及答案”內容,希望對大家有幫助,更多精彩內容請關注動力節點java培訓機構。
0基礎 0學費 15天面授
有基礎 直達就業
業余時間 高薪轉行
工作1~3年,加薪神器
工作3~5年,晉升架構
提交申請后,顧問老師會電話與您溝通安排學習