原创 完成一個二叉樹類

包括二叉樹的前序遍歷,中序遍歷,後序遍歷(遞歸/非遞歸)和層序遍歷 包括 樹的高度,樹的節點個數,葉子節點個數,第k層結點的個數,判斷一個節點是否在二叉樹內,查找值爲k的節點,二叉樹的鏡像,判斷是否爲完全二叉樹 #ifndef

原创 進程和task_struct

進程 什麼是進程? 進程就是正在計算機上執行的實例。我們知道可執行文件都是存儲在磁盤中,當計算機執行可執行文件時,才把可執行文件從磁盤中讀取到內存上.然後cpu從內存上讀取指令來運行程序,那在內存上等待或者正在被cpu執行的程序

原创 error: 函數調用缺少參數列表;請使用“&BinTree::_PrintNode”創建指向成員的指針

在寫二叉樹的遍歷時,錯誤代碼代碼如下: class BinTree { public: typedef void(*pFun)(pNode); void PreVisit() { _PreV

原创 C++對象模型(一)單繼承

1.無虛函數的單繼承 class A { public: A():_ai(1){} void Afun(); static void static_fun(); static int _val; p

原创 Next Permutation-leetcode下一個排列組合

問題描述: Implement next permutation, which rearranges numbers into the lexicographically next greater permutation of

原创 gdb調試2

gdb調試1 前面介紹了gdb的基礎操作,下面再看一些其他操作 1.斷點 2.觀察點和看內存 上面代碼,我們想看str[5]裏面的值,雖然越界了但是我麼可以用觀察點來看裏面的值 對上面所用到的指令進行總結: 指

原创 C++對象模型(二)多繼承

3.多繼承模型 看下面代碼: class Base1 { public: Base1():_b1(1) {} virtual void fun1() { cout<<"Base1:

原创 循環隊列和以單鏈表的形式實現隊列

循環隊列 template<class T,size_t N = 8> class queue { public: queue() :_rear(0) , _front(0)

原创 繼承

1.什麼是繼承? 繼承是面向對象編程提供可重用代碼的重要手段 ,它允許我們在保持原有類特性的基礎上,對原有類進行拓展和修改派生出新的類,從已有類(基類/父類)派生出新的類稱爲派生類(子類)。 繼承類定義的格式:class 派生

原创 C++類型轉換

C++類型轉換 隱式類型轉換 隱式類型轉換髮生在以下情況: 在混合類型的算術表達式中,爲了防止精度丟失,這種情況最寬的數據類型稱爲目標轉換類型,這也被稱爲算術轉換,例如int+double被轉換成double 在進行整值提升時

原创 TCP 的 keeplive保活機制

在一般情況下,TCP在網路爲了避免半連接狀態(比如客戶端已經掉線服務器還在提供資源),會在長時間沒有數據傳輸時主動關閉連接,但很多應用場景下,如websocket,連接需要一直保持,以便於客戶端隨時能接收到服務器的消息。只要客戶端每隔

原创 Nagle算法

Nagle算法 互聯網的各種複雜的情況有可能會導致網絡擁塞,Nagle算法是解決網絡擁塞的一種方案。 我們知道在TCP爲了保證可靠性,會在收到報文後答覆一個確認消息。但特殊情況下,可能會導致TCP中的報文數量太多,比如客戶端每次只發送

原创 C語言獲取今天0點的時間戳

工作中遇到一個有趣的bug,在獲取今天0點的時間戳時,我是這樣算的: uint64_t today_timestamp() { uint64_t now_time = time(NULL); // 當前時間戳

原创 Github工作流程

用開源代碼庫github協同開發常見的操作流程: 以比特幣源碼爲例: 1.fork代碼倉庫 先在自己的github賬號下fork代碼倉庫,然後在終端進行如下操作: git clone [email protected]:your_usern

原创 docker常用操作

文章目錄1.安裝docker2.安裝docker-compose3.常用命令4.Docker compose 配置文件docker-compose.yml註解5.docker私有倉庫創建 1.安裝docker wget -qO- ht