版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
Java面試問題集錦及參考答案Java面試問題集錦及參考答案「篇一」1)Java中能創(chuàng)建volatile數(shù)組嗎?能,Java中可以創(chuàng)建volatile類型數(shù)組,不過只是一個(gè)指向數(shù)組的引用,而不是整個(gè)數(shù)組。我的意思是,如果改變引用指向的數(shù)組,將會受到volatile的保護(hù),但是如果多個(gè)線程同時(shí)改變數(shù)組的元素,volatile標(biāo)示符就不能起到之前的保護(hù)作用了。2)volatile能使得一個(gè)非原子操作變成原子操作嗎?一個(gè)典型的例子是在類中有一個(gè)long類型的成員變量。如果你知道該成員變量會被多個(gè)線程訪問,如計(jì)數(shù)器、價(jià)格等,你最好是將其設(shè)置為volatile。為什么?因?yàn)镴ava中讀取long類型變量不是原子的,需要分成兩步,如果一個(gè)線程正在修改該long變量的值,另一個(gè)線程可能只能看到該值的一半(前32位)。但是對一個(gè)volatile型的long或double變量的讀寫是原子。3)volatile修飾符的有過什么實(shí)踐?一種實(shí)踐是用volatile修飾long和double變量,使其能按原子類型來讀寫。double和long都是64位寬,因此對這兩種類型的讀是分為兩部分的,第一次讀取第一個(gè)32位,然后再讀剩下的32位,這個(gè)過程不是原子的,但Java中volatile型的long或double變量的讀寫是原子的。volatile修復(fù)符的另一個(gè)作用是提供內(nèi)存屏障(memorybarrier),例如在分布式框架中的應(yīng)用。簡單的說,就是當(dāng)你寫一個(gè)volatile變量之前,Java內(nèi)存模型會插入一個(gè)寫屏障(writebarrier),讀一個(gè)volatile變量之前,會插入一個(gè)讀屏障(readbarrier)。意思就是說,在你寫一個(gè)volatile域時(shí),能保證任何線程都能看到你寫的值,同時(shí),在寫之前,也能保證任何數(shù)值的更新對所有線程是可見的,因?yàn)閮?nèi)存屏障會將其他所有寫的值更新到緩存。4)volatile類型變量提供什么保證?volatile變量提供順序和可見性保證,例如,JVM或者JIT為了獲得更好的性能會對語句重排序,但是volatile類型變量即使在沒有同步塊的情況下賦值也不會與其他語句重排序。volatile提供happens-before的保證,確保一個(gè)線程的修改能對其他線程是可見的。某些情況下,volatile還能提供原子性,如讀64位數(shù)據(jù)類型,像long和double都不是原子的,但volatile類型的double和long就是原子的。5)10個(gè)線程和2個(gè)線程的同步代碼,哪個(gè)更容易寫?從寫代碼的角度來說,兩者的復(fù)雜度是相同的,因?yàn)橥酱a與線程數(shù)量是相互獨(dú)立的。但是同步策略的選擇依賴于線程的數(shù)量,因?yàn)樵蕉嗟木€程意味著更大的競爭,所以你需要利用同步技術(shù),如鎖分離,這要求更復(fù)雜的代碼和專業(yè)知識。6)你是如何調(diào)用wait方法的?使用if塊還是循環(huán)?為什么?wait方法應(yīng)該在循環(huán)調(diào)用,因?yàn)楫?dāng)線程獲取到CPU開始執(zhí)行的時(shí)候,其他條件可能還沒有滿足,所以在處理前,循環(huán)檢測條件是否滿足會更好。下面是一段標(biāo)準(zhǔn)的使用wait和notify方法的代碼://Thestandardidiomforusingthewaitmethodsynchronized(obj){while(conditiondoesnothold)obj.wait//(Releaseslock,andreacquiresonwakeup).//Performactionappropriatetocondition}參見EffectiveJava第69條,獲取更多關(guān)于為什么應(yīng)該在循環(huán)中來調(diào)用wait方法的內(nèi)容。7)什么是多線程環(huán)境下的偽共享(falsesharing)?偽共享是多線程系統(tǒng)(每個(gè)處理器有自己的局部緩存)中一個(gè)眾所周知的性能問題。偽共享發(fā)生在不同處理器的上的線程對變量的修改依賴于相同的緩存行,如下圖所示:Java面試問題集錦及參考答案「篇二」Java提供了一個(gè)健壯的、面向?qū)ο蟮姆椒▉硖幚沓霈F(xiàn)異常,稱為Java異常處理。我以前寫過一篇長文章來介紹Java異常處理,今天我將列出一些重要的Java異常面試的問題及答案,希望對你們的面試有所幫助。1.什么是Java異常答:異常是發(fā)生在程序執(zhí)行過程中阻礙程序正常執(zhí)行的錯(cuò)誤事件。比如:用戶輸入錯(cuò)誤數(shù)據(jù)、硬件故障、網(wǎng)絡(luò)阻塞等都會導(dǎo)致出現(xiàn)異常。只要在Java語句執(zhí)行中產(chǎn)生了異常,一個(gè)異常對象就會被創(chuàng)建,JRE就會試圖尋找異常處理程序來處理異常。如果有合適的異常處理程序,異常對象就會被異常處理程序接管,否則,將引發(fā)運(yùn)行環(huán)境異常,JRE終止程序執(zhí)行。Java異常處理框架只能處理運(yùn)行時(shí)錯(cuò)誤,編譯錯(cuò)誤不在其考慮范圍之內(nèi)。2.Java異常處理中有哪些關(guān)鍵字?答:throw:有時(shí)我們需要顯式地創(chuàng)建并拋出異常對象來終止程序的正常執(zhí)行。throw關(guān)鍵字用來拋出并處理運(yùn)行時(shí)異常。throws:當(dāng)我們拋出任何“被檢查的異常(checkedexception)”并不處理時(shí),需要在方法簽名中使用關(guān)鍵字throws來告知調(diào)用程序此方法可能會拋出的異常。調(diào)用方法可能會處理這些異常,或者同樣用throws來將異常傳給上一級調(diào)用方法。throws關(guān)鍵字后可接多個(gè)潛在異常,甚至是在main中也可以使用throws。try-catch:我們在代碼中用try-catch塊處理異常。當(dāng)然,一個(gè)try塊之后可以有多個(gè)catch子句,try-catch塊也能嵌套。每個(gè)catch塊必須接受一個(gè)(且僅有一個(gè))代表異常類型的參數(shù)。finally:finally塊是可選的,并且只能配合try-catch一起使用。雖然異常終止了程序的執(zhí)行,但是還有一些打開的資源沒有被關(guān)閉,因此,我們能使用finally進(jìn)行關(guān)閉。不管異常有沒有出現(xiàn),finally塊總會被執(zhí)行。3.Java異常類有哪些的重要方法?答:Exception和它的所有子類沒有提供任何特殊方法供使用,它們的所有方法都是來自其基類Throwable。StringgetMessage:方法返回Throwable的String型信息,當(dāng)異常通過構(gòu)造器創(chuàng)建后可用。StringgetLocalizedMessage:此方法通過被重寫來得到用本地語言表示的異常信息返回給調(diào)用程序。Throwable類通常只是用getMessage方法來實(shí)現(xiàn)返回異常信息。synchronizedThrowablegetCause:此方法返回異常產(chǎn)生的原因,如果不知道原因的話返回null。(原文有拼寫錯(cuò)誤應(yīng)該是if不是id)StringtoString:方法返回String格式的Throwable信息,此信息包括Throwable的名字和本地化信息。voidprintStackTrace:該方法打印棧軌跡信息到標(biāo)準(zhǔn)錯(cuò)誤流。該方法能接受PrintStream和PrintWriter作為參數(shù)實(shí)現(xiàn)重載,這樣就能實(shí)現(xiàn)打印棧軌跡到文件或流中。4.描述Java7ARM(AutomaticResourceManagement,自動資源管理)特征和多個(gè)catch塊的使用答:如果一個(gè)try塊中有多個(gè)異常要被捕獲,catch塊中的代碼會變丑陋的同時(shí)還要用多余的代碼來記錄異常。有鑒于此,Java7的一個(gè)新特征是:一個(gè)catch子句中可以捕獲多個(gè)異常。示例代碼如下:catch(IOException|SQLException|Exceptionex){logger.error(ex);thrownewMyException(ex.getMessage);}大多數(shù)情況下,當(dāng)忘記關(guān)閉資源或因資源耗盡出現(xiàn)運(yùn)行時(shí)異常時(shí),我們只是用finally子句來關(guān)閉資源。這些異常很難調(diào)試,我們需要深入到資源使用的每一步來確定是否已關(guān)閉。因此,Java7用try-with-resources進(jìn)行了改進(jìn):在try子句中能創(chuàng)建一個(gè)資源對象,當(dāng)程序的執(zhí)行完try-catch之后,運(yùn)行環(huán)境自動關(guān)閉資源。下面是這方面改進(jìn)的示例代碼:try(MyResourcemr=newMyResource){System.out.println("MyResourcecreatedintry-with-resources");}catch(Exceptione){e.printStackTrace}6.被檢查的異常和不受檢查的異常有什么區(qū)別?答:A.被檢查的異常應(yīng)該用try-catch塊代碼處理,或者在main方法中用throws關(guān)鍵字讓JRE了解程序可能拋出哪些異常。不受檢查的異常在程序中不要求被處理或用throws語句告知。B.Exception是所有被檢查異常的基類,然而,RuntimeException是所有不受檢查異常的基類。C.被檢查的異常適用于那些不是因程序引起的錯(cuò)誤情況,比如:讀取文件時(shí)文件不存在引發(fā)的FileNotFoundException。然而,不被檢查的異常通常都是由于糟糕的編程引起的,比如:在對象引用時(shí)沒有確保對象非空而引起的NullPointerException。7.在Java中throw與throws關(guān)鍵字之間的區(qū)別?答:throws用于在方法簽名中聲明此方法可能拋出的異常,而throw關(guān)鍵字則是中斷程序的執(zhí)行并移交異常對象到運(yùn)行時(shí)進(jìn)行處理。8.在Java中怎么寫自定義的異常?答:我們能繼承Exception類或其任何子類來實(shí)現(xiàn)自己的自定義異常類。這自定義異常類可以有自己變量和方法來傳遞錯(cuò)誤代碼或其它異常相關(guān)信息來處理異常。下面是一個(gè)簡單的自定義異常示例:packagecom.journaldev.exceptions;importjava.io.IOException;publicclassMyExceptionextendsIOException{privatestaticfinallongserialVersionUID=4664456874499611218L;privateStringerrorCode="Unknown_Exception";publicMyException(Stringmessage,StringerrorCode){super(message);this.errorCode=errorCode;}publicStringgetErrorCode{returnthis.errorCode;}}9.在Java中什么是內(nèi)存不足錯(cuò)誤?答:在Java中,OutOfMemoryError是java.lang.VirtualMachineError的一個(gè)子類,當(dāng)堆內(nèi)存耗盡時(shí)會被JVM拋出。我們能通過設(shè)置Java選項(xiàng)來提供更大的內(nèi)存供應(yīng)用使用來達(dá)到修復(fù)的目的。$>javaMyProgram-Xms1024m-Xmx1024m-XX:PermSize=64M-XX:MaxPermSize=256m10.引發(fā)Exceptioninthreadmain的各種不同情形?答:通常的一些主線程異常情形主要有以下幾種:Exceptioninthreadmainjava.lang.UnsupportedClassVersionError:當(dāng)編譯和運(yùn)行Java類的JDK版本不同的時(shí)出現(xiàn)這種異常。Exceptioninthreadmainjava.lang.NoClassDefFoundError:這種異常出現(xiàn)的原因有兩種:第一種是提供類全名時(shí)附帶有.class;第二種是指定類未找到。Exceptioninthreadmainjava.lang.NoSuchMethodError:main:當(dāng)試圖運(yùn)行一個(gè)沒main方法的類時(shí)會出現(xiàn)這種異常。Exceptioninthreadmainjava.lang.NoSuchMethodError:main:無論何時(shí)main方法任何異常,它打印異常到控制臺。其第一部分是陳述main方法拋出的異常,第二部分打印異常類名,后接異常類信息。想了解更多這方面的內(nèi)容,請猛點(diǎn)這里。11.Java中final,finally,finalize的區(qū)別?答:final和finally在Java中是關(guān)鍵字,而finalize則是一個(gè)方法。final關(guān)鍵字使得類變量不可變,避免類被其它類繼承或方法被重寫。finally跟try-catch塊一起使用,即使是出現(xiàn)了異常,其子句總會被執(zhí)行,通常,finally子句用來關(guān)閉相關(guān)資源。finally方法中的對象被銷毀之前會被垃圾回收。綜上三者,只有finally用于異常處理。12.在main方法拋出異常時(shí)發(fā)生了什么?答:當(dāng)main方法拋出異常時(shí),Java運(yùn)行時(shí)間終止并在控制臺打印異常信息和棧軌跡。13.catch子句能為空嗎?答:可以有空的catch子句,但那是最糟糕的編程,因?yàn)槟菢拥脑挘惓<词贡徊东@,我們也得不到任何的有用信息,對于調(diào)試來說會是個(gè)噩夢,因此,編程時(shí)永遠(yuǎn)不要有空的catch子句。Catch子句中至少要包含一個(gè)日志語句輸出到控制臺或保存到日志文件中。Java面試問題集錦及參考答案「篇三」java面試寶典最新完整版(所有面試問題及答案)一.Java基礎(chǔ)部分.21、一個(gè)".java"源文件中是否可以包括多個(gè)類(不是內(nèi)部類)?有什么限制.22、Java有沒有g(shù)oto.23、說說&和&&的區(qū)別.24、在JAVA中如何跳出當(dāng)前的多重嵌套循環(huán).25、switch語句能否作用在byte上,能否作用在long上,能否作用在String上.26、shorts1=1;s1=s1+1;有什么錯(cuò)?shorts1=1;s1+=1;有什么錯(cuò).27、char型變量中能不能存貯一個(gè)中文漢字?為什么.28、用最有效率的方法算出2乘以8等於幾?29、請?jiān)O(shè)計(jì)一個(gè)一百億的計(jì)算器.210、使用final關(guān)鍵字修飾一個(gè)變量時(shí),是引用不能變,還是引用的對象不能變?211、"=="和equals方法究竟有什么區(qū)別.212、靜態(tài)變量和實(shí)例變量的區(qū)別.213、是否可以從一個(gè)static方法內(nèi)部發(fā)出對非static方法的調(diào)用.214、Integer與int的區(qū)別.215、Math.round(11.5)等於多少?Math.round(-11.5)等於多少.216、下面的代碼有什么不妥之處.217、請說出作用域public,private,protected,以及不寫時(shí)的區(qū)別.218、Overload和Override的區(qū)別。Overloaded的方法是否可以改變返回值的類型?219、構(gòu)造器Constructor是否可被override.220、接口是否可繼承接口?抽象類是否可實(shí)現(xiàn)(implements)接口?抽象類是否可繼承具體類(concreteclass)?抽象類中是否可以有靜態(tài)的main方法.221、寫clone方法時(shí),通常都有一行代碼,是什么.222、面向?qū)ο蟮奶卣饔心男┓矫?223、java中實(shí)現(xiàn)多態(tài)的機(jī)制是什么.224、abstractclass和interface有什么區(qū)別.225、abstract的method是否可同時(shí)是static,是否可同時(shí)是native,是否可同時(shí)是synchronized?226、什么是內(nèi)部類?StaticNestedClass和InnerClass的不同.227、內(nèi)部類可以引用它的包含類的成員嗎?有沒有什么限制.228、AnonymousInnerClass(匿名內(nèi)部類)是否可以extends(繼承)其它類,是否可以implements(實(shí)現(xiàn))interface(接口).229、super.getClass方法調(diào)用.230、String是最基本的數(shù)據(jù)類型嗎.231、Strings="Hello";s=s+"world!";這兩行代碼執(zhí)行后,原始的String對象中的內(nèi)容到底變了沒有?232、是否可以繼承String類.233、Strings=newString("xyz");創(chuàng)建了幾個(gè)StringObject?二者之間有什么區(qū)別?234、String和StringBuffer的區(qū)別.235、如何把一段逗號分割的字符串轉(zhuǎn)換成一個(gè)數(shù)組.236、數(shù)組有沒有l(wèi)ength這個(gè)方法?String有沒有l(wèi)ength這個(gè)方法.237、下面這條語句一共創(chuàng)建了多少個(gè)對象:Strings="a"+"b"+"c"+"d".238、try{}里有一個(gè)return語句,那么緊跟在這個(gè)try后的finally{}里的code會不會被執(zhí)行,什么時(shí)候被執(zhí)行,在return前還是后.239、下面的程序代碼輸出的結(jié)果是多少.240、final,finally,finalize的區(qū)別.241、運(yùn)行時(shí)異常與一般異常有何異同.242、error和exception有什么區(qū)別.243、Java中的異常處理機(jī)制的簡單原理和應(yīng)用.244、請寫出你最常見到的5個(gè)runtimeexception.245、JAVA語言如何進(jìn)行異常處理,關(guān)鍵字:throws,throw,try,catch,finally分別代表什么意義?在try塊中可以拋出異常嗎.246、java中有幾種方法可以實(shí)現(xiàn)一個(gè)線程?用什么關(guān)鍵字修飾同步方法?stop和suspend方法為何不推薦使用.247、sleep和wait有什么區(qū)別.248、同步和異步有何異同,在什么情況下分別使用他們?舉例說明.249.下面兩個(gè)方法同步嗎?(自己發(fā)明).250
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 生物材料編程調(diào)控軟骨細(xì)胞表型的策略
- 生物化學(xué)虛擬實(shí)驗(yàn)與產(chǎn)業(yè)需求對接
- 生物制劑對IBD癌變風(fēng)險(xiǎn)的影響與機(jī)制
- 深度解析(2026)《GBT 20183.4-2025植物保護(hù)機(jī)械 噴霧設(shè)備 第4部分:藥液箱攪拌試驗(yàn)方法 》
- 深度解析(2026)《GBT 19525.2-2004畜禽場環(huán)境質(zhì)量評價(jià)準(zhǔn)則》
- 生殖健康臨床試驗(yàn)的遠(yuǎn)程生殖指標(biāo)監(jiān)查要點(diǎn)
- 電商運(yùn)營崗位登記審核注意事項(xiàng)及常見問題解答
- 飛機(jī)場廊橋維護(hù)人員招聘面試題庫含答案
- 內(nèi)容運(yùn)營崗位職責(zé)及面試題解讀
- 深度解析(2026)《GBT 19259-2003視頻投影器通 用技術(shù)條件》
- DB37∕T 5234-2022 超高程泵送混凝土應(yīng)用技術(shù)規(guī)程
- 設(shè)備管理二級管理制度
- 十五五學(xué)校五年發(fā)展規(guī)劃(2026-2030)
- 養(yǎng)老機(jī)構(gòu)5項(xiàng)精細(xì)化護(hù)理照料內(nèi)容+18張護(hù)理服務(wù)操作流程圖
- T/CCS 032-2023礦井智能化通風(fēng)系統(tǒng)建設(shè)技術(shù)規(guī)范
- 2025年四川中鐵建昆侖投資集團(tuán)有限公司招聘筆試參考題庫附帶答案詳解
- 2025-2030中國推拉高爾夫車行業(yè)市場發(fā)展趨勢與前景展望戰(zhàn)略分析研究報(bào)告
- 醫(yī)院辦公室主任述職報(bào)告
- 人工智能驅(qū)動提升國際傳播可及性的機(jī)制、困境及路徑
- 駕駛員心理健康培訓(xùn)課件
- 2024年-2025年司法考試真題及復(fù)習(xí)資料解析
評論
0/150
提交評論