原创 位運算相關總結

按位與運算符(&)參加運算的兩個數據,按二進制位進行“與”運算運算規則:兩位同時爲1結果才爲1,否則爲0. 負數按補碼形式參加按位與運算“與運算”的特殊用途:(1)清零。如果想將一個單元清零,即使其全部二進制位爲0,只要與一個各位都爲0的

原创 斐波那契數列相關整理(非遞歸)

我們在平時的做題中遇到了很多關於斐波那契數列相關的問題。當我們遇到這類問題時,根據數列的特點F(n)=F(n-1)+F(n+1)。會很容易想到遞歸的方法,對於數字較小的情況下,遞歸是沒有問題的,但是當遇到數字過大的時候,處理效率就會變得非

原创 在linux下實現簡單聊天系統(三)服務器

我們在在一個主線程進行創建監聽套接字,創建線程個數個雙向管道(用雙向管道因爲消息發送是全雙工的),創建cpu內核個數-1個子線程,利用libevent監聽監聽套接字和雙向管道的一端,接受客戶端連接,爲客戶端選擇處理消息的子線程。 在子線程

原创 (讀書隨筆)-編譯和鏈接知識梳理

我們在編寫代碼時,往往編譯和運行一氣呵成,但我們很少知道編譯器的處理操作。例如像"hello world"程序在linux下,用GCC來編譯時,只需要最簡單的命令(假設源代碼文件名爲hello.c) gcc hllo.c ./a.out

原创 進程虛擬地址空間

首先我們要知道爲什麼要使用虛擬內存呢? 是因爲物理內存空間有限,虛擬內存用硬盤空間做內存來彌補計算機RAM空間的缺乏。當實際RAM滿時(實際上,在RAM滿之前),虛擬內存就在硬盤上創建了。當物理內存用完後,虛擬內存管理器選擇最近沒有用過的

原创 在linux下實現簡單聊天系統(二)客戶端的具體實現

客戶端實現的具體內容:利用多線程實現,採取輸入命令的方式讓用戶選擇服務類型,根據不同的服務類型調用不同的處理函數,完成請求,利用json和自定義的上層協議完成和服務器端的數據的交互。在登陸成功之後啓動一個線程用於接受服務器端的消息。通過s

原创 linux下的malloc底層剖析總結

今天在看了網上一些大神的malloc底層剖析後,自己想對其做一個總結和梳理。 首先我們都知道malloc()申請內存是在堆上進行的,並且需要我們主動進行free()釋放,如果不釋放的話,就會產生內存泄漏的問題。 而在棧區上是由編譯器自動

原创 在linux下實現簡單聊天系統(一)項目基本框架內容

項目主要實現的功能:註冊,登陸,獲取好友列表,一對一聊天,消息羣發,離線消息緩存,下線。需要的工具:libevent,json,mysql,memcached開發平臺:vmware基本項目思路:         客戶端:利用多線程實現,採

原创 聊天項目引發的思索

1.socket_pair的實現方式?2.什麼是I/O的同步異步,什麼是網絡的同步異步?3.解釋什麼是I/O複用?4.libevent底層實現5.如果沒有I/O複用如何實現併發?6.tcp/ip協議配合json會出現什麼問題?如何解決驚羣