參考:
參考:四種執行緒鎖:
互斥鎖:互斥鎖用於控制多個執行緒對他們之間共享資源互斥訪問的乙個訊號量。
條件鎖:條件鎖就是所謂的條件變數,某乙個執行緒因為某個條件為滿足時可以使用條件變數使改程式處於阻塞狀態。
自旋鎖:如果乙個執行緒想要獲取乙個被使用的自旋鎖,那麼它會一致占用cpu請求這個自旋鎖使得cpu不能去做其他的事情,直到獲取這個鎖為止。
讀寫鎖:允許在資料庫上同時執行多個「讀」操作,但是某一時刻只能在資料庫上有乙個「寫」操作來更新資料。
2.1 執行緒之間是如何通訊的?
乙個是使用全域性變數進行通訊,還有就是可以使用自定義的訊息機制傳遞資訊。執行緒間通訊主要是為了同步。
2.2 執行緒如何保證同步?
參考:互斥鎖:採用互斥物件機制。 只有擁有互斥物件的執行緒才有訪問公共資源的許可權,因為互斥物件只有乙個,所以能保證公共資源不會同時被多個執行緒訪問。互斥不僅能實現同一應用程式的公共資源安全共享,還能實現不同應用程式的公共資源安全共享。
臨界區:臨界區(critical section)是一段獨佔對某些共享資源訪問的**,在任意時刻只允許乙個執行緒對共享資源進行訪問。如果有多個執行緒試圖同時訪問臨界區,那麼在有乙個執行緒進入後其他所有試圖訪問此臨界區的執行緒將被掛起,並一直持續到進入臨界區的執行緒離開。
事件:事件機制,則允許乙個執行緒在處理完乙個任務後,主動喚醒另外乙個執行緒執行任務。
訊號量:當需要乙個計數器來限制可以使用某共享資源的執行緒數目時,可以使用「訊號量」物件。
參考:併發控制的主要採用的技術手段:樂觀鎖、悲觀鎖
3.1 從程式設計師角度的鎖分類
悲觀鎖:
對資料被外界(包括本系統當前的其他事務,以及來自外部系統的事務處理)修改持保守態度,因此在整個資料處理過程中,將資料處於鎖定狀態。
悲觀鎖的實現,往往依靠資料庫提供的鎖機制
樂觀鎖:
大多是基於資料版本( version )記錄機制實現。--cas實現
3.2 資料庫角度鎖的分類方式
獨佔鎖(exclusive lock):獨佔鎖鎖定的資源只允許進行鎖定操作的程式使用,其它任何對它的操作均不會被接受。執行資料更新命令,即insert、 update 或delete 命令時,sql server 會自動使用獨佔鎖。但當物件上有其它鎖存在時,無法對其加獨佔鎖。獨佔鎖一直到事務結束才能被釋放。
共享鎖(shared lock):共享鎖鎖定的資源可以被其它使用者讀取,但其它使用者不能修改它。在select 命令執行時,sql server 通常會對物件進行共享鎖鎖定。通常加共享鎖的資料頁被讀取完畢後,共享鎖就會立即被釋放。
更新鎖(update lock): 更新鎖是為了防止死鎖而設立的。當sql server 準備更新資料時,它首先對資料物件作更新鎖鎖定,這樣資料將不能被修改,但可以讀取。等到sql server 確定要進行更新資料操作時,它會自動將更新鎖換為獨佔鎖。但當物件上有其它鎖存在時,無法對其作更新鎖鎖定。
3.3 關於行級鎖、表級鎖、頁級鎖
可以這樣理解:鎖的基礎理論只有樂觀鎖和悲觀鎖,從樂觀鎖和悲觀鎖理論,衍生出獨佔鎖、共享鎖、更新鎖、然後行級鎖、表級鎖、頁級鎖是從鎖的有效範圍角度來劃分。
3.4 關於事務
不可分割的操作。
5種隔離級別:
default
read_uncommitted
read_committed
repeatable_read
serializable
參考:堆區(heap):一般由程式設計師自動分配,如果程式設計師沒有釋放,程式結束時可能有os**。其分配類似於鍊錶。
全域性區(靜態區static):存放全域性變數、靜態資料、常量。程式結束後由系統釋放。全域性區分為已初始化全域性區(data)和未初始化全域性區(bss)。
常量區(文字常量區):存放常量字串,程式結束後由系統釋放。
**區:存放函式體(類成員函式和全域性區)的二進位制**。
面試題 資料庫
今天面試,遇到資料庫方面的問題,由於好久沒接觸過,很多都忘記了,回來查了資料,整理一下 1 觸發器與儲存過程的區別 觸發器 是一種特殊型別的儲存過程,當使用下面的一種或多種資料修改操作在指定表中對資料進行修改時,觸發器會生效 update insert 或 delete。觸發器可以查詢其它表,而且可...
資料庫 面試題
正規化 第一正規化 1nf 所謂第一正規化 1nf 是指在關係模型中,所有的域都應該是原子性的,而不能是集合 陣列 記錄等非原子資料項。第二正規化 2nf 在1nf基礎上消除非主屬性對主碼的部分函式依賴。第三正規化 3nf 在2nf基礎上消除非主屬性對主碼的傳遞函式依賴。巴斯 科德正規化 bcnf ...
資料庫面試題
這個主要是給自己看的,答案都是網上搜的 乙個叫department的表,裡面只有乙個字段 name 一共有4條紀錄,分別是a,b,c,d,對應四個球對,現在四個球對進行比賽,用一條sql語句顯示所有可能的比賽組合 select a.name,b.name fromdepartment a,depar...