天天看點

Android:Java類加載器面試題集錦

前言

很多人面試之前,可能沒有在網際網路公司工作過或者說工作過但年頭較短,不知道網際網路公司技術面試都會問哪些問題? 再加上可能自己準備也不充分,去面試沒幾個回合就被面試官幾個問題打蒙了,最後以慘敗收場。

下述是我收錄整理的Android面試題彙總,由于篇幅原因,在這隻把Java類加載器的題目列舉出來,後續還會更新其餘面試題内容,大家可以關注一下我,及時知曉我更新的知識點,同時這份面試集錦的整理也花費了我很多時間,有需要的朋友可以幫忙轉發分享下,點個贊~

類加載器

程式在啟動的時候,并不會一次性加載程式所要用的所有class檔案,而是根據程式的需要,通過Java的類加載機制(ClassLoader)來動态加載某個class檔案到記憶體當中的,進而隻有class檔案被載入到了記憶體之後,才能被其它class所引用。是以ClassLoader就是用來動态加載class檔案到記憶體當中用的。

1、雙親委派原理

每個ClassLoader執行個體都有一個父類加載器的引用(不是繼承關系,是一個包含的關系),虛拟機内置的類加載器(Bootstrap ClassLoader)本身沒有父類加載器,但是可以用做其他ClassLoader執行個體的父類加載器。

當一個ClassLoader 執行個體需要加載某個類時,它會試圖在親自搜尋這個類之前先把這個任務委托給它的父類加載器,這個過程是由上而下依次檢查的,首先由頂層的類加載器Bootstrap CLassLoader進行加載,如果沒有加載到,則把任務轉交給Extension CLassLoader視圖加載,如果也沒有找到,則轉交給AppCLassLoader進行加載,還是沒有的話,則交給委托的發起者,由它到指定的檔案系統或者網絡等URL中進行加載類。還沒有找到的話,則會抛出CLassNotFoundException異常。否則将這個類生成一個類的定義,并将它加載到記憶體中,最後傳回這個類在記憶體中的Class執行個體對象。

2、為什麼使用雙親委托模型

JVM在判斷兩個class是否相同時,不僅要判斷兩個類名是否相同,還要判斷是否是同一個類加載器加載的。

避免重複加載,父類已經加載了,則子CLassLoader沒有必要再次加載。 考慮安全因素,假設自定義一個String類,除非改變JDK中CLassLoader的搜尋類的預設算法,否則使用者自定義的CLassLoader如法加載一個自己寫的String類,因為String類在啟動時就被引導類加載器Bootstrap CLassLoader加載了。

以上就是Android Java類加載器的面試題目,後續還會更新其餘面試題内容,大家可以關注一下我,及時知曉我更新的知識點,同時這份面試集錦的整理也花費了我很多時間,有需要的朋友可以幫忙轉發分享下,點個贊~

Android架構師之路很漫長,一起共勉吧!