C++知識點

#define SECONDS_PER_YEAR  (60*60*24*365)UL安全

 

#define MIN(A,B) ((A) <=(B) <= (A):(B))服務器

 

static關鍵字,靜態變量、靜態函數架構

 

Const 只讀併發

 

Volatile 告訴編譯器變量是會意外改變的,不能使用寄存器備份socket

能修飾const、指針,兩次volatile的指針值是不必定會相同的tcp

 

比特操做:函數

&  0全是0,全1纔是1spa

|  11,全0纔是0操作系統

~ 取反 10,逢01線程

^ 異或 操做相同爲0,不一樣爲1

<< 左移 左邊移動拋棄右邊補0

>> 右移 右邊的移動拋棄左邊補0

例子:A^B^B = A

 

函數模板與類模板

函數模板由函數調用時編譯器自動完成,類模板實例化時由程序顯式指定

 

Tcp/IP創建過程

三次握手:Client => Server=>等待(SYN_SEND)

  Server=>Clien=>等待(SYN_RECV)

  Client=>Server=>完成(ESTABLISHED)

 

winSock創建步驟

服務器:socker()創建套接字,綁定(bind)並監聽(listen),用accept()等待客戶端鏈接

客戶端:socker()創建套接字,鏈接(connect)服務器,鏈接上後使用send()recv(),讀寫數據,直至數據交換完畢,closesocket()關閉套接字

服務器:accept()發現有客戶端鏈接,創建一個新的套接字,自身從新開始等待鏈接。新套接字使用send()recv(),讀寫數據,直至數據交換完畢,closesocket()關閉套接字

 

selectepoll

select是全部鏈接輪詢操做,epoll是對活躍鏈接操做;select最大量接受操做系統內核限制,epoll不是;

 

動態連接庫

載入時相似於本地函數明確調用則須要dlllib描述文件;運行時動態連接能夠經過LoadLibraryLoadLibraryEx載入DLL

 

C++面向對象的三個基本特徵

封裝、繼承、多態(實現方式覆蓋和重載)

 

純虛函數和虛函數

純虛函數vitual func() = 0,構建的類不能生成實例,抽象類,只能用做基類

 

友元函數的優缺點

有點:能直接訪問類的私有保護對象,提高效率

缺點:破壞了類的封裝,有安全漏洞

 

線程和進程

線程是最小的執行單元,一個進程包含多個線程進程有獨立的地址空間,進程崩潰對其餘進程沒影響;線程有本身的堆棧和局部變量,沒有單獨的地址空間,一個線程死掉進程就會出現問題;進程切換耗費的資源比線程切換大;

 

進程間通訊

無名管道(pipe)、高級管道(popen)、有名管道(named pipe)、信號量、消息隊列、信號、共享內存、Socket

 

線程間通訊

全局變量、消息隊列、臨界區、互斥區、事件、信號量

 

進程和線程同步方式

臨界區、互斥區、事件、信號量

 

tcpudp區別

Tcp傳輸控制協議須要創建可靠地鏈接,三次握手,速度慢;

Udp:用戶數據報協議,不與對方創建鏈接直接發送數據,可靠性差,速度快;

 

tcp/ip的狀態

TCP鏈接:

1.CLOSED2.LISTEN3.SYN_SENT4.SYN_RCVD5.ESTABLISHED

TCP關閉

1.FIN_WAIT_12.FIN_WAIT_23.CLOSE_WAIT4.LAST_ACK5.CLOSING6.TIME_WAIT

 

程序何時應該使用線程,何時單線程效率高

1.耗時的操做使用線程,提升應用程序響應 

2.並行操做時使用線程,如C/S架構的服務器端併發線程響應用戶的請求。

3.多CPU系統中,使用線程提升CPU利用率 

4.改善程序結構。一個既長又複雜的進程能夠考慮分爲多個線程,成爲幾個獨立或半獨 立的運行部分,這樣的程序會利於理解和修改。 其餘狀況都使用單線程。

相關文章
相關標籤/搜索