搜尋
首頁Javajava教程資深大牛給予Java初學者的學習路線建議

資深大牛給予Java初學者的學習路線建議

Oct 10, 2017 am 09:34 AM
java初學者學習

Java學習這一部分其實也算是今天的重點,這一部分用來回答很多群組裡的朋友所問過的問題,那就是你是如何學習Java的,能不能給點建議?今天我打算來點乾貨,因此咱們就不說一些學習方法和技巧了,直接來談每個階段要學習的內容甚至是一些書籍。這一部分的內容,同樣適用於一些希望轉行到Java的同學。

  在大家看之前,我要先聲明兩點。 1.由於我自己是Java後端開發出身,因此所推薦的學習內容是Java Web和Java後端開發的路線,非Java Web和Java後端開發的同學請適當參考其學習思想即可,切勿照搬。 2.以下對於【第一部分】的推薦內容,目的是讓你盡快成為一個可以參加工作的Java開發者,更適用於處於待業狀態,準備轉行Java的同學。

  如果你是在校學生,務必在學好基礎(例如電腦系統、演算法、編譯原理等等)的前提下,再考慮去進行下面的學習。

  第一部分:對於尚未做過Java工作的同學,包括一些在校生以及剛準備轉行Java的同學。

  一、Java基礎先去找一個Java的基礎教學學一下,這裡可以推薦一個Java學習交流的QQ群組你可以到這個群組裡找對應的影片教學。學習Java基礎的時候,應該盡量多動手,很多時候,你想當然的事情,等你寫出來運行一下,你就會發現不是這麼回事兒,不信你就試試。學完以上內容以後,你應該對Java有一個基本的了解了,你可以用Java語言寫出一些簡單的程序,並且你用的是最簡單的編輯器,比如記事本。這時候,不要急著進入下一部分,留下幾天好好寫一些程序,盡可能熟悉這些基礎內容。

  二、Web開發等你寫上幾天程式以後,你往往會比較迷茫,因為你寫的東西似乎看起來毫無用處,比如實現一個簡單的計算器,讀取一個文件等。這時候你應該去學著寫一些讓你覺得有意思的東西了,所以你應該學習更多的知識。這些內容主要是Web開發相關的內容,包括HTML/CSS/JS(前端頁)、Servlet/JSP(J2EE)以及Mysql(資料庫)相關的知識。它們的學習順序應該是從前到後,因此最先學習的應該是HTML/CSS/JS(前端頁面),這部分內容你可以去上面的那個runoob網站上找。

  你可以試著自己寫一些頁面,當然,你可以盡你最大的努力讓它變得最漂亮。這部分內容對於後端Java來說,理論上並不是特別重要,但至少要達到可以自己寫出一些簡單頁面的程度。接下來,你需要學習的是Servlet/JSP(J2EE)部分,這部分是Java後端開發必須非常精通的部分,因此這部分是這三部分中最需要花精力的,而且這個時候,你要學會使用開發工具,而不能再使用記事本了,可以選擇eclipse。當你下載安裝好eclipse以後,請影片中的教學一步一步去學習,一定要多動手。關於Servlet/Jsp部分影片的選擇,業界比較認可馬士兵的視頻,因此推薦給大家。

  當然了,我本人並沒有看過他的視頻,所以不好說的太絕對,如果大家自己有更好的選擇,可以堅持自己的,不要被我幹擾。原本我也是打算出教學影片的,但是由於時間問題,還是決定放棄了。但如果你看影片的過程中遇到了問題,歡迎來我的交流群提問,或者去鬥魚觀看我的直播提出你的問題,直播地址和群號都在我的個人博客左側。最後一步,你需要學會使用資料庫,mysql是個不錯的入門選擇,而且Java領域裡主流的關係型資料庫就是mysql。這部分一般在你學習Servlet/Jsp的時候,就會接觸到的,其中的JDBC部分就是資料庫相關的部分。你不只要學會使用JDBC操作資料庫,還要學會使用資料庫客戶端工具,例如navicat,sqlyog,二選一即可。

  三、開發框架當你學會以上內容以後,這個時候你還不足以參加工作,你還需要繼續深造。公司裡為了提高開發的效率,會使用一些Java Web框架,因此你還需要學習一些開發框架。目前比較主流的是SSM框架,即spring、springmvc、mybatis。你需要學會這三個框架的搭建,並用它們做出一個簡單的增刪改查的Web專案。你可以不理解那些配置都是什麼意義,以及為什麼要這麼做,這些留著後面你去了解。

  但你一定要可以快速的利用它們三個搭建出一個Web框架,你可以記錄下你第一次搭建的過程,相信我,你一定會用到的。還要提一句的是,你在搭建SSM的過程中,可能會經常接觸到一個叫做maven的工具。這個工具也是你以後工作當中幾乎是必須要使用的工具,所以你在搭建SSM的過程中,也可以順便了解一下maven的知識。在你目前這個階段,你只需要在網路上了解一下maven基本的使用方法即可,一些高階的用法隨著你工作經驗的增加,會逐漸接觸到的。

  四、找工作當你完成開發框架的學習以後,你就該找工作了,在校的找實習,畢業的找全職。同時,在找工作的同時,你不應該停下你的學習,準確的說,是你在以後都不能停下學習。上面這些內容你只是囫圇吞棗的學會了使用,你可以逐步嘗試著去了解更多的東西,網絡是你最重要的老師。

  第二部分:對於參加工作一年以內的同學。恭喜你,這個時候,你已經擁有了一份Java的工作。 這個階段是你成長極快的階段,而且你可能會經常加班。但加班不代表你就可以鬆懈了,永遠記得我說的那句話,從你入行那一刻起,你就要不停的學習。在這一年裡,你至少需要看完《Java程式設計思想》這本書。這本書的內容是幫助你對Java有更深入的了解,是Java基礎的升級版。這本書很厚,當初看這本書,我花了整整三個月。正常速度的話,應該可以在半年左右看完。我這裡不要求過高,只要你在一年以內把這本書看完即可。當然了,我所說的看完,是充分吸收,而不是讀一遍就完事了,因此有些內容你可能會看不止一遍。總而言之,這個階段的核心學習想法就是,在工作中實踐,並且更深入的了解Java基礎。

  第三部分:對於參加工作1年到2年的同學。這部分時段的同學,已經對Java有了更深入的了解。 但是對於物件導向的體會可能還不夠深刻,程式設計的時候還停留在完成功能的層次,很少會去考慮設計的問題。於是這個時候,設計模式就來了。我當時看的是《大話設計模式》這本書,並且寫了完整版的設計模式部落格。因此,我要求大家,最多在你工作一年的時候,必須開始寫博客,而設計模式就是你博客的開端。

  請記住,我所提的基本都是最低要求,因此不要有任何鬆懈的心理,否則五年後,你不要去羨慕別人高於你的工資,也不要去羨慕別人進入了某公司。這一年,你必須對於設計模式瞭如指掌,《大話設計模式》可以作為你的開端。此外,設計模式並不是你今年唯一的任務,你還需要看一些關於程式碼編寫優化的書。例如《重構 改善既有程式碼的設計》,《effective java》。總而言之,這個階段,你的核心任務就是提升你的程式碼能力,要能寫出一手優雅的程式碼​​。

  第四部分:對於參加工作2年到3年的同學有的同學在這個時候覺得自己已經很牛逼了,於是忍不住開始慢慢鬆懈。 請記住,你還嫩的多。這個階段,有一本書是你必須要看的,它叫做《深入理解Java虛擬機》。這本書絕對是Java開發者最重要的書,沒有之一。在我眼裡,這本書的重要性還要高於《Java程式設計思想》。這本書的內容是幫助你全面的了解Java虛擬機,在這個階段,你一定已經知道Java是在JVM之上運行的。所以,對於JVM,你沒有任何理由不了解它。

  另外,在過去2年的工作當中,你肯定或多或少接觸過並發。這時候,你應該去更深入的了解並發相關的知識,而這部分內容,我比較推薦《Java並發程式設計實戰》這本書。只要你把這本書啃下來了,並發的部分基本上已經了解了十之六七。同時,這個階段你要做的事情還遠遠不止如此。這時候,你應該對於你所使用的框架應該有了更深入的了解,對於Java的類別庫也有了更深入的了解。

  因此,你需要去看一些JDK中的類別的源碼,也包括你所使用的框架的源碼。這些原始碼能看懂的前提是,你必須對設計模式非常了解。否則的話,你看原始碼的過程中,永遠會有這樣那樣的疑問,這段程式碼為什麼要這麼寫?為什麼要定義這個接口,它看起來好像很多餘?由此也可以看出,這些學習的過程是環環相扣的,如果你任何一個階段拉下來了,那麼你就真的跟不上了,或者說是一步慢步步慢。而我很負責的告訴你,我在這個階段的時候,所學的東西遠多於所羅門在此所列的。

  因此千萬不要覺得你已經學的很多了,我所說的這些都只是最低要求,不光是我,很多人在這個時間段所學習的內容都遠超本文的範圍。如果你無法跟上節奏的話,若干年後,如果不是程序猿市場還不錯的話,你很可能不只是薪水比別人低,公司沒別人好,而是根本找不到工作。總而言之,這個階段,你需要做的是深入了解Java底層和Java類別函式庫(例如並發那本書就是Java並發包java.concurrent的內容),也就是JVM和JDK的相關內容。而且還要更深入的去了解你所使用的框架,方式比較推薦看源碼或看官方文件。另外,還有一種學習的方式,在2年這個階段,也應該啟用了,那就是造輪子。不要聽信那套「不要重複造輪子」的論調,那是公司為了節省時間成本編造出來的。重複造輪子或許對別人沒有價值,因為你造的輪子可能早就有了,而且一般情況下你造出來的輪子還沒有現存的好。

  但是對別人沒有價值,不代表對自己沒有價值。一個造輪子的過程,是一個從無到有的過程。這個過程可以對你進行系統的鍛煉,它不僅考察你的編碼能力,還考察你的框架設計能力,你需要讓你的輪子有足夠好的擴展性、健壯性。而且在造輪子的過程中,你會遇到各種不同的難題,這些難題往往又是你學習的契機。當你把輪子造好的時候,你一定會發現,其實你自己收穫了很多。所以,這個階段,除了上面提到的了解JVM、JDK和框架源碼以外,也請你根據別人優秀的源碼,去造一個任何你能夠想像出來的輪子。

  第五部分:參加工作3年到4年的同學這個階段的同學,提升已經是很難了,而且這個階段的學習往往會比較多樣化。 因為在前3年的過程中,你肯定或多或少接觸過一些其它的技術,例如大數據、分散式快取、分散式訊息服務、分散式運算、軟負載平衡等等。這些技術,你能精通任何一項,都將是你未來面試時巨大的優勢,因此如果你對某一項技術感興趣的話,

  這個時候可以深入去研究一下。這項技術不一定是你工作所用到的,但一定是相關的。而且在研究新技術時,切忌朝三暮四。有的同學今天去整整大數據,搞搞Hadoop、hbase一類的東西。過不了一段時間,就覺得沒意思,又去研究分散式緩存,例如redis。然後又過不了一段時間,又去研究分散式計算,像是整整Mapreduce或是storm。結果到最後,搞得自己好像什麼都會一樣,在履歷上大言不慚的寫上大數據、分散式快取、分散式運算都了解,其實任何一個都只是浮於表面。到時候面試官隨便一問,就把你給識破了。

  一定要記住,作為一個程序猿,平日里所接觸的技術可能會很多,但是想要讓一門技術成為你的優勢,那麼一定是你對這門技術的了解強過絕大多數人才行。因此在這個階段,你就不能再簡單的去學習前3年的內容了,雖然前面的學習如果還不夠深入的話依舊要繼續,但這個時候你應該更多的考慮建立你的優勢,也可以稱為差異性。差異性相信不難理解,就是要讓自己變得與眾不同。你前面三年的學習足夠你成為一個基本合格的Java開發者,但你離成為一名優秀的Java開發者還有很大的距離。

  所謂優秀,即能別人所不能。而你前三年所學習的內容,是很多做過幾年的Java開發都能夠掌握的。那麼為了讓自己有差異性,你就需要另闢蹊徑,找一個方向深入研究下去,以期在將來,你能夠成為這個領域的專家,比如分散式運算領域的專家,大數據領域的專家,並發領域的專家等等。此外,你除了建立你的差異性之外,還要去彌補你基礎上的不足,直到現在,我都沒有提及基礎知識。原因是基礎是很枯燥無味的,學的太早不僅容易懵逼,而且懵逼的同時還容易產生心理陰影,以至於以後再不想去研究這些基礎。但基礎又是你深入研究一些領域時所必須掌握的,例如你去研究分散式計算,你不懂演算法你玩個毛毛?例如你去做分散式緩存,你對電腦系統的記憶體不了解,你如何去做緩存?

  如果你的基礎本來就非常強,那麼恭喜你,相信你在之前的工作中已經充分體會到了這些基礎對你的幫助。但我相信大部分人的基礎都很弱,即使是科班畢業的人,很多人也不敢說自己當初的基礎學的多麼強大,比如算法、計算機系統原理、編譯原理這些。但是每個人時間都是有限的,而且這些基礎的書籍每一本讀下來,沒個一年半載的,還真拿不下來,因此還是要有所抉擇的。雖然藝多不壓身,但問題是藝術多是有代價的,是需要你付出時間和精力的,而我個人更贊成在同等代價的情況下獲取最大的收穫。

  首先,我比較推崇的基礎書籍有三本,分別是《深入理解電腦系統》,《tcp/ip詳解 卷一、二、三》,《資料結構與演算法》。其中TCP/IP有三本書,但我們這裡把這三本看成是一本大書。這三本分別適合三種人,《深入理解電腦系統》比較適合一直從事Java Web開發和APP後端開發工作的人。 《tcp/ip詳解 卷一、二、三》比較適合做網路程式設計的人群,例如你使用netty去開發的話,那麼就要對TCP/IP有更深入的了解。而《資料結構與演算法》這本書,則比較適合做計算研究工作的人,例如剛才提到的分散式計算。另外,我要強調的是,這裡所說的適合,並不是其它兩本對你就沒有用。例如你做Java Web和APP後端開發,《tcp/ip詳解 卷一、二、三》這本書對你的作用也是很大的。這裡只是分出個主次關係而已,你要是時間足夠的話,能把三本都精讀那當然最好不過了。

  但如果時間有限的話,那麼就先挑對你幫助最大的書去讀。理論上來講,這一年你能把這三本其中一本精讀下來,就已經非常厲害了。有了基礎,有了前面的工作經驗,你就可以開拓屬於你的領域了。在這一年裡,一定要規劃好自己的領域,建立好自己的優勢,製造出差異性。如果你對自己的領域不夠清晰的話,隨著你工作的時間日益增多,你接觸的技術會越來越多,這個時候,你很容易被淹死在科技的海洋裡,看似接觸的技術越來越多,會用的也越來越多,但你毫無優勢。有的同學可能會問,「我,我也不知道我的領域是什麼啊?怎麼​​辦呢?」對於這種人,我只想說,「臥槽,這還問我?要不乾脆我替你學習得了,好不好?的見解,這個時候,技術上你應該已經遇到瓶頸了。

這個時候不要急著提升自己的技術,已經是時候提高你的影響力了,你可以試著去一些知名的公司去提升你的背景,你可以發表一些文章去影響更多的人。當然,你也可以去Github創建一個屬於你的開源項目,去打造自己的產品。

  這次的開源專案不同於之前的造輪子,你這個時候是真的要去盡量嘗試造出來真正對別人有價值的輪子。技術學到這個階段,很容易遇到瓶頸,而且往往達到一定程度後,你再深入下去的收效就真的微乎其微了,除非你是專門搞學術研究的。然而很可惜,大部分程序猿做不到這一步,那是科學家會做的事。這時候提高影響力不只是因為技術上容易遇到瓶頸,更多的是影響力可以為你創造更多的機會。程序猿在某種程度上和明星很像,一個好的電視劇和電影就可以成就一批明星,而程序猿有的時候也是,一個好的項目就可以成就一群程序猿。例如國內幾個膾炙人口的項目,像淘寶、支付寶、QQ、百度、微信等等。這每一個項目,都成就了一批程序猿。我敢說,這裡面任何一個項目,如果你是它的核心開發,光是這樣一個Title,就已經是你非常大的優勢。更何況不只如此,Title說到底也是個名頭,更重要的是,這種專案在做的時候,對你的歷練一定也是非常給力的。

  而你如果想要參與這樣的項目,除了靠運氣之外,影響力也是很重要的一個手段。例如你在分散式運算領域有一定的影響力,那麼如果有什麼好的關於分散式運算的項目,對方就很可能會邀請你。就算人家不邀請你,你自己主動去面試的時候,對方如果知道你在這個領域的影響力,也一定會起到很大的作用,而這個作用,甚至可能會超過你現在的技術能力。所以,在這個階段,你最大的任務就是提升自己的影響力,為自己未來十年的工作生涯那一天做準備。如果你能夠靠你的影響力和以前累積的技術,參與到一個偉大的專案當中,那麼你後面的五年也就有著落了。當然了,我現在滿打滿算,做程序猿也就4年半不到,因此關於4年到5年這一部分,我的見解不一定是對的,就算是對的,也不一定是適合任何人的。

  所以,希望大家自己有的判斷力,去決定到底該如何度過這一年。結語本文到此就基本結束了,整篇文章很長,但其實主要說了兩部分內容,一個是社招面試的準備,一個是Java生涯的學習。關於這兩部分,我已經給了自己的見解,但是還是那句話,每個人吸收知識的時候,都要有抽取精華,去除糟粕的能力。我所說的,可能有些是對的,有些是錯的,有些是適合你的,有些是不太適合你的,你要自己能夠判斷。其實你在生活和工作當中也是一樣的,你身邊的人形色色,有的人你喜歡,有的人你很討厭。但其實你喜歡的人也有缺點,你討厭的人也有優點。你要學會從你討厭的人身上學會他的優點,千萬不要一棒打死,這只會讓你失去很多學習成長的機會。好了,說了這麼多了,就到此為止吧,希望本文可以幫助到作為程式猿或即將成為程式猿的你。

以上是資深大牛給予Java初學者的學習路線建議的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
Java開發的哪些方面取決於平台?Java開發的哪些方面取決於平台?Apr 26, 2025 am 12:19 AM

JavadevelovermentIrelyPlatForm-DeTueTososeVeralFactors.1)JVMVariationsAffectPerformanceNandBehaviorAcroSsdifferentos.2)Nativelibrariesviajnijniiniininiinniinindrododerplatefform.3)

在不同平台上運行Java代碼時是否存在性能差異?為什麼?在不同平台上運行Java代碼時是否存在性能差異?為什麼?Apr 26, 2025 am 12:15 AM

Java代碼在不同平台上運行時會有性能差異。 1)JVM的實現和優化策略不同,如OracleJDK和OpenJDK。 2)操作系統的特性,如內存管理和線程調度,也會影響性能。 3)可以通過選擇合適的JVM、調整JVM參數和代碼優化來提升性能。

Java平台獨立性有什麼局限性?Java平台獨立性有什麼局限性?Apr 26, 2025 am 12:10 AM

Java'splatFormentenceHaslimitations不包括PerformanceOverhead,versionCompatibilityIsissues,挑戰WithnativelibraryIntegration,Platform-SpecificFeatures,andjvminstallation/jvminstallation/jvmintenance/jeartenance.therefactorscomplicatorscomplicatethe“ writeOnce”

解釋平台獨立性和跨平台發展之間的差異。解釋平台獨立性和跨平台發展之間的差異。Apr 26, 2025 am 12:08 AM

PlatformIndependendecealLowsProgramStormonanyPlograwsStormanyPlatFormWithOutModification,而LileCross-PlatFormDevelopmentRequiredquiresMomePlatform-specificAdjustments.platFormIndependence,EneblesuniveByjava,EnablesuniversUniversAleversalexecutionbutmayCotutionButMayComproMisePerformance.cross.cross.cross-platformd

即時(JIT)彙編如何影響Java的性能和平台獨立性?即時(JIT)彙編如何影響Java的性能和平台獨立性?Apr 26, 2025 am 12:02 AM

JITcompilationinJavaenhancesperformancewhilemaintainingplatformindependence.1)Itdynamicallytranslatesbytecodeintonativemachinecodeatruntime,optimizingfrequentlyusedcode.2)TheJVMremainsplatform-independent,allowingthesameJavaapplicationtorunondifferen

為什麼Java是開發跨平台桌面應用程序的流行選擇?為什麼Java是開發跨平台桌面應用程序的流行選擇?Apr 25, 2025 am 12:23 AM

javaispopularforcross-platformdesktopapplicationsduetoits“ writeonce,runany where”哲學。 1)itusesbytiesebyTecodeThatrunsonAnyJvm-備用Platform.2)librarieslikeslikeslikeswingingandjavafxhelpcreatenative-lookingenative-lookinguisis.3)

討論可能需要在Java中編寫平台特定代碼的情況。討論可能需要在Java中編寫平台特定代碼的情況。Apr 25, 2025 am 12:22 AM

在Java中編寫平台特定代碼的原因包括訪問特定操作系統功能、與特定硬件交互和優化性能。 1)使用JNA或JNI訪問Windows註冊表;2)通過JNI與Linux特定硬件驅動程序交互;3)通過JNI使用Metal優化macOS上的遊戲性能。儘管如此,編寫平台特定代碼會影響代碼的可移植性、增加複雜性、可能帶來性能開銷和安全風險。

與平台獨立性相關的Java開發的未來趨勢是什麼?與平台獨立性相關的Java開發的未來趨勢是什麼?Apr 25, 2025 am 12:12 AM

Java將通過雲原生應用、多平台部署和跨語言互操作進一步提昇平台獨立性。 1)雲原生應用將使用GraalVM和Quarkus提升啟動速度。 2)Java將擴展到嵌入式設備、移動設備和量子計算機。 3)通過GraalVM,Java將與Python、JavaScript等語言無縫集成,增強跨語言互操作性。

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

EditPlus 中文破解版

EditPlus 中文破解版

體積小,語法高亮,不支援程式碼提示功能

Atom編輯器mac版下載

Atom編輯器mac版下載

最受歡迎的的開源編輯器

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SecLists

SecLists

SecLists是最終安全測試人員的伙伴。它是一個包含各種類型清單的集合,這些清單在安全評估過程中經常使用,而且都在一個地方。 SecLists透過方便地提供安全測試人員可能需要的所有列表,幫助提高安全測試的效率和生產力。清單類型包括使用者名稱、密碼、URL、模糊測試有效載荷、敏感資料模式、Web shell等等。測試人員只需將此儲存庫拉到新的測試機上,他就可以存取所需的每種類型的清單。