原创 對稱加密,公鑰加密,報文鑑別,https,

加密方面有兩種加密體制:對稱密鑰密碼體制,公鑰密碼體制。 公鑰加密定義 公鑰密碼體制分爲私鑰SK(secure key)和公鑰(public key),私鑰加密的可以用公鑰解密,用公鑰加密的可用私鑰解密,一般私鑰服務器自己擁有,公

原创 死鎖原因,解決,避免方法及哲學家就餐問題

死鎖的四大條件: 互斥:資源不能共享,只能由一個進程持有 佔有且等待:當一個等待另外進程而阻塞時,資源不主動釋放 不可搶佔:操作系統不能強行搶佔被進程持有的資源 循環等待:存在一個封閉的進程鏈,使得每一個進程都至少佔有下個

原创 extern c作用

extern “c” 這個是爲了cpp文件能夠調用由c語言生成的.o文件 c++源程序調用c庫 這是因爲c編譯出來的.o文件的函數命名和cpp編譯出來的函數命名不一樣, 如下,cfile.c中 int foo(int x,in

原创 C++寫HTTP服務器

這個項目底層是用Boost.Asio庫,通過正則表達式reg解析http,然後做出響應。 具體做法文末鏈接有詳細介紹,在這裏說一下這個項目得到的知識點,首先是reg正則表達式的用法 regex/regex_match/sm

原创 海量數據處理專題

100億個數排序 先將數分爲100份,即分到100個小文件中,然後逐個文件排序,最後採用多路歸併排序,寫入一個大文件中。 1 但是,這種樸素做法每次都要比較100次,才能確定當前最小值,所以,這部分可以優化,即建立一個最小堆

原创 自己實現printf

int printf(char * fmt,…) 由此可見,printf爲不定參數,難點在於如何獲取後面參數。根據函數壓棧順序: 假設參數壓棧順序爲從右到左,那arg_1爲fmt,我們從參數可以得到fmt,那麼爲了得到其

原创 elf格式詳解

elf是linux下一種常見的可執行文件格式。其內容如下: 主要包括一個64byte的elf header,一個程序頭表,一個段頭表,其餘真實有用的東西,如code section,data section等等。 先說el

原创 算法常見面試問題

常用排序 堆排序 void heapAdjust(vector<int>&v,int parent,int length){ for (int j = parent*2; j <=length; j*=2) { i

原创 B+樹以及非聚簇索引和聚簇索引

1 B樹以及B+樹 1.1 B樹 是一種多路搜索樹,假設爲M叉樹 1. 每個節點中的關鍵字,比指向兒子的指針少一,即每個節點最多有M-1個關鍵字和M個指針 2. 關鍵字集合分佈在整棵樹中,任何一個關鍵字出現

原创 linux的零拷貝技術

情景:將服務端主機磁盤中的文件不做修改地從已連接的socket發出去,我們通常用下面的代碼完成: while((n = read(diskfd, buf, BUF_SIZE)) > 0) write(sockfd, buf , n

原创 FAT32格式理解

1 硬盤結構 由上面可知,主引導記錄MBR中的分區表有4個分區項目,每個分區項可以放一個主分區,也就是表中的基本分區,或者放一個基本分區。所以系統最多有四個主分區,但是如果我們想要更多的分區的話,我們可以放擴展分區,一個擴展分區可以擴

原创 iterator_traints原理

algorithm.h中的distance函數原型如下: template <class Iterator> typename iterator_traints<Iterator>::difference_type dis

原创 fopen open函數的區別,聯繫,即相互轉化

FILE *fopen(char *filename, char *mode); int open(const char *path, int access,int mode); fopen open區別 1 open函數是linux系

原创 linux信號實現機制

進程p2向進程p1投放信號,需要經過linux內核,投放的時候,linux內核向p1的task_struct中的信號向量表中添加相應的未決信號,然後等到p1陷入內核要回到用戶態時,檢查這個信號向量表,檢查到裏面有未決信號,就從內核態跳到相

原创 信號量以及可重入與線程安全

信號量內部實現原理: 舉個例子,前臺運行某個程序的時候,我們在鍵盤輸入 Ctrl+C,就會終止這個進程,這是因爲前臺進程捕捉了這個有鍵盤傳送過來的信號,並執行了相應的處理程序,那麼什麼又是信號捕捉呢? 如果信號的處理動作是用戶自定義函數,