原创 線程的共享資源和私有資源

線程共享的環境包括:進程代碼段、進程的公有數據(利用這些共享的數據,線程很容易的實現相互之間的通訊)、進程打開的文件描述符、信號的處理器、進程的當前目錄和進程用戶ID與進程組ID。     進程擁有這許多共性的同時,還擁有自己的個性。有

原创 快速排序遇到的問題

好久沒有複習一些基礎知識了,正好要找實習了,就想複習一下一些基礎的算法。想自己把這些簡單算法實現一下,沒想到首先在快排這兒遇到問題了。剛開始我的快排代碼是這樣的: void swap(int &a, int &b) { int tem

原创 MySQL索引背後的數據結構及算法原理

摘要 本文以MySQL數據庫爲研究對象,討論與數據庫索引相關的一些話題。特別需要說明的是,MySQL支持諸多存儲引擎,而各種存儲引擎對索引的支持也各不相同,因此MySQL數據庫支持多種索引類型,如BTree索引,哈希索引,全文索引

原创 高性能服務器架構

引言 本文檔的目的是爲了同大家分享多年來我在開發一種特定類型的應用時形成的一些觀點,而“服務器”只是對這類應用程序的一個不是那麼恰如其分的稱謂。更準確的說,我將描述的是一大類的程序,這類程序的設計使得它們能夠在每秒鐘內處理數量十分

原创 什麼是堆和棧,它們在哪兒?

問題描述 編程語言書籍中經常解釋值類型被創建在棧上,引用類型被創建在堆上,但是並沒有本質上解釋這堆和棧是什麼。我僅有高級語言編程經驗,沒有看過對此更清晰的解釋。我的意思是我理解什麼是棧,但是它們到底是什麼,在哪兒呢(站在實際的計算機物

原创 理解MySQL——索引與優化

寫在前面:索引對查詢的速度有着至關重要的影響,理解索引也是進行數據庫性能調優的起點。考慮如下情況,假設數據庫中一個表有10^6條記錄,DBMS的頁面大小爲4K,並存儲100條記錄。如果沒有索引,查詢將對整個表進行掃描,最壞的情況下,如果

原创 LeetCode_Word Ladder

原題: Given two words (start and end), and a dictionary, find the length of shortest transformation sequence from start

原创 spin_lock & mutex_lock的區別?

本文由該問題引入到內核鎖的討論,歸納如下 爲什麼需要內核鎖? 多核處理器下,會存在多個進程處於內核態的情況,而在內核態下,進程是可以訪問所有內核數據的,因此要對共享數據進行保護,即互斥處理 有哪些內核鎖機制? (1)原子

原创 推薦 10 個 C 語言開源項目

1. Webbench Webbench是一個在linux下使用的非常簡單的網站壓測工具。它使用fork()模擬多個客戶端同時訪問我們設定的URL,測試網站在壓力下工作的性能,最多可以模擬3萬個併發連接去測試網站的負載能力。Web

原创 APUE——線程

1.一個進程中的所有線程都可以訪問該進程的組成部件,如文件描述符和內存。線程也包含了表示進程內執行環境必須的信息,包括線程ID、一組寄存器值、棧、調度優先級和策略、信號屏蔽字、error變量及線程私有數據。 2.線程ID只在它所屬的進程環

原创 APUE——信號

1.信號概念:信號是事件驅動的軟件中斷機制。每個信號名字都以三個字符SIG開頭,在<signal.h>中被定義爲正整數。 2.對信號所採取的動作有忽略(SIG_IGN)、按系統默認(SIG_DFL)、自定義信號捕捉函數三種處理方式。進程調

原创 InnoDB與Myisam的六大區別

MyISAM      InnoDB      構成上的區別:      每個MyISAM在磁盤上存儲成三個文件。第一個文件的名字以表的名字開始,擴展名指出文件類型。   .frm文件存儲表定義。   數據文件的擴展名爲.MYD (

原创 無特殊需求下Innodb建議使用與業務無關的自增ID作爲主鍵

在無特殊需求的情況下,建議使用與業務無關的自增ID作爲主鍵(針對innodb)    InnoDB引擎使用聚集索引,數據記錄本身被存於主索引(一顆B+Tree)的葉子節點上。這就要求同一個葉子節點內(大小爲一個內存頁或磁盤頁)的各條數

原创 A* Pathfinding for Beginners

Updated July 18, 2005This article has been translated into Albanian, Chinese, French, German, Portuguese, Russian, and

原创 MySQL主從複製原理以及架構

1 複製概述       Mysql內建的複製功能是構建大型,高性能應用程序的基礎。將Mysql的數據分佈到多個系統上去,這種分佈的機制,是通過將Mysql的某一臺主機的 數據複製到其它主機(slaves)上,並重新執行一遍來實現的。