非科班的java程序員該如何補充計算機基礎知識,須要看哪些書?

java比較特殊,畢竟後端扛霸子,想要認真學好java,必須有好的計算機基礎,但是爲何須要基礎呢?前端

 

把這個問題弄明白,要學哪些基礎知識就清楚多了。java

第一個問題,10個用戶使用的系統和1000000我的使用的系統,對後端來講差異大嗎?程序員

這是不少初學者弄不清楚的事情。對前端而已,差異不會特別大,對後端來講,天壤之別。算法

不說架構,只說服務器的資源,後端代碼是運行在服務器上,服務器和pc同樣,一樣是要有cpu,內存,硬盤,帶寬的,當系統的使用量比較多的時候,就會出現性能瓶頸。數據庫

內存不足,cpu跑滿100%,磁盤不足等等問題,這在不少時候都交給運維去檢測和處理,開發人員須要懂嗎?編程

不一樣的解決方案,帶來的資源使用率不同。
因此後端人員必須作性能優化,不少事情,專業和非專業的區別,就在於能不能把事情作好。後端

 

從這個問題來看,你發現後端須要什麼基礎知識沒?設計模式

計算機組成原理,來告訴你計算機的物理機構,數據如何存儲。
計算機操做系統來告訴你怎麼管理內存,什麼叫進程 ,什麼叫線程,什麼又是io。
計算機網絡告訴你什麼是tcp和http,什麼是報文。性能優化

這些課程和基礎知識的做用就是給你更好的認知本身編寫程序都底層實現原理,爲你解決性能問題提供基礎支撐。服務器

第二個問題,數據庫要建索引,btree和hash兩種索引,區別是什麼?各自應該用在什麼場景。

若是你沒有數據結構的基礎,對btree惟一的認知應該就是逼數吧?

hash是什麼鬼,hash算法?算什麼鬼玩意。

 

對這兩個概念都不清楚的話,能不能作好索引的建立?固然能,操做很簡單,但是建立出來的索引能不能解決問題,讓訪問速度更快?

也很簡單,兩個索引隨便試唄,這個不行用那個。
這就是沒文化時候的解決方案,而正確的學習方式就是花時間理解什麼是btree,什麼是hash,底層如何實現的,再結合業務場景,去判斷應該作什麼樣的索引。

 

第三個問題,爲何用消息隊列?
什麼叫解藕,什麼叫內聚?生產者消費者又是什麼意思?

這些是設計模式,或者是面向對象的一些概念。
 

有更多的例子能夠舉,但概括下來就是弄清楚底層構建的原理。

算法算一層
操做系統算一層
組成原理算一層
數電模電單片機算一層
物理算一層

你能從上到下一層層的逐層分解,互聯網在你腦殼裏就沒有祕密。

 

正常而言,學到組成原理就夠了。
可是,這麼一個龐大的知識體系,你要學多久?

並且,真正用到的基礎知識和工做場景緊密相連,可能只有20%用獲得,你只是不清楚是哪20%而已。

結論以下:
1 計算機組成原理,計算機操做系統,計算機網絡,數據庫,數據結構,算法 這是六門基礎課要學習

2 你沒時間系統的學習一遍,只能去找工做中很大可能用到的,先過一遍,有基礎概念,之後遇到問題的時候,能夠知道歸屬哪一個領域。

怎麼知道什麼內容是可能用到的,請自行搜索騰訊課堂修真院的洗髓換骨營,縮減到了10%的內容。

3 對於沒有用戶量的系統而言,沒有太多學習基礎課程的必要,由於你不須要解決這些問題。但薪水和你能解決的問題是等價的,你願意一直只作初級程序員麼?

4 編程思惟在基礎課程裏都有鍛鍊,在工做中也更重要。

相關文章
相關標籤/搜索