當(dāng)前位置:首頁(yè) > 公眾號(hào)精選 > C語(yǔ)言與CPP編程
[導(dǎo)讀]校招形勢(shì) 在去年結(jié)束的秋季招聘中,后臺(tái)開發(fā)或服務(wù)器開發(fā)的崗位需求一度火熱,甚至超過(guò)了算法崗。不少同學(xué)從諸神黃昏的算法崗戰(zhàn)場(chǎng)上退下,轉(zhuǎn)向更偏向工程能力的后臺(tái)開發(fā)崗,從而造成后臺(tái)開發(fā)崗位競(jìng)爭(zhēng)的大爆發(fā)。 后臺(tái)開發(fā)工程師主流使用的編程語(yǔ)言有C++、Java

校招形勢(shì)

在去年結(jié)束的秋季招聘中,后臺(tái)開發(fā)或服務(wù)器開發(fā)的崗位需求一度火熱,甚至超過(guò)了算法崗。不少同學(xué)從諸神黃昏的算法崗戰(zhàn)場(chǎng)上退下,轉(zhuǎn)向更偏向工程能力的后臺(tái)開發(fā)崗,從而造成后臺(tái)開發(fā)崗位競(jìng)爭(zhēng)的大爆發(fā)。


后臺(tái)開發(fā)工程師主流使用的編程語(yǔ)言有C++、Java、PHP以及目前慢慢流行的Golang等。本文就將以C++的角度,講講如何學(xué)習(xí)和準(zhǔn)備后臺(tái)開發(fā)的崗位。


一、語(yǔ)言基礎(chǔ)


無(wú)論是C++開發(fā)還是Java開發(fā),對(duì)于一個(gè)碼農(nóng)而言,最重要的就是對(duì)于編程語(yǔ)言的熟悉。同樣,無(wú)論從事哪種類型的崗位,首當(dāng)其沖的就是要掌握好語(yǔ)言基礎(chǔ)。


C++是一門博大精深的編程語(yǔ)言,不僅擁有繼承于C語(yǔ)言的過(guò)程化程序設(shè)計(jì)思想,還包含有面對(duì)對(duì)象(OOP)的設(shè)計(jì)理念。強(qiáng)大而又復(fù)雜。相對(duì)來(lái)說(shuō),C++的學(xué)習(xí)成本較高,語(yǔ)言里面的坑較多。語(yǔ)言基礎(chǔ)的學(xué)習(xí)路線如下:


1 語(yǔ)法基礎(chǔ)

重點(diǎn)掌握:(務(wù)必熟悉底層機(jī)制原理)

  • 指針和引用的概念

  • 指針與內(nèi)存關(guān)系

  • 程序編譯過(guò)程

  • static、const、#define的用法和區(qū)別

  • C和C++區(qū)別

  • 內(nèi)存模型

  • 內(nèi)存中的棧和堆分配


2 面對(duì)對(duì)象基礎(chǔ)

(務(wù)必熟悉底層機(jī)制原理)

  • 面向?qū)ο罄斫?/p>

  • 析構(gòu)函數(shù)

  • 構(gòu)造函數(shù)

  • 拷貝構(gòu)造

  • 多態(tài)

  • 純虛函數(shù)和虛函數(shù)

  • 虛函數(shù)實(shí)現(xiàn)機(jī)制

  • 虛函數(shù)表

  • 訪問(wèn)限定符 public、private、protected

  • 繼承原理、虛繼承、菱形繼承

  • 靜態(tài)綁定和動(dòng)態(tài)綁定

  • new/delete和malloc/free

  • 重載、重寫和隱藏


3 語(yǔ)法進(jìn)階

(務(wù)必熟悉底層機(jī)制原理)

  • 智能指針

  • 左值、右值引用和move語(yǔ)義

  • 類型轉(zhuǎn)換方式

  • 常用的設(shè)計(jì)模式

  • 線程安全的單例模式

  • 內(nèi)存溢出和內(nèi)存泄漏

  • C++11新特性

  • 靜態(tài)鏈接庫(kù)和動(dòng)態(tài)鏈接庫(kù)

 

4 STL標(biāo)準(zhǔn)模板庫(kù)

(務(wù)必能進(jìn)行源碼剖析)

  • 迭代器、空間配置器理解

  • 常用容器特點(diǎn)、用法以及底層實(shí)現(xiàn)vector、list、deque、set、map、unorderedmap

 

5 推薦書籍

  • 《C++Primer》可作為工具書,隨手查閱

  • 《EffectiveC++》深入了解C++的程序設(shè)計(jì)規(guī)范

  • 《STL源碼剖析》剖析STL的源碼底層,非常具有學(xué)習(xí)價(jià)值

  • 有精力還可以看《深度探索C++對(duì)象模型》《more EffecticeC++》

 

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


對(duì)于普通人而言,算法的學(xué)習(xí)最重要的是能夠形成基本的算法思維,懂得從程序設(shè)計(jì)的角度對(duì)高重復(fù)性的操作做優(yōu)化。這其中基本算法思想的掌握和常用數(shù)據(jù)結(jié)構(gòu)的理解是必不可少。這方面的學(xué)習(xí)更傾向于多看多想多練。

 

1 常見算法類型

(務(wù)必能夠手撕代碼)

  • 排序算法(冒泡、插入、選擇、快排、希爾、堆排、歸并、桶排、基數(shù)、計(jì)數(shù))、字符串操作、數(shù)組操作、遞歸、回溯、分治、動(dòng)態(tài)規(guī)劃等

  • 如何準(zhǔn)備算法可見歷史文章

    進(jìn)入BAT和字節(jié)跳動(dòng)最難的一關(guān),手撕代碼!

 

2 常用數(shù)據(jù)結(jié)構(gòu)

(務(wù)必熟悉底層原理和實(shí)現(xiàn))

  • 鏈表、棧、隊(duì)列、樹(二叉樹、平衡二叉樹、紅黑樹、B樹、B+樹、哈夫曼樹、字典樹)、跳表、圖

 

3 推薦書籍

  • 《大話數(shù)據(jù)結(jié)構(gòu)》適合入門學(xué)習(xí)

  • 《劍指offer》必刷66題

  • 《算法導(dǎo)論》盡量看,能啃完就是大神

 

三、計(jì)算機(jī)網(wǎng)絡(luò)


網(wǎng)絡(luò)相關(guān)的東西不是很多,關(guān)鍵在于對(duì)常見網(wǎng)絡(luò)協(xié)議簇的認(rèn)識(shí)和理解,以及一些常規(guī)操作底層設(shè)計(jì)實(shí)現(xiàn)的剖析。比如:


        | 輸入www.baidu.com會(huì)發(fā)生什么

        | 微信掃描登錄會(huì)發(fā)生什么


1 重點(diǎn)掌握知識(shí)點(diǎn)

  • OSI七層模型

  • TCP/IP五層模型

  • TCP/IP協(xié)議總結(jié)

  • TCP、UDP區(qū)別

  • TCP三次握手、四次揮手

  • TCP狀態(tài)轉(zhuǎn)換

  • TCP狀態(tài)中TIME_WAIT

  • TCP連接建立需要為什么不是兩次握手

  • TCP第三次握手失敗會(huì)出現(xiàn)什么

  • TCP長(zhǎng)連接和短鏈接及優(yōu)缺點(diǎn)

  • TCP擁塞控制-慢啟動(dòng)、擁塞避免、快重傳、快啟動(dòng)

  • TCP如何保證可靠性傳輸

  • TCP如何解決粘包、拆包問(wèn)題

  • TCP為什么可靠

  • UDP如何實(shí)現(xiàn)TCP可靠傳輸

  • IP地址和子網(wǎng)掩碼

  • ARP解析過(guò)程

  • DNS原理

  • HTTP狀態(tài)碼

  • HTTP1.0、HTTP1.1、HTTP2.0區(qū)別

  • HTTP和HTTPS區(qū)別

  • HTTPS加密過(guò)程

  • 非對(duì)稱加密和對(duì)稱加密算法

  • Nagle算法

 

2 推薦書籍

  • 《計(jì)算機(jī)網(wǎng)絡(luò)自頂向下方法》教材書,可放手邊查閱

  • 《TCP/IP詳解》重點(diǎn)了解TCP、IP、UDP協(xié)議實(shí)現(xiàn)

 

四、數(shù)據(jù)庫(kù)


數(shù)據(jù)庫(kù)的一般使用其實(shí)不難,但是對(duì)于不同數(shù)據(jù)庫(kù)的特性、實(shí)現(xiàn)機(jī)制、應(yīng)用場(chǎng)景和性能優(yōu)化方面卻能夠難倒一大批面試者。同樣數(shù)據(jù)庫(kù)本身也是非常好的項(xiàng)目實(shí)例,往往能夠從中學(xué)習(xí)到許多程序設(shè)計(jì)的思想和模式。因此,對(duì)數(shù)據(jù)庫(kù)要明白怎么用、為什么用、怎么用得好這幾個(gè)方面的問(wèn)題。


1 重點(diǎn)掌握

  • 數(shù)據(jù)庫(kù)類別

  • 關(guān)系型數(shù)據(jù)庫(kù)和非關(guān)系型數(shù)據(jù)庫(kù)區(qū)別

        MySQL:

  • SQL常見語(yǔ)句

  • MySQL內(nèi)鏈接,外鏈接(左鏈接、右鏈接、全鏈接)

  • MySQL索引類型和原理

  • MySQL事務(wù)實(shí)現(xiàn)原理ACID

  • MySQL數(shù)據(jù)存儲(chǔ)引擎

  • MySQL主從復(fù)制原理、作用和實(shí)現(xiàn)

  • MySQL日記系統(tǒng)redo log、binlog、undo log

  • MVCC實(shí)現(xiàn)原理

  • Sql優(yōu)化思路

  • 范式理論

  • 數(shù)據(jù)庫(kù)高并發(fā)解決方法

        Redis:    

  • Redis支持的數(shù)據(jù)類型

  • Redis持久化

  • Redis 架構(gòu)模式

  • 主從復(fù)制

  • 一致性哈希算法

 

2 推薦書籍

  • 《高性能 Mysql》能夠加深對(duì)Mysql的理解和使用

  • 《Redis設(shè)計(jì)與實(shí)現(xiàn)》比較全面的書,可以多看看


 

五、操作系統(tǒng)


操作系統(tǒng)的問(wèn)題會(huì)集中在進(jìn)程和線程,但是這一類的問(wèn)題往往會(huì)以開放題的形式出現(xiàn)。主要考察的是對(duì)操作系統(tǒng)組件以及運(yùn)行過(guò)程的理解。比如:


    | 開機(jī)登錄系統(tǒng)發(fā)生了什么?

    | 復(fù)制粘貼是怎樣操作的?

 

1 重點(diǎn)掌握

  • 物理內(nèi)存和虛擬內(nèi)存

  • 緩存IO和直接IO

  • 作業(yè)調(diào)度算法

  • 線程和進(jìn)程

  • 進(jìn)程和線程的調(diào)度

  • 線程的創(chuàng)建和結(jié)束

  • 線程狀態(tài)

  • 線程間通信與線程同步機(jī)制

  • 互斥鎖和信號(hào)量

  • 線程池

  • 消費(fèi)者和生產(chǎn)者

  • 死鎖

  • 并發(fā)和并行

 

2 推薦書籍

  • 《深入理解計(jì)算機(jī)系統(tǒng)》很全面的書,這一本就夠用了


六、Linux系統(tǒng)


對(duì)Linux系統(tǒng)的熟練使用是后臺(tái)開發(fā)/服務(wù)器開發(fā)的必備技能點(diǎn)。這年頭,不會(huì)幾個(gè)Linux指令都不好意思說(shuō)自己是敲代碼的。(客戶端和前端的同學(xué)表示不服)不管怎樣,對(duì)于Linux系統(tǒng)的掌握無(wú)論在哪個(gè)方向上,都會(huì)有用武之地的。


1 Linux系統(tǒng)操作和命令

  • top命令

  • ps命令

  • netstat命令

  • awk命令

  • find命令

  • grep命令

  • wc命令

  • sed命令

  • head和tail命令

  • 正則表達(dá)式

  • 如何查找出現(xiàn)頻率最高的100個(gè)IP地址

  • linux如何統(tǒng)計(jì)文件中某個(gè)字符串出現(xiàn)的頻率

  • linux啟動(dòng)的第一個(gè)進(jìn)程

  • linux查看端口占用

  • linux查看CPU和內(nèi)存使用

  • Linux查看系統(tǒng)負(fù)載命令

  • Linux調(diào)試程序

  • Linux硬鏈接和軟連接

  • core dump

  • cmake和makefile

  • Shell腳本基本語(yǔ)法和使用

 

2 推薦書籍

  • 《鳥哥私房菜》入門足夠了,多敲多寫才能更快掌握

 

七、Linux網(wǎng)絡(luò)編程


后臺(tái)開發(fā)是離不開網(wǎng)絡(luò)編程的,甚至簡(jiǎn)單來(lái)說(shuō),后臺(tái)開發(fā)就是用厲害點(diǎn)的電腦去處理大規(guī)模的網(wǎng)絡(luò)請(qǐng)求。所以作為一名合格的后端開發(fā)人員,對(duì)Linux網(wǎng)絡(luò)編程的熟悉是必不可少的。


1 重點(diǎn)掌握

  • 孤兒進(jìn)程、僵尸進(jìn)程和守護(hù)進(jìn)程

  • 進(jìn)程間通信方式signal、file、pipe、shm、sem、msg、socket

  • 線程同步機(jī)制線程:互斥量、鎖機(jī)制、條件變量、信號(hào)量、讀寫鎖

  • fork返回值

  • 五大IO模型:阻塞I/O、非阻塞I/O、I/O復(fù)用、信號(hào)驅(qū)動(dòng)I/O、異步I/O

  • IO復(fù)用機(jī)制

  • epoll與select/poll

  • LT水平觸發(fā)和ET邊緣觸發(fā)

  • Reactor和Proactor模式

  • 反向代理、負(fù)載均衡

 

2 推薦書籍

  • 《UNIX環(huán)境高級(jí)編程》APUE 比較難啃,可以挑著看

  • 《Unix網(wǎng)絡(luò)編程》UNP 同樣比較難啃,可以挑著看

  • 《Linux多線程服務(wù)器端編程》Muduo網(wǎng)絡(luò)庫(kù),推薦看看源碼實(shí)現(xiàn)

  • 《深入理解Nginx》深入了解基于C的web服務(wù)器實(shí)現(xiàn)


八、項(xiàng)目準(zhǔn)備


如果以上的東西你都已經(jīng)準(zhǔn)備好了,那么相信你已經(jīng)了具備C++后臺(tái)開發(fā)能力。但是要記得,一個(gè)大型線項(xiàng)目的開發(fā),從來(lái)都不純粹是單一語(yǔ)言的設(shè)計(jì)和實(shí)現(xiàn)。


因此用C++或者用Java或者用Golang或者用Python的區(qū)別或許沒(méi)那么大,它們都有擅長(zhǎng)的地方,畢竟存在即真理。所以,如果你真的有精力的話,不妨還可以了解一下更深層次的技術(shù):

  • 海量日志處理和并行計(jì)算開發(fā)

  • 分布式技術(shù)框架、中間件等 Dubbo、Spring Cloud 、Zookeeper 、Kfaka

  • 流媒體分發(fā)技術(shù)CDN

  • ...


當(dāng)然,這些都不是非常必要的。但是絕對(duì)是亮點(diǎn)!此外,你可以準(zhǔn)備一些基礎(chǔ)向的相關(guān)項(xiàng)目:

  • 網(wǎng)絡(luò)庫(kù),可參考Muduo或者Nginx實(shí)現(xiàn)

  • web服務(wù)器/http服務(wù)器,可實(shí)現(xiàn)基本的http響應(yīng)請(qǐng)求和處理

  • 簡(jiǎn)易版STL庫(kù),展現(xiàn)C++的綜合代碼能力

  • 局域網(wǎng)聊天室開發(fā),涉及到網(wǎng)絡(luò)編程實(shí)現(xiàn)在線群聊

  • 分布式日志系統(tǒng)

  • 簡(jiǎn)易版數(shù)據(jù)庫(kù)設(shè)計(jì)

  • 可參考一些C++常用庫(kù),造一些輪子或者做些有趣的小工具。

  • ......更多靈感可查看歷史文章

    了解這些C++常用庫(kù),或許能夠幫你找到合適的個(gè)人項(xiàng)目!



總結(jié)

在校園招聘中,對(duì)后臺(tái)開發(fā)的面試大多還是針對(duì)候選人的計(jì)算機(jī)基礎(chǔ)。大多數(shù)學(xué)生在校內(nèi)接觸不到太多高并發(fā)高可用的服務(wù)場(chǎng)景,甚至能上線的項(xiàng)目都很少,因此也很難要求校招生能夠真正具備后臺(tái)開發(fā)的能力。


所以對(duì)于C++后臺(tái)開發(fā)崗而言,對(duì)C++/Linux的充分熟悉以及扎實(shí)的計(jì)算機(jī)基礎(chǔ)和有相關(guān)的學(xué)習(xí)經(jīng)歷,就已經(jīng)能夠滿足各大公司的要求了。當(dāng)然如果有在基礎(chǔ)架構(gòu)分布式開發(fā)等方面的經(jīng)驗(yàn),就更是各大廠搶手的香餑餑。

 

本文所介紹的整體學(xué)習(xí)路線可覆蓋絕大多數(shù)大廠的面試題目和考察范圍,如今學(xué)習(xí)資料太多,選擇路線清晰的適合自己的才最重要。資料不必多,能理解掌握才是最關(guān)鍵的。 

- end -

免責(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)系我們,謝謝!

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫?dú)角獸公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

倫敦2024年8月29日 /美通社/ -- 英國(guó)汽車技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認(rèn)證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時(shí)1.5...

關(guān)鍵字: 汽車 人工智能 智能驅(qū)動(dòng) BSP

北京2024年8月28日 /美通社/ -- 越來(lái)越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運(yùn)行,同時(shí)企業(yè)卻面臨越來(lái)越多業(yè)務(wù)中斷的風(fēng)險(xiǎn),如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報(bào)道,騰訊和網(wǎng)易近期正在縮減他們對(duì)日本游戲市場(chǎng)的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國(guó)國(guó)際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)開幕式在貴陽(yáng)舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國(guó)國(guó)際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語(yǔ)權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機(jī) 衛(wèi)星通信

要點(diǎn): 有效應(yīng)對(duì)環(huán)境變化,經(jīng)營(yíng)業(yè)績(jī)穩(wěn)中有升 落實(shí)提質(zhì)增效舉措,毛利潤(rùn)率延續(xù)升勢(shì) 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長(zhǎng) 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競(jìng)爭(zhēng)力 堅(jiān)持高質(zhì)量發(fā)展策略,塑強(qiáng)核心競(jìng)爭(zhēng)優(yōu)勢(shì)...

關(guān)鍵字: 通信 BSP 電信運(yùn)營(yíng)商 數(shù)字經(jīng)濟(jì)

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺(tái)與中國(guó)電影電視技術(shù)學(xué)會(huì)聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會(huì)上宣布正式成立。 活動(dòng)現(xiàn)場(chǎng) NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長(zhǎng)三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會(huì)上,軟通動(dòng)力信息技術(shù)(集團(tuán))股份有限公司(以下簡(jiǎn)稱"軟通動(dòng)力")與長(zhǎng)三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉