文章目錄
java作爲第一大編程語言,可謂源遠流長,一代又一代的java程序員前仆後繼走在java學習的路上。java程序員的學習之路在2020年又有什麼變化呢?本文詳細附上了每一個部分所需知識的教程鏈接地址,並會持續更新,希望能夠和大家一起進步!
先上圖:
上面的RoadMap圖中列出了作爲一個java程序員需要掌握的技術路線,所有技術都懂那當然非常好,如果還沒掌握也沒關係,just keep learning!
必須掌握的基礎知識
作爲程序員當然是有門檻的,這個門檻就是所需要掌握的基礎知識,寫好了程序不僅要知其然,更要知其所以然。這樣才能在寫程序的過程中,透過現象看到本質,從本質上提升寫代碼的功力。
1. Git & Github
Github作爲全球最大的同性交友平臺,是個程序員都應該知道。作爲開源風潮的託管平臺,GitHub上面有大量的優秀開源項目,如果有需可以從GitHub上面借用各種項目,沒有需要也可以去讀讀上面的代碼,提升下寫作水平。
Git作爲優秀的版本管理工具,相信絕大多數公司都在使用,那麼掌握Git的命令和使用就是非常重要了。更爲重要的是,Git通過git flow帶給我們了代碼管理的新思路。
2. Linux
很多程序員用慣了windows可能對Linux並不熟悉,但是大家要知道絕大多數的服務器都是部署在Linux上面的,不懂Linux就說自己懂編程,豈不是很搞笑?連自己寫出來的代碼運行的平臺都不瞭解,怎麼可以。即使不是運維專員,自己部署程序也要會的,部署中需要注意的問題肯定要關注,至於Linux的基本命令那更是要100%掌握。
3. 數據結構和算法
如果只是使用java中的庫,那麼至少array, linked list, hash table, binary tree, queue, stack, graph這些基本的數據結構是需要掌握的。
如果你想更深入一些Trie, B-Tree, AVL tree等等可以瞭解一下。
4. HTTP / HTTPS
現在是Web的天下了,搞懂HTTP,HTTPS走遍天下都不怕。
可以參考之前我的文章:
5. 設計模式
設計模式可以說是大神和小工的分界線,各種設計模式信手拈來才能成爲設計專家。
當然這裏不是要你死記硬背,關鍵是合理應用。
6. 計算機原理
知道計算機是怎麼工作的很重要,你的代碼,程序怎麼轉換成計算機可以懂的語言,CPU的調度原理,內存工作原理等等。
java學習之路
有了上面的基礎,終於我們可以開始講java的學習之路了。
1. 工具
1.1 開發工具
工欲善其事,必先利其器。有了好的工具可以有效的提升開發效率。Eclipse和IDEA當然是IDE的首選。
1.2 構建工具
maven和Gradle是java構建工具的不三之選,這兩個優選一個。ANT是之前的構建工具,不需要詳細掌握,瞭解即可。
1.3 虛擬化工具
Docker的橫空出世,打造了一個新的虛擬化時代,憑藉其優異的性能和資源佔用率,Docker贏得了很多企業的喜愛,Docker一定要學。有了docker接下來使用Kubernetes(K8S)來做管理則是水到渠成。
1.4 CI工具
Jenkins是CI的很好的工具。
2. JDK
JDK的熟練程度直接關係到能不能寫出好的代碼,接下來我們詳細來看。
2.1 Java Collections
集合類是在任何程序中都要使用到的類型,這幾個是你必須要熟悉的 ArrayList, HashMap, HashSet, LinkedHashSet, TreeSet。熟悉使用熟悉其實現原理。下面是我整理和寫過的關於Java集合的相關文章:
- fail-safe fail-fast知多少
- Iterator to list的三種方法
- asList和ArrayList不得不說的故事
- Copy ArrayList的四種方式
- 深入理解HashMap和TreeMap的區別
- 深入理解HashMap和LinkedHashMap的區別
- 一文弄懂EnumMap和EnumSet
- java中Comparable和Comparator的區別
- SkipList和java中ConcurrentSkipListMap的實現
- 一文弄懂java中的Queue家族
- PriorityQueue和PriorityBlockingQueue
- SynchronousQueue詳解
- java中DelayQueue的使用
- JDK12的新特性:teeing collectors
2.2 Java併發和多線程
java中多線程和併發是一個非常重要的話題,concurrency包裏面提供了諸多非常有用的同步類:CyclicBarrier,CountDownLatch,Semaphore等等。
concurrency包下面的Locks和Atomic提供了一些新的鎖的實現。深入瞭解這些內容可以更好的理解多線程環境中資源的使用。
Thread和Thread Pool是多線程的基礎,需要深入理解和應用。
Java併發和多線程的文章如下:
- java.util.concurrent簡介
- java併發中的Synchronized關鍵詞
- java中的Volatile關鍵字使用
- java中wait和sleep的區別
- java中Future的使用
- java併發中ExecutorService的使用
- java中Runnable和Callable的區別
- java中ThreadLocal的使用
- java中線程的生命週期
- java中join的使用
- 怎麼在java中關閉一個thread
- java中的Atomic類
- java中interrupt,interrupted和isInterrupted的區別
- java中的daemon thread
- java中ThreadPool的介紹和使用
- java 中的fork join框架
- java中Locks的使用
- java併發中CountDownLatch的使用
- java中CyclicBarrier的使用
- 在java中使用JMH(Java Microbenchmark Harness)做性能測試
- java中ThreadLocalRandom的使用
- java中FutureTask的使用
- 關於CompletableFuture的一切,看這篇文章就夠了
- Phaser都不懂,還學什麼多線程
- java中使用Semaphore構建阻塞對象池
- 在java中構建高效的結果緩存
- java中CompletionService的使用
- 使用ExecutorService來停止線程服務
- 萬萬沒想到,線程居然被餓死了!
- java中有界隊列的飽和策略(reject policy)
- 由於不當的執行順序導致的死鎖
- 同步類的基礎AbstractQueuedSynchronizer(AQS)
- 非阻塞同步機制和CAS
- 非阻塞算法(Lock-Free)的實現
- java內存模型(JMM)和happens-before
- java併發Exchanger的使用
2.3 Java 8-15的新特性
Java 8引入了太多太多新的有用的東西,像Lambda,Stream API, Date Time API等待。Java 8引入的函數式編程直接改變了以往的編程習慣。
JDK8
- Java函數式編程和Lambda表達式
- java 8 Streams簡介
- java stream中Collectors的用法
- 在java 8 stream表達式中實現if/else邏輯
- 怎麼在java 8的map中使用stream
- java 8 Stream中操作類型和peek的使用
- java 8 stream reduce詳解和誤區
- java 8 stream中的Spliterator簡介
- 怎麼break java8 stream的foreach
- java 8 lambda表達式中的異常處理
- java 8中 predicate chain的使用
- java 8中構建無限的stream
- 自定義parallelStream的thread pool
- asList和ArrayList不得不說的故事
- java中functional interface的分類和使用
- java關於throw Exception的一個小祕密
- java 8 stream中的Spliterator簡介
- 怎麼break java8 stream的foreach
當然java 8只是最低的要求,java已經出到了13了,如果有能力的話可以學習Java 9 到 Java 13的新特性: Modules, var for local variables, static factory methods for collections等等。
JDK9
待續…
JDK10
JDK11
JDK12
JDK13
JDK14
- JDK14的新特性:JFR,JMC和JFR事件流
- jcmd:JDK14中的調試神器
- JDK14中的java tools簡介
- JDK 14的新特性:switch表達式
- JDK 14的新特性:文本塊Text Blocks
- JDK14的新特性:Lombok的終結者record
- JDK 14的新特性:更加好用的NullPointerExceptions
- JDK 14的新特性:instanceof模式匹配
JDK15
2.4 Java IO
java.io和java.nio是Java中處理IO的兩個包,IO是非常重要的,處理文件讀寫,包括網絡數據流的讀寫都需要使用到IO。
我們需要掌握java.io包中的File, InputStream, OutputStream, Reader, Writer。
還需要掌握java.nio包中的ByteBuffer, FileChannel, Selector等。
2.5 深入理解JVM
待續…
3. 框架
如果想做大型java項目,框架是少不了的,使用框架可以節省開發時間,提升開發效率。
3.1 Spring
java框架最最最流行的就是Spring了。可以說Spring統治了java的大部分江山。說起來Spring還是以EJB的替代品出現的,它擺脫了EJB的複雜性,通過使用AOP和IOC,提供了輕便的可配置的容器,贏得了大片市場。最新的Spring版本是5.*。
除了Spring Core,Spring MVC目前的市場份額也越來越大。做好web開發Spring MVC也是必不可少的。
Spring 5.X系列教程:滿足你對Spring5的一切想象-持續更新
3.2 Spring Boot
雖然Spring簡化了EJB,但是還是需要諸多的配置文件,而Spring Boot的出現大大的減少了配置文件的編寫。
要問什麼框架開發最快最靠譜,Spring Boot肯定要佔一席之地。
Spring Boot 2.X系列教程:七天從無到有掌握Spring Boot-持續更新
3.3 Netty & Mina
Netty & Mina是兩個NIO框架,其最本質的就是異步的IO,和普通IO最大的區別就是提升效率節約時間。
Spring 5最新引入的Spring Web Reactive就是基於Netty實現的。
待續…
3.4 ORM
ORM框架的使用方便我們對數據庫的操作,Hibernate和Mybatis是兩個ORM框架的優秀選手。但是據我瞭解好像國內使用Mybatis的偏多,國外更傾向使用Hibernate。
爲什麼呢?我的理解Hibernate是JPA的一種實現,更加的標準。
3.5 微服務
這年頭如果你不提微服務好像就低人一等。不用怕,Spring特意爲我們準備了微服務全家桶Spring Cloud。
並不是所有的服務都需要微服務,微服務也不是越多越好,看項目,看情況,看心情!
待續…
4. 測試框架
很多朋友可能喜歡寫代碼,不喜歡寫測試。也有的朋友覺得測試是測試人員做的,跟開發人員沒關係。
但是測試真的非常重要,從單元測試到end to end測試到集成測試,我們一直都在路上。
單元測試的幾個框架Junit,Mockito,PowerMock都是非常優秀的框架,值得每個java程序員掌握。
其他的可以學習一下Selenium和Cucumber,作爲end to end測試,Selenium配合headless chrome,真的不要太爽。
5. 實用庫
很多時候JDK並沒有提供太多的實用庫,這時候我們需要藉助於第三方的力量。
有很多第三方庫都非常優秀,比如google的Guava,Apache的commons包,處理JSON的Jackson JSON,處理日誌的Log4J,Slf4j等,都是我們日常所常用的。
Keep learning
最後,想告訴大家的是要Keep learning,技術革新變化非常快,只有一直學習,才能不掉隊不落後,學到老,活到老。希望各個朋友都能一步一個腳印的找到自己的路。畢竟知識沒有捷徑可走。
大家有感興趣的技術路線可以回覆本文留言給我,我會盡量豐富這個技術路線圖,謝謝大家!
最後,感興趣的朋友可以我點個關注!
The END!
本文作者:flydean程序那些事
本文鏈接:www.flydean.com
本文來源:flydean的博客
歡迎關注我的公衆號:程序那些事,更多精彩等着您!