本文首發于:https://h2pl.github.io/2018/04/20/java
更多內容請到我的個人博客查看https://h2pl.github.io
本文主要記錄了我從Java初學者到專注于Java后端技術棧的開發者的學習歷程。主要分享了學習過程中的一些經驗和教訓,讓后來人看到,少走彎路,與君共勉,共同進步。如有錯誤,還請見諒。
相關鏈接:
我和技術博客的這一年:https://blog.csdn.net/a724888/article/details/60879893
不論你是不是網民,無論你遠離互聯網,還是沉浸其中;你的身影,都在這場偉大的遷徙洪流中。超越人類經驗的大遷徙,溫暖而無情地,開始了。
《互聯網時代》
一:選擇方向
0上大學前的那些事,讓它們隨風逝去吧。
1 小時候接觸計算機和電腦比較早,對計算機和互聯網有情懷,有興趣,本科時在專業和學校里選擇了學校,當時專業不是計算機,只能接觸到一點點計算機專業課程,所以選擇了考研,花半年時間復習考進了一個還不錯的985,考研經歷有空會發到博客上。
2 本科階段接觸過Java和Android,感覺app蠻有趣的,所以研一的時候想做Android,起初花大量時間看了計算機專業課的教材,效果很差。但也稍微了解了一些計算機基礎,如網絡,操作系統,組成原理,數據庫,軟工等。
3 在沒確定方向的迷茫時期看了大量視頻和科普性文章,幫助理清頭緒和方向。期間了解了諸如游戲開發,c++開發,Android,Java甚至前端等方向,其中還包含游戲策劃崗。
4 后來綜合自身條件以及行業發展等因素,開始鎖定自己的目標在Java后臺方向。于是乎各種百度,知乎,查閱該學什么該怎么學如此類的問題,學習別人的經驗。當然只靠搜索引擎很難找到精品內容,那段時間可謂是病急亂投醫,走了不少彎路。
二:夯實基礎
1 研一的工程實踐課讓我知道了我的基礎不夠扎實,由于并非科班,需要比別人更加勤奮,古語有云,天道酬勤,勤能補拙。趕上了17年的春招實習招聘,期間開始各種海投,各種大廠面試一問三不知,才知道自身差距很大,開始瘋狂復習面試題,刷面經,看經驗等。死記硬背,之乎者也,倒也是能應付一些小公司,可謂是臨陣磨槍不快也光。
2 不過期間的屢屢受挫讓我冷靜思考了一段時間,我再度調研了崗位需求,學習方法,以及需要看的書等資料。再度開工時,我的桌上開始不斷出現新的經典書籍。這還要歸功于我的啟蒙導師:江南白衣,在知乎上看到了他的一篇文章,我的Java后端書架。在這個書架里我找尋到了很多我想看的書,以及我需要學習的技術。
3 遙想研一我還在看的書:教材就不提了,脫離實際并且年代久遠,而我選的入門書籍竟然還有Java web從入門到精通這種爛大街的書籍,然后就是什么Java編程思想啦,深入理解計算機系統,算法導論這種高深莫測的書,感覺有點高不成低不就的意思。要么太過難懂要么過于粗糙,這些書在當時基本上沒能幫到我。
三:書籍選擇
1 江南白衣的后端書架真是救我于水火。他的書架里收錄了許多Java后端需要用到的技術書籍,并且十分經典,雖不說每本都適合入門,但是只要你用心去看都會有收獲,高質量的書籍給人的啟發要優于普通書籍。
2 每個門類的書我都挑了一些。比如網絡的兩本(《tcp ip卷一》以及《計算機網絡自頂向下》),操作系統兩本(一本《Linux內核設計與實現》,一本高級操作系統,推薦先看完《深入理解計算機系統》再來看這兩本),算法看的是《數據結構與算法(Java版)》,Java的四大件(《深入理解jvm虛擬機》,《java并發編程藝術》,《深入java web技術內幕》,《Java核心技術 卷一》這本沒看)。
3 當然還有像《Effective Java》,《Java編程思想》,《Java性能調優指南》這種,不過新手不推薦,太不友好。接著是spring的兩本《Spring實戰》和《Spring源碼剖析》。當然也包括一些redis,mq之類的書,還有就是一些介紹分布式組件的書籍,如zk等。
4 接下來就是擴展的內容了,比如分布式的三大件,《大型網站架構設計與實踐》,《分布式網站架構設計與實踐》,《Java中間件設計與實踐》,外加一本《分布式服務框架設計與實踐》。這幾本書一看,絕對讓你打開新世界的大門,醍醐灌頂,三月不知肉味。
5 你以為看完這些書你就無敵了,就滿足了?想得倒是挺美。這些書最多就是把我從懸崖邊拉回正途,能讓我在正確的道路上行走了。畢竟技術書籍這種東西還是有門檻的,沒有一定的知識儲備,看書的過程也絕對是十分痛苦的。
6 比如《深入理解jvm虛擬機》和《java并發編程藝術》這兩本書,我看了好幾遍,第一遍基本當天書來看,第二遍挑著章節看,第三遍能把全部章節都看了。所以有時候你覺得你看完了一本書,對,你確實看完了,但過段時間是你能記得多少呢。可以說是很少了。
四:談一談學習方法
1 人們在剛開始接觸自己不熟悉的領域時,往往都會犯很多錯誤。剛開始學習Java時,就是摸著石頭過河。從在極客學院慕課上看視頻,到看書,再到看博客,再到工程實踐,也是學習方式轉變的一個過程。
2 看視頻:適合0基礎小白,視頻給你構建一個世界觀,讓你對你要做的東西有個大概的了解,想要深入理解其中的技術原理,只看視頻的話很難。
3 看書:就如上面一節所說,看書是一個很重要的環節。當你對技術只停留在大概的了解和基本會用的階段時,經典書籍能夠讓你深入這些技術的原理,你可能會對書里的內容感到驚嘆,也可能只是一知半解。所以第一遍的閱讀一般讀個大概就可以。一本書要吃透,不僅要看好幾遍,還要多上手實踐,才能變成自己的東西。
4 看博客,光看一些總結性的博客或者是科普性的博客可能還不夠,一開始我也經常看這樣的博客,后來只看這些東西,發現對技術的理解只能停留在表面。高質量的博客一般會把一個知識點講得很透徹,比你看十篇總結都強,例如講jdk源碼的博文,可以很好地幫助你理解其原理,避免自己看的時候一臉懵逼。這里先推薦幾個博客和網站,后面寫復習計劃的時候,會詳細寫出。
博客:江南白衣、酷殼、戰小狼。
網站:并發編程網,importnew。
5 實踐為王,Java后端畢竟還是工程方向,只是通過文字去理解技術點,可能有點紙上談兵的感覺了。還有一個問題就是,沒有進行上手實踐的技術,一般很快就會忘了,做一些實踐可以更好地鞏固知識點。如果有項目中涉及不到的知識點,可以單獨拿出來做一些demo,實在難以進行實踐的技術點,可以參考別人的實踐過程。
五: 實習,提高工程能力的絕佳機會
1 這段時間以后就是實習期了,三個月的W廠實習經歷。半年的B廠實習,讓我著實過了一把大廠的癮。但是其中做的工作無非就是增刪改查寫寫業務邏輯,很難接觸到比較核心的部分。
2 于是乎我花了許多時間學習部門的核心技術。比如在W廠參與數據平臺的工作時,我學習了hadoop以及數據倉庫的架構,也寫了一些博客,并且向負責后端架構的導師請教了許多知識,收獲頗豐。
3 在B廠實習期間則接觸了許多云計算相關的技術。因為部門做的是私有云,所以業務代碼和底層的服務也是息息相關的,比如平時的業務代碼也會涉及到底層的接口調用,比如新建一個虛擬機或者啟動一臺虛擬機,需要通過多級的服務調用,首先是HTTP服務調用,經過多級的服務調用,最終完成流程。在這期間我花了一些時間學習了OpenStack的架構以及部門的實際應用情況,同時也玩了一下docker,看了kubenetes的一些書籍,算是入門。
4 但是這些東西其實離后臺開發還是有一定距離的,比如后臺開發的主要問題就是高并發,分布式,Linux服務器開發等。而我做的東西,只能稍微接觸到這一部門的內容,因為主要是to b的內部業務。所以這段時間其實我的進步有限,雖然擴大了知識面并且積累了開發經驗,但是對于后臺崗位來說還是有所欠缺的。
5 不過將近一年的實習也讓我收獲了很多東西,大廠的實習體驗很好,工作高效,團隊合作,版本的快速迭代,技術氛圍很不錯。特別是在B廠了可以解到很多前沿的技術,對自己的視野擴展很有幫助。
六:實習轉正,還是準備秋招?
1 離職以后,在考慮是否還要找實習,因為有兩份實習經歷了,在考慮要不要靜下心來刷刷題,復習一下基礎,并且回顧一下實習時用到的技術。同一時期,我了解到騰訊和阿里等大廠的實習留用率不高,并且可能影響到秋招,所以當時的想法是直接復習等到秋招內推。因此,那段時間比較放松,沒什么復習狀態,也導致了我在今年春招內推的階段比較艱難。
2 因為當時想著沉住氣準備秋招,所以一開始對實習內推不太在意。但是由于AT招人的實習生轉正比例較大,考慮到秋招的名額可能更少,所以還是不愿意錯過這個機會。因為開始系統復習的時間比較晚,所以投的比較晚,擔心準備不充分被刷。這次找實習主要是奔著轉正去的,所以只投了bat和滴滴,京東,網易游戲等大廠。
3 由于投遞時間原因,所以面試的流程特別慢。并且在筆試方面還是有所欠缺,刷題刷的比較少,在線編程的算法題還是屢屢受挫。這讓我有點后悔實習結束后的那段時間沒有好好刷題了。
七:調整心態,重新上路
1 目前的狀態是,一邊刷題,一邊復習基礎,投了幾家大廠的實習內推,打算選一個心儀的公司準備轉正,但是事情總是沒那么順利,微軟,頭條等公司的筆試難度超過了我的能力范圍,沒能接到面試電話。騰訊投了一個自己比較喜歡的部門,可惜崗位沒有匹配上,后臺開發被轉成了運營開發,最終沒能通過。阿里面試的也不順利,當時投了一個牛客上的螞蟻金服內推,由于投的太晚,部門已經招滿,只面了一面就沒了下文,前幾天接到了菜鳥的面試,這個未完待續。
2 目前的想法是,因為我不怎么需要實習經歷來加分了,所以想多花些時間復習基礎,刷題,并且鞏固之前的項目經歷。當然如果有好的崗位并且轉正機會比較大的話,也是會考慮去實習的,那樣的話可能需要多擠點時間來復習基礎和刷題了。
3 在這期間,我會重新梳理一下自己的復習框架,有針對性地看一些高質量的博文,同時多做些項目實踐,加深對知識的理解。當然這方面還會通過寫博客進行跟進,寫博客,做項目。前陣子在牛客上看到一位牛友CyC2018做的名為interview notebook的GitHub倉庫,內容非常好,十分精品,我全部看完了,并且參考其LeetCode題解進行刷題。
4 受到這位大佬的啟發,我也打算做一個類似的代碼倉庫或者是博客專欄,盡量在秋招之前把總結做完,并且把好的文章都放進去。上述內容只是本人個人的心得體會,如果有錯誤或者說的不合理的地方,還請諒解和指正。希望與廣大牛友共勉,一起進步。