计算机基础知识的最小集合
碼農(nóng)翻身的老讀者們估計要煩了:?老劉真是老了,怎么老是在這里啰嗦計算機基礎?
沒辦法,問的人特別多,?我還是要再啰嗦一次,希望這是最后一次。
很多人工作后痛感計算機基礎知識的缺乏,?那計算機基礎知識都有哪些呢?
我覺得首先計算機專業(yè)的那六大件:組成原理,操作系統(tǒng),數(shù)據(jù)庫,編譯原理,計算機網(wǎng)絡,數(shù)據(jù)結(jié)構(gòu)(這個說太多遍了,這次不再講了),?其次還得加上分布式的基礎知識,?因為現(xiàn)在的系統(tǒng)都變成分布式的了。
如果你是做應用層開發(fā)的,那幾門課程中的有些內(nèi)容和日常工作關(guān)聯(lián)度不大,我挑那些最重要的來說一說,也算是一個最小集合吧!
計算機組成原理
如果你不是做操作系統(tǒng)/驅(qū)動程序的,直接和硬件打交道的機會很少,因為操作系統(tǒng)已經(jīng)把他們屏蔽掉了,提供了抽象的API給我們使用。
但是還必須理解馮諾依曼體系的結(jié)構(gòu),CPU和內(nèi)存,硬盤,各種外設之間的關(guān)系,寄存器、緩存等知識。
CPU有哪些指令,如何執(zhí)行這些指令,如果實現(xiàn)數(shù)組,結(jié)構(gòu)體,函數(shù)調(diào)用,這就涉及到匯編的知識。
像原碼,反碼,補碼,定點數(shù)、浮點數(shù)的表示和運算也是編程中必備的知識,幾乎每種語言都要涉及。
現(xiàn)在很多語言都是在虛擬機上運行的,你只要是了解了計算機的組成原理,再去看哪些虛擬機,就會發(fā)現(xiàn)概念都是相通的。
另外CPU中的緩存,緩存一致性協(xié)議,DMA的異步思想都會在應用層中有所體現(xiàn)。
如果能找一本書,盡可能多的囊括這些知識的話,我覺得還是神書《深入理解計算機系統(tǒng)》的前4章,?我之前還對它寫過一個書評,在這里:?為什么說《深入理解計算機系統(tǒng)》是一本神書?
《編碼》是一個更加科普性,但是也更加有趣的講組成原理的書。
操作系統(tǒng)
操作系統(tǒng)是比較枯燥的, 站在應用層的角度,我認為重點是掌握操作系統(tǒng)對外提供的抽象,包括進程、線程,文件,虛擬內(nèi)存,以及進程間的通信問題。
幾乎所有的編程語言都會涉及到對多進程或者多線程編程的支持,?特別是多線程的并發(fā)編程,所以必須得搞明白他們的本質(zhì)是什么,線程都有哪些實現(xiàn)方式(對以后學習各種語言和并發(fā)模型有極大好處)。?得真正地體會到“進程是資源分配的最小單位,線程是調(diào)度的最小單位。”?這句話的含義。
幾乎所有的編程語言都會涉及到鎖和死鎖,最好在最底層理解鎖是怎么實現(xiàn)的。
需要理解虛擬內(nèi)存和物理內(nèi)存直接的關(guān)系,分段和分頁,文件系統(tǒng)的基本原理。
對于進程的調(diào)度,頁面分配/置換算法,磁盤的調(diào)度算法,I/O系統(tǒng),我認為優(yōu)先級比較低。
計算機網(wǎng)絡
我認為必須要理解的是這些:
什么分組交換
TCP可靠性傳輸原理,TCP/IP的協(xié)議細節(jié),?三次握手,四次揮手,TCP狀態(tài)轉(zhuǎn)換。
幾個重要的協(xié)議DHCP,UDP,?ARP,?DNS。
能夠說出一個客戶端如何在接入網(wǎng)絡以后,通過這些協(xié)議,跨域網(wǎng)絡和服務器通信的。
和應用層結(jié)合非常緊密的Socket知識和網(wǎng)絡安全(對稱加密,非對稱加密,Hash, 數(shù)字簽名,以及集大成者Https)
至于網(wǎng)絡層的路由選擇算法,鏈路層的各種協(xié)議,我認為優(yōu)先級比較低。
還有一個重要的知識點,一般的網(wǎng)絡書都沒提,就是I/O多路復用,涉及到同步/異步,阻塞/非阻塞,select/epoll?,這個是很多軟件的基礎,在《Unix網(wǎng)絡編程》,《深入理解計算機系統(tǒng)》中有講述。
以上這些知識,在你學習Redis ,Ngnix, Tomcat, LVS等軟件時將有極大的幫助。
數(shù)據(jù)庫
這個和日常工作結(jié)合極其緊密,不用我再多說,包括最基本的SQL,各種范式,事務及其隔離級別,事務的實現(xiàn)方式,索引及其實現(xiàn)方式,B+樹等等。
編譯原理
你這一輩子也許都不會去寫一個編譯器,但是很有可能會利用現(xiàn)成的工具去生成/操作一個抽象語法樹(AST),甚至可以會寫一個DSL(領(lǐng)域特定語言)。?所以你得理解詞法分析、語法分析、語義分析,中間代碼生成,代碼優(yōu)化這個基本編譯的過程。
學習了編譯與原理,會對語言的一些設計有更深的理解,比如LISP。
分布式的理論知識
由于現(xiàn)在的系統(tǒng)慢慢地變成了分布式,?所以又擴展出了很多相關(guān)基礎知識需要學習:
數(shù)據(jù)復制與一致性:
CAP理論, BASE原則,冪等性, 2PC, TCC
Paxos , Raft , Gossip
數(shù)據(jù)分片和路由:
Hash分片:Hash取模(實際中非常常見的算法),?虛擬桶(Redis使用),一致性Hash(memcached使用)
范圍分片
最后想說的是,不能帶著特別功利的目的去學習這些基礎,不能想著立刻、馬上就應用到實戰(zhàn)中,從中獲益。更重要的理解掌握它們背后的思想,有一天你會發(fā)現(xiàn):奧,這個問題我在哪里見過,可以用類似的辦法來解決啊!
總結(jié)
以上是生活随笔為你收集整理的计算机基础知识的最小集合的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 知乎高赞回答:裁员、降薪、996...这
- 下一篇: 正则表达式真的很骚,可惜你不会写!