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