本文主要記錄了我從Java初學者到專注於Java後端技術棧的開發者的學習歷程。主要分享了學習過程中的一些經驗和教訓,讓後來人看到,少走彎路,與君共勉,共同進步。如有錯誤,還請見諒。
我的GitHub:
文章首發於我的個人部落格:
更多關於Java後端學習的內容請到我的CSDN部落格上檢視:
相關連結:我和技術部落格的這一年:blog.csdn.net/a724888/art…
不論你是不是網民,無論你遠離網際網路,還是沉浸其中;你的身影,都在這場偉大的遷徙洪流中。超越人類經驗的大遷徙,溫暖而無情地,開始了。 -----《網際網路時代》
選擇方向
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 受到這位大佬的啟發,我也打算做一個類似的程式碼倉庫或者是部落格專欄,儘量在秋招之前把總結做完,並且把好的文章都放進去。上述內容只是本人個人的心得體會,如果有錯誤或者說的不合理的地方,還請諒解和指正。希望與廣大牛友共勉,一起進步。