標籤:string 部署 二進位 indent 定義類 java面試 加密 重寫 etc
11、類載入過程,如何獲得當前對象的ClassLoader
類載入的過程分為:載入、串連、初始化、使用和卸載。其中串連又可以分為:驗證、準備和解析
擷取當前對象的ClassLoader通過如下代碼:
this.getClass().getClassLoader() // 擷取當前對象的類對象,然後調用getClassLoader
類載入器可以進行類層次的劃分、OSGi、熱部署和代碼加密等。那麼使用者如何自訂類載入器呢?
要建立使用者自己的類載入器,只需要擴充java.lang.ClassLoader類,然後覆蓋它的findClass(String name)方法即可,該方法根據參數指定類的名字,返回對應的Class對象的引用。
findClass protected Class<?> findClass(String name) throws ClassNotFoundException
使用指定的二進位名稱尋找類。此方法應該被類載入器的實現重寫,該實現按照委託模型來載入類。在通過父類載入器檢查所請求的類後,此方法將被 loadClass 方法調用。預設實現拋出一個 ClassNotFoundException。
12、關於ConcurrentHashMap相關的問題
(1)ConcurrentHashMap的鎖分段技術。
(2)ConcurrentHashMap的讀是否要加鎖,為什麼。
(3)ConcurrentHashMap的迭代器是強一致性的迭代器還是弱一致性的迭代器。
13、假如有Thread1、Thread2、Thread3、Thread4四條線程分別統計C、D、E、F四個盤的大小,所有線程都統計完畢交給Thread5線程去做匯總,應當如何??
把相互獨立的計算任務包含在一個工作單元內,無需為每個單元啟動新的線程。這樣處理多線程代碼通常效率更高。因為不用去為每個計算單元單獨啟動Thread線程。執行代碼的線程是重用的。
(1)任務
Callable代表了一段可以調用並返回結果的代碼
Future介面用來表示非同步任務,是還沒有完成的任務給出的未來結果。主要方法有get()、cancel()和isDone()
FutureTask是Future介面的常用實作類別
(2)執行者 通過Executors類的Factory 方法擷取眾多執行者之一
Java面試11-15