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