1. 程式人生 > >計算機技術與科學系列筆記

計算機技術與科學系列筆記

目錄:

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的打孔卡片製表機大大提升了效率。

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有兩種策略:
一、用更多的位來代表指令,比如32位或64位,這叫“指令長度”;
二、實行“可變指令長度”,比如,有的CPU用8位長度操作碼(這叫“立即值”),有的用4位。這樣設計指令可以是任意長度,但會讓讀取階段(fetch cycle)複雜一點點。

9.《高階CPU設計》
早期為提升CPU速度,方法是加快電晶體切換速度。
CPU有專門的除法電路+其他電路來做複雜操作,用來處理遊戲、視訊解碼等工作。
現代提升CPU效能的方法:
一、快取
為了提高CPU的存取速度,在CPU內部裝了一塊快取,通常只有幾M左右大小,用來從RAM中整塊整塊提取資料,並在CPU中處理。
快取裡每塊空間有一個特殊的標記,叫“髒位(dirty bit)”。當快取中的內容被CPU改寫時,RAM需要同步更新。因此,同步一般發生在快取滿了而CPU又要快取時,在清理快取騰出空間之前,會先檢查髒位。如果是髒的,在載入新內容之前,會把資料寫回RAM。
二、指令流水線
取指令->解碼 ->執行不斷重複,但每階段用的是CPU的不同部分,因此可以並行處理。執行一個指令,同時解碼下一個指令,同時讀取下下個指令。但問題是,不同指令間存在依賴關係。因此,流水線處理器要先弄清楚指令間的依賴關係,必要時停止流水線,避免出現問題。高階CPU,會進一步動態排序有依賴關係的指令,最小化流水線停工時間。這叫“亂序執行。”第2個問題是,條件跳轉(jump功能),這些指令會改變程式的執行流。高階CPU會把jump看成岔路口,然後猜哪條路的可能性大一些,然後提前把指令放進流水線,這叫“推測執行”。如果猜錯了,CPU再清空流水線。為了提升正確率,CPU的開發商開發了複雜的演算法,叫“分支預測”,來猜測哪條分支更有可能。
三、多核處理器
同時執行多個指令流,即在一個CPU晶片裡,有多個獨立處理單元(core1、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 控制器):
比例值:“實際值”與“理想值”差多少;實際值可能有一定滯後,或者是實時的。當兩者差值越大,就越用力,因此它是比例控制的。
積分值:即一段時間內,誤差的總和。當最近幾秒誤差值很大時,說明此時比例控制不夠,要用力前進。
導數值:是期望值與實際值之間的變化率。有助於解決未來可能出現的錯誤,有時也叫“預期控制”。比如前進太快,要放鬆一點,避免衝過頭。
這三個值會一起使用,並有不同的權重,然後用來控制系統。