原创 回射客戶-服務器模型(2)

在上一節“回射客戶-服務器模型(1)”中存在下面幾個問題。 1.就是當服務器斷開再立即重新開啓時,需要重新綁定地址,而此時的服務器處於TIME_WAIT狀態,在這種狀態下,它是無法立即重新綁定的。 那麼這種情況下,我們可以使用SO_RE

原创 線程同步—條件變量和信號量

上一節提到了線程互斥和同步的概念,並且給出了兩種用於解決共享資源互斥的利器:互斥鎖和讀寫鎖。那麼本節將介紹兩種用於解決線程同步的概念:條件變量和信號量。 一. 條件變量 1.基本概念 互斥鎖的缺點是它只有兩種狀態:鎖定和非鎖定。而條件變

原创 經典動態規劃問題總結

動態規劃引入 首先我們以一個最基本的例子來分析——菲波那切數列。 我們都知道,菲波那切數列的遞推公式f(n) = f(n-1)+f(n-2) (這裏我就說明一般情況,不列舉邊界條件了),很簡單,如果我們用遞歸的方法來求解f(n),兩三行代

原创 C++的運算符重載

  C++中預定義的運算符的操作對象只能是基本數據類型。但實際上,對於許多用戶自定義類型(例如類),也需要類似的運算操作。這時就必須在C++中重新定義這些運算符,賦予已有運算符新的功能,使它能夠用於特定類型執行特定的操作。運算符重載的實

原创 C/C++中volatile關鍵字詳解

1.爲什麼用volatile? c/c++中的volatile關鍵字和const對應,用來修飾變量,通常用於建立語言級別的memory barrier。這是BS在“The C++ Programming Language”對volati

原创 最長無重複字符子串

給定一個字符串,求出其最長的無重複的字符子串的長度。 例:給定字符串str = “abcdahisjgdb”,則其最長無重複子串爲“bcdahisjg”,長度爲9。 思路:我們遍歷字符串,計算以每一個字符開頭的所有無重複子串的長度,最後

原创 環形鏈表插值

在一個環形單鏈表中插入一個值爲val的結點,使得插入後的鏈表仍然有序。 分析:我們設置兩個指針,分別指向鏈表中的某一個結點和下一個結點,如果val的值在其中間,則將對應結點插入這兩個結點中間,如果val的值比所有的結點值都大,則插入在頭

原创 字符串—空格替換

題目:請實現一個函數,把字符串中的每個空格圖化成“%20”。例如輸入“We are happy.”,則輸出“We%20are%20happy.”。 分析:有兩種情形。一種是直接在原來的字符串上進行修改,從頭到尾依次遍歷每一個字符,當遇到空

原创 字符串拼接最小字典

給定一個字符串數組,找到一種拼接順序,使得所有小字符串拼接成的大字符串在所有可能的拼接中字典序最小。 例如:給定strArr = {"bac", "bd"},n = 2。則有兩種拼接順序bacbd和bdbac,顯然第一種拼接的字典序要小於

原创 排序數組中的相鄰兩數最大差值

給定一個數組A及其大小n,求其排序後的相鄰兩數的最大差值。(注:要求時間複雜度爲O(n)) 思路:題目要求對排序後的數組進行操作,顯然需要先對數組進行排序。如果沒有要求時間複雜度,那麼可以有很多種排序算法,如快速排序、堆排序、歸併排序等

原创 進程間的通信

進程通信是指進程之間的信息交換。PV操作是低級通信方式,高級通信方式是指以較高的效率傳輸大量數據的通信方式。高級通信方法主要有以下三類。 共享存儲 在通信的進程之間存在一塊可以直接訪問的共享空間,通過對這片共享空間進行寫/讀操作實現進程之

原创 二維數組中的查找

題目:在一個二維數組中,每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成一個函數,輸入這樣的一個二維數組和一個整數,判斷數組中是否含有該整數。 分析:按照常規思路,我們對數組中的每一個數進行遍歷,那麼複雜度是

原创 Linux用戶空間和內核空間詳解

Linux驅動程序一般工作在內核空間,但也可以工作在用戶空間。下面我們將詳細解析什麼是內核空間,什麼是用戶空間,以及如何判斷它們。 Linux簡化了分段機制,使得虛擬地址與線性地址總是一致,因此,Linux的虛擬地址空間也爲0~4G。Li

原创 Ubuntu使用apt-get upgrade升級時出錯

今天在按照常規的sudo apt-get update更新軟件列表後,再使用sudo apt-get upgrade升級軟件時,出現了以下的錯誤: 正在設置 linux-image-extra-4.4.0-97-generic (4.4.

原创 牛課網--直通BAT面試算法精講課--送優惠碼啦

直通BAT面試算法精講課專屬優惠碼:AqjvtPi。通過該優惠碼報名,可立減10元!  http://www.nowcoder.com/courses/1?coupon=AqjvtPi