更新時間:2020-06-15 11:30:57 來源:動力節點 瀏覽2499次
對于想從事java的朋友來說,都會遇到java面試題的問題,其中也包括了java后端面試題,動力節點java培訓機構的小編為大家整理了java后端面試題部分參考,希望對大家能夠有所幫助。
Synchronized實現內存共享,ThreadLocal為每個線程維護一個本地變量。
采用空間換時間,它用于線程間的數據隔離,為每一個使用該變量的線程提供一個副本,每個線程都可以獨立地改變自己的副本,而不會和其他線程的副本沖突。
ThreadLocal類中維護一個Map,用于存儲每一個線程的變量副本,Map中元素的鍵為線程對象,而值為對應線程的變量副本。
ThreadLocal在Spring中發揮著巨大的作用,在管理Request作用域中的Bean、事務管理、任務調度、AOP等模塊都出現了它的身影。
Spring中絕大部分Bean都可以聲明成Singleton作用域,采用ThreadLocal進行封裝,因此有狀態的Bean就能夠以singleton的方式在多線程中正常工作了。
Java虛擬機規范中將Java運行時數據分為六種。
(1)程序計數器:是一個數據結構,用于保存當前正常執行的程序的內存地址。Java虛擬機的多線程就是通過線程輪流切換并分配處理器時間來實現的,為了線程切換后能恢復到正確的位置,每條線程都需要一個獨立的程序計數器,互不影響,該區域為“線程私有”。
(2)Java虛擬機棧:線程私有的,與線程生命周期相同,用于存儲局部變量表,操作棧,方法返回值。局部變量表放著基本數據類型,還有對象的引用。
(3)本地方法棧:跟虛擬機棧很像,不過它是為虛擬機使用到的Native方法服務。
(4)Java堆:所有線程共享的一塊內存區域,對象實例幾乎都在這分配內存。
(5)方法區:各個線程共享的區域,儲存虛擬機加載的類信息,常量,靜態變量,編譯后的代碼。
(6)運行時常量池:代表運行時每個class文件中的常量表。包括幾種常量:編譯時的數字常量、方法或者域的引用。
(1)裝載:將Java二進制代碼導入jvm中,生成Class文件。
(2)連接:a)校驗:檢查載入Class文件數據的正確性 b)準備:給類的靜態變量分配存儲空間 c)解析:將符號引用轉成直接引用
(3)初始化:對類的靜態變量,靜態方法和靜態代碼塊執行初始化工作。
雙親委派模型:類加載器收到類加載請求,首先將請求委派給父類加載器完成
用戶自定義加載器->應用程序加載器->擴展類加載器->啟動類加載器。
(1)客戶端請求提交到DispatcherServlet
(2)由DispatcherServlet控制器查詢HandlerMapping,找到并分發到指定的Controller中。
(3)Controller調用業務邏輯處理后,返回ModelAndView
(4)DispatcherServlet查詢一個或多個ViewResoler視圖解析器,找到ModelAndView指定的視圖
(5)視圖負責將結果顯示到客戶端
(1)HashMap是非線程安全的,HashTable是線程安全的。
(2)HashMap的鍵和值都允許有null值存在,而HashTable則不行。
(3)因為線程安全的問題,HashMap效率比HashTable的要高。
(1)維護一個每個元素是一個鏈表的數組,而且鏈表中的每個節點是一個Entry[]鍵值對的數據結構。
(2)實現了數組+鏈表的特性,查找快,插入刪除也快。
(3)對于每個key,他對應的數組索引下標是 int i = hash(key.hashcode)&(len-1);
(4)每個新加入的節點放在鏈表首,然后該新加入的節點指向原鏈表首
以上就是動力節點java培訓機構的小編針對“java后端面試題部分參考”的內容進行的回答,希望對大家有所幫助,如有疑問,請在線咨詢,有專業老師隨時為你服務。
0基礎 0學費 15天面授
有基礎 直達就業
業余時間 高薪轉行
工作1~3年,加薪神器
工作3~5年,晉升架構
提交申請后,顧問老師會電話與您溝通安排學習