JVM的內(nèi)存結(jié)構(gòu)
根據(jù) JVM 規(guī)范,JVM 內(nèi)存共分為虛擬機(jī)棧满哪、堆婿斥、方法區(qū)劝篷、程序計(jì)數(shù)器、本地方法棧五個(gè)部分民宿。
1娇妓、Java虛擬機(jī)棧:
線程私有;每個(gè)方法在執(zhí)行的時(shí)候會(huì)創(chuàng)建一個(gè)棧幀活鹰,存儲(chǔ)了局部變量表哈恰,操作數(shù)棧,動(dòng)態(tài)連接志群,方法返回地址等着绷;每個(gè)方法從調(diào)用到執(zhí)行完畢,對(duì)應(yīng)一個(gè)棧幀在虛擬機(jī)棧中的入棧和出棧锌云。
2荠医、堆:
線程共享;被所有線程共享的一塊內(nèi)存區(qū)域桑涎,在虛擬機(jī)啟動(dòng)時(shí)創(chuàng)建彬向,用于存放對(duì)象實(shí)例。
3攻冷、方法區(qū):
線程共享娃胆;被所有線程共享的一塊內(nèi)存區(qū)域;用于存儲(chǔ)已被虛擬機(jī)加載的類信息等曼,常量里烦,靜態(tài)變量等。
4禁谦、程序計(jì)數(shù)器:
線程私有胁黑;是當(dāng)前線程所執(zhí)行的字節(jié)碼的行號(hào)指示器,每條線程都要有一個(gè)獨(dú)立的程序計(jì)數(shù)器州泊,這類內(nèi)存也稱為“線程私有”的內(nèi)存别厘。
5、本地方法棧:
線程私有拥诡;主要為虛擬機(jī)使用到的Native方法服務(wù)触趴。
大體回答如上,類似文章請(qǐng)移駕:
強(qiáng)引用渴肉,軟引用和弱引用的區(qū)別
強(qiáng)引用:
只有這個(gè)引用被釋放之后冗懦,對(duì)象才會(huì)被釋放掉,只要引用存在仇祭,垃圾回收器永遠(yuǎn)不會(huì)回收披蕉,這是最常見的New出來的對(duì)象。
軟引用:
內(nèi)存溢出之前通過代碼回收的引用。軟引用主要用戶實(shí)現(xiàn)類似緩存的功能没讲,在內(nèi)存足夠的情況下直接通過軟引用取值眯娱,無需從繁忙的真實(shí)來源查詢數(shù)據(jù),提升速度爬凑;當(dāng)內(nèi)存不足時(shí)徙缴,自動(dòng)刪除這部分緩存數(shù)據(jù),從真正的來源查詢這些數(shù)據(jù)嘁信。
弱引用:
第二次垃圾回收時(shí)回收的引用于样,短時(shí)間內(nèi)通過弱引用取對(duì)應(yīng)的數(shù)據(jù),可以取到潘靖,當(dāng)執(zhí)行過第二次垃圾回收時(shí)穿剖,將返回null。弱引用主要用于監(jiān)控對(duì)象是否已經(jīng)被垃圾回收器標(biāo)記為即將回收的垃圾卦溢,可以通過弱引用的isEnQueued方法返回對(duì)象是否被垃圾回收器標(biāo)記糊余。
大體回答如上,類似文章請(qǐng)移駕:
數(shù)組在內(nèi)存中如何分配
1单寂、簡(jiǎn)單的值類型的數(shù)組啄刹,每個(gè)數(shù)組成員是一個(gè)引用(指針),引用到棧上的空間(因?yàn)橹殿愋妥兞康膬?nèi)存分配在棧上)
2凄贩、引用類型,類類型的數(shù)組袱讹,每個(gè)數(shù)組成員仍是一個(gè)引用(指針)疲扎,引用到堆上的空間(因?yàn)轭惖膶?shí)例的內(nèi)存分配在堆上)
用過哪些設(shè)計(jì)模式,手寫一個(gè)(除單例)
設(shè)計(jì)模式早有總結(jié)捷雕,看這里:23種設(shè)計(jì)模式完整總結(jié)
springmvc的核心是什么椒丧,請(qǐng)求的流程是怎么處理的,控制反轉(zhuǎn)怎么實(shí)現(xiàn)的
核心:
控制反轉(zhuǎn)和面向切面
請(qǐng)求處理流程:
1救巷、首先用戶發(fā)送請(qǐng)求到前端控制器壶熏,前端控制器根據(jù)請(qǐng)求信息(如URL)來決定選擇哪一個(gè)頁(yè)面控制器進(jìn)行處理并把請(qǐng)求委托給它,即以前的控制器的控制邏輯部分浦译;
2棒假、頁(yè)面控制器接收到請(qǐng)求后,進(jìn)行功能處理精盅,首先需要收集和綁定請(qǐng)求參數(shù)到一個(gè)對(duì)象帽哑,并進(jìn)行驗(yàn)證,然后將命令對(duì)象委托給業(yè)務(wù)對(duì)象進(jìn)行處理叹俏;處理完畢后返回一個(gè)ModelAndView(模型數(shù)據(jù)和邏輯視圖名)妻枕;
3、前端控制器收回控制權(quán),然后根據(jù)返回的邏輯視圖名屡谐,選擇相應(yīng)的視圖進(jìn)行渲染述么,并把模型數(shù)據(jù)傳入以便視圖渲染;
4愕掏、前端控制器再次收回控制權(quán)度秘,將響應(yīng)返回給用戶。
控制反轉(zhuǎn)如何實(shí)現(xiàn):
我們每次使用spring框架都要配置xml文件亭珍,這個(gè)xml配置了bean的id和class敷钾。
spring中默認(rèn)的bean為單實(shí)例模式,通過bean的class引用反射機(jī)制可以創(chuàng)建這個(gè)實(shí)例肄梨。
因此阻荒,spring框架通過反射替我們創(chuàng)建好了實(shí)例并且替我們維護(hù)他們。
A需要引用B類众羡,spring框架就會(huì)通過xml把B實(shí)例的引用傳給了A的成員變量侨赡。
大體回答如上,類似文章請(qǐng)移駕:
spring里面的aop的原理是什么
這個(gè)有介紹粱侣,看這里:Spring的IOC原理
mybatis如何處理結(jié)果集
MyBatis的結(jié)果集是通過反射來實(shí)現(xiàn)的羊壹。并不是通過get/set方法。在實(shí)體類中無論是否定義get/set()方法齐婴,都是可以接收到的油猫。
如果面試只是考你這個(gè)點(diǎn)的話就恭喜了。如果繼續(xù)深問流程柠偶,那就需要自己找一些源碼來閱讀了情妖。
java的多態(tài)表現(xiàn)在哪里
主要有兩種表現(xiàn)形式:重載和重寫
重載:
是發(fā)生在同一類中,具有相同的方法名诱担,主要是看參數(shù)的個(gè)數(shù)毡证,類型,順序不同實(shí)現(xiàn)方法的重載的蔫仙,返回值的類型可以不同料睛。
重寫:
是發(fā)生在兩個(gè)類中(父類和子類),具有相同的方法名摇邦,主要看方法中參數(shù)恤煞,個(gè)數(shù),類型必須相同施籍,返回值的類型必須相同阱州。