溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

后臺開發(fā)應(yīng)該讀的書

發(fā)布時間:2020-06-30 15:52:23 來源:網(wǎng)絡(luò) 閱讀:3508 作者:張小方32 欄目:建站服務(wù)器

根據(jù)我的經(jīng)驗來談一談,先介紹一下我的情況,坐標(biāo)上海,后臺開發(fā)(也帶團(tuán)隊了),某知名互聯(lián)網(wǎng)公司。

目前主流的有C++和JAVA,C++我的經(jīng)驗稍微多一點。我就說說我關(guān)于C++方面的學(xué)習(xí)經(jīng)驗。如果您是學(xué)生,臨近畢業(yè),沒有那么多時間讀許多書,可以按下面列舉的重要程度來參考。

首先,我覺得你應(yīng)該好好準(zhǔn)備算法和數(shù)據(jù)結(jié)構(gòu),做到常見的算法和數(shù)據(jù)結(jié)構(gòu)知識點都能非常熟悉,這樣的話你畢業(yè)求職的時候可以輕松拿一些大廠(BAT等)的offer。我本人非科班出身,一畢業(yè)之后各種摸爬滾打。一畢業(yè)去大廠個人覺得有兩個好處,第一,你的收入會比一般的的小公司高很多,小公司招人要求相對低一些,薪資給的也少很多,它們是實實在在招能干本職工作活兒的人。第二,你的起點也會比一般進(jìn)入小廠的同學(xué)高。我這里并不是歧視小廠,只是說一種普遍的情況。我本人也是從小廠一路過來的。這里我是強(qiáng)調(diào)算法和數(shù)據(jù)結(jié)構(gòu)的重要性。尤其是應(yīng)屆生求職,更應(yīng)該去好好準(zhǔn)備一下這個,因為這個東西是原理性的基礎(chǔ)。企業(yè)在面試應(yīng)屆生時不會過分要求項目經(jīng)驗和各種操作系統(tǒng)原理、網(wǎng)絡(luò)通信原理之類的東西,而唯一能考察一個人的基本功的就是這個了。我是社招進(jìn)大廠,基本上算法和數(shù)據(jù)結(jié)構(gòu)這類問題問的比項目經(jīng)驗本身要多許多。但是社招又不太一樣,因為除了要準(zhǔn)備算法和數(shù)據(jù)結(jié)構(gòu)以外,還得準(zhǔn)備有項目經(jīng)驗、了解操作系統(tǒng)原理、熟悉網(wǎng)絡(luò)通信、了解數(shù)據(jù)庫、熟悉要求的各種開源框架和技術(shù)等等,實在太多了,即使再怎么準(zhǔn)備也不一定能一舉拿下。相反,應(yīng)屆生基本上只要好好準(zhǔn)備算法和數(shù)據(jù)結(jié)構(gòu)的東西,大學(xué)其他專業(yè)課學(xué)的不是太差,這基本上就是進(jìn)大廠的捷徑。圖書方面,你可以使用你們計算機(jī)專業(yè)的相關(guān)教材,也可以使用《數(shù)據(jù)結(jié)構(gòu)與算法分析:C語言描述》《算法導(dǎo)論》這一類嚴(yán)謹(jǐn)?shù)慕滩?,?dāng)然,平心而論我是不敢推薦《算法導(dǎo)論》的,因為這一本書實在是太大部頭了,沒有好的數(shù)學(xué)知識,真的很難啃。如果想看一下比較幽默輕松類的書,可以看看程杰的《大話數(shù)據(jù)結(jié)構(gòu)》。

其次,如果你學(xué)有余力,可以看看操作系統(tǒng)原理方面的書籍,當(dāng)然也可以使用你們的教材,我這里推薦一本我看過的吧,Tanenbaum.A.S《現(xiàn)代操作系統(tǒng)》,Tanenbaum是荷蘭人,也是Linux之父Linus Torvalds操作系統(tǒng)方面的啟蒙老師。當(dāng)然,我的建議是這種書畢竟流于理論知識,也不一定要看完,但一定將一些基礎(chǔ)概念,如進(jìn)程線程內(nèi)存模式等基礎(chǔ)概念看懂理解。你如果還有時間強(qiáng)烈推薦看看俞甲子的《程序員的自我修養(yǎng):鏈接、裝載與庫》,這本書同時涉及到了Windows和linux兩個操作系統(tǒng)平臺,用各種輔助工具剖析了程序從源碼到二進(jìn)制文件再到裝載到進(jìn)程地址空間里面的各個細(xì)節(jié),甚至連進(jìn)程地址空間中的堆結(jié)構(gòu)、棧結(jié)構(gòu)也分析得清清楚楚,同時也分析了C Runtime(CRT)、glibc這樣的操作系統(tǒng)接口庫的原理和執(zhí)行邏輯,是一本實實在在難得的幫你實戰(zhàn)操作系統(tǒng)原理的一本好書。我特別喜歡這個書中序言的一段話:

? ?

“CPU體系結(jié)構(gòu)、匯編、C語言(包括C++)和操作系統(tǒng),永遠(yuǎn)都是編程大師們的護(hù)身法寶,就如同少林寺的《易筋經(jīng)》,是最為上乘的武功;學(xué)會了《易筋經(jīng)》,你將無所不能,任你創(chuàng)造武功;學(xué)會了編程“易筋經(jīng)”,大師們可以任意開發(fā)操作系統(tǒng)、編譯器,甚至是開發(fā)一種新的程序設(shè)計語言!”

再次,你學(xué)這些東西是為了將來實踐并有產(chǎn)出的,而落實這個產(chǎn)出的東西就是編程語言,如果是入門,我首推C/C++。你只有熟練使用一門編程語言,你才能將你的想法變成現(xiàn)實。注意這里我把C和C++放在一起,但是嚴(yán)格意義上說,C和C++還是有點區(qū)別的,但是除了語法上的一些細(xì)節(jié)差異,基本上可以認(rèn)為是相通的。個人覺得C語言是所有想成為高手最應(yīng)該使用的入門語言,不要和我說現(xiàn)在很火的python、go這類語言,“玄都觀里桃千樹,盡是劉郎去后栽”。我這里也推薦一本C語言方面的圖書吧,有興趣的可以參考一下:《C語言程序設(shè)計:現(xiàn)代方法》。至于譚浩強(qiáng)的書就不要提了,還有就是大部頭的《C++ Primer》,它雖然是一本好書,但實在是太大部頭了。語法層面的東西學(xué)會很快,stl庫的東西需要實戰(zhàn),也不是翻這類字典一樣的書就能很好地掌握的。當(dāng)然,如果你想掌握好C++,《深度探索C++對象模型》是一定要看的。C++實際編碼技巧還有另外一本非常好的書,介紹了常見的C++編碼技巧《提高C++性能的編程技術(shù)》,建議C++開發(fā)的把書中說的技巧全部掌握。

接著說,我們再說說網(wǎng)絡(luò)方面的,首先網(wǎng)絡(luò)基礎(chǔ)方面的書籍,我就沒啥推薦了,現(xiàn)在很多計算機(jī)學(xué)院也開始使用《計算機(jī)網(wǎng)絡(luò):自頂向下方法》這本不錯的教材,如果沒有看過的可以看下。當(dāng)然還是那句話你一定要看懂而不是看完。比如三次握手和四次揮手的細(xì)節(jié),你一定要很清楚。然后你就可以找一本網(wǎng)絡(luò)編程的實戰(zhàn)書來看下,如果你沒有使用任何socket api編程的經(jīng)驗,你可以看看韓國人尹圣雨寫的這本《TCP/IP網(wǎng)絡(luò)編程》,這本書從基礎(chǔ)的socket api介紹到比較高級的io復(fù)用技術(shù),有非常詳細(xì)和生動的例子。如果你是初級水平,強(qiáng)烈建議看看這本書。網(wǎng)絡(luò)編程的細(xì)節(jié)需要注意的地方實在太多了,這本書上都有介紹。很多人尤其是一些學(xué)生,寫了一些可以相互聊天的小程序就覺得自己熟悉網(wǎng)絡(luò)通信了,但是這類程序拿到互聯(lián)網(wǎng)上或者離開局域網(wǎng),不是連接出錯,就是數(shù)據(jù)總是收發(fā)不全。我當(dāng)年也是這么過來的,看看這本書,你就能明白許多網(wǎng)絡(luò)故障的原因。等你有了一定的網(wǎng)絡(luò)編程以后(熟練使用常見socket API),你可以看看游雙的《Linux高性能服務(wù)器編程》,這本書給沒有基礎(chǔ)的人或者基礎(chǔ)不扎實的人的感覺是,尤其是書的前三章,這書怎么這么垃圾,又把網(wǎng)絡(luò)理論書上面的東西搬過來湊字?jǐn)?shù),但是如果你有基礎(chǔ)再按照書上的步驟在機(jī)器上實踐一遍,你會發(fā)現(xiàn),真是一本難得的、良心的書,桃李不言下自成蹊吧。如果你掌握了這本說上說的這些知識,你再看陳碩老師的《Linux多線程服務(wù)端編程》或者去看像libevent這樣的開源網(wǎng)絡(luò)庫,你會進(jìn)一步的得到提升。這也是我學(xué)習(xí)網(wǎng)絡(luò)編程的一些經(jīng)驗和經(jīng)歷吧。注意這里有必要提一下:像UNP、APUE、還有《TCP/IP詳解》這一類書,如果你將來不是專門做網(wǎng)絡(luò)方面的工作或研究,其實是非常不建議抱著他們看的,因為部頭太大,其次太多理論和Unix的東西,花的時間產(chǎn)出投入比很低的。

接著說,以上說的都是一些基礎(chǔ)的東西。其實不管是什么開發(fā),后臺開發(fā)也不例外,你都是需要基于特定的操作系統(tǒng)的,這里不提Windows系統(tǒng),單單拿linux操作系統(tǒng)來說,既然你選擇做這個方面的開發(fā),你需要熟悉這個操作系統(tǒng)平臺提供的一些常用的API函數(shù),網(wǎng)絡(luò)通信方面上文已經(jīng)說過,除了網(wǎng)絡(luò)通信還有如操作文件、操作內(nèi)存、字符串操作、進(jìn)程線程系列、線程同步系列(如互斥體、條件變量、信號量)、管道等常用的各種API接口函數(shù)。這里的意思是,不是要你背誦記憶每一個接口函數(shù)的簽名,而是你要知道何時該用哪個接口,如何用,有什么注意事項。我入門的時候看的是Robert Love的《Linux系統(tǒng)編程》,熟悉這個人的應(yīng)該知道,google的工程師,他還有另外一本非常有名的書《Linux內(nèi)核設(shè)計與實現(xiàn)》。

最后,我強(qiáng)調(diào)一下,如果你是快畢業(yè)的學(xué)生,面臨著找工作的壓力,應(yīng)該以算法和數(shù)據(jù)結(jié)構(gòu)為主。如果你是大一大二或研一這個階段的學(xué)生,我上面推薦的書,你還是可以考慮好好咀嚼一下。標(biāo)準(zhǔn)是看懂而不是看完。

再補(bǔ)充一些我覺得要成為高手應(yīng)該要掌握的東西,先說匯編。雖然第三代第四代語言越來越多,硬件性能越來越好。但是如果你熟練掌握匯編,你就比其他人多很多優(yōu)勢,你會能透徹地知道你寫的每一行C/C++代碼背后的機(jī)器指令的效率。無論是做安全工程還是自己技術(shù)提升上都是非常不錯的。這里推薦一本王爽老師的《匯編語言(第3版)》,這本書不厚,語言通俗易懂,你也不用刻意去記憶,基本上當(dāng)小說書看一下就能很快看完了。匯編實戰(zhàn)類圖書還有另外一本《老"碼"識途:從機(jī)器碼到框架的系統(tǒng)觀逆向修煉之路》。我個人是非常喜歡這本書的。當(dāng)年讀這本書的時候,真的有一種“笑看妻子愁何在?漫卷詩書喜欲狂”的感覺。盡管那個時候連女朋友都沒有——!

另外補(bǔ)充一些我學(xué)生時代看過的書吧,我本人是熟悉Windows和linux兩個平臺的開發(fā),這也歸功于我學(xué)生時代看過的一些經(jīng)典書籍,可能有點跑題了,如果不介意,我可以和你說說:

《Windows程序設(shè)計》第五版(第六版以后,這個不再是用Windows Native API寫C程序了,而是轉(zhuǎn)到C#平臺上了),這本書是中國第一代程序的windows啟蒙書籍,你所看到的大多數(shù)桌面軟件,如QQ,的開發(fā)者可能都是通過閱讀這本書啟蒙起來的。

《Windows核心編程》,這本書搞Windows開發(fā)的一定都知道這本書的分量。

《linux內(nèi)核情景分析》毛德操老師的書,非常的實在,另外他寫了一套關(guān)于Windows源碼分析的書,這本書是基于開源的“Windows”ReactOS,書名叫《Windows內(nèi)核情景分析》。

《編譯系統(tǒng)透視:圖解編譯原理》,編譯原理方面的實踐書。

《編程之美》,關(guān)于面試的,主要是一些算法和邏輯思維題實戰(zhàn)。

《重構(gòu):改善既有代碼設(shè)計》,沒有實際寫代碼經(jīng)驗不推薦看。

《程序員的修煉之道——從小工到專家》這本書特別推薦學(xué)生看一下,能大幅度地提高你實際編碼的技巧和編碼風(fēng)格。

《代碼整潔之道》同上

《大話設(shè)計模式》

《Windows PE文件權(quán)威指南》

《Java編程思想》

《Effective C++》系列

《80x86匯編語言程序設(shè)計教程》

總的來看,我學(xué)生時代主要是側(cè)重基礎(chǔ)知識來讀書的。本科四年、碩士三年,多謝這些書幫助我成長,記得大學(xué)畢業(yè)的時候,我光讀書筆記就有滿滿十個筆記本。

工作以后,也讀了像redis、netty、分布式這一類書。但是那都是工作需要吧。由于我扎實的基礎(chǔ),當(dāng)然也可能是因為運(yùn)氣成分吧吧,所以得到一些注重扎實的技術(shù)基礎(chǔ)公司的青睞,給了目前這個階段看起來還不錯的薪資(當(dāng)然可能還有人比我更厲害,那我這里就貽笑大方了,所以請不喜勿噴)。同時非常感謝我一路上遇到的公司和同事給我的技術(shù)上和生活上的幫助。薪資本身不能說明一個人是否成功,我碼這么多字,希望廣大的開發(fā)者注重基礎(chǔ),勿在浮沙筑高臺。尤其是學(xué)生,你有大把讀書的機(jī)會,一定要珍惜大學(xué)時光。畢竟工作以后,尤其是畢業(yè)后,面臨著工作、家庭等各種問題,你可能再也沒有心思和完整的時間去學(xué)習(xí)和提升了。所以前期的積累很重要,畢竟選擇技術(shù)這條路,提高技術(shù)是升職加薪改善生活水平最直接的方法。最后用我學(xué)生時代看到一個技術(shù)前輩寫的一首詩來結(jié)束吧:

仗鼠紅塵已是癲,?

有網(wǎng)平步上青天。

游星戲斗弄日月,

?醉臥云端笑人間。

七載尋夢像撲火,

?九州誰共我瘋癲?

====================================

關(guān)于JAVA方面需要看哪些書籍,我會在我的公眾號再開一個專題來介紹。敬請期待,如果您有興趣,也可以通過下面的公眾號聯(lián)系我。

以上是我的經(jīng)歷,我也曾迷惘和無助過。也有很多朋友找到我,希望我做一些經(jīng)驗分享和職業(yè)規(guī)劃指導(dǎo)。為此我特地開辦了一個微信公眾號『easyserverdev』。如果有任何技術(shù)或者職業(yè)方面的問題需要我提供幫助,可通過這個公眾號與我取得聯(lián)系,此公眾號不僅分享高性能服務(wù)器開發(fā)經(jīng)驗和故事,同時也免費(fèi)為廣大技術(shù)朋友提供技術(shù)答疑和職業(yè)解惑,您有任何問題都可以在微信公眾號直接留言,我會盡快回復(fù)您。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI