原创 斷言和異常的區別

異常被捕獲後可以不做處理,程序從捕獲位置繼續執行,斷言是無法忽略的,程序在斷言失敗處立即終止。斷言通常用於調試版本,用來發現程序中的錯誤,雖然異常也能起到這樣的作用,但是不應該用異常代替斷言。 1)如果發生了邏輯錯誤,必須修改程序

原创 signal和sigaction的區別

signal函數是爲了兼容舊的,sigaction函數比signal函數更穩定,原因是在不同的unix系統裏面signal函數會有不同,但sigaction函數完全相同。

原创 shared_ptr使用要注意的問題

shared_ptr在使用過程中,要注意不能實現一組對象被兩組shared pointer擁有。 例如: int *p = new int; shared_ptr sp1§; shared_ptr sp2§; 這樣 p會被重複

原创 mutable的用法

理論上在const修飾的函數裏面( func() const ) func()函數內部是沒有辦法修改成員變量的值的,但是,如果成員變量是mutable修飾的話,就可以修改這個變量了

原创 多進程服務端

多進程的服務端,在主進程裏面調用accept操作,由於fork創建的子進程與主進程擁有相同的內存空間,也就是服務端和客戶端的套接字描述符在子進程的內存空間裏面存在相同的一份拷貝,因此,子進程的處理函數首先就要關閉服務端的套接字描述

原创 remove刪除容器元素時需要注意的事項

remove在刪除內存中某元素的時候,該元素對應的內存不會被刪除,該內存會被該元素後面的數據填充,也就是說如果要刪除該內存,需要和 erase配合使用,距離: #include #include #include #includ

原创 工作中應該學習什麼

轉眼間已經工作了很久時間了,想想這段時間的工作,實際上在技術上沒有很大的進步,也就是沒有和別人拉開本質的差距,這是我現在面臨的最大的問題。在學習的方向上面,也頗猶豫不定,到底應該重點學習哪些東西,過去的一段時間,我一直投入相當的精

原创 gtest使用說明

外部依賴項: liggtest.a libgtest_main.a 相關頭文件 Main函數寫法參考: int main(int argc,char* argv[]) { //testing::GTEST_FLAG

原创 nagle算法的作用

在TCP連接中,會默認開啓nagle算法。 nagle算法的作用,舉例來說,如果tcp發送一個小段數據,比如數據的大小爲 1,2,3,2,1 五個數據段,如果禁用nagle算法,就會出現一個問題,這5個小的數據段會被髮送5次,而如

原创 linux創建進程創建的3個描述符

linux在新建一個進程的時候,會創建3個描述符,0 1 2,分別是標準輸入,標準輸出,以及標準錯誤三個描述符。

原创 string的內存優化技術

c++的string類有兩種內存優化技術,分別爲SSO(Small String Optimization)即,由於申請堆內存的開銷比較大,因此,短的字符串會被申請在棧上 另一種優化技術是COW,也就是寫時複製,寫時複製在linu

原创 一種安全的從文件中讀取一段數據的方法

一種安全的從文件中讀取一段數據的方法 void ReadLen(int fd,int Len.char* buf) { ssize_t ret; while(len!=0&&(ret = read(fd,buf,len))!=0)

原创 string 和hex相互轉化

string與hex的相互轉換 string 轉 hex 調用 std::stoi函數(c++11) std::string str = "abcd123"; unsigned char hex = std::stoi(str,

原创 返回值類型後置

返回值類型後置,cpp提供的用於推導返回值類型的方法。 舉例來說: template<class X,class Y> ? mutil(X x,Y y) { return x*y; } 這時候,就沒法推導返回值的類型 當然可以使

原创 學習計劃

學習過程中,要逐步形成自身的核心能力,就是以數據存儲和分佈式以及服務器爲核心的能力。這就要求自身要對redis以及mysql數據庫非常的熟悉。而且深入理解其中的源碼和使用方法。