原创 strlen函數以及string類使用心得

複習一下strlen函數 其實,給strlen函數之後它就會向下偏移統計個數,遇到當前位置字符爲'\0'纔會停下來。如果沒有的話就有可能接着往下走下去,甚至會超過開闢空間的區域指向一片未開闢空間賦值的空間。 所以服務端這邊接收的buffe

原创 IP源站路由

IP源站路由 IP地址按理來說是不變的,發出的每一地址把目的地址藏住並且使用下一個跳的IP地址,每一跳的IP地址都會改變。但是可能被會被攻擊,被引導到另一條路上面。 嚴格源站路由必須每一站都是直連的,寬鬆的源站路由不一定是直連的,可以跨過

原创 ARP與ICMP

1.ARP協議 ARP是用於解析IP地址所對應的MAC地址的,PC可以直連也可以連接路由器之後再去查找IP的MAC地址。如果PC和主機是直接連在一起的話那就可以直接查詢,如果中間有路由地址的話就會去路由表裏面查找下一跳是什麼地址,如果是非

原创 boost.asio async_read_some 和 async_read

這次做的這個項目就遇到一些問題 想要達到的效果是每次先讀取100字節的內容,之後根據這裏面的數據長度的提示去找到接下來需要繼續讀出來的數據長度是多少,但是還是遇到了一些問題沒有解決。所以又回頭去看了一下API到底都是怎麼回事。 首先我之前

原创 Linux進程調度過程

目錄 什麼是進程調度程序? 多任務操作系統 時間片 進程調度的策略 進程優先級 優先級數組 重新計算時間片 schedule函數 schedule函數如何找到下一個需要執行的進程? 計算優先級與時間片 睡眠與喚醒 Linux負載平衡程序

原创 LInux進程創建過程

寫時拷貝 傳統的fork系統調用直接把所有的資源複製給新創建的進程,但是這種實現過於簡單,效率低下,因爲並不支持拷貝數據的共享。 更糟的是如果新進程打算立即執行一個新的映像那麼所有的拷貝都將前功盡棄。 Linux下面的fork採用的是寫時

原创 STL源碼剖析讀書筆記 迭代器概念traits編程技法

迭代器的設計思維--STL設計理念 STL在設計的時候希望達到將數據結構和算法分離開來獨立設計,最後再使用一點耦合劑來使它們聯繫起來。 這裏舉了一個容器、算法、迭代器的例子,就是find函數,對於不同類型的迭代器,都可以講其中的數據與va

原创 基礎算法之二叉樹 1 平衡二叉樹的判斷

什麼是平衡二叉樹? 平衡二叉樹指的是二叉樹的每一個節點的左子樹和右子樹的高度差爲不大於1 所以由此推出判斷的條件有 每一個子樹如果有一個出現不是平衡二叉樹的話就一定不是平衡二叉樹 如果遍歷得到的某一個節點出現了,二叉樹的高度之差大於1也不

原创 基礎算法之二叉樹 2 二叉樹的序列化和反序列化

關於二叉樹的序列化和反序列化的概念解釋 第一次接觸這個可能會比較懵,什麼叫序列化和反序列化? 序列化:系統爲了保存二叉樹的存儲結構從而把二叉樹變成了一串字符串記錄在文件等地方 反序列化:就是將字符串去恢復成二叉樹 序列化的整個思路 遇見N

原创 C++時間戳轉換成標準時間

對方發過來的時間格式是時間戳,我這邊需要解析成普通的日期格式,參考了下面的帖子 https://www.cnblogs.com/kaituorensheng/p/3922919.html 使用的是time.h裏面函數,還是c的函數比較好用

原创 基礎算法 數組改成棧

#ifndef ARRAY2STACK_H #define ARRAY2STACK_H #include <memory.h> #include <iostream> class array2stack { public:

原创 基本算法 數組轉成隊列

/****** array2queue.h ********/ #ifndef __ARRAY_QUEUE_H__ #define __ARRAY_QUEUE_H__ #include <iostream> #include <st

原创 effective c++ 條款18 19 20 21

條款18:讓接口容易被使用,不易被誤用 在設計之前需要瞭解到用戶可能會犯什麼樣的錯誤。原書中舉例,設計一個表現日期的class class Date{ public: Date(int month, int day, int y

原创 effective c++ 條款13 14 15 16 17

條款13:以對象管理資源 在一個對象被開闢出來之後,需要佔據一定的內存空間,如果空間是new出來的,就需要在合適的地方delete掉這款空間。如果調用delete析枸的是對象本身的話,一旦某些地方出現異常的話,或者是提前return導致來

原创 effective c++ 條款 4 5 6 7 8

條款4:確保變量之前初始化過 變量的初始化和變量的賦值首先就是兩個概念,初始化是爲變量開闢一定的空間,但是賦值是爲變量賦初值,和初始化有本質的不同。 對於內置類型的成員變量,必須手動完成對變量的初始化。例如 int x = 0; con