Java開發進階之路

來源:互聯網
上載者:User

標籤:健全狀態   基本   web   變數   nginx   images   socket   blog   沒有   

背景一

我接觸Java開發已經一年多了了。

從剛開始生澀地接觸文法,惹得編譯器報各種語法錯誤;到接觸OOD的思想,封裝、繼承、多態,懵懵懂懂地聽說著它們;再到學習Web開發,想著這些也許並不重要,實際用的無非是Dao、Service、Controller罷了;最後幡然醒悟:就這樣,一年已逝。

 

人總是要有些奮鬥的目標的,暫且以此篇作為我而後一年的開端,思索一下接下去的學習之路。

背景二

我一直在想到底怎麼樣才能把Java學好,到底要學些什麼,從哪裡開始學,又要學多深?

我曾想的是,先廣而後深。於是,除了培訓出來的SSM/SSH,還把Spring Boot、Zookeeper、Dubbo、RocketMQ、ActiveMQ、Kafka、WebSocket、Git、Redis、Linux、FastDFS、Nginx、多線程、JVM、BIO、NIO、AIO、Netty、Docker、SpringCloud、Storm以及常用設計模式給學了個遍。

不過想想就能知道,一個區區一年經驗的Java開發,哪來的那麼多時間精力把這麼多東西學得透徹。到頭來無非是都只知皮毛,稍能使用而已。

而且這麼多的東西,想必大部分人在的公司都用不到。便如我現在的這家公司,項目也無非就是SSM+Redis,在用Maven分個模組罷了。

我之前逛知乎的時候,看到過一些言論:大部分Java開發程式員所在的公司都不過尋常的小公司,接觸的也儘是這些尋常不過的項目,連分布式什麼的都接觸不到;又談什麼學習技術、升職加薪。

剛開始看到這些,頓覺一股涼意升騰,他並沒有說錯。可又心有不甘。既然選擇了這條路,怎麼輕言放棄。機會總是有的。所謂的一命二運三風水,四積陰德五讀書,要是真信了,怕真就一語成讖,一為命二為運了。

伊始

如何學習我到現在也只有個大致的思路,寫出來,做個分享,也為自己接下去一年的學習設個目標。

上面說的這些技術,雖說我自己學得也不精;但大體都有所瞭解。雖然感覺略懂無用,但有一點是很重要的,那就是對整個系統的架構能有所瞭解。能知道所謂分布式系統的大致實現思路,不至於別人說用個Dubbo、Zookeeper,自己卻一無所知,不知道這兩貨是幹啥的。

還有最重要的一點,那就是,學這些技術,大多數人的第一步都是先百度。這我也曾做過,結果看了一萬篇技術文章,仍舊雲裡霧裡。所以說,千裡執行,始於敲打。打一遍,自然就明白了。

其次,Linux真的是很重要。我大學時候倒是學過一些,不過忘光了。但是,到如今,我只能說,JavaWeb開發的,所有東西,都是部署在Linux上的。不學它,你甚至連那些MQ的環境都搭建不起來,談何學習。

如果想要學習它,其實也不難(每個人對自己會的東西都會這麼說。。。),弄個Vmware虛擬機器軟體,開個三台左右的虛擬機器,再弄個xshell,然後就開始照著網上的教程把想學的東西的環境一個一個自己搭建出來,便OK了。當然,最好還是從搭建JDK和Tomcat開始。

本文

大致的學習順序

  1. 設計模式:熟悉23種設計模式。雖說對於大部分項目來說使用設計模式稍顯冗餘,不過在某些情況下,這些前人所總結的經驗確實能讓人大受裨益。當然,先學習它的原因還在於,JDK源碼以及其他各類架構,大多數都使用了很多設計模式。倘若對它不熟悉,那麼日後看源碼的時候自然是不能一蹴而就。
  2. 資料結構和演算法:這個東西就顯得有些龐大了。對於我而言,我既然選擇的是JavaWeb開發,就很顯而易見的,我對這些全然無知。但是,推薦把《資料結構和演算法》這本書粗看一遍——這個粗是很粗,我是只把有哪些資料結構、排序演算法以及資料結構的curd的效率記了下,便作罷了。之所以要瞭解這個,主要是Java中的一些集合是採用這些結構的,所以至少要知道這些資料結構的大致結構,以及增刪改查的效率。
  3. JDK常用包的源碼:這個我也進行中,是從io包開始看的。不過進行到一半便輾轉學設計模式去了。閱讀JDK源碼的好處很多,顯而易見的就是,在使用各個類的時候能夠大致清楚哪些類有哪些方法能夠幹什麼,以及這些類的大致實現過程。當然,這個也無需看得很細——太細的其實也看不懂。另外,常備一個JDK文檔是很重要的。
  4. JVM1:這塊以我現在的瞭解程度,只能說它學無止境。不過至少基本的概念要明白的,就是JVM記憶體模型,新生代、老生代、GC演算法這些。這些東西如果只是粗看的話其實就是硬背而已。此外,很多東西其實都是息息相通的。例如之前學多線程的時候學過一個volatile關鍵字,剛開始只知道它是保證變數的可見度,每次擷取被該關鍵字註解的變數時,直接從堆棧中擷取,不從線程的緩衝區中擷取。而後瞭解了JVM,就知道了所謂的緩衝區就是TLAB,是堆中劃分給每個線程的單獨的緩衝區。
  5. JVM2:此外,還要明白類的載入方式。這塊我暫且還沒學習。不過類載入器、包括反射這些其實都是很重要的。明白了這些,才能更透徹地理解我們所寫的代碼的運行——不說這些虛的,就一點,如果要自己寫個好的架構,大多是要用到這些的。我之前看到一本教用GO語言寫JVM的書,打算是照著這本書敲一遍的。
  6. JVM3:還有的就是JVM的最佳化。我目前所知的也就是設定一些參數來減少GC次數。想要瞭解更多,應該還是要用專門的工具擷取JVM的健全狀態的——我現在還不瞭解。
  7. common、guava等各類工具jar:這些我想的是瞭解就好,能夠知道什麼功能可以直接使用。而不是一碰到不知道的功能,就跑去自己造輪子,結果寫得一團糟。當然,如果日後有閑工夫,也可以仔細地看下這些jar的具體實現。但就我目前來說,感覺還是會用就好。
  8. 各類架構的源碼:Spring、SpringMVC、MyBatis等。這些源碼肯定都是要好好讀一讀的。不過我目前都沒有讀過。具體的不是很清楚
  9. MySQL:資料庫的重要性是不言而喻的。之所以不是Oracle的原因是——Oracle太難了。只是作為一個Java開發的話,在自己的本職技術還沒有掌握完全的情況下,還是不要好高騖遠了。對MySQL的最佳化以及分庫分表、分散式交易等一些相關的技術有所瞭解就好。至少面試的時候問你關於資料庫的最佳化能說出一二來。
  10. 其他:最後,推薦閱讀《Java編程思想》、《effective java》等書——當然除了這些玄——之所以說懸,是因為這些其實是內功——書,一些專門介紹如何使用某類技術的書也是必不可少的。這就如武林高手對決,任憑內功蓋世,總得有一技傍身,才能有用武之地。
結尾

最後,關於去哪找這些學習資料。我只想說,作為一個程式員,連這都找不到的話,那就是真的有些過分了。善用搜尋引擎,95%的問題,都已經有前人鋪路了。

 

Java開發進階之路

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.