一點簡單學習和秋招經驗扬卷,希望可以對后來的同學有一些幫助,特別是對一些找不到學習方向的同學吧酸钦。
筆者是211本怪得,985碩,非科班卑硫,無實習徒恋,無論文,我主要使用的語言是C++欢伏,投遞的都是后端開發(fā)的崗位入挣,拿到的offer有:字節(jié)跳動,快手硝拧,騰訊云径筏,百度,猿輔導障陶,華為滋恬,網易雷火和阿里云。
下面就學習方法抱究,實習和面試技巧三個方面分享一下我的經驗
1.學習方法
1.1 看書
我并不是計算機專業(yè)的恢氯,學習C++大概是從去年年初開始,我學習的主要方式是看書和寫代碼鼓寺,先說一下學習流程勋拟,書單在最后一起給出:
在剛開始學習的時候,看書的重點在于了解語言基礎和數據結構妈候。因為有了這兩樣技能敢靡,就能夠做一些算法題了,可以在平時看書累的時候做一些有意思的算法題州丹,也能提高自己寫代碼的熟練度醋安。
在了解完數據結構之后我看的第三本書是APUE杂彭,這本書看起來可能很痛苦,不過根據我的經驗這本書上的內容除了一些比較重要的東西吓揪,并不需要全部記下來亲怠,讀一遍,能夠理解到書上的系統(tǒng)調用的作用就OK了柠辞,對一些重要的接口(fork团秽,select,pthread等)叭首,能夠理解到內核是怎么實現的就OK了习勤,可以把這本書當做手冊來使用。
看完APUE焙格,加上之前的知識其實就具備了在linux端進行C++開發(fā)的能力图毕。想要自己直接寫出一個好的項目是很困難的,所以我推薦抄眷唉,陳碩的muduo是一個很好的學習例子予颤,配合他的書一起食用更佳。吃透muduo庫的話冬阳,就能夠對后端的reactor模型有一個比較清晰的認知蛤虐,幫助會非常大,看完之后可以自己實現一次muduo肝陪,之后可以考慮對muduo進行一些二次開發(fā)
在寫muduo的過程中因為還遇到了網絡相關的問題驳庭,所以我還看了計網相關的書籍。
因為在linux端的編程沒有合適的IDE氯窍,寫完之后需要使用G++工具配合makefile文件進行項目的編譯鏈接饲常。為了搞懂這個鏈接的過程,我又專門看了相關的書籍荞驴,《程序員的自我修養(yǎng)》不皆。
到此為止學習算是到了一個階段。在后面我又對自己的基礎進行了一些補充熊楼,做軟件相關的不能完全不懂操作系統(tǒng)吧霹娄。所以我又看了csapp和操作系統(tǒng)相關的書籍,apue中其實也有一些操作系統(tǒng)的知識鲫骗,可以相互結合犬耻。
到此為止,對計算機基礎知識的了解就應該不錯了执泰,能夠有一個良好的語言基礎枕磁,熟悉數據結構,計網和操作系統(tǒng)术吝,了解編譯鏈接的過程计济,能夠正常使用linux系統(tǒng)茸苇,熟悉后端服務器模型。在此之后的學習我感覺就見仁見智了沦寂,對什么感興趣就去學什么学密。舉個例子,對redis感興趣就可以去看相關的書籍传藏,會發(fā)現redis其實就是一個reactor模型腻暮,有之前muduo的基礎,會更好的理解redis是如何單線程高并發(fā)的毯侦。對數據庫感興趣的可以去看相關的資料哭靖,leveldb的源碼等等。對分布式感興趣也可以去看看各種分布式算法的paper侈离,有興趣可以自己實現试幽。
下面列一下基礎書單:
C/C++: 《C++ primer》
數據結構:《數據結構、算法與應用》《STL源碼剖析》
計算機網絡:《計算機網絡自頂向下方法》
操作系統(tǒng):《深入理解計算機系統(tǒng)》(強推X阅搿B詹荨!蔗坯!神書)、 《操作系統(tǒng):精髓與設計原理》 《apue》
鏈接:《程序員的自我修養(yǎng)》
應用:《linux多線程服務端編程》《linux高性能服務器編程》
其他(擴寬眼界類書籍燎含,但深度不足):《圖解HTTP》《大型網站技術架構》《大型分布式網站架構設計與實踐》《從零開始學架構》
除了這些之外還看過《effective C++》宾濒,但是我沒有太多的收貨。也看了《深度探索C++對象模型》屏箍,這本書很晦澀绘梦,關于C++內存模型,虛函數赴魁,虛表卸奉,虛繼承相關的其實可以看看博客,基本也就夠了颖御。此外也看過《UNP》榄棵,感覺也沒有特別多的收獲,不過還是推薦看一看前面講TCP和UDP編程的章節(jié)潘拱。
除去這些之外還看過redis疹鳄,分布式和微服務相關的書籍,這些學習方向的選擇可以很看個人愛好芦岂,我就不多推薦了
1.2 刷題
在這個行業(yè)越來越卷的情況下瘪弓,刷題就變得越來越重要了,基本上每家公司的面試必有手撕代碼禽最。關于刷題的經驗腺怯,這個我沒有什么特別的心得渣触,有些說按題號刷,有些說分類別刷务荆,看自己習慣吧暴区。
堅持參加你能夠明顯感覺到自己的進步。
1.3 項目
關于項目栓票,其實根據我的經驗决左,在找實習的時候項目并不是那么重要,更多的面試官會更重視基礎走贪,不過有一個讓面試官感興趣的項目也是不錯的佛猛,因為聊項目是你的主場優(yōu)勢,大概率能夠表現得很好(前提是對自己的項目很熟悉)坠狡。
在秋招中继找,沒有實習的同學來說,項目就比較重要了逃沿,因為一般面試官都是在聊完基礎之后婴渡,根據項目來展開聊,或者直接根據項目聊凯亮。讓你的項目能夠吸引住面試官就很重要了边臼。
關于做什么項目,其實可以有一些自己的想法假消,把自己學過的知識和框架用起來柠并,去實現一個自己想做的東西,而不是在網上去抄一個千篇一律的項目富拗。
比如muduo臼予,它本身確實是一個特別好的項目,但是當大家都使用這個項目的時候啃沪,你和大家一樣粘拾,就沒法表現出你自己的特點了。如果使用muduo作為項目创千,其實可以在它的更上層做一些業(yè)務邏輯的實現缰雇,去實現一個具備特定功能的服務器,比如rtsp服務器追驴,或者實現成為一個微服務的中間件寓涨,實現一個服務名字管理系統(tǒng)等。
因為我個人比較喜歡分布式氯檐,在看完raft算法后戒良,我對其進行了一次實現,底層的信息通信就是使用muduo(做了一些修改冠摄,需要server可以主動發(fā)起連接)實現的糯崎。如果還有余力几缭,可以想辦法對你的raft進行優(yōu)化,比如使用readIndex算法進行讀優(yōu)化等沃呢。
1.4 其他
除了看書之外可以多看博客年栓,關注一些好的技術公眾號等,可以和書籍學習的知識相互印證
學習的時候需要多想薄霜,盡量能夠將知識融會貫通
在完成前期的基礎學習后某抓,應該找到自己的學習方向,看完一本書之后去實踐惰瓜,實踐之后會用更深的體會否副,為了解決實踐中的問題去學習新的知識,形成這樣一個良性循環(huán)崎坊。
出去底層技術相關的知識可以看一看一些高屋建瓴的書籍备禀,擴展自己的視野,比如《大型網站技術架構》《大型分布式網站架構設計與實踐》奈揍,看這些書可能不會立刻獲得一個技術上的提升曲尸,但是可以開闊眼界,了解一些負載均衡男翰,token另患,cookie,sql注入蛾绎,csrf等常見的web相關知識柴淘。
總的來說:多看多寫多想,眼到手到心到秘通。多思考怎么才能學出自己的特點,讓自己和別人不一樣敛熬。
2.實習
在這個越來越卷的大環(huán)境里面肺稀,有個實習肯定會很好,特別是大廠實習应民。不過因為某些原因话原,我并沒有實習過。但是我想說的是即使是不能實習的同學也可以參加春招的實習面試诲锹,有以下幾個好處:
某些公司通過了實習面試繁仁,但是不去實習可以在秋招獲得優(yōu)待(阿里和字節(jié)某些部門直通終面)
就算沒有優(yōu)待,表現不錯混個臉熟也是好的归园,可能在提前批更容易被撈起來(提前批一般沒筆試黄虱,看簡歷撈人來面試)
可以靠面試給自己查漏補缺,找到自己的不足庸诱,還可以詢問面試官給自己的建議(不管能不能通過都穩(wěn)賺不賠)
就算掛了捻浦,一般春招投遞過并不會影響正式的秋招晤揣。
能夠對自己的實力有一個大概的摸底,對自己的水平有一個清晰的認知朱灿。這樣在秋招中能夠做出更好地選擇昧识。
所以極力推薦即使無法實習的同學也可以參加春招的實習生面試,當然能參加實習就更好了盗扒。
3.面試
對于秋招跪楞,實力是很重要的一部門,但是面試的技巧也是很重要的侣灶。其實面試就是和面試官聊天甸祭,你倆聊得高興,很聊得來炫隶,自然就更容易過淋叶。你學習的知識并不是面面俱到,如何引導面試官在你擅長的領域提問伪阶,這些都是需要技巧的煞檩。
3.1 從多方面回答問題
對于面試官的問題,可以盡量深入的去回答栅贴,不要只有干癟癟的幾句話斟湃,結合自己所學過的所有知識,盡量從更廣更深的角度回答檐薯。
舉個例子:比如經典老問題凝赛,進程和線程的區(qū)別。一句話總結坛缕,進程是資源分配的基本單位墓猎,線程是執(zhí)行流。只有這一句話肯定是不可以的赚楚,我們可以結合學過的知識從多方面進行回答毙沾,比如系統(tǒng)給進程分配了什么資源,線程又是如何共享進程資源的宠页,線程有哪些自己的私有資源左胞,在編程中多進程和多線程的區(qū)別,在linux系統(tǒng)中進程和線程又是如何實現的举户,進程和線程又是如何創(chuàng)建的烤宙,他們之間的區(qū)別和聯系都是什么。
盡可能從更多的方面回答面試官的問題俭嘁,只要面試官不說停躺枕,你可以一直往下說。當然必須要切題,不要扯得離題太遠屯远。
3.2 引導面試官
在我們回答一個問題的時候蔓姚,按照上述的辦法,盡可能的多說慨丐,但是在說的過程中可以給面試官拋出下一個可以問的點坡脐,這個你主動拋出的點必然是你熟悉的,這樣可以引導面試官房揭,一直在你熟悉的領域提問备闲。
舉個例子:比如在回答進程線程區(qū)別的時候,可能會討論到進程分配資源捅暴,有進程空間恬砂,其實可以順道提一句這個進程空間其實是一個虛擬內存空間,資源存放的地址是虛擬地址蓬痒,并不是真實使用的物理頁面地址泻骤。面試官很有可能會接著這個點繼續(xù)問下去。
3.3 面試過程中態(tài)度積極梧奢,不卑不亢
對于會回答的問題認真回答狱掂,對于不會的問題也不用緊張,畢竟我們沒辦法面面俱到亲轨,告訴面試官自己不了解即可趋惨。在解決面試官出的場景題時可以積極溝通,不要一個人埋頭苦想讓場面尬住惦蚊,可以讓面試官引導自己一下器虾。
面試問題整理:
有C++和計算機相關的問題歡迎大家進群交流
Linux、C/C++技術交流群:【960994558】整理了一些個人覺得比較好的學習書籍蹦锋、大廠面試題兆沙、和熱門技術教學視頻資料共享在里面(包括C/C++,Linux莉掂,Nginx葛圃,ZeroMQ,MySQL巫湘,Redis,fastdfs昏鹃,MongoDB尚氛,ZK,流媒體洞渤,CDN阅嘶,P2P,K8S,Docker讯柔,TCP/IP抡蛙,協程,DPDK等等.)魂迄,有需要的可以自行添加哦粗截!~
希望可以幫到后來的同學們,祝大家新年快樂捣炬,新的一年都能找到滿意的工作熊昌!