读矢泽久雄三本书总结
讀這三本書是因?yàn)樽约簩χR逐漸有了一個(gè)一點(diǎn)點(diǎn)的了解之后決定的。最先想學(xué)習(xí)pring的相關(guān)框架,在看了兩本相關(guān)的書籍之后發(fā)現(xiàn)自己并不能獨(dú)立的查看Spring框架的源碼,因?yàn)樽约簺]有弄清楚javase的基礎(chǔ)模塊,比如securityManager,Class,properties等,發(fā)現(xiàn)自己應(yīng)在先了解jvm,但是在準(zhǔn)備看jvm的時(shí)候又發(fā)現(xiàn)自己對基礎(chǔ)的計(jì)算機(jī)基礎(chǔ)也不太清楚,這就引出了矢澤久雄的三本書。
這確實(shí)是三本非常棒的書,《計(jì)算機(jī)是怎樣跑起來的》,《程序是怎樣跑起來的》以及《網(wǎng)絡(luò)是怎樣連接的》。三本書基本可以看作現(xiàn)代計(jì)算機(jī)的通識,對我的啟發(fā)非常重要。
下面根據(jù)這三本書描繪一下自己構(gòu)建的框架:
部分高級語言的作用流程(例如C):
應(yīng)用程序 -->解釋-->匯編 -->CPU
java語言作用流程:
應(yīng)用程序 -->編譯 -->虛擬機(jī) -->解釋+編譯 -->winAPI+匯編 -->CPU
服務(wù)器的作用流程(省略協(xié)議棧部分內(nèi)容表示):
socket --> accept --> 如果沒有可連接套接字,啟動監(jiān)聽直到接收可連接套接字 -->收發(fā)數(shù)據(jù) -->刪除套接字
其中不管我們使用的是那種高級語言,最終起作用的始終是作用到CPU上。其中CPU便是各語言的基礎(chǔ),也是共同的部分。在此需要中間插一句,window,linux系統(tǒng)的公共API接口,在各種語言的開發(fā)上起到了非常重要的作用。
這里主要介紹一下java的作用流程。開發(fā)出來的源程序經(jīng)過編譯生成.class文件,編譯是一門比較龐大的知識體系,其復(fù)雜程度以至于專門設(shè)立一門學(xué)科,大概也就窺見一般了,當(dāng)然這是逐漸演化的結(jié)果,最初也是較為簡單。我們不對每一步做過多的探究,它主要的過程就像我們看英語一樣。主要了解其中幾大步驟 :
詞法分析 -->詞義分析 --> 語法分析 --> 語義分析 --> 優(yōu)化語言 -->生成目標(biāo)語言
經(jīng)過編譯成的二進(jìn)制文件作用在虛擬機(jī)上,這個(gè)虛擬機(jī)有一點(diǎn)需要提及一下。網(wǎng)上有一些容易引起誤導(dǎo)的說法。虛擬機(jī)就像字面的含義,虛擬的機(jī)器,它模仿計(jì)算機(jī)劃分內(nèi)存區(qū)域,生成虛擬機(jī)棧。很多說法就是在這個(gè)概念上容易誤導(dǎo)人。虛擬機(jī)也可以看作一個(gè)程序,經(jīng)過解釋+編譯最終作用在CPU上。一個(gè)完整的工業(yè)虛擬機(jī)并不是用一種語言完成的,大部分C,C++也還有其他語言。它的具體的設(shè)計(jì)框架我下一階段需要學(xué)習(xí)的。這個(gè)虛擬機(jī)很多都是調(diào)用winAPI(window)。
CPU是由控制器和運(yùn)算器構(gòu)成,其中有大量的寄存器在協(xié)調(diào)運(yùn)行,從單片機(jī),plc開始CPU的流程就大體確定,這幾十年也還遵循著這個(gè)規(guī)律,但是功能可能會發(fā)生巨大變化,其中大體流程:
取寄存器 中存儲 地址 -->獲得 指令 + 數(shù)據(jù) 分別存放在寄存器中-->cpu的控制器讀取指令 -->運(yùn)算器執(zhí)行數(shù)據(jù)
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
從馮諾依曼計(jì)算機(jī)開始到現(xiàn)在已經(jīng)發(fā)生了巨大的變化,但是其運(yùn)行的核心并沒有變化,都是以控制器和運(yùn)行器為核心,輔以內(nèi)存和輸入輸出。現(xiàn)代window計(jì)算機(jī)應(yīng)該也是在其基礎(chǔ)上開發(fā)出來圖形界面,將展示信息存入內(nèi)存,通過GPU渲染。
系統(tǒng)最開始是由監(jiān)聽的需求引出的,發(fā)展到今天已經(jīng)是一個(gè)龐然大物。
之前我以為算法和數(shù)據(jù)結(jié)構(gòu)是運(yùn)算器和虛擬機(jī)的定義的,這是一個(gè)大坑,它們都是由語言寫的。甚至a++這種語句,也都也已說是一種算法,只不過這種算法實(shí)在是非常簡單的一種,像二叉樹,紅黑樹,Btree,B+tree等都是算法。數(shù)據(jù)結(jié)構(gòu)也沒有那么高深,它的概念也是較為寬泛一點(diǎn),就像我們java中定義的domain類也是一種數(shù)據(jù)結(jié)構(gòu),但是像stack,queue等常聽到的它們都是在數(shù)組的基礎(chǔ)上,通過邏輯演化而來的,更像是在數(shù)組之上的概念。
xml,html都是文本標(biāo)記語言,它們的解析方式也都是需要事先定義好模板,按照模板來解析,xml的模板主要有兩種xsd,dtd。在spring框架中之所以能成bean對象就是事先定義好xsd的文件了。html有一個(gè)預(yù)編譯的名詞來形容,但是不管怎樣,都是有事先定義好的模板。它們的解析方式和普通的文件的解析方式很象,就那么幾種SAX,DOM,JAXP等,我看spring就是sax的方式。
計(jì)算機(jī)中雖然都是二進(jìn)制數(shù)據(jù),但運(yùn)算并不是完全按照二進(jìn)制做加減乘除操作的,最重要的原因是負(fù)的小數(shù)的除,導(dǎo)致并不能簡單的使用位左移和右移。java中double類型做分母并不會報(bào)錯,都可以正常運(yùn)行的原因就是它采用的雙精度和補(bǔ)碼運(yùn)算。
總結(jié)
以上是生活随笔為你收集整理的读矢泽久雄三本书总结的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: JavaScript写贪吃蛇游戏,代码思
- 下一篇: 脑洞大开的 iPhone 配件,看看你有