1. 程式人生 > >作為一個Java面試官,你最起碼要問下面的問題。

作為一個Java面試官,你最起碼要問下面的問題。

1:排序演算法,手寫,不管是氣泡排序,快速排序,還是二分排序,最起碼要給我寫一個排序演算法出來。(一個都寫不出來是有問題的)

2:併發可能產生的問題,資料丟失,不可重複讀,讀髒資料,。

主要是一致性問題.常見併發併發一致性問題包括:丟失的修改、不可重複讀、讀髒資料、幻影讀(幻影讀在一些資料中往往與不可重複讀歸為一類).

1):丟失修改指的是兩個事務T1和T2讀入同一資料並修改,T2提交的結果破壞了T1提交的結果,導致T1的修改被丟失,即丟失的修改.

2):不可重複讀是指事務T1讀取資料後,事務T2執行更新操作,使T1無法再現前一次讀取結果.具體地講,不可重複讀包括三種情況:
  事務T1讀取某一資料後,事務T2對其做了修改,當事務1再次讀該資料時,得到與前一次不同的值.例如,T1讀取B=100進行運算,T2讀取同一資料B,對其進行修改後將B=200寫回資料庫.T1為了對讀取值校對重讀B,B已為200,與第一次讀取值不一致.


  事務T1按一定條件從資料庫中讀取了某些資料記錄後,事務T2刪除了其中部分記錄,當T1再次按相同條件讀取資料時,發現某些記錄神密地消失了.
  事務T1按一定條件從資料庫中讀取某些資料記錄後,事務T2插入了一些記錄,當T1再次按相同條件讀取資料時,發現多了一些記錄.(這也叫做幻影讀) 3):讀"髒"資料是指事務T1修改某一資料,並將其寫回磁碟,事務T2讀取同一資料後,T1由於某種原因被撤消,這時T1已修改過的資料恢復原值,T2讀到的資料就與資料庫中的資料不一致,則T2讀到的資料就為"髒"資料,即不正確的資料.

  產生上述三類資料不一致性的主要原因是併發操作破壞了事務的隔離性.併發控制就是要用正確的方式排程併發操作,使一個使用者事務的執行不受其它事務的干擾,從而避免造成資料的不一致性.