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