後端框架的學習流程
有不少初學者問到,我想學習後端,但是又不知道該怎麼學,所以我決定把這幾年的經驗和經歷整理成一篇文章,分析後端的路該怎麼走,先說明下面僅僅是個人心得,也許與外面的理論有所不同。(文章最後面會附上學習路線地圖和一些自己看過的書籍)
後端初接觸
後端首先需要學習的是html,css和js,也許你會問做網頁不是前端做的事情嗎?答案是對於真實開發環境後端很多時候還兼顧了前端這個角色,對於架構來說優化不僅僅要考慮後端還需要考慮前端。
要學到什麼樣的程度才可以學下一樣技能呢?我的建議是能夠搭建起一個簡單的頁面,最重要的是學會dom操作和ajax。
語言選擇
我相信過來人或者正在入門的人都碰到過這個世紀難題,如果你是初學者我建議您使用
hello world!
沒錯,這個時候,你得讓瀏覽器可以看到hello world! 為了實現這個小目標,我們就需要根據語言配置不同的執行環境。由於入門,我建議可以使用一些整合的一鍵配置環境軟體,例如PHP可以用phpstudy,java看看教程,下載一個tomcat然後跟eclipse整合就好,而Python或則ruby則使用一個輕量級的web框架,copy一下官網提供的hello world!例子即可。
高階一些的hello world
這個階段,你需要實現的是通過瀏覽器輸入不同的網址,你可以輸出不同的內容。然後要弄明白什麼是get引數,什麼是post引數。然後要實現根據不同get引數或者post引數輸出不同內容。因為後端研發從根本上來說就是處理這些不同輸入,輸出特定的內容回去而已,所以這一步,最關鍵。
資料庫
為什麼我們要用資料庫呢?以一個新聞網站為例,它要儲存新聞資料,還得儲存使用者資訊,也要儲存評論資訊。也許你會問用檔案儲存就好了,為何還要學習資料庫這麼龐大的東西呢?首先,我們來看一下什麼是資料庫,我們可以把資料庫每一個table看成excel的sheet,每一個db就是一個excel檔案。而sql語句就是一條條指令,可以幫我們操作裡面的資料,可以節省我們大量的操作。開始學習資料庫的時候,我建議學習
模板引擎
一項技術的出現,往往在於解決了一些開發難題。在沒有模板引擎之前,我們得使用字串拼接方式,弄成html字串,但是這種方式很容易出錯的。而模板引擎無需字串拼接,並且可以處理字串轉義問題,並且模板整合,模板引用等功能,可以使程式碼可以重用,大大提高了開發效率,工程也更容易維護。
MVC框架
首先,我們得明白為什麼要用框架?假如是第一次接觸,我相信第一感受是用了框架加重自己的開發負擔。然後框架存在必然有自己的合理性,我們來看看框架有什麼優點。
1. 框架提供了大量的方法封裝,我們可以直接呼叫來解決業務問題,這可以大大提高開發效率。
2. 框架能夠幫我們分層編寫程式碼,能夠在後期更好的維護我們的專案。
3. 做一些安全防護,處理一些常見的攻擊。
所以對於各種語言,大家可以選擇一個對應的框架來學習。那麼我們應該如何挑選一個框架呢?
1. 多人用的(最起碼使用過程中遇到問題,都能找到人問)
2. 文件詳細的(文件不詳細,怎麼去學習呢?)
3. 簡單的(未來的趨勢估計都是往輕量級框架走的)
Linux與應用部署
開發用window沒什麼問題,但是我們做的應用絕大部分是要放在Linux系統來對外提供伺服器,所以不懂linux的操作是不行的,並且伺服器為了儘可能節省資源,都是不使用介面的,所以我們要學好大量的linux命令。
伺服器環境我們一般就不會用外面的通用的一鍵安裝環境,往往需要優化的。所以基本的軟體安裝和配置需要學會,特別是近年來很火的Docker,越來越多都是基於docker來部署的啦。
快取
快取可是處理高併發的萬能藥,每當你寫的功能慢的時候,基本上你都可以通過快取來大大提高網站效能。實現快取的方法很簡單,但是一當在併發下和海量資料面前一切都不容易,還得上分散式叢集這些。
http協議
如果上面的你都接觸了,恭喜您普通開發估計是沒問題了,如果你說很多需求還是做不出,沒關係,其實你只是缺乏開發經驗而已,只要多寫多請教,你就會發現,其實後端研發也沒什麼難度。這個時候,如果我們想往高階研發工程師方向走,一些底層的高階的東西我們得學會。
瀏覽器與伺服器通過http協議互動,其實就是相互之間傳遞一串特定格式的字串。get引數,post引數,url,和cookie等資訊其實都包含在這字串裡面。我們平時雖然沒有怎麼碰到這些底層的東西,其實是框架和tomcat這種軟體幫我們處理了。
就像平時一個重定向,其實就在header裡面有一句Location: XXX。而我們平時宣告返回的是html還是json其實是headers有一句Content-Type:XXX,一切神奇的功能其實僅僅是一段特定的字串而已,所以http協議怎麼可以不研究呢。
nosql
非關係型資料庫有很多,例如memcached,Redis,MongoDB,coundb等。這些東西都有自己的適用場景,合理利用可以加快開發效率,對提高應用效能有很大的幫助的。
訊息中介軟體
這種技術的出現是為了解耦,當我們業務過於龐大的時候,就會相應的拆分成幾個小系統,系統之間的通訊往往是通過http協議呼叫和基於訊息中介軟體。通過http協議有一個弊端,就是某個系統一旦修改了地址,那麼就必須修改呼叫該服務的系統。如果通過訊息中介軟體呼叫,那麼應用如何遷移,也不會影響到別的系統。
一點點話
你跟所謂的大牛差距在哪裡呢?我的看法是差距僅僅在於專案經驗。也許你會說後端怎麼需要學習這麼多東西,並且年年都有新的技術出現怎麼學呢?其實對於一種新技術,我們主要是要弄明白我們為什麼要用這種技術,因為存在即合理,新技術的出現必然有自己的原因,所以新技術不一定要追求,但是底層建議要理解。然後什麼海量資料和高併發下系統優化,一個原則,找到效能瓶頸並解決它而已。
附錄
路線圖
書單(下面僅僅是一些個人以前看過的書籍,並不是推薦要看,個人建議看看哪種講解核心的書籍,怎麼製作比怎麼用更總要)
LINUX作業系統(第2版)
LINUX指令範例速查手冊
JSP & SERVLET學習筆記
STRUTS 2.X權威指南(第3版)
HTML 5從入門到精通
JAVA入門經典(第6版)
看透spring MVC:原始碼分析與實踐
大型分散式網站架構設計與實踐
Docker 容器與容器雲
Python Cookbook(第3版)中文版
Go語言程式設計
MongoDB大資料處理權威指南(第2版)
NoSQL資料庫技術實戰
構建高可用Linux伺服器(第3版)
大型網站技術架構 核心原理與案例分析
Linux運維之道
高效能MySQL(第3版)
Java核心技術 卷I
Java核心技術 卷II