1、Java中堆和棧有什么區(qū)別?
JVM中堆和棧屬于不同的內(nèi)存區(qū)域,使用目的也不同。棧常用于保存方法幀和局部變量,而對象總是在堆上分配。棧通常都比堆小,也不會在多個線程之間共享,而堆被整個JVM的所有線程共享。
2、解釋一下hibernate的延遲加載機制。
最直觀的認識:在hibernate方法中,直接涉及到延遲加載的方法有g(shù)et和load,使用get時,不會延遲加載,load則反之。另外,在many-to-one等關(guān)系配置中,我們也可以通過lazy屬性設(shè)置是否延遲加載。
3、wait()和sleep()的區(qū)別
sleep來自Thread類,和wait來自O(shè)bject類
調(diào)用sleep()方法的過程中,線程不會釋放對象鎖。而調(diào)用wait方法線程會釋放對象鎖
sleep睡眠后不出讓系統(tǒng)資源,wait讓出系統(tǒng)資源其他線程可以占用CPU
sleep(milliseconds)需要指定一個睡眠時間,時間一到會自動喚醒
4、JAVA多態(tài)的實現(xiàn)原理
a.抽象的來講,多態(tài)的意思就是同一消息可以根據(jù)發(fā)送對象的不同而采用多種不同的行為方式。(發(fā)送消息就是函數(shù)調(diào)用)
b.實現(xiàn)的原理是動態(tài)綁定,程序調(diào)用的方法在運行期才動態(tài)綁定,追溯源碼可以發(fā)現(xiàn),JVM通過參數(shù)的自動轉(zhuǎn)型來找到合適的辦法
5、CAS(Compare And Swap)無鎖算法:
CAS是樂觀鎖技術(shù),當(dāng)多個線程嘗試使用CAS同時更新同一個變量時,只有其中一個線程能更新變量的值,而其它線程都失敗,失敗的線程并不會被掛起,而是被告知這次競爭中失敗,并可以再次嘗試。CAS有3個操作數(shù),內(nèi)存值V,舊的預(yù)期值A(chǔ),要修改的新值B。當(dāng)且僅當(dāng)預(yù)期值A(chǔ)和內(nèi)存值V相同時,將內(nèi)存值V修改為B,否則什么都不做。
6、你所知道的集合類都有哪些?主要方法?
最常用的集合類是List和Map。List的具體實現(xiàn)包括ArrayList和Vector,它們是可變大小的列表,比較適合構(gòu)建、存儲和操作任何類型對象的元素列表。List適用于按數(shù)值索引訪問元素的情形。Map提供了一個更通用的元素存儲方法。Map集合類用于存儲元素對(稱作“鍵”和“值”),其中每個鍵映射到一個值。
7、描述一下JVM加載class文件的原理機制?
JVM中類的裝載是由ClassLoader和它的子類來實現(xiàn)的,Java ClassLoader是一個重要的Java運行時系統(tǒng)組件。它負責(zé)在運行時查找和裝入類文件的類
8、servlet的生命周期
web容器加載servlet,生命周期開始。通過調(diào)用servlet的init()方法進行servlet的初始化。通過調(diào)用service()方法實現(xiàn),根據(jù)請求的不同調(diào)用不同的do***()方法。結(jié)束服務(wù),web容器調(diào)用servlet的destroy()方法。
9、類加載機制:
類的加載指的是將類的.class文件中的二進制數(shù)據(jù)讀入到內(nèi)存中,將其放在運行時數(shù)據(jù)區(qū)的方法去內(nèi),然后在
堆區(qū)創(chuàng)建一個java.lang.Class對象,用來封裝在方法區(qū)內(nèi)的數(shù)據(jù)結(jié)構(gòu)。類的加載最終是在堆區(qū)內(nèi)的Class對象,Class對象封裝了類在方法區(qū)內(nèi)的數(shù)據(jù)結(jié)構(gòu),并且向Java程序員提供了訪問方法區(qū)內(nèi)的數(shù)據(jù)結(jié)構(gòu)的接口。
以上就是北大青鳥長沙麓谷校區(qū)java培訓(xùn)機構(gòu)的小編針對“亞信科技Java筆試題,應(yīng)屆實習(xí)生參考”的內(nèi)容進行的回答,希望對大家有所幫助,如有疑問,請在線咨詢,有專業(yè)老師隨時為你服務(wù)。
Java筆試題