原创 服務端緩存思考

緩存設計 首先緩存設計。我們怎麼設計一套緩存呢。大致的套路基本上都是一個LocalCache,一個分佈式Cache (Redis) ,大體的架構圖將像下面所示。 LocalCacheRedisDBkafkaLocalCache

原创 c++ 單元測試的權限控制

權限控制 c++ 寫單測的時候,可能UT裏面想測 類的private 的接口,以下有倆種方式 方式1 -Dprivate=public -Dprotected=public 方式2 -fno-access-control 總結

原创 tcp 的連接隊列

連接隊列   它指的就是tcp狀態節點的隊列。tcp 狀態分倆種,一種是完全連接狀態即(established) , 一種是半連接狀態(SYN_SEND 或 SYN_RECV)。   對於服務器來說,listen狀態的節點當收到

原创 線程局部存儲(TLS)

線程局部存儲介紹 Linux下線程的數據段和代碼段共享,棧私有。有的時候我們想使用一個全局數據,但是全局數據都是在數據段的,它沒辦法每個線程獨享,所以這個時候就有了線程局部存儲的出現。 舉個列子,我們寫一個服務端程序,每個線程都有

原创 阻塞/非阻塞 I/O 同步與異步

網絡I/O模型 阻塞I/O模型   阻塞I/O就是,如果I/O條件不就緒的話,那麼進程將一直被阻塞住,只有數據到達(I/O條件就緒),進程才從可中斷睡眠狀態到達就緒態,然後被操作系統調度,然後從函數中返回。 非阻塞I/O模型

原创 爲什麼要Time_wait

Time_wait 啊,老哥們肯定會想,time_wait什麼鬼? 爲毛我主動斷開tcp連接。發完最後一個ACK後不能直接斷開連接啊,我能做的都做了。但是….. 老鐵們你們想一下,ACK丟包是不會重傳的,但是FIN呢? 最後被動

原创 類權限的理解

private / protected 這倆個訪問限定符,只是限定直接類外訪問類內數據成員。但是不代表聲明瞭private 就沒辦法在類外訪問 相應的成員,如下面的demo class Test { public: int

原创 動態庫的坑

動態庫的坑 今天想不重啓程序,直接替換掉線上的動態庫。結果程序崩潰了。 最後發現經查詢才發現,我直接使用 cp new.so target.so 的方式去替換。因爲 cp 並不會產生新的文件,這相當於直接把 new.so 的內容覆

原创 c++ 迭代器

iterator catagoly 迭代器種類 input 向後讀 output 向後寫 forward 向後讀寫 bidrectional 先後讀寫 random 隨機讀寫 advance 與 next 除了rand

原创 c++11 右值引用

右值引用 在c++ 中能通過 & 取到地址的變量都是左值,不能的都是右值。傳統c++ 中引用必須是左值,即使 const T & (常量引用),它也是編譯器創建了一個相應的常量,然後給對應的引用初始化。 在c++中 右值的生命週期僅

原创 c++11 - 參數包之模版可變參數

參數包 c++11 的參數包就是我們老版本c++中的可變參數。它的聲明也很像我們老版本的可變參數 template<class T, class ... Args> void Fun( T arg1, Args); 參數包分爲

原创 c++ 臨時對象

臨時對象 c++ 臨時對象具有常量的屬性,並且它的生命週期常常只存在於當前表達式中。 臨時對象生命週期 struct A { ~A () { cout << "A" << endl; } }; A Fun() { retur

原创 snprintf

snprintf 最近使用snprintf 遇到了一個坑 , 下面是snprintf 的函數聲明。 int snprintf(char *str, size_t size, const char *format, ...); 我使用

原创 -rdynamic(–export-dynamic) 選項

export-dynamic 最近寫代碼用到了 dlopen函數,dlopen 函數裏面使用到了 主程序中的一些全局符號(全局變量 或者 函數)。這個時候生成主程序 指定 dlopen函數的連接的 .so 文件的時候,報鏈接錯誤。經過

原创 c++ 模板總結

模板 模板被稱爲c++ 下的編譯器多態。最近寫模板遇到了一些坑總結下。 模板 聲明與定義分離 c++ 慣有的源文件模式都是 將聲明寫到 .h 文件中,將實現寫到 .cpp 文件中。但是對於模板來說,如果我們把 模板類或者模板函數這樣分