《Computer Science》筆記

1.早期的計算

1).本系列會了解到位(bit)、字節(jié)(byte)、晶體管(transistors)與邏輯門(logic gates),一直到操作系統(tǒng)(Operation Systems)、虛擬現(xiàn)實(Vitual Reality)與機器人(Robots)。

2).計算器歷程:

  • 算盤: 早期手動計算器,可加減可存儲結果數(shù)據
  • 機械計算器: 手動轉動,齒輪咬合
  • 電動機械打卡機: 此機器的速度是人工的10倍,使得美國人口普查統(tǒng)計得以更快完成,節(jié)省數(shù)百萬美元(人們開始意識到計算機器巨大市場潛力)

2.電子運算

1).繼電器(relays): 用電控制的機械開關,缺點是開關速度慢,易磨損。小蟲子引發(fā)繼電器故障(bug一詞來源于此)。


2).真空管(vacuum tubes)或者電子管: 密閉燈泡里放2個電極,其中一電極可被加熱 發(fā)射電子(thermionic emission),另一電極吸引電子從而形成電流,這是全球第一個真空管。通過加入控制電極控制真空管的開與閉。
真空管內沒有活動部件,速度更快,磨損更小。

任何只允許電流單向流動的電子部件都叫做二極管(diode)。

3).晶體管(transistors): 1947年貝爾實驗室John Bardeen等人發(fā)明了晶體管。它由兩電極由導電材料隔開,這些材料有時候導電有時候不導電,即半導體(semiconductor),通過控制這些材料的電荷讓其導電或不導電。
晶體管是固態(tài)組件,體積可以大幅縮小,速度更快,磨損更小。
上面提到的“導電材料”常見是用的硅來制造,所以有了硅谷。

3.布爾邏輯與邏輯電路

早期有人使用三進制、五進制等,后來發(fā)現(xiàn)電源電壓不穩(wěn)導致不能正確表達,所以統(tǒng)一成了二進制。
開關 等于 二進制(Binary)。
使用二進制還有個原因是: 英國數(shù)學家George Boole的布爾代數(shù)(Boolean Algebra)解決了所有的運算和法則,基于布爾代數(shù)實現(xiàn)了邏輯電路NOT門、AND門、OR門、XOR門。




4.二進制

這里討論的是計算機是怎么存儲和表示數(shù)字的。用二進制實現(xiàn)常規(guī)代數(shù)的運算。
二進制中的每個“0”或者“1”叫一個比特(bit)或者。由于8-bit比較常見,所以稱為一個字節(jié)(byte)。千字節(jié)(kilobyte) = 2的10次方個字節(jié) = 1024個字節(jié),兆字節(jié)(megabyte),千兆字節(jié)(gigabyte),TB(terabyte)。

32位(32-bit)二進制最大可表示常規(guī)代數(shù)的”0 ~ 43億多“ 或者 ”+20億 ~ -20億“(第一個bit表示正負)。為了表示更多數(shù)據所以有了64位系統(tǒng)。接著用科學計數(shù)法表示浮點數(shù),即正負 + 存指數(shù) + 存有效數(shù)。

接著通過對字母進行編號來表示字母,1963年產生了基于7-bit的ASCII(American Standard Code for Information Interchange 美國信息交換標準代碼)使得不同公司的計算機可以交換數(shù)據。由于ASCII針對英文字母設計的,其他自然語言如中文、土耳其文擁有的數(shù)千個字符甚至無法用1 字節(jié)(8-bit)表示,1992年有了16-bit的Unicode,統(tǒng)一編碼方案。

計算機必須在內存中定位到某個位置,叫做地址(address),用以存取數(shù)據。

5.算術邏輯單元ALU(Arithmetic Logic Unit)

ALU = 算術計算(如半加器、全加器) + 邏輯控制(如OR門和AND門組成的全0檢測,通過檢測讓Flags位被標記)


半加器(Half Adder)

全加器(Full Adder)

8-bit全加器;現(xiàn)代電腦用了更厲害的電路叫“超前進位加法器(carry-look-ahead adder)”。

全0檢測

操作碼會告訴ALU執(zhí)行什么操作


6.寄存器&內存

ALU算出來的結果得找個地方存起來,所以就有了計算機內存(Memory)。
RAM(Random Access Memory,隨機存取存儲器)只有通電時才能存;另一種是持久存儲,斷電也能保留數(shù)據。

  • 記錄0和1的電路


  • 鎖存器(And-Or Latch),存住1-bit數(shù)據的理論電路


  • 門鎖(Gated Latch)電路 ,一個能存單個bit的盒子,完整電路


  • 寄存器(register),并排放8個門鎖,就構成了8位寄存器,存多少個bit叫“位寬(width)”。當今計算機都有64位寬的寄存器了。寄存器是指“能存一個值的小內存塊”。


  • 多路復用器(multiplexer),因為并排會很耗材、占地方、消耗更多錢財?shù)龋谑怯辛司仃嚪胖?、內存地址(Memory Address)的概念 ,如:12行8列(8位尋址 = 4bit行 + 4bit列)存了1bit的數(shù)據。 抽象一下,然后做一個256個字節(jié)的內存,然后進一步抽象成可尋址內存。






  • 內存的一個重要特性就是可以隨時訪問任何位置,所以叫RAM。
  • 上面說的制成的是SRAM(Static Random-Access Memory,靜態(tài)隨機存取存儲器),還有其他類型的RAM,如DRAM、閃存(Flash Memory)、NVRAM,不同之處在于用不同的電路存單個bit。

7.CPU & 時鐘頻率

計算機之所以能做事兒是因為有指令(instruction)去指示計算機干活兒。如果是計算指令,CPU會跟ALU通信進行計算加減,如果是內存指令,CPU會跟內存通信進行讀寫。

CPU運行示例之”加載數(shù)據A“:
1).取指令(fetch phase)
2).解碼指令(decode phase)
3).執(zhí)行指令(execute phase)
此例中8-bit RAM里前4-bit指定操作碼,后4-bit指定地址或寄存器。
不同指令由不同邏輯電路解碼,例如“7.1-CPU執(zhí)行「LOAD_A指令」.png”圖中所示的加載數(shù)據A的解碼電路。把上面這些”控制單元“抽象出來。




當執(zhí)行到”ADD“指令時,就要用到ALU了。


驅動CPU執(zhí)行下一條指令的組件叫clock(時鐘),以精確和固定的間隔觸發(fā)電信號,該信號被控制單元用于推進CPU內部操作,就像劃龍舟上的鼓手。

CPU循環(huán)(取指令 → 解碼 → 執(zhí)行)的速度,叫時鐘速度(clock speed,單位是Hertz赫茲,1赫茲表示每秒1個周期) 或者 時鐘頻率。超頻就是修改時鐘以加快CPU的速度,但過度超頻會讓CPU過熱或者出現(xiàn)信號跟不上時鐘頻率。而降頻就是跟超頻反著來。]

8.指令和程序

實現(xiàn)”11-5=1“更多的指令。



為了讓CPU干更多的事,處理更多指令:
方法一、升級硬件(即修改指令長度)。如換上64位CPU。
方法二、可變指令長度(即將指令和數(shù)據拆開,指令相鄰下一個存放數(shù)據值的內存地址,這個地址叫”立即值“)。如 Intel 4004芯片 的指令集支持46個指令,它就是用8-bit的”立即值“處理的。

9.高級CPU設計

電子計算 早期的提速是通過減小“晶體管轉換開關”的時間,現(xiàn)在則是越來越多地為特定計算設計特定的指令電路。例如早期的除法指令是由循環(huán)多次減法指令實現(xiàn)的,乘法是由循環(huán)多次加法實現(xiàn)的,現(xiàn)在為除法單獨設計了電路和ALU結構?,F(xiàn)代電腦處理器有專門的電路處理圖形操作、解碼視頻、文檔加密等。所以有了各種對特定領域的處理器,如GPU。

至今,高速而厲害的指令引起了另一個問題:數(shù)據的高速讀寫(RAM)。數(shù)據是通過總線傳輸?shù)摹?br>

RAM需要時間查找地址、取得數(shù)據,另外一個指令可能需要多個時鐘周期 而在此期間CPU是閑著的。所以后面在CPU中加入小的RAM,叫高速緩存(Cache),讀取數(shù)據時不再是單個傳值,而是一批數(shù)據,更快提供數(shù)據(cacha hit、cache miss),而且可以存儲復雜運算的中間值等等,用以提高CPU的處理速度。通過臟位(dirty bit,頁面重寫標志位)標識,在RAM和Cache同步時,RAM中的舊數(shù)據得以被更新。

另一個提升CPU性能的方法:指令流水線(instruction pipelining)。

多核CPU,不同于多個CPU,前者會共享同樣的資源,如緩存。


當多核還不夠時,可以構建擁有多個CPU的計算機。甚至是超級計算機,用以計算航空航天、模擬宇宙等等超級變態(tài)的計算。

10.編程史話

將機器程序化的需求在計算機發(fā)展前就已經存在,畢竟不是美國人口普查匯總數(shù)據這么簡單。

為了程序化控制,人們設計了控制插板,通過電線傳遞信號,執(zhí)行不同計算。

為了節(jié)省人力提高效率,有了穿孔卡片。穿孔卡片形成對織布機(何時更改織線顏色)或者計算機(一個孔對應匯總值加1)的連續(xù)指令,40年代末隨著電子內存的普及,將整個程序存儲在計算機內存中成為可能,使得程序易于修改、易于被CPU快速讀取。穿孔卡片不僅可以向計算機傳遞數(shù)據,也可以通過給卡片打孔存儲數(shù)據。

程序和數(shù)據在一個共享的內存中的結構被成為馮洛伊曼結構(Von Neumann Architecture),馮諾依曼計算機的特征,有包含算術邏輯單元的處理器、數(shù)據寄存器、指令寄存器、指令地址寄存器、存儲數(shù)據和指令的內存。

11.程序語言

計算機只能處理二進制指令,這些二進制叫機器語言(machine language)機器碼(machine code)。在計算機早期階段,人們必須用機器碼寫程序,具體操作是先用英語描述(偽代碼,pseudo-code)寫在紙上,然后通過操作碼表轉換為二進制機器碼,最后導入計算機開始運行。

1940~1950年代人們開發(fā)了更可讀更高層的語言,他們給每個操作碼分配一個名字,稱為助記符(mnemonics),如LOAD_A 14,通過可重用的二進制幫助程序(匯編器(assembler)),自動轉換成二進制機器碼。LOAD_A 14就是一條匯編指令。匯編與機器指令往往是一一對應的。

程序員可以創(chuàng)建內存地址的抽象表示,叫變量(variables)

A = 3
B = 5
C = A + B
# 這個例子在底層操作中,編譯器可能把變量A存在寄存器A里,亦或是寄存器B里,但這些底層邏輯我們不用關心了

為了遠離每種CPU特有的匯編代碼和機器碼,從底層細節(jié)中脫離出來,編程語言應運而生,一次編寫多種執(zhí)行。在1960年代,我們有了ALGOL、LISP、BASIC等語言,70年代有了Pascal、C等。80年代有了C++、Objective-C 和 Perl。90年代有了Python、Ruby、Java。在新世紀里有了C#、Swift、Go。

12.編程原理:語句和函數(shù)

語句表達獨立而完整的思想。賦值語句、IF語句、WHILE循環(huán)、FOR循環(huán)等。

代碼越來越復雜冗長,為了隔開并隱藏繁瑣的東西,編程語言可以把一段代碼打包,放入函數(shù)(某些編程語言中也可以叫方法、子程序),變成使用函數(shù)模塊化地編程,也方便團隊作戰(zhàn)。

現(xiàn)代編程語言有許多提前寫好的函數(shù),叫庫(Libraries)。它們由專業(yè)人員編寫,效率高,檢驗充分,可提供給每個人使用。

13.算法初步

解決一個計算問題往往有多種不同的解決方案,這些不同方案間的區(qū)別就是“算法”,算法就是完成計算的具體步驟。

各種算法中,被用到最多的就是“排序”(sorting)。

算法的輸入大小 和 運行步驟之間的關系,代表了算法的復雜度,表示算法運行速度大致是個什么量級。選擇排序(Selection Sort)復雜度為O(n^2);歸并排序(Merge Sort)的是O(n log n) ;圖搜索(Graph search)里的Dijkstra算法了解一下。

14.數(shù)據結構

樓上的算法處理的數(shù)據是如何存儲在計算機內存中的呢?答案是數(shù)據結構(Data Structures)

數(shù)據結構包括:數(shù)組(Array)、字符串(String)、矩陣(Matrix)、結構體(Struct)、指針(Pointer)、節(jié)點(Node)、鏈表(Linked List)、隊列(Queue)、棧(Stack)、樹(Tree)、二叉樹(Binary Tree)、圖(Graph)。不同數(shù)據結構適用于不同計算場景。

鏈表比數(shù)組更靈活,它不像數(shù)組大小固定,而是可動態(tài)增減的,且更容易重新排序、兩端縮減、分割等,所以許多復雜數(shù)據結構都基于鏈表。如隊列和棧。

Node稍微變一下,改成有2個指針,就變成了Tree。很多算法在用樹這種結構。樹的重要特性是從根節(jié)點到葉子節(jié)點的路徑是單向的。如果數(shù)據隨意連接,那可以用Graph來表示了。

不同數(shù)據結構適用于不同的計算場景,選擇正確的數(shù)據結構會讓工作更加簡單。所以大多數(shù)編程語言都自帶了很多做好的數(shù)據結構,如C++的“標準模板庫”,讓程序員專注更多其他的事情。

15.阿蘭.圖靈

圖靈機(Turing machine)是一臺理論計算模型,輸入+規(guī)則可以得到輸出。

16.軟件工程(Software Engineering)

把函數(shù)打包成層級分明的體系(hierarchies),將相關代碼合并為對象(objects)

由于不同的人或不同的團隊寫的函數(shù),需要文檔(documentation)幫助了解代碼和應用程序接口(application programming interface,即API)。

模塊A對模塊B一無所知,讓B的一切暴露給A調用會出亂子,API可以控制哪些函數(shù)和數(shù)據可以讓外部訪問,哪些僅供內部使用。有選擇性的暴露一部分功能是 面向對象編程(Object Oriented Programming) 的本質。用這種方式處理大型復雜項目非常有效。

現(xiàn)代軟件開發(fā)者會用特定的應用來編程,它集成了很多工具來編寫、編譯和測試代碼,這些應用又叫集成開發(fā)環(huán)境(Integrated Development Environments,即IDE)。除了IDE,還有個牛逼的軟件可以幫助團隊協(xié)作大項目,那就是源代碼管理(Source Control),也叫版本控制(Revision Control)。這些代碼被放置在服務器上叫代碼倉庫。然后有了質量保證測試(Quality Assurance testing),即QA

17.集成電路、摩爾定律

軟件日益精巧,從卡片打孔的機器語言到如今的集成環(huán)境中的面向對象編程語言,這些進步依賴于硬件的不斷改進。

早期組成計算機的部件由很多不同的分立的元件組成,再將它們用線纜連接到一起。隨著計算機性能需求的提升,需要用更多分立的元件(元件倒是從繼電器 → 電子管 → 晶體管,體積縮小,造價降低)制作出更強計算能力的計算機。但是隨著線纜數(shù)量增多,復雜程度和成本也上去了。突破發(fā)生在1958年,改為將許多組件集成于一個單獨的電子部件內,這就是集成電路(Integrated Circuits,IC),用以制作計算機部件。然后又有了印刷電路板(Printed circuit boards, PCB)。然后又有了光刻法(Photolithography)這種全新的制造工藝,即使用光將復雜的圖案轉移到材料(如半導體)上。如今的光刻分辨率已達幾納米。

1965年,Gordon Moore總結了:大約每過兩年,得益于材料和制造技術的發(fā)展,同樣大小的空間里可以布置的晶體管數(shù)量將翻倍。這就是摩爾定律(Moore's Law)。人們用這個定律表達一種趨勢。

CPU不是唯一受益的元件,還有內存顯卡固態(tài)硬盤等。從19世紀70年代開始,用超大規(guī)模集成電路技術來實現(xiàn)自動生成芯片設計。

為了突破摩爾定律,需要解決:①光波長的問題,波長更短,投射的圖形越小。②量子隧道貫穿問題,晶體管越小,電極所在的地方可能只間隔數(shù)個原子,電子可以越過這些間隔。

18.操作系統(tǒng)

卡片打孔時期,人們手動把程序放入讀卡器花的時間大于程序運行時間,人們需要一種讓計算機自動運作的的方式,于是操作系統(tǒng)(Operation System)誕生了,管理并啟動其他程序。

計算機變便宜,開始變多,有不同硬件配置,操作系統(tǒng)充當軟件和硬件之間的媒介。操作系統(tǒng)提供API來抽象硬件,叫設備驅動程序(device drivers),使程序可以用標準化輸入輸出硬件(I/O)。

通過調度使得多個程序同時運行,在單個CPU上共享時間,操作系統(tǒng)的這種能力叫多任務處理(multitasking)。

程序可能會分配到非連續(xù)的內存塊,為了隱藏這種復雜性,操作系統(tǒng)會虛擬化內存位置,程序就可以假定內存總是從地址0開始并且是連續(xù)的。操作系統(tǒng)和CPU會自動處理虛擬內存和物理內存之間的映射。

多任務時,當切換到另一個程序時,程序不能丟失數(shù)據,所以為每個程序分配專屬內存塊。這樣一來如果程序出錯,寫入錯誤數(shù)據,則只能影響到自己,這個功能叫內存保護(Memory Protection)

1970年代,大學可以買電腦給學生用,計算機不僅能同時快速運行多個程序,也能讓多個用戶同時訪問。就設計了多用戶的分時操作系統(tǒng)(time-sharing Operation System),通過終端(Terminal),終端只是一個鍵盤+屏幕 連接到主計算機,讓多用戶可以同時訪問計算機。早起最有影響力的分時操作系統(tǒng)是1969年發(fā)布的Multics(多任務信息與計算系統(tǒng)),該系統(tǒng)非常復雜,操作系統(tǒng)占用一半的內存。

由于Multics過于復雜,貝爾實驗室的Dennis和Ken Thompson聯(lián)手打造了新的操作系統(tǒng),叫Unix,把系統(tǒng)分為內核(即系統(tǒng)核心功能,如內存管理、I/O) 和 工具集(程序和運行庫)。簡單化的Unix可以在更便宜和更多樣化的硬件上運行。

1980年代早期,電腦的成本降到個人可以負擔,叫個人或家庭電腦(Personal or Home Computer,PC)。PC機比大學、企業(yè)、政府的大型主機簡單多了。1981年微軟為PC發(fā)布的MS-DOS(微軟磁盤操作系統(tǒng),Microsoft's Disk Operation System)就是更簡單的操作系統(tǒng),很受PC市場歡迎,即便是缺少多任務和內存保護這樣的功能。

19.內存&存儲介質

紙卡、紙帶
延遲線存儲器
磁芯存儲器
磁帶
磁鼓存儲器
硬盤
內存層次結構
軟盤
CD/DVD,即光盤
固態(tài)硬盤SSD,沒有活動部件,訪問時間一般低于1/1000秒

存儲器(Storage)和內存(Memory)不同,前者數(shù)據會一直存著,斷點不會丟失。

20.文件系統(tǒng)

文件就是按照一定的格式排列的一長串二進制。元數(shù)據存儲在文件的開頭和實際數(shù)據之間,也叫文件頭(Header)。

。

.wave文件舉例:①麥克風每秒上千次地采集聲音;②每次采集到的振幅用一個數(shù)字表示,這些數(shù)字存儲在wave文件中;③播放這個文件時,音頻程序啟動計算機揚聲器發(fā)射波形。
位圖(bitmap),.bmp文件:計算機上圖片由稱為像素(pixel)的小方塊組成,每個像素是紅、綠、藍的組合。

存儲器(可能是磁帶、磁盤、硬盤等)沒有文件的概念,只能存儲大量的bit,為了存儲多個文件,有種特殊的文件用來記錄其他文件的位置大小等,稱為目錄文件(Directory file)。通常目錄文件存在存儲器的開頭位置。

。

現(xiàn)代文件系統(tǒng)將文件存在塊(Blocks,統(tǒng)一塊級大小方便管理)中,并將文件拆分為多個部分存儲在不同塊中。

。

隨著存儲容量和文件數(shù)量的增長,所有文件都存在同一個層次(只有一個文件目錄)變得效率低下,將相關文件夾放到同一個文件夾里,變成分層文件系統(tǒng)(Hierarchical File System)。如root目錄下有music目錄、photoes目錄:

21.文件壓縮技術

我們希望文件能盡量小一些,可以存大量文件,傳輸也更快一些。解決方法就是壓縮(Compression),用更少的bit編碼數(shù)據。

游程編碼(Run-length Encoding),「消除冗余」,利用文件中存在相同的值進行壓縮,插入一個額外字節(jié)進行長度說明,并刪除重復數(shù)據。。注意:少數(shù)情況下(文件中沒有重復數(shù)據卻插入了一些數(shù)據),經過壓縮后數(shù)據反而變多了。

字典編碼(dictionary coder),「使用更緊湊的表示」,先將數(shù)據進行編碼,即code與data的對應關系,然后用code來表示文件數(shù)據。


游程編碼 和 字典編碼 是無損壓縮技術(lossless compression techniques),很多無損壓縮文件格式都用到了它們,如gif、png、pdf、zip等。

大多數(shù)有損壓縮技術(lossy compression techniques)的基礎是:刪除掉一下人類看不出什么區(qū)別的數(shù)據,這種根據人類感知來刪除數(shù)據的做法叫感知編碼(Perceptual coding)。比如聲音,人類聽覺只能識別特定頻率的聲波,我們給音樂錄音時,超聲波的數(shù)據都可以扔掉。有損音頻壓縮就會用不同精度編碼不同頻段。這就是手機中和現(xiàn)實中聽起來的不一樣的原因之一。如 MP3音頻文件比 未壓縮的音頻格式wav或flac往往小10倍。

22.命令行界面

1868年Christopher Latham Sholes發(fā)明了打字機。打字機設計之初的目的是為了文件的易讀性和標準化。1874年打字機用了QWERTY鍵盤布局,并開始流行。1880年Elizabeth Longley開始推廣十指打字(ten-finger typing)法。

打字機出現(xiàn)后有了電傳打字機(teletype machines)。電傳打字機有了電子接口,然后有了電傳電腦界面,用戶輸入一個命令按回車然后計算機會打印輸出,這就形成了后來的命令行界面(Command Line Interfaces)

到1970年代,用屏幕加鍵盤代替電傳打字機變得實惠。這些虛擬的電傳打字機被叫做終端(Terminal)。

早期一個著名文字游戲叫Zork,后來從純文字進化成多人游戲,簡稱MUDs(Multi-User Dungeons)



23.屏幕 & 2D圖形顯示

出現(xiàn)了顯示技術:
陰極射線管(Cathode Ray Tubes,CRT),其原理是把電子發(fā)射到有磷光體圖層的屏幕上,當電子撞擊涂層時會發(fā)光幾分之一秒。由于電子是帶電粒子 其路徑可以被磁場控制。繪制圖形有2種方式:①矢量掃描(Vector Scanning),即引導電子束描繪出形狀,然后足夠快地重復這條路徑。 ②光柵掃描(Raster Scanning),即從上向下從左到右逐行掃描但只在特定的點打開電子束來描繪,然后不斷重復這個過程。

屏幕上顯示的這些清晰的點,也稱為像素(pixel)。如今用的液晶顯示器(Liquid Crystal Display,LCD)也是用的光柵掃描技術,每秒多次更新像素里紅綠藍的顏色。

史上第一代顯卡是被稱為字符生成器(Character generator)的硬件,它從內存中讀取字符然后轉換成光柵圖形 顯示在屏幕上。它內部有一小塊只讀存儲器ROM(Read-only Memory),存儲點陣圖案(matrix pattern)像素矩陣。。和一塊專門為圖形保留的屏幕緩沖區(qū)(Screen Buffer),當程序想顯示文字時,操作這塊區(qū)域的值即可。

字符生成器由于字符集有限,沒辦法繪制出任意形狀。于是想出用CRT的矢量掃描模式來描繪,用線來組成圖形。。程序更新內存中的矢量設定指令值,讓圖形隨時間變化--動畫(Animation)。1962年代發(fā)明的Sketchpad 和 光筆 是人機交互方式的轉折點。 。

內存中的bit可以直接一一對應到屏幕上的像素,被稱為位圖顯示(bitmapped displays)??梢园褕D形想象成一個巨大的像素矩陣,計算機把像素數(shù)據存在幀緩沖區(qū)(frame buffer),早期這些數(shù)據存在內存RAM里,之后存儲在特殊的被稱為VRAM(Video RAM)的高速顯存中,它位于顯卡上。。





24.冷戰(zhàn)和消費主義

由于美國和前蘇聯(lián)的太空競爭,導致對計算機的需求倍增,促使阿波羅計劃使用了造價不菲的像集成電路這樣的高新技術,也反過來促進了計算機的發(fā)展。冷戰(zhàn)結束后,大部分需求變成了公司和消費者,讓計算機普及、走向市場并最終獲得良性發(fā)展。

25.個人計算機革命

普通計算機是公司或大學里面的那些大家伙,然后有了微型計算機(Microcomputer),后面變成了PC。1970年代個人電腦變得可行。

比爾蓋茨和保羅艾倫寫了個BASIC解釋器(Interpreter),這樣就不用寫晦澀難懂的機器代碼了,拿去賣錢。解釋器與編譯器(Compiler)不同,前者是程序開始運行時進行轉換,而后者是提前全部轉換成機器碼后再執(zhí)行。

喬布斯提議賣組裝好的電腦,Apple-I、Apple-II誕生。IBM意識到了個人電腦的市場,其PC就采用開放架構IBM Compatible(IBM兼容),兼容更多軟硬件。而蘋果選擇封閉架構,更好的用戶體驗。

1979年火爆的電子表格程序VisiCalc,是微軟Excel和谷歌Google Sheets的鼻祖。

26.圖形用戶界面(Graphical User Interfaces,GUI)

1973年施樂公司發(fā)布的XEROX ALTO是第一臺GUI電腦,它的WIMP(即窗口Window、圖標Icon、菜單Menu、和指針Pointer)的啟發(fā)下,1984年蘋果發(fā)布的Macintosh,這是普通人可以買到的第一臺帶圖形用戶界面的電腦。相比命令行,圖形界面是個革命性進展,用戶可以不必記住命令,圖形界面就告訴用戶可以做什么,用戶只需在屏幕上找選項就行了。。

GUI程序就是由一些小組件(滑塊、按鈕、打鉤框等)組成的。GUI用的是事件驅動編程(Event-driven programming)

早先微軟的Windos操作系統(tǒng)都是基于DOS的,而DOS設計時就沒想過運行圖形界面,但從Windows3.1(對外是Windows 95)開始微軟開發(fā)了面向消費者的GUI操作系統(tǒng)。Windows 95還提供了Mac OS沒有的高級功能如多任務和內存保護等。

27. 3D圖形

線框渲染(Wireframe Rendering):可以理解為顯示的線段。
把3D坐標拍平顯示到2D屏幕上,這個過程叫“3D投影(3D Projection)”。
正交投影(Orthographic Projection):立方體的各個邊,在投影中是互相平行的。。
透視投射(Perspective Projection):平行線段會在遠處收斂于一點。。
網格(Mesh):一堆多邊形的集合。。
三角形在3D圖形學中被稱為是“多邊形(Polygons)”,三角形更常用的原因是能定義唯一的平面。
掃描線渲染(Scaline Rendering):多邊形轉換成填滿的像素。因為3D圖像不是線框渲染,需要被填充。。電腦填充的速度叫“填充速率(fillrate)”。這種處理方式簡單粗暴,邊緣充滿鋸齒。有種解決技術叫“抗鋸齒(Anti-aliasing)”。原理是:判斷多邊形切過像素的程度來使用淺一點顏色進行填充。。
遮擋(Occlusion):在3D場景中,有的多邊形被另外一些多邊形擋住。解決方法就是樓下的“畫家算法” 和 “深度緩沖”,二者也都會基于掃描線渲染技術。
畫家算法(Painter's Algorithm):先排序 然后從遠到近渲染。。
深度緩沖(Z-buffering):記錄場景中多邊形每個像素和攝像機的距離,保留數(shù)值小的值,再進行填充渲染。。
Z-fighting錯誤:如果場景中出現(xiàn)多邊形A和B距離都是20,哪個被渲染在上面變得不確定。。
背面剔除(Back-face Culling):如游戲里面人物角色,你只能看到朝攝影機的那一面,為了節(jié)省處理時間和計算量,渲染中經常忽略角色的背面。這就導致一個BUG,當進到角色內部時,角色會消失。就像CF里面卡BUG,掉進地底以后看不到地面了。。
光靠掃描線渲染技術是沒有立體感的。。 所以就加點燈光效果,提高真實度。
光照/明暗處理(Shading):就是燈光效果。
表面法線(Surface Normal):多邊形物體的單個多邊形的垂直線。。
平面著色(Flat Shading):根據表面法線,距離光源的角度就不同,反光效果也就不同(越反光越用更亮的顏色填充)。。 平面著色會使得多邊形物體邊界非常明顯,不光滑,這導致更多其他算法被開發(fā)出來,樓下的”高諾德著色“和”馮氏著色“。
高諾德著色(Gouraud Shading)馮氏著色(Phong Shading):不是只用一種顏色給多邊形物體上色,用過渡色讓物體看起來更真實。。
紋理(Textures):紋理在圖形學中指外觀,而不是手感。
紋理映射(Texture Mapping):把 多邊形坐標 和 內存中紋理圖像 的坐標一一對應,從紋理的相應區(qū)域取平均色去填充多邊形。 這樣才會得到一個精美的小茶壺。。。
一遍又一遍地處理多邊形:掃描線填充,抗鋸齒,光照,紋理化等,在3D場景中,這樣的計算是巨大的。一方面可以為這些特定的運算添加特定的硬件來加快速度,另一方面把3D場景分解成多個更小的部分并行渲染。GPU應運而生。
圖形處理單元(Graphics Processing Unit,GPU):GPU就在顯卡上,它周圍有專用的RAM,所有網格和紋理都可以存里面,讓GPU的多個核心可以高速訪問。















28.計算機網絡

LAN局域網(Local Area Networks): 計算機近距離構成的小型網絡。LAN技術有很多,其中最成功的是以太網(Ethernet),開發(fā)于1970年代施樂公司。。
MAC地址(Media Access Control address): 以太網中電纜是共享的,每天聯(lián)網計算機都看得到數(shù)據但是不知道數(shù)據到底是給誰的,所以有了媒體訪問控制地址,即MAC地址。這個唯一的地址放頭部作為數(shù)據的前綴發(fā)送到網絡中,只有看到是自己的MAC地址才處理數(shù)據。
載波監(jiān)聽多路訪問(Carrier Sense Multiple Access,CSMA): 多臺電腦共享一個傳輸媒介的方法叫“載波監(jiān)聽多路訪問”。如以太網的載體是銅線、WIFI的載體是傳播無線電波的空氣。載體傳輸數(shù)據的速度叫帶寬(Bandwidth)
指數(shù)退避(Exponential Backoff): 當2臺主機向以太網內同時發(fā)送數(shù)據時會發(fā)生沖突,數(shù)據全亂掉了。一種解決方案是等待網絡空閑再重試,然后再在重傳之前等待一段時間 = 呈指數(shù)級增長的等待時間 + 隨機時間,這就叫指數(shù)退避。以太網和WIFI都用了這種方法,很多其他傳輸協(xié)議也用。
沖突域(Collision Damain): 如果主機數(shù)量進一步增加,指數(shù)退避也不好使,所以需要減少同一載體中的設備數(shù)量。載體和其中的設備統(tǒng)稱為沖突域。為了減少沖突,可以用交換機(Switch)把網絡拆成兩個沖突域。交換機里有個路由表記錄MAC地址在哪邊。 。
最大的網絡就是因特網(Internet)
電路交換(Circuit Switching): A和B有5條專用通信線路,如果都被占用,要等其中一條線路空閑出來才能使用,這就是電路交換。
消息交換/報文交換(Message Switching): 除了在A和B之間建立專用通信線路,還可以讓 報文/消息 在AB間好幾個站點之間路由傳遞。消息沿著路由跳轉的次數(shù)叫跳數(shù)(hop count)。如果一個報文很大,傳輸時會阻塞整個鏈路很長時間,所以要將大報文分成很多小塊,叫數(shù)據包(packets)。每個數(shù)據包都有目標地址,所以路由器知道該發(fā)到哪里。數(shù)據包的具體格式由互聯(lián)網協(xié)議(Internet Protocol,IP)定義,這個標準創(chuàng)建于1970年代。路由器會不斷平衡與其他路由器之間的負載,這叫“阻塞控制(congestion control)”。有時同一報文的多個數(shù)據包會經過不同線路導致到達的順序不一致,所以在IP之上還有其他協(xié)議,如TCP/IP,可以解決亂序問題。
分組交換(Packet Switching): 將數(shù)據報文拆分成多個小數(shù)據包,然后通過靈活的路由傳遞,這種路由方法叫分組交換。題外話:冷戰(zhàn)期間有核攻擊的威脅,所以創(chuàng)造了分組交換,實現(xiàn)去中心化,一個站點死掉,還可以走其他站點路由傳遞。世界上第一個分組交換網絡和現(xiàn)代互聯(lián)網的祖先是ARPANET。
物聯(lián)網(Internet of things): 如今越來越多的智能設備聯(lián)網,形成了物聯(lián)網。


29.互聯(lián)網

計算機想要獲取YouTube上的視頻:

  • 首先要連接到局域網LAN(Local Area Network)。你家WIFI路由器連接著的所有設備組成了局域網。
  • 局域網再連接到廣域網WAN(Wide Area Network)。WAN的路由器一般屬于你的互聯(lián)網服務提供商,ISP(Internet Service Provider),廣域網里先連接到一個覆蓋街區(qū)的區(qū)域性路由器,然后路由器再連接到一個覆蓋整個城市的更大的WAN。
  • 廣域網連接到互聯(lián)網主干上。互聯(lián)網主干由一群超大型超高帶寬的路由器組成。
  • 再沿著主干到達有對應視頻文件的YouTube服務器,獲得數(shù)據??梢杂?code>traceroute來看數(shù)據包中轉了幾次

數(shù)據包想要在互聯(lián)網上傳輸,要符合互聯(lián)網協(xié)議(Internet Protocol,IP)標準。就像物品需要滿足郵寄的限制條件才能被郵寄,如起始地址、大小重量。

IP是非常底層的協(xié)議,數(shù)據包的頭部只有目標地址,使得數(shù)據包到達后,操作系統(tǒng)并不知道該把數(shù)據交給哪個程序。因此需要在IP之上開發(fā)更高級的協(xié)議,如UDP(User Datagram Protocol)。

UDP也有它自己的頭部數(shù)據,在自己的頭部數(shù)據中放了端口號、校驗和等重要信息。UDP會把自己的DATA部分全加在一起,計算出校驗和放入頭部,以便確認傳輸過程中是否出了差錯,不過可惜UDP沒有數(shù)據修復和數(shù)據重傳的功能,UDP也無法知道數(shù)據包是否到達目的地。但是UDP簡單速度快。

如果是郵件這種數(shù)據,就要求所有數(shù)據必須到達,不能出差錯,那就用 傳輸控制協(xié)議(Transmission Control Protocol,TCP)
TCP結構與UDP類似,不過有更高級的功能:1、TCP數(shù)據包有序號。2、TCP要求接收方“校驗和”確認無誤后返回給發(fā)送方一個確認碼(ACK)。發(fā)送方超時未收到ACK會重發(fā)。收件方也能通過序號去重。通過ACK成功率和花費的時間可以推算出網絡擁堵請求,自動調整傳輸率(同時發(fā)包的數(shù)量)。

TCP由于ACK,把要傳輸?shù)臄?shù)據包數(shù)量翻了一倍,所以傳輸速度不如UDP。

總結:IP負責把數(shù)據包送到正確的計算器;UDP、TCP負責把數(shù)據包送到正確的程序。

由于IP地址(172.217.7.238)不好記,所以有了域名系統(tǒng)(Domain Name System,DNS),負責吧域名和IP地址一一對應。域名的數(shù)量太多,所以不是一個地方統(tǒng)一管理,而是成樹狀結構。

開放式系統(tǒng)互聯(lián)通信(Open System Interconnection,OSI)網絡模型:

  1. 物理層(Physical Layer):線路里的電信號、WIFI的信號
  2. 數(shù)據鏈路層(Data Link Layer):負責操控物理層。有MAC、碰撞檢測、指數(shù)退避
  3. 網絡層(Network Layer):負責各種報文交換和路由
  4. 傳輸層(Transport Layer):UDP、TCP,負責點對點傳輸
  5. 會話層(Session Layer):使用UDP、TCP來創(chuàng)建連接,傳輸,關掉連接
  6. 表示層(Presentation Layer):信息語法語義關聯(lián)。加密解密、壓縮解壓縮
  7. 應用層(Application Layer):由應用層服務組成。SMTP郵件傳輸協(xié)議、HTTP超文本傳輸協(xié)議、FTP文件傳輸協(xié)議
    分層后有利于改進和維護






30.萬維網(World Wide Web)

萬維網不等于互聯(lián)網,它是在互聯(lián)網之上運行的。萬維網的基本單位是一個網頁,網頁上有無數(shù)的超鏈接(hyperlink)、超文本hypertext,把更多的網頁連接在一起,形成了萬維網。

這就需要每個網頁有唯一的地址,叫統(tǒng)一資源定位器(Uniform Resource Locator,URL)。網絡服務器的標準端口為 80 端口,使用超文本傳輸協(xié)議(Hypertext Transfer Protocol,HTTP)進行數(shù)據傳遞,1991 年有了 HTTP 第一個標準,即 HTTP 0.9,它當時只有一個 Get 指令。

光有超文本也不行,別人不知道哪些文本是超鏈接哪些不是。然后人們開發(fā)出了超文本標記語言(Hypertext Markup Launguage,HTML),1990 年有了第一個版本,即 HTML 0.8。最新的 HTML5 有100 多種標簽,還有其他相關技術,如層疊樣式表(Cascading Style Sheets, CSS) 和 JavaScript 加進 HTML 做一些更復雜的事情。

Web瀏覽器(Web Browsers) 跟網頁服務器溝通,瀏覽器從網頁服務器獲取網頁和媒體,瀏覽器復雜渲染顯示。這個架構于 1990 年 Tim Berners-Lee制作,同時制定了URL、HTML、HTTP,整套架構于 1991 年發(fā)布。萬維網就此誕生。由于這些標準都是公開的,所以有了多家瀏覽器,如 Internet Explorer、Mozilla、Chrome。

慢慢的萬維網里有了越來越多的網站,其中一些成為了巨頭,如亞馬遜。然后又有了門戶網站,做一個目錄,專門幫人歸類記錄其他網站的,如 Yahoo。然后有了搜索引擎,Google。

搜索引擎由 3 部分組成:爬蟲(web crawler,抓取新超鏈接) + 索引(index,記錄爬過的網頁) + 搜索算法(search algorithm,查詢索引)

網絡中立(network neutrality)是指 應不應該平等對待所有數(shù)據包,讓它們以相同的速度和優(yōu)先級傳遞。如果不網絡中立,某些巨頭就可以壟斷排擠其他競爭對手讓對手的數(shù)據包傳遞得很差。

今天為什么我們說 HTTP 是無連接、無狀態(tài)的:無連接是因為每個請求都不用保持連接,避免服務端占用資源。無狀態(tài)是因為每個請求獨立執(zhí)行,一個請求不知道其他請求的信息,服務端不用跟蹤狀態(tài)占用資源。

31.網絡安全(Cybersecurity)

網絡安全可以分為三個方向:

  • 保密性(secrecy):只有被授權的人才能讀取計算機系統(tǒng)和數(shù)據
  • 完整性(integrity):只有被授權的人才能讀寫系統(tǒng)和數(shù)據
  • 可用性(availability):只有被授權的人才能總是訪問系統(tǒng)和數(shù)據

威脅模型分析(threat model),在特定情境下做的保護措施。

要有身份認證(authentication):①what you know,如用戶名密碼 ②what you have,如果是一把鎖那么你需要有鑰匙 ③what you are,如指紋識別虹膜識別。

暴力攻擊(brute force attack),把所有可能都試一遍。

多因素認證(multi-factor authentication),同時使用 2 中或以上的認證方式。如蘋果的密碼和驗證碼同步驗證。

過了身份認證以后,還需要有 “訪問控制(Access Control)”,即 Permissions、Access Control Lists。 美國國防部多層安全政策的Bell-Lapadula模型,即“不能向上讀,不能向下寫”。

隔離,是種把損害降到最低的思想。比如“沙盒(sandbox)”。

32.黑客&網絡攻擊

黑客(Hacker)有好有壞,好的是為了查找漏洞及時修復,壞的是惡意破壞牟利。前者是White Hats,后者是Black Hats。

  • 社會工程學(Social Engineering),不是技術手段,而是欺騙別人讓人泄密。
  • 釣魚(Phishing),長得跟真的一樣的假網站。
  • 假托(Pretexting),假裝是內部人員,欺騙泄密。
  • 木馬(Trojan Horses),偷數(shù)據、加密文件讓你交贖金等。
  • NAND鏡像(NAND Mirroring),通過物理接觸往內存里面接幾根線,復制內存,重置內存,暴力破解。此方法破解過iPhone 5C。
  • 漏洞利用(Exploit),利用系統(tǒng)漏洞獲取某些能力和訪問權限。一種常見的Exploit就是緩沖區(qū)溢出(Buffer Overflow),緩沖區(qū)是一種概稱,指預留的一塊內存空間,超長溢出部分的數(shù)據會覆蓋相鄰的數(shù)據,導致系統(tǒng)出錯或非法修改內存中的數(shù)據。應對措施有邊界檢查(Bounds Checking)、隨機存放變量在內存中的位置、在緩沖區(qū)后面留點不用的內存空間(金絲雀,canaries)去跟蹤檢查。
  • 代碼注入(Code Injection),常用來攻擊用數(shù)據庫的網站。對此,首先不讓輸入特殊字符,然后服務器再篩查一遍,最后放入數(shù)據庫查。
  • 零日漏洞(Zero Day Vulnerability),即軟件制造者不知道軟件有新漏洞被發(fā)現(xiàn)。
  • 計算機蠕蟲(Worms),有足夠多的電腦有漏洞,讓黑客把惡意程序自動在電腦間相互傳播。這樣黑客拿下了大量電腦,這些電腦組成了”僵尸網絡(Botnet)“。”拒絕服務攻擊(DDoS)“就是僵尸網絡里的所有電腦發(fā)一大堆垃圾信息堵塞服務器。

33.密碼學

  • 多層防御(Defence in depth),沒有永遠安全的系統(tǒng)或程序,那就設置多層防御。
  • 加密(Encryption)、解密(Decryption),把明文通過加密算法轉為密文就叫加密,反之為解密。沒有密碼得到的就是一堆亂碼。
  • 早期還沒有計算機的時候就已經有人加密私人信件,一類是替換加密(Substitution cipher),凱撒加密(Caesar chipher)是這類替換加密中的一種,把字母A變成D等。另一類是移位加密(Permutation cipher),列位移加密(Columnar transpostion cipher)是這類中的一種,用一小網格利用讀取方向和網格大小來解密。
  • 德國納粹Enigma加密機,到了1990年代,人們用密碼學做了加密機器。Enigma不僅是簡單的替換加密,轉子每輸入一個字母會轉動一格,就意味著AAA可能變?yōu)镃DK。2臺初始設置相同的Enigma配合使用就可以做到加解密。
  • 1997年的”數(shù)據加密標準“(Data Encryption Standard,DES),最初用56-bit二進制密鑰。
  • 2001年的”高級加密標準“(Advanced Encryption Standard,AES),用更長128/192/256-bit。AES將數(shù)據切成小塊,每塊16個字節(jié),然后用密鑰進行一系列替換加密和移位加密以及其他操作,每塊數(shù)據重復這個過程10次或以上。為啥選用這些長度bit,為啥只重復10次?權衡安全和性能。
  • 密鑰交換(key exchange),早期人們靠口頭約定或密碼本,而現(xiàn)在要在互聯(lián)網上公開傳遞密鑰。密鑰交換是一種不發(fā)送密鑰但依然讓2臺計算機在密鑰上達成共識的算法。用單向函數(shù)實現(xiàn)。
  • 單向函數(shù)(one-way functions) 和 密鑰加密 原理,單向函數(shù)是一種數(shù)學操作,很容易算出結果,卻很難逆向得到輸入,如顏色混合,很難知道混了什么顏色。
  • 迪菲-赫爾曼 密鑰交換(Diffie-Hellman Key Exchange),在Diffie-Hellman中,單向函數(shù)是模冪運算,那一個數(shù)當基數(shù)一個數(shù)當指數(shù)做冪運算再除以第三個數(shù)得到余數(shù),只給余數(shù)和基數(shù)很難的值指數(shù)是多少。
  • 非對稱加密(Asymmetric encryption),加密和解密不是同一個密鑰。目前最流行的非對稱加密算法是RSA。

密碼學里常常會用到質數(shù),質數(shù)是指大于1的自然數(shù)中,除了1和自身以外不能被其他自然數(shù)整除的自然數(shù)。


34.機器學習&人工智能

機器學習(machine Learning, ML)是為實現(xiàn)人工智能(Artificial Intelligence, AI)的技術之一。
機器學習算法的目的是為了最大化正確率和最小化錯誤率。
很多機器學習使用了統(tǒng)計學算法,如通過特征生成決策樹(decision tree);但也有其他方法,如人工神經網絡(artificial neural networks)。

35.計算機視覺

計算機視覺(computer vision),目標是讓計算機理解圖像和視頻。

36.自然語言處理

人類希望計算機也能像人類一樣有處理自然語言的能力,自然語言處理(Natural Language Processing,NLP)。
自然語言不同于機器語言,機器語言詞匯量少、高度結構化,而人類自然語言詞匯量大、有口音、一詞多義等等。

英語單詞的九種基本詞性:名詞(nouns)、代詞(pronouns)、冠詞(articles)、動詞(verbs)、形容詞(adjectives)、副詞(adverbs)、介詞(prepositions)、連詞(conjunctions)、感嘆詞(interjections)

早期聊天機器人和對話系統(tǒng)用無數(shù)個手動寫的“規(guī)則匹配”(可能說的話)來實現(xiàn)。

計算機從聲音中提取詞匯,即語音識別(speech recognition),通過譜圖(不同頻率振幅)定位重讀元音,利用深度神經網絡識別出人類語音。

通過語音合成(speech synthesis),讓計算機輸出語音。


37.機器人

1940年代有了CNC機器(Computer Numerical Control,計算機數(shù)控),可以執(zhí)行一連串程序指定的操作,做一些非常精細的加工,這在之前生產中是很難做到的。CNC機器大大推進了制造業(yè)。

利用控制回路和反饋機制的PID控制器(Proportional integral derivative controller),讓機器人的屬性變成期望值。

把各種技術(人工智能、計算機視覺、自然語言處理等)結合起來,讓機器人越來越像人。機器人可以接受命令并高效執(zhí)行,有智力并且可以殺人的機器人叫“致命自主武器(lethal autonomous weapons)”

38.計算機心理學

我們需要了解人類心理學,做出更好的計算機。比如人類對顏色的感知,用顏色強度表示連續(xù)的數(shù)據、用不同顏色表示沒有順序的分類數(shù)據等等會非常有效。

界面設計中有個重點概念,直觀功能(affordances),直觀功能為如何操作物體提供線索。如旋鈕用來轉,插槽用來插東西。the user knows what to do just by looking.

與直觀功能相關的一個心理學概念是“認出與回想(recognition vs recall)”,這就是為什么選擇題比填空題更容易。用感覺來出發(fā)記憶會容易得多。

人機交互(human robot interaction, HRI)是一個研究人類和機器人交互的領域。

原文地址:
(b站)10分鐘速成課:計算機科學
(Youtube)Computer Science

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,882評論 6 531
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 98,208評論 3 414
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事?!?“怎么了?”我有些...
    開封第一講書人閱讀 175,746評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,666評論 1 309
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,477評論 6 407
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 54,960評論 1 321
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,047評論 3 440
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,200評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經...
    沈念sama閱讀 48,726評論 1 333
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,617評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,807評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,327評論 5 358
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 44,049評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,425評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,674評論 1 281
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,432評論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,769評論 2 372

推薦閱讀更多精彩內容

  • 計算機組成原理課程在計算機系統(tǒng)中的位置 圖1描述了計算機系統(tǒng)抽象層的轉換。從圖1可以看出,計算機系統(tǒng)由不同的抽象層...
    開點工作室閱讀 3,395評論 16 55
  • 開篇補充 這篇文章大概寫于兩三個月前,但一直忘記發(fā)布文章。今天用了半小時把這篇文章大概瀏覽了下,依然感覺能學到很多...
    ZhengYaWei閱讀 3,542評論 3 32
  • 王爽匯編全書知識點大綱 第一章 基礎知識 機器語言 匯編語言的產生 匯編語言的組成 存儲器 cpu對存儲器的讀寫 ...
    2c3ba901516f閱讀 2,431評論 0 1
  • 一.認識匯編語言 要認識匯編語言,還得從編程語言的發(fā)展說起,語言有以下幾種分類,其發(fā)展都是為了讓我們更容易去操縱計...
    WellsCai閱讀 1,009評論 0 1
  • 又是一年秋招季,哎呀媽呀我被虐的慘來~這不,前幾陣失蹤沒更新博客,其實是我偷偷把時間用在復習課本了(霧 堅持在社區(qū)...
    tengshe789閱讀 2,024評論 0 8