原创 淺析STL算法中的堆排序

堆結構簡述    瞭解過數據結構的人,應該對堆結構不陌生,堆的底層是使用數組來實現的,但卻保持了二叉樹的特性。堆分爲兩種,最大堆和最小堆,以最大堆爲例,最大堆保持了根結點大於兩個左右兩個孩子,同時所有子樹一次類推。由於堆底層是數組結構,這裏

原创 海量數據處理第二談-----位圖BitMap

位圖的概念:    在C++中,位圖是以位來表示整數的結構,普通的整數一個數需要用4個字節來表示,我們可以換種思想,在整個整數的集合範圍內,某個整數存在與否,只有兩種情況,在或者不在,那麼,我們可以考慮只用一個bit位,來表示該整數存在的狀

原创 二叉樹經典面試題

    首先給出五道關於二叉樹的面試題,題目很簡單,這裏會給出簡單分析,具體代碼,這裏只給出最優解法。    ◆找出二叉樹中最遠結點的距離    ◆由前序遍歷和中序遍歷重建二叉樹    ◆判斷一棵二叉樹是否爲完全二叉樹    ◆求二叉樹中兩

原创 Linux之信號第一談

 信號的基本概念    在Linux環境下,有一重要概念信號(signal),說它重要是因爲它在進程管理中佔有着相當重要的低位。整個進程之間的管理切換,都是通過信號的方式實現的。首先舉個簡單例子。    生活中,當我們過馬路時,總是可以看到

原创 Linux之信號第二談

重提信號概念    前一篇中提到了信號的概念,並且對信號的產生及一些屬性有了一定的認識,這一次,要從更加深入的角度看待信號。    之前提到過,當我的進程在接收到信號之前,就已經知道了,當我接收到某種信號之後就要發生某一項動作,換句話說,在

原创 Linux進程資源管理第二篇   -------- 工作及資源管理

    工作管理1、工作管理簡介 Linux中的工作管理指的是在單個登錄的終端中,同時管理多個工作的行爲。在Linux工作管理中,其實就是將當前的工作放到後臺執行。查詢當前系統中的後臺程序使用的命令是jobs。在Linux中,當某些服務啓動

原创 Linux之進程第一談

    這是一篇遲來的博客因爲最近整理的東西有點多,沒來得及發,之前寫過在Linux下關於進程管理相關的命令,這裏開始,重新聊一聊進程。重提進程概念    首先,怎麼理解進程?最簡單的話來說,我們寫一個簡單的C程序,編譯鏈接生成一個可執行文

原创 Linux之進程第二談

    前一篇說了太多的關於進程的概念,這裏不在多說,這裏我們來聊一聊進程控制。    首先,我們先來簡單看一下進程標識符。進程標識符    每個進程都有一個非負整數表示唯一的進程,叫做進程ID,只有當進程結束之後,該ID纔可以被再次使用。

原创 mysql的鎖機制

鎖概述mysql鎖機制的特點: 不同存儲引擎支持不同的鎖機制。MyISAM和MEMORY存儲引擎支持表級鎖;BDB存儲引擎採用頁面鎖;InnoDB存儲引擎支持行級鎖。表級鎖:開銷小,加鎖快,不會出現死鎖,鎖定粒度大,加鎖衝突概率最高,併發度

原创 操作系統網絡__網絡基礎(2)

    這裏要說的東西,還是建立在上一篇的TCP/IP四層模型之上的,主要討論分析協議棧的各個層包頭結構,瞭解TCP/IP數據包頭的組織形式。首先看一張圖,    這張圖反應的是數據的整個接收的流程,接下來我們就從下向上,一次說明每個包頭結

原创 libgo 源碼剖析(1. libgo簡介與調度淺談)

閒談 協程是一個很早的概念了,早些年的遊戲行業中已經大規模地在使用,像lua、go這些語言中的協程原語已經相對比較完善了,一般來說直接使用就好,但是在系統後臺開發上,出現的時間並不長。我是做C++方向的後臺開發,目前國內一些公司也開源了一些

原创 Linux下搭建版本控制器SVN

    關於版本控制器,大致可分爲集中式和分佈式兩種。    集中式的版本控制器通常會存在一箇中央服務器,主要是用來存放版本庫的,(這裏暫且先不說分支的事)當我們工作之前,首先需要從中央服務器得到一份最新版本的代碼,修改完畢之後,再次推送到

原创 Linux網絡之socket編程 (1)

    在談到socket編程之前,首先我們要知道一點預備知識。預備知識:1、網路字節序全部採用大端字節序。    關於字節序的詳解,戳鏈接 查看,這裏不做解釋。2、在編程之前,我們有必要了解,什麼是socket?    socket,又叫

原创 libgo 源碼剖析(2. libgo調度策略源碼實現)

本文將從源碼實現上對 libgo 的調度策略進行分析,主要涉及到上一篇文章中的三個結構體的定義: 調度器 Scheduler(簡稱 S) 執行器 Processer(簡稱 P) 協程 Task(簡稱 T) 三者的關係如下圖所示: 本

原创 gcc下如何主動創建並使用自己的動態庫或靜態庫

庫:本質上來說是一種可執行代碼的二進制格式,可以被載入內存中執行,分爲靜態庫和動態庫兩類。另外,需要知道的是,由於windows和Linux是兩款操作系統,因此,二者的庫是不兼容的。 靜態函數庫:後綴通常爲***.a,利用靜態庫編譯的程序有