21 張思維導圖,檸檬哥肝了半個月的「後端技術學習路線」長啥樣?

2021-02-11 程式設計師資源社區

珍惜當下,因為每一天都不平凡。1915 年的今天,愛因斯坦向普魯士科學院展示廣義相對論的方程式。

大家好,我是檸檬

檸檬哥最近在思考公眾號的內容方向問題,如何讓公眾號持續提供有價值的內容給大家,之所以會有這樣的思考,起因是來自與一位讀者的對話,這位讀者加了我微信,問我下面的問題:

相信有很多讀者關注到這裡,是因為看到「後端技術學堂」這個公眾號名字,正如公眾號的介紹:

幫你構建後端技術知識體系,是你學習編程的課堂。

寫的文章也都是圍繞著這個主題,這位讀者的問題讓我突然意識,我忽略了讀者群體裡有很多是初學編程,或者剛接觸計算機的同學。

檸檬哥作為一個普通大學非計算機專業,自學後端技術進入騰訊從事後端開發工作,我自己也是非科班自學計算機成功轉行軟體開發(有想聽檸檬哥轉行之路經歷的嗎,可以留言告訴我,人多就寫寫),體會過當初想學又不知從何學起的迷茫,還好最後摸索出了一條正確學習的路線。

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

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

只顧著寫各種技術,不告訴大家這個知識點在後端技術圖譜的什麼位置,有點盲人摸象不知全貌的感覺,很多在我看來大家都懂的內容,其實只是我以為,信息差是客觀存在的,抹平信息差是分享的價值所在。

所以這一期文章檸檬哥足足花了半個月時間,整理了一張後端技術學習路線思維導圖,來和你聊聊:

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

學習路線

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

圖中的每一個節點都可以點開,我都做了細分,在後面章節逐個展開介紹。

後端技術學堂開課半年以來,寫了 30+ 篇原創文章,內容有Linux、資料庫、算法、架構、微服務、甚至中間還寫了一個系列的Golang基礎教程,真算得上是天馬行空,這就是才華橫溢吧(狗頭)。

歷史文章都在後端知識體系範疇內,你甚至可以對照下我歷史文章分享的內容,都可以在我今天整理的這張學習路線圖中找到相應的位置,後續更新的文章我也會歸類到其中,方便大家歸納複習。

計算機基礎

不管是後端開發還是前端開發,說到底我們所有的軟體開發都是在計算上編寫程序,雖然對於大部分人來說,真正開始寫代碼的時候很少會讓你去解決計算機底層的問題,不接觸不代表不重要,計算機基礎是最重要的。

後端開發工作中經常用到 Java、C++、Python、Golang 這些語言稱為高級程式語言,稱為高級是它們接近我們日常交流的自然語言,離計算機底層遠,但所有的高級語言最終都會轉化成彙編->計算機指令->控制流操控計算機硬體,所以學習計算機構成和工作原理、作業系統這些基礎知識,能夠加深我們隊高級語言的理解。

那我們一直說的計算機基礎到時是什麼?計算機科學技術 CS(Computer Science)作為一門專業課程,就和其他工科課程一樣有自己的理論體系,如果你是計算機專業的同學不用我來教該學什麼,計算機專業大學四年學校教的那些就是基礎,別小看你在學校學的那些看起來沒啥用的課程。我這有一份中中科大的計算機技術本科主要課程結構安排

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

那如果你不是計算機相關專業的想轉行,也不要被嚇到了,畢竟這是人家四年時間的學習內容,本科的培養目標不僅僅是培養出一個軟體工程師,本科學習還是面向碩士博士的基礎培養,注意是計算機科學專業,名字裡有個詞叫「科學」,我這篇文章要說的 BAT 公司後臺軟體開發,可以認為是「工學」方向,更多的是服務於工程開發。

如果只是面向後臺開發和工作面試,或者你是非計算機專業想轉行,社畜沒有太多時間去學習大學那些理論課程,那幫我把計算機基礎的範圍縮小到下面這 4 門專業課:計算機組成原理、計算機網路、作業系統、數據結構

計算機組成原理

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

數據在計算機中的表示和運算(檸檬說:計算機不識數,只認得高低電平,所以數據在計算機內部都用二進位的0和1表示)存儲系統(檸檬說:數據和程序指令都要存儲下來,學習計算機的存儲層次,內存、外存、高速緩存、虛擬存儲技術)指令系統(檸檬說:寫的代碼最終都要被翻譯成計算機指令,指令格式和尋址方式有多種,控制器來控制指令執行)中央處理器(也就是 CPU 計算機的大腦,主要構成是運算器和控制器)總線(檸檬說:計算機的血管動脈,連接計算機各功能組件,用來傳輸數據、地址信號、控制信號)輸入輸出系統(檸檬說:Input/Output 也叫 IO 系統,連接和管理各種外部設備比如鍵盤、顯示器等等)計算機網絡

世界上第一臺通用計算機「ENIAC」於 1946 被發明出來,如其名字一樣僅僅是用於計算,在後來計算機越來越多,如果沒有網絡每臺計算機都將成為一個孤島,也不會有現在網際網路的繁榮,「計算機網絡」這門課程的學習路線非常清晰,就是圍繞著如何讓地理位置上不同的計算機連接起來,並高效可靠的交換數據信息,實現人在家中做,天下事盡知。

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

這個層次劃分從上到下就是一個網絡數據包的接收路徑,反之就是發送路徑。既然要交換信息肯定得商量一套通用的協議,就像我們和老外交流,要麼他們學中文要麼我們學英文,反正得統一出一個標準語言出來,這在計算機網絡中稱之為「通信協議」。如上述的網絡分層,每層都有各自適配的協議,所以計算機網絡的學習基本就是圍繞著分層協議的學習。

作業系統

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

只不過這個軟體和我們平常接觸的應用程式軟體不同,它比較特殊,因為它向下和計算機硬體(就是我們在計算機組成原理中學習的那些硬體)打交道,向上給其他應用程式和用戶提供通用的交互的接口,說白了作業系統就是個中介和管家的角色。它幫我們做了下面這些事情:

進程管理(檸檬說:你寫的程序運行起來才能幹活,運行起來的程序稱為進程,進程是資源的最小單位)內存管理(檸檬說:計算機內存又貴又少,動不動又要來個高並發,內存管理大有學問)文件管理(檸檬說:計算機中的資料和信息需要通過文件系統來保存、管理)輸入輸出管理(檸檬說:各種外部設備如何接入計算機和接入之後又如何管理)數據結構

數據結構大家最熟悉,即使毫無計算機基礎或是想轉行計算機,第一個遇到的就是數據結構,因為面試刷的算法題本質上就是對各種數據結構的運用。所以單純對面試功利的角度來說,數據結構也是必須要掌握的計算機基礎,數據結構要學到:

樹和各種二叉樹(二叉排序樹、平衡二叉樹、哈夫曼樹、B樹、B+樹、Trie樹)圖(圖的存儲結構、BFS、DFS、最短路徑、最小生成樹、拓撲排序、關鍵路徑)查找算法(二分查找、B樹查找、HASH表、KMP字符串模式匹配)排序算法(插入排序、冒泡排序、歸併排序、基數排序、堆排序)

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

Linux

在後臺開發領域,你所能接觸到的後端服務不敢說 100%,至少也有 90% 以上是運行在 Linux 系統之上,因為它開源、便利、功能強大,需要學習以下技術點:

Linux系統使用

所以如果你想走後端開發這條路線,我建議你趁早使用 Linux ,越早越好。可以是在個人 PC 上裝 Linux 虛擬機,或者裝個雙系統,我在大學就是這麼玩的,那時候雲伺服器還沒現在這麼普及,現在我覺得買個 Linux 雲伺服器最方便,如果是學生還有教育優惠也不貴。

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

Linux 高級編程

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

相關歷史文章:萬字長文,別再說你不懂Linux內存管理了(合輯),30 張圖給你安排的明明白白

學會了 Linux 的使用還不算是一個真正的開發人員,使用系統是成為開發者最基本要求,會操作Linux 就像使用 Windows 系統一樣,只不過是學習成本的問題,如果這個世界沒有 Window 系統,你女朋友花點時間也能掌握 Linux 系統基本操作。

要想進階成為後端開發人員,就要懂得如何使用 Linux 系統提供的各種系統API(系統調用接口)進行編程開發,程式設計師用你寫的代碼來控制系統,普通用戶只會用滑鼠操縱。這個階段需要學習:

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

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

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

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

網絡編程

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

由於現在的後臺服務基於服務端/客戶端模型,兩者之間基於網絡通信,你在家用手機點個外賣的服務請求,也是通過網絡通信發給某團的後臺伺服器,所以後臺服務開發,說到底還是網絡編程,以及建立在網絡編程數據之上的應用層開發。

網絡編程學什麼:

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

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

不在在工作中,都有成熟的網絡框架或網絡通信庫,大公司比如鵝廠大部分是自研網絡通信框架,小公司用開源項目,這讓很多後臺開發人員不必關心底層的網絡通信細節,除了部分基礎架構的開發同學,大部分後臺開發同學工作都是在做業務系統的開發。

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

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

資料庫

除非是單純的轉發路由類後臺服務,一般來說後臺開發的web伺服器後臺程序,後臺服務程序說白了就是個死循環:

接收客戶端數據包 -> 處理數據包 -> 業務邏輯處理 -> 保存必要的數據 -> 回復響應數據給客戶端

這其中會伴隨對各種數據的處理,比如電商系統會處理訂單數據、用戶數據,遊戲後臺會處理角色數據和裝備數據等等,有數據就會涉及到存儲系統,數據一般都存儲到資料庫。

主要學習 2 大類資料庫:

關係型資料庫是指採用了關係模型來組織數據的資料庫,簡單理解就是二維表格模型。

非關係型資料庫一般指的是 key-value 形式存儲數據的 NoSQL 資料庫,數據和鍵值是簡單的映射關係。

關係型資料庫

相關歷史文章:

面試官:你說對MySQL事務很熟?那我問你10個問題

掌握了這30道MySQL基礎面試題,我成了面霸

資料庫存儲引擎大揭秘,不看不知道這裡面的騷操作可真多!

非關係型資料庫

後臺開發服務還需要學會解決三高問題:高並發、高可用、高性能。

高並發

利用到目前為止學習的內容,我們的開發的後臺伺服器應付一些小並發場景綽綽有餘,但是隨著網際網路應用業務量的上漲,對後臺服務端的請求數劇增,高並發需求隨之而來,高並發指的就是高 TPS 和高 QPS

TPS (Transactions Per Second)每秒事務數QPS(Query Per Second)每秒查詢數等。

對於高並發服務必須改變傳統的單進程模型,才能處理的過來如此海量的請求。

多進程

對於高並發的服務請求,由於後臺服務一般都是 IO 密集型應用,IO 密集型應用就是大部分 CPU 時間用在網絡 IO 上,相對的是 CPU 密集型應用大部分時間花在數據計算上。

大多數的後臺服務程序都是 IO 密集型的應用,網絡 IO 的時候 CPU 等待白白浪費時間, 這就告訴我們 CPU 的潛力還沒有完全發揮,所以當一個進程的處理能力達到上限,我們可以多創建幾個進程,這就是多進程模型。

多線程

多線程與多進程類似,實際在Linux系統中線程是由輕量級的進程 LWP(Light-weight process)實現,多線程方式實現的後臺服務相對於多進程更加輕量,因為多線程是在同一個進程內部實現。

不過多線程也會帶來新的問題,比如全局數據競爭和同步問題,引入線程鎖還要防止死鎖的發生。

協程

那什麼是協程呢?協程 Coroutines 是一種比線程更加輕量級的微線程。類比一個進程可以擁有多個線程,一個線程也可以擁有多個協程,因此協程又稱微線程和纖程。可以粗略的把協程理解成子程序調用,每個子程序都可以在一個單獨的協程內執行。

異步回調

所謂異步回調就是,服務端發起 IO 請求的線程不等網絡 IO 線程操作完成,就繼續執行隨後的代碼,一般請求線程需要先註冊一個回調函數,當IO 完成之後網絡IO線程通過調用之前註冊的回調函數來通知發起 IO 請求的線程,這樣發起請求的線程就不會阻塞住等待結果,提高了服務處理性能。

關於這一小節內容可參考檸檬哥之前的文章 圖解:高並發服務框架-進程線程協程

高性能

按以上服務模型可以提高服務本身處理能力,高性能後臺服務往往還會利用多種技術、從多個維度優化提高性能。比如採用CDN(Content Delivery Network)內容分發網絡,存儲和分發使用戶就近獲取內容,縮短響應時間;採用池化技術,避免頻繁的資源分配與回收;採用服務集群,橫向擴展服務能力;採用緩存技術,熱點數據加入緩存,減少資料庫訪問。

高可用

高可用即保證服務的穩定性,不出現重大問題或宕機,常見的解決高可用思路是冗餘和負載均衡。冗餘的意思就是多部署幾臺伺服器,當其中一臺掛掉另外一臺能頂上。通過負載均衡技術實現對流量的動態調配,不至於出現大量流量衝擊某臺機器出現請求不均勻,軟體負載均衡技術可以通過DNS、Nginx、LVS等技術實現。這裡主要學習的技術有:

設計模式

設計模式代表著軟體開發的一種最佳實踐。已經經歷了很長一段時間的發展,它們提供了軟體開發過程中面臨的一般問題的最佳解決方案。學習這些模式有助於經驗不足的開發人員通過一種簡單快捷的方式來學習軟體設計,當設計大規模軟體時遵循必要的設計模式能讓寫出的代碼更加健壯和可擴展

設計模式 6 大原則:

開閉原則:對擴展開放,對修改關閉,多使用抽象類和接口。裡氏替換原則:基類可以被子類替換,使用抽象類繼承,不使用具體類繼承。依賴倒轉原則:要依賴於抽象,不要依賴於具體,針對接口編程,不針對實現編程。接口隔離原則:使用多個隔離的接口,比使用單個接口好,建立最小的接口。迪米特法則:一個軟體實體應當儘可能少地與其他實體發生相互作用,通過中間類建立聯繫。合成復用原則:儘量使用合成/聚合,而不是使用繼承。

常見設計模式分類

分布式

為什麼會出現分布式?隨著業務的體量不斷增長,單個節點的處理能力無法滿足日益增長的計算、存儲任務的時候,且硬體的提升(加內存、加磁碟、使用更好的CPU)高昂到得不償失的時候,應用程式也不能進一步優化的時候,我們才需要考慮分布式系統。

分布式系統是由一組通過網絡進行通信、為了完成共同的任務而協調工作的計算機節點組成的系統。分布式系統的出現是為了用廉價的、普通的機器完成單個計算機無法完成的計算、存儲任務。其目的是利用更多的機器,處理更多的數據。

分布式系統要解決的問題本身就是和單機系統一樣的,而由於分布式系統多節點、通過網絡通信的拓撲結構,會引入很多單機系統沒有的問題,為了解決這些問題又會引入更多的機制、協議。這裡需要學習的內容包括:

分布式唯一 ID 生成:雪花算法、UUID、淘寶 TDDL SEQUENCE方案、美團 Leaf安全

本質上後臺服務在網絡上運行,需要和各種網絡環境交互,在正常情況下能夠工作,但網際網路中有很多針對後臺服務的惡意攻擊,因此網絡安全也是後臺開發工程師需要學習的內容。這裡主要包括:

授權認證算法:OAuth2.0、OIDC、2FA、單點登錄SSO監控與統計

後臺服務運行我們如何了解其運行狀態和健康度?如果只是開發小玩具監控和統計大可不必,只需記錄本地日誌即可,對於成熟的大型後臺服務系統,監控、統計、追蹤必不可少,無監控,不運營

開源的監控軟體有:Prometheus、Zabbix、Open-Falcon。

追蹤系統也非常重要,特別是目前微服務化,一次服務請求需要經歷多個不同的微服務處理,給分布式追蹤帶來新的挑戰,主要包含以下三個方面:

通過收集日誌(Logging),記錄程序的調試信息或錯誤信息,對系統和各個服務的運行狀態進行監控通過收集量度(Metrics),比如累加量,對系統和各個服務的性能進行監控通過分布式追蹤(Tracing ),追蹤服務請求是如何在各個分布的組件中進行處理的細節

業界也有一些成熟的開源軟體用於監控與追蹤:SkyWalking、Pinpoint、Zipkin、CAT大眾點評開源。不過大公司一般都有自研的一套監控與追蹤系統,比如騰訊內部就有多套自研監控與調用鏈追蹤系統。

搜尋引擎

我們討論的是全文搜尋引擎,什麼是全文搜尋引擎?

全文搜尋引擎是目前廣泛應用的主流搜尋引擎。它的工作原理是計算機索引程序通過掃描文章中的每一個詞,對每一個詞建立一個索引,指明該詞在文章中出現的次數和位置,當用戶查詢時,檢索程序就根據事先建立的索引進行查找,並將查找的結果反饋給用戶的檢索方式。這個過程類似於通過字典中的檢索字表查字的過程。

數據分為結構化數據與非結構化數據

像資料庫表這種的數據是結構化數據;而對於像HTML、XML、文檔這樣不定長度且無固定格式的數據我們稱之為非結構化數據。非結構化數據也稱為全文數據,對非結構化數據的搜索可以用全文檢索的方式,

目前兩大主流的全文搜尋引擎「Solr」和「Elasticsearch」都是基於 Lucene 建立。搜尋引擎需要學習的內容:

搜尋引擎原理,搜尋引擎利用倒排索引技術來實現對全文數據的高效檢索。

Lucene,Apache Lucene 是一個開源的全文搜尋引擎工具包。

大數據

大數據,又稱為巨量資料,指的是在傳統數據處理應用軟體不足以處理的大或複雜的數據集的術語。隨著後臺服務用戶數增加和數據的積累,產生海量有待挖掘價值的數據,分析利用這些數據可以反饋線上決策,優化運營策略,產生數據價值。

海量數據也可以定義為來自各種來源的大量非結構化或結構化數據。

在軟體開發領域的大數據概念自 20 世紀 90 年代的數據倉庫開始,對於大數據的處理也導致各種海量數據的統計和處理技術發展。

主要包含以下的技術點需要學習:數據存儲、離線分析、流式計算。

大數據存儲:Hadoop 框架,HDFS、HBase、YARN 架構、Apache Kudu離線分析:Hive、MapReduce、Spark流式計算:Flink、Storm、Kafka Stream、Spark Streaming虛擬化

虛擬化,是指通過虛擬化技術將一臺計算機虛擬為多臺邏輯計算機。

虛擬化的好處敏捷性:行動作業系統的方式與將文件或圖片從一臺物理伺服器移動到另一臺物理伺服器的方式相同。容錯:當物理伺服器出現故障時,管理軟體會自動將實例遷移到可用伺服器,甚至無感知物理硬體故障。降低成本:您不再需要過多的物理伺服器,操作和維護所需的費用也隨之減少。

常見的虛擬化技術:KVM、Xen、OpenVZ、Docker

雖然對於大多數後臺服務程序來說, 很多服務都是部署在 Docker 容器裡,但 Docker 共用了底層系統的 kernel,所有容器共用一部分的運行庫,因此隔離性相比 KVM 之類的虛擬化技術差一點,KVM 與 Docker 有各自的使用場景,未來很長一段時間是共存狀態。

OpenStack 管理 VM(Virtual Machine)虛擬機的工具;Kubernetes 簡稱 K8s ,是管理 container 容器的工具。

中間件

在後端開發中你可能經常聽說到「中間件」這個詞,那什麼是中間件?看下Wiki上的定義:

中間件技術創建在對應用軟體部分常用功能的抽象上,將常用且重要的過程調用、分布式組件、消息隊列、事務、安全、連結器、商業流程、網絡並發、HTTP 伺服器、Web Service 等功能集於一身或者分別在不同品牌的不同產品中分別完成。

中國科學院軟體所研究員仲萃豪把中間件定義為「平臺+通信」。這個定義限定了只有用於分布式系統中的此類軟體才能被稱為中間件,同時此定義也把中間件與實際應用的應用軟體區分開來。

大白話來說,中間件就是把分布式系統中一些通用功能的抽象出來提供服務的一類軟體統稱。它屏蔽掉了底層作業系統的複雜性,向上提供一個統一的開發環境,降低了軟體系統開發的複雜度,由於中間件是介於作業系統和應用軟體之間,為應用軟體提供服務功能的軟體,由於介於兩種軟體之間,所以稱為中間件

常見的的開源中間件有下面幾種,組合起來就能搭建一個完整的分布式後臺服務系統:

web server 中間件,Nginx、OpenResty、Tomcat...緩存中間件,服務端緩存包括 Redis、Memcached...消息隊列中間件,Kafka、RabbitMQ、ActiveMQ...RPC框架,Tars、Dubbo、gRPC、Thrift日誌系統中間件,ELK B指的是一套解決方案,是 Elasticsearch、Logstash 、 Kibana、Beats  是這 4 種軟體產品的首字母縮寫。配置中心中間件,Apollo、zookeeper統一配置管理API網關,開源項目有 Tyk、kong、zuul、orange...版本控制

大型軟體項目的代碼量巨大,如何有效組織和管理源碼和版本,於是產生了版本控制系統。版本控制系統就是我們常說的SVN 或 Git,用來追蹤、維護源碼、文件以及配置文件等等的改動,並且提供控制這些改動控制權的程序。

常見的版本控制系統分為兩大類:集中式版本控制和分布式版本控制。作為後端開發工程師,版本控制系統的使用也是必須掌握的基礎技能,不過這些系統一般都是邊使用邊熟悉,剛開始熟悉一些常用操作就好

工具

一些和後端開發或者說軟體開發相關的工具推薦,主要是編輯器和 IDE。

編輯器

在 Linux 下開發肯定離不開 Vim 或者 Emacs,這兩個都是常用的編輯器,已經形成了兩大愛好者陣營。特別是 Vim 編輯器,學習成本有點高,配合上各種插件和配置,有些 Vim 愛好者已經把它當成 IDE 來用了,一旦掌握可以大幅提升工作效率,值得你去學習。

當然除了 Vim 如果是文字編輯工作,比如寫 README 文檔或者寫技術博客,那麼強烈推薦學習下 Markdown 語法,這是一種種輕量級標記語言,它允許人們使用易讀易寫的純文本格式編寫文檔,注重內容本身不用過多的調整排版。Markdown 編輯器推薦 Typora 、有道雲筆記 Markdown 編輯器、VSCode Markdown插件。

IDE

編輯器作為小工程還可以勝任,不過後端開發工作中,一般都是大型的軟體工程項目,所以不大可能用編輯器來管理,這時候就需要學習使用專業的集成開發工具。

集成開發環境(IDE,Integrated Development Environment )是用於提供程序開發環境的應用程式,一般包括代碼編輯器、編譯器、調試器和圖形用戶界面等工具。

磨刀不誤砍柴工,挑一把趁手的兵器再去編程世界遨遊。各語言 IDE 五花八門,推薦 JetBrains 系列和 VS Code ,JetBrains 產品包括各語言開發的一系列的 IDE,特別是Java 的Intellij IDEA 口碑非常不錯,部分對應的產品系列如下。

CLion - 跨平臺的C/C++ IDE 開發工具,支持C++11 、C++14、libc++以及Boost。IntelliJ IDEA - 2001年發布。一套智能的 Java 集成開發環境,特別專注與強調程序師的開發撰寫效率提升。PyCharm - 一款結合了Django框架的Python IDE開發工具。AppCode - Swift 和 Objective-C IDE開發工具。

Visual Studio Code(簡稱VS Code)是一個由微軟開發,同時支持Windows 、 Linux和macOS等作業系統的免費代碼編輯器,它支持測試,並內置了Git 版本控制功能,同時也具有開發環境功能,例如代碼補全(類似於 IntelliSense)、代碼片段和代碼重構等。該編輯器支持用戶個性化配置,例如改變主題顏色、鍵盤快捷方式等各種屬性和參數,同時還在編輯器中內置了擴展程序管理的功能。

在2019年的 Stack Overflow 組織的開發者調研中,VS Code被認為是最受開發者歡迎的開發環境。

相關歷史文章:

乾貨:用好VSCode這13款插件和8個快捷鍵,工作效率提升10倍

手把手教你配置VS Code遠程開發工具,工作效率提升N倍

測試

軟體工程師不僅要寫代碼,還要做測試,軟體測試和軟體開發是相伴相生,測試能讓保證我們寫出代碼更加健壯和可維護。

TDD是測試驅動開發(Test-Driven Development)的英文簡稱,是敏捷開發中的一項核心實踐和技術,也是一種設計方法論。TDD的原理是在開發功能代碼之前,先編寫單元測試用例代碼,根據測試代碼確定需要編寫什麼產品代碼。需要掌握和了解以下測試技術和方法。

學習順序

總結下,後端技術學習的內容還是很多的,不可能一蹴而就。

這篇文章能看到這裡的同學,如果是初學者,可能就想問直接問我從哪裡開始學習?那我就不賣關子,如果你不知道從哪開始學,對於學習路線各個節點,我就按個人的學習經驗並結合認識的大廠高 P 給的建議,給你把以上技術路線學習優先級做個排序,你照著學就行排序規則

星級越高,排名越靠前,重要程度越高,優先安排時間學習。

計算機基礎  5星

Linux  5 星

資料庫 5 星

設計模式 5 星

工具 5 星

中間件 4 星

分布式 4 星

高並發、高可用、高性能  4 星

搜尋引擎 4 星

測試 3 星

監控與統計 3 星

虛擬化 3 星

安全 3 星

大數據 3 星

語言的困惑

細心的讀者應該發現了,到目前為止本文討論的後端技術學習路線內容,並沒有提及特定程式語言,不提及並不是說不重要,語言是很多技術的前置知識。打個比方來說,程式語言是磚瓦,高大上的項目都是一磚一瓦堆砌而成。

其實你在學習上述技術點的過程中,會自然而然的接觸到各種程式語言的中間件或是開源項目,不管用什麼語言做後端服務開發,都是沒有問題的,並且都不有很多優秀的開源框架可以借鑑學習,關鍵是要有清晰的學習路線,主流的後端開發語言包括 Java、C++、PHP、Python、Go ,那學哪個呢?

如果你是在校的學生,時間充足,我建議可以都可以嘗試下,不試過怎麼知道不合適?然後結合自己偏愛和未來打算從事的崗位方向選擇一門語言深入學習;

如果你是職場社畜,那就要適應團隊,產品業務需要用什麼語言開發那就學哪個。萬變不離其宗,後端技術的知識都是相通的,不要被特定語言所束縛,這些通用的後端技術掌握後,剩下的就只是程式語言學習,很快啊,很快的。

結語

說來慚愧有些我畫在導圖上的技術我也只是懂點皮毛,但整個後端技術棧的學習路線和方向是沒問題的,我都畫出來了,大家參考著學習和查漏補缺,在技術上我也需要繼續精進學習,咱們共勉。

學習路線和高清路線大圖我會放在我的 Github 項目上,這篇文章只是個開始,也不是最終版,我會持續在 Github 更新和完善本文內容,我這個項目的地址是:

https://github.com/imcoderlemon/CodeClass

點擊文末「閱讀原文」連結,直達 Github 項目主頁,記得點個 star 這樣我更新了內容你就能收到通知。

公眾號後臺回復「學習路線」獲取後端技術學習路線高清思維導圖

這篇文章沒寫之前我就預感會很長,寫到這裡已經 1 萬多字了。

對於每個技術點還可以展開聊聊我是如何學習的,那樣就更長了閱讀體驗不好,檸檬哥作為一名普通大學非科班選手,自學後端技術進入鵝廠,我的學習經驗或許能給你一點借鑑。

如果大家感興趣,也可以分享下細分技術領域的學習路線,比如計算機基礎學習路線、資料庫學習路線、Linux技術學習路線...如果大家想看的話就點 「在看」給我點動力,攢夠 50 個在看,就再寫寫具體的學習路線

順便做個調查,接下來你最想看檸檬哥分享哪個方向技術的詳細學習路線:

這篇文章我從月初開始整理內容、繪製思維導圖,真真是肝了半個月之久,大家一定要點在看和分享呀,讓我看到輸出是有價值的

相關焦點

  • 乾貨:18 張思維導圖,後端技術學習路線長這樣!
    作者 | LemonCoder頭圖 | CSDN下載自視覺中國思來想去,學習方向和路線很重要。比起具體的技術細節,可複製的經驗、清晰的學習路線,是大部分人更加需要的東西。話不多說,直接上後端技術學習路線思維導圖框架:圖中的每一個節點我都做了細分,在後面章節逐個展開介紹。
  • 所有的程式語言知識,都包含在這100張思維導圖裡了
    這個號稱東半球最全最酷的編程學習項目,不僅容納了30萬字的算法圖解題典、100張各種程式語言的思維導圖、1000本編程電子書,還有100篇大廠的面經。無論你是想收穫大廠offer,還是不圖名利、遍歷編程的各種算法語言精髓,這裡都能找到適合你的讀物。最關鍵的是,0門檻。
  • 程式設計師學習路線:developer-roadmap
    一、前端學習路線    下圖就是這個倉庫關於前端的學習路線的中文翻譯版本。有了這個學習路線之後,學習前端的話再也不怕不知道學啥了!二、後端學習路線    下圖就是這個倉庫關於後端的學習路線,基本涵蓋了一個後端程式設計師必須要掌握的一些知識,非常直觀!你可以將其作為自己後端學習之路的重要參考。
  • 初中1600詞彙,這200張思維導圖全搞定
    初中1600詞彙,僅需200張思維導圖。現在很多課外培訓學校把大多數的時間放在語法的講解和細枝末節上,補習一年成績都不上漲,原因在於,從應試來說,中高考語法不到20分,單詞是基礎,閱讀是關鍵,得單詞者得閱讀,得閱讀者得高分,花費大量的時間來學習的一定是單詞。
  • 奇速英語思維導圖:24個故事+200張思維導圖,探索單詞記憶奧秘
    思維導圖24個故事記單詞小學:100張思維導圖初中:200張思維導圖高中:一本小說24個故事什麼是思維導圖記單詞思維導圖運用圖文並重的技巧,把各級主題的關係用相互隸屬與相關的層級圖表現出來,把主題關鍵詞與圖像、顏色等建立記憶連結。思維導圖充分運用左右腦的機能,利用記憶、閱讀、思維的規律,協助人們在科學與藝術、邏輯與想像之間平衡發展,從而開啟人類大腦的無限潛能。思維導圖因此具有人類思維的強大功能。
  • 初中1600詞彙,這200張思維導圖全搞定
    初中1600詞彙,僅需200張思維導圖。現在很多課外培訓學校把大多數的時間放在語法的講解和細枝末節上,補習一年成績都不上漲,原因在於,從應試來說,中高考語法不到20分,單詞是基礎,閱讀是關鍵,得單詞者得閱讀,得閱讀者得高分,花費大量的時間來學習的一定是單詞。
  • 「200張思維導圖+24個故事」:初中+高中英語6年單詞全部學完!
    room(左偏旁)+(右部首)近乎所有單詞都是偏旁+部首構成中式思維記憶單詞:孩子更習慣也更喜歡漢字孩子掌握熟練用中式思維記憶更加高效《思維導圖記憶小學800詞彙》:100張思維導圖《思維導圖記憶初中1600詞彙》:200張思維導圖《24個故事一本小說記憶高中3500詞彙》看看他們的筆記學習完思維導圖後單詞背記效率提升了
  • 前端開發,測試,後端,該如何選擇?
    如果你能堅持一個月學習前端如何入門,並不覺得有多麼枯燥無味,那麼此時,我才建議你去報名培訓班,系統地跟著老師學一遍。不過培訓班也只是「師傅引進門,修行在個人」。一切都靠自己,前端這條路能走多遠,全靠自己持續的學習能力和一腔熱愛。web前端開發,它的學習路線相對比較平緩,入門容易,但精通較難。
  • 名師將古今中外的名家名作,匯總成19張思維導圖,快來收藏吧!
    本文是【語文課外綜合知識與思維導圖】專欄第3節,古今中外名家名作思維導圖。名家名作是中小學生重要的文學知識之一,這些名家大都已經化作塵埃,但他們的優秀作品,卻璀璨如星,經久流傳,影響了一代又一代的人,值得我們去學習和品讀。老師從近50頁的書籍裡,將中國古代、現在、當代,及世界上有影響力的名人名作總結出來,匯成19張思維導圖。家有中小學生,給孩子收藏起來,豐富文學知識。
  • 思維導圖完整手冊:5種思維導圖學習法,讓孩子的學習簡單又高效
    「思維導圖」就是我見過的太陽,它讓我的工作和生活,清潔、明朗,有條有理。大概是在5年前,「思維導圖」還是一個很新的概念,我就購買了一本東尼·博贊的《思維導圖完整手冊》,至今受益匪淺:在學習、工作、整理出行裝備,甚至是整理情緒等等方面,都十分有效。那麼,今天我們就一起來聊聊關於「思維導圖」的那些事。
  • 思維導圖完整手冊:5種思維導圖學習法,讓孩子的學習簡單又高效
    「思維導圖」就是我見過的太陽,它讓我的工作和生活,清潔、明朗,有條有理。大概是在5年前,「思維導圖」還是一個很新的概念,我就購買了一本東尼·博贊的《思維導圖完整手冊》,至今受益匪淺:在學習、工作、整理出行裝備,甚至是整理情緒等等方面,都十分有效。那麼,今天我們就一起來聊聊關於「思維導圖」的那些事。
  • C++ & Linux 後端進階之:學習開源項目
    ❝觀前提醒,小屏手機橫屏有助於提升閱讀體驗❞在前文【C++ & Linux後端進BAT的學習路線】中,講述了C++後端的學習路線。他們的處理流程大致如下:有的回調函數鏈可能會很長,難以理解,這個時候就需要gdb幫你理清這個鏈路。因此,在學習開源庫之前,先學習下gdb調試。有時間,我也再來寫個使用gdb幫助閱讀redis的文檔,或者相應的視頻。如果libuv熟悉了,可以基於libuv寫個webserver也不錯。
  • 「鯤哥線上課」四季全集 參上
    長按擦亮全四季的阿拉丁神燈👇👇👇
  • 利用思維導圖學習數學
    利用思維導圖這一模式整理數學知識非常地方便。通過一張圖,將一個單元的基本概念理清楚,進行有效記憶,有利於知識地內化,進而提高解題能力。在小學數學中,建議家長和學生把幾何知識用思維導圖進行整理。例如:長方形和正方形是學生在小學階段第一次去學習圖形的周長和面積計算。
  • 美國的素質教育長啥樣?從「思維導圖」中可見一斑
    她分享的內容中,主要包括了:美式教育、思維導圖和英語學習等等。真實的美式教育是什麼樣的?美式教育是否就是素質教育?和許多家長一樣,我也是帶著這樣的疑問,關注了她的社交帳號。許多人都知道,美國的平民教育和精英教育是截然不同的。
  • 圖解:數據結構中的6種「樹」,檸檬問你心中有數嗎?
    今天就帶大家一起學習下,數據結構中的各種「樹」,這也是面試中經常考察的內容,手撕二叉樹是常規套路,對候選人也很有區分度,學完這篇文章,相信大家都會心中有「樹」了。從樹說起什麼是樹?現實中的樹大家都見過,在數據結構中也有樹,此樹非彼樹,不過數據結構的樹和現實中的樹在形態上確實有點相像。
  • 64張思維導圖,聯想串記高考必考重點詞彙!
    新東方網>英語>英語學習>高中英語>正文64張思維導圖,聯想串記高考必考重點詞彙! 2020-03-09 13:52 來源:奇速英語 作者:   單詞,猶如構建英語這座大廈的磚頭塊兒,其重要程度可想而知;但,單詞關,又恰恰是橫亙在相當多學生英語學習前的一座大山。
  • 神奇傑克思維導圖微課(第三期),開班了!
    21天讓你深刻體會思維導圖發明者,東尼.博贊老爺子說的那一句話:「Develop your mind, better your life.」21天的學習,除了三次線上微課,其他的學習形式是什麼樣子的?然後每一堂課,除了課上練習外,因為課上每次只有三、五分鐘就要畫完一張思維導圖,課後還要做好完整的一幅思維導圖,每一周課後也會有課後作業,會是每一周的上課前交,老師也會點評。21天的微課,也有計分競賽制度,強化學員的學習動機,最後前三名將會獲得價值近200元的東尼·博贊的整套書籍。
  • 「思維導圖」XMind_ZEN_2020全平臺版本
    今天給大家分享的是一款思維導圖軟體 -- Xmind ZEN。是xmind推出的一款外觀非常清爽,設計上更符合 macOS 的設計範式的思維導圖,比起 pro 版本的 xmind,上手難度更低,新手也很容易搞清楚怎麼用。同時,XMind ZEN 採用了全新 SNOWBRUSH 2.0 繪圖引擎,官方宣稱此引擎經過3年的開發,他們 100% 重寫了思維導圖的引擎,著眼在未來的黑科技上,提升了思維導圖的展示效果,豐富了繪圖的元素。
  • 退休班主任直言:初中數學掌握這15張思維導圖,再差考試也120+!
    退休班主任直言:初中數學掌握這15張思維導圖,再差考試也120+!馬上暑假就要結束,同學們即將上升到一個全新的年級繼續學習。尤其是馬上面臨初三的學生們,再經過一年的學習和複習就要面臨人生中最為重要的中考。雖然時間上看上去還有一年的時間,可是細細一算。學習的時間就只有短短的7個月的時間。所以同學們需要從現在開始對所有的科目開始複習,10份開學之後初三年級會有新的課程加入,所以學習的內容增多,各科的學習時間就會更少,所以同學們為了明年6月份的中考,需要從現在努力學習複習各科的知識點,爭取在明年的中考中拔得頭籌。