Java 研發技術學習路線
一、Java 基礎階段
基礎階段的學習說白了就是 Java SE 的學習,這是基礎的階段。目標是讓初學者進入編程的殿堂,具備基本的編程思維。在這個階段我們可以再細分為如下內容:
1、Java 基礎語法
主要學習:變量、數據類型、控制語句等基本概念。這些技術是所有編程語言都有的內容,很基礎也很重要。
2、面向對象
面向對象是深入學習 Java 語言的核心,也是真正進入 Java 世界的重難點。 這里會有各種各樣的概念,非常重要。但是,大家在學習面向對象的時候,先注意 “開始學習語法和概念,不要期望一口氣學的很透徹。面向對象,需要大家在后面做項目時才能深入體會,如何將面向對象思想應用于實踐”。因此,我建議大家不要在此處過于糾結概念,能學多少學多少,遇到不懂的概念,先記結論開始用,快速往后學,不要停留過長的時間在此處。
3、異常
異常是 Java 安全機制的核心,也是讓我們程序更易懂更穩定的核心。初學異常重在理解概念、學習如何解決異常的思路。
4、數組
數組是常用的概念。在學習本內容的時候,掌握核心 “數組也是對象,數組的元素相當于對象的成員變量”,理解了這一句話,就掌握了數組的一大半了。數組學習時順便學習一下一些基本的算法,比如:排序、二分法等。這樣,既可以學習數組,也能復習前面的控制語句、面向對象等知識。因此,在此處可以多做練習, 停留時間長一點。
5、常用類
重點掌握常用類的用法,學習 API 的查詢和使用。如果你想更深入,學習時可以閱讀這些常用類的底層源碼,開始培養高手的格局。
6、容器
容器是開發中常用的內容。學習容器時,既要學習相關類和接口的使用,也要明白容器的底層原理。容器的底層實現和數據結構知識緊密掛鉤。也是,我們在工作和面試中經常會碰到的問題。因此,容器需要初學者花大力氣學習,并且要深入底層,明白底層的核心機制。
7、多線程
多線程是 Java 語言的特點。我們在后續學習服務器編程時,服務器的底層核心機制就是基于 “多線程” 實現的。因此,我們需要掌握多線程的基本原理和應用。為了后續學習并發編程,打下基礎。同時也要學習一下 “生產者消費者模式”、“鎖機制”、 “TheadLocal”、“線程池” 等一些高端的概念。
8、網絡編程
網絡編程是 Java 在互聯網時代擊敗 C++ 的關鍵。我們需要掌握 TCP 編 程、UDP 編程的經典模式,但是不需要太深入去學習。因為,大多數項目開發時底層都做好了封裝。
9、Java 8 及以上版本新特性
學有余地的同學可以嘗試著學習,初學階段并不作要求。Java 8 是 Java 語言開發的一個主要版本。 Oracle 公司于 2014 年 3 月 18 日發布 Java 8 ,它支持函數式編程,新的 JavaScript 引擎,新的日期 API,新的 Stream API 等。Java 9 發布于 2017 年 9 月 22 日,帶來了很多新特性,其中最主要的變化是已經實現的模塊化系統。美國時間 2018 年 09 月 25 日,Oralce 正式發布了 Java 11,這是據 Java 8 以后支持的首個長期版本。Java 8 擴展支持到 2025 年,而 Java 11 擴展支持到 2026 年。Java 11 長期支持,也已經包含了 9 和 10 的全部功能,9 和 10 自然就活到頭了。
二、Java WEB 服務器開發階段
學習 Java,大多數人最終會進入服務器編程、企業級開發領域。因此,為了能夠完整地編寫項目。這個階段我們也要學習一些 Java 之外的技術:網頁開發和設計、數據庫編程和設計。Java 之內的技術有:Servlet、JSP、標簽庫、服務器等。這都是大家進入開發領域必須要學習的內容,光會 Java SE 是不能實現就業、不能獨立開發項目的。但是,學完本階段的技能,大家就可以獨立開發一些項目、具備初步的就業能力了。
1、網頁開發和設計
Java 程序員主要完成服務器端的開發,但是對于瀏覽器端如何展現數據也是很有必要掌握的。網頁開發的基本知識可以說是必學的技能。HTML、CSS、 JavaScript、JQuery、Bootstrap 等。網頁開發也是專門的專業,Java 初學者去學習,掌握基本概念即可,不需要深入太多細節。大家在學習的時候,把握好 “度”。
2、數據庫編程和設計
數據庫是絕大多數項目的存儲的核心,因此,作為 Java 程序員也必須掌握。在學習數據庫技術時,重點掌握 SQL 查詢、表的設計范式、JDBC 技術、ORM 思想和 Mybatis 框架。其他關于數據庫管理的知識不需要掌握太多。(大多數項目首選 MySQL,其次Oracle、SQL Server、PostgreSQL...)
3、Tomcat
Tomcat 服務器是一個開源的輕量級 WEB 應用服務器,在中小型系統和并發量小的場合下被普遍使用,是開發和調試 Servlet、JSP 程序的首選。
4、Servlet 和 JSP 技術
Servlet 和 JSP 是 Java 服務器開發的核心技術,也是必備技能。重點掌握如下知識: HTTP 協議、Servlet、JSP、EL 表達式和標簽庫,以及 Java WEB 項目如何在 Tomcat 服務器環境下部署。雖然在前后端分離模式盛行的時代,JSP 略顯頹勢,但 Servlet 和 JSP 中所涉及的諸多概念(Cookies、Session、Token、Filter、Listener、MVC 模式)也是目前Java WEB 攻城貓必備的。
5、做一個簡單的 JSP 項目
學到現在,大家已經具備初步的項目開發能力。非常有必要通過一個項目,將所學的知識串聯一遍,強化所學成果。同時,也通過項目開發的學習,真正進入 Java 企業級開發的行列。
三、Java EE 階段
Java EE 框架作為企業使用的重要技術, 其本質是寫更少的代碼,做更多的事情, 從而大大減碼量, 讓程序員更加關注業務的實現。 自己寫的少了,都是用別人寫好的東西就要明白別人寫了什么,學習框架重難點不僅僅是如果使用框架而是要明白別人到底寫了什么。 但是也要掌握好 ”度”, 不要一味追求底層, 要 ”擇其重”, 否則可能出現東西太多, 永遠也學習不完的情況。
1、MyBatis
學習 MyBatis 框架要知道它是一個持久層框架。它的主要職責就是完成數據庫操作,因此也要求我們有一定的 SQL 基礎。MyBatis 靈活就體現在所有 SQL 都是程序員編寫,想要什么樣的結果就寫什么樣的 SQL 命令,剩下大部分的事情都交給 MyBatis 完成了。我們把 Mybatis 放到了學完 JDBC 之后,這樣既可以鞏固 JDBC 和數據庫知識,也能在即將要做的項目中開始使用 Mybatis,這樣更貼合企業實戰。
2、Spring
學習 Spring 框架的目標很明確, 就是學習好 IOC/DI、 AOP、 聲明式事務。 單獨使用 Spring 很簡單,重點是學習了核心功能后如何把這些功能運行。目前大部分技術都需要被 Spring 整合, 所以 Spring 是很重要的框架。 Spring 框架不是專注于某一層, 哪里都有 Spring 的影子。所以基礎語法學習好后要多做幾個項目, 才能真正的感受到 Spring 的魅力。
3、Spring MVC
Spring MVC 做為 MVC 框架, 其關注點就是控制器的編寫。如何接收參數, 如何傳遞內容到頁面,還有大量注解這些都是核心。學習時把握好主脈, 要從運行原理入手, 清楚的知道里面的核心組件, 學習起來就事半功倍了。
4、Maven
Maven 是項目構建工具,必須先要弄清楚分布式的概念。 從學習了 Maven 后每個項目可能不是一個 Project 而是很多個, 所以重難點是項目和項目之間的關系以及 Maven 中 POM 的配置。
5、Shiro
Shiro 應用場景都是在權限、安全上,應用場景很明確,所以就導致 Shiro 里面有著大量專業術語。 學習 Shiro 從架構圖出發,清晰的記憶所有專業術語。我們分兩大塊學習 Shiro ,分別是:認證和授權。
6、做一個完整的 SSM 項目
學到現在,大家已經完全具備 Java EE 項目的獨立開發能力。非常有必要通過一個完整項目,將所學的知識串聯一遍,強化所學成果。同時,也通過項目開發的學習,真正進入 Java 企業級開發的行列。
7、Spring Boot
學完 MyBatis、Spring、Spring MVC 整合后,一定會被其繁瑣的配置,搞得頭昏腦脹,那么你就可以好好感受一下 Spring Boot 的魅力嘍。從最根本上來講,Spring Boot 就是一些庫的集合,它能夠被任意項目的構建系統所使用。它使用 “約定大于配置” 的理念讓你的項目快速運行起來。用大佬的話來理解,就是 Spring Boot 其實不是什么新的框架,它默認配置了很多框架的使用方式,就像 Maven 整合了所有的 jar 包,Spring Boot 整合了所有的框架。
8、做一個 Spring Boot 項目
通過之前 SSM 項目的練習,相信大家已經對 WEB 項目開發有一定的理解,那么現在就用 Spring Boot 框架來加深印象,感受目前 Java 企業級開發的主流框架的便捷性。分享幾個熱門項目,供大家學習參考。
BootDo 面向學習型的開源框架,減少過度封裝,展現技術本質。
mall 一套電商系統,使用現階段主流技術實現。涵蓋了SpringBoot 2.3.0、MyBatis 3.4.6、Elasticsearch 7.6.2、RabbitMQ 3.7.15、Redis 5.0、MongoDB 4.2.5、Mysql5.7等技術,采用Docker容器化部署。
RuoYi 基于SpringBoot的權限管理系統。
9、版本控制工具
版本控制工具就是幫助我們記錄和跟蹤項目中各文件內容的修改變化。在團隊協作開發中必不可少,SVN、Git 是目前開發團隊的首選,所以大家必須熟練掌握。
四、高級技術階段
高級技術階段是隨著電商火熱后被大量使用的,這些技術大部分都是為了解決”高負載”,”高并發”等使用。
1、Linux
Linux 是操作系統,學習 Linux 就是為了讓自己開發的項目發布到 Linux 中,所以學習 Linux 的主要要求是如何把項目運行的環境都配置出來。作為 Java 程序員不要求掌握特別深的 Linux 知識,掌握基本操作即可。
2、Dubbo
Dubbo 是阿里巴巴公司開源的一個高性能優秀的服務框架,使得應用可通過高性能的 RPC 實現服務的輸出和輸入功能,可以和 Spring 框架無縫集成。它提供了三大核心能力:面向接口的遠程方法調用,智能容錯和負載均衡,以及服務自動注冊和發現。
3、Spring Cloud
首先,盡管 Spring Cloud 帶有 “Cloud” 這個單詞,但它并不是云計算解決方案,而是一個基于 Spring Boot 實現的云原生應用開發工具,它為基于 JVM 的云原生應用開發中涉及的配置管理、服務發現、熔斷器、智能路由、微代理、控制總線、分布式會話和集群狀態管理等操作提供了一種簡單的開發方式。
4、Spring Cloud Alibaba
很多人可能會問,既然已經有了 Spring Cloud 這個微服務的框架,為什么又要使用 Spring Cloud Alibaba 這個框架?最重要的原因在于 Spring Cloud 中,幾乎所有的組件都使用 Netflix 公司的產品,然后在其基礎上做了一層封裝。然而 Netflix 的服務發現組件 Eureka 已經停止更新,而其他的眾多組件預計會在2020年陸續停止維護。所以急需其他的一些替代產品,也就是 Spring Cloud Alibaba,目前正處于蓬勃發展的態式。
看看官方是怎么定義 Spring Cloud Alibaba 的:
Spring Cloud Alibaba 致力于提供微服務開發的一站式解決方案。此項目包含開發分布式應用微服務的必需組件,方便開發者通過 Spring Cloud 編程模型輕松使用這些組件來開發分布式應用服務。 依托 Spring Cloud Alibaba,您只需要添加一些注解和少量配置,就可以將 Spring Cloud 應用接入阿里微服務解決方案,通過阿里中間件來迅速搭建分布式應用系統。
5、Spring Security
一個能夠為基于 Spring 的企業應用系統提供聲明式的安全訪問控制解決方式的安全框架(簡單說是對訪問權限進行控制嘛),應用的安全性包括用戶認證(Authentication)和用戶授權(Authorization)兩個部分。用戶認證指的是驗證某個用戶是否為系統中的合法主體,也就是說用戶能否訪問該系統。用戶認證一般要求用戶提供用戶名和密碼。系統通過校驗用戶名和密碼來完成認證過程。用戶授權指的是驗證某個用戶是否有權限執行某個操作。在一個系統中,不同用戶所具有的權限是不同的。比如對一個文件來說,有的用戶只能進行讀取,而有的用戶可以進行修改。一般來說,系統會為不同的用戶分配不同的角色,而每個角色則對應一系列的權限。Spring Security 的主要核心功能為認證和授權,所有的架構也是基于這兩個核心功能去實現的。
6、Docker
Docker 是一個開源的應用容器引擎,開發者可以打包自己的應用到容器里面,然后遷移到其他機器的 Docker 應用中,可以實現快速部署。如果出現的故障,可以通過鏡像,快速恢復服務。諸多高級技術都可以基于 Docker,實現快速安裝部署,因此推薦優先學習。
7、Redis
NoSQL 數據庫在企業中使用越來越多,主要的優點就是效率高。每個 NoSQL 數據 庫有著自己獨有的操作 API,所以在能夠熟練安裝 Redis 基礎上,更要熟練使用 Jedis、Spring Data Redis 操作 Redis。
8、MongoDB
MongoDB 是一個基于分布式文件存儲的數據庫。由 C++ 語言編寫。旨在為 WEB 應用提供可擴展的高性能數據存儲解決方案。MongoDB 是一個介于關系數據庫和非關系數據庫之間的產品,是非關系數據庫當中功能最豐富,最像關系數據庫的。
9、Rabbit MQ
基于隊列實現,明白隊列概念后,把 Rabbit MQ 安裝上可以很快的上手。
10、RocketMQ
RocketMQ 是一款分布式消息中間件,最初是由阿里巴巴消息中間件團隊研發并大規模應用于生產系統,滿足線上海量消息堆積的需求, 在2016年底捐贈給 Apache 開源基金會成為孵化項目,經過不到一年時間正式成為了 Apache 頂級項目;早期阿里曾經基于 ActiveMQ 研發消息系統, 隨著業務消息的規模增大,瓶頸逐漸顯現,后來也考慮過 Kafka,但因為在低延遲和高可靠性方面沒有選擇,最后才自主研發了 RocketMQ, 各方面的性能都比目前已有的消息隊列要好,RocketMQ 和 Kafka 在概念和原理上都非常相似,所以也經常被拿來對比;RocketMQ 默認采用長輪詢的拉模式, 單機支持千萬級別的消息堆積,可以非常好的應用在海量消息系統中。
11、Lucene
Lucene 是一套用于全文檢索和搜尋的開源程序庫,提供了一個簡單卻強大的應用程序接口(API),能夠做全文索引和搜尋,Lucene 并不是現成的搜索引擎產品,但可以用來制作搜索引擎產品。
12、Solr
Solr 搜索,先要能夠搭建 SolrCloud。 學會使用 SolrJ 之后,還需要明白”索引”, 搜索算法,Solr 實現原理才能掌握好 Solr。
13、ElasticSearch
ElasticSearch 是一個基于 Lucene 的搜索服務器。它提供了一個分布式多用戶能力的全文搜索引擎,基于 RESTful WEB 接口。Elasticsearch 是用 Java 語言開發的,并作為 Apache 許可條款下的開放源碼發布,是一種流行的企業級搜索引擎。ElasticSearch 用于云計算中,能夠達到實時搜索,穩定,可靠,快速,安裝使用方便。官方客戶端在 Java、.NET(C#)、PHP、Python、Apache Groovy、Ruby 和許多其他語言中都是可用的。
14、Nginx
先要弄清楚反向代理的概念,代理本機目錄和代理其他主機。 熟練安裝 Nginx 和 配置 Nginx 是學習 Nginx 的重點。
15、MyCat
為了保留關系型數據的優點,MyCat 作為一個解決 MySql 不能分庫分表的解決方案。學習 MyCat 先從配置 MySQL 主從備份開始,然后熟練配置 MyCat 配置文件。
16、Vue
Vue 是一套用于構建用戶界面的漸進式框架。與其它大型框架不同的是,Vue 被設計為可以自底向上逐層應用。Vue 的核心庫只關注視圖層,方便與第三方庫或既有項目整合。
......
作為開發人員,我們需要跟上技術發展的步伐。每天,我們都在學習新的編程語言、框架和庫。但是,技術和時尚一樣,正在以光速變化。這是一場沒有贏家的比賽,因為技術的發展沒有終點。
五、設計模式和框架底層深化階段
設計模式是解決特定問題的較優代碼編寫方案。在程序開發中時時刻刻都有著設計模式。 學習設計模式必須理解代碼是為了解決什么問題。可以先把所有設計模式都學習完, 對于 GOF23 設計模式有一個基本的認識。 然后在學習成熟框架的底層代碼,這樣技能將框架學習更深入也能讓自己的底功更扎實。 學習設計模式可以拆分成多個小塊學習,不建議一次性占用大量時間。
框架學習分為兩種:
一種是使用,一種是明白實現原理。 如果學習框架只是為了知道如果搭建框架的環境, 如果使用框架,框架的學習還是比較容易的。但是如果想要非常清楚的明白每個功能是如何實現的就必須清楚的知道框架底層。 學習框架底層可以幫助我們在出現異常時快速的想到是什么原因出現這個錯誤。 因為 我們知道自己寫的代碼,也知道別人寫了什么,出現了錯誤肯定會更好的解決。
MyBatis 框架底層可以從 SqlSessionFactory 入手, 一個類一個方法的往下跟蹤,一直跟蹤到 SqlSession 關閉。
Spring 的底層源碼要從 BeanFactory 和 ApplicationContext 入手,知道 Spring 容器作用。
SpringMVC 底層源碼可以從 DispatcherServlet 入手,觀察所有核心組件的運行過程。
每個框架可以自己繪制一份流程圖, 這樣更利于自己把整個框架的運行原理弄清晰框架底層內容可以在邊學習框架邊學習。
【注】框架底層的學習適合學有余力的同學。如果掌握框架的使用都比較吃力,可以先放一下。熟練使用框架以后再深入底層。
目前各個主流編程語言優缺點及應用場景分析
C
C 語言
是一門面向過程的靜態語言。
優點 | 缺點 |
---|---|
代碼量小,運行速度快,功能強大 | 危險性高,開發周期長 |
語法機制靈活,可以直接訪問硬件 | 復用性差,維護性不高,擴展性不高,可讀性不高 |
幾乎現代編程語言都脫胎于 C 語言,被譽為“上帝語言” | 不具備運行時的檢查機制 |
C 語言更適合廣泛應用于計算機的底層開發,例如系統軟件:編譯器、JVM、驅動、操作系統內核、嵌入式軟件、固件等。
C++
C++
是 C語言
的繼承,是一門面向對象的靜態語言。
優點 | 缺點 |
---|---|
運行效率高,高效安全 | 內容較多,學習難度大 |
跨平臺性非常好,幾乎所有處理器和操作系統都支持 C/C++ | 為了滿足程序的復用性和可讀性,往往程序尺寸比較大,同比其他語言代碼量大 |
C++ 功能在 C語言的基礎上增加面向對象的特點,代碼可讀性好,復用性高,運行效率高 | 相對 Java 來說,沒有垃圾回收機制,可能引起內存泄漏,更依賴程序員手動釋放 |
C++ 對程序員的要求較高,學好了是“萬金油”。前至各種客戶端,后至網絡編程,硬件底層。因為C++ 是廣博的,它涵蓋面如此之大,讓它如何能簡單。
Java
Java
的熱度一直讓它處于編程語言榜首的位置,它是面向對象的靜態語言。
優點 | 缺點 |
---|---|
市場需求旺盛,國內外大公司崗位多,容易,有大量的開源庫 | 對內存的使用率高于 C++ |
Google 的 Android 是目前人氣最高的移動平臺,Java 是 Android 的語言基礎,也衍生出諸多編程序語言 | Java 程序啟動時間較長 |
一次編寫,到處運行,強大的可伸縮性,多樣化和功能強大的開發工具支持 | Java 學習的復雜性越來越高,由于無法定義一個好的標準開發框架,每個程序員來到新的公司時必須先了解框架,延緩了開發的時間 |
Java 更適合做 Android 開發,以及服務端后臺開發。是目前大多數互聯網企業后臺開發首選。
Python
Python
很容易上手,作為解釋型非編譯的腳本語言來說,優缺點也很明顯。
優點 | 缺點 |
---|---|
簡單,易掌握,帶來了巨大生產力 | 執行速度低于編譯型語言,Python 3 和 2 不兼容 |
易于學習,廣泛的工具及功能庫(特別是人工智能方面) | 代碼不能加密,很多時候必須開放源碼 |
移植性很強(包括嵌入式產品),粘合劑語言(不同語言高效拼接,組合使用) | 線程不能利用多 CPU,GIL 即全局解釋器鎖,任何時刻僅有一個線程在執行 |
目前在網絡爬蟲、數據分析、人工智能、AI 領域等 Python 的地位還是很高的,使用者需要具備一定的專業領域知識,特別是數學方面,對開發者要求比較高。語言只是工具,算法才是核心!
Golang
簡稱 Go 語言
,它是一個有動態語言感覺的靜態語言,寫起來的效率很高。
優點 | 缺點 |
---|---|
簡單,易掌握,開發速度快,效率高 | 軟件包管理不支持版本,有時候升級容易導致項目不可運行,所以需要自己控制相應的版本信息 |
可直接編譯成機器碼,不依賴其他庫,glibc 的版本有一定要求,部署就是扔一個文件上去就完成了 | 垃圾回收器(GC)不太完善,同時并發很大的情況下,處理很大的日志,GC 沒有那么快,內存回收也不是很給力 |
內置 Runtime,支持垃圾回收,并行和并發效果很好 | goroutine(協程)的調度時機,具體什么時候會被執行,是不確定的,會導致邏輯出錯 |
Go 的開發者包括 Unix 的創始人和 C 語言的創始人,更適合高并發的網絡程序和本地程序。國外如 Google、AWS、Cloudflare、CoreOS 等,國內如阿里、字節跳動、七牛等都已經開始大規模使用 Go 語言開發其云計算相關產品。
C#
C#
是微軟公司發布的一種面向對象的靜態語言。
優點 | 缺點 |
---|---|
類庫多,上手快,利于快速開發 | 性能上的匱乏 |
全面集成 .Net 庫,不僅僅是一個語言,更像是一個極具匠心的產品 | 移動平臺和硬件領域的比較乏力 |
相比 Java,有更先進的語法體系(后生的,很多語法都是其它語言的改進) | 作為微軟的產品,到了非微軟的操作系統上,很多Framework 里面的類庫就不好使了 |
C# 目前更適合于 Windows 的桌面應用開發,在 WEB 開發也有市場。
PHP
PHP
也很容易上手,也是解釋型非編譯的腳本語言。
優點 | 缺點 |
---|---|
簡單,易掌握,開發速度快 | 對多線程、核心異步網絡的支持不太好 |
框架多,開源項目多 | 目前只支持 WEB 開發,對桌面應用和手機應用支持不好 |
有很多公共類庫和插件 | 提供的數據結構和函數的接口粒度比較粗 |
目前 PHP 更適合需要快速開發的 WEB 程序,是業務開發、快速實現的利器。
一些個人建議
1、關心家人,孝敬父母;
2、常翻面試題;
3、培養個人愛好;
4、運動健身;
5、多交流,提升交際能力,拓展人脈圈;
6、盡可能全棧發展,前端、后端、測試、產品、設計、運營等都可以去學,涉獵總歸是有好處的;
7、關注行業動態;
8、結交其他行業的朋友。
技術有價,健康無價!
混〔IT〕的小學生 熱愛編程,喜歡挑戰新事物! 撩撩博主 :-)