更新時間:2020-02-12 10:41:12 來源:動力節(jié)點 瀏覽2831次
1、Exception和Error有什么區(qū)別?
Exception和Error都是繼承了Throwable類,在Java中只有Throwable類型的實例才可以被拋出或者捕獲,它是異常處理機制的基本組成類型。Exception和Error體現(xiàn)了Java平臺設(shè)計者對不同異常情況的分類。Exception是程序正常運行中,可以預(yù)料的意外情況,可能并且應(yīng)該被捕獲,進(jìn)行相應(yīng)處理。Error是指在正常情況下,不大可能出現(xiàn)的情況,絕大部分的Error都會導(dǎo)致程序(比如JVM自身)處于非正常的、不可恢復(fù)狀態(tài)。既然是非正常情況,所以不便于也不需要捕獲,常見的比如OutOfMemoryError之類,都是Error的子類。
2、Hashtable、HashMap、TreeMap有什么不同?
Hashtable是早期Java類庫提供的一個哈希表實現(xiàn),本身是同步的,不支持null鍵和值,由于同步導(dǎo)致的性能開銷,所以已經(jīng)很少被推薦使用。HashMap是應(yīng)用更加廣泛的哈希表實現(xiàn),行為上大致上與HashTable一致,主要區(qū)別在于HashMap不是同步的,支持null鍵和值等。通常情況下,HashMap進(jìn)行put或者get操作,可以達(dá)到常數(shù)時間的性能,所以它是絕大部分利用鍵值對存取場景的首選。TreeMap則是基于紅黑樹的一種提供順序訪問的Map,和HashMap不同,它的get、put、remove之類操作都是O(log(n))的時間復(fù)雜度,具體順序可以由指定的Comparator來決定,或者根據(jù)鍵的自然順序來判斷。
3、什么情況下Java程序會產(chǎn)生死鎖?
死鎖是一種特定的程序狀態(tài),在實體之間,由于循環(huán)依賴導(dǎo)致彼此一直處于等待之中,沒有任何個體可以繼續(xù)前進(jìn)。死鎖不僅僅是在線程之間會發(fā)生,存在資源獨占的進(jìn)程之間同樣也可能出現(xiàn)死鎖。通常來說,我們大多是聚焦在多線程場景中的死鎖,指兩個或多個線程之間,由于互相持有對方需要的鎖,而永久處于阻塞的狀態(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等。這些工具具體使用起來相對比較直觀,直接連接到Java進(jìn)程,然后就可以在圖形化界面里掌握內(nèi)存使用情況。以JConsole為例,其內(nèi)存頁面可以顯示常見的堆內(nèi)存和各種堆外部分使用狀態(tài)。也可以使用命令行工具進(jìn)行運行時查詢,如jstat和jmap等工具都提供了一些選項,可以查看堆、方法區(qū)等使用數(shù)據(jù)。或者,也可以使用jmap等提供的命令,生成堆轉(zhuǎn)儲文件,然后利用jhat或EclipseMAT等堆轉(zhuǎn)儲分析工具進(jìn)行詳細(xì)分析。
以上就是動力節(jié)點Java培訓(xùn)機構(gòu)小編介紹的“五道java高級面試題及答案”的內(nèi)容,希望對大家有幫助,如有疑問,請在線咨詢,有專業(yè)老師隨時為你服務(wù)。
相關(guān)推薦
相關(guān)閱讀
初級 202925
初級 203221
初級 202629
初級 203743