原创 線程同步總結--臨界區 事件 互斥量 信號量

在WIN32中,同步機制主要有以下幾種: 臨界區(Critical section) 事件(Event); 互斥量(mutex); 信號量(semaphore);   臨界區(Critical section) 臨界區(C

原创 Observer/Event觀察者模式(C++)

動機: 在軟件構建過程中,我們需要爲某些對象建立一種“通知依賴關係”--一個對象(目標對象)的狀態發生改變,所有的依賴對象(觀察者對象)都將得到通知。如果這樣的依賴關係過於緊密,將使軟件不能很好地抵禦變化。使用面向對象技術,可以將這種依賴

原创 C語言實現C++繼承和多態

C++中的多態 我們知道的是在C++中會維護一張虛函數表,根據賦值兼容規則,我們知道父類的指針或者引用是可以指向子類對象的。如果一個父類的指針或者引用調用父類的虛函數則該父類的指針會在自己的虛函數表中查找自己的函數地址,如果該父類對象的指

原创 C++11下的單例模式

動機:在軟件系統中,經常有這樣一些特殊的類,必須保證它們在系統中只存在一個實例,才能確保它們的邏輯正確性、以及良好的效率。  繞過常規的構造器,提供一種機制來保證一個類只有一個實例。 定義:保證一個類僅有一個實例,並提供一個該實例的全局訪

原创 命名約定--Google Style Guide

最重要的一致性規則是命名管理. 命名的風格能讓我們在不需要去查找類型聲明的條件下快速地瞭解某個名字代表的含義: 類型, 變量, 函數, 常量, 宏, 等等, 甚至. 我們大腦中的模式匹配引擎非常依賴這些命名規則.命名規則具有一定隨意性,

原创 STL--allocator分配器

首先介紹一下執行new後的函數調用關係:new -> operator new -> malloc(CRT) -> 調用操作系統的內存分配API(Windows、Linux、Unix)介紹:std::allocator是STL容器使用的內

原创 C++11--正則表達式

本文主要參考爲《C++Primer第五版》 0.常用正則表達式中文字符:[\u4e00-\u9fa5]雙字節字符(包括漢字在內):[^\x00-\xff]空白符:\n\s*\rEmail地址:[\w!#$%&'*+/=?^_`{|}~-]

原创 TCP三次握手和四次握手

採用三次握手建立連接 第一次握手:Client將同步位SYN置爲1,同時選擇一個初始序列號seq=x,並將請求報文段發送給Server,Client進入SYN_SENT(同步已發送)狀態。 第二次握手: 服務器收到請求,向客戶端

原创 TCP與UDP區別總結

1、連接:TCP面向連接; UDP是無連接的,即發送數據之前不需要建立連接。 2、可靠性:TCP通過檢驗和、序列號、確認應答、超時重傳、連接管理以及窗口控制等機制實現可靠性傳輸。也就是說,通過TCP連接傳送的數據,無差錯,不丟失,不重複,

原创 C++模板特化

【理論待補充...】下面是一個函數模板特化的例子;/// 模版特化 template <class T> int compare(const T left, const T right) { std::cout << "in temp

原创 Template Method 模板方法

Template Method是一種組件協作模式:通過晚綁定,來實現框架與應用程序之間的鬆耦合,是二者之間協作時常用的模式。動機:在軟件構建過程中,對於某一項任務,它常常有穩定的整體操作結構,但各個子步驟卻有很多改變的需求,或者由於固有的

原创 TCP流量控制--滑動窗口

流量控制就是讓發送方的發送速率不要太快,要讓接收方來得及接收。 發送發的發送窗口不能超過接收方給出的接收窗口的數值。TCP的窗口單位是字節,不是報文段。 通過下圖可以說明如何利用滑動窗口機制進行流量控制。 注意:  當窗口數爲 0 時

原创 C++實現多項式曲線擬合--polyfit

基本原理:冪函數可逼近任意函數。上式中,N表示多項式階數,實際應用中一般取3或5;假設N=5,則:共有6個未知數,僅需6個點即可求解;可表示爲矩陣方程:Y的維數爲[R*1],U的維數[R * 6],K的維數[6 * 1]。R> 6時,超定

原创 Simple Factory Pattern--簡單工廠模式

介紹:簡單工廠模式不能說是一個設計模式,說它是一種編程習慣可能更恰當些。因爲它至少不是Gof23種設計模式之一。但它在實際的編程中經常被用到,而且思想也非常簡單,可以說是工廠方法模式的一個引導。動機:當你需要什麼,只需要傳入一個正確的參數

原创 C++11 變參模板(variadic templates)

Variadic Template是C++11的一個很重要的特性;變體現在兩個方面:(1)參數個數:利用參數個數逐一遞減的特性,實現遞歸調用;(2)參數類型:參數個數逐一遞減導致參數類型也逐一遞減;兩個注意點(1)遞歸調用(2)遞歸終止: