更新時間:2020-02-12 10:41:12 來源:動力節點 瀏覽2694次
1、Exception和Error有什么區別?
Exception和Error都是繼承了Throwable類,在Java中只有Throwable類型的實例才可以被拋出或者捕獲,它是異常處理機制的基本組成類型。Exception和Error體現了Java平臺設計者對不同異常情況的分類。Exception是程序正常運行中,可以預料的意外情況,可能并且應該被捕獲,進行相應處理。Error是指在正常情況下,不大可能出現的情況,絕大部分的Error都會導致程序(比如JVM自身)處于非正常的、不可恢復狀態。既然是非正常情況,所以不便于也不需要捕獲,常見的比如OutOfMemoryError之類,都是Error的子類。
2、Hashtable、HashMap、TreeMap有什么不同?
Hashtable是早期Java類庫提供的一個哈希表實現,本身是同步的,不支持null鍵和值,由于同步導致的性能開銷,所以已經很少被推薦使用。HashMap是應用更加廣泛的哈希表實現,行為上大致上與HashTable一致,主要區別在于HashMap不是同步的,支持null鍵和值等。通常情況下,HashMap進行put或者get操作,可以達到常數時間的性能,所以它是絕大部分利用鍵值對存取場景的首選。TreeMap則是基于紅黑樹的一種提供順序訪問的Map,和HashMap不同,它的get、put、remove之類操作都是O(log(n))的時間復雜度,具體順序可以由指定的Comparator來決定,或者根據鍵的自然順序來判斷。
3、什么情況下Java程序會產生死鎖?
死鎖是一種特定的程序狀態,在實體之間,由于循環依賴導致彼此一直處于等待之中,沒有任何個體可以繼續前進。死鎖不僅僅是在線程之間會發生,存在資源獨占的進程之間同樣也可能出現死鎖。通常來說,我們大多是聚焦在多線程場景中的死鎖,指兩個或多個線程之間,由于互相持有對方需要的鎖,而永久處于阻塞的狀態。
大部分死鎖本身并不難定位,掌握基本思路和工具使用,理解線程相關的基本概念,比如各種線程狀態和同步、鎖、Latch等并發工具,就已經足夠解決大多數問題了。
4、Java并發類庫提供的線程池有哪幾種?
通常開發者都是利用Executors提供的通用線程池創建方法,去創建不同配置的線程池,主要區別在于不同的ExecutorService類型或者不同的初始參數。Executors目前提供了5種不同的線程池創建配置:newCachedThreadPool()、newFixedThreadPool(intnThreads)、newSingleThreadExecutor()、newSingleThreadScheduledExecutor()和newScheduledThreadPool(intcorePoolSize)、newWorkStealingPool(intparallelism)。
5、如何監控和診斷JVM堆內和堆外內存使用?
了解JVM內存的方法有很多,具體能力范圍也有區別,可以使用綜合性的圖形化工具,如JConsole、VisualVM等。這些工具具體使用起來相對比較直觀,直接連接到Java進程,然后就可以在圖形化界面里掌握內存使用情況。以JConsole為例,其內存頁面可以顯示常見的堆內存和各種堆外部分使用狀態。也可以使用命令行工具進行運行時查詢,如jstat和jmap等工具都提供了一些選項,可以查看堆、方法區等使用數據。或者,也可以使用jmap等提供的命令,生成堆轉儲文件,然后利用jhat或EclipseMAT等堆轉儲分析工具進行詳細分析。
以上就是動力節點Java培訓機構小編介紹的“五道java高級面試題及答案”的內容,希望對大家有幫助,如有疑問,請在線咨詢,有專業老師隨時為你服務。
相關推薦
0基礎 0學費 15天面授
有基礎 直達就業
業余時間 高薪轉行
工作1~3年,加薪神器
工作3~5年,晉升架構
提交申請后,顧問老師會電話與您溝通安排學習