原创 Socket編程實踐(13) --UNIX域協議

UNIX域協議    UNIX域套接字與TCP相比, 在同一臺主機上, UNIX域套接字更有效率, 幾乎是TCP的兩倍(由於UNIX域套接字不需要經過網絡協議棧,不需要打包/拆包,計算校驗和,維護序號和應答等,只是將應用層數據從一個進程

原创 C++筆試題總結(一)

1.求下面函數的返回值(微軟) int func(x) { int countx = 0; while(x) { countx ++; x = x&(x-1); } return countx; } 假定x = 9999。 答案:8 思路

原创 Socket編程實踐(5) --TCP粘包問題與解決

TCP粘包問題 由於TCP協議是基於字節流且無邊界的傳輸協議, 因此很有可能產生粘包問題, 問題描述如下    對於Host A 發送的M1與M2兩個各10K的數據塊, Host B 接收數據的方式不確定, 有以下方式接收:

原创 數據結構基礎(1) --Swap & Bubble-Sort & Select-Sort

Swap的簡單實現 [cpp] view plain copy   //C語言方式(by-pointer):   template <typename Type>   bool swapByPointer(Type *po

原创 數據結構基礎(8) --單鏈表的設計與實現(1)之基本操作

鏈表簡介 數組的缺點:      1.元素插入:除了在數組的末尾插入元素之外,在數組的其他任何位置插入元素都需要進行數組元素的頻繁移動(插入位置之後的元素都需往後移動), 時間複雜度約爲O(N);      2.數組的刪除:除了在數

原创 Socket編程實踐(9) --套接字IO超時設置方法

引:超時設置3種方案 1. alarm超時設置方法 [cpp] view plaincopy //代碼實現: 這種方式較少用   void sigHandlerForSigAlrm(int signo)  

原创 Top k 算法

Top K 算法詳解 應用場景:         搜索引擎會通過日誌文件把用戶每次檢索使用的所有檢索串都記錄下來,每個查詢串的長度爲1-255字節。         假設目前有一千萬個記錄(這些查詢串的重複度比較高,雖然總數是1千萬,

原创 Socket編程實踐(8) --Select-I/O複用

五種I/O模型介紹 (1)阻塞I/O[默認]    當上層應用App調用recv系統調用時,如果對等方沒有發送數據(Linux內核緩衝區中沒有數據),上層應用Application1將阻塞;當對等方發送了數據,Linux內核rec

原创 八大排序算法

概述 排序有內部排序和外部排序,內部排序是數據記錄在內存中進行排序,而外部排序是因排序的數據很大,一次不能容納全部的排序記錄,在排序過程中需要訪問外存。 我們這裏說說八大排序就是內部排序。          當n較大,則應採

原创 Socket編程實踐(10) --select的限制與poll的使用

select的限制 用select實現的併發服務器,能達到的併發數一般受兩方面限制: 1)一個進程能打開的最大文件描述符限制。這可以通過調整內核參數。可以通過ulimit -n(number)來調整或者使用setrlimit函數設置,

原创 Socket編程實踐(12) --UDP編程基礎

UDP特點    無連接,面向數據報(基於消息,不會粘包)的數據傳輸服務;    不可靠(可能會丟包, 亂序, 重複), 但因此一般情況下UDP更加高效; UDP客戶/服務器模型     UDP-API使用 [

原创 什麼是排序算法的穩定性

      排序算法的穩定性,通俗地講就是能保證排序前2個相等的數其在序列的前後位置順序和排序後它們兩個的前後位置順序相同。    在簡單形式化一下,如果Ai = Aj, Ai原來在位置前,排序後Ai還是要在Aj位置前。    穩

原创 Socket編程實踐(7) --Socket-Class封裝(改進版v2)

本篇博客定義一套用於TCP通信比較實用/好用Socket類庫(運用C++封裝的思想,將socket API儘量封裝的好用與實用), 從開發出Socket庫的第一個版本以來, 作者不知道做了多少改進, 每次有新的/好的想法儘量實現到該庫當

原创 C++筆試題總結(二)

16. 關聯、聚合(Aggregation)以及組合(Composition)的區別? 涉及到UML(建模語言)中的一些概念:關聯是表示兩個類的一般性聯繫,比如“學生”和“老師”就是一種關聯關係;聚合表示has-a的關係,是一種相對鬆散的

原创 學習STL map, STL set之數據結構基礎

STL map和set的使用雖不復雜,但也有一些不易理解的地方,如: 或許有得人能回答出來大概原因,但要徹底明白,還需要了解STL的底層數據結構。 C++ STL 之所以得到廣泛的讚譽,也被很多人使用,不只是提供了像vector, st