原创 c++11原子量atomic

由於一種沒來由的好奇,花了一下午理解了下c++11新增的原子量特性,感覺網上大多數文章都沒講清楚。寫下我的一些理解 首先來看什麼是原子操作以及爲什麼引進它 概述 在多線程模式下爲了保證線程安全,我們通常做法是給共享資源加互斥鎖,在

原创 深入理解空間配置器

我們都知道STL裏有很多容器,如vector,stack,queue等等,每個容器都是通過配置器來獲取存儲空間的,現在來總結下配置器原理 當我們創建一個對象時常用方式是new,銷燬一個對象用delete T* a = new T; Del

原创 協程詳解(基於ucontext.h)

   1.概述     花了點時間理解了一下協程,可能剛開始看到協程兩個字會以爲是什麼新的事務,它其實用一組特殊的函數就可以實現,並沒有深入內核。對於線程,它們的切換是由操作系統根據其系統內核中的調度器,搶佔式地進行的,就各個線程間的運行

原创 STL源碼分析之List

list是個環形雙向鏈表,裏面的迭代器類型是bidirectional_iterator_tag,可以雙向移動,不想vector裏可以隨機訪問。同時刪除或添加結點對其他的迭代器無影響。List也有sort函數,我們知道sort函數只支持隨

原创 STL源碼分析之Map

map和set一樣是關聯式容器,它們的底層容器都是紅黑樹,區別就在於map的值不作爲鍵,鍵和值是分開的,在map的紅黑樹中排序依據是鍵值,所以其鍵值也不能修改,來看其具體的源碼 定義 template <class Key, class

原创 STL源碼分析之紅黑樹

主要分析一下STL裏的紅黑樹,紅黑樹相對來說是一種較爲複雜的數據結構,具體的學習方法建議看那種帶有很多圖解的博客,先理解其原理流程,再自己寫下代碼,其實就能理解了。STL裏紅黑樹的實現有幾個特點,一個它設置了一個空頭結點heade

原创 libevent源碼學習一

最近自己在寫web服務器,弄不動的時候看看libeven源碼換換腦,首先來記錄下簡單的安裝與使用 1.在官網上安裝libevent源碼包,鏈接http://libevent.org/ 我下的是之前的老版本,因爲主要是學習下他的思想,老版本

原创 每日一數據結構封裝之單鏈表

打算從每天用c++類模板來封裝一數據結構,就從最簡單的單鏈表開始,本身比較簡單加上也比較熟悉了就當練練手。 我寫的是帶空頭結點的鏈表,這樣一些操作更簡單不用分情況。還有一需要注意的是代碼的魯棒性,比較在查找某節點時,注意輸入的位置是否大於

原创 劍指offer之二叉樹總結

會用遞歸了二叉樹的問題就會一大半了... 一.用遞歸求解 對於要利用二叉樹的規律的題都可以利用它的左節點也是其左子樹的根節點的特性來遞歸求解。可以說那種參數有根節點的題一般都可以用遞歸來解決,來看看《劍指offer》中可用遞歸解決的題 1

原创 二分查找題目總結

一位大佬曾經說過:二分查找思路很簡單,細節是魔鬼 做了一些題後感慨真的是這樣… 二分查找法:實質就是將一個有序的數據集不斷地對半分割,直至找到目標值;其中兩個最關鍵的也是在面對不同題目會稍有不同的就是怎麼退出循環,怎麼縮小查找空間

原创 每日一類封裝之AVL樹

思路學習博客https://www.cnblogs.com/coding-nerver-die/p/10975599.html 主要是理解其中維持其平衡進行的旋轉操作,分兩種情況 第一種情況只需要旋轉一次 第二中情況需要先旋轉下不

原创 Linux內核進程調度

計算機方面總是這樣你以爲你都知道其實可能還有很多不知道,慫了慫了 學操作系統的時候老師經常會講先進先出呀,優先級調度呀,多級隊列呀等等策略,他們都有自己的適用場景,因爲Linux內核裏有不同類型的進程,所以就要結合多個策略,其內部

原创 每日一數據結構封裝之二叉搜索樹

#include <iostream> using namespace std; template <typename T> struct BSTNode { T val; BSTNode<T>* lchild;

原创 epoll機制詳解

      select,poll,epoll都是IO多路複用的機制。I/O多路複用就是通過一種機制,一個進程可以監視多個描述符,一旦某個描述符就緒,能夠通知程序進行相應的讀寫操作。其中epoll是在2.6內核中提出的,是之前的selec

原创 c++ traits技法理解

終於理解了c++ traits技法,不得不說它對c++的作用可以說是很大,讓編程效率可以提升很多,爲什麼這多說,就是當我們在寫了一個模板後,traits技法可以讓這個模板的通用性更強,模板偏特化就會在模板泛化中再設計一個特別的版本,看下面