五道java高級(jí)面試題及答案

五道java高級(jí)面試題及答案

北大青鳥長(zhǎng)沙麓谷校區(qū)      2022-04-14 01:28:01     9

五道java高級(jí)面試題及答案,  1、Exception和Error有什么區(qū)別?  Exception和Error都是繼承了Throwable類,在Java中只有Throwable類型的實(shí)例才可以被拋

課程價(jià)格 請(qǐng)咨詢

上課時(shí)段: 授課校區(qū):

詳細(xì)介紹


  1、Exception和Error有什么區(qū)別?



  Exception和Error都是繼承了Throwable類,在Java中只有Throwable類型的實(shí)例才可以被拋出或者捕獲,它是異常處理機(jī)制的基本組成類型。Exception和Error體現(xiàn)了Java平臺(tái)設(shè)計(jì)者對(duì)不同異常情況的分類。Exception是程序正常運(yùn)行中,可以預(yù)料的意外情況,可能并且應(yīng)該被捕獲,進(jìn)行相應(yīng)處理。Error是指在正常情況下,不大可能出現(xiàn)的情況,絕大部分的Error都會(huì)導(dǎo)致程序(比如JVM自身)處于非正常的、不可恢復(fù)狀態(tài)。既然是非正常情況,所以不便于也不需要捕獲,常見的比如OutOfMemoryError之類,都是Error的子類。


  2、Hashtable、HashMap、TreeMap有什么不同?



  Hashtable是早期Java類庫提供的一個(gè)哈希表實(shí)現(xiàn),本身是同步的,不支持null鍵和值,由于同步導(dǎo)致的性能開銷,所以已經(jīng)很少被推薦使用。HashMap是應(yīng)用更加廣泛的哈希表實(shí)現(xiàn),行為上大致上與HashTable一致,主要區(qū)別在于HashMap不是同步的,支持null鍵和值等。通常情況下,HashMap進(jìn)行put或者get操作,可以達(dá)到常數(shù)時(shí)間的性能,所以它是絕大部分利用鍵值對(duì)存取場(chǎng)景的首選。TreeMap則是基于紅黑樹的一種提供順序訪問的Map,和HashMap不同,它的get、put、remove之類操作都是O(log(n))的時(shí)間復(fù)雜度,具體順序可以由指定的Comparator來決定,或者根據(jù)鍵的自然順序來判斷。


  3、什么情況下Java程序會(huì)產(chǎn)生死鎖?



  死鎖是一種特定的程序狀態(tài),在實(shí)體之間,由于循環(huán)依賴導(dǎo)致彼此一直處于等待之中,沒有任何個(gè)體可以繼續(xù)前進(jìn)。死鎖不僅僅是在線程之間會(huì)發(fā)生,存在資源獨(dú)占的進(jìn)程之間同樣也可能出現(xiàn)死鎖。通常來說,我們大多是聚焦在多線程場(chǎng)景中的死鎖,指兩個(gè)或多個(gè)線程之間,由于互相持有對(duì)方需要的鎖,而永久處于阻塞的狀態(tài)。


  大部分死鎖本身并不難定位,掌握基本思路和工具使用,理解線程相關(guān)的基本概念,比如各種線程狀態(tài)和同步、鎖、Latch等并發(fā)工具,就已經(jīng)足夠解決大多數(shù)問題了。


  4、Java并發(fā)類庫提供的線程池有哪幾種?



  通常開發(fā)者都是利用Executors提供的通用線程池創(chuàng)建方法,去創(chuàng)建不同配置的線程池,主要區(qū)別在于不同的ExecutorService類型或者不同的初始參數(shù)。Executors目前提供了5種不同的線程池創(chuàng)建配置:newCachedThreadPool()、newFixedThreadPool(intnThreads)、newSingleThreadExecutor()、newSingleThreadScheduledExecutor()和newScheduledThreadPool(intcorePoolSize)、newWorkStealingPool(intparallelism)。


  5、如何監(jiān)控和診斷JVM堆內(nèi)和堆外內(nèi)存使用?



  了解JVM內(nèi)存的方法有很多,具體能力范圍也有區(qū)別,可以使用綜合性的圖形化工具,如JConsole、VisualVM等。這些工具具體使用起來相對(duì)比較直觀,直接連接到Java進(jìn)程,然后就可以在圖形化界面里掌握內(nèi)存使用情況。以JConsole為例,其內(nèi)存頁面可以顯示常見的堆內(nèi)存和各種堆外部分使用狀態(tài)。也可以使用命令行工具進(jìn)行運(yùn)行時(shí)查詢,如jstat和jmap等工具都提供了一些選項(xiàng),可以查看堆、方法區(qū)等使用數(shù)據(jù)。或者,也可以使用jmap等提供的命令,生成堆轉(zhuǎn)儲(chǔ)文件,然后利用jhat或EclipseMAT等堆轉(zhuǎn)儲(chǔ)分析工具進(jìn)行詳細(xì)分析。


      以上就是北大青鳥長(zhǎng)沙麓谷校區(qū)Java培訓(xùn)機(jī)構(gòu)小編介紹的“五道java高級(jí)面試題及答案”的內(nèi)容,希望對(duì)大家有幫助,如有疑問,請(qǐng)?jiān)诰€咨詢,有專業(yè)老師隨時(shí)為你服務(wù)。


相關(guān)推薦


最新最全java面試題及答案(初級(jí)到高級(jí))


史上最全的中高級(jí)JAVA工程師面試題及答案匯總


Java高級(jí)開發(fā)工程師面試題


2019史上最全java面試題題庫大全800題


哪有資深java工程師面試題


培訓(xùn)啦提醒您:交易時(shí)請(qǐng)核實(shí)對(duì)方資質(zhì),對(duì)于過大宣傳或承諾需謹(jǐn)慎!任何要求預(yù)付定金、匯款等方式均存在風(fēng)險(xiǎn),謹(jǐn)防上當(dāng)。