21張思維導(dǎo)圖,小林肝了半個(gè)月的「后端技術(shù)學(xué)習(xí)路線(xiàn)」長(zhǎng)啥樣?
話(huà)不多說(shuō),直接上剛畫(huà)完的「后端技術(shù)學(xué)習(xí)路線(xiàn)」思維導(dǎo)圖框架:
圖中的每一個(gè)節(jié)點(diǎn)都可以點(diǎn)開(kāi),我都做了細(xì)分,在后面章節(jié)逐個(gè)展開(kāi)介紹。
計(jì)算機(jī)基礎(chǔ)
不管是后端開(kāi)發(fā)還是前端開(kāi)發(fā),說(shuō)到底我們所有的軟件開(kāi)發(fā)都是在計(jì)算上編寫(xiě)程序,雖然對(duì)于大部分人來(lái)說(shuō),真正開(kāi)始寫(xiě)代碼的時(shí)候很少會(huì)讓你去解決計(jì)算機(jī)底層的問(wèn)題,不接觸不代表不重要,計(jì)算機(jī)基礎(chǔ)是最重要的。
后端開(kāi)發(fā)工作中經(jīng)常用到 Java、C++、Python、Golang 這些語(yǔ)言稱(chēng)為高級(jí)編程語(yǔ)言,稱(chēng)為高級(jí)是它們接近我們?nèi)粘=涣鞯淖匀徽Z(yǔ)言,離計(jì)算機(jī)底層遠(yuǎn),但所有的高級(jí)語(yǔ)言最終都會(huì)轉(zhuǎn)化成匯編->計(jì)算機(jī)指令->控制流操控計(jì)算機(jī)硬件,所以學(xué)習(xí)計(jì)算機(jī)構(gòu)成和工作原理、操作系統(tǒng)這些基礎(chǔ)知識(shí),能夠加深我們隊(duì)高級(jí)語(yǔ)言的理解。
那我們一直說(shuō)的計(jì)算機(jī)基礎(chǔ)到時(shí)是什么?計(jì)算機(jī)科學(xué)技術(shù) CS(Computer Science)作為一門(mén)專(zhuān)業(yè)課程,就和其他工科課程一樣有自己的理論體系,如果你是計(jì)算機(jī)專(zhuān)業(yè)的同學(xué)不用我來(lái)教該學(xué)什么,計(jì)算機(jī)專(zhuān)業(yè)大學(xué)四年學(xué)校教的那些就是基礎(chǔ),別小看你在學(xué)校學(xué)的那些看起來(lái)沒(méi)啥用的課程。我這有一份中中科大的計(jì)算機(jī)技術(shù)本科主要課程結(jié)構(gòu)安排。
一流大學(xué)的計(jì)算機(jī)專(zhuān)業(yè)要學(xué)什么可以對(duì)照著看下,從學(xué)科數(shù)學(xué)理論基礎(chǔ)、計(jì)算機(jī)體系結(jié)構(gòu)、軟件工程方法等等維度展開(kāi)。
那如果你不是計(jì)算機(jī)相關(guān)專(zhuān)業(yè)的想轉(zhuǎn)行,也不要被嚇到了,畢竟這是人家四年時(shí)間的學(xué)習(xí)內(nèi)容,本科的培養(yǎng)目標(biāo)不僅僅是培養(yǎng)出一個(gè)軟件工程師,本科學(xué)習(xí)還是面向碩士博士的基礎(chǔ)培養(yǎng),注意是計(jì)算機(jī)科學(xué)專(zhuān)業(yè),名字里有個(gè)詞叫「科學(xué)」,我這篇文章要說(shuō)的 BAT 公司后臺(tái)軟件開(kāi)發(fā),可以認(rèn)為是「工學(xué)」方向,更多的是服務(wù)于工程開(kāi)發(fā)。
如果只是面向后臺(tái)開(kāi)發(fā)和工作面試,或者你是非計(jì)算機(jī)專(zhuān)業(yè)想轉(zhuǎn)行,社畜沒(méi)有太多時(shí)間去學(xué)習(xí)大學(xué)那些理論課程,那幫我把計(jì)算機(jī)基礎(chǔ)的范圍縮小到下面這 4 門(mén)專(zhuān)業(yè)課:計(jì)算機(jī)組成原理、計(jì)算機(jī)網(wǎng)路、操作系統(tǒng)、數(shù)據(jù)結(jié)構(gòu)。
計(jì)算機(jī)組成原理
這門(mén)課程讓你了解計(jì)算機(jī)的組成和工作原理,要學(xué)習(xí)的內(nèi)容包括:
數(shù)據(jù)在計(jì)算機(jī)中的表示和運(yùn)算(計(jì)算機(jī)不識(shí)數(shù),只認(rèn)得高低電平,所以數(shù)據(jù)在計(jì)算機(jī)內(nèi)部都用二進(jìn)制的0和1表示)
存儲(chǔ)系統(tǒng)(數(shù)據(jù)和程序指令都要存儲(chǔ)下來(lái),學(xué)習(xí)計(jì)算機(jī)的存儲(chǔ)層次,內(nèi)存、外存、高速緩存、虛擬存儲(chǔ)技術(shù))
指令系統(tǒng)(寫(xiě)的代碼最終都要被翻譯成計(jì)算機(jī)指令,指令格式和尋址方式有多種,控制器來(lái)控制指令執(zhí)行)
中央處理器(也就是 CPU 計(jì)算機(jī)的大腦,主要構(gòu)成是運(yùn)算器和控制器)
總線(xiàn)(計(jì)算機(jī)的血管動(dòng)脈,連接計(jì)算機(jī)各功能組件,用來(lái)傳輸數(shù)據(jù)、地址信號(hào)、控制信號(hào))
輸入輸出系統(tǒng)(Input/Output 也叫 IO 系統(tǒng),連接和管理各種外部設(shè)備比如鍵盤(pán)、顯示器等等)
計(jì)算機(jī)網(wǎng)絡(luò)
世界上第一臺(tái)通用計(jì)算機(jī)「ENIAC」于 1946 被發(fā)明出來(lái),如其名字一樣僅僅是用于計(jì)算,在后來(lái)計(jì)算機(jī)越來(lái)越多,如果沒(méi)有網(wǎng)絡(luò)每臺(tái)計(jì)算機(jī)都將成為一個(gè)孤島,也不會(huì)有現(xiàn)在互聯(lián)網(wǎng)的繁榮,「計(jì)算機(jī)網(wǎng)絡(luò)」這門(mén)課程的學(xué)習(xí)路線(xiàn)非常清晰,就是圍繞著如何讓地理位置上不同的計(jì)算機(jī)連接起來(lái),并高效可靠的交換數(shù)據(jù)信息,實(shí)現(xiàn)人在家中做,天下事盡知。
計(jì)算機(jī)網(wǎng)絡(luò)有分層次,根據(jù)各層屬性和特點(diǎn),分為:
物理層
數(shù)據(jù)鏈路層
網(wǎng)絡(luò)層
傳輸層
應(yīng)用層
這個(gè)層次劃分從上到下就是一個(gè)網(wǎng)絡(luò)數(shù)據(jù)包的接收路徑,反之就是發(fā)送路徑。既然要交換信息肯定得商量一套通用的協(xié)議,就像我們和老外交流,要么他們學(xué)中文要么我們學(xué)英文,反正得統(tǒng)一出一個(gè)標(biāo)準(zhǔn)語(yǔ)言出來(lái),這在計(jì)算機(jī)網(wǎng)絡(luò)中稱(chēng)之為「通信協(xié)議」。如上述的網(wǎng)絡(luò)分層,每層都有各自適配的協(xié)議,所以計(jì)算機(jī)網(wǎng)絡(luò)的學(xué)習(xí)基本就是圍繞著分層協(xié)議的學(xué)習(xí)。
操作系統(tǒng)
操作系統(tǒng)也是一種軟件。你熟悉的微軟 Windos 操作系統(tǒng),后臺(tái)開(kāi)發(fā)熟悉的各種發(fā)行版的 Linux 系統(tǒng),都是通過(guò)軟件的形式安裝在計(jì)算機(jī)上。
只不過(guò)這個(gè)軟件和我們平常接觸的應(yīng)用程序軟件不同,它比較特殊,因?yàn)樗蛳潞陀?jì)算機(jī)硬件(就是我們?cè)谟?jì)算機(jī)組成原理中學(xué)習(xí)的那些硬件)打交道,向上給其他應(yīng)用程序和用戶(hù)提供通用的交互的接口,說(shuō)白了操作系統(tǒng)就是個(gè)中介和管家的角色。它幫我們做了下面這些事情:
進(jìn)程管理(你寫(xiě)的程序運(yùn)行起來(lái)才能干活,運(yùn)行起來(lái)的程序稱(chēng)為進(jìn)程,進(jìn)程是資源的最小單位)
內(nèi)存管理(計(jì)算機(jī)內(nèi)存又貴又少,動(dòng)不動(dòng)又要來(lái)個(gè)高并發(fā),內(nèi)存管理大有學(xué)問(wèn))
文件管理(計(jì)算機(jī)中的資料和信息需要通過(guò)文件系統(tǒng)來(lái)保存、管理)
輸入輸出管理(各種外部設(shè)備如何接入計(jì)算機(jī)和接入之后又如何管理)
數(shù)據(jù)結(jié)構(gòu)
數(shù)據(jù)結(jié)構(gòu)大家最熟悉,即使毫無(wú)計(jì)算機(jī)基礎(chǔ)或是想轉(zhuǎn)行計(jì)算機(jī),第一個(gè)遇到的就是數(shù)據(jù)結(jié)構(gòu),因?yàn)槊嬖囁⒌乃惴}本質(zhì)上就是對(duì)各種數(shù)據(jù)結(jié)構(gòu)的運(yùn)用。所以單純對(duì)面試功利的角度來(lái)說(shuō),數(shù)據(jù)結(jié)構(gòu)也是必須要掌握的計(jì)算機(jī)基礎(chǔ),數(shù)據(jù)結(jié)構(gòu)要學(xué)到:
線(xiàn)性表(鏈表、數(shù)組、循環(huán)鏈表)
棧和隊(duì)列
樹(shù)和各種二叉樹(shù)(二叉排序樹(shù)、平衡二叉樹(shù)、哈夫曼樹(shù)、B樹(shù)、B+樹(shù)、Trie樹(shù))
圖(圖的存儲(chǔ)結(jié)構(gòu)、BFS、DFS、最短路徑、最小生成樹(shù)、拓?fù)渑判?、關(guān)鍵路徑)
查找算法(二分查找、B樹(shù)查找、HASH表、KMP字符串模式匹配)
排序算法(插入排序、冒泡排序、歸并排序、基數(shù)排序、堆排序)
貪心算法
位運(yùn)算
分治算法
動(dòng)態(tài)規(guī)劃
好了,計(jì)算機(jī)基礎(chǔ)四大專(zhuān)業(yè)課已經(jīng)大概過(guò)了一遍,當(dāng)然這是我給沒(méi)有計(jì)算機(jī)基礎(chǔ)同學(xué)的實(shí)用主義建議,等你學(xué)完這四門(mén)課程也只能夠說(shuō)入門(mén)計(jì)算機(jī)了,不過(guò)這已經(jīng)比很多人厲害了。如果想真正的了解計(jì)算機(jī)這門(mén)學(xué)科,可以等學(xué)完了這 4 門(mén)基礎(chǔ)課程之后,再花寫(xiě)時(shí)間挑一些上面培養(yǎng)方案中的課程去學(xué)習(xí),做一個(gè)知識(shí)體系完備的計(jì)算機(jī)軟件后端開(kāi)發(fā)工程師。
Linux
在后臺(tái)開(kāi)發(fā)領(lǐng)域,你所能接觸到的后端服務(wù)不敢說(shuō) 100%,至少也有 90% 以上是運(yùn)行在 Linux 系統(tǒng)之上,因?yàn)樗_(kāi)源、便利、功能強(qiáng)大,需要學(xué)習(xí)以下技術(shù)點(diǎn):?
Linux系統(tǒng)使用
所以如果你想走后端開(kāi)發(fā)這條路線(xiàn),我建議你趁早使用 Linux ,越早越好??梢允窃趥€(gè)人 PC 上裝 Linux 虛擬機(jī),或者裝個(gè)雙系統(tǒng),我在大學(xué)就是這么玩的,那時(shí)候云服務(wù)器還沒(méi)現(xiàn)在這么普及,現(xiàn)在我覺(jué)得買(mǎi)個(gè) Linux 云服務(wù)器最方便,如果是學(xué)生還有教育優(yōu)惠也不貴。
有了Linux系統(tǒng)之后干嘛呢?把它作為你的常用系統(tǒng),經(jīng)常登錄進(jìn)去對(duì)照著「鳥(niǎo)哥的 Linux 私房菜」從頭到尾操作一遍,ok,Linux的基礎(chǔ)操作你就掌握了。
Linux 高級(jí)編程
Linux「高級(jí)編程」的意思是比上面的 Linux 基礎(chǔ)操作更深入一個(gè)層次。
學(xué)會(huì)了 Linux 的使用還不算是一個(gè)真正的開(kāi)發(fā)人員,使用系統(tǒng)是成為開(kāi)發(fā)者最基本要求,會(huì)操作Linux 就像使用 Windows 系統(tǒng)一樣,只不過(guò)是學(xué)習(xí)成本的問(wèn)題,如果這個(gè)世界沒(méi)有 Window 系統(tǒng),你女朋友花點(diǎn)時(shí)間也能掌握 Linux 系統(tǒng)基本操作。
要想進(jìn)階成為后端開(kāi)發(fā)人員,就要懂得如何使用 Linux 系統(tǒng)提供的各種系統(tǒng)API(系統(tǒng)調(diào)用接口)進(jìn)行編程開(kāi)發(fā),程序員用你寫(xiě)的代碼來(lái)控制系統(tǒng),普通用戶(hù)只會(huì)用鼠標(biāo)操縱。這個(gè)階段需要學(xué)習(xí):
Unix 系統(tǒng)實(shí)現(xiàn) Linux、基本系統(tǒng)數(shù)據(jù)類(lèi)型
文件操作函數(shù):?
open
?、read
?close
?write
?dup
?fcntl
?ioctl
?stat
?chmod
access
?chdir
?…系統(tǒng)編程接口的基本特性和高級(jí)特性
Linux進(jìn)程環(huán)境、如何創(chuàng)建進(jìn)程、線(xiàn)程,程序的存儲(chǔ)空間分配、環(huán)境變量
進(jìn)程組、會(huì)話(huà)以及任務(wù)控制、進(jìn)程優(yōu)先級(jí)和調(diào)度
動(dòng)態(tài)庫(kù)和靜態(tài)庫(kù)
進(jìn)程間通信:管道和FIFO、消息隊(duì)列、信號(hào)量、共享內(nèi)存、內(nèi)存映射
套接字和網(wǎng)絡(luò)編程
總之,這一階段需要學(xué)習(xí)的是在 Linux 環(huán)境下的高級(jí)編程技巧,通過(guò)對(duì)這些內(nèi)容的學(xué)習(xí)也能讓你更深入的理解 Linux 系統(tǒng)是如何工作和運(yùn)行的,并且真正的踏入 Linux 系統(tǒng)編程大門(mén)。
網(wǎng)絡(luò)編程
網(wǎng)絡(luò)編程是通過(guò)網(wǎng)絡(luò)套接字 socket 方式實(shí)現(xiàn)的通信,所以也屬于進(jìn)程間通信 IPC(Inter-Process Communication)。
由于現(xiàn)在的后臺(tái)服務(wù)基于服務(wù)端/客戶(hù)端模型,兩者之間基于網(wǎng)絡(luò)通信,你在家用手機(jī)點(diǎn)個(gè)外賣(mài)的服務(wù)請(qǐng)求,也是通過(guò)網(wǎng)絡(luò)通信發(fā)給某團(tuán)的后臺(tái)服務(wù)器,所以后臺(tái)服務(wù)開(kāi)發(fā),說(shuō)到底還是網(wǎng)絡(luò)編程,以及建立在網(wǎng)絡(luò)編程數(shù)據(jù)之上的應(yīng)用層開(kāi)發(fā)。
網(wǎng)絡(luò)編程學(xué)什么:
什么是socket套接字
套接字選項(xiàng)
TCP/UDP 套接字編程
Unix domain 協(xié)議和編程
原始套接字編程
IO多路復(fù)用:select 、poll、epoll、kqueue
序列化技術(shù)
零拷貝技術(shù)
開(kāi)源網(wǎng)絡(luò)庫(kù):muduo、libevent
學(xué)完以上內(nèi)容你大概可以寫(xiě)一個(gè)類(lèi)似QQ一樣的網(wǎng)絡(luò)聊天小工具。
不在在工作中,都有成熟的網(wǎng)絡(luò)框架或網(wǎng)絡(luò)通信庫(kù),大公司比如鵝廠(chǎng)大部分是自研網(wǎng)絡(luò)通信框架,小公司用開(kāi)源項(xiàng)目,這讓很多后臺(tái)開(kāi)發(fā)人員不必關(guān)心底層的網(wǎng)絡(luò)通信細(xì)節(jié),除了部分基礎(chǔ)架構(gòu)的開(kāi)發(fā)同學(xué),大部分后臺(tái)開(kāi)發(fā)同學(xué)工作都是在做業(yè)務(wù)系統(tǒng)的開(kāi)發(fā)。
但了解底層網(wǎng)絡(luò)編程原理,是后臺(tái)開(kāi)發(fā)人員的核心能力,這點(diǎn)對(duì)于 C/C++ 后臺(tái)開(kāi)發(fā)程序員尤為重要。它能拔高你看問(wèn)題的高度,不了解底層原理,就像是在黑盒編程一樣,出了問(wèn)題無(wú)從下手排查。
學(xué)完了以上內(nèi)容,基本是具備了從事后臺(tái)開(kāi)發(fā)的基礎(chǔ)能力,也能開(kāi)發(fā)出一個(gè)簡(jiǎn)單的后臺(tái)服務(wù)器了。
數(shù)據(jù)庫(kù)
除非是單純的轉(zhuǎn)發(fā)路由類(lèi)后臺(tái)服務(wù),一般來(lái)說(shuō)后臺(tái)開(kāi)發(fā)的web服務(wù)器后臺(tái)程序,后臺(tái)服務(wù)程序說(shuō)白了就是個(gè)死循環(huán):
接收客戶(hù)端數(shù)據(jù)包 -> 處理數(shù)據(jù)包 -> 業(yè)務(wù)邏輯處理 -> 保存必要的數(shù)據(jù) -> 回復(fù)響應(yīng)數(shù)據(jù)給客戶(hù)端
這其中會(huì)伴隨對(duì)各種數(shù)據(jù)的處理,比如電商系統(tǒng)會(huì)處理訂單數(shù)據(jù)、用戶(hù)數(shù)據(jù),游戲后臺(tái)會(huì)處理角色數(shù)據(jù)和裝備數(shù)據(jù)等等,有數(shù)據(jù)就會(huì)涉及到存儲(chǔ)系統(tǒng),數(shù)據(jù)一般都存儲(chǔ)到數(shù)據(jù)庫(kù)。
主要學(xué)習(xí) 2 大類(lèi)數(shù)據(jù)庫(kù):
關(guān)系型數(shù)據(jù)庫(kù)是指采用了關(guān)系模型來(lái)組織數(shù)據(jù)的數(shù)據(jù)庫(kù),簡(jiǎn)單理解就是二維表格模型。
非關(guān)系型數(shù)據(jù)庫(kù)一般指的是?key-value
?形式存儲(chǔ)數(shù)據(jù)的 NoSQL 數(shù)據(jù)庫(kù),數(shù)據(jù)和鍵值是簡(jiǎn)單的映射關(guān)系。
關(guān)系型數(shù)據(jù)庫(kù)
MySQL 數(shù)據(jù)庫(kù)架構(gòu)
MySQL索引使用和優(yōu)化
innoDB存儲(chǔ)引擎
查詢(xún)性能優(yōu)化
聚集索引、非聚集索引
事務(wù)隔離,ACID,MVCC
鎖機(jī)制,樂(lè)觀鎖、悲觀鎖、讀鎖、寫(xiě)鎖、意向鎖
日志
數(shù)據(jù)備份與恢復(fù)
非關(guān)系型數(shù)據(jù)庫(kù)
redis 基本操作和使用
redis 設(shè)計(jì)與實(shí)現(xiàn)原理
MongoDB
levelDB
memcache
HBase
CKV+ 騰訊自研
后臺(tái)開(kāi)發(fā)服務(wù)還需要學(xué)會(huì)解決三高問(wèn)題:高并發(fā)、高可用、高性能。
高并發(fā)
利用到目前為止學(xué)習(xí)的內(nèi)容,我們的開(kāi)發(fā)的后臺(tái)服務(wù)器應(yīng)付一些小并發(fā)場(chǎng)景綽綽有余,但是隨著互聯(lián)網(wǎng)應(yīng)用業(yè)務(wù)量的上漲,對(duì)后臺(tái)服務(wù)端的請(qǐng)求數(shù)劇增,高并發(fā)需求隨之而來(lái),高并發(fā)指的就是高 TPS 和高 QPS
TPS (Transactions Per Second)每秒事務(wù)數(shù)
QPS(Query Per Second)每秒查詢(xún)數(shù)等。
對(duì)于高并發(fā)服務(wù)必須改變傳統(tǒng)的單進(jìn)程模型,才能處理的過(guò)來(lái)如此海量的請(qǐng)求。
多進(jìn)程
對(duì)于高并發(fā)的服務(wù)請(qǐng)求,由于后臺(tái)服務(wù)一般都是 IO 密集型應(yīng)用,IO 密集型應(yīng)用就是大部分 CPU 時(shí)間用在網(wǎng)絡(luò) IO 上,相對(duì)的是 CPU 密集型應(yīng)用大部分時(shí)間花在數(shù)據(jù)計(jì)算上。
大多數(shù)的后臺(tái)服務(wù)程序都是 IO 密集型的應(yīng)用,網(wǎng)絡(luò) IO 的時(shí)候 CPU 等待白白浪費(fèi)時(shí)間, 這就告訴我們 CPU 的潛力還沒(méi)有完全發(fā)揮,所以當(dāng)一個(gè)進(jìn)程的處理能力達(dá)到上限,我們可以多創(chuàng)建幾個(gè)進(jìn)程,這就是多進(jìn)程模型。
多線(xiàn)程
多線(xiàn)程與多進(jìn)程類(lèi)似,實(shí)際在Linux系統(tǒng)中線(xiàn)程是由輕量級(jí)的進(jìn)程 LWP(Light-weight process)實(shí)現(xiàn),多線(xiàn)程方式實(shí)現(xiàn)的后臺(tái)服務(wù)相對(duì)于多進(jìn)程更加輕量,因?yàn)槎嗑€(xiàn)程是在同一個(gè)進(jìn)程內(nèi)部實(shí)現(xiàn)。
不過(guò)多線(xiàn)程也會(huì)帶來(lái)新的問(wèn)題,比如全局?jǐn)?shù)據(jù)競(jìng)爭(zhēng)和同步問(wèn)題,引入線(xiàn)程鎖還要防止死鎖的發(fā)生。
協(xié)程
那什么是協(xié)程呢?協(xié)程?Coroutines
?是一種比線(xiàn)程更加輕量級(jí)的微線(xiàn)程。類(lèi)比一個(gè)進(jìn)程可以擁有多個(gè)線(xiàn)程,一個(gè)線(xiàn)程也可以擁有多個(gè)協(xié)程,因此協(xié)程又稱(chēng)微線(xiàn)程和纖程??梢源致缘陌褏f(xié)程理解成子程序調(diào)用,每個(gè)子程序都可以在一個(gè)單獨(dú)的協(xié)程內(nèi)執(zhí)行。
異步回調(diào)
所謂異步回調(diào)就是,服務(wù)端發(fā)起 IO 請(qǐng)求的線(xiàn)程不等網(wǎng)絡(luò) IO 線(xiàn)程操作完成,就繼續(xù)執(zhí)行隨后的代碼,一般請(qǐng)求線(xiàn)程需要先注冊(cè)一個(gè)回調(diào)函數(shù),當(dāng)IO 完成之后網(wǎng)絡(luò)IO線(xiàn)程通過(guò)調(diào)用之前注冊(cè)的回調(diào)函數(shù)來(lái)通知發(fā)起 IO 請(qǐng)求的線(xiàn)程,這樣發(fā)起請(qǐng)求的線(xiàn)程就不會(huì)阻塞住等待結(jié)果,提高了服務(wù)處理性能。
高性能
按以上服務(wù)模型可以提高服務(wù)本身處理能力,高性能后臺(tái)服務(wù)往往還會(huì)利用多種技術(shù)、從多個(gè)維度優(yōu)化提高性能。比如采用CDN(Content Delivery Network)內(nèi)容分發(fā)網(wǎng)絡(luò),存儲(chǔ)和分發(fā)使用戶(hù)就近獲取內(nèi)容,縮短響應(yīng)時(shí)間;采用池化技術(shù),避免頻繁的資源分配與回收;采用服務(wù)集群,橫向擴(kuò)展服務(wù)能力;采用緩存技術(shù),熱點(diǎn)數(shù)據(jù)加入緩存,減少數(shù)據(jù)庫(kù)訪(fǎng)問(wèn)。
CND 內(nèi)容分發(fā)技術(shù)
池化技術(shù):數(shù)據(jù)庫(kù)連接池,線(xiàn)程池
集群化
緩存技術(shù)
高可用
高可用即保證服務(wù)的穩(wěn)定性,不出現(xiàn)重大問(wèn)題或宕機(jī),常見(jiàn)的解決高可用思路是冗余和負(fù)載均衡。冗余的意思就是多部署幾臺(tái)服務(wù)器,當(dāng)其中一臺(tái)掛掉另外一臺(tái)能頂上。通過(guò)負(fù)載均衡技術(shù)實(shí)現(xiàn)對(duì)流量的動(dòng)態(tài)調(diào)配,不至于出現(xiàn)大量流量沖擊某臺(tái)機(jī)器出現(xiàn)請(qǐng)求不均勻,軟件負(fù)載均衡技術(shù)可以通過(guò)DNS、Nginx、LVS等技術(shù)實(shí)現(xiàn)。這里主要學(xué)習(xí)的技術(shù)有:
負(fù)載均衡技術(shù),軟硬件負(fù)載均衡
限流隔離降級(jí)技術(shù)
應(yīng)用層容災(zāi),資源隔離熔斷
異地多活
設(shè)計(jì)模式
設(shè)計(jì)模式代表著軟件開(kāi)發(fā)的一種最佳實(shí)踐。已經(jīng)經(jīng)歷了很長(zhǎng)一段時(shí)間的發(fā)展,它們提供了軟件開(kāi)發(fā)過(guò)程中面臨的一般問(wèn)題的最佳解決方案。學(xué)習(xí)這些模式有助于經(jīng)驗(yàn)不足的開(kāi)發(fā)人員通過(guò)一種簡(jiǎn)單快捷的方式來(lái)學(xué)習(xí)軟件設(shè)計(jì),當(dāng)設(shè)計(jì)大規(guī)模軟件時(shí)遵循必要的設(shè)計(jì)模式能讓寫(xiě)出的代碼更加健壯和可擴(kuò)展。
設(shè)計(jì)模式 6 大原則:
開(kāi)閉原則:對(duì)擴(kuò)展開(kāi)放,對(duì)修改關(guān)閉,多使用抽象類(lèi)和接口。
里氏替換原則:基類(lèi)可以被子類(lèi)替換,使用抽象類(lèi)繼承,不使用具體類(lèi)繼承。
依賴(lài)倒轉(zhuǎn)原則:要依賴(lài)于抽象,不要依賴(lài)于具體,針對(duì)接口編程,不針對(duì)實(shí)現(xiàn)編程。
接口隔離原則:使用多個(gè)隔離的接口,比使用單個(gè)接口好,建立最小的接口。
迪米特法則:一個(gè)軟件實(shí)體應(yīng)當(dāng)盡可能少地與其他實(shí)體發(fā)生相互作用,通過(guò)中間類(lèi)建立聯(lián)系。
合成復(fù)用原則:盡量使用合成/聚合,而不是使用繼承。
常見(jiàn)設(shè)計(jì)模式分類(lèi)
工廠(chǎng)模式
單例模式
建造者模式
適配器模式
橋接模式
過(guò)濾器模式
裝飾器模式
外觀模式
享元模式
代理模式
責(zé)任鏈模式
解釋器模式
迭代器模式
觀察者模式
…
分布式
為什么會(huì)出現(xiàn)分布式?隨著業(yè)務(wù)的體量不斷增長(zhǎng),單個(gè)節(jié)點(diǎn)的處理能力無(wú)法滿(mǎn)足日益增長(zhǎng)的計(jì)算、存儲(chǔ)任務(wù)的時(shí)候,且硬件的提升(加內(nèi)存、加磁盤(pán)、使用更好的CPU)高昂到得不償失的時(shí)候,應(yīng)用程序也不能進(jìn)一步優(yōu)化的時(shí)候,我們才需要考慮分布式系統(tǒng)。
分布式系統(tǒng)是由一組通過(guò)網(wǎng)絡(luò)進(jìn)行通信、為了完成共同的任務(wù)而協(xié)調(diào)工作的計(jì)算機(jī)節(jié)點(diǎn)組成的系統(tǒng)。分布式系統(tǒng)的出現(xiàn)是為了用廉價(jià)的、普通的機(jī)器完成單個(gè)計(jì)算機(jī)無(wú)法完成的計(jì)算、存儲(chǔ)任務(wù)。其目的是利用更多的機(jī)器,處理更多的數(shù)據(jù)。
分布式系統(tǒng)要解決的問(wèn)題本身就是和單機(jī)系統(tǒng)一樣的,而由于分布式系統(tǒng)多節(jié)點(diǎn)、通過(guò)網(wǎng)絡(luò)通信的拓?fù)浣Y(jié)構(gòu),會(huì)引入很多單機(jī)系統(tǒng)沒(méi)有的問(wèn)題,為了解決這些問(wèn)題又會(huì)引入更多的機(jī)制、協(xié)議。這里需要學(xué)習(xí)的內(nèi)容包括:
分布式一致性算法:PAXOS、Raft、Zab
分布式事務(wù):2PC、3PC、TCC
分布式唯一 ID 生成:雪花算法、UUID、淘寶 TDDL SEQUENCE方案、美團(tuán) Leaf
一致性HASH算法
擴(kuò)展性設(shè)計(jì),設(shè)計(jì)可擴(kuò)展的軟件架構(gòu)
分布式文件系統(tǒng):HDFS、FastDFS
微服務(wù)架構(gòu)設(shè)計(jì),服務(wù)注冊(cè)、服務(wù)發(fā)現(xiàn)、服務(wù)路由
安全
本質(zhì)上后臺(tái)服務(wù)在網(wǎng)絡(luò)上運(yùn)行,需要和各種網(wǎng)絡(luò)環(huán)境交互,在正常情況下能夠工作,但互聯(lián)網(wǎng)中有很多針對(duì)后臺(tái)服務(wù)的惡意攻擊,因此網(wǎng)絡(luò)安全也是后臺(tái)開(kāi)發(fā)工程師需要學(xué)習(xí)的內(nèi)容。這里主要包括:
web安全:CSRF、SQL注入、XSS
DDos防范
加解密算法:對(duì)稱(chēng)加密、哈希算法、非對(duì)稱(chēng)加密
網(wǎng)絡(luò)隔離:內(nèi)外網(wǎng)分離、跳板機(jī)
授權(quán)認(rèn)證算法:OAuth2.0、OIDC、2FA、單點(diǎn)登錄SSO
監(jiān)控與統(tǒng)計(jì)
后臺(tái)服務(wù)運(yùn)行我們?nèi)绾瘟私馄溥\(yùn)行狀態(tài)和健康度?如果只是開(kāi)發(fā)小玩具監(jiān)控和統(tǒng)計(jì)大可不必,只需記錄本地日志即可,對(duì)于成熟的大型后臺(tái)服務(wù)系統(tǒng),監(jiān)控、統(tǒng)計(jì)、追蹤必不可少,無(wú)監(jiān)控,不運(yùn)營(yíng)。
開(kāi)源的監(jiān)控軟件有:Prometheus、Zabbix、Open-Falcon。
追蹤系統(tǒng)也非常重要,特別是目前微服務(wù)化,一次服務(wù)請(qǐng)求需要經(jīng)歷多個(gè)不同的微服務(wù)處理,給分布式追蹤帶來(lái)新的挑戰(zhàn),主要包含以下三個(gè)方面:
通過(guò)收集日志(Logging),記錄程序的調(diào)試信息或錯(cuò)誤信息,對(duì)系統(tǒng)和各個(gè)服務(wù)的運(yùn)行狀態(tài)進(jìn)行監(jiān)控
通過(guò)收集量度(Metrics),比如累加量,對(duì)系統(tǒng)和各個(gè)服務(wù)的性能進(jìn)行監(jiān)控
通過(guò)分布式追蹤(Tracing ),追蹤服務(wù)請(qǐng)求是如何在各個(gè)分布的組件中進(jìn)行處理的細(xì)節(jié)
業(yè)界也有一些成熟的開(kāi)源軟件用于監(jiān)控與追蹤:SkyWalking、Pinpoint、Zipkin、CAT大眾點(diǎn)評(píng)開(kāi)源。不過(guò)大公司一般都有自研的一套監(jiān)控與追蹤系統(tǒng),比如騰訊內(nèi)部就有多套自研監(jiān)控與調(diào)用鏈追蹤系統(tǒng)。
搜索引擎
我們討論的是全文搜索引擎,什么是全文搜索引擎?
全文搜索引擎是目前廣泛應(yīng)用的主流搜索引擎。它的工作原理是計(jì)算機(jī)索引程序通過(guò)掃描文章中的每一個(gè)詞,對(duì)每一個(gè)詞建立一個(gè)索引,指明該詞在文章中出現(xiàn)的次數(shù)和位置,當(dāng)用戶(hù)查詢(xún)時(shí),檢索程序就根據(jù)事先建立的索引進(jìn)行查找,并將查找的結(jié)果反饋給用戶(hù)的檢索方式。這個(gè)過(guò)程類(lèi)似于通過(guò)字典中的檢索字表查字的過(guò)程。
數(shù)據(jù)分為結(jié)構(gòu)化數(shù)據(jù)與非結(jié)構(gòu)化數(shù)據(jù)
像數(shù)據(jù)庫(kù)表這種的數(shù)據(jù)是結(jié)構(gòu)化數(shù)據(jù);而對(duì)于像HTML、XML、文檔這樣不定長(zhǎng)度且無(wú)固定格式的數(shù)據(jù)我們稱(chēng)之為非結(jié)構(gòu)化數(shù)據(jù)。非結(jié)構(gòu)化數(shù)據(jù)也稱(chēng)為全文數(shù)據(jù),對(duì)非結(jié)構(gòu)化數(shù)據(jù)的搜索可以用全文檢索的方式,
目前兩大主流的全文搜索引擎「Solr」和「Elasticsearch」都是基于 Lucene 建立。搜索引擎需要學(xué)習(xí)的內(nèi)容:
搜索引擎原理,搜索引擎利用倒排索引技術(shù)來(lái)實(shí)現(xiàn)對(duì)全文數(shù)據(jù)的高效檢索。
Lucene,Apache Lucene 是一個(gè)開(kāi)源的全文搜索引擎工具包。
Elasticsearch 原理與使用
Solr 原理與使用
大數(shù)據(jù)
大數(shù)據(jù),又稱(chēng)為巨量資料,指的是在傳統(tǒng)數(shù)據(jù)處理應(yīng)用軟件不足以處理的大或復(fù)雜的數(shù)據(jù)集的術(shù)語(yǔ)。隨著后臺(tái)服務(wù)用戶(hù)數(shù)增加和數(shù)據(jù)的積累,產(chǎn)生海量有待挖掘價(jià)值的數(shù)據(jù),分析利用這些數(shù)據(jù)可以反饋線(xiàn)上決策,優(yōu)化運(yùn)營(yíng)策略,產(chǎn)生數(shù)據(jù)價(jià)值。
海量數(shù)據(jù)也可以定義為來(lái)自各種來(lái)源的大量非結(jié)構(gòu)化或結(jié)構(gòu)化數(shù)據(jù)。
在軟件開(kāi)發(fā)領(lǐng)域的大數(shù)據(jù)概念自 20 世紀(jì) 90 年代的數(shù)據(jù)倉(cāng)庫(kù)開(kāi)始,對(duì)于大數(shù)據(jù)的處理也導(dǎo)致各種海量數(shù)據(jù)的統(tǒng)計(jì)和處理技術(shù)發(fā)展。
主要包含以下的技術(shù)點(diǎn)需要學(xué)習(xí):數(shù)據(jù)存儲(chǔ)、離線(xiàn)分析、流式計(jì)算。
大數(shù)據(jù)存儲(chǔ):Hadoop 框架,HDFS、HBase、YARN 架構(gòu)、Apache Kudu
離線(xiàn)分析:Hive、MapReduce、Spark
流式計(jì)算:Flink、Storm、Kafka Stream、Spark Streaming
虛擬化
虛擬化,是指通過(guò)虛擬化技術(shù)將一臺(tái)計(jì)算機(jī)虛擬為多臺(tái)邏輯計(jì)算機(jī)。
虛擬化的好處
靈活性:在同一硬件上同時(shí)運(yùn)行多個(gè)操作系統(tǒng)
敏捷性:移動(dòng)操作系統(tǒng)的方式與將文件或圖片從一臺(tái)物理服務(wù)器移動(dòng)到另一臺(tái)物理服務(wù)器的方式相同。
容錯(cuò):當(dāng)物理服務(wù)器出現(xiàn)故障時(shí),管理軟件會(huì)自動(dòng)將實(shí)例遷移到可用服務(wù)器,甚至無(wú)感知物理硬件故障。
降低成本:您不再需要過(guò)多的物理服務(wù)器,操作和維護(hù)所需的費(fèi)用也隨之減少。
常見(jiàn)的虛擬化技術(shù):KVM、Xen、OpenVZ、Docker
雖然對(duì)于大多數(shù)后臺(tái)服務(wù)程序來(lái)說(shuō), 很多服務(wù)都是部署在 Docker 容器里,但 Docker 共用了底層系統(tǒng)的 kernel,所有容器共用一部分的運(yùn)行庫(kù),因此隔離性相比 KVM 之類(lèi)的虛擬化技術(shù)差一點(diǎn),KVM 與 Docker 有各自的使用場(chǎng)景,未來(lái)很長(zhǎng)一段時(shí)間是共存狀態(tài)。
OpenStack 管理 VM(Virtual Machine)虛擬機(jī)的工具;Kubernetes 簡(jiǎn)稱(chēng) K8s ,是管理 container 容器的工具。
中間件
在后端開(kāi)發(fā)中你可能經(jīng)常聽(tīng)說(shuō)到「中間件」這個(gè)詞,那什么是中間件?看下Wiki上的定義:
中間件技術(shù)創(chuàng)建在對(duì)應(yīng)用軟件部分常用功能的抽象上,將常用且重要的過(guò)程調(diào)用、分布式組件、消息隊(duì)列、事務(wù)、安全、鏈接器、商業(yè)流程、網(wǎng)絡(luò)并發(fā)、HTTP 服務(wù)器、Web Service?等功能集于一身或者分別在不同品牌的不同產(chǎn)品中分別完成。
中國(guó)科學(xué)院軟件所研究員仲萃豪把中間件定義為「平臺(tái)+通信」。這個(gè)定義限定了只有用于分布式系統(tǒng)中的此類(lèi)軟件才能被稱(chēng)為中間件,同時(shí)此定義也把中間件與實(shí)際應(yīng)用的應(yīng)用軟件區(qū)分開(kāi)來(lái)。
大白話(huà)來(lái)說(shuō),中間件就是把分布式系統(tǒng)中一些通用功能的抽象出來(lái)提供服務(wù)的一類(lèi)軟件統(tǒng)稱(chēng)。它屏蔽掉了底層操作系統(tǒng)的復(fù)雜性,向上提供一個(gè)統(tǒng)一的開(kāi)發(fā)環(huán)境,降低了軟件系統(tǒng)開(kāi)發(fā)的復(fù)雜度,由于中間件是介于操作系統(tǒng)和應(yīng)用軟件之間,為應(yīng)用軟件提供服務(wù)功能的軟件,由于介于兩種軟件之間,所以稱(chēng)為中間件。
常見(jiàn)的的開(kāi)源中間件有下面幾種,組合起來(lái)就能搭建一個(gè)完整的分布式后臺(tái)服務(wù)系統(tǒng):
web server 中間件,Nginx、OpenResty、Tomcat…
緩存中間件,服務(wù)端緩存包括 Redis、Memcached…
消息隊(duì)列中間件,Kafka、RabbitMQ、ActiveMQ…
RPC框架,Tars、Dubbo、gRPC、Thrift
數(shù)據(jù)庫(kù)中間件,Sharding jdbc
日志系統(tǒng)中間件,ELK B指的是一套解決方案,是 Elasticsearch、Logstash 、 Kibana、Beats 是這 4 種軟件產(chǎn)品的首字母縮寫(xiě)。
配置中心中間件,Apollo、zookeeper統(tǒng)一配置管理
API網(wǎng)關(guān),開(kāi)源項(xiàng)目有 Tyk、kong、zuul、orange…
版本控制
大型軟件項(xiàng)目的代碼量巨大,如何有效組織和管理源碼和版本,于是產(chǎn)生了版本控制系統(tǒng)。版本控制系統(tǒng)就是我們常說(shuō)的SVN 或 Git,用來(lái)追蹤、維護(hù)源碼、文件以及配置文件等等的改動(dòng),并且提供控制這些改動(dòng)控制權(quán)的程序。
常見(jiàn)的版本控制系統(tǒng)分為兩大類(lèi):集中式版本控制和分布式版本控制。作為后端開(kāi)發(fā)工程師,版本控制系統(tǒng)的使用也是必須掌握的基礎(chǔ)技能,不過(guò)這些系統(tǒng)一般都是邊使用邊熟悉,剛開(kāi)始熟悉一些常用操作就好。
常見(jiàn)的有集中式版本控制系統(tǒng),代表是SVN;
分布式版本控制系統(tǒng),代表是Git
工具
一些和后端開(kāi)發(fā)或者說(shuō)軟件開(kāi)發(fā)相關(guān)的工具推薦,主要是編輯器和 IDE。
編輯器
在 Linux 下開(kāi)發(fā)肯定離不開(kāi) Vim 或者 Emacs,這兩個(gè)都是常用的編輯器,已經(jīng)形成了兩大愛(ài)好者陣營(yíng)。特別是 Vim 編輯器,學(xué)習(xí)成本有點(diǎn)高,配合上各種插件和配置,有些 Vim 愛(ài)好者已經(jīng)把它當(dāng)成 IDE 來(lái)用了,一旦掌握可以大幅提升工作效率,值得你去學(xué)習(xí)。
當(dāng)然除了 Vim 如果是文字編輯工作,比如寫(xiě) README 文檔或者寫(xiě)技術(shù)博客,那么強(qiáng)烈推薦學(xué)習(xí)下 Markdown 語(yǔ)法,這是一種種輕量級(jí)標(biāo)記語(yǔ)言,它允許人們使用易讀易寫(xiě)的純文本格式編寫(xiě)文檔,注重內(nèi)容本身不用過(guò)多的調(diào)整排版。Markdown 編輯器推薦 Typora 、有道云筆記 Markdown 編輯器、VSCode Markdown插件。
IDE
編輯器作為小工程還可以勝任,不過(guò)后端開(kāi)發(fā)工作中,一般都是大型的軟件工程項(xiàng)目,所以不大可能用編輯器來(lái)管理,這時(shí)候就需要學(xué)習(xí)使用專(zhuān)業(yè)的集成開(kāi)發(fā)工具。
集成開(kāi)發(fā)環(huán)境(IDE,Integrated Development Environment )是用于提供程序開(kāi)發(fā)環(huán)境的應(yīng)用程序,一般包括代碼編輯器、編譯器、調(diào)試器和圖形用戶(hù)界面等工具。
磨刀不誤砍柴工,挑一把趁手的兵器再去編程世界遨游。各語(yǔ)言 IDE 五花八門(mén),推薦 JetBrains 系列和 VS Code ,JetBrains 產(chǎn)品包括各語(yǔ)言開(kāi)發(fā)的一系列的 IDE,特別是Java 的Intellij IDEA 口碑非常不錯(cuò),部分對(duì)應(yīng)的產(chǎn)品系列如下。
CLion - 跨平臺(tái)的C/C++ IDE 開(kāi)發(fā)工具,支持C++11 、C++14、libc++以及Boost。
GoLand - Go語(yǔ)言的集成開(kāi)發(fā)環(huán)境。
IntelliJ IDEA - 2001年發(fā)布。一套智能的 Java 集成開(kāi)發(fā)環(huán)境,特別專(zhuān)注與強(qiáng)調(diào)程序師的開(kāi)發(fā)撰寫(xiě)效率提升。
PhpStorm - PHP IDE開(kāi)發(fā)工具。
PyCharm - 一款結(jié)合了Django框架的Python IDE開(kāi)發(fā)工具。
AppCode - Swift 和 Objective-C IDE開(kāi)發(fā)工具。
Visual Studio Code(簡(jiǎn)稱(chēng)VS Code)是一個(gè)由微軟開(kāi)發(fā),同時(shí)支持Windows 、 Linux和macOS等操作系統(tǒng)的免費(fèi)代碼編輯器,它支持測(cè)試,并內(nèi)置了Git 版本控制功能,同時(shí)也具有開(kāi)發(fā)環(huán)境功能,例如代碼補(bǔ)全(類(lèi)似于 IntelliSense)、代碼片段和代碼重構(gòu)等。該編輯器支持用戶(hù)個(gè)性化配置,例如改變主題顏色、鍵盤(pán)快捷方式等各種屬性和參數(shù),同時(shí)還在編輯器中內(nèi)置了擴(kuò)展程序管理的功能。
在2019年的 Stack Overflow 組織的開(kāi)發(fā)者調(diào)研中,VS Code被認(rèn)為是最受開(kāi)發(fā)者歡迎的開(kāi)發(fā)環(huán)境。
測(cè)試
軟件工程師不僅要寫(xiě)代碼,還要做測(cè)試,軟件測(cè)試和軟件開(kāi)發(fā)是相伴相生,測(cè)試能讓保證我們寫(xiě)出代碼更加健壯和可維護(hù)。
TDD是測(cè)試驅(qū)動(dòng)開(kāi)發(fā)(Test-Driven Development)的英文簡(jiǎn)稱(chēng),是敏捷開(kāi)發(fā)中的一項(xiàng)核心實(shí)踐和技術(shù),也是一種設(shè)計(jì)方法論。TDD的原理是在開(kāi)發(fā)功能代碼之前,先編寫(xiě)單元測(cè)試用例代碼,根據(jù)測(cè)試代碼確定需要編寫(xiě)什么產(chǎn)品代碼。需要掌握和了解以下測(cè)試技術(shù)和方法。
單元測(cè)試
壓力測(cè)試
全鏈路測(cè)試
A/B 測(cè)試,灰度發(fā)布,藍(lán)綠部署
學(xué)習(xí)順序
總結(jié)下,后端技術(shù)學(xué)習(xí)的內(nèi)容還是很多的,不可能一蹴而就。
這篇文章能看到這里的同學(xué),如果是初學(xué)者,可能就想問(wèn)直接問(wèn)我從哪里開(kāi)始學(xué)習(xí)?那我就不賣(mài)關(guān)子,如果你不知道從哪開(kāi)始學(xué),對(duì)于學(xué)習(xí)路線(xiàn)各個(gè)節(jié)點(diǎn),我就按個(gè)人的學(xué)習(xí)經(jīng)驗(yàn)并結(jié)合認(rèn)識(shí)的大廠(chǎng)高 P 給的建議,給你把以上技術(shù)路線(xiàn)學(xué)習(xí)優(yōu)先級(jí)做個(gè)排序,你照著學(xué)就行,排序規(guī)則:
星級(jí)越高,排名越靠前,重要程度越高,優(yōu)先安排時(shí)間學(xué)習(xí)。
計(jì)算機(jī)基礎(chǔ) 5星
Linux 5 星
數(shù)據(jù)庫(kù) 5 星
設(shè)計(jì)模式 5 星
工具 5 星
中間件 4 星
分布式 4 星
高并發(fā)、高可用、高性能 4 星
搜索引擎 4 星
測(cè)試 3 星
監(jiān)控與統(tǒng)計(jì) 3 星
虛擬化 3 星
安全 3 星
大數(shù)據(jù) 3 星
語(yǔ)言的困惑
細(xì)心的讀者應(yīng)該發(fā)現(xiàn)了,到目前為止本文討論的后端技術(shù)學(xué)習(xí)路線(xiàn)內(nèi)容,并沒(méi)有提及特定編程語(yǔ)言,不提及并不是說(shuō)不重要,語(yǔ)言是很多技術(shù)的前置知識(shí)。打個(gè)比方來(lái)說(shuō),編程語(yǔ)言是磚瓦,高大上的項(xiàng)目都是一磚一瓦堆砌而成。
其實(shí)你在學(xué)習(xí)上述技術(shù)點(diǎn)的過(guò)程中,會(huì)自然而然的接觸到各種編程語(yǔ)言的中間件或是開(kāi)源項(xiàng)目,不管用什么語(yǔ)言做后端服務(wù)開(kāi)發(fā),都是沒(méi)有問(wèn)題的,并且都不有很多優(yōu)秀的開(kāi)源框架可以借鑒學(xué)習(xí),關(guān)鍵是要有清晰的學(xué)習(xí)路線(xiàn),主流的后端開(kāi)發(fā)語(yǔ)言包括 Java、C++、PHP、Python、Go ,那學(xué)哪個(gè)呢?
如果你是在校的學(xué)生,時(shí)間充足,我建議可以都可以嘗試下,不試過(guò)怎么知道不合適?然后結(jié)合自己偏愛(ài)和未來(lái)打算從事的崗位方向選擇一門(mén)語(yǔ)言深入學(xué)習(xí);
如果你是職場(chǎng)社畜,那就要適應(yīng)團(tuán)隊(duì),產(chǎn)品業(yè)務(wù)需要用什么語(yǔ)言開(kāi)發(fā)那就學(xué)哪個(gè)。萬(wàn)變不離其宗,后端技術(shù)的知識(shí)都是相通的,不要被特定語(yǔ)言所束縛,這些通用的后端技術(shù)掌握后,剩下的就只是編程語(yǔ)言學(xué)習(xí),很快啊,很快的。
結(jié)語(yǔ)
這篇文章我從月初開(kāi)始整理內(nèi)容、繪制思維導(dǎo)圖,真真是肝了半個(gè)月之久。創(chuàng)作過(guò)程中,我把自己從初級(jí)開(kāi)發(fā)人員到現(xiàn)在高級(jí)工程師,這些年學(xué)習(xí)的技術(shù)都在腦子里過(guò)了一遍。
說(shuō)來(lái)慚愧有些我畫(huà)在導(dǎo)圖上的技術(shù)我也只是懂點(diǎn)皮毛,但整個(gè)后端技術(shù)棧的學(xué)習(xí)路線(xiàn)和方向是沒(méi)問(wèn)題的,我都畫(huà)出來(lái)了,大家參考著學(xué)習(xí)和查漏補(bǔ)缺,在技術(shù)上我也需要繼續(xù)精進(jìn)學(xué)習(xí),咱們共勉。
高清路線(xiàn)大圖
小林已經(jīng)放到公眾號(hào)里了
后臺(tái)回復(fù)「后端」即可獲取
免責(zé)聲明:本文內(nèi)容由21ic獲得授權(quán)后發(fā)布,版權(quán)歸原作者所有,本平臺(tái)僅提供信息存儲(chǔ)服務(wù)。文章僅代表作者個(gè)人觀點(diǎn),不代表本平臺(tái)立場(chǎng),如有問(wèn)題,請(qǐng)聯(lián)系我們,謝謝!