更新時(shí)間:2019-08-03 09:00:00 來源:動力節(jié)點(diǎn) 瀏覽4546次
Java面試隨著時(shí)間的改變而改變。在過去的日子里,當(dāng)你知道String和StringBuilder的區(qū)別(String類型和StringBuffer類型的主要性能區(qū)別其實(shí)在于String是不可變的對象。因此在每次對String類型進(jìn)行改變的時(shí)候其實(shí)都等同于生成了一個(gè)新的String對象,然后將指針指向新的String對象,所以經(jīng)常改變內(nèi)容的字符串最好不要用String,因?yàn)槊看紊蓪ο蠖紩ο到y(tǒng)性能產(chǎn)生影響,特別當(dāng)內(nèi)存中無引用對象多了以后,JVM的GC就會開始工作,影響性能,可以考慮使用可變字符序列StringBuilder)就能讓你直接進(jìn)入第二輪面試,但是現(xiàn)在問題變得越來越高級,面試官問的問題也更深入。在我初入職場的時(shí)候,類似于Vector與Array的區(qū)別、HashMap與Hashtable的區(qū)別是最流行的問題,只需要記住它們,就能在面試中獲得更好的機(jī)會,但這種情形已經(jīng)不復(fù)存在。如今,你將會被問到許多Java程序員都沒有看過的領(lǐng)域,如NIO,設(shè)計(jì)模式,成熟的單元測試,或者那些很難掌握的知識,如并發(fā)、算法、數(shù)據(jù)結(jié)構(gòu)及編碼。
這幾天經(jīng)常有人找小編要面試題,因此小編將壓箱底的寶貝面試問題分享給大家,這里包括許多許多不同的主題。小編已經(jīng)為這眾多的問題準(zhǔn)備一段時(shí)間了,現(xiàn)在我將它們分享給你們。這里面不但包含經(jīng)典的面試問題,如線程、集合、equals和hashcode、socket,而且還包含了NIO、數(shù)組、字符串、Java8等主題。
該列表包含了入門級Java程序員和多年經(jīng)驗(yàn)的高級開發(fā)者的問題。無論你是1、2、3、4、5、6、7、8、9還是10年經(jīng)驗(yàn)的開發(fā)者,你都能在其中找到一些有趣的問題。這里包含了一些超級容易回答的問題,同時(shí)包含經(jīng)驗(yàn)豐富的Java程序員也會棘手的問題。
當(dāng)然你們也是非常幸運(yùn)的,當(dāng)今有許多好的書來幫助你準(zhǔn)備Java面試,其中有一本我覺得特別有用和有趣的是Markham的Java程序面試揭秘(JavaProgrammingInterviewExposed)。這本書會告訴你一些Java和JEE面試中最重要的主題,即使你不是準(zhǔn)備Java面試,也值得一讀。
開始之前先來一波福利,除去文字中的面試題,這里小編還給大家總結(jié)了完整的面試問題以及面試題視頻
Java面試中的重要話題
除了你看到的驚人的問題數(shù)量,我也盡量保證質(zhì)量。我不止一次分享各個(gè)重要主題中的問題,也確保包含所謂的高級話題,這些話題很多程序員不喜歡準(zhǔn)備或者直接放棄,因?yàn)樗麄兊墓ぷ鞑粫婕暗竭@些。JavaNIO和JVM底層就是最好的例子。你也可以將設(shè)計(jì)模式劃分到這一類中,但是越來越多有經(jīng)驗(yàn)的程序員了解GOF設(shè)計(jì)模式并應(yīng)用這些模式。我也盡量在這個(gè)列表中包含2015年最新的面試問題,這些問題可能是來年關(guān)注的核心。為了給你一個(gè)大致的了解,下面列出這份Java面試問題列表包含的主題:
多線程,并發(fā)及線程基礎(chǔ)數(shù)據(jù)類型轉(zhuǎn)換的基本原則垃圾回收(GC)Java集合框架數(shù)組字符串GOF設(shè)計(jì)模式SOLID(單一功能、開閉原則、里氏替換、接口隔離以及依賴反轉(zhuǎn))設(shè)計(jì)原則抽象類與接口Java基礎(chǔ),如equals和hashcode泛型與枚舉JavaIO與NIO常用網(wǎng)絡(luò)協(xié)議Java中的數(shù)據(jù)結(jié)構(gòu)和算法正則表達(dá)式JVM底層Java最佳實(shí)踐JDBCDate,Time與CalendarJava處理XMLJUnit編程
Java面試中其他各式各樣的問題
這部分包含Java中關(guān)于XML的面試題,JDBC面試題,正則表達(dá)式面試題,Java錯(cuò)誤和異常及序列化面試題
125)嵌套靜態(tài)類與頂級類有什么區(qū)別?(答案)
一個(gè)公共的頂級類的源文件名稱與類名相同,而嵌套靜態(tài)類沒有這個(gè)要求。一個(gè)嵌套類位于頂級類內(nèi)部,需要使用頂級類的名稱來引用嵌套靜態(tài)類,如HashMap.Entry是一個(gè)嵌套靜態(tài)類,HashMap是一個(gè)頂級類,Entry是一個(gè)嵌套靜態(tài)類。
126)你能寫出一個(gè)正則表達(dá)式來判斷一個(gè)字符串是否是一個(gè)數(shù)字嗎?(解決方案)
一個(gè)數(shù)字字符串,只能包含數(shù)字,如0到9以及+、-開頭,通過這個(gè)信息,你可以下一個(gè)如下的正則表達(dá)式來判斷給定的字符串是不是數(shù)字。
127)Java中,受檢查異常和不受檢查異常的區(qū)別?(答案)
受檢查異常編譯器在編譯期間檢查。對于這種異常,方法強(qiáng)制處理或者通過throws子句聲明。其中一種情況是Exception的子類但不是RuntimeException的子類。非受檢查是RuntimeException的子類,在編譯階段不受編譯器的檢查。 128)Java中,throw和throws有什么區(qū)別?(答案)
throw用于拋出java.lang.Throwable類的一個(gè)實(shí)例化對象,意思是說你可以通過關(guān)鍵字throw拋出一個(gè)Error或者一個(gè)Exception,如:thrownewIllegalArgumentException(“sizemustbemultipleof2″)而throws的作用是作為方法聲明和簽名的一部分,方法被拋出相應(yīng)的異常以便調(diào)用者能處理。Java中,任何未處理的受檢查異常強(qiáng)制在throws子句中聲明。
129)Java中,Serializable與Externalizable的區(qū)別?(答案)
Serializable接口是一個(gè)序列化Java類的接口,以便于它們可以在網(wǎng)絡(luò)上傳輸或者可以將它們的狀態(tài)保存在磁盤上,是JVM內(nèi)嵌的默認(rèn)序列化方式,成本高、脆弱而且不安全。Externalizable允許你控制整個(gè)序列化過程,指定特定的二進(jìn)制格式,增加安全機(jī)制。
130)Java中,DOM和SAX解析器有什么不同?(答案)
DOM解析器將整個(gè)XML文檔加載到內(nèi)存來創(chuàng)建一棵DOM模型樹,這樣可以更快的查找節(jié)點(diǎn)和修改XML結(jié)構(gòu),而SAX解析器是一個(gè)基于事件的解析器,不會將整個(gè)XML文檔加載到內(nèi)存。由于這個(gè)原因,DOM比SAX更快,也要求更多的內(nèi)存,不適合于解析大XML文件。
131)說出JDK1.7中的三個(gè)新特性?(答案)
雖然JDK1.7不像JDK5和8一樣的大版本,但是,還是有很多新的特性,如try-with-resource語句,這樣你在使用流或者資源的時(shí)候,就不需要手動關(guān)閉,Java會自動關(guān)閉。Fork-Join池某種程度上實(shí)現(xiàn)Java版的Map-reduce。允許Switch中有String變量和文本。菱形操作符(<>)用于類型推斷,不再需要在變量聲明的右邊申明泛型,因此可以寫出可讀寫更強(qiáng)、更簡潔的代碼。另一個(gè)值得一提的特性是改善異常處理,如允許在同一個(gè)catch塊中捕獲多個(gè)異常。
132)說出5個(gè)JDK1.8引入的新特性?(答案)
Java8在Java歷史上是一個(gè)開創(chuàng)新的版本,下面JDK8中5個(gè)主要的特性:Lambda表達(dá)式,允許像對象一樣傳遞匿名函數(shù)StreamAPI,充分利用現(xiàn)代多核CPU,可以寫出很簡潔的代碼Date與TimeAPI,最終,有一個(gè)穩(wěn)定、簡單的日期和時(shí)間庫可供你使用擴(kuò)展方法,現(xiàn)在,接口中可以有靜態(tài)、默認(rèn)方法。重復(fù)注解,現(xiàn)在你可以將相同的注解在同一類型上使用多次。
133)Java中,Maven和ANT有什么區(qū)別?(答案)
雖然兩者都是構(gòu)建工具,都用于創(chuàng)建Java應(yīng)用,但是Maven做的事情更多,在基于“約定優(yōu)于配置”的概念下,提供標(biāo)準(zhǔn)的Java項(xiàng)目結(jié)構(gòu),同時(shí)能為應(yīng)用自動管理依賴(應(yīng)用中所依賴的JAR文件),Maven與ANT工具更多的不同之處請參見答案。
這就是所有的面試題,如此之多,是不是?我可以保證,如果你能回答列表中的所有問題,你就可以很輕松的應(yīng)付任何核心Java或者高級Java面試。雖然,這里沒有涵蓋Servlet、JSP、JSF、JPA,JMS,EJB及其它JavaEE技術(shù),也沒有包含主流的框架如SpringMVC,Struts2.0,Hibernate,也沒有包含SOAP和RESTfulwebservice,但是這份列表對做Java開發(fā)的、準(zhǔn)備應(yīng)聘Javaweb開發(fā)職位的人還是同樣有用的,因?yàn)樗械腏ava面試,開始的問題都是Java基礎(chǔ)和JDKAPI相關(guān)的。
相關(guān)閱讀
初級 202925
初級 203221
初級 202629
初級 203743