程序員必須知道的電腦知識
作為程序員,必須了解哪些關(guān)于計算機的知識呢?接下來由學(xué)習(xí)啦小編為大家推薦程序員必須知道的電腦知識,希望對你有所幫助!
程序員必須知道的電腦知識:
存儲—-塊設(shè)備,文件系統(tǒng),集群文件系統(tǒng),分布式文件系統(tǒng),光纖SCSI,iSCSI,RAID等。
網(wǎng)絡(luò)—-以太網(wǎng),光纖網(wǎng),蜂窩網(wǎng)絡(luò),WIFI,VLAN等。
計算機體系結(jié)構(gòu),主要就是CPU指令集。x86,ARM等。
USB協(xié)議。需要知道URB包。
PCI協(xié)議,PCI-E協(xié)議?,F(xiàn)代計算機的外設(shè)都是PCI協(xié)議和PCI-E協(xié)議的。顯卡現(xiàn)在全是通過 PCI-E協(xié)議連接到計算機上的。相對來說減少了很多需要學(xué)習(xí)的知識。搞虛擬化就需要深入掌握PCI協(xié)議。
圖像處理–圖像壓縮,視頻實時編碼等。
3D游戲
關(guān)系數(shù)據(jù)庫
NoSQL數(shù)據(jù)庫
分布式操作系統(tǒng)
編譯原理
機器學(xué)習(xí)–現(xiàn)在大數(shù)據(jù)要用哦!
了解這些領(lǐng)域知識,也包括了解該領(lǐng)域現(xiàn)有的商用硬件、商用軟件和開源軟件。很多時候,你要完成的工作,已經(jīng)有現(xiàn)成的工具了。你只要使用現(xiàn)成的工具就可以完成任務(wù),不需要進行開發(fā)。有時候,只需要組合現(xiàn)有的工具,寫一些腳本就可以完成任務(wù)。
如,我一次要實現(xiàn)一個雙向同步任務(wù)。找到了一個優(yōu)秀的開源軟件Unison,編寫一下配置文件就圓滿地完成了任務(wù)。不需要編寫任何代碼。
還有一次,要做高可用,用Python調(diào)用了幾個開源軟件就輕松實現(xiàn)了。
編寫安裝程序,定制操作系統(tǒng),知道了操作系統(tǒng)的領(lǐng)域知識,寫幾行腳本就可以輕松搞定。
不具備領(lǐng)域知識的人,就可能不得不進行大量無謂的開發(fā),甚至開發(fā)很久之后才發(fā)現(xiàn),這根本就是一條死路。
另外,扎實的領(lǐng)域知識,可以大大提高編程調(diào)試、查錯的能力。知道編譯器和編程語言運行時工作原理,就能快速根據(jù)編譯錯誤和警告信息修改代碼。
知道操作系統(tǒng)底層運行機制,就能快速找到運行時錯誤的問題根源。如,有一次我編寫一個windows升級服務(wù)程序。它是一個windows服務(wù),需要執(zhí)行dos腳本,這個腳本會替換掉這個windows服務(wù)本身。發(fā)現(xiàn)有時腳本執(zhí)行無效,查了一晚上,發(fā)現(xiàn)當windows服務(wù)安裝后,第一次啟動就執(zhí)行腳本時就會有權(quán)限問題,log都正確,但實際執(zhí)行這個腳本沒有任何效果。但一旦windows服務(wù)程序啟動一次之后就ok。這必然是windows操作系統(tǒng)底層安全機制的問題,因為我對Windows內(nèi)核了解不多,因此花了很長時間才發(fā)現(xiàn)這個問題,并對造成這個問題的根源并不清楚。