樂觀鎖
是總是假定最好的情況,每次別人去拿資料都認為別人不會去修改,所以不用上鎖。但是會在更新的時候判斷一下在此期間別人有沒有去更新這個資料。實現方法有二,版本號機制和cas演算法。樂觀鎖是用於多讀的型別,這樣可以提高資料吞吐量。在多寫的情況下每次衝突發生,都會retry,反而降低效能。
悲觀鎖總是假定最壞的情況,每次去拿資料都認為別人會修改,所以每次都會上鎖。其他人向要拿到這個資料都會被阻塞直到它拿到鎖。適用於多寫的場景。
樂觀鎖版本號機制
一般是在資料表中加上乙個資料版本號version欄位,表示資料被修改的次數。當資料被修改時,version值加一,當執行緒a準備更新資料的時候,在讀取資料的同時也會讀取version的值,在提交更新的時候,若前後version值相等才更新,否則重試更新操作直到成功。
cas(compare and swap)演算法
是一種有名的無鎖演算法,在不適用鎖的情況下實現多個執行緒間的變數同步,因此也叫非阻塞同步(non-blocking synchronization)。
static全域性變數和普通全域性變數的區別
儲存方式都一樣,已初始化的存入程序資料段,未初始化的放入bss段。
作用域不相同。普通全域性變數在各個原始檔內都是有效的,static全域性變數只能在它定義的原始檔中使用,可以避免在其他原始檔引起錯誤。
static區域性變數和普通區域性變數的區別
儲存方式不同:static區域性變數被儲存在資料段或bss段,普通區域性變數只有在函式被呼叫的時候會儲存到棧空間。
作用域不同:static區域性變數在原始檔的所有函式都可以使用,區域性變數只能在函式內使用。
static函式與普通函式
普通函式的定義和宣告是預設extern的,在源程式的所有檔案都可見。static只在本檔案可見,且不能被其他檔案所用。
完整參考:
詳細講了聚集索引,輔助索引
class base ;}
;class drived : public base //如果是私有繼承,那麼即便子類沒有同名函式,子類物件也無法呼叫父類func();}
;int
main()
pod型別是純資料型別物件。
//大括號初始化
struct studnet
;studnet s=
;//純資料(plain of data,pod)型別物件
studnet sarr=
,};//pod陣列
class test
;test t
;//c++11 only,相當於 test t(0,0);
test* pt=new test
;//c++11 only,相當於 test* pt=new test(1,2);
int* a = new int[3
];//c++11 only
c++11中,類的資料成員在申明時可以直接賦予乙個預設值
class c
面經學習過程
學長分享了很多好的資源!剛開始在這上邊看的,但發現講的太簡單了,看不懂,也少很多,就換了種方式。之後主要這樣複習的 看這個學長的部落格 這個學長部落格裡的筆記都是問題,回答就一句話,主要就是看問題,不會的記到自己word上,然後搜問題去看幾篇部落格學一下。之後看這個學長的部落格 我部落格上的筆記兩種...
騰訊秋招面經
1 負載均衡中的一致性雜湊如何使用的 2 伺服器的半同步半非同步怎麼使用的 主線程非同步監聽listenfd,當有客戶端連線的時候,將連線連線套接字發給工作執行緒,工作執行緒也是非同步處理,使用libevent將所有套接字監聽起來。所以是乙個高效的半同步半非同步 3 伺服器和客戶端通訊的步驟 4 資...
2019 7 2,3秋招學習筆記
當返回乙個物件不可被避免的時候,因返回的過程中產生的臨時物件,構造和析構仍被執行所以會影響到程式效率。但是可以通過特定的寫法,搭配支援 return value optimization 的c 編譯器,只需要付出乙個構造函式呼叫的代價即可完成返回值賦值。並且可以將函式宣告為inline,從而消除呼叫...