前言
最近趁著國慶節放假休息,特地整理了一下,阿里巴巴開源的10款神級專案,
這些開源專案中的絕大多數,我都在實際作業中用過,或者有同事用過,確實挺不錯,挺有價值的,現在推薦給大家,
最近無意間獲得一份BAT大廠大佬寫的刷題筆記,一下子打通了我的任督二脈,越來越覺得演算法沒有想象中那么難了,
BAT大佬寫的刷題筆記,讓我offer拿到手軟
1. Druid
Druid自稱是Java語言中最好的資料庫連接池,它能夠提供強大的監控和擴展功能,監控后臺如下圖所示:

Druid的主要優點如下:
- 它能監控資料庫訪問性能,
- 它提供了WallFilter,它是基于SQL語意分析來實作防御SQL注入攻擊的,
- 它提供了多種監測連接泄漏的手段,
- 它提供了資料庫密碼加密的功能,
- 它能列印SQL執行日志,
github地址: https://github.com/alibaba/druid
maven中央倉庫: https://mvnrepository.com/artifact/com.alibaba/druid
配置maven依賴:
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>${druid-version}</version>
</dependency>
2. fastjson
fastjson是阿里巴巴的開源JSON決議庫,它可以決議JSON格式的字串,支持將Java Bean序列化為JSON字串,也可以從JSON字串反序列化到JavaBean,
fastjson的主要優點如下:
- 速度快,fastjson相對其他JSON庫的特點是快,從2011年fastjson發布1.1.x版本之后,其性能從未被其他Java實作的JSON庫超越,
- 使用廣泛,fastjson在阿里巴巴大規模使用,在數萬臺服務器上部署,fastjson在業界被廣泛接受,在2012年被開源中國評選為最受歡迎的國產開源軟體之一,
- 使用簡單,fastjson的API十分簡潔,
//序列化
String text = JSON.toJSONString(obj);
//反序列化
VO vo = JSON.parseObject("{...}", VO.class);
- 功能完備,支持泛型,支持流處理超大文本,支持列舉,支持序列化和反序列化擴展,
github地址: https://github.com/alibaba/fastjson
maven中央倉庫: https://mvnrepository.com/artifact/com.alibaba/fastjson
配置maven依賴:
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.76</version>
</dependency>
3. Dubbo
Apache Dubbo 是一款微服務開發框架,它提供了 RPC通信 與 微服務治理 兩大關鍵能力,這意味著,使用 Dubbo 開發的微服務,將具備相互之間的遠程發現與通信能力, 同時利用 Dubbo 提供的豐富服務治理能力,可以實作諸如服務發現、負載均衡、流量調度等服務治理訴求,
同時 Dubbo 是高度可擴展的,用戶幾乎可以在任意功能點去定制自己的實作,以改變框架的默認行為來滿足自己的業務需求,它目前已交給Apache管理和維護,
架構圖如下:

Dubbo的主要優點如下:
- 基于透明介面的RPC
- 智能負載均衡
- 自動服務注冊和發現
- 高擴展性
- 運行時流量路由
- 可視化服務治理
- 云原生友好
github地址: https://github.com/apache/dubbo
maven中央倉庫: https://mvnrepository.com/artifact/com.alibaba/dubbo/
配置maven依賴:
<properties>
<dubbo.version>3.0.3</dubbo.version>
</properties>
<dependencies>
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo</artifactId>
<version>${dubbo.version}</version>
</dependency>
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-dependencies-zookeeper</artifactId>
<version>${dubbo.version}</version>
<type>pom</type>
</dependency>
</dependencies>
4. Rocketmq
Apache RocketMQ是一個分布式訊息和流媒體平臺,具有低延遲、高性能和可靠性、萬億級容量和靈活的可擴展性,
它提供了多種功能:
- 訊息傳遞模式,包括發布/訂閱、請求/回復和流媒體
- 金融級交易訊息
- 基于DLedger的內置容錯和高可用配置選項
- 多種跨語言客戶端,如Java、C/C++、Python、Go
- 可插拔傳輸協議,例如 TCP、SSL、AIO
- 內置訊息追蹤能力,也支持opentracing
- 多功能大資料和流媒體生態系統集成
- 按時間或偏移量的訊息追溯
- 可靠的 FIFO 和同一佇列中的嚴格有序訊息傳遞
- 高效的拉推式消費模式
- 單個佇列百萬級訊息累積能力
- 多種訊息傳遞協議,如 JMS 和 OpenMessaging
- 靈活的分布式橫向擴展部署架構
- 閃電般的批量訊息交換系統
- 各種訊息過濾機制,例如 SQL 和 Tag
- 用于隔離測驗和云隔離集群的 Docker 鏡像
- 用于配置、指標和監控的功能豐富的管理儀表板
- 認證和授權
- 免費的開源連接器,用于源和接收器
rocketmq后臺管理界面:

github地址: https://github.com/apache/rocketmq
maven中央倉庫: https://mvnrepository.com/artifact/org.apache.rocketmq/rocketmq-spring-boot-starter
rocketmq包含:服務端和客戶端,在我們的專案中主要關注客戶端的代碼即可,
配置maven依賴:
<dependency>
<groupId>org.apache.rocketmq</groupId>
<artifactId>rocketmq-client</artifactId>
<version>4.3.0</version>
</dependency>
4. Arthas
Arthas 是Alibaba開源的Java診斷工具,深受開發者喜愛,
當你遇到以下類似問題而束手無策時,Arthas可以幫助你解決:
- 這個類從哪個 jar 包加載的?為什么會報各種類相關的 Exception?
- 我改的代碼為什么沒有執行到?難道是我沒 commit?分支搞錯了?
- 遇到問題無法在線上 debug,難道只能通過加日志再重新發布嗎?
- 線上遇到某個用戶的資料處理有問題,但線上同樣無法 debug,線下無法重現!
- 是否有一個全域視角來查看系統的運行狀況?
- 有什么辦法可以監控到JVM的實時運行狀態?
- 怎么快速定位應用的熱點,生成火焰圖?
- 怎樣直接從JVM內查找某個類的實體?
分析代碼消耗時間:

Arthas支持JDK 6+,能夠運行在多種作業系統上,比如:Linux/Mac/Windows,采用命令列互動模式,同時提供豐富的 Tab 自動補全功能,進一步方便進行問題的定位和診斷,
github地址: https://alibaba.github.io/arthas/
maven中央倉庫: https://mvnrepository.com/artifact/com.taobao.arthas/arthas-spring-boot-starter
在目標機器執行如下命令即可啟動arthas:
curl -O https://arthas.aliyun.com/arthas-boot.jar
java -jar arthas-boot.jar
5. Nacos
Nacos是一個易于使用的平臺,專為動態服務發現和配置以及服務管理而設計,它可以幫助您輕松構建云原生應用程式和微服務平臺,
服務是Nacos的一等公民,Nacos 支持幾乎所有型別的服務,例如Dubbo/gRPC 服務、Spring Cloud RESTFul 服務或Kubernetes 服務,
Nacos 提供了四大功能,
服務發現和服務健康檢查,Nacos 使服務通過 DNS 或 HTTP 介面注冊自己和發現其他服務變得簡單,Nacos 還提供服務的實時健康檢查,以防止向不健康的主機或服務實體發送請求,動態配置管理,動態配置服務允許您在所有環境中以集中和動態的方式管理所有服務的配置,Nacos 無需在更新配置時重新部署應用程式和服務,這使得配置更改更加高效和敏捷,動態 DNS 服務,Nacos 支持加權路由,讓您更容易在資料中心內的生產環境中實作中層負載均衡、靈活的路由策略、流量控制和簡單的 DNS 決議服務,它可以幫助您輕松實作基于 DNS 的服務發現,并防止應用程式耦合到特定于供應商的服務發現 API,服務和元資料管理,Nacos 提供了一個易于使用的服務儀表板,幫助您管理您的服務元資料、配置、kubernetes DNS、服務健康和指標統計,
Nacos 地圖:

Nacos 生態圖:

github地址: https://github.com/alibaba/nacos
maven中央倉庫: https://mvnrepository.com/artifact/com.alibaba.cloud/spring-cloud-starter-alibaba-nacos-discovery
6. easyexcel
Java決議、生成Excel比較有名的框架有Apache poi、jxl,但他們都存在一個嚴重的問題就是非常的耗記憶體,poi有一套SAX模式的API可以一定程度的解決一些記憶體溢位的問題,但POI還是有一些缺陷,比如07版Excel解壓縮以及解壓后存盤都是在記憶體中完成的,記憶體消耗依然很大,
easyexcel重寫了poi對07版Excel的決議,一個3M的excel用POI sax決議依然需要100M左右記憶體,改用easyexcel可以降低到幾M,并且再大的excel也不會出現記憶體溢位;03版依賴POI的sax模式,在上層做了模型轉換的封裝,讓使用者更加簡單方便,
64M記憶體1分鐘內讀取75M(46W行25列)的Excel

github地址: https://github.com/alibaba/easyexcel
maven中央倉庫: https://mvnrepository.com/artifact/com.alibaba/easyexcel
配置maven依賴:
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>easyexcel</artifactId>
<version>2.2.6</version>
</dependency>
7. Sentinel
隨著分布式系統變得越來越流行,服務之間的可靠性變得比以往任何時候都更加重要,
Sentinel以“流量”為切入點,在流量控制、 流量整形、熔斷、系統自適應保護等多個領域開展作業,保障微服務的可靠性和彈性,
Sentinel具有以下特點:
豐富的適用場景:Sentinel在阿里巴巴得到了廣泛的應用,幾乎覆寫了近10年雙11(11.11)購物節的所有核心場景,比如需要限制突發流量的“秒殺”滿足系統容量、訊息削峰填谷、下游不可靠業務斷路、集群流量控制等,實時監控:Sentinel 還提供實時監控能力,可以實時查看單臺機器的運行時資訊,以及500個節點以下集群的運行時資訊匯總,廣泛的開源生態系統:Sentinel 提供與 Spring Cloud、Dubbo 和 gRPC 等常用框架和庫的開箱即用集成,您只需將配接器依賴項添加到您的服務即可輕松使用 Sentinel,多語言支持:Sentinel 為 Java、Go和C++提供了本機支持,豐富的SPI擴展:Sentinel提供簡單易用的SPI擴展介面,可以讓您快速自定義邏輯,例如自定義規則管理、適配資料源等,
功能概述:

生態系統景觀:

github地址: https://github.com/alibaba/Sentinel
maven中央倉庫: https://mvnrepository.com/artifact/com.alibaba.csp/sentinel-core
配置maven依賴:
<dependency>
<groupId>com.alibaba.csp</groupId>
<artifactId>sentinel-core</artifactId>
<version>1.8.2</version>
</dependency>
8. otter
阿里巴巴B2B公司,因為業務的特性,賣家主要集中在國內,買家主要集中在國外,所以衍生出了杭州和美國異地機房的需求,同時為了提升用戶體驗,整個機房的架構為雙A,兩邊均可寫,由此誕生了otter這樣一個產品,
otter第一版本可追溯到04~05年,此次外部開源的版本為第4版,開發時間從2011年7月份一直持續到現在,目前阿里巴巴B2B內部的本地/異地機房的同步需求基本全上了otte4,
目前同步規模:
- 同步資料量6億
- 檔案同步1.5TB(2000w張圖片)
- 涉及200+個資料庫實體之間的同步
- 80+臺機器的集群規模
otter能解決什么?
-
異構庫同步, mysql -> mysql/oracle. (目前開源版本只支持mysql增量,目標庫可以是mysql或者oracle,取決于canal的功能) -
單機房同步(資料庫之間RTT < 1ms)a. 資料庫版本升級
b. 資料表遷移
c. 異步二級索引
-
異地機房同步(比如阿里巴巴國際站就是杭州和美國機房的資料庫同步,RTT > 200ms,亮點)a. 機房容災
-
雙向同步a. 避免回環演算法 (通用的解決方案,支持大部分關系型資料庫)
b. 資料一致性演算法 (保證雙A機房模式下,資料保證最終一致性,亮點)
-
檔案同步
站點鏡像 (進行資料復制的同時,復制關聯的圖片,比如復制產品資料,同時復制產品圖片).
作業原理圖:

單機房復制示意圖:

異地機房復制示意圖:

github地址: https://github.com/alibaba/otter
maven中央倉庫: https://mvnrepository.com/artifact/com.alibaba.otter/canal.client
9. P3C
P3C插件呈現了阿里巴巴 Java 編碼指南,它整合了阿里巴巴集團技術團隊多年來的最佳編程實踐,由于我們鼓勵重用和更好地理解彼此的程式,因此大量 Java 編程團隊對跨專案的代碼質量提出了苛刻的要求,
阿里巴巴過去見過很多編程問題,例如,有缺陷的資料庫表結構和索引設計可能會導致軟體架構缺陷和性能風險,另一個例子是混亂的代碼結構難以維護,此外,未經身份驗證的易受攻擊的代碼容易受到黑客的攻擊,為了解決這些問題,我們為阿里巴巴的Java開發人員撰寫了這份檔案,
更多資訊請參考阿里巴巴Java編碼指南:
- 中文版:阿里巴巴Java開發手冊
- 英文版:Alibaba Java Coding Guidelines
該專案由3部分組成:
- PMD 實作
- IntelliJ IDEA 插件
- Eclipse 插件
四十九條規則是基于PMD實作的,更多詳細資訊請參考P3C-PMD檔案,IDE 插件(IDEA 和 Eclipse)中實作的四個規則如下:
-
[Mandatory]禁止使用已棄用的類或方法,
注意:例如,應該使用 decode(String source, String encode) 而不是不推薦使用的方法 decode(String encodeStr),一旦介面被棄用,介面提供者就有義務提供一個新的介面,同時,客戶端程式員有義務檢查它的新實作是什么, -
[Mandatory]來自介面或抽象類的重寫方法必須用 @Override 注釋標記,反例:對于 getObject() 和 get0bject(),第一個是字母“O”,第二個是數字“0”,為了準確判斷覆寫是否成功,需要一個@Override注解,同時,一旦抽象類中的方法簽名發生變化,實作類將立即報告編譯時錯誤,
-
[Mandatory] 靜態欄位或方法應直接通過其類名而不是其對應的物件名來參考,
-
[Mandatory] hashCode 和 equals 的用法應該遵循:
- 如果 equals 被覆寫,則覆寫 hashCode,
- 這兩個方法必須為 Set 重寫,因為它們用于確保不會在 Set 中插入重復的物件,
- 如果使用自定義物件作為 Map 的鍵,則必須覆寫這兩個方法,注意:String 可以用作 Map 的鍵,因為這兩個方法已經被重寫,
使用p3c插件的效果:

最新版阿里巴巴Java開發手冊下載地址:
https://github.com/alibaba/p3c/blob/master/Java開發手冊(嵩山版).pdf
github地址:https://github.com/alibaba/p3c/tree/master/idea-plugin
最近無意間獲得一份BAT大廠大佬寫的刷題筆記,一下子打通了我的任督二脈,越來越覺得演算法沒有想象中那么難了,
BAT大佬寫的刷題筆記,讓我offer拿到手軟
10. Spring Cloud Alibaba
Spring Cloud Alibaba 為分布式應用開發提供一站式解決方案,它包含開發分布式應用程式所需的所有組件,使您可以輕松地使用 Spring Cloud 開發應用程式,
使用Spring Cloud Alibaba,您只需添加一些注解和少量配置,即可將Spring Cloud應用連接到阿里巴巴的分布式解決方案,并通過阿里巴巴中間件構建分布式應用系統,
主要功能如下:
流量控制和服務降級:默認支持 HTTP 服務的流量控制,您還可以使用注釋自定義流量控制和服務降級規則,規則可以動態更改,服務注冊和發現:可以注冊服務,客戶端可以使用 Spring 管理的 bean,自動集成 Ribbon 來發現實體,分布式配置:支持分布式系統中的外化配置,配置變化時自動重繪,事件驅動:支持構建與共享訊息系統連接的高度可擴展的事件驅動微服務,分布式事務:支持高性能、易用的分布式事務解決方案,阿里云物件存盤:海量、安全、低成本、高可靠的云存盤服務,支持隨時隨地在任何應用程式中存盤和訪問任何型別的資料,阿里云SchedulerX:精準、高可靠、高可用的定時作業調度服務,回應時間秒級,阿里云短信:覆寫全球的短信服務,阿里短信提供便捷、高效、智能的通訊能力,幫助企業快速聯系客戶,
主要包含如下組件:
Sentinel:把流量作為切入點,從流量控制、熔斷降級、系統負載保護等多個維度保護服務的穩定性,Nacos:一個更易于構建云原生應用的動態服務發現、配置管理和服務管理平臺,RocketMQ:一款開源的分布式訊息系統,基于高可用分布式集群技術,提供低延時的、高可靠的訊息發布與訂閱服務,Dubbo:Apache Dubbo? 是一款高性能 Java RPC 框架,Seata:阿里巴巴開源產品,一個易于使用的高性能微服務分布式事務解決方案,Alibaba Cloud OSS: 阿里云物件存盤服務(Object Storage Service,簡稱 OSS),是阿里云提供的海量、安全、低成本、高可靠的云存盤服務,您可以在任何應用、任何時間、任何地點存盤和訪問任意型別的資料,Alibaba Cloud SchedulerX: 阿里中間件團隊開發的一款分布式任務調度產品,提供秒級、精準、高可靠、高可用的定時(基于 Cron 運算式)任務調度服務,Alibaba Cloud SMS: 覆寫全球的短信服務,友好、高效、智能的互聯化通訊能力,幫助企業迅速搭建客戶觸達通道,
github地址: https://github.com/alibaba/spring-cloud-alibaba
配置maven依賴:
<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>2.2.6.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/306232.html
標籤:java
