萬萬沒想到,潤到國外做 Java,也很卷啊!
共 9282字,需瀏覽 19分鐘
·
2024-06-30 16:45
大家好,我是程序員魚皮。前幾天我看了一篇由國外的 Java 架構(gòu)師大佬分享的文章,主題是 “Java 架構(gòu)師必會的 20 個技術(shù)”。
光看這個標題,就知道在國外做 Java 開發(fā),也很卷啊!能學(xué)習(xí)的技術(shù)真的太多了。
我覺得作者講的很全面,所以總結(jié)一下分享給大家,并且專門針對國內(nèi) Java 程序員也要學(xué)的重點技術(shù)做了標注,希望給想成為優(yōu)秀 Java 開發(fā)或架構(gòu)師的同學(xué)一些啟發(fā),也可以作為一個 Java 架構(gòu)師學(xué)習(xí)路線來看。
注意,不是說以下技術(shù)必須都學(xué)完才能達到找工作的標準。如果你想成為優(yōu)秀的架構(gòu)師,以下技術(shù)學(xué)的越多越好。
Java 架構(gòu)師必知必會
想成為 Java 架構(gòu)師,不僅需要對 Java 及其生態(tài)系統(tǒng)有深入的理解,還需要緊跟最新的趨勢、技術(shù)和最佳實踐,以構(gòu)建堅固、可擴展且高效的應(yīng)用程序。下面就分享 Java 架構(gòu)師在 2024 年應(yīng)該掌握的 20 個關(guān)鍵領(lǐng)域,涵蓋了微服務(wù)、云原生應(yīng)用、響應(yīng)式編程和區(qū)塊鏈技術(shù)等多方面內(nèi)容。
1、微服務(wù)架構(gòu)
采用微服務(wù)架構(gòu)意味著將一個較大的、完整的應(yīng)用程序重構(gòu)為一組較小的、獨立部署的服務(wù),這些服務(wù)之間松散耦合,允許單獨開發(fā)和擴展服務(wù)。掌握這種架構(gòu)風(fēng)格對于現(xiàn)代 Java 架構(gòu)師至關(guān)重要,因為它有助于有效地設(shè)計和維護健壯、可擴展和有彈性的系統(tǒng)。
相關(guān)技術(shù):
-
Spring Boot:Java 主流的,用于創(chuàng)建獨立的、生產(chǎn)級 Spring 應(yīng)用程序的強大框架。 -
Spring Data:數(shù)據(jù)訪問層框架,能夠更輕松地和各種數(shù)據(jù)庫、存儲技術(shù)進行集成。 -
Spring Cloud:為開發(fā)人員提供工具以快速構(gòu)建分布式系統(tǒng)中的開發(fā)框架,比如配置管理、服務(wù)發(fā)現(xiàn)、熔斷等。 -
Quarkus:專為云原生設(shè)計,并針對 GraalVM 和 OpenJDK 進行了優(yōu)化,能夠快速啟動項目,并占用更低的內(nèi)存。 -
Panache:跟 Spring Data 類似,能夠更輕松地操作數(shù)據(jù)庫的框架。 -
Qute:Quarkus 的模板引擎,能夠動態(tài)渲染內(nèi)容。 -
OpenShift:基于 Kubernetes 的平臺,幫助管理和部署容器化應(yīng)用程序,簡化微服務(wù)的編排。又包括 OpenShift Service Mesh、OpenShift Pipelines 和 OpenShift Serverless。
對于國內(nèi) Java 開發(fā)者,Spring Boot、Spring Cloud 是學(xué)習(xí)重點。
2、云原生應(yīng)用
云原生應(yīng)用是一種設(shè)計和部署方式,即專為云環(huán)境而生的應(yīng)用,能夠最大化利用云計算平臺的彈性、可擴展性和自動化特性。舉個例子,當(dāng)應(yīng)用訪問量不大的時候,可以自動縮減應(yīng)用節(jié)點的數(shù)量,從而降低企業(yè)的成本。
相關(guān)技術(shù):
-
AWS:提供全面的云服務(wù)套件。 -
Google Cloud Platform:提供一系列計算、存儲和應(yīng)用服務(wù)。 -
Microsoft Azure:另一個領(lǐng)先的云平臺,提供廣泛的工具來構(gòu)建和管理應(yīng)用程序。
對于國內(nèi) Java 開發(fā)者,要學(xué)會使用大廠云服務(wù)平臺來部署項目。
3、容器化和編排
容器化是將應(yīng)用程序及其所有依賴項(例如代碼、運行時環(huán)境、庫、配置文件)打包到一個獨立的、標準化的單元中,稱為容器。
容器編排是一種自動化管理、調(diào)度和擴展容器化應(yīng)用程序的過程。它涉及多個容器實例的協(xié)調(diào)工作,確保它們能夠在集群中有效地運行。
掌握這些技術(shù),可以提升應(yīng)用的部署效率,并確保應(yīng)用在不同環(huán)境中順利運行,提升可擴展性和可靠性。
相關(guān)技術(shù):
-
Docker:最經(jīng)典的容器技術(shù),讓開發(fā)者能夠在容器中打包和運行應(yīng)用程序。 -
Kubernetes:又叫 K8S,開源的容器編排系統(tǒng),用于自動部署、擴展和管理容器化應(yīng)用程序。 -
OpenShift:在 Kubernetes 基礎(chǔ)上擴展,提供 DevOps 工具以簡化容器編排和管理。
對于國內(nèi) Java 開發(fā)者,要學(xué)習(xí)如何構(gòu)建 Docker 鏡像并部署項目,但 Kubernetes 了解即可,不用深入研究。
4、響應(yīng)式編程
響應(yīng)式編程是一種編程范式,適用于處理異步數(shù)據(jù)流和事件驅(qū)動的應(yīng)用程序。它強調(diào)數(shù)據(jù)流的處理方式,特別適合于處理實時、交互式和高并發(fā)的應(yīng)用場景。
相關(guān)技術(shù):
-
Project Reactor:用于在 JVM 上構(gòu)建響應(yīng)式應(yīng)用程序的基礎(chǔ)庫。 -
Akka:用于構(gòu)建高并發(fā)、分布式和彈性消息驅(qū)動的應(yīng)用程序的框架。 -
RxJava:用于使用可觀察序列編寫異步和事件驅(qū)動程序的庫。 -
Vert.x:基于事件驅(qū)動、非阻塞、支持多語言的響應(yīng)式編程框架,專為構(gòu)建高性能的異步應(yīng)用程序而設(shè)計。
對于國內(nèi) Java 開發(fā)者,以上這些技術(shù)接觸的估計都不多,Spring 5 其實也提供了響應(yīng)式編程模塊 Spring Webflux,大家任意學(xué)習(xí)一種,掌握這種編程方式即可。
對了,提到響應(yīng)式,有些同學(xué)可能會想到 Netty,但嚴格來說,Netty 可不是響應(yīng)式編程框架,而是一個高性能的網(wǎng)絡(luò)通訊框架,因為它不具備響應(yīng)式編程中數(shù)據(jù)流處理的特性。
5、無服務(wù)器計算
無服務(wù)器計算(Serverless Computing)并不是指真的不需要服務(wù)器,而是簡化應(yīng)用程序的部署和管理,使開發(fā)者能夠?qū)W⒂诰帉懘a而不必關(guān)注底層的服務(wù)器管理和運維細節(jié)。
相關(guān)技術(shù):
-
AWS Lambda:一個允許您在不配置或管理服務(wù)器的情況下運行代碼的服務(wù)。 -
Azure Functions:一個解決方案,用于在云中輕松運行小塊代碼或 “函數(shù)”。 -
Google Cloud Functions:輕量級的事件驅(qū)動異步計算解決方案。
對于國內(nèi) Java 開發(fā)者,學(xué)會使用大廠的云服務(wù)平臺來部署項目即可。
6、事件驅(qū)動架構(gòu)
事件驅(qū)動架構(gòu)是一種軟件架構(gòu)模式,其核心思想是系統(tǒng)的各個組件之間通過事件進行通信和協(xié)作。組件可以是獨立的微服務(wù)、函數(shù)或模塊,它們通過發(fā)送和接收事件來實現(xiàn)松耦合、高內(nèi)聚的系統(tǒng)設(shè)計。
相關(guān)技術(shù):
-
Apache Kafka:一個分布式事件流平臺,每天可以處理數(shù)萬億個事件。 -
RabbitMQ:支持多種消息協(xié)議的可靠消息系統(tǒng)。 -
AWS SNS/SQS:簡單通知服務(wù)(SNS)和簡單隊列服務(wù)(SQS),用于可擴展的消息隊列。
對于國內(nèi) Java 開發(fā)者,要理解事件驅(qū)動架構(gòu)是什么,并且學(xué)會使用任意一種消息隊列(比如 RabbitMQ 或 Kafka)來實現(xiàn)這種架構(gòu)。消息的發(fā)送和消費就可以理解為事件的發(fā)送和接受。
7、安全校驗
實施強大的安全措施以保護應(yīng)用程序免受威脅和漏洞的侵害是任何架構(gòu)師的首要任務(wù)。
相關(guān)技術(shù):
-
Spring Security:一個強大且可定制的身份驗證和訪問控制框架。 -
OWASP 工具:來自開放 Web 應(yīng)用程序安全項目的各種工具和資源。 -
JWT (JSON Web Tokens):用于在兩方之間傳輸緊湊的、URL 安全的信息。
對于國內(nèi) Java 開發(fā)者,JWT 和 Spring Security 是必學(xué)的,可以用它們實現(xiàn)登錄、授權(quán)、權(quán)限管理功能。
8、DevOps 和 CI/CD
DevOps 是一種整合了開發(fā)和運維的實踐和方法論,是指通過自動化和協(xié)作來加速軟件交付和增強產(chǎn)品質(zhì)量。
CI/CD 是 DevOps 實踐的關(guān)鍵組成部分。CI 指持續(xù)集成,開發(fā)人員頻繁地將代碼集成到共享存儲庫中,并通過自動化構(gòu)建和測試來驗證代碼的可靠性。CD 指持續(xù)部署(交付),通過持續(xù)集成流程驗證的代碼能夠自動做好部署到生產(chǎn)環(huán)境的準備,但是部署過程可能需要人工觸發(fā)。
相關(guān)技術(shù):
-
Jenkins:一個開源自動化服務(wù)器,支持構(gòu)建、部署和自動化項目。 -
GitLab CI/CD:提供與 GitLab 集成的強大 CI/CD 管道支持。 -
Travis CI:一個用于構(gòu)建和測試托管在 GitHub 上的項目的持續(xù)集成服務(wù)。
對于國內(nèi) Java 開發(fā)者,通過 GitHub Actions 或 GitLab CI/CD 來了解怎么使用 CI/CD 即可,不必自己搭建一個 CI/CD 系統(tǒng)了,一般公司也會提供現(xiàn)成的平臺。
9、API 和集成
設(shè)計健壯的 API 以確保不同系統(tǒng)之間的無縫通信,這是微服務(wù)和混合云環(huán)境的關(guān)鍵。
相關(guān)技術(shù):
-
REST:一種設(shè)計網(wǎng)絡(luò)應(yīng)用程序的架構(gòu)風(fēng)格。 -
GraphQL:用于 API 的查詢語言,可以根據(jù)預(yù)定義的數(shù)據(jù)類型系統(tǒng)來執(zhí)行查詢。 -
OpenAPI/Swagger:用于設(shè)計、構(gòu)建、記錄和使用 RESTful Web 服務(wù)的工具(接口文檔)。
對于國內(nèi) Java 開發(fā)者,要能夠熟練地設(shè)計出一套 RESTful 的 API,并且要會使用 Swagger 為項目快速生成接口文檔。至于 GraphQL,不是必學(xué)的,但是也建議了解一下,有助于提升基于數(shù)據(jù)定義的系統(tǒng)設(shè)計思維。
10、數(shù)據(jù)管理和 NoSQL 數(shù)據(jù)庫
數(shù)據(jù)庫是 Java 開發(fā)的基本功,能夠有效管理和處理大量數(shù)據(jù)、并且理解 NoSQL 數(shù)據(jù)庫,對于開發(fā)高性能、可擴展的程序至關(guān)重要。
相關(guān)技術(shù):
-
MySQL:主流的關(guān)系型數(shù)據(jù)庫,不多說了。 -
MongoDB:一個具有按需查詢和索引功能的、靈活的、可擴展的文檔數(shù)據(jù)庫。 -
Cassandra:一個設(shè)計用于處理大量數(shù)據(jù)的分布式 NoSQL 數(shù)據(jù)庫管理系統(tǒng)。 -
Redis:分布式的內(nèi)存鍵值對存儲數(shù)據(jù)庫,可用作緩存和消息代理。
對于國內(nèi) Java 開發(fā)者,MySQL 和 Redis 是必學(xué)的,同時最好了解下 MongoDB 和 MySQL 的區(qū)別,Cassandra 不是必學(xué)項。
11、分布式系統(tǒng)
設(shè)計和管理具有高可用性和容錯能力的分布式系統(tǒng),這對于企業(yè)大規(guī)模應(yīng)用程序的開發(fā)至關(guān)重要。
相關(guān)技術(shù):
-
Apache Zookeeper:分布式協(xié)調(diào)服務(wù),可用于維護配置信息、實現(xiàn)名字服務(wù)、提供分布式同步、提供組服務(wù)等。 -
Consul:提供服務(wù)發(fā)現(xiàn)、配置和分段功能的中間件。 -
Netflix Eureka:一個基于 REST 的服務(wù),主要用于 AWS 云中,可用于實現(xiàn)服務(wù)注冊和發(fā)現(xiàn),以進行負載均衡和故障切換。
對于國內(nèi) Java 開發(fā)者,推薦學(xué)習(xí) Dubbo RPC 框架、Zookeeper 中間件和 Spring Cloud 框架,基本上就能夠開發(fā)分布式系統(tǒng)了。Zookeeper 一定要認真學(xué),這玩意的應(yīng)用場景太多了,很多大數(shù)據(jù)組件(比如 Hadoop)都用到了 Zookeeper 來實現(xiàn)高可用。
12、并發(fā)和并行
其實就是并發(fā)編程嘛,如何編排設(shè)計出合理的并發(fā)程序、如何利用并發(fā)和并行提高執(zhí)行效率,是架構(gòu)師要掌握的關(guān)鍵技能。
相關(guān)技術(shù):
-
Java 并發(fā)框架:比如經(jīng)典的 JUC,提供了很多并發(fā)類庫。 -
Fork/Join 框架:簡化了并行應(yīng)用程序的開發(fā)過程。 -
Reactive Streams:提供一個具有非阻塞背壓特性的異步流處理標準。
對于國內(nèi) Java 開發(fā)者,JUC 是必備技能,剛開始學(xué)習(xí)時,先會用 JUC 中的類來實現(xiàn)并發(fā)即可;等有時間了,需要閱讀一些并發(fā)編程相關(guān)的書籍,理解并發(fā)編程底層的原理、并通過實際項目開發(fā)來提升并發(fā)程序的設(shè)計能力。
13、性能調(diào)優(yōu)和優(yōu)化
調(diào)優(yōu)技術(shù)也是區(qū)分開發(fā)者和架構(gòu)師能力的關(guān)鍵,架構(gòu)師需要定期調(diào)優(yōu) Java 應(yīng)用程序,確保其在不同條件和規(guī)模下高效運行。
相關(guān)技術(shù):
-
Java Mission Control:用于監(jiān)控、管理和故障排除 Java 應(yīng)用程序的一套工具。 -
VisualVM:一個集成了多個命令行 JDK 工具和輕量級性能分析功能的可視化工具。 -
JProfiler:一個強大的 Java 分析器,有助于排除性能瓶頸。
對于國內(nèi) Java 開發(fā)者,可以先通過做項目和閱讀文章掌握一些基本的程序優(yōu)化思路,等有一定開發(fā)能力后,可以專門去學(xué)習(xí)下 JVM 原理、以及如何使用工具來分析和調(diào)優(yōu) JVM。
14、理解 Java 生態(tài)系統(tǒng)和更新
雖然大多數(shù)開發(fā)者使用的都是老版本的 Java(比如 Java 8),但架構(gòu)師可不能只會 Java 8,要持續(xù)理解 Java 的更新和生態(tài)系統(tǒng),確保使用最有效和安全的版本特性。
相關(guān)技術(shù):
-
JDK 17+:最新的長期支持 (LTS) 版本的 Java。 -
OpenJDK:Java 平臺標準版的免費開源實現(xiàn)。
對于國內(nèi) Java 開發(fā)者,大多數(shù)項目用 Java 8 就足夠了,但是也建議學(xué)習(xí)下 Java 11 和 Java 17 的新特性,現(xiàn)在用這些版本的公司也越來越多了。
15、架構(gòu)模式和最佳實踐
架構(gòu)師架構(gòu)師,要能夠根據(jù)具體的場景設(shè)計選擇合適的架構(gòu)模式,使應(yīng)用程序更加健壯和可維護。
相關(guān)技術(shù):
-
MVC (模型-視圖-控制器):開發(fā)用戶界面常用的架構(gòu)模式,比如 Spring MVC 框架。 -
CQRS (命令查詢責(zé)任分離):一種將讀取和更新操作分離到數(shù)據(jù)存儲中的模式。 -
Event Sourcing(事件溯源):將業(yè)務(wù)實體的狀態(tài)存儲為狀態(tài)變化事件的序列。
對于國內(nèi) Java 開發(fā)者,MVC 應(yīng)該是最熟悉的,不多說了。在能夠熟練開發(fā)出基本的 CRUD 程序后,建議學(xué)習(xí)下 23 種經(jīng)典的策略模式,尤其是單例模式、工廠模式、策略模式、代理模式等等,有助于我們設(shè)計出可擴展的程序,并且更好地學(xué)習(xí)大佬的源碼。
16、測試和測試驅(qū)動開發(fā) (TDD)
TDD(Test-Driven Development)是一種軟件開發(fā)方法論,其實很好理解,就是在編寫實際代碼之前,先編寫測試代碼,然后持續(xù)編寫代碼直到所有測試都通過。這樣做可以幫助開發(fā)者更全面地覆蓋代碼的各個分支和邊界條件,而且每次修改后立即運行測試,能夠快速獲得程序正確與否的反饋。
相關(guān)技術(shù):
-
JUnit:一個簡單的單元測試框架,用于編寫可重復(fù)的測試。 -
Mockito:一個用于 Java 單元測試的模擬框架。 -
Selenium:用于測試網(wǎng)頁應(yīng)用的框架,是一個經(jīng)典的爬蟲工具。
對于國內(nèi) Java 開發(fā)者,必須要會使用 JUnit 編寫單元測試,Mockito 的學(xué)習(xí)成本不高,最好也去了解下如何使用。TDD 了解一下就好,一般自己做項目也很少用到,企業(yè)中也有專門的測試同學(xué)出用例。
17、圖數(shù)據(jù)庫
圖數(shù)據(jù)庫能夠高效地處理高度連接的數(shù)據(jù),這在現(xiàn)代應(yīng)用開發(fā)中越來越重要。
相關(guān)技術(shù):
-
Neo4j:高度可擴展的本地圖數(shù)據(jù)庫,專門設(shè)計用于管理和利用數(shù)據(jù)之間的關(guān)系。 -
Amazon Neptune:一個完全托管的圖數(shù)據(jù)庫服務(wù)。 -
ArangoDB:一種本地多模型數(shù)據(jù)庫系統(tǒng)。
對于國內(nèi) Java 開發(fā)者,圖數(shù)據(jù)庫的應(yīng)用并不多(相比于 MySQL、MongoDB 來說),不是必學(xué)的技術(shù),作為擴展知識了解即可。
18、大數(shù)據(jù)與分析
利用大數(shù)據(jù)技術(shù)和分析工具對大型數(shù)據(jù)集進行處理,是從中提取寶貴見解所必不可少的。
相關(guān)技術(shù):
-
Apache Hadoop:知名的大數(shù)據(jù)開源框架,允許在集群上進行大數(shù)據(jù)集的分布式處理。 -
Apache Spark:統(tǒng)一的大規(guī)模數(shù)據(jù)處理分析引擎。 -
Elasticsearch:一個分布式的、RESTful 的搜索和分析引擎。
對于國內(nèi) Java 開發(fā)者,大數(shù)據(jù)也不是必學(xué)的技術(shù),但 Elasticsearch 是需要學(xué)習(xí)的,因為它的核心應(yīng)用場景是搜索,而搜索幾乎是每個應(yīng)用都要有的功能。大數(shù)據(jù)開發(fā)和 Java 開發(fā)有一定的相關(guān)性(比如都要寫 SQL),在學(xué)完后端技術(shù)棧后,建議大家優(yōu)先去學(xué)大數(shù)據(jù),能夠?qū)W到很多數(shù)據(jù)處理的方法和分布式的思想,便于后續(xù)開發(fā)中處理海量的數(shù)據(jù)。
19、人工智能與機器學(xué)習(xí)
現(xiàn)在 AI 有多火不言而喻,學(xué)習(xí)人工智能和機器學(xué)習(xí)也能夠為我們成為優(yōu)秀的架構(gòu)師增加可能性和競爭力。
相關(guān)技術(shù):
-
TensorFlow:一個開源機器學(xué)習(xí)庫。 -
Deeplearning4j:面向 JVM 的深度學(xué)習(xí)庫。 -
Weka:一組用于數(shù)據(jù)挖掘任務(wù)的機器學(xué)習(xí)算法。
人工智能的學(xué)習(xí)成本還是很高的,對于國內(nèi) Java 開發(fā)者,先會調(diào)用別人提供的大模型接口,能利用 AI 開發(fā)出應(yīng)用程序就行。
20、區(qū)塊鏈技術(shù)
理解區(qū)塊鏈的基本原理及其潛在應(yīng)用,可以幫助我們設(shè)計出更安全的、去中心化的應(yīng)用程序。
相關(guān)技術(shù):
-
Hyperledger Fabric:一個具有權(quán)限控制能力的區(qū)塊鏈基礎(chǔ)設(shè)施。 -
Ethereum:一個運行智能合約的去中心化平臺。 -
Corda:專為企業(yè)設(shè)計的開源區(qū)塊鏈平臺。
雖然 Java 不是區(qū)塊鏈開發(fā)的主語言,但是我也建議 Java 開發(fā)者接觸下區(qū)塊鏈、學(xué)習(xí)如何開發(fā)去中心化的程序,畢竟技術(shù)是好的。
最后
以上就是本期分享,搞了好幾千字,可以看到,想成為一名優(yōu)秀的 Java 架構(gòu)師還是很不容易的。學(xué)無止境,希望朋友們能持續(xù)關(guān)注最新技術(shù)、學(xué)習(xí)最佳實踐,蹭蹭漲薪。
???? 點擊下方閱讀原文,獲取魚皮往期編程干貨。
往期推薦
我的編程學(xué)習(xí)小圈子
學(xué)弟說 JVM 是他最熟的技術(shù),被我狠狠吊打!
我在簡歷上寫了這個,超級加分~
AI 智能答題項目,保姆級教程!
我做個人站長 7 年的經(jīng)驗,最痛的莫過于。。
面試刷題,用這個神器就夠了
