java后端面試題部分參考

java后端面試題部分參考

長(zhǎng)沙中公優(yōu)就業(yè)      2022-05-03 09:56:01     72

java后端面試題部分參考,對(duì)于想從事java的朋友來(lái)說(shuō),都會(huì)遇到j(luò)ava面試題的問(wèn)題,其中也包括了java后端面試題,長(zhǎng)沙中公優(yōu)就業(yè)java培訓(xùn)機(jī)構(gòu)的小編為大家整

課程價(jià)格 請(qǐng)咨詢(xún)

上課時(shí)段: 授課校區(qū):

詳細(xì)介紹

對(duì)于想從事java的朋友來(lái)說(shuō),都會(huì)遇到j(luò)ava面試題的問(wèn)題,其中也包括了java后端面試題,長(zhǎng)沙中公優(yōu)就業(yè)java培訓(xùn)機(jī)構(gòu)的小編為大家整理了java后端面試題部分參考,希望對(duì)大家能夠有所幫助。

1、ThreadLocal(線程變量副本)

Synchronized實(shí)現(xiàn)內(nèi)存共享,ThreadLocal為每個(gè)線程維護(hù)一個(gè)本地變量。

采用空間換時(shí)間,它用于線程間的數(shù)據(jù)隔離,為每一個(gè)使用該變量的線程提供一個(gè)副本,每個(gè)線程都可以獨(dú)立地改變自己的副本,而不會(huì)和其他線程的副本沖突。

ThreadLocal類(lèi)中維護(hù)一個(gè)Map,用于存儲(chǔ)每一個(gè)線程的變量副本,Map中元素的鍵為線程對(duì)象,而值為對(duì)應(yīng)線程的變量副本。

ThreadLocal在Spring中發(fā)揮著巨大的作用,在管理Request作用域中的Bean、事務(wù)管理、任務(wù)調(diào)度、AOP等模塊都出現(xiàn)了它的身影。

Spring中絕大部分Bean都可以聲明成Singleton作用域,采用ThreadLocal進(jìn)行封裝,因此有狀態(tài)的Bean就能夠以singleton的方式在多線程中正常工作了。

2、Java內(nèi)存模型:

Java虛擬機(jī)規(guī)范中將Java運(yùn)行時(shí)數(shù)據(jù)分為六種。

(1)程序計(jì)數(shù)器:是一個(gè)數(shù)據(jù)結(jié)構(gòu),用于保存當(dāng)前正常執(zhí)行的程序的內(nèi)存地址。Java虛擬機(jī)的多線程就是通過(guò)線程輪流切換并分配處理器時(shí)間來(lái)實(shí)現(xiàn)的,為了線程切換后能恢復(fù)到正確的位置,每條線程都需要一個(gè)獨(dú)立的程序計(jì)數(shù)器,互不影響,該區(qū)域?yàn)?ldquo;線程私有”。

(2)Java虛擬機(jī)棧:線程私有的,與線程生命周期相同,用于存儲(chǔ)局部變量表,操作棧,方法返回值。局部變量表放著基本數(shù)據(jù)類(lèi)型,還有對(duì)象的引用。

(3)本地方法棧:跟虛擬機(jī)棧很像,不過(guò)它是為虛擬機(jī)使用到的Native方法服務(wù)。

(4)Java堆:所有線程共享的一塊內(nèi)存區(qū)域,對(duì)象實(shí)例幾乎都在這分配內(nèi)存。

(5)方法區(qū):各個(gè)線程共享的區(qū)域,儲(chǔ)存虛擬機(jī)加載的類(lèi)信息,常量,靜態(tài)變量,編譯后的代碼。

(6)運(yùn)行時(shí)常量池:代表運(yùn)行時(shí)每個(gè)class文件中的常量表。包括幾種常量:編譯時(shí)的數(shù)字常量、方法或者域的引用。

3、類(lèi)加載器工作機(jī)制:

(1)裝載:將Java二進(jìn)制代碼導(dǎo)入jvm中,生成Class文件。

(2)連接:a)校驗(yàn):檢查載入Class文件數(shù)據(jù)的正確性 b)準(zhǔn)備:給類(lèi)的靜態(tài)變量分配存儲(chǔ)空間 c)解析:將符號(hào)引用轉(zhuǎn)成直接引用

(3)初始化:對(duì)類(lèi)的靜態(tài)變量,靜態(tài)方法和靜態(tài)代碼塊執(zhí)行初始化工作。

雙親委派模型:類(lèi)加載器收到類(lèi)加載請(qǐng)求,首先將請(qǐng)求委派給父類(lèi)加載器完成

用戶(hù)自定義加載器->應(yīng)用程序加載器->擴(kuò)展類(lèi)加載器->啟動(dòng)類(lèi)加載器。

4、SpringMVC運(yùn)行原理

(1)客戶(hù)端請(qǐng)求提交到DispatcherServlet

(2)由DispatcherServlet控制器查詢(xún)HandlerMapping,找到并分發(fā)到指定的Controller中。

(3)Controller調(diào)用業(yè)務(wù)邏輯處理后,返回ModelAndView

(4)DispatcherServlet查詢(xún)一個(gè)或多個(gè)ViewResoler視圖解析器,找到ModelAndView指定的視圖

(5)視圖負(fù)責(zé)將結(jié)果顯示到客戶(hù)端

5、HashMap與HashTable的區(qū)別

(1)HashMap是非線程安全的,HashTable是線程安全的。

(2)HashMap的鍵和值都允許有null值存在,而HashTable則不行。

(3)因?yàn)榫€程安全的問(wèn)題,HashMap效率比HashTable的要高。

6、HashMap的實(shí)現(xiàn)機(jī)制:

(1)維護(hù)一個(gè)每個(gè)元素是一個(gè)鏈表的數(shù)組,而且鏈表中的每個(gè)節(jié)點(diǎn)是一個(gè)Entry[]鍵值對(duì)的數(shù)據(jù)結(jié)構(gòu)。

(2)實(shí)現(xiàn)了數(shù)組+鏈表的特性,查找快,插入刪除也快。

(3)對(duì)于每個(gè)key,他對(duì)應(yīng)的數(shù)組索引下標(biāo)是 int i = hash(key.hashcode)&(len-1);

(4)每個(gè)新加入的節(jié)點(diǎn)放在鏈表首,然后該新加入的節(jié)點(diǎn)指向原鏈表首

以上就是長(zhǎng)沙中公優(yōu)就業(yè)java培訓(xùn)機(jī)構(gòu)的小編針對(duì)“java后端面試題部分參考”的內(nèi)容進(jìn)行的回答,希望對(duì)大家有所幫助,如有疑問(wèn),請(qǐng)?jiān)诰€咨詢(xún),有專(zhuān)業(yè)老師隨時(shí)為你服務(wù)。

Java面試題

培訓(xùn)啦提醒您:交易時(shí)請(qǐng)核實(shí)對(duì)方資質(zhì),對(duì)于過(guò)大宣傳或承諾需謹(jǐn)慎!任何要求預(yù)付定金、匯款等方式均存在風(fēng)險(xiǎn),謹(jǐn)防上當(dāng)。