原创 合理估算線程池大小

服務器性能IO優化 中發現一個估算公式:最佳線程數目 = ((線程等待時間+線程CPU時間)/線程CPU時間 )* CPU數目 比如平均每個線程CPU運行時間爲0.5s,而線程等待時間(非CPU運行時間,比如IO)爲1.5s,CPU核心數

原创 Linux終端進程管理必備命令

top命令是一個常用的查看系統資源使用情況和查看佔用系統資源最多的進程的命令。top以列形式顯示所有的進程,佔最多CPU資源的進程會顯示在最上面。   ps命令可以列出正在運行的進程。   pstree命令也可以顯示進程信息。它以樹的形式

原创 AVL樹及C語言實現

概念   平衡二叉樹(Balanced binary tree)是由蘇聯數學家Adelson-Velskii and Landis於1962年首先提出的,所以又稱爲AVL樹。 定義:平衡二叉樹或爲空樹,或滿足如下性質的二叉樹:  (1)本

原创 VIM窗口分屏

分屏啓動Vim 使用大寫的O參數來垂直分屏。 vim -On file1 file2 ... 使用小寫的o參數來水平分屏。 vim -on file1 file2 ... 註釋: n是數字,表示分成幾個屏。 關閉分屏 關閉當前窗口。

原创 堆的動態創建與根節點刪除

堆的介紹與調整 關於堆的介紹以及對於給定的完全二叉樹,調整爲大根堆或者小根堆,可以參考博文http://blog.csdn.net/pngynghay/article/details/22052737,在此不再贅述。 本文主要是實現動態的

原创 likely && unlikely

likely和unlikely是gcc擴展的跟處理器相關的宏: #define likely(x) __builtin_expect(!!(x), 1) #define unlikely(x) __builtin_expect(!!(x)

原创 Linux終端徹底清空屏幕

Linux用戶基本上都習慣使用clear命令或Ctrl+L組合快捷鍵來清空終端屏幕。這樣做其實並沒有真正地清空屏幕,但當用鼠標向上滾時,你仍然能看到之前的命令操作留下來的輸出。 命令 printf “\033c” 或者 printf “\

原创 AVL樹C語言完整實現

AVL樹的介紹見http://blog.csdn.net/pngynghay/article/details/22443525,本文給出的是AVL樹的一種實現。 採用非遞歸方式,效率較好,經過常規測試。   #include <stdio

原创 雙層桶

雙層桶 雙層桶不是數據結構,只是一種算法思維,分治是其根本思想。在處理海量數據時,有着一席之地。 當我們有一大堆數據需要處理,而侷限於各種資源限制(內存、範圍等)又不能一次處理完畢,此時,我們就需要將這一大堆數據分成我們可以處理的多個小段

原创 雙堆求中位數及C實現

堆 堆的動態創建與刪除可參考http://blog.csdn.net/pngynghay/article/details/22101359,此處不再贅述。 雙堆求中位數 算法描述: 1、創建兩個堆(一個小根堆、一個大根堆),堆大小至少爲給

原创 Bloom Filter

Bloom Filter(BF)是一種空間效率很高的隨機數據結構,它利用位數組很簡潔地表示一個集合,並能判斷一個元素是否屬於這個集合。它是一個判斷元素是否存在集合的快速的概率算法。 Bloom Filter有可能會出現錯誤判斷,但不會漏掉

原创 hash算法原理及常見函數

簡介   散列表,它是基於快速存取的角度設計的,也是一種典型的“空間換時間”的做法。顧名思義,該數據結構可以理解爲一個線性表,但是其中的元素不是緊密排列的,而是可能存在空隙。 散列表(Hash table,也叫哈希表),是根據關鍵碼值(K

原创 大根堆小根堆及其應用

堆的概念 堆實際上是一棵完全二叉樹,其任何一非葉節點滿足性質: Key[i]<=key[2i+1]&&Key[i]<=key[2i+2]或者Key[i]>=Key[2i+1]&&key>=key[2i+2] 即任何一非葉節點的關鍵字不大於

原创 AVL樹 VS 紅黑樹

平衡二叉樹的追求的是全局均衡,如在做插入,刪除操作時,需要調整整棵樹,顯然這是費時的,因此希望在做調整時,是局部調整,因此提出了紅黑樹,這樣一種高效的數據結構(也是最變態的一種數據結構)。紅黑樹屬於非嚴格意義上的平衡二叉樹,說它不嚴格是

原创 fork與行緩衝

題目:請問下面的程序一共輸出多少個“-”? #include <stdio.h> #include <sys/types.h> #include <unistd.h> int main(void) { int i;