官术网_书友最值得收藏!

icon1

緒論

0.1 什么是后臺開發

聽到“后臺開發”這個詞,估計讀者心中都或多或少會有一些自己的感性認識,這種認識可能有一些差別,但估計大部分人都有這么一種看法:“后臺開發”是編寫一些用戶看不見的程序,也就是非界面的程序,既不是網頁,也不是App,更不是桌面程序,因為這些都是用戶看得見的(被稱為“前臺開發”)。這種感性認識在一定程度上是正確的,但是它不夠具體,也不夠全面。

我們這里所說的“后臺開發”的確是用戶“看不見”的部分,但是還有很多界面性的程序是給企業內部人員使用的,這些雖然是界面程序,但是對于最終用戶來說也是“看不見”的。舉個例子,開發一個電子商務網站,提供給客戶進行商品購買的網頁是用戶看得見的,不屬于“后臺”,但是電商網站內部員工使用的“用戶管理系統”,“訂單管理系統”等,也是用戶看不見的,但它們不屬于本書中所指的“后臺”。在某些場合,或者某些人的習慣中,這些內部使用的系統也叫“后臺”,這幾種說法都沒有錯,希望讀者在聽到的時候,知道說話人具體指的是什么。

本書介紹的“后臺開發”指的是“服務端的網絡程序開發”,從功能上可以具體描述為:服務器收到客戶端發來的請求數據,解析請求數據后處理,最后返回結果,如圖0-1所示。

圖0-1 后臺開發的步驟

這里的SERVER就是本書所指的“后臺程序”,或者“服務器”。SERVER接收請求的方式既可以是通過TCP請求包,也可以是HTTP請求包(其實也是TCP連接)。如果是TCP請求,二進制的格式會常見一些;如果是HTTP方式的請求,請求包的格式一般是JSON或者XML,或者自定義的ASCII文本。解析請求包的方式自然是與請求包的格式相對應的,接收到的是什么格式的包,就用對應的格式解析(如果是自定義的格式,就按照自定義的方式去解析)。“處理請求”這一步是后臺程序的具體業務邏輯的體現。很多封裝好的后臺框架會把其他三步都做好,但是這一步還是需要開發者自己去實現,因為只有開發者自己清楚,程序是要去做“登錄”還是去做“注冊”的事情?!拜敵龌貜桶焙汀敖邮照埱蟀笔菍?,一般來說,收到的是JSON,那么回復的也是JSON,收到的是XML,那么發送的也是XML,其他格式也是一樣的。這四個步驟是所有后臺程序都會有的,無論使用什么語言去實現,都可以看到這四個步驟的影子。

CLIENT指的是向SERVER發起請求,并接收SERVER回復的一方,通常稱為“客戶端”。既然后臺程序是通過TCP或者HTTP接收和回復消息的,那么只要是能夠發起TCP或者HTTP連接的都可以作為客戶端,可以是瀏覽器、PC端的程序、安卓應用、IOS應用,等等。

0.2 時間就是金錢,效率就是生命

上世紀80年代,在改革開放初期的深圳蛇口,為了加快蛇口港的建設,一塊“時間就是金錢,效率就是生命”的巨幅標語矗立在蛇口工業區的馬路邊(如圖0-2所示),拉開了特區建設的序幕。

圖0-2 1981年矗立在深圳蛇口工業區的巨幅標語

其實這個口號后面還有兩句:“安全就是法律,顧客就是皇帝”,這四句加一起,簡直就是當今互聯網時代科技公司安身立命的根本?;ヂ摼W最講究效率并且一切都從用戶體驗出發。在騰訊、百度和阿里這樣的互聯網公司里,每一次的版本發布都是和時間在賽跑。各種以效率為核心的開發團隊合作模式被創造:敏捷開發、極限編程、SCRUM、結對編程,雙周迭代,等等。

寫下這些文字的時候是我在騰訊工作的第五個年頭,這五年讓我對效率有了更深刻的認識。還是一個學生的時候,和大家一樣,我也曾一字不落地讀過《UNIX環境高級編程》,《UNIX環境網絡編程》一二三卷,《TCP/IP詳解》一二三卷,《C++Primer》等書籍,這些都是非常經典的開發書籍。它們的共同特點是大而全,不漏掉任何一個知識點,并且每個知識點都講得非常詳細。但在實際的開發工作中,可能用到的知識點只有20%,其他的80%則很少用到。這也是我寫這本書的初衷:用最短的篇幅,講解實際后臺開發中用到的核心知識點,讓讀者可以快速進入到實際的開發工作中。

也許有讀者會覺得這很急功近利,不利于組建完整的知識體系。其實,軟件開發是一門講究實操的技術,知道多少并不重要,重要的是能夠用好多少。如果把一本經典書籍讀3遍,但是沒有寫過一行代碼,那可以認為是沒有讀。邊寫代碼邊讀書才是最好的學習方式,在讀一本技術書籍的時候,最好讓自己快速進入寫代碼的狀態,一邊寫代碼,一邊通讀書籍,在具體需要用到書上某個技術點的時候,再回頭仔細閱讀相關的章節。在這個循環往復的過程中,才能把書上的知識點轉化為自己的知識點。完成多個這樣的循環后,再回過頭來審視自己已經掌握的知識點,把一些沒有掌握的知識點搞清楚。這樣的學習過程實際上更有利于完善自己的知識體系。

0.3 后臺開發的知識體系

接下來簡單介紹一下后臺開發的知識體系,也就是說,要完整掌握后臺開發,需要掌握哪些知識點,這些知識點也是本書會講解到的知識點。圖0-3展示了對后臺開發知識體系一個比較全面的梳理。

以上這六部分知識點會是本書將會覆蓋的內容。與專門介紹某一類知識的書籍不同,比如《C++Primer》介紹C++的方方面面,《UNIX環境編程》介紹UNIX環境編程的方方面面,本書從“實戰”的角度出發,介紹“后臺開發”需要用到的知識和工具。讀完本書,讀者可能不會對C++精通,不會對Linux精通,也不會對TCP/IP精通,但是卻可以學會如何進行“后臺開發”,這些“精通”可以一個個慢慢補全。

圖0-3 后臺開發工程師技術能力體系圖

細心的讀者可能會發現,編程語言和編輯器只是其中的一小部分,要把后臺開發做好,需要掌握的東西比想象中的要多。同時,這些知識點既有一些純理解性的內容,也有一些工具性的東西。這也是程序開發的最大特點,既要掌握理論的東西,也要掌握相應的工具,這樣才能把理論的知識用起來。在實際開發中,這些工具性的知識可能更重要,因為理論是腦子里想的,但工具產生的東西才是真正的產出,才是開發者最終需要的。

0.4 如何閱讀本書

本書以C++為編程語言,講述后臺開發的核心技術與應用實踐。全書共13章,在邏輯上分為以下六部分:

第一部分為第1~3章,主要是編程語言方面的知識,包括函數、函數重載、函數模板、數組、指針、引用、結構體和預處理的使用;面向對象的介紹,包括類的使用、繼承與派生和類的多態;常用STL的介紹,包括string、vector、map和set的使用方法與原理。如果讀者已經對C++非常了解,可以跳過這部分,也可以配合《C++Primer》一起閱讀。

第二部分為第4~5章,主要是編譯原理和調試方法相關的知識。編譯原理相關知識包含編譯與鏈接的具體過程,makefile的編寫、目標文件的內容與處理目標文件相關工具的使用;調試方法相關內容主要介紹了用strace分析系統調用、用gdb調試進程與分析coredump文件、用top命令分析系統負載情況、用ps命令查看系統進程和用valgrind工具分析進程的內存使用情況等。

第三部分為第6~8章,主要是網絡相關的知識,包括TCP協議的關鍵知識點和TCP server的實現,網絡IO模型和select、poll與epoll三個重要函數的使用,還有ping、tcpdump、netstat和lsof這四個網絡分析工具的使用。掌握這部分知識,讀者可以自己獨立實現能處理海量請求的TCP server。

第四部分為第9~11章,主要是多線程、進程和進程間通信相關的知識,包括多線程的使用、多線程的同步和重入問題,父子進程、僵尸進程、守護進程和進程間通信的方式。讀者可以配合《UNIX環境高級編程》一起閱讀。

第五部分是第12章,主要是HTTP協議的介紹與使用、CGI的設計原理與實現和FASTCGI的簡單介紹。掌握這部分知識,讀者可以輕松實現Web應用的后臺交互部分。

第六部分是第13章,通過常用類庫JsonCPP和Protobuf的使用,演示如何使用第三方庫。

如果讀者是后臺開發的新手,建議從第1章開始閱讀,如果讀者已經有后臺開發的經驗,可以直接選擇感興趣的章節閱讀。

0.5 勘誤和資源

由于水平有限,加之編寫時間倉促,書中難免會出現一些錯誤或者不準確的地方,懇請讀者批評指正。為了更好地與讀者交流,我專門創建了一個微信公眾號,讀者可以通過以下二維碼關注,與我進行交流。

書中的全部源代碼可以從華章網站(www.hzbook.com)下載。

0.6 致謝

首先要感謝騰訊公司,讓我可以在后臺開發的領域里馳騁。

其次要感謝機械工業出版社華章公司的楊福川、高婧雅和李藝,感謝你們在我寫作過程中提供的支持,因為有了你們的鼓勵和幫助,我才能順利完成全部書稿。

謹以此書獻給我親愛的家人,以及熱愛軟件開發的朋友們!

主站蜘蛛池模板: 随州市| 石首市| 凌海市| 酉阳| 辽宁省| 安化县| 秭归县| 通许县| 深圳市| 长寿区| 区。| 镇沅| 砚山县| 会泽县| 澄迈县| 唐河县| 乌拉特中旗| 延津县| 新余市| 广丰县| 金昌市| 鄱阳县| 精河县| 松溪县| 江津市| 吴桥县| 华蓥市| 天津市| 青岛市| 桑日县| 闻喜县| 夏津县| 德格县| 阳高县| 南靖县| 赤壁市| 遵义县| 永靖县| 略阳县| 利辛县| 桑植县|