A. 載波偵聽多路訪問/沖突檢測的工作原理是什麼
任何站點要向公共介質發送信息時,首先要偵聽介質上是否有其他站點正在傳送信息,如果通信介質上無載波,即沒有被佔用,則可以利用通信介質進行傳送;
如果已監聽到介質上有載波,即有其它站點正在傳送信息,則必須等待介質平靜之後才能進行傳送的處理,這樣就會使信道上的沖突大大減少。
按偵聽介質的規則可以分為非堅持CSMA、以概率1—堅持CSMA、概率P—堅持CSMA。在CSMA的基礎上可作進一步的改進,就是當站點開始發送之後,仍需繼續偵聽信道一段時間,當檢測到沖突就馬上迅速取消沖突幀的傳送。
(1)資料庫訪問沖突概率怎麼判斷擴展閱讀:
載波偵聽的功能
為了盡量減少數據的傳輸碰撞和重試發送。乙太網中使用了CSMA/CD(載波監聽多路訪問/沖突檢測)工作機制,以防止各站點無序地爭用信道。
CSMA/CD的檢測方式是通過電纜中電壓的變化來測得,當數據傳輸發生碰撞時,電纜中的電壓就會隨著發生變化。載波偵聽的作用就是在發送數據之前,乙太網會「偵聽」線纜,判斷是否已經有其他數據傳輸。
載波偵聽的用處表現在:假設你有多部電話機掛接到同一根電話線上。如果你拿起其中的一個電話話筒准備打電話時,聽到其他人在談話,這時你必須等待,直到那個人通話完畢。
B. 與資料庫沖突
這個錯誤我遇到過。
你在用vs調試程序的時候不能同時在sql2005中打開該資料庫,你可以用vs2005直接打開。
在SQL2005中建好資料庫後就把它關了。
C. 簡述載波監聽多路訪問/沖突檢測(CSMA/CD)的工作原理。
在CSMA中由於信道傳播時延的存在即使匯流排上兩個站點沒有監聽到載波信而發送幀時,仍可能會發生沖突。
由於CSMA演算法沒有沖突檢測功能,即使沖突已發生,仍然要將已破壞的幀發送完,使匯流排的利用率降低。一種CSMA的改進方案是使發送站點在傳輸過程中仍繼續監聽媒體,以檢測是否存在沖突。
如果發生沖突,信道上可以檢測到超過發送站點本身發送的載波信號的幅度,由此判斷出沖突的存在。一旦檢測到沖突,就立即停止發送,並向匯流排上發一串阻塞信號,用以通知匯流排上其它各有關站點。
(3)資料庫訪問沖突概率怎麼判斷擴展閱讀:
非堅持演算法,演算法規則為:
假如媒本是空閑的,則可以立即發送。假如媒體是忙的,則等待一個由概率分布決定的隨機重發延遲後,再重復前一步驟。採用隨機的重發延遲時間可以減少沖突發生的可能性。
非堅持演算法的缺點是:即使有幾個著眼點為都有數據要發送,但由於大家都在延遲等待過程中,致使媒體仍可能處於空閑狀態,使用率降低。
堅持演算法,演算法規則:
假如媒體空閑的,則可以立即發送。假如媒體是忙的,則繼續監聽,直至檢測到媒體是空閑,立即發送。假如有沖突(在一段時間內未收到肯定的回復),則等待一隨機量的時間,重復步驟。
這種演算法的優點是:只要媒體空閑,站點就立即可發送,避免了媒體利用率的損失;其缺點是:假若有兩個或兩個以上的站點有數據要發送,沖突就不可避免。
D. cakephp2.1向資料庫插入數據時,如何判定主鍵沖突
我記得cakephp所有表的主鍵都是id吧,你插入時,資料庫id會自動加一;所以應該不會沖突吧!
E. SQL多用戶訪問資料庫如何解決的沖突
sql多用戶訪問資料庫其實就是事務並發,會引起如下問題:
1、臟讀:一個事務讀取到了另外一個事務沒有提交的數據
事務1:更新一條數據
事務2:讀取事務1更新的記錄
事務1:調用commit進行提交
此時事務2讀取到的數據是保存在資料庫內存中的數據,稱為臟讀。
讀到的數據為臟數據
詳細解釋:
臟讀就是指:當一個事務正在訪問數據,並且對數據進行了修改,而這種修改還沒有提交到資料庫中,這時,
另外一個事務也訪問這個數據,然後使用了這個數據。因為這個數據是還沒有提交的數據,那麼另外一個
事務讀到的這個數據是臟數據,依據臟數據所做的操作可能是不正確的。
2、不可重復讀:在同一事務中,兩次讀取同一數據,得到內容不同
事務1:查詢一條記錄
事務2:更新事務1查詢的記錄
事務2:調用commit進行提交
事務1:再次查詢上次的記錄
此時事務1對同一數據查詢了兩次,可得到的內容不同,稱為不可重復讀。
3、幻讀:同一事務中,用同樣的操作讀取兩次,得到的記錄數不相同
事務1:查詢表中所有記錄
事務2:插入一條記錄
事務2:調用commit進行提交
事務1:再次查詢表中所有記錄
此時事務1兩次查詢到的記錄是不一樣的,稱為幻讀
詳細解釋:
幻讀是指當事務不是獨立執行時發生的一種現象,例如第一個事務對一個表中的數據進行了修改,
這種修改涉及到表中的全部數據行。同時,第二個事務也修改這個表中的數據,這種修改是向表
中插入一行新數據。那麼,以後就會發生操作第一個事務的用戶發現表中還有沒有修改的數據行,
就好象發生了幻覺一樣。
處理以上隔離級別的問題,採用如下方是:
事務隔離五種級別:
TRANSACTION_NONE 不使用事務。
TRANSACTION_READ_UNCOMMITTED 允許臟讀。
TRANSACTION_READ_COMMITTED 防止臟讀,最常用的隔離級別,並且是大多數資料庫的默認隔離級別
TRANSACTION_REPEATABLE_READ 可以防止臟讀和不可重復讀,
TRANSACTION_SERIALIZABLE 可以防止臟讀,不可重復讀取和幻讀,(事務串列化)會降低資料庫的效率
以上的五個事務隔離級別都是在Connection介面中定義的靜態常量,
使用setTransactionIsolation(int level) 方法可以設置事務隔離級別。
如:con.setTransactionIsolation(Connection.REPEATABLE_READ);
注意:事務的隔離級別受到資料庫的限制,不同的資料庫支持的的隔離級別不一定相同
1 臟讀:修改時加排他鎖,直到事務提交後才釋放,讀取時加共享鎖,讀取完釋放事務1讀取數據時加上共享鎖後(這 樣在事務1讀取數據的過程中,其他事務就不會修改該數據),不允許任何事物操作該數據,只能讀取,之後1如果有更新操作,那麼會轉換為排他鎖,其他事務更 無權參與進來讀寫,這樣就防止了臟讀問題。
但是當事務1讀取數據過程中,有可能其他事務也讀取了該數據,讀取完畢後共享鎖釋放,此時事務1修改數據,修改 完畢提交事務,其他事務再次讀取數據時候發現數據不一致,就會出現不可重復讀問題,所以這樣不能夠避免不可重復讀問題。
2 不可重復讀:讀取數據時加共享鎖,寫數據時加排他鎖,都是事務提交才釋放鎖。讀取時候不允許其他事物修改該數據,不管數據在事務過程中讀取多少次,數據都是一致的,避免了不可重復讀問題
3 幻讀問題:採用的是范圍鎖RangeS RangeS_S模式,鎖定檢索范圍為只讀,這樣就避免了幻影讀問題。
F. C++通過ADO連接資料庫出現出現訪問沖突,請問具體什麼原因
地址分配錯誤了吧
分配的過大過小或者內存溢出
G. 資料庫考試題如何找沖突可串列化等價的串列化方案
這個是個可串列化調度,可以根據對資料庫元素XYZ的 沖突訪問畫優先圖來進行判斷,如果沒有環,那麼就是可串列化的
第二個問 就是把串列化的調度順序寫出來,串列化調度為:
T3(R(Y))T3(W(Y))T3(R(Z))T4(R(Z))T4(W(Z))T1(R(X))T1(W(X))T1(W(Y))T2(R(X))T2(W(X))T2(R(Y))
根據這個可以基於沖突規則進行置換的,因此有
T3(R(Y))T3(W(Y))T3(R(Z))T1(R(X))T1(W(X))T1(W(Y))T2(R(X))T2(W(X))T2(R(Y))T4(R(Z))T4(W(Z))
T3(R(Y))T3(W(Y))T3(R(Z))T1(R(X))T1(W(X))T1(W(Y))T4(R(Z))T4(W(Z))T2(R(X))T2(W(X))T2(R(Y))
H. 資料庫中這個怎麼判斷沖突等價
不是沖突等價的。
沖突等價的含義是「不同事務的一對操作,有些是沖突的,有些是不沖突的。不沖突操作的次序可以互相調換,不致影響執行的結果。凡是通過調換S中不沖突操作所得的新調度,稱為S的沖突等價調度」(這段我從網上隨便找的,但是意思差不多)。
然後,這個事務調度裡面,我們關心Q的寫操作Write(Q),可以看到在S1裡面的順序是T2,T1,T3。而寫操作是互相沖突的,所以如果S2和S1沖突等價,那S2的Write(Q)也應該是T2,T1,T3這個順序。但實際上S2中Write(Q)的順序是T1,T2,T3。所以,這兩不是沖突等價。
I. ado訪問oracle資料庫,出現錯誤0xc0000005,提示訪問沖突。
這種錯誤一般是指訪問了不屬於自己的內存空間。出現這種錯誤有幾種原因:
1、給一個數組分配了比較小的內存空間,然後又給該數組賦了一個比較大的值,舉例說明:
char buf[10];
buf = "C++「讀取位置 0x****** 時發生訪問沖突」的可能原因C++「讀取位置 0x****** 時發生訪問沖突」的可能原因";
這樣才訪問buf的時候,就會出現錯誤
解決方法:給數組分配更大一些的內存空間,如char buf[1000];
2、句柄或指針在使用前被釋放
解決方法:檢查代碼配合調試,揪出野指針
分析:
內存沖突問題經常發生於用malloc等進行內存分配後指針的使用。 C和C++中的指針,其優勢很明顯,靈活,方便,使用起來簡單;劣勢當然也很明顯,就是容易導致系統崩潰,指針操作不當,或沒有及時釋放,或沒有判斷指針是否越界,或沒有及時置空,這些都很容易導致系統崩潰,所以使用指針一定要考慮嚴謹