【最佳收藏】后端技術學習路線思維導圖!肯定會有你想學的!


作為一個非科班自學計算機成功轉行軟件開發的人,體會過當初想學又不知從何學起的迷茫,還好最后摸索出了一條正確學習的路線。

思來想去,學習方向和路線很重要,比起具體的技術細節, 可復制的經驗、清晰的學習路線,是大部分人更加需要的東西 。

朝着正確的方向努力否則只會離目標越來越遠,不是嗎?

所以一張完整的后端技術學習路線思維導圖,分享給你~~~

要成為一個符合 BAT、TMD 大廠要求的后端技術工程師,到底需要學哪些技術?后端技術學習路線是怎樣的?

 

學習路線

話不多說,直接上剛畫完的 后端技術學習路線 思維導圖框架:


 

接下來我們來逐個展開介紹!!!(喜歡點個關注吧)

一、計算機基礎


 

不管是后端開發還是前端開發,說到底我們所有的軟件開發都是在計算上編寫程序。

雖然對於大部分人來說,真正開始寫代碼的時候很少會讓你去解決計算機底層的問題,不接觸不代表不重要,計算機基礎是最重要的。

后端開發工作中經常用到 Java、C++、Python、Golang 這些語言稱為高級編程語言,稱為高級是它們接近我們日常交流的自然語言,離計算機底層遠。

但所有的高級語言最終都會轉化成匯編->計算機指令->控制流操控計算機硬件 ,所以學習計算機構成和工作原理、操作系統這些基礎知識,能夠加深我們隊高級語言的理解。

那我們一直說的計算機基礎到底是什么?

計算機科學技術 CS(Computer Science)作為一門專業課程,就和其他工科課程一樣有自己的理論體系。

如果你是計算機專業的同學不用我來教該學什么,計算機專業大學四年學校教的那些就是基礎,別小看你在學校學的那些看起來沒啥用的課程。 

我這有一份科大的計算機技術本科主要課程結構安排 :

 

一流大學的計算機專業要學什么可以對照着看下,從學科數學理論基礎、計算機體系結構、軟件工程方法等等維度展開。

那如果你不是計算機相關專業的想轉行,也不要被嚇到了,畢竟這是人家四年時間的學習內容。

本科的培養目標不僅僅是培養出一個軟件工程師,本科學習還是面向碩士博士的基礎培養。


 

如果只是面向后台開發和工作面試,或者你是非計算機專業想轉行,社畜沒有太多時間去學習大學那些理論課程;

那幫我把計算機基礎的范圍縮小到上圖所示這幾門專業課: 計算機組成原理、計算機網路、操作系統、數據結構等。

 

1、計算機組成原理

這門課程讓你了解計算機的組成和工作原理,要學習的內容包括:

    ♢ 數據在計算機中的表示和運算(計算機不識數,只認得高低電平,所以數據在計算機內部都用二進制的0和1表示)

    ♢ 存儲系統(數據和程序指令都要存儲下來,學習計算機的存儲層次,內存、外存、高速緩存、虛擬存儲技術)

    ♢ 指令系統(寫的代碼最終都要被翻譯成計算機指令,指令格式和尋址方式有多種,控制器來控制指令執行)

    ♢ 中央處理器(也就是 CPU 計算機的大腦,主要構成是運算器和控制器)

    ♢ 總線(計算機的血管動脈,連接計算機各功能組件,用來傳輸數據、地址信號、控制信號)

    ♢ 輸入輸出系統(Input/Output 也叫 IO 系統,連接和管理各種外部設備比如鍵盤、顯示器等等)

 

 

2、計算機網絡

世界上第一台通用計算機「ENIAC」於 1946 被發明出來,如其名字一樣僅僅是用於計算,在后來計算機越來越多...

如果沒有網絡每台計算機都將成為一個孤島,也不會有現在互聯網的繁榮。

「計算機網絡」這門課程的學習路線非常清晰,就是圍繞着如何讓地理位置上不同的計算機連接起來,並高效可靠的交換數據信息,實現人在家中做,天下事盡知。

 

計算機網絡有分層次,根據各層屬性和特點,分為:

    ♢ 物理層

    ♢ 數據鏈路層

    ♢ 網絡層

    ♢ 傳輸層

    ♢ 應用層

 

這個層次划分從上到下就是一個網絡數據包的接收路徑,反之就是發送路徑。

既然要交換信息肯定得商量一套通用的協議,就像我們和老外交流,要么他們學中文要么我們學英文。

反正得統一出一個標准語言出來,這在計算機網絡中稱之為「通信協議」。

如上述的網絡分層,每層都有各自適配的協議,所以計算機網絡的學習基本就是圍繞着分層協議的學習。

 

3、操作系統

操作系統也是一種軟件。你熟悉的微軟Windos操作系統,后台開發熟悉的各種發行版的 Linux 系統,都是通過軟件的形式安裝在計算機上。

只不過這個軟件和我們平常接觸的應用程序軟件不同,它比較特殊...

因為它向下和計算機硬件(就是我們在計算機組成原理中學習的那些硬件)打交道,向上給其他應用程序和用戶提供通用的交互的接口,說白了操作系統就是個中介和管家的角色。

它幫我們做了下面這些事情:

    ♢ 進程管理(你寫的程序運行起來才能干活,運行起來的程序稱為進程,進程是資源的最小單位)

    ♢ 內存管理(計算機內存又貴又少,動不動又要來個高並發,內存管理大有學問)

    ♢ 文件管理(計算機中的資料和信息需要通過文件系統來保存、管理)

    ♢ 輸入輸出管理(各種外部設備如何接入計算機和接入之后又如何管理)

 

 

4、數據結構

數據結構大家最熟悉,即使毫無計算機基礎或是想轉行計算機,第一個遇到的就是數據結構。

因為面試刷的算法題本質上就是對各種數據結構的運用,所以單純對面試功利的角度來說,數據結構也是必須要掌握的計算機基礎。

 

數據結構要學到:

    ♢ 線性表(鏈表、數組、循環鏈表)

    ♢ 棧和隊列

    ♢ 樹和各種二叉樹(二叉排序樹、平衡二叉樹、哈夫曼樹、B樹、B+樹、Trie樹)

    ♢ 圖(圖的存儲結構、BFS、DFS、最短路徑、最小生成樹、拓撲排序、關鍵路徑)

    ♢ 查找算法(二分查找、B樹查找、HASH表、KMP字符串模式匹配)

    ♢ 排序算法(插入排序、冒泡排序、歸並排序、基數排序、堆排序)

    ♢ 貪心算法

    ♢ 位運算

    ♢ 分治算法

    ♢ 動態規划

好了,計算機基礎四大專業課已經大概過了一遍,當然這是我給沒有計算機基礎同學的實用主義建議,等你學完這四門課程也只能夠說入門計算機了,不過這已經比很多人厲害了。如果想真正的了解計算機這門學科,可以等學完了這 4 門基礎課程之后,再花寫時間挑一些上面培養方案中的課程去學習,做一個知識體系完備的計算機軟件后端開發工程師。

 

二、Linux

在后台開發領域,你所能接觸到的后端服務不敢說 100%,至少也有 90% 以上是運行在 Linux 系統之上。

因為它開源、便利、功能強大,需要學習以下技術點:

 

1、Linux系統使用

所以如果你想走后端開發這條路線,我建議你趁早使用 Linux ,越早越好。

可以是在個人 PC 上裝 Linux 虛擬機,或者裝個雙系統。

有了Linux系統之后干嘛呢?把它作為你的常用系統,經常登錄進去對照着「鳥哥的 Linux 私房菜」從頭到尾操作一遍,ok,Linux的基礎操作你就掌握了。

 

2、Linux 高級編程

Linux「高級編程」的意思是比上面的 Linux 基礎操作更深入一個層次。

學會了 Linux 的使用還不算是一個真正的開發人員,使用系統是成為開發者最基本要求。

會操作Linux 就像使用 Windows 系統一樣,只不過是學習成本的問題,如果這個世界沒有 Window 系統,你女朋友花點時間也能掌握 Linux 系統基本操作。

要想進階成為后端開發人員,就要懂得如何使用 Linux 系統提供的各種系統API(系統調用接口)進行編程開發,程序員用你寫的代碼來控制系統,普通用戶只會用鼠標操縱。

這個階段需要學習:

    ♢ Unix 系統實現 Linux、基本系統數據類型

    ♢ 文件操作函數: open 、 read close write dup fcntl ioctl stat chmod access chdir...

    ♢ 系統編程接口的基本特性和高級特性

    ♢ Linux進程環境、如何創建進程、線程,程序的存儲空間分配、環境變量

    ♢ 進程組、會話以及任務控制、進程優先級和調度

    ♢ 動態庫和靜態庫

    ♢ 進程間通信:管道和FIFO、消息隊列、信號量、共享內存、內存映射

    ♢ 套接字和網絡編程

 

總之,這一階段需要學習的是在 Linux 環境下的高級編程技巧,通過對這些內容的學習也能讓你更深入的理解 Linux 系統是如何工作和運行的,並且真正的踏入 Linux 系統編程大門。

 

3、網絡編程

網絡編程是通過網絡套接字 socket 方式實現的通信,所以也屬於進程間通信 IPC(Inter-Process Communication)。

由於現在的后台服務基於服務端/客戶端模型,兩者之間基於網絡通信,你在家用手機點個外賣的服務請求,也是通過網絡通信發給某團的后台服務器。

所以后台服務開發,說到底還是網絡編程,以及建立在網絡編程數據之上的應用層開發。

 

網絡編程學什么:

    ♢ 什么是socket套接字

    ♢ 套接字選項

    ♢ TCP/UDP 套接字編程

    ♢ Unix domain 協議和編程

    ♢ 原始套接字編程

    ♢ IO多路復用:select 、poll、epoll、kqueue

    ♢ 序列化技術

    ♢ 零拷貝技術

    ♢ 開源網絡庫:muduo、libevent

學完以上內容你大概可以寫一個類似QQ一樣的網絡聊天小工具。

不在在工作中,都有成熟的網絡框架或網絡通信庫,大公司比如鵝廠大部分是自研網絡通信框架,小公司用開源項目。

這讓很多后台開發人員不必關心底層的網絡通信細節,除了部分基礎架構的開發同學,大部分后台開發同學工作都是在做業務系統的開發。

但了解底層網絡編程原理,是后台開發人員的核心能力,這點對於 C/C++ 后台開發程序員尤為重要。它能拔高你看問題的高度,不了解底層原理,就像是在黑盒編程一樣,出了問題無從下手排查。


然后,學完了以上內容,基本是具備了從事后台開發的基礎能力,也能開發出一個簡單的后台服務器了。

今天的學習就止步於此吧,明天的你依舊要努力學習呀,后面跟大家來分享數據庫、高並發、設計模式、分布式等等....


 

最后,不管你是轉行也好,初學也罷,進階也可,如果你想學編程~

【值得關注】我的 C/C++編程學習交流俱樂部!【點擊進入】

問題答疑,學習交流,技術探討,還有超多編程資源大全,零基礎的視頻也超棒~


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM