<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          "C/C++后端開發(fā)"這張圖,爆了!

          共 4583字,需瀏覽 10分鐘

           ·

          2021-09-14 19:11

          大家好,我是唐唐。

          今天先給大家看C/C++后端開發(fā)的,長文預(yù)警,發(fā)車~

          路線圖

          開局一張圖,內(nèi)容全靠編,沒錯,咱們先來看一張全局圖,先從總體上有個宏觀的認(rèn)識。

          這張圖有點大,由于微信對圖片壓縮的厲害,看不清楚沒關(guān)系,下面會分割各種小圖講解

          我將學(xué)習(xí)路線分為基礎(chǔ)、進階拓展三大部分,每一部分又分為兩個階段,總共分為了六個階段來進行。

          第一階段:基礎(chǔ)

          在我看來,相對來說,Python、Java這類上層語言是面向業(yè)務(wù)編程,而C/C++這類底層語言更多是面向計算機編程,所以第一個基礎(chǔ)階段需要補充一些計算機的基礎(chǔ)知識,這個階段我的建議是這樣的:

          計算機體系架構(gòu)基礎(chǔ)

          首先,初學(xué)者需要了解計算機的基本常識和最基本的工作原理,像圖靈機、馮諾伊曼體系架構(gòu),就屬于這個范疇。

          接著,還需要了解現(xiàn)代計算機的一些基本要素,比如計算機總線系統(tǒng)、數(shù)據(jù)信息的存儲與表示,常見的CPU體系架構(gòu)與指令集、程序的基本概念、編程語言的發(fā)展歷史,類型等等。

          這一部分的知識,可以參考的書目有:

          • 《計算機組成原理》
          • 《計算機存儲與外設(shè)》
          • 《深入理解計算機系統(tǒng)》

          當(dāng)然,上面這些書的內(nèi)容其實有很多,一開始不用太過深入,不用想著把書看完,那是一個巨大的工作量,對新手來說也是不現(xiàn)實的,一開始了解我上面提到的內(nèi)容就可以了。

          Linux基礎(chǔ)

          上面是偏理論的知識,在這個小節(jié),初學(xué)者可以開始來學(xué)習(xí)使用Linux了,做C/C++后端開發(fā),那必然是要經(jīng)常與Linux打交道的。

          對新手而言,這個小節(jié),主要是學(xué)習(xí)基本使用為主,旨在從熟悉的Windows切換到陌生的Linux系統(tǒng),大家可以使用虛擬機軟件在里面安裝Ubuntu、CentOS來學(xué)習(xí)。需要學(xué)習(xí)的有了解下Linux基本的操作,常用的命令,權(quán)限管理基本概念,到后面可以使用命令開發(fā)一些簡單的shell腳本等等。

          這一部分的知識,可以參考的書目有:

          • 《鳥哥的linux私房菜》

          C語言基礎(chǔ)

          接下來,咱們可以正式來接觸C語言編程了。

          C語言是計算機編程的基礎(chǔ),雖然語法本身的知識點并不多,但想要學(xué)好,光學(xué)會語言本身遠(yuǎn)遠(yuǎn)不夠,其背后涉及的復(fù)雜龐大的計算機系統(tǒng)知識才是大頭。在這一個小節(jié),咱們只是邁出萬里長征第一步,掌握基本的語法知識,能順利的編寫一些簡單程序即可。

          這一部分的知識,可以參考的書目有:

          • 《C與指針》

          計算機網(wǎng)絡(luò)基礎(chǔ)

          第一階段的最后一部分,是時候來學(xué)習(xí)一些計算機網(wǎng)絡(luò)的知識。

          作為基礎(chǔ)階段,這一小節(jié)主要從宏觀上學(xué)習(xí)計算機網(wǎng)絡(luò),而不是死扣某一個協(xié)議的某些字段意義。

          首先從局域網(wǎng)出發(fā),了解計算機通信的基本網(wǎng)絡(luò)——以太網(wǎng),局域網(wǎng)內(nèi)是如何通信的?集線器、交換機有什么區(qū)別?MAC地址、IP地址、子網(wǎng)、子網(wǎng)掩碼分別是做什么用的?

          隨后引出更大的廣域網(wǎng)、互聯(lián)網(wǎng),什么是網(wǎng)絡(luò)通信協(xié)議,通信協(xié)議分層的問題,通過七層和四層模型快速建立起計算機網(wǎng)絡(luò)的基礎(chǔ)概念,各層協(xié)議的作用,分別有哪些協(xié)議,這些協(xié)議在當(dāng)今的互聯(lián)網(wǎng)中具體是怎么應(yīng)用的。

          這一部分的知識,可以參考的書目有:

          • 《計算機網(wǎng)絡(luò)-自頂向下法》
          • 《TCP/IP協(xié)議詳解·卷一》

          第一階段的學(xué)習(xí)到此為止,新手通過上面幾個基礎(chǔ)課程,開始建立起對計算機和編程的初步認(rèn)知。

          第二階段:基礎(chǔ)

          第二階段還是打基礎(chǔ),這個階段中,一方面在第一階段之上,進行一些提升,另一方面是繼續(xù)擴展學(xué)習(xí)需要掌握的基礎(chǔ)課程。

          C++基礎(chǔ)

          有了C語言的基礎(chǔ),這個階段開始可以進入C++的學(xué)習(xí)。

          基本上所有人都知道,C++是一門很復(fù)雜的課程,感覺永遠(yuǎn)也無法全部掌握。作為基礎(chǔ)階段,這一小節(jié)主要的目標(biāo)是掌握C++最基本的面向?qū)ο缶幊碳纯伞?/p>

          面向?qū)ο蟮膸讉€基本概念,繼承、封裝、多態(tài)、重載,以及友元、虛函數(shù)、引用與指針的區(qū)別,RAII編程技法,STL經(jīng)典容器和迭代器的使用,到這里,能夠編寫基本的C++程序,能看懂C++項目源碼就可。

          這一部分的知識,可以參考的書目有:

          • 《C++ Primer》

          數(shù)據(jù)結(jié)構(gòu)與算法

          C和C++的基礎(chǔ)具備了,是時候來接觸一下數(shù)據(jù)結(jié)構(gòu)與算法了。

          這部分內(nèi)容初學(xué)者可能覺得有些枯燥,但千萬要頂住,這是每一個程序員必須翻過的一座山。

          常用的數(shù)據(jù)結(jié)構(gòu)都在下面的圖中了,首先通過學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)的基本定義,從理論上了解每個數(shù)據(jù)結(jié)構(gòu)的應(yīng)用場景,各自的特點。

          接著,可以看一下??途W(wǎng)上的《劍指Offer》和LeetCode,通過刷題來掌握常見數(shù)據(jù)結(jié)構(gòu)的使用。

          這一部分的知識,可以參考的書目有:

          • 《大話數(shù)據(jù)結(jié)構(gòu)》
          • 《數(shù)據(jù)結(jié)構(gòu)與算法分析》

          編譯原理

          代碼是如何變成CPU執(zhí)行的指令的?可執(zhí)行文件是如何構(gòu)建的?這類問題需要學(xué)習(xí)編譯原理才能了解,做C/C++開發(fā)多少需要了解一些編譯原理的知識。

          數(shù)據(jù)庫基礎(chǔ)

          基礎(chǔ)階段的最后一部分,可以來接觸一些數(shù)據(jù)庫的基礎(chǔ)知識了。

          這個階段主要學(xué)一些理論知識,重點掌握庫、表、索引等概念,然后學(xué)習(xí)SQL的編寫,學(xué)會增刪改查數(shù)據(jù)。暫時不用編程來操作數(shù)據(jù)庫。

          這一部分的知識,可以參考的書目有:

          • 《數(shù)據(jù)庫系統(tǒng)概念》

          第三階段:進階

          經(jīng)過前面兩個階段,這個時候你已經(jīng)具備基本的編程知識,計算機系統(tǒng)、網(wǎng)絡(luò)、數(shù)據(jù)庫、編程語言、數(shù)據(jù)結(jié)構(gòu)與算法都打過交道,可以開始比較正式的項目開發(fā)了。

          接下來,開始進入第三個階段:進階。在這個階段,主要是對之前學(xué)習(xí)的內(nèi)容進行提升,學(xué)習(xí)的內(nèi)容將更加深入。

          操作系統(tǒng)基礎(chǔ)

          是時候開始和操作系統(tǒng)見面了,有了前面編程基礎(chǔ)的鋪墊,可以思考我們編寫的程序,操作系統(tǒng)是如何來管理運行的。

          進程與線程是什么、進程的地址空間布局是什么樣的、虛擬內(nèi)存是什么東西,內(nèi)核態(tài)與用戶態(tài)又是什么意思,操作系統(tǒng)又是如何如何處理系統(tǒng)調(diào)用、中斷與異常的,這些知識都藏在操作系統(tǒng)這門課中。

          這一部分的知識,可以參考的書目有:

          • 《現(xiàn)代操作系統(tǒng)》
          • 《Linux內(nèi)核設(shè)計與實現(xiàn)》
          • 《Windows內(nèi)核原理與實現(xiàn)》

          C++進階

          前面我們學(xué)習(xí)了C++基礎(chǔ),但那個時候,還只是停留在入門級,關(guān)于C++的高階知識,在進階階段該來安排一下了。

          把上面這部分內(nèi)容掌握了,C++這門語言,你基本就上路了。

          這一部分的知識,可以參考的書目有:

          • 《C++沉思錄》
          • 《深度探索C++對象模型》
          • 《Effective C++》

          線程堆棧

          學(xué)C/C++,光學(xué)語言不行,還得知道程序執(zhí)行的底層原理。這一小節(jié)的內(nèi)容,可以幫助你深入了解代碼和數(shù)據(jù)在內(nèi)存中的執(zhí)行過程和原理,對理解計算機工作原理非常有幫助。

          調(diào)試技術(shù)

          一個優(yōu)秀的程序員,一定也是一個調(diào)試高手。調(diào)試技術(shù)是每個程序員必須掌握的一項技能,這里的進階內(nèi)容,建議學(xué)習(xí)一下軟件調(diào)試的原理,操作系統(tǒng)和CPU為調(diào)試提供的技術(shù)支持,GDB常用命令需要掌握,特定環(huán)境下排查問題非常管用。

          如果有精力,可以簡單了解一下匯編語言,在調(diào)試時候,如果能看懂匯編指令,也是大有裨益。

          這一部分的知識,可以參考的書目有:

          • 《軟件調(diào)試》
          • 《軟件調(diào)試的藝術(shù)》
          • 《匯編語言》

          數(shù)據(jù)結(jié)構(gòu)與算法進階

          基礎(chǔ)階段接觸了常用的數(shù)據(jù)結(jié)構(gòu)與算法,在進階階段將接觸一些更加復(fù)雜的算法,也是各大公司面試中出鏡率極高的內(nèi)容。

          這一部分的知識,可以參考的書目有:

          • 《啊哈!算法》
          • 《算法導(dǎo)論》

          第四階段:進階

          第四階段,開始全面提升編程能力,這部分的內(nèi)容都是偏實戰(zhàn)化的,也是跟操作系統(tǒng)密切相關(guān)的部分,一方面需要繼續(xù)補充學(xué)習(xí)操作系統(tǒng)相關(guān)的編程知識,另一方面需要通過大量編程和項目實際開發(fā)經(jīng)歷來錘煉提升。

          網(wǎng)絡(luò)編程

          網(wǎng)絡(luò)編程,socket編程,各種網(wǎng)絡(luò)IO模型的區(qū)別與底層原理,尤其是epoll模型中的各種細(xì)節(jié)問題,需要摸得非常熟悉。

          多進程與多線程編程

          多線程與多進程技術(shù),Linux上的fork機制、pthread線程庫、C++的thread庫、線程同步技術(shù),這都需要在實際編程中去掌握學(xué)習(xí)。

          進程間通信

          多進程必然涉及進程間通信,進程間通信常用的方式有哪些?各自的原理是什么?這也是面試中經(jīng)常出現(xiàn)的考題。

          RPC與序列化技術(shù)

          網(wǎng)絡(luò)編程和多進程通信之中常用RPC和序列化技術(shù),業(yè)界常用的幾大RPC框架和序列化技術(shù)都可以學(xué)習(xí)使用下,比較它們的原理異同,各自的優(yōu)劣勢等等。

          計算機網(wǎng)絡(luò)進階

          學(xué)到這個階段,對計算機網(wǎng)絡(luò)的學(xué)習(xí)需要進一步加深。在之前的基礎(chǔ)之上,更加專注一些重點協(xié)議的實現(xiàn)原理,關(guān)鍵的通信過程,比如TCP、HTTP等這些重點協(xié)議是需要重點研究的對象。

          在這個階段,你還需要學(xué)習(xí)使用抓包軟件抓取網(wǎng)絡(luò)數(shù)據(jù)包,實際的觀察學(xué)習(xí)網(wǎng)絡(luò)中的數(shù)據(jù),加深對網(wǎng)絡(luò)通信的理解和認(rèn)知。

          這一部分的知識,可以參考的書目有:

          • 《計算機網(wǎng)絡(luò)-自頂向下法》
          • 《TCP/IP協(xié)議詳解·卷一》

          第五階段:拓展

          完成前面四個階段,你完全可以開始開發(fā)一些更大型的項目了。在第五階段,主要是拓展學(xué)習(xí)一些與后端開發(fā)相關(guān)的知識。

          設(shè)計模式

          開始接觸大型項目開發(fā)后,建議補充學(xué)習(xí)一下設(shè)計模式的知識,有助于提升編程架構(gòu)能力,寫出更加優(yōu)秀的代碼。

          課本上的設(shè)計模式有二十多種,但精力有限的情況下,挑選一些主要經(jīng)常打交道的即可。

          這一部分的知識,可以參考的書目有:

          • 《設(shè)計模式:可復(fù)用面向?qū)ο筌浖幕A(chǔ)》
          • 《Head First 設(shè)計模式》

          網(wǎng)絡(luò)安全

          做C/C++編程,建議補充學(xué)習(xí)一些跟網(wǎng)絡(luò)安全相關(guān)的知識,加解密技術(shù)、數(shù)字簽名技術(shù)、常見的軟件漏洞原理等等,拓展一下相關(guān)的知識面。

          計算機底層技術(shù)

          C/C++因為是比較底層的語言,經(jīng)常需要與CPU、操作系統(tǒng)這些打交道,經(jīng)常開發(fā)一些系統(tǒng)底層程序,所以了解學(xué)習(xí)一些計算機底層知識,對自己計算機系統(tǒng)知識的構(gòu)建非常有幫助,也對將來在工作中遇到實際問題能提供一些更加底層的視角去分析看待問題。

          這一部分的知識,可以參考的書目有:

          • 《計算機組成原理》
          • 《計算機存儲與外設(shè)》
          • 《深入理解計算機系統(tǒng)》

          第六階段:拓展

          這個階段,再來學(xué)習(xí)一些C/C++后端開發(fā)技術(shù)棧中經(jīng)常打交道的第三方組件,比如數(shù)據(jù)庫、緩存系統(tǒng)等等。不僅僅學(xué)會使用,還要掌握了解它們的底層原理,這個時候,前面所學(xué)的計算機底層知識在這里就能派上用場了。

          MySQL

          MySQL是互聯(lián)網(wǎng)中應(yīng)用非常多的數(shù)據(jù)庫系統(tǒng),在基礎(chǔ)階段只學(xué)習(xí)了數(shù)據(jù)庫的理論知識和SQL的用法。

          到這個階段,需要更加深入,研究MySQL的底層原理,索引實現(xiàn)原理、事務(wù)實現(xiàn)原理、鎖機制等等,不僅能用,還要能在開發(fā)大型項目遇到數(shù)據(jù)庫性能問題時,了解原理更好的解決問題。

          這一部分的知識,可以參考的書目有:

          • 《高性能MySQL》
          • 《MySQL技術(shù)內(nèi)幕·InnoDB存儲引擎》
          • 《MySQL必知必會》

          Redis

          Redis作為MySQL的好搭檔,緩存系統(tǒng)的主流選擇,其重要性越來越強了。

          除了基本的使用,還需要學(xué)習(xí)一下Redis背后的原理,內(nèi)存數(shù)據(jù)結(jié)構(gòu)如何實現(xiàn),持久化、高可用、集群擴展、分布式鎖如何實現(xiàn)等等問題都值得研究。一方面Redis作為非常優(yōu)秀的開源軟件,其本身就非常值得借鑒學(xué)習(xí),另一方面學(xué)習(xí)背后的實現(xiàn)原理,對實際工作中解決問題也有非常大的幫助。

          這一部分的知識,可以參考的書目有:

          • 《Redis設(shè)計與實現(xiàn)》

          其他第三方組件

          除了MySQL和Redis,其他常見的后端開發(fā)軟件有下面這些,有時間也建議學(xué)習(xí)下,一邊學(xué)使用,一邊學(xué)原理:

          總結(jié)

          以上就是做C/C++后端開發(fā),從新手入門到工作所需要學(xué)習(xí)的內(nèi)容整理了,可能并不全面,但掌握以上這些內(nèi)容足以勝任大部分的崗位要求了。

          瀏覽 69
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  www.三区 | 欧美日韩国产一区 | 黄片大全 byrwqs41.xyz | 美女操逼在线观看的 | 亚洲中文字幕在线免费视频 |