目錄:git
1.《計算機的早期歷史》
2.《電子計算機》
3.《布爾邏輯和邏輯門》
4.《二進制》
5.《算數邏輯單元》
6.《寄存器和內存》
7.《中央處理器CPU》
8.《指令和程序》
9.《高級CPU設計》
10.《早期的編程方式》
11.《編程語言發展史》
12.《編程原理-語句和函數》
13.《算法入門》
14.《數據結構》
15.《阿蘭圖靈》
16.《軟件工程》
17.《集成電路與摩爾定律》
18.《操做系統》
20.《文件系統》
21.《壓縮》
22.《命令行界面》
23.《屏幕&2D圖形顯示》
24.《冷戰和消費主義》
25.《我的計算機革命》
26.《用戶圖形界面》
27.《3D圖形》
28.《計算機網絡》
29.《互聯網》
30.《萬維網》
31.《計算機安全》
32.《黑客與攻擊》
33.《加密》
34.《機器學習與人工智能》
35.《計算機視覺》
36.《天然語言處理》
37.《機器人》程序員
1.《計算機的早期歷史》
設備進化過程:算盤-> 步進計算器->差分機 ->分析機 ->打孔卡片製表機
最先的計算設備是算盤,漸漸地善於計算的人被叫作computer;後來computer從指代職業變成指代機器。
有名的步進計算器,是第一個能夠作加減乘除的機器(乘除能夠用加減表示)。
炮彈爲了精準,要計算彈道,二戰是查表來作(相似咱們的乘法口訣表),但每次更改設計就須要作一張新表。
Charles Babbage提出了「差分機」,在構造差分機期間,想出了分析機,分析機是通用計算機。
Lovelace給分析機寫了假想程序(她預測在將來會有一門專門的語言能夠進行專業的分析),所以成爲了第一位程序員。
人口普查10年一次,Herman Hollerith的打孔卡片製表機大大提高了效率。github
2.《電子計算機》
設備的演變:繼電器->真空管 ->晶體管
20世紀的發展要求更強的計算能力,櫃子大小的計算機發展到房間大小。
哈佛Mark 1號,IBM 1944年作出來。
繼電器1秒最多50次開關,而且極易損壞,差很少半天損壞一個;而且容易招惹小蟲子(bug)。
1904年,熱電子管出現,這是第一個真空管。它經過控制電子來工做,改進功能後表現的和繼電器功能同樣,但速度更快。
「巨人1號」計算機在英國 布萊切利園 首次大規模使用真空管,但編程麻煩,還要配置。
1946年,賓夕法尼亞大學的ENIAC是第一個通用可編程計算機。
1947年,爲了下降成本和提升穩定性與速度,貝爾實驗室作出了晶體管,晶體管有諸多好處,IBM很快全面轉向晶體管。
晶體管就像繼電器或真空管,它是一個開關,能夠由控制路線來控制開或關。晶體管有兩個電極,電極之間有一種材料隔開它們,這種材料有時候導電,有時不導電,這叫
半導體。控制線連到一個「門」電極,經過改變一個門的電荷,咱們能夠控制半導體材料的導電性。來容許或不容許電流流動。晶體管是固態的,體積比前二者小不少,使得計算機變得小而便宜。
硅谷有不少硅,不少晶體管和半導體都是在這裏作的。
肖克利半導體->仙童半導體 ->英特爾算法
3.《布爾邏輯和邏輯門》
當事件只有true和false兩種狀態時,能夠考慮用0和1表示假或真,即用二進制來表示。
布爾邏輯具備三個基本操做:NOT/AND/OR
XOR表明異或,它們用於設計電路,從而造成處理器的底層邏輯。編程
4.《二進制》
用0和1來表示,基數爲2,逢二進一。
一位1或0表明1bit(位)
8bit=1byte,1字節(byte)最多有2^8=256個值
1kb=1024b=1024*8bit
計算機分爲32bit和64bit,64位能儲存2^64次方的數值,至關大。計算機一般用第一位表明正負,0爲-,1爲+。數組
5.《算數邏輯單元》
算數邏輯單元,簡稱ALU,最先一款是英特爾作的74181;
ALU有2個單元,1個算數單元和1個邏輯單元。
算術單元:半加器(處理1個bit,2個輸入)、全加器(處理1個bit,3個輸入)、8bit加法(1個半加器,7個全加器)
邏輯單元:檢測數字是否爲0的電路(一堆OR門最後加個NOT門)、ALU被抽象成一個V符號使用(接受2位輸入,輸入8位結果)、Flags標誌(判斷overflow、zero、negative等等)緩存
6.《寄存器和內存》
鎖存器(Gated Latch)每次存一位;寄存器(Register)每次存8位。16*16的矩陣存256位。
數據選擇器/多路複用器(Multiplexer)解碼8位地址,定位到單個鎖存器中。前四位表明行,後四位表明列。
一條1980年代的1M大小的內存由8個模塊組成,每一個模塊有32個小方塊,每一個小方塊有4個小塊,每小塊是128位*64位。安全
7.《中央處理器CPU》
CPU組成:RAM+寄存器+ALU
CPU如何執行命令:取指令->解釋 ->執行
首先,有一個指令表,表的屬性有:Instruction/Description/4-Bit Opcode/Address or Registers.
取指令階段(FETCH PHASE):RAM中存着指令;將指令地址寄存器連到RAM,從00000000開始取值,每週期+1,對應到RAM裏取址;所取相應地址的指令值存儲在指令寄存器中。
解碼階段(DECODE PHASE):指令寄存器中的值,假設爲‘00101110’,前4位0010去指令表查對應操做指令。後4位1110是RAM的地址,需轉爲10進制。接下來,指令由控制單元(ALU)進行解碼。
執行階段(EXECUTE PHASE):用檢查指令的電路,打開RAM的「容許讀取線」,把地址傳過去,RAM拿到值後存儲進Data裏,最後放入指令指定的寄存器中。此時把指定地址寄存器值+1,執行階段(此週期)完成。服務器
8.《指令和程序》
隨機存取存儲器(random access memory,RAM):又稱做「隨機存儲器」,是與CPU直接交換數據的內部存儲器,也叫主存(內存)。
CPU是硬件,但它配合RAM執行一系列的指令。指令和數據都是存在同一個內存裏的(eg:00101110,即Load_A 14)。但Halt指令沒有地址數據。
軟件能作到硬件作不到的事。ALU沒有除法功能,是除法程序馥賦予了此功能。沒有硬件,軟件跑不了;沒有軟件,硬件能力有限。在硬件基礎上開出軟件之花,軟件最美的,在於一層層抽象。
CPU的指令和數據地址都在一塊兒,後4位表明地址;但4位二進制只有16個地址,則只能操做16個地址。現代CPU有兩種策略:
1、用更多的位來表明指令,好比32位或64位,這叫「指令長度」;
2、實行「可變指令長度」,好比,有的CPU用8位長度操做碼(這叫「當即值」),有的用4位。這樣設計指令能夠是任意長度,但會讓讀取階段(fetch cycle)複雜一點點。網絡
9.《高級CPU設計》
早期爲提高CPU速度,方法是加快晶體管切換速度。
CPU有專門的除法電路+其餘電路來作複雜操做,用來處理遊戲、視頻解碼等工做。
現代提高CPU性能的方法:
1、緩存
爲了提升CPU的存取速度,在CPU內部裝了一塊緩存,一般只有幾M左右大小,用來從RAM中整塊整塊提取數據,並在CPU中處理。
緩存裏每塊空間有一個特殊的標記,叫「髒位(dirty bit)」。當緩存中的內容被CPU改寫時,RAM須要同步更新。所以,同步通常發生在緩存滿了而CPU又要緩存時,在清理緩存騰出空間以前,會先檢查髒位。若是是髒的,在加載新內容以前,會把數據寫回RAM。
2、指令流水線
取指令->解碼 ->執行不斷重複,但每階段用的是CPU的不一樣部分,所以能夠並行處理。執行一個指令,同時解碼下一個指令,同時讀取下下個指令。但問題是,不一樣指令間存在依賴關係。所以,流水線處理器要先弄清楚指令間的依賴關係,必要時中止流水線,避免出現問題。高端CPU,會進一步動態排序有依賴關係的指令,最小化流水線停工時間。這叫「亂序執行。」第2個問題是,條件跳轉(jump功能),這些指令會改變程序的執行流。高端CPU會把jump當作岔路口,而後猜哪條路的可能性大一些,而後提早把指令放進流水線,這叫「推測執行」。若是猜錯了,CPU再清空流水線。爲了提高正確率,CPU的開發商開發了複雜的算法,叫「分支預測」,來猜想哪條分支更有可能。
3、多核處理器
同時運行多個指令流,即在一個CPU芯片裏,有多個獨立處理單元(core一、core2...)。它們共享資源,好比緩存,使得多核能夠合做運算;多核不夠時,能夠用多個CPU。
10.《早期的編程方式》
打孔紙卡->插線板 ->面板撥開關
插線板也即控制面板,上面插不少線。運行不一樣的程序要從新接線。
11.《編程語言發展史》
編程:二進制->助記符(彙編器) ->A-0(編譯器) ->FORTRAIN
新語言:
1960年代:ALGOL, LISP, BASIC
1970年代:Pascal, C, Smalltalk
1980年代:C++, Objective-C, Perl
1990年代:Python, Ruby, Java
2000年代:Swift, Go
12.《編程原理-語句和函數》
變量、賦值語句
判斷、條件、循環、函數、算法
13.《算法入門》
算法在平常生活中被普遍應用,現已經是計算機科學的重要組成部分,它影響着咱們的網絡世界。
應用示例:
排序算法:郵件列表按時間更新排序;網頁按關聯度大小排序...現有排序算法達上百種,選擇排序、冒泡排序、歸併排序...
圖算法:高德地圖算最短距離(Dijkstra)。
14.《數據結構》
數組、字符串、矩陣、結構體、指針、節點、鏈表、隊列、棧、樹、二叉樹、圖...紅黑樹、堆
15.《阿蘭圖靈》
圖靈嘗試解決由德國科學家提出的可斷定性問題,即有沒有一個機器,你問一個問題,它能回答是或不是。爲此,圖靈創造出了圖靈機模型。
阿隆佐邱奇發明了lambda算子來嘗試解決這一問題。
圖靈用圖靈機很好的解決了「停機問題」,並認爲這是一個悖論。同時揭示,計算機並不能完美解決全部問題。
二戰期間,圖靈在布萊切利園破解了德國英格瑪加密機。
圖靈測試:圖靈提出,若是計算機能欺騙人類相信它是人類,纔算是只能。這被認爲是智能測試的基礎,圖靈所以被認爲是人工智能之父。
16.《軟件工程》
對象:包括對象、函數和變量。
面向對象編程:須要什麼對象,僅負責此對象的功能實現,而不用管整個項目的進程。
應用程序接口(Application Programming Interface,API):方便別的項目組高效調用咱們的成果,須要爲咱們的程序建立一個接口,便於其餘團隊使用。
集成開發環境(Intergrated Development Environment,IDE):涵蓋了不少功能,包括開發、調試、測試etc
文檔和註釋:readme、comment,方便別人理解你的代碼
版本控制(Version Control):github同樣,便於多人協做
質量控制(Quality Assurance testing,QA):測試、驗證程序的可行性
軟件在正式發佈前有beta版本,供少部分大衆公開測試使用,已儘量地發現問題;在此以前還有一個alpha版本,很是粗糙,僅在公司內部內測。
17.《集成電路與摩爾定律》
這章難度有點大,重點是晶圓的製做流程:光刻。還須要看更多的資料,先記錄一下主要知識點:
分立元件(Discrete components)
數字暴政(Tyranny of Numbers):若是想增強電腦性能,就須要更多部件,這致使更多線路,更復雜,因此很難作。
光刻(photolithography)
晶圓(wafer)
光刻膠(photoresist)
光掩模(photomask)
摻雜(doping)
摩爾定律(Moore's law)
摩爾定律的總結:進一步小型化會遇到2個問題:1.光的波長不足以製做更精細的設計;2.量子隧穿效應
18.《操做系統》
操做系統鏈接硬件和軟件,主要包括多任務處理、內存的動態按分配(虛擬內存和保護內存)、以及I/O short等等。
20.《文件系統》
計算機的文件格式有許多,好比文本格式(txt)、音頻格式(wav)和圖片格式(bmp)等等。這些文件格式包括其餘許多文件格式在計算機底層全都是以二進制的字符串(010101)來存儲的。
1.文本格式:二進制-> 十進制-> ASCII碼
2.音頻格式:wav聲波產生的振幅被轉化爲數字,再轉爲二進制
3.圖片格式: 元數據包括長寬、數據維度和顏色深度等一系列參數所規定
8bit(位)=1byte(字節),由於8個二進制碼對應成1個十進制碼對應成一個ascii碼
21.《壓縮》
壓縮是爲了下降文件佔用空間大小,加快傳輸速度。
無損壓縮:沒有損失任何數據。
遊程編碼(run-length coding):記錄相同元素個數,刪掉重複數據。
霍夫曼樹:也是字典編碼。利用相同元素值合併,生成樹狀結構,再用0、1標註,作成字典。
有損壓縮:利用人類的感知不完美而進行壓縮。
感知編碼:人類在視覺和聽覺上都是不夠完美的,所以,某些文件基於此的壓縮不會給人形成視覺、聽覺上的信息傳遞困擾。
時間冗餘(temporal redundancy):不一樣幀之間的差別彷佛不大,有時只是某幀的小部份內容在變。對於每幀間類似的地方,只需給視頻增長補丁,而不用記錄每幀的全部元素,便可減小冗餘部分,從而下降文件大小。
22.《命令行界面》
計算機早期的人機交互形式是:同時輸入程序和數據(用紙卡/紙帶),運行開始直到結束,中間沒有人類操做,緣由是計算機很貴,不能等人類慢慢輸入,執行完結果打印到紙上。
到1950年代,計算機足夠便宜和快,人機交互式操做變得可行。爲了讓人類輸入到計算機,改造以前就有的打印機,變成電傳打字機。
到1970年代末,屏幕成本足夠低,屏幕代替電傳打印機成爲標配。
23.《屏幕&2D圖形顯示》
在早期,計算機的鍵盤和顯示器是分開的,由於屏幕太貴且內存很小,所以屏幕顯示臨時值。後來人們使用陰極射線管(cathode ray tube),即CRT來處理界面。原理是把電子發射到有磷光體塗層的屏幕上,當電子撞擊塗層時,會發光幾分之一秒。因爲電子是帶電粒子,路徑能夠用磁場控制。屏幕內用板子或線圈,把電子引導到想要的位置。
CRT有兩種繪圖方式:矢量掃描(Vector Scaning)和光柵掃描(Raster Scaning)。前者引導電子束描繪形狀,將電子按照必定的引導路徑被打到屏幕上造成圖像;後者按固定路徑,一行行從上到下,從左到右,不斷重複,對屏幕進行逐行掃描,只在特定的點打開電子束,以此繪製圖形。
最後,由於顯示技術的發展,咱們終於能夠在屏幕上顯示清晰的點,叫像素。
因爲內存小,早期計算機不存大量像素值,而是存符號。爲此,計算機須要額外的硬件來從內存中讀取字符,轉換成光柵圖形,這樣才能顯示到屏幕上。這個硬件叫「字符生成器」,基本上算是第一代顯卡。它內部有一小塊只讀存儲器,簡稱ROM,存着每一個字符的圖形,叫「點陣圖案」。
爲了顯示,「字符生成器」會訪問內存中一塊特殊的區域,這塊區域專爲圖形保留,叫屏幕緩衝區。程序想顯示文字時,修改這塊區域裏的值就行。
24.《冷戰和消費主義》
冷戰致使美國往計算機領域投入大量的資源。
1950年代消費者開始購買晶體管設備,收音機大賣。日本取得晶體管受權後,索尼作了晶體管收音機,爲日本半導體行業崛起埋下了種子。
蘇聯1961年把宇航員加加林送上太空,致使美國提出登月。NASA預算大大增長,用集成電路來製做登月計算機。
集成電路的發展其實是由軍事應用大大推動的,美國造超級計算機進一步推動集成電路。
美國半導體行業一開始靠政府高利潤合同活着,忽略消費者市場,1970年代冷戰漸消,行業開始衰敗,不少公司倒閉,英特爾轉型處理器。
小結:政府和消費者推進了計算機的發展,早期靠政府資金,讓技術發展到足夠商用,而後消費者購買商用產品繼續推進產品發展。
25.《我的計算機革命》
1970年初成本降低,我的計算機變得可行。
Altair 8800出現後,比爾蓋茨和保羅艾倫寫出Basic 解釋器,使得用戶能夠用簡單的basic語言來與計算機進行交互,而非複雜的源代碼。
喬布斯提議賣組裝好的計算機,Apple-I 誕生;
1977年出現3款開箱即用的計算機,此時IBM意識到我的計算機市場。
IBM PC 發佈,採用開放架構系統,兼容的機器都叫 IBM Compatible(IBM 兼容)生態系統出現雪球效應:
由於用戶多,軟硬件開發人員更願意花精力在這個平臺。
由於軟硬件多,用戶也更樂意買「IBM 兼容」的計算機。
而蘋果選封閉架構,一切都本身來,只有蘋果在非「IBM 兼容」下保持了足夠的市場份額。
26.《用戶圖形界面》
圖形界面先驅:道格拉斯恩格爾巴特(Douglas Engelbart)由於提出併發明圖形界面,以加強人類智能的願景,得到了1997年的圖靈獎。
1973年Xerox Alto(施樂奧托)計算機出現,1981年誕生施樂之星系統。
喬布斯去施樂參觀後提出「所見即所得(WYSIWYG)」的交互理念。
1983年推出Apple Lisa失敗,1984年推出Macintosh因用戶圖形界面而大獲成功。
1995年Windows推出Microsoft Bob因浮誇的用戶圖形界面而失敗;同年,推出Windows 95,提供用戶圖形界面,得到成功。
27.《3D圖形》
線框渲染(Wireframe Rendering):全部的點從3D轉到2D以後,就能夠用畫2D線段的函數來連接這些點。
正交投影 Orthographic Projection:從物體不一樣的面等比例投影
透視投射 Perspective Projection:對物體進行近視距、遠視距投影
網絡 Mesh:由不少的多邊形(polygons)組成。遊戲設計者要平衡角色的真實性和多邊形的數量。
掃描線渲染(Scanline Rendering):填充圖形的經典算法。對於一個多邊形,先在其上鋪一層像素網絡,掃描線算法先讀多邊形的3個點,找出最大和最小Y值,只在這兩點間工做。而後算法從上往下,一次處理一行,計算每一行和多邊形相交的2個點,並填滿2個相交點之間的像素,這是其工做原理。填充的速度叫fillrate(填充速率)。 這樣的三角形可能會比較醜(周遭都是鋸齒),當像素較小時,就不那麼明顯。
抗鋸齒(Antialiasing):減輕鋸齒的方法,經過判斷多邊形切過像素的程度,來調整顏色;對於在多邊形內部的像素,就直接塗顏色;對於多邊形邊緣劃過的像素,顏色就淺一些。這種羽化的效果看起來更溫馨。
遮擋(Occlusion):在3D圖形中,有一些多邊形沒法被看見。
畫家算法(Painter's Algorithm):用排序算法,從遠到近排列,從遠到近渲染。
深度緩衝( Buffering):記錄場景中每一個像素和攝像機的距離,在內存裏存一個數字矩陣,首先,每一個像素的距離被初始化爲「無限大」,而後Z-buffering從列表力量第一個多邊形開始處理,它和掃描線算法邏輯相同,但不是給像素填充顏色,而是把多邊形的距離和X-buffering裏的距離進行對比,它老是記錄更低的值。A距離20,小於「無限大」,因此緩衝區記錄20;而後計算下一個,以此類推。由於沒對多邊形排序,因此後處理的多邊形並不總會覆蓋前面的。當兩個多變形距離相同時,哪個畫上面?這每每不可預測,於是致使出現了Z-fighting效果。
背面剔除(Back Face Culling):遊戲優化中,爲節省處理時間,會忽略多邊形背面。
表面法線(Surface Normal):即平面面對的方向。
平面着色(Flat Shading):根據每一個多邊形的表面法線來決定應給予的光線數量來着色,被稱爲平面着色,是最基本的照明手法。但這使得多邊形的邊界很是明顯,看起來不光滑。所以發明了更多算法,高洛德着色(Gouraud shading)、馮氏着色(Phong shading)被用於更好地改善着色效果,使其看起來更加平滑。
紋理映射(Texture Mapping):參照內存內的紋理圖像,決定像素用什麼顏色。所以,須要把多邊形座標和紋理座標對應起來,算法依據須要填充的多邊形座標,從相應紋理區域內取平均顏色並填充多邊形,重複這個過程,就能夠得到紋理。
專門的圖形處理器:圖形處理單元(GPU, Graphics Processing Unit )。GPU在顯卡上,周圍有專用的RAM。
28.《計算機網絡》
局域網(Local Area Networks-LAN):一小部分領域內互相鏈接的網絡。
媒體訪問控制地址(Media Access Control address-MAC):每個計算機都有一個本身的MAC address,用於數據傳輸時進行選擇匹配驗證。
載波偵聽多路訪問(Carrier Sense Multiple Access-CSMA):多臺電腦共享一個傳輸媒介。載體指運輸數據的共享媒介,以太網的載體是銅線,WIFI的載體是傳播無線電波的空氣。許多計算機能夠同時偵聽載體,因此叫「偵聽」和「多路訪問」。而載體傳輸數據的速度叫「帶寬」。
指數退避(Exponential Backoff):是一種指數級增加等待時間的方法。若是一臺計算機在傳輸數據期間檢測到衝突,會等1秒+隨機時間;然而,若是再次發生衝突,表示有網絡擁塞。此次不等1秒,而是等2秒;若是再次發生衝突,等4s、8s、16s etc,直到傳輸成功。由於計算機的退避,衝突次數下降了,數據再次開始流動起來,網絡變得順暢。
衝突域(Collision Domain):同一載體中設備的數量越少,網絡速度越快。載體和其中的設備總稱「衝突域」。以太網就創造2個衝突域,中間用一個switch隔開。交換數據時,MAC在哪邊,就只動用那個衝突域的載體。從而下降congestion。
電路交換(Circuit Switching):只有一條專有線路,把電路鏈接到正確的目的地。但不靈活且價格昂貴,由於總有閒置電路。好處是,若是有一條專屬於本身的線路,就能夠最大限度地隨意使用,無需共享。
報文交換(Message Switching):不只只有一條專有線路,消息會通過好幾個站點。好處是,能夠用不一樣的路由,使通訊更可靠更能容錯。
阻塞控制:路由器會平衡與其餘路由器之間的負載,以確保傳輸能夠快速可靠,這叫「阻塞控制」。
分組交換(Packet Switching):將數據拆分紅多個小數據包,而後經過靈活的路由傳遞,很是高效且容錯。好處是,去中心化,無政府,沒有單點失敗問題。
29.《互聯網》
IP-互聯網協議(Internet Protocol):全部的數據包傳輸必須符合互聯網協議(IP),它是一個很底層的協議。
PACKET=IP HEADER + DATA PAYLOAD
DATA PAYLOAD = UDP HEADER + DATA
數據包的頭部只有目標地址,頭部存「關於數據的數據」,也叫元數據(metadata)。
UDP-用戶數據報協議(User Datagram Protocol):
UDP的頭部存有用的數據:信息之一是端口號,每一個想訪問網絡的程序,都要向操做系統申請一個端口號(port)。
總結:IP負責把數據包送到正確的計算機;UDP負責把數據包送到正確的程序。
校驗和(checksum):也屬於UDP頭部,用於檢查數據是否正確。UDP中,校驗和以16位形式存儲(即16個0或1)。超過16位表示的最大值,高位數會被扔掉,保留低位。當checksum=sum(data)時,數據正常,反之,則數據有損壞。但UDP不提供數據修復或數據重發機制,接收方知道數據損壞後,通常只是扔掉。並且UDP也沒法得知數據包是否到達。
TCP-傳輸控制協議(Transmission Control Protocol):若是「全部數據必須到達,就用TCP。」TCP的高級功能:1.TCP數據包有序號;2.TCP要求接收方的電腦收到數據包而且校驗和檢查無誤後(數據無損壞),給發送方一個確認碼,表明收到了。3.確認碼的成功率和來回時間能夠推測網絡的擁堵程度。TCP用這個信息,調整同時發包數量,解決擁堵問題。
小結:TCP能夠處理亂序和丟失數據包,還能夠根據擁擠狀況自動調整傳輸率。缺點:TCP確認碼數據包把數量翻了一倍,但並無傳輸更多的信息。
域名系統(Domain Name System,DNS):負責把域名和IP地址一一對應。
開放式系統互聯通訊參考模型(Open System Interconnection,OSI):應用程序層(Application Layer)、表示層(Presentation Layer)、會話層(Session Layer)、傳輸層(Transport Layer)、網絡層(Network Layer)、數據鏈路層(Data Link Layer)、物理層(Physical Layer)。
30.《萬維網》
若是說,互聯網是網絡世界中傳輸數據的網,那麼萬維網就是跑在其上最頻繁的程序。
31.《計算機安全》
計算機安全,是保護系統數據的保密性,完整性和可用性。
保密性:是隻有有權限的人才能讀取計算機的系統和數據;(盜刷銀行卡)
完整性:是隻有有權限的人才能使用和修改系統和數據;(盜郵箱密碼,假冒你發郵件)
可用性:是有權限的人應該隨時能夠訪問系統和數據;(拒絕服務攻擊DDOS:黑客發大量請求到服務器,讓網站很慢或者掛掉)
威脅模型分析(threat model):爲了實現這三個目標,安全專家會從抽象層面想象「敵人」多是誰。模型會對攻擊者有大體描述:能力如何,目標多是什麼,可能用什麼手段。
攻擊手段又叫「攻擊矢量(attack vector)」。威脅分析模型能爲特定類型的手段作準備,不被可能的攻擊手段數量所淹沒。
身份驗證的三種方式:你知道什麼?你有什麼?你是什麼?
訪問控制:經過「權限」或「訪問控制列表(ACL)」來實現。權限類型:讀、寫、執行... 訪問級別:公開、機密、頂級機密...
Bell-LaPadula模型:「不能向上讀,不能向下寫。」
隔離(isolation):使用「沙盒」程序。操做系統會把程序放到沙盒裏,方法是給每一個程序獨有的內存塊,其餘程序不能動。一臺計算機能夠運行多個虛擬機,每一個虛擬機都在本身的沙箱裏,若是一個程序出錯,則最壞的狀況是這個程序崩潰,或搞壞這個虛擬機的環境,其餘的虛擬機和程序不受影響。
32.《黑客與攻擊》
社會工程學:Social Engineering),是一種經過人際交流的方式得到信息的非技術滲透手段。不幸的是,這種手段很是有效,並且應用效率極高。事實上,社會工程學已經是企業安全最大的威脅之一。經常使用社工手段:釣魚、假託...
NAND鏡像:若是能物理接觸到電腦,能夠往內存裏接上幾根線,複製整個內存;而後暴力解碼,直到設備讓你等待,這時只要把複製的內容覆蓋掉內存,本質上重置了內存,就不用等待,能夠繼續暴力解碼了。
漏洞利用(Exploit):遠程攻擊者利用系統漏洞來得到某些能力或訪問權限。
緩衝區溢出(buffer overflow):會覆蓋到其餘重要數據,致使系統崩壞;或修改內存,繞過‘登陸’之類的驗證;或劫持系統。應對方法:邊界檢查;設置‘金絲雀’空間,檢驗數據變更狀況;
代碼注入:輸入用戶名時,輸入兩條指令,例如「'whatever'; DROP TABLE users」,這樣能夠刪除整個用戶密碼錶。
零日漏洞:沒有被軟件開發者發現的新漏洞。
蠕蟲(Worms):足夠多的漏洞讓惡意程序能夠在電腦間互相傳播;
僵屍網絡(Botnet):黑客拿下大量電腦,這些電腦能夠組成‘僵屍網絡’。
33.《加密》
由於有時黑帽黑客的攻擊手段不止一種,爲了增強防禦,白帽黑客們採用了多層防護(defence in depth),來抵禦進攻。
替換加密:算法把每一個字母替換成其餘字母。缺點:每一個字母出現的頻率是同樣的。
凱撒加密:把信件中的每個字母移位3個,即A->E。
移位加密:
列移位加密:把信息放入一個5*5或者其餘矩陣表格,橫放豎讀,豎放橫讀。若是沒有5*5的表格細則,則不能解密。
德國二戰時創造了Enigma加密機。
密碼學領域三大重要部分:對稱加密、密鑰交換,公鑰密碼學
其中密鑰加密使用了「單向函數」原理,即採用Diffie-Hellman Key Exchange算法,對基底數求冪求模(base^x)mod(...)
非對稱加密:公鑰和私鑰並存,公鑰加密數據,只有私鑰能解密數據。公鑰不能解密私鑰數據,由於不對稱;反過來,能夠用私鑰加密,公鑰解密。這種作法用於‘簽名’,服務器用私鑰加密,任何用戶均可以用服務器的公鑰解密。
34.《機器學習與人工智能》
機器學習是實現人工智能的衆多技術之一。
機器學習根據已標籤數據(labeled data)和其特徵來製做分類器,從而對未標籤數據(unlabeled data)進行分類,有時會產生一條決策邊界來做爲分類的依據。若是不能畫出絕對的決策線,能夠創造混淆矩陣,即最大限度地提升正確的分類數和下降錯誤的分類數。
常見的機器學習算法:決策樹、支持向量機、人工神經網絡、深度學習、強化學習。
35.《計算機視覺》
計算機用檢測垂直邊緣的算法來區分物體,把圖片調成灰度,邊界數值的差別越大,此處是邊緣的可能性越大。
核/過濾器(kernel or filter):一組矩陣值,不一樣的值組成的過濾器矩陣能夠檢測出不一樣的事物。
卷積神經網絡:將核應用到圖片的像素中,再運用相似神經元的計算方法,神經元有不少層,中間的每一層能夠用一個核做權重處理,來提升識別度。
36.《天然語言處理》
語音識別技術是將人類語音接受爲波形,再轉化爲譜圖,這種技術是「傅里葉轉換」。不一樣的字符具備不一樣的譜圖分佈規律,據此數據能夠判斷是什麼字符。
經過語音識別,將所蒐集到的天然語言聲音轉爲文本,對文本進行詞性分析和短語結構規劃分析,最終得出結果。
構成單詞的聲音片斷,叫「音素」。語音識別本質上是音素識別,英語大概有44種音素,例如「aa」、「eee」etc。
由於口音問題和平常口誤,識別的文本有時會有明顯的錯誤。結合語言模型後,轉換準確率會大大提升。
37.《機器人》機器人是由不少控制迴路來控制的。一個簡單的控制迴路包括:傳感器、控制器(接受計算偏差)和系統(待執行操做的指令和程序)。【用的「實際值」】負反饋迴路:傳回偏差給控制器,由控制器作出改變以減少偏差。比例-積分-微分控制器(PID 控制器): 比例值:「實際值」與「理想值」差多少;實際值可能有必定滯後,或者是實時的。當二者差值越大,就越用力,所以它是比例控制的。 積分值:即一段時間內,偏差的總和。當最近幾秒偏差值很大時,說明此時比例控制不夠,要用力前進。 導數值:是指望值與實際值之間的變化率。有助於解決將來可能出現的錯誤,有時也叫「預期控制」。好比前進太快,要放鬆一點,避免衝過頭。這三個值會一塊兒使用,並有不一樣的權重,而後用來控制系統。