原创 rocksdb compaction流程理解

1、首先通過每層的分數score來決定那個level可以進行compaction操作。 2、然後啓動這個compaction放在獨立中等待線程調度處理 3、rocksdb對一個大的compaciton進行了切分,切分成了多個subcomp

原创 O_Direct O_sync參數意思

一、O_Direct O_sync sync參數意思 參考:https://my.oschina.net/fileoptions/blog/3061997 O_Direct:表示的是數據從用戶態文件下發,通過VFS文件系統,數據

原创 什麼是工廠類

當定義多個類,且他們之間相互有關係時候,比如一個Base A 類,派生了很多子類B,C,D,當每個子類進行對象實例化時候,我們一般的做法就是通過new B,new C,new D這樣的方式產生對應的對象。這樣當然是可以的,但是我們

原创 C++ 記錄字符串和鏈表的簡單操作

#include <string> #include <iostream> #include <stack> using namespace std; /*將字符串中的大寫字母轉換成小寫字母*/ void RevertBig2Smal

原创 通過gdb+gdbserver遠程調試代碼

場景: 比如代碼在A機器 執行程序跑在B機器,也就是實際的環境中。同時在B機器上有沒有代碼,那麼要想在B機器上單步debug代碼怎麼辦?此時gdb server就可以辦到。 第一步:gdbserver運行在B機器上(當然此時需要額

原创 一堆c++二叉樹記錄

#if 1 #include<iostream> #include <queue> #include <stack> #include <string.h> #include <stdio.h> using namespace s

原创 多線程多併發情況下的互斥有哪些方法

多線程併發之間有多種鎖的模式,適應於不同的應用場景。鎖的模式有些地方也叫線程之間的同步方式。所謂的同步就是多個線程之間進行數據一致性需要用到的機制。 一、互斥鎖mutex(pthread_mutex_t) pthread_mute

原创 排序算法理解及其 需要考慮時間消耗

/* 單位us 選擇排序 time:183162 插入排序 time:835829 優化後的插入排序(1): time:385136 優化後的插入排序(2(for循環直接比較)): time:309751 Shel

原创 c++ 引用和static理解

引用: 1、引用是申明一種關係不是定義一個變量,所以不開闢空間。不單獨存在必須要初始化指向某個東西。他是一個別名和指向的對象一樣的實體,不是一個指針,所以不能按照指針 ->的方式訪問,而是按照.xxx的方式訪問。 2、當函數參數傳

原创 單例模式下的GetInstance技巧

單例模式下通過Getinstance方式獲取對象(只會存在一個對象實例)的單個指針,但是當多個線程時候第一次去new對象時候,只能保證一個線程去new對象,此時需要通過鎖的機制來保證互斥,但是如果直接在Getinstance中加鎖

原创 Epoll爲什麼比select高效

1、select的原理 首先select在處理多客戶端接受數據的問題上是這樣處理的的,首先將要堅挺的socket添加到一個fs_set[]數組中,然後將在select時候將這些監聽的socket傳遞給內核(這些socket在內核中

原创 n&(n-1)表示什麼?n&(-n)表示什麼?

1、n&(n-1)(注意這裏是X&Y不是X*Y)表示將一個數據比如7按照二進制表示後,將最右邊的1變成0,比如將0111變成0110. 這個公式有兩個左右,一個作用是可以用來統計一個數1的個數,也可以用於判斷一個數據是否爲2的冪。判斷1的

原创 SPDK NVME

SPDK NVME 1、SPDK(APP)在啓動時候會讓指定綁定在那些core上運行,這樣在每個core上會創建一個線程(他叫reactor),這個線程不停的做polling操作,而如果你要在這個線程上做事情,則需要註冊poller( 可

原创 從hash到二叉樹到紅黑樹到B樹到B+樹

要搞清這個幾個數據結構的問題,需要搞清楚他們的原理,並且有什麼問題,然後每一個新的結構能解決什麼問題。爲什麼會出現?爲什麼就用他了。 hash表: 首先hash表查序你很快,通過hash函數可以在O(1)的時間就能找到key值,且都是在內

原创 spinlock理解

鎖理解: 1、比如自旋鎖,如果一個CPU的情況: 他是指的線程運行的主體CPU或者對應的線程core在在某個線程或者進程已開始進來加鎖成功後,然後CPU就在時間片內一直執行鎖內部的代碼操作,在時間片結束的最後一個CPU指令是中斷處