1. 程式人生 > >Java開發進階之路

Java開發進階之路

為我 變量 kafka 自然 ges 想想 javaweb 目前 沒有

背景一

我接觸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開發進階之路