操做系統
1.select,poll和epoll
其實全部的I/O都是輪詢的方法,只不過實現的層面不一樣罷了.
這個問題可能有點深刻了,但相信能回答出這個問題是對I/O多路複用有很好的瞭解了.其中tornado使用的就是epoll的.
selec,poll和epoll區別總結
基本上select有3個缺點:
1.鏈接數受限
2.查找配對速度慢
3.數據由內核拷貝到用戶態
poll改善了第一個缺點
epoll改了三個缺點.
關於epoll的: http://www.cnblogs.com/my_life/articles/3968782.html
2.調度算法
1.先來先服務(FCFS, First Come First Serve)
2.短做業優先(SJF, Shortest Job First)
3.最高優先權調度(Priority Scheduling)
4.時間片輪轉(RR, Round Robin)
5.多級反饋隊列調度(multilevel feedback queue scheduling)
實時調度算法:
1.最先截至時間優先 EDF
2.最低鬆弛度優先 LLF
3.死鎖
緣由:
1.競爭資源
2.程序推動順序不當
必要條件:
1.互斥條件
2.請求和保持條件
3.不剝奪條件
4.環路等待條件
處理死鎖基本方法:
1.預防死鎖(摒棄除1之外的條件)
2.避免死鎖(銀行家算法)
3.檢測死鎖(資源分配圖)
4.解除死鎖
1.剝奪資源
2.撤銷進程
4.程序編譯與連接
推薦: http://www.ruanyifeng.com/blog/2014/11/compiler.html
Bulid過程能夠分解爲4個步驟:預處理(Prepressing), 編譯(Compilation)、彙編(Assembly)、連接(Linking)
以c語言爲例:
1 預處理
預編譯過程主要處理那些源文件中的以「#」開始的預編譯指令,主要處理規則有:
1.將全部的「#define」刪除,並展開所用的宏定義
2.處理全部條件預編譯指令,好比「#if」、「#ifdef」、 「#elif」、「#endif」
3.處理「#include」預編譯指令,將被包含的文件插入到該編譯指令的位置,注:此過程是遞歸進行的
4.刪除全部註釋
5.添加行號和文件名標識,以便於編譯時編譯器產生調試用的行號信息以及用於編譯時產生編譯錯誤或警告時可顯示行號
6.保留全部的#pragma編譯器指令。
2 編譯
編譯過程就是把預處理完的文件進行一系列的詞法分析、語法分析、語義分析及優化後生成相應的彙編代碼文件。這個過程是整個程序構建的核心部分。
3 彙編
彙編器是將彙編代碼轉化成機器能夠執行的指令,每一條彙編語句幾乎都是一條機器指令。通過編譯、連接、彙編輸出的文件成爲目標文件(Object File)
4 連接
連接的主要內容就是把各個模塊之間相互引用的部分處理好,使各個模塊能夠正確的拼接。
連接的主要過程包塊 地址和空間的分配(Address and Storage Allocation)、符號決議(Symbol Resolution)和重定位(Relocation)等步驟。
5.靜態連接和動態連接
靜態連接方法:靜態連接的時候,載入代碼就會把程序會用到的動態代碼或動態代碼的地址肯定下來
靜態庫的連接可使用靜態連接,動態連接庫也可使用這種方法連接導入庫
動態連接方法:使用這種方式的程序並不在一開始就完成動態連接,而是直到真正調用動態庫代碼時,載入程序才計算(被調用的那部分)動態代碼的邏輯地址,而後等到某個時候,程序又須要調用另外某塊動態代碼時,載入程序又去計算這部分代碼的邏輯地址,因此,這種方式使程序初始化時間較短,但運行期間的性能比不上靜態連接的程序
6.虛擬內存技術
虛擬存儲器是值具備請求調入功能和置換功能,能從邏輯上對內存容量加以擴充的一種存儲系統.
7.分頁和分段
分頁: 用戶程序的地址空間被劃分紅若干固定大小的區域,稱爲「頁」,相應地,內存空間分紅若干個物理塊,頁和塊的大小相等。可將用戶程序的任一頁放在內存的任一塊中,實現了離散分配。
分段: 將用戶程序地址空間分紅若干個大小不等的段,每段能夠定義一組相對完整的邏輯信息。存儲分配時,以段爲單位,段與段在內存中能夠不相鄰接,也實現了離散分配。
分頁與分段的主要區別
1.頁是信息的物理單位,分頁是爲了實現非連續分配,以便解決內存碎片問題,或者說分頁是因爲系統管理的須要.段是信息的邏輯單位,它含有一組意義相對完整的信息,分段的目的是爲了更好地實現共享,知足用戶的須要.
2.頁的大小固定,由系統肯定,將邏輯地址劃分爲頁號和頁內地址是由機器硬件實現的.而段的長度卻不固定,決定於用戶所編寫的程序,一般由編譯程序在對源程序進行編譯時根據信息的性質來劃分.
3.分頁的做業地址空間是一維的.分段的地址空間是二維的.
8.頁面置換算法
1.最佳置換算法OPT:不可能實現
2.先進先出FIFO
3.最近最久未使用算法LRU:最近一段時間裏最久沒有使用過的頁面予以置換.
4.clock算法
9.邊沿觸發和水平觸發
邊緣觸發是指每當狀態變化時發生一個 io 事件,條件觸發是隻要知足條件就發生一個 io 事件
數據庫
1 事務
數據庫事務(Database Transaction) ,是指做爲單個邏輯工做單元執行的一系列操做,要麼徹底地執行,要麼徹底地不執行。
2 數據庫索引
推薦: http://tech.meituan.com/mysql-index.html
MySQL索引背後的數據結構及算法原理
彙集索引,非彙集索引,B-Tree,B+Tree,最左前綴原理
3 Redis原理
4 樂觀鎖和悲觀鎖
悲觀鎖:假定會發生併發衝突,屏蔽一切可能違反數據完整性的操做
樂觀鎖:假設不會發生併發衝突,只在提交操做時檢查是否違反數據完整性。
5 MVCC
6 MyISAM和InnoDB
MyISAM 適合於一些須要大量查詢的應用,但其對於有大量寫操做並非很好。甚至你只是須要update一個字段,整個表都會被鎖起來,而別的進程,就算是讀進程都沒法操做直到讀操做完成。另外,MyISAM 對於 SELECT COUNT(*) 這類的計算是超快無比的。
InnoDB 的趨勢會是一個很是複雜的存儲引擎,對於一些小的應用,它會比 MyISAM 還慢。他是它支持「行鎖」 ,因而在寫操做比較多的時候,會更優秀。而且,他還支持更多的高級應用,好比:事務。