Thread類中的sleep()和對象的wait()有什么區(qū)別?
答:sleep()方法是線程類的靜態(tài)方法,調(diào)用此方法會讓當(dāng)前線程暫停執(zhí)行指定時間.將CPU時間片分
給其他線程,但是對象的鎖依然保持,休眠時間結(jié)束會自動回復(fù)到就緒狀態(tài).
wait()是Object類的方法,調(diào)用對象的wait()方法導(dǎo)致當(dāng)前線程放棄對象的鎖,線程暫停執(zhí)行,
進(jìn)入對象的等待池,只有調(diào)用對象的notify()方法或notifyAll()方法時,才能喚醒等待池中的
線程進(jìn)入等鎖池,如果線程重新獲得對象的鎖就可以進(jìn)入就緒狀態(tài)
當(dāng)一個線程進(jìn)入一個對象的synchronized方法A之后,其它線程是否可進(jìn)入此對象的synchronized方法B?
答:不能。其它線程只能訪問該對象的非同步方法,同步方法則不能進(jìn)入。
因?yàn)榉庆o態(tài)方法上的synchronized修飾符要求執(zhí)行方法時要獲得對象的鎖,如果已經(jīng)進(jìn)入A方法說
明對象鎖已經(jīng)被取走,那么試圖進(jìn)入B方法的線程就只能在等鎖池(注意不是等待池哦)中等待對象的鎖
說說synchronized關(guān)鍵字的用法?
答:synchronized關(guān)鍵字可以將對象或者方法標(biāo)記為同步,以實(shí)現(xiàn)對對象和方法的互斥訪問,可以用
synchronized(對象){…}定義同步代碼塊,或者在聲明方法時將synchronized作為方法的修飾符
Java如何實(shí)現(xiàn)序列化,有什么意義?
答:序列化就是一種用來處理對象流的機(jī)制,所謂對象流也就是將對象的內(nèi)容進(jìn)行流化??梢詫α骰?/p>
后的對象進(jìn)行讀寫操作,也可將流化后的對象傳輸于網(wǎng)絡(luò)之間。
序列化是為了解決對象流讀寫操作時可能引發(fā)的問題(如果不進(jìn)行序列化可能會存在數(shù)據(jù)亂序的問題)
要實(shí)現(xiàn)序列化,讓類實(shí)現(xiàn)Serializable接口.該接口是一個標(biāo)識性接口,標(biāo)注該類對象是可被序列
化的,然后使用一個輸出流來構(gòu)造一個對象輸出流并通過writeObject(Object)方法就可以將實(shí)現(xiàn)對象寫出
如果需要反序列化則可以用一個輸入流建立對象輸入流,然后通過readObject方法從流中讀取對
象。序列化除了能夠?qū)崿F(xiàn)對象的持久化之外,還能夠用于對象的深度克隆
線程的sleep()方法和yield()方法有什么區(qū)別?
答:sleep()方法給其他線程運(yùn)行機(jī)會時不考慮線程的優(yōu)先級,因此會給低優(yōu)先級的線程以運(yùn)行的機(jī)會;
yield()方法只會給相同優(yōu)先級或更高優(yōu)先級的線程以運(yùn)行的機(jī)會;
線程執(zhí)行sleep()方法后轉(zhuǎn)入阻塞(blocked)狀態(tài),而執(zhí)行yield()方法后轉(zhuǎn)入就緒(ready)狀態(tài);
sleep()方法聲明拋出InterruptedException,而yield()方法沒有聲明任何異常;
sleep()方法比yield()方法(跟操作系統(tǒng)CPU調(diào)度相關(guān))具有更好的可移植性。
說說你對同步和異步的理解.
答:如果系統(tǒng)中存在臨界資源(資源數(shù)量少于競爭資源的線程數(shù)量的資源),例如正在寫的數(shù)據(jù)以后可能被另一個線程讀到,或者正在讀的數(shù)據(jù)可能已經(jīng)被另一個線程寫過了,那么這些數(shù)據(jù)就必須進(jìn)行同步存?。〝?shù)據(jù)庫操作中的排他鎖就是最好的例子)
當(dāng)應(yīng)用程序在對象上調(diào)用了一個需要花費(fèi)很長時間來執(zhí)行的方法,并且不希望讓程序等待方法的返回時,就應(yīng)該使用異步編程,在很多情況下采用異步途徑往往更有效率。事實(shí)上,所謂的同步就是指阻塞式操作,而異步就是非阻塞式操作。
轉(zhuǎn)發(fā)(forward)和重定向(redirect)的區(qū)別?
答:forward是容器中控制權(quán)的轉(zhuǎn)向,是服務(wù)器請求資源,服務(wù)器直接訪問目標(biāo)地址的URL,把那個URL的響應(yīng)內(nèi)容讀取過來,然后把這些內(nèi)容再發(fā)給瀏覽器,瀏覽器根本不知道服務(wù)器發(fā)送的內(nèi)容是從哪兒來的,所以它的地址欄中還是原來的地址redirect就是服務(wù)器端根據(jù)邏輯,發(fā)送一個狀態(tài)碼,告訴瀏覽器重新去請求那個地址,因此從瀏覽器的地址欄中可以看到跳轉(zhuǎn)后的鏈接地址,很明顯redirect無法訪問到服務(wù)器保護(hù)起來資源,但是可以從一個網(wǎng)站redirect到其他網(wǎng)站。
說一說spring中依賴注入和AOP的實(shí)現(xiàn)機(jī)制。
答:實(shí)現(xiàn)依賴注入的方式包括:構(gòu)造器注入、設(shè)值注入和接口(回調(diào))注入。Spring中可以通過設(shè)值注入(setter方法注入)和構(gòu)造器注入實(shí)現(xiàn)IoC,推薦使用的方式為設(shè)值注入。
實(shí)現(xiàn)AOP的方式包括:編譯時AOP(需要特殊的編譯器)、運(yùn)行時AOP(代理模式)、加載時AOP(需要特殊的類加載器)。Spring中使用了運(yùn)行時的AOP,主要通過代理的方式對原來的代碼進(jìn)行增強(qiáng)實(shí)現(xiàn)。對于實(shí)現(xiàn)了接口的類,Spring通過Java的動態(tài)代理(請參考Proxy類和InvocationHandler
接口)來進(jìn)行增強(qiáng);對于沒有實(shí)現(xiàn)接口的類,Spring使用第三方字節(jié)碼生成工具CGLIB,通過繼承的方式對原有代碼進(jìn)行增強(qiáng)
什么是ORM?
答:對象關(guān)系映射(Object-RelationalMapping,簡稱ORM)是一種為了解決程序的面向?qū)ο竽P团c數(shù)據(jù)庫的關(guān)系模型互不匹配問題的技術(shù);簡單的說,ORM是通過使用描述對象和數(shù)據(jù)庫之間映射的元數(shù)據(jù)(在Java中可以用XML或者是注解),將程序中的對象自動持久化到關(guān)系數(shù)據(jù)庫中或者將關(guān)系數(shù)據(jù)庫表中的行轉(zhuǎn)換成Java對象,其本質(zhì)上就是將數(shù)據(jù)從一種形式轉(zhuǎn)換到另外一種形式。
以上就是長沙達(dá)內(nèi)教育Java培訓(xùn)機(jī)構(gòu)小編介紹的“高級Java工程師筆試題,這些題一定要會!”的內(nèi)容,希望對大家有幫助,如有疑問,請?jiān)诰€咨詢,有專業(yè)老師隨時為你服務(wù)。
相關(guān)推薦
最新最全java面試題及答案(初級到高級)
史上最全的中高級JAVA工程師面試題及答案匯總
Java高級開發(fā)工程師面試題
2019史上最全java面試題題庫大全800題
哪有資深java工程師面試題