后臺開發(fā)工程師主流使用的編程語言有C 、Java、PHP以及目前慢慢流行的Golang等。本文就將以C 的角度,講講如何學習和準備后臺開發(fā)的崗位。
一、語言基礎
無論是C 開發(fā)還是Java開發(fā),對于一個碼農而言,最重要的就是對于編程語言的熟悉。同樣,無論從事哪種類型的崗位,首當其沖的就是要掌握好語言基礎。
C 是一門博大精深的編程語言,不僅擁有繼承于C語言的過程化程序設計思想,還包含有面對對象(OOP)的設計理念。強大而又復雜。相對來說,C 的學習成本較高,語言里面的坑較多。語言基礎的學習路線如下:
1 語法基礎重點掌握:(務必熟悉底層機制原理)
- 指針和引用的概念
- 指針與內存關系
- 程序編譯過程
- static、const、#define的用法和區(qū)別
- C和C 區(qū)別
- 內存模型
- 內存中的棧和堆分配
2 面對對象基礎(務必熟悉底層機制原理)
- 面向對象理解
- 析構函數(shù)
- 構造函數(shù)
- 拷貝構造
- 多態(tài)
- 純虛函數(shù)和虛函數(shù)
- 虛函數(shù)實現(xiàn)機制
- 虛函數(shù)表
- 訪問限定符 public、private、protected
- 繼承原理、虛繼承、菱形繼承
- 靜態(tài)綁定和動態(tài)綁定
- new/delete和malloc/free
- 重載、重寫和隱藏
3 語法進階(務必熟悉底層機制原理)
- 智能指針
- 左值、右值引用和move語義
- 類型轉換方式
- 常用的設計模式
- 線程安全的單例模式
- 內存溢出和內存泄漏
- C 11新特性
- 靜態(tài)鏈接庫和動態(tài)鏈接庫
- 迭代器、空間配置器理解
- 常用容器特點、用法以及底層實現(xiàn)vector、list、deque、set、map、unorderedmap
- 《C Primer》可作為工具書,隨手查閱
- 《EffectiveC 》深入了解C 的程序設計規(guī)范
- 《STL源碼剖析》剖析STL的源碼底層,非常具有學習價值
- 有精力還可以看《深度探索C 對象模型》《more EffecticeC 》
對于普通人而言,算法的學習最重要的是能夠形成基本的算法思維,懂得從程序設計的角度對高重復性的操作做優(yōu)化。這其中基本算法思想的掌握和常用數(shù)據(jù)結構的理解是必不可少。這方面的學習更傾向于多看多想多練。?1 常見算法類型(務必能夠手撕代碼)
- 排序算法(冒泡、插入、選擇、快排、希爾、堆排、歸并、桶排、基數(shù)、計數(shù))、字符串操作、數(shù)組操作、遞歸、回溯、分治、動態(tài)規(guī)劃等
- 如何準備算法可見歷史文章進入BAT和字節(jié)跳動最難的一關,手撕代碼!
- 鏈表、棧、隊列、樹(二叉樹、平衡二叉樹、紅黑樹、B樹、B 樹、哈夫曼樹、字典樹)、跳表、圖
- 《大話數(shù)據(jù)結構》適合入門學習
- 《劍指offer》必刷66題
- 《算法導論》盡量看,能啃完就是大神
網(wǎng)絡相關的東西不是很多,關鍵在于對常見網(wǎng)絡協(xié)議簇的認識和理解,以及一些常規(guī)操作底層設計實現(xiàn)的剖析。比如:
??????? | 輸入www.baidu.com會發(fā)生什么????????| 微信掃描登錄會發(fā)生什么
1 重點掌握知識點
- OSI七層模型
- TCP/IP五層模型
- TCP/IP協(xié)議總結
- TCP、UDP區(qū)別
- TCP三次握手、四次揮手
- TCP狀態(tài)轉換
- TCP狀態(tài)中TIME_WAIT
- TCP連接建立需要為什么不是兩次握手
- TCP第三次握手失敗會出現(xiàn)什么
- TCP長連接和短鏈接及優(yōu)缺點
- TCP擁塞控制-慢啟動、擁塞避免、快重傳、快啟動
- TCP如何保證可靠性傳輸
- TCP如何解決粘包、拆包問題
- TCP為什么可靠
- UDP如何實現(xiàn)TCP可靠傳輸
- IP地址和子網(wǎng)掩碼
- ARP解析過程
- DNS原理
- HTTP狀態(tài)碼
- HTTP1.0、HTTP1.1、HTTP2.0區(qū)別
- HTTP和HTTPS區(qū)別
- HTTPS加密過程
- 非對稱加密和對稱加密算法
- Nagle算法
- 《計算機網(wǎng)絡自頂向下方法》教材書,可放手邊查閱
- 《TCP/IP詳解》重點了解TCP、IP、UDP協(xié)議實現(xiàn)
數(shù)據(jù)庫的一般使用其實不難,但是對于不同數(shù)據(jù)庫的特性、實現(xiàn)機制、應用場景和性能優(yōu)化方面卻能夠難倒一大批面試者。同樣數(shù)據(jù)庫本身也是非常好的項目實例,往往能夠從中學習到許多程序設計的思想和模式。因此,對數(shù)據(jù)庫要明白怎么用、為什么用、怎么用得好這幾個方面的問題。
1?重點掌握
- 數(shù)據(jù)庫類別
- 關系型數(shù)據(jù)庫和非關系型數(shù)據(jù)庫區(qū)別
- SQL常見語句
- MySQL內鏈接,外鏈接(左鏈接、右鏈接、全鏈接)
- MySQL索引類型和原理
- MySQL事務實現(xiàn)原理ACID
- MySQL數(shù)據(jù)存儲引擎
- MySQL主從復制原理、作用和實現(xiàn)
- MySQL日記系統(tǒng)redo log、binlog、undo log
- MVCC實現(xiàn)原理
- Sql優(yōu)化思路
- 范式理論
- 數(shù)據(jù)庫高并發(fā)解決方法
- Redis支持的數(shù)據(jù)類型
- Redis持久化
- Redis 架構模式
- 主從復制
- 一致性哈希算法
- 《高性能 Mysql》能夠加深對Mysql的理解和使用
- 《Redis設計與實現(xiàn)》比較全面的書,可以多看看
?五、操作系統(tǒng)
操作系統(tǒng)的問題會集中在進程和線程,但是這一類的問題往往會以開放題的形式出現(xiàn)。主要考察的是對操作系統(tǒng)組件以及運行過程的理解。比如:
? ? |?開機登錄系統(tǒng)發(fā)生了什么?? ? |?復制粘貼是怎樣操作的??1 重點掌握
- 物理內存和虛擬內存
- 緩存IO和直接IO
- 作業(yè)調度算法
- 線程和進程
- 進程和線程的調度
- 線程的創(chuàng)建和結束
- 線程狀態(tài)
- 線程間通信與線程同步機制
- 互斥鎖和信號量
- 線程池
- 消費者和生產者
- 死鎖
- 并發(fā)和并行
- 《深入理解計算機系統(tǒng)》很全面的書,這一本就夠用了
六、Linux系統(tǒng)
對Linux系統(tǒng)的熟練使用是后臺開發(fā)/服務器開發(fā)的必備技能點。這年頭,不會幾個Linux指令都不好意思說自己是敲代碼的。(客戶端和前端的同學表示不服)不管怎樣,對于Linux系統(tǒng)的掌握無論在哪個方向上,都會有用武之地的。
1?Linux系統(tǒng)操作和命令
- top命令
- ps命令
- netstat命令
- awk命令
- find命令
- grep命令
- wc命令
- sed命令
- head和tail命令
- 正則表達式
- 如何查找出現(xiàn)頻率最高的100個IP地址
- linux如何統(tǒng)計文件中某個字符串出現(xiàn)的頻率
- linux啟動的第一個進程
- linux查看端口占用
- linux查看CPU和內存使用
- Linux查看系統(tǒng)負載命令
- Linux調試程序
- Linux硬鏈接和軟連接
- core dump
- cmake和makefile
- Shell腳本基本語法和使用
- 《鳥哥私房菜》入門足夠了,多敲多寫才能更快掌握
后臺開發(fā)是離不開網(wǎng)絡編程的,甚至簡單來說,后臺開發(fā)就是用厲害點的電腦去處理大規(guī)模的網(wǎng)絡請求。所以作為一名合格的后端開發(fā)人員,對Linux網(wǎng)絡編程的熟悉是必不可少的。
1 重點掌握
- 孤兒進程、僵尸進程和守護進程
- 進程間通信方式signal、file、pipe、shm、sem、msg、socket
- 線程同步機制線程:互斥量、鎖機制、條件變量、信號量、讀寫鎖
- fork返回值
- 五大IO模型:阻塞I/O、非阻塞I/O、I/O復用、信號驅動I/O、異步I/O
- IO復用機制
- epoll與select/poll
- LT水平觸發(fā)和ET邊緣觸發(fā)
- Reactor和Proactor模式
- 反向代理、負載均衡
- 《UNIX環(huán)境高級編程》APUE?比較難啃,可以挑著看
- 《Unix網(wǎng)絡編程》UNP?同樣比較難啃,可以挑著看
- 《Linux多線程服務器端編程》Muduo網(wǎng)絡庫,推薦看看源碼實現(xiàn)
- 《深入理解Nginx》深入了解基于C的web服務器實現(xiàn)
八、項目準備
如果以上的東西你都已經準備好了,那么相信你已經了具備C 后臺開發(fā)能力。但是要記得,一個大型線上項目的開發(fā),從來都不純粹是單一語言的設計和實現(xiàn)。
因此用C 或者用Java或者用Golang或者用Python的區(qū)別或許沒那么大,它們都有擅長的地方,畢竟存在即真理。所以,如果你真的有精力的話,不妨還可以了解一下更深層次的技術:
- 海量日志處理和并行計算開發(fā)
- 分布式技術框架、中間件等 Dubbo、Spring Cloud?、Zookeeper?、Kfaka
- 流媒體分發(fā)技術CDN
- ...
當然,這些都不是非常必要的。但是絕對是亮點!此外,你可以準備一些基礎向的相關項目:
- 網(wǎng)絡庫,可參考Muduo或者Nginx實現(xiàn)
- web服務器/http服務器,可實現(xiàn)基本的http響應請求和處理
- 簡易版STL庫,展現(xiàn)C 的綜合代碼能力
- 局域網(wǎng)聊天室開發(fā),涉及到網(wǎng)絡編程實現(xiàn)在線群聊
- 分布式日志系統(tǒng)
- 簡易版數(shù)據(jù)庫設計
- 可參考一些C 常用庫,造一些輪子或者做些有趣的小工具。
- ...
總結
在校園招聘中,對后臺開發(fā)的面試大多還是針對候選人的計算機基礎。大多數(shù)學生在校內接觸不到太多高并發(fā)高可用的服務場景,甚至能上線的項目都很少,因此也很難要求校招生能夠真正具備后臺開發(fā)的能力。
所以對于C 后臺開發(fā)崗而言,對C /Linux的充分熟悉以及扎實的計算機基礎和有相關的學習經歷,就已經能夠滿足各大公司的要求了。當然如果有在基礎架構分布式開發(fā)等方面的經驗,就更是各大廠搶手的香餑餑。?本文所介紹的整體學習路線可覆蓋絕大多數(shù)大廠的面試題目和考察范圍,如今學習資料太多,選擇路線清晰的適合自己的才最重要。資料不必多,能理解掌握才是最關鍵的。?- EOF -