原创 從零開始構建一個服務器【2】

服務器的目標是爲了服務大量用戶,但是在【1】中所寫的最基本的服務器很顯然無法滿足這種要求。 因此,我們引入了multiplexing技術,也就是所謂的IO多路複用。 Linux下的IO多路複用技術有三種,select,poll,e

原创 lamp環境輕鬆搞定

wget http://mirrors.linuxeye.com/lnmp-full.tar.gz tar xzf lnmp-full.tar.gz cd lnmp 一把梭就裝好了~

原创 從零開始構建一個服務器【1】

風起於青萍之末,浪成於微瀾之間,每個龐大複雜的系統,皆起始於一個最簡單的,最細微的地方。 從這裏開始,我將會從一個最基本的服務器開始梳理,用於夯實自己的基礎。 這裏所講述的一切服務器內容,皆始於Linux操作系統之上,因爲現在的主

原创 異步日誌組件的實現

當我們的程序運行到線上,或者說它處於一個我們無法調試,或者不方便調試的狀態下,日誌有助於我們查看當前程序的運行狀態,幫我們排除故障。也可以幫我們記錄服務器運行的記錄,從而可以還原一些處理過的關鍵信息,可以幫助我們避免一些無法查證的

原创 本地倉庫關聯已經有的遠端git倉庫

網上教程關聯遠端倉庫都雜七雜八的,說什麼的都有,但是多多少少都有一些坑需要填,這裏寫一些自己用的比較方便的東西。 這個東西需要一下幾點情況可以適用: 本地已經安裝過git 遠程倉庫已經建立過了 然後你要做的就是,創建一個密鑰:

原创 Linux的線程——輕進程

進程類似於人生:它們被產生,有或多或少有效的生命,可以產生一個或多個子進程,最終都要死亡。一個微小的差異是進程之間沒有性別差異——每個進程都只有一個父親。那麼,操作系統有一個重要的概念——線程,在Linux上是怎麼實現的呢?可以明

原创 希爾排序

希爾排序(Shell Sort) 希爾排序又稱“縮小增量排序”。其基本思想在於先將整個待排序列分割成若干子序列,對子序列進行直接插入排序,然後依次縮減增量再進行排序,待整個序列中的元素基本有序(增量足夠小),再對全體元素進行一次

原创 搜索結構之哈希

哈希表是一種非常重要的數據結構,甚至可以說是查詢方面最快的數據結構了! 與其他數據結構相比,哈希表不需要比較查找,而是通過某種哈希函數直接找到目標位置。 向哈希表中插入元素,只需得到該元素的關鍵碼,以此計算元素的存儲位置進行存放

原创 二叉搜索樹

二叉搜索樹又稱二叉排序樹,它可以是一棵空樹,如果不爲空,則具有以下性質: 左子樹不爲空,則左子樹上的所有結點都小於根節點的值。 右子樹不爲空,則右子樹上的所有結點都大於根節點的值。 二叉搜索樹完整代碼 先來看看基本操作(.h頭

原创 Git衝突:commit your changes or stash them before you can merge.

有時候,git pull代碼的時候會發生衝突。 通常有這麼幾種情況: 你改了代碼,沒提交,衝突了 服務器更新了代碼,和本地的衝突了 你改了,服務器也改了,衝突了 那如何解決呢?git提供了這樣一種方案 git stash gi

原创 插入排序

插入排序: 插入排序,每一步將一個新的元素插入到前面已經排好序的一組元素的合適位置上去,直到全部元素插入爲止。 插入排序比較適合的場景是元素已經接近有序,這樣的場景下插入排序的效率較高。 最優情況下:時間複雜度可達到O(N

原创 Linux下的進程和進程間的狀態轉換

在我們的計算機層次結構中,操作系統是處於一個承上啓下的層次。如下圖~ 在計算機中,操作系統的定位是一個管理者,對上管理在系統中運行的進程,對下通過驅動程序管理各種硬件。 說到進程,首先得稍微解釋一下,什麼叫做程序。 程序:程序是以

原创 堆的基本操作

首先堆是一棵完全二叉樹,其次堆分大頂堆和小頂堆。 大頂堆的堆頂,也就是根節點,其值大於左孩子的值且大於右孩子的值,左右孩子的大小不做區分,其子樹滿足這一性質。 小頂堆的堆頂,也就是根節點,其值小於左孩子的值且小於右孩子的值,左

原创 Redis源碼剖析之簡單動態字符串

Redis是一個開源的key-value存儲系統,現代軟件的很多場景都需要使用這種類似的內存數據庫,因此對Redis的深入瞭解是非常有必要的。 本篇文章主要是通過閱讀黃健宏老師的《Redis設計與實現》來記錄自己的學習進度和加以總

原创 模擬實現命令解釋器shell

shell的字面翻譯是殼,所以在Linux中有時也被稱爲外殼程序,主要功能是用來進行用戶與內核之間的交互,他接收用戶的命令送給內核去執行。 今天來模擬實現一下Linux下的命令行解釋器shell的部分功能,在此運用到主要的知識點