原创 UDP協議簡單理解

UDP協議格式 從左到右,唐僧問路,16位源端口,16位目的端口,16位UDP長度,16位UDP檢驗和。 16位UDP長度,表示整個數據報(UDP首部+UDP的數據)最大長度 如果校驗和出錯,就會直接丟棄。 UDP的特點 UDP的

原创 簡單shell實現

使用進程創建,進程等待和程序替換函數能實現一個低配版的shell 1 #include<stdio.h> 2 #include<std

原创 Linux線程簡單理解3

線程不安全 //寫多線程一定確保是多核的 #include<stdio.h> #include<stdlib.h> #include<pthread.h> #include<unistd.h> #define Thread_num

原创 Linux線程的簡單理解2

創建線程 pthread_create() 函數第一個參數執行一個虛擬內存單元,該內存單元的地址即爲新創建線程的線程ID,屬於NPTL線程庫的範疇。線程庫的後續操作,就是根據該線程的ID來操作線程的。 結束線程 1.讓線程入口函

原创 c++stack

stack是一種容器適配器,專門用在具有後進先出操作的上下文環境中,其刪除只能從容器的一端進行元素的插入與提取操作。 stack是作爲容器適配器被實現的,容器適配器即是對特定類封裝作爲其底層容器,並提供一組特定的成員函數來訪問其

原创 動態庫和靜態庫簡單介紹

靜態庫(.a):程序在編譯鏈接的時候把庫的代碼鏈接到可執行文件中。程序運行的時候將不再需要靜態庫。 把一些.o文件打包成一起生成了一種特殊的二進程程序,自身不能直接執行,但是可以和其他的.c/.cpp文件編譯生成了一個新的可

原创 AVL樹

AVL樹 二叉搜索樹雖然可以縮短查找的效率,但如果數據有序或接近有序二叉搜索樹退化爲單支樹,查找元素相當與在順序表中搜索元素,效率低下。 當向二叉搜索樹中插入新節點後,如果能保證每個節點的左右子樹高度之差絕對值不超過1(需要對樹中

原创 C++智能指針

爲什麼要有智能指針? 在C++中沒有垃圾回收機制,用戶需要自己來對已經申請的內存空間進行釋放,如果不釋放會存在內存泄漏問題。如果代碼拋異常,資源沒有回收也可能產生死鎖。 智能指針的使用 首先介紹一下RAII,它是Resource

原创 TCP協議簡單理解

tcp全稱是“傳輸控制協議”。人如其名,要對數據的傳輸進行一個詳細的控制。 tcp核心設計: 1.保證可靠性傳輸 能夠及時的發現自己發送數據是成功還是失敗 2.儘可能的提高傳輸效率 1,2

原创 c++繼承簡單的自我理解

什麼是繼承 繼承機制是面向對象程序設計使用代碼可以複用的重要手段,它允許程序員保持原有類的特性的基礎上進行擴展,增加功能,這樣產生的新的類,稱爲派生類。繼承呈現了面向對象程序設計的層次結構,體現了由簡單到複雜認知的過程。繼承是類設

原创 c++多繼承自我理解

單繼承與多繼承 單繼承:一個子類只一一個直接父類時稱這個繼承關係爲單繼承 多繼承:一個子類有兩個或者兩個以上直接父類時稱這個繼承關係爲多繼承。 菱形繼承:菱形繼承是多繼承的一種特殊情況。兩個子類同時繼承一個父類,又有一個子類繼承這

原创 命令行更新gcc

先獲取 root 權限 yum install centos-release-scl-rh centos-release-scl yum check-update yum install devtoolset-4-gcc dev

原创 Linux線程簡單理解

線程:**是操作系統能夠進行運算調度的最小單位。**它被包含在進程之中,是進程中的實際運作單位。一條線程指的是進程中一個單一順序的控制流,一個進程中可以併發多個線程,每條線程並行執行不同的任務。 在一個程序裏的一個執行路徑就叫做線

原创 c++vector迭代器失效問題

vector的迭代器失效問題有兩種情況 1.erase使迭代器失效 通過迭代器得到改元素的位置,erase掉該元素,再通過迭代器訪問該位置就會出現非法訪問。 2.insert使迭代器失效 insert操作可能會導致vector增容

原创 c++模板

1.泛型編程 問題提出:怎麼編寫一個通用的交換函數呢? 泛型編程:編寫與類型無關的通用代碼,是代碼複用的一種手段。模板是泛型編程的基礎。 2.函數模板 函數模板代表了一個函數家族,該函數模板與類型無關,在使用時被參數化,根據實參類