用一個案例讓你清楚成爲Linux服務器開發工程師需要具備什麼

隨着業務市場的不斷壯大,更便捷的開發語言也越來越受到市場的歡迎。Java,python還有新貴golang。
那c/c++語言的開發者市場在哪裏。雖然說沒有活幹說的可能過於誇張,但是面臨的事實就是比不了。可能初學一點Java,python等等就能找到一份不錯的開發工作,但是如果你只會一點c,又不是校招的話,能找到哪些工作呢?

C,c++不同於Java。Java的技術路線是比較固定的,學好技術棧等待新技術的更新,並學會它,那在薪資上至少不會少。

而c/c++的話,不得不說,路子比較廣。選擇的方向比較多,這裏就不一一說明,只講Linux後臺服務器開發。

在這裏我會通過一個廚師的案例通俗易懂的講述C/C++Linux服務器開發需要具備哪些技能。


1、基礎功夫*


要想成爲一個廚師的基礎想必大家都清楚,也是一道菜最考驗廚師的地方,那就是“刀工”! 你會切菜跟你能切好菜完全是兩個區別。然而咱們要是從事服務器後臺開發的基礎就是“算法設計模式”,算法設計模式一共分爲以下幾種:

(1)排序與查找:插入排序、快速排序、希爾排序、桶排序、基數排序、歸併排序

(2)常用算法:布隆過濾器、字符串匹配 KMP算法、回溯算法、貪心算法、推薦算法、深度優先,廣度優先

(3)常用的數據結構:平衡二叉樹、紅黑樹、B-樹、KMP算法、棧/隊列、布隆過濾器

(4)常用的設計模式:單例模式、責任鏈模式、過濾器模式、發佈訂閱模式、代理模式、工廠模式

2、工具

身爲一個廚師,各種鍋碗瓢盆那必須是要熟悉的吧,哪一道菜用什麼工具那必須得一清二楚。咱們要想成爲服務器開發工程師那也是一樣的,也必須也得掌握各種工具,大致可分爲以下幾種:

(1)持久化 MySQL:MySQL安裝配置與遠程連接、數據操作源於SQL語句、存儲過程與事務處理

SQL函數,運算,臨時表等等

(2)消息隊列 ZeroMQ:ZMQ編譯安裝與開發環境搭建、以及各種模式的實現等等

(3)緩存 Redis:Redis編譯安裝配置、客戶端全局唯一ID保存機制、Redis消息隊列機制 發佈訂閱等等

(4)反向代理 Nginx:Nginx開發介紹、反向代理負載均衡配置詳解、自定義協議upstream開發等等

(5)Restful Http:Http第三方接口實現、異步Http請求、ngrok與Restlet、長連接與短鏈接

(6)協調服務 ZooKeeper:ZK編譯安裝與C API開發環境、集羣管理與服務註冊等等

(7)NoSQL MongoDB:MongDB安裝與開發介紹、MongoDB備份與恢復、MongoDB文檔操作

3、菜譜

菜譜這個東西對於一個剛學廚的人來說能起到不小的作用,畢竟集合了前輩的精華與經驗在裏面。咱們要想成爲服務器開發工程師開源框架這個東西肯定要用到的,那有哪些勒?我來告訴你:

(1)TCP協議棧:基於DPDK的高性能用戶態協議棧 f-stack、基於Netmap單線程協議棧 NtyTcp、精簡版tcp協議棧 LWIP

(2)數據庫:Redis數據庫的C客戶端庫 hiredis、Facebook的嵌入鍵值的快速存儲 RocksDB、用於Sqlite3的C++對象關係映射 hiberlite

(3)國際化:Unicode 和全球化支持的C、C++ 和Java庫 IBM ICU、不同字符編碼之間的編碼轉換庫 libiconv、GNU gettext

(4)壓縮:非常緊湊的數據流壓縮庫 Zlib、快速壓縮和解壓縮 Snappy、非常快速的壓縮算法 LZ4、單一的C源文件,緊縮/膨脹壓縮庫 Miniz

(5)協程::純c版的協程框架 ntyco、C++11實現協程庫, golang風格 libgo、微信支持8億用戶同時在線的底層IO庫 libco

…還有很多,我就不一一列舉了。

4、調味

一道菜的好壞就是在於這裏,放什麼調料,放多少量完全決定了一道菜的口味,那什麼是服務器開發工程師的調味品勒?兩個字“網絡”,也就是網絡服務:

(1)源碼實現:服務器IO核心— epoll編程實戰、客戶端多網絡連接機制poll、文件IO管理select實戰

(2)框架實戰:高性能的時間循環 libev、跨平臺異步I/O libuv、跨平臺的C++庫 Boost.Asio、事件通知庫 libevent

(3)理論詳解:阻塞型 BIO、異步IO AIO、非阻塞型IO NIO

5、試味

放完調料之後我們就得爲這道菜試一下鹹淡,是吧,當前面這些都理解完了 ,咱們還的學會測試,當你寫了一個程序,你得測試他有沒有問題,有沒有bug,是吧 不然產品小姐姐可能要過來跟你談談人生,談談理想了,哈哈哈(跑偏了),測試也分爲以下幾個部分:

(1)調試庫:Boost測試庫 Boost.Test、內存調試性能分析工具 Valgrind、谷歌C++測試框架 GoogleTest、內存分配跟蹤庫 MemTrack

(2)測試庫::單元測試框架 minUnit、測試用例編寫 libtap、輕量級的C++單元測試框架 UnitTest++、自動化測試用例 gtest和luatest

(3)性能工具::高性能代碼構建系統 tundra、Http壓測工具 WRK、網站壓測工具 webbench、高性能構建系統 FASTBuild

6、擺盤

會炒菜了,當然也得會擺盤!咱們服務器後臺開發都是基於Linux系統的,所以你得會操作Linux系統,這幾個你必須得瞭解:

(1)系統命令工具:進程間通信設施狀態 ipcs、Linux系統運行時長 uptime、iostat、sar、mpstat、pmap、nmon、glances、strace

(2)基礎命令工具:系統進程狀態 ps、虛擬內存統計工具 vmstat、控制檯的流量監控工具 vnstat

進程監控工具 atop,htop、內存使用狀態 free

(3)網絡參數工具:Linux網絡統計監控工具 netstat、顯示和修改網絡接口控制器 ethtool等等

(4)磁盤參數工具:磁盤卸載 umount、讀取、轉換並輸出數據 dd、文件系統系統 df等等

還有很多,我就不一一列舉了,有想要具體大綱的可以後臺私信我。

7、管理人員

菜做好了,就得喊服務員上菜了,要通知到位,要有一定的管理能力,在服務器開發中也是的,有一個工程化的管理,具體如下:

(1)架構工程:工程參數配置與編譯 cmake、代碼規範與命名規則、文件命名與變量命名規則、腳本配置工具 autoconf、代碼工程組織架構 Makefile

(2)管理代碼:分佈式版本控制系統 git、遠程倉庫,標籤管理等等

8、項目實戰

在互聯網行業中,你有項目經驗跟沒有項目經驗完全是兩個層次,出去面試也有很大的優勢!

好了,今天的分享就到這裏,大家看完應該就知道自己哪方面需要補充了。
每日分享15分鐘技術摘要選讀,關注一波,一起保持學習動力!
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章