Java面試題——隨機題(一),看看哪些你會哪些你不會
博客說明
文章所涉及的資料來自互聯網整理和個人總結,意在于個人學習和經驗匯總,如有什么地方侵權,請聯系本人洗掉,謝謝!
請說明一下EJB的幾種型別分別是什么?
會話(Session)Bean、物體(Entity)Bean 、訊息驅動的(Message Driven)Bean
會話Bean又可分為有狀態(Stateful)和無狀態(Stateless)兩種
物體Bean可分為Bean管理的持續性(BMP)和容器管理的持續性(CMP)兩種,
請說明一下鎖機制的作用是什么?并且簡述一下Hibernate的悲觀鎖和樂觀鎖機制是什么?
鎖機制的作用是保證共享資源可以進行排他性的訪問
悲觀鎖悲觀的認為在資料處理程序中極有可能存在修改資料的并發事務(包括本系統的其他事務或來自外部系統的事務),于是將處理的資料設定為鎖定狀態,
資料庫中主要是通過資料庫底層的鎖機制才能保證真正的資料訪問排他性,
缺點:并發量不高,效率低;
樂觀鎖對并發事務持樂觀態度(認為對資料的并發操作不會經常性的發生),通過更加寬松的鎖機制來解決由于悲觀鎖排他性的資料訪問對系統性能造成的嚴重影響,最常見的樂觀鎖是通過資料版本標識來實作的
redis為什么是單執行緒?
多執行緒不一定比單執行緒效率高,多執行緒的本質就是CPU通過輪換時間片執行不同的執行緒,看似多個執行緒一起執行,但是卻承擔執行緒背景關系切換的代價,
而對于Redis這樣的記憶體資料庫來說,沒有背景關系的切換的單執行緒效率是最高的,Redis用單個CPU系結一塊記憶體的資料,然后針對這塊記憶體的資料進行多次讀寫操作都是在一個CPU上完成的,
請你談談Java中執行緒如何實作,以及如何實作多執行緒,執行緒安全在Java中是如何實作的,執行緒的作業區是哪里
Java多執行緒有三種實作方式
(1)繼承Thread類,重寫run函式
(2)實作Runnable介面,重寫run函式
開啟執行緒:Thread t = new Thread(物件) //創建執行緒物件
t.start()
(3)實作Callable介面,重寫call函式
Callable是類似于Runnable的介面,實作Callable介面的類和實作Runnable的類都是可被其它執行緒執行的任務,
Callable和Runnable有幾點不同:
①Callable規定的方法是call(),而Runnable規定的方法是run()
②Callable的任務執行后可回傳值,而Runnable的任務是不能回傳值的
③call()方法可拋出例外,而run()方法是不能拋出例外的,
④運行Callable任務可拿到一個Future物件,Future表示異步計算的結果,它提供了檢查計算是否完成的方法,以等待計算的完成,并檢索計算的結果.通過Future物件可了解任務執行情況,可取消任務的執行,還可獲取任務執行的結果
執行緒不安全的原因:
在作業系統中,執行緒是不擁有資源的,行程是擁有資源的,而執行緒是由行程創建的,一個行程可以創建多個執行緒,這些執行緒共享著行程中的資源,所以,當執行緒一起并發運行時,同時對一個資料進行修改,就可能會造成資料的不一致性
執行緒安全的解決機制:
-
加鎖,
-
鎖能使其保護的代碼以串行的形式來訪問,當給一個復合操作加鎖后,能使其成為原子操作,一種錯誤的思想是只要對寫資料的方法加鎖,其實這是錯的,對資料進行操作的所有方法都需加鎖,不管是讀還是寫,
-
加鎖時需要考慮性能問題,不能總是一味地給整個方法加鎖synchronized就了事了,應該將方法中不影響共享狀態且執行時間比較長的代碼分離出去,
-
加鎖的含義不僅僅局限于互斥,還包括可見性,為了確保所有執行緒都能看見最新值,讀操作和寫操作必須使用同樣的鎖物件,
-
-
不共享狀態
-
無狀態物件: 無狀態物件一定是執行緒安全的,因為不會影響到其他執行緒,
-
執行緒關閉: 僅在單執行緒環境下使用,
-
-
不可變物件
可以使用final修飾的物件保證執行緒安全,由于final修飾的參考型變數(除String外)不可變是指參考不可變,但其指向的物件是可變的,所以此類必須安全發布,也即不能對外提供可以修改final物件的介面,
執行緒的作業區
Java記憶體模型分為主記憶體,和作業記憶體,主記憶體是所有的執行緒所共享的,作業記憶體是每個執行緒自己有一個,不是共享的,
每條執行緒還有自己的作業記憶體,執行緒的作業記憶體中保存了被該執行緒使用到的變數的主記憶體副本拷貝,執行緒對變數的所有操作(讀取、賦值),都必須在作業記憶體中進行,而不能直接讀寫主記憶體中的變數,不同執行緒之間也無法直接訪問對方作業記憶體中的變數,執行緒間變數值的傳遞均需要通過主記憶體來完成
感謝
牛客網
萬能的網路
以及勤勞的自己
關注公眾號: 歸子莫,獲取更多的資料,還有更長的學習計劃
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/144238.html
標籤:Java
