Exception 和 Error 有什么區(qū)別?
Exception 和 Error 都是繼承了 Throwable 類(lèi),在 Java 中只有 Throwable 類(lèi)型的實(shí)例才可以被拋出或者捕獲,它是異常處理機(jī)制的基本組成類(lèi)型。Exception 和 Error 體現(xiàn)了 Java 平臺(tái)設(shè)計(jì)者對(duì)不同異常情況的分類(lèi)。Exception 是程序正常運(yùn)行中,可以預(yù)料的意外情況,可能并且應(yīng)該被捕獲,進(jìn)行相應(yīng)處理。Error 是指在正常情況下,不大可能出現(xiàn)的情況,絕大部分的 Error 都會(huì)導(dǎo)致程序(比如 JVM 自身)處于非正常的、不可恢復(fù)狀態(tài)。既然是非正常情況,所以不便于也不需要捕獲,常見(jiàn)的比如 OutOfMemoryError 之類(lèi),都是 Error 的子類(lèi)。
Hashtable、HashMap、TreeMap 有什么不同?
Hashtable 是早期 Java 類(lèi)庫(kù)提供的一個(gè)哈希表實(shí)現(xiàn),本身是同步的,不支持 null 鍵和值,由于同步導(dǎo)致的性能開(kāi)銷(xiā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 則是基于紅黑樹(shù)的一種提供順序訪問(wèn)的 Map,和 HashMap 不同,它的 get、put、remove 之類(lèi)操作都是 O(log(n))的時(shí)間復(fù)雜度,具體順序可以由指定的 Comparator 來(lái)決定,或者根據(jù)鍵的自然順序來(lái)判斷。
什么情況下 Java 程序會(huì)產(chǎn)生死鎖?
死鎖是一種特定的程序狀態(tài),在實(shí)體之間,由于循環(huán)依賴導(dǎo)致彼此一直處于等待之中,沒(méi)有任何個(gè)體可以繼續(xù)前進(jìn)。死鎖不僅僅是在線程之間會(huì)發(fā)生,存在資源獨(dú)占的進(jìn)程之間同樣也可能出現(xiàn)死鎖。通常來(lái)說(shuō),我們大多是聚焦在多線程場(chǎng)景中的死鎖,指兩個(gè)或多個(gè)線程之間,由于互相持有對(duì)方需要的鎖,而永久處于阻塞的狀態(tài)。
大部分死鎖本身并不難定位,掌握基本思路和工具使用,理解線程相關(guān)的基本概念,比如各種線程狀態(tài)和同步、鎖、Latch 等并發(fā)工具,就已經(jīng)足夠解決大多數(shù)問(wèn)題了。
Java 并發(fā)類(lèi)庫(kù)提供的線程池有哪幾種?
通常開(kāi)發(fā)者都是利用 Executors 提供的通用線程池創(chuàng)建方法,去創(chuàng)建不同配置的線程池,主要區(qū)別在于不同的 ExecutorService 類(lèi)型或者不同的初始參數(shù)。Executors 目前提供了 5 種不同的線程池創(chuàng)建配置:newCachedThreadPool()、newFixedThreadPool(int nThreads)、newSingleThreadExecutor()、newSingleThreadScheduledExecutor() 和 newScheduledThreadPool(int corePoolSize)、newWorkStealingPool(int parallelism)。
如何監(jiān)控和診斷 JVM 堆內(nèi)和堆外內(nèi)存使用?
了解 JVM 內(nèi)存的方法有很多,具體能力范圍也有區(qū)別,可以使用綜合性的圖形化工具,如 JConsole、VisualVM 等。這些工具具體使用起來(lái)相對(duì)比較直觀,直接連接到 Java 進(jìn)程,然后就可以在圖形化界面里掌握內(nèi)存使用情況。以 JConsole 為例,其內(nèi)存頁(yè)面可以顯示常見(jiàn)的堆內(nèi)存和各種堆外部分使用狀態(tài)。也可以使用命令行工具進(jìn)行運(yùn)行時(shí)查詢,如 jstat 和 jmap 等工具都提供了一些選項(xiàng),可以查看堆、方法區(qū)等使用數(shù)據(jù)?;蛘?,也可以使用 jmap 等提供的命令,生成堆轉(zhuǎn)儲(chǔ)文件,然后利用 jhat 或 Eclipse MAT 等堆轉(zhuǎn)儲(chǔ)分析工具進(jìn)行詳細(xì)分析。
以上就是天津卓眾教育Java培訓(xùn)機(jī)構(gòu)小編介紹的“Java高級(jí)工程師常見(jiàn)面試題”的內(nèi)容,希望對(duì)大家有幫助,如有疑問(wèn),請(qǐng)?jiān)诰€咨詢,有專(zhuān)業(yè)老師隨時(shí)為你服務(wù)。
相關(guān)推薦
最新最全java面試題及答案(初級(jí)到高級(jí))
史上最全的中高級(jí)JAVA工程師面試題及答案匯總
Java高級(jí)開(kāi)發(fā)工程師面試題
2019史上最全java面試題題庫(kù)大全800題
哪有資深java工程師面試題
Java筆試題