读书笔记 -- 《计算机是怎样跑起来的》
推薦語
這本書用通俗的語言講解計算機相關組成,內容比較淺顯易懂,適合初級程序員學習,中級程序員查漏補缺,不適合高級程序員。
給個四星級推薦(滿分五星)。
關注公眾號《嵌入式小散修》,回復 計算機是怎樣跑起來的。
一、計算機的三大原則
計算機的三大原則:
-
計算機是執行輸入、運算、輸出的機器
-
程序是指令和數據的集合
-
計算機的處理方式有時與人們的思維習慣不同
對計算機來說什么都是數字,理解新技術要用計算機思維,當然為了貼近人類,計算機在不斷地進化,開發方式也在進步,也會越來越方便,機器的交互方式更趨向于人類的方式。
二、計算機的組成(構造一個微型計算機)
- 最重要的三個部分:CPU、內存和 I/O。
- 使用 DMA 往內存里寫入數據(此時要隔離 CPU 和內存之間的聯系),可以減少 CPU 的使用量,增加系統的執行能力。
- 這一章實現的東西很原始,不過描述的很清楚,就是各個模塊之間要執行的操作。
- 實現一次組裝微機還是很有用的,無論是實物還是模擬軟件模擬或者紙上畫。
三、手工匯編
- CPU 的種類不同,能夠識別的匯編語言也不相同。
- 每個 CPU 在復位之后都會從某個固定位置開始執行代碼(一般是位置0)。
- 為了方便查看程序,使用助記符來實現的匯編語言其實等效于機器語言,語句是一一對應的。
- 匯編語言的組成:“標簽”、“操作碼(指令)”和“操作數(指令的對象)”。
- 計算機中各個模塊遵循這各種預定義的協議,保證著系統能夠有序運行。
- CPU 一般只能運算寄存器的值,所以數據在內存、IO、寄存器之間的傳輸很重要。
- 同樣是匯編語言中的 1 條指令,有的指令對應著 1 個字節的機器語言,有的指令則對應著多個字節的機器語言。
- 機器語言其實就是一種用二進制數字串來表示數據或者指令,一串數據可能就是一個指令,這都是在 CPU 設計的時候定義好的。
- 無論是底層的匯編,還是各種高級語言,最終都會變成機器語言才能夠被 CPU 執行。
- PC 寄存器會隨著程序的運行自動往下更新。
四、程序像河水一樣流動
-
程序的執行過程就像水流動一樣,順序流動、產生分支流動或者形成旋渦(循環),腦中要有這種場景,一種意境。
-
結構化編程不推薦使用跳轉指令,跳轉指令(goto 語句)使程序陷入“意大利面條”的狀態,因為他可以隨意跳轉執行地址。
-
寫程序建議先畫個粗略的流程圖,然后完善細節,最后寫代碼。
-
根據輾轉相除法求解最大公約數的方法(又稱歐幾里得算法),可以直接使用減法即可實現。
-
要掌握的幾種算法
(判定素數有許多優化方法,比如要是從 2 開始依次除下去,只需要從 2 除到待判定數的平方根就足夠了)
-
求解最小公倍數:用兩個整數的乘積除以這兩個整數的最大公約數。
-
在思考算法時需要時刻記著,解決問題時是可以利用計算機的處理速度的(這也是暴力破解方法的來源)。
-
題目中的哨兵作用很巧妙。
-
思考問題是否存在一些規律,有時可以方便解決問題。
-
想好再寫代碼,比如在紙上畫流程圖。
五、數據結構
- 數據結構就是為了更方便處理數據。
- 數組、鏈表是基礎的數據結構,棧、隊列、二叉樹、圖等都是從這兩者變化而來。
六、面向對象編程
- 面向對象編程是一種基于以下思路的程序設計方法:將關注點置于對象(Object)本身,對象的構成要素包含對象的行為及操作,以此為基礎進行編程。這種方法使程序易于復用,軟件的生產效率因而得以提升。其中所使用的主要編程技巧有繼承、封裝、多態三種。
- 面向對象的知識比較龐大,還是需要去實踐才能體會。
十、加密
-
對于文本加密,無非是對字符進行某個形式的偏移,解密的時候偏移回來即可。
-
加上 3 就是加密,減去 3 就是解密。因此通常把像 3這樣用于加密和解密的數字稱為“密鑰”。
-
XOR 運算的有趣之處在于,用 XOR 運算加密后的密文,可以通過相同的 XOR 運算解密。也就是說,一個程序既可用于加密又可用于解密,很方便(兩個相同的數異或為0,任何數異或0等于其自身)
-
在互聯網等環境中,會有很多不固定的人群相互收發經過加密處理的數據。一般情況下,會將所使用的加密方式公開,而只對密鑰的值保密。但是令人感到遺憾的是,這個世界上還是有壞人的。有些人會盜取那些并不是發送給他們的加密數據,企圖破解后用于不可告人的目的。盡管這些人并不知道密鑰的值,但是他們會利用計算機強大的計算能力,用密鑰所有可能的取值去試著破解。
-
可以通過增加秘鑰長度和復雜度的方式增加被破解的難度。
-
前文的秘鑰需要雙方都知道且不能泄露,但是對于互聯網場景根本行不通。
-
公開密鑰加密技術解決了這個問題,在公開密鑰加密技術中,用于加密的密鑰可以公開給全世界,因此稱為“公鑰”,而用于解密的密鑰是只有自己才知道的秘密,因此稱為“私鑰”。
-
可用于實現公開密鑰加密技術的算法有若干種,目前廣泛應用于互聯網中的 RSA 算法。
使用 RSA 創建公鑰和私鑰的步驟如圖 10.8 所示。無論是公鑰還是私鑰都包含著兩個數值,兩個數值組成的數對兒才是一個完整的密鑰(210)
-
該算法之所以成功的原因:乍一看會以為只要了解了 RSA 算法,就可以通過公鑰 c = 323、e = 11 推算出私鑰 c = 323,f = 131 了。但是為了求解私鑰中的 f,就不得不對 c 進行因子分解,分解為兩個素數 a、b。在本例中 c 的位數很短,而在實際應用公開密鑰加密時,建議將 c 的位數(用二進制數表示211時)擴充為 1024 位(相當于 128 字節)。要把這樣的天文數字分解為兩
個素數,就算計算機的速度再快,也還是要花費不可估量的時間,時間可能長到不得不放棄解密的程度。 -
實際中計算數字簽名時,使用的是通過更加復雜的公式計算得出的、被稱作 MD5(Message Digest5)的信息摘要。由于 MD5 經過了精心的設計,所以使得兩段明文即使只有略微的差
異,計算后也能得出不同的信息摘要。 -
合理的密鑰應該滿足如下條件:長短適中、可以反復使用、可以通過某種通信手段交給接收者,并且通信雙方以外的其他人難以用它來解密。公開密鑰加密技術就完全滿足上述條件。
總結
以上是生活随笔為你收集整理的读书笔记 -- 《计算机是怎样跑起来的》的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 欢聚时代java开发工程师校招面经(已完
- 下一篇: 线上峰会 | 产学研大咖云集,国内外共话