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