Computer-System Structures八大思想
David Wheeler
All problems in computer science can be solved by another level of indirection
“計算機科學(xué)中遇到的所有問題都可通過增加一層抽象來解決”
侯捷老師所言:「學(xué)習(xí)需要明師。但是明師可遇不可求,所以退而求其次你需要好書,并盡早建立自修的基礎(chǔ)。迷時師渡,悟了自渡,尋好書看好書,就是你的自渡法門。」
《計算機組成原理:硬件/軟件接口》書中說的計算機系統(tǒng)結(jié)構(gòu)的八個偉大思想:
看某篇拿了一堆offer的大佬說:
后面學(xué)習(xí)不論是計算機網(wǎng)絡(luò),還是操作系統(tǒng),都對這幾個思想印象深刻,感覺都是這幾個思想的具體化實現(xiàn),類似于 cache 或者 Redis 這樣的技術(shù),我認(rèn)為實際上就是利用了加速大概率事件,和存儲器層次的思想去進(jìn)行設(shè)計和加速
編程指北-公眾號的一段話很有感觸:
編譯原理遇見算法
當(dāng)你學(xué)完有限狀態(tài)機以后,你會發(fā)現(xiàn)以前覺得很牛逼正則表達(dá)式似乎自己也能用 DFA、NFA 實現(xiàn)一下了。狀態(tài)機的思想在編程中很多地方都用得上。
比如解析 HTTP 協(xié)議,如果沒學(xué)過狀態(tài)機思想,你可能會一行行的 if/else 去做解析,這里最麻煩的地方在于,if/else 需要提前將 HTTP 頭部字段都接收到再來判斷,而我們知道 HTTP 基于 TCP,而 TCP 是流式傳輸,所以你很有可能是幾個字符一組組接收到的,這個時候用 if/else 寫出來就很難看了。
而用狀態(tài)機編寫起來代碼就會非常優(yōu)雅。狀態(tài)的轉(zhuǎn)移是由規(guī)則驅(qū)動的,接收到一個字符就判斷一個,非常的方便。
繼續(xù)學(xué)完語法分析,你會掌握遞歸下降分析這樣非常重要的思想,你可以使用遞歸下降快速的實現(xiàn)四則運算計算器。
如果不用遞歸下降你可能需要先中綴表達(dá)式轉(zhuǎn)后綴,然后求值,這是我們大一數(shù)據(jù)結(jié)構(gòu)課寫的,當(dāng)時用棧寫的,有點麻煩。后來學(xué)完編譯原理,又用遞歸下降重寫了一遍,區(qū)區(qū)幾十行代碼遍搞定。
還有一類場景在實際開發(fā)中的用的很多,比如淘寶、京東這樣的電商,它們的營銷規(guī)則有很多,比如滿減、直減、跨店等等,這樣的規(guī)則是不可能寫死在代碼里的。
那是怎么做的呢?
一般會實現(xiàn)一個配置系統(tǒng),并設(shè)計一個DSL(領(lǐng)域特定語言)來表達(dá)這些規(guī)則,將規(guī)則直接配置到系統(tǒng)中,這樣可以非常方便的修改,那么如何在代碼里去解析 DSL 定義的規(guī)則呢?這就需要為 DSL 寫一個語法解析器,這里就會用到語法分析的方法。
DSL(Domain Specific Language),它是一種用于某個特定領(lǐng)域的程序設(shè)計語言。這種特定于某個領(lǐng)域是相對于 C、C++、Python 這種通用語言而言的,通用語言可以在各個領(lǐng)域使用,我們熟悉的大多數(shù)程序設(shè)計語言都是通用語言,它們都是圖靈完備的。
像我們平常經(jīng)常使用的 JSON、SQL、HTML 這些都算是一種 DSL,你甚至可以嘗試用遞歸下降去寫一個 JSON、XML 解析器,這比寫電商網(wǎng)站更有價值的。
繼續(xù)往下學(xué)你會了解到抽象語法樹 AST 如何生成、如何轉(zhuǎn)化為中間代碼、如何對中間代碼優(yōu)化、最終又是怎么生成機器指令的。
你會看到貪心算法在寄存器分配中的應(yīng)用,也會看到圖論中的可達(dá)性分析又是如何實現(xiàn)死代碼消除。
總結(jié)
以上是生活随笔為你收集整理的Computer-System Structures八大思想的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: android 锁屏的生命周期_Acti
- 下一篇: C语言简易程序设计————11、打印楼梯