俗話說的好,金三銀四,金九銀十,在四月這個(gè)招聘季,很多學(xué)員又迎來了求職季,為了能夠做好準(zhǔn)備迎接面試,小編下面為大家整理了一些Java面試過程中必問題目,希望能夠幫助到大家。
Java面試過程中必問題目:
在 Java 程序中怎么保證多線程的運(yùn)行安全?
方法一:使用安全類,比如 Java. util. concurrent 下地類。
方法二:使用自動(dòng)鎖 synchronized。
方法三:使用手動(dòng)鎖 Lock。
多線程中 synchronized 鎖升級(jí)的原理是什么?
synchronized 鎖升級(jí)原理:在鎖對(duì)象的對(duì)象頭里面有一個(gè) threadid 字段,在第一次訪問的時(shí)候 threadid 為空,jvm 讓其持有偏向鎖,并將 threadid 設(shè)置為其線程 id,再次進(jìn)入的時(shí)候會(huì)先判斷 threadid 是否與其線程 id 一致,如果一致則可以直接使用此對(duì)象,如果不一致,則升級(jí)偏向鎖為輕量級(jí)鎖,通過自旋循環(huán)一定次數(shù)來獲取鎖,執(zhí)行一定次數(shù)之后,如果還沒有正常獲取到要使用的對(duì)象,此時(shí)就會(huì)把鎖從輕量級(jí)升級(jí)為重量級(jí)鎖,此過程就構(gòu)成了 synchronized 鎖的升級(jí)。
鎖的升級(jí)的目的:鎖升級(jí)是為了減低了鎖帶來的性能消耗。在 Java 6 之后優(yōu)化 synchronized 的實(shí)現(xiàn)方式,使用了偏向鎖升級(jí)為輕量級(jí)鎖再升級(jí)到重量級(jí)鎖的方式,從而減低了鎖帶來的性能消耗。
synchronized 和 Lock 有什么區(qū)別?
synchronized 可以給類、方法、代碼塊加鎖;而 lock 只能給代碼塊加鎖。
synchronized 不需要手動(dòng)獲取鎖和釋放鎖,使用簡(jiǎn)單,發(fā)生異常會(huì)自動(dòng)釋放鎖,不會(huì)造成死鎖;而 lock 需要自己加鎖和釋放鎖,如果使用不當(dāng)沒有 unLock()去釋放鎖就會(huì)造成死鎖。
通過 Lock 可以知道有沒有成功獲取鎖,而 synchronized 卻無法辦到。
守護(hù)線程和用戶線程的區(qū)別?
守護(hù)線程和用戶線程簡(jiǎn)介:
用戶 (User) 線程:運(yùn)行在前臺(tái),執(zhí)行具體的任務(wù),如程序的主線程、連接網(wǎng)絡(luò)的子線程等都是用戶線程
守護(hù) (Daemon) 線程:運(yùn)行在后臺(tái),為其他前臺(tái)線程服務(wù).也可以說守護(hù)線程是 JVM 中非守護(hù)線程的 “傭人”。一旦所有用戶線程都結(jié)束運(yùn)行,守護(hù)線程會(huì)隨 JVM 一起結(jié)束工作.
main 函數(shù)所在的線程就是一個(gè)用戶線程啊,main 函數(shù)啟動(dòng)的同時(shí)在 JVM 內(nèi)部同時(shí)還啟動(dòng)了好多守護(hù)線程,比如垃圾回收線程。
那么守護(hù)線程和用戶線程有什么區(qū)別呢?
比較明顯的區(qū)別之一是用戶線程結(jié)束,JVM 退出,不管這個(gè)時(shí)候有沒有守護(hù)線程運(yùn)行。而守護(hù)線程不會(huì)影響 JVM 的退出。
注意事項(xiàng):
setDaemon(true)必須在start()方法前執(zhí)行,否則會(huì)拋出 IllegalThreadStateException 異常
在守護(hù)線程中產(chǎn)生的新線程也是守護(hù)線程
不是所有的任務(wù)都可以分配給守護(hù)線程來執(zhí)行,比如讀寫操作或者計(jì)算邏輯
守護(hù) (Daemon) 線程中不能依靠 finally 塊的內(nèi)容來確保執(zhí)行關(guān)閉或清理資源的邏輯。因?yàn)槲覀兩厦嬉舱f過了一旦所有用戶線程都結(jié)束運(yùn)行,守護(hù)線程會(huì)隨 JVM 一起結(jié)束工作,所以守護(hù) (Daemon) 線程中的 finally 語句塊可能無法被執(zhí)行。
面向?qū)ο蠛兔嫦蜻^程的區(qū)別
面向過程:面向過程性能比面向?qū)ο蟾摺?因?yàn)轭愓{(diào)用時(shí)需要實(shí)例化,開銷比較大,比較消耗資源,所以當(dāng)性能是最重要的考量因素的時(shí)候,比如單片機(jī)、嵌入式開發(fā)、Linux/Unix等一般采用面向過程開發(fā)。但是,面向過程沒有面向?qū)ο笠拙S護(hù)、易復(fù)用、易擴(kuò)展。
面向?qū)ο螅好嫦驅(qū)ο笠拙S護(hù)、易復(fù)用、易擴(kuò)展。 因?yàn)槊嫦驅(qū)ο笥蟹庋b、繼承、多態(tài)性的特性,所以可以設(shè)計(jì)出低耦合的系統(tǒng),使系統(tǒng)更加靈活、更加易于維護(hù)。但是,面向?qū)ο蟮男阅鼙让嫦蜻^程低。
以上是小編今天提供的Java面試過程中必問題目,不管是了解當(dāng)下招聘需求,還是準(zhǔn)備面試,都會(huì)給大家?guī)砗芏嗍斋@。更多面試技巧可以咨詢千鋒教育官網(wǎng)顧問,他們會(huì)幫助大家解決難題。