From 821db5fe2aa901ebf05757ae542f6751e1382bee Mon Sep 17 00:00:00 2001 From: guide Date: Sat, 19 Jun 2021 10:26:10 +0800 Subject: [PATCH 01/36] add websocket --- README.md | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index 7fc4a93..7e3f8d2 100644 --- a/README.md +++ b/README.md @@ -266,21 +266,25 @@ Solr 比较老牌了,但是,目前生态以及社区活跃度都比不上 El ### 日志 -- **EKL 老三件套** : 最原始的时候,ELK 是由 3 个开源项目的首字母构成,分别是 **E**lasticsearch 、**L**ogstash、**K**ibana。 -- **新一代 ELK 架构** : Elasticsearch+Logstash+Kibana+Beats。 -- **EFK** : EFK 中的 F 代表的是 [Fluentd](https://github.com/fluent/fluentd)。 -- **[TLog](https://gitee.com/dromara/TLog)** :一个轻量级的分布式日志标记追踪神器,10 分钟即可接入,自动对日志打标签完成微服务的链路追踪。 +1. **EKL 老三件套** : 最原始的时候,ELK 是由 3 个开源项目的首字母构成,分别是 **E**lasticsearch 、**L**ogstash、**K**ibana。 +2. **新一代 ELK 架构** : Elasticsearch+Logstash+Kibana+Beats。 +3. **EFK** : EFK 中的 F 代表的是 [Fluentd](https://github.com/fluent/fluentd)。 +4. **[TLog](https://gitee.com/dromara/TLog)** :一个轻量级的分布式日志标记追踪神器,10 分钟即可接入,自动对日志打标签完成微服务的链路追踪。 ### 监控 -- **[Spring Boot Admin](https://github.com/codecentric/spring-boot-admin)** :管理和监控 Spring Boot 应用程序。 -- **[Metrics](https://github.com/dropwizard/metrics)** :捕获**JVM**和应用程序级别的指标。所以你知道发生了什么事。 +1. **[Spring Boot Admin](https://github.com/codecentric/spring-boot-admin)** :管理和监控 Spring Boot 应用程序。 +2. **[Metrics](https://github.com/dropwizard/metrics)** :捕获**JVM**和应用程序级别的指标。所以你知道发生了什么事。 ### HTTP 客户端 1. **[Retrofit](https://github.com/square/retrofit)** :适用于 Android 和 Java 的类型安全的 HTTP 客户端。Retrofit 的 HTTP 请求使用的是 [OkHttp](https://square.github.io/okhttp/) 库(一款被广泛使用网络框架)。 2. **[Forest](https://gitee.com/dromara/forest)** :轻量级 HTTP 客户端 API 框架,让 Java 发送 HTTP/HTTPS 请求不再难。它比 OkHttp 和 HttpClient 更高层,是封装调用第三方 restful api client 接口的好帮手,是 retrofit 和 feign 之外另一个选择。 +### WebSocket + +1. **[netty-websocket-spring-boot-starter](https://github.com/YeautyYE/netty-websocket-spring-boot-starter)** :帮助你在 Spring Boot 中使用 Netty 来开发 WebSocket 服务器,并像 spring-websocket 的注解开发一样简单 + ### 测试 为了能让我们编写的系统更加健壮,必要的测试(UI 测试、单元测试...)是必须的。 From 840bc100e97a9fa3dbf494bdf1463a06dfc2162c Mon Sep 17 00:00:00 2001 From: guide Date: Fri, 9 Jul 2021 15:57:07 +0800 Subject: [PATCH 02/36] add algorithm-base --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 7e3f8d2..fdebf77 100644 --- a/README.md +++ b/README.md @@ -38,6 +38,7 @@ 3. **[leetcode](https://github.com/doocs/leetcode)** :多种编程语言实现 LeetCode、《剑指 Offer(第 2 版)》、《程序员面试金典(第 6 版)》题解。 4. **[LeetCode-Solution-in-Good-Style](https://github.com/liweiwei1419/LeetCode-Solution-in-Good-Style)** :这个项目是作者在学习《算法与数据结构》的时候,在 [LeetCode(力扣)](https://leetcode-cn.com/) 上做的练习,刷题以 Java 语言为主。作者在刷题的时候,非常考虑代码质量,他的很多问题的回答都被 Leetcode 官方精选,值得推荐! 5. **[Algorithms-in-4-Steps](https://github.com/Xunzhuo/Algorithms-in-4-Steps)** :四步从 0 到 1 系统学习算法和数据结构。 +6. **[algorithm-base](https://github.com/chefyuan/algorithm-base)** :专门为刚开始刷题的同学准备的算法基地,没有最细只有更细,立志用动画将晦涩难懂的算法说的通俗易懂! ### 计算机基础 From 80ccbd62f0bc2cf6afebd99071cd68b2446023e8 Mon Sep 17 00:00:00 2001 From: guide Date: Fri, 9 Jul 2021 16:09:35 +0800 Subject: [PATCH 03/36] Update README.md --- README.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/README.md b/README.md index fdebf77..9788058 100644 --- a/README.md +++ b/README.md @@ -129,6 +129,12 @@ _Guide 哥注:权限管理系统在企业级的项目中一般都是非常重 1. [听说你要接私活?Guide 连夜整理了 5 个开源免费的 Java 项目快速开发脚手架。](https://sourl.cn/cFyLTR) 2. [解放双手,再来推荐 5 个 Java 项目开发快速开发脚手架!项目经验和私活都不愁了!](https://sourl.cn/StkiAv) +### 造轮子 + +- **[guide-rpc-framework](https://github.com/Snailclimb/guide-rpc-framework)** :一款基于 Netty+Kyro+Zookeeper 实现的自定义 RPC 框架-附详细实现过程和相关教程。 +- **[mini-spring](https://github.com/DerekYRC/mini-spring)** :简化版的 Spring 框架,能帮助你快速熟悉 Spring 源码和掌握 Spring 的核心原理。代码极度简化,保留了 Spring 的核心功能,如 IoC 和 AOP、资源加载器等核心功能。 +- **[itstack-demo-jvm](https://github.com/fuzhengwei/itstack-demo-jvm)** :通过 Java 代码来实现 JVM 的基础功能(搜索解析 class 文件、字节码命令、运行时数据区等。相关阅读:[《zachaxy 的手写 JVM 系列》](https://zachaxy.github.io/tags/JVM/) + ## 系统设计 ### 数据库 From 7ad63e172643bfccd606f0235729647c588f1892 Mon Sep 17 00:00:00 2001 From: guide Date: Fri, 9 Jul 2021 16:27:28 +0800 Subject: [PATCH 04/36] Update README.md --- README.md | 26 ++++++++++++++++---------- 1 file changed, 16 insertions(+), 10 deletions(-) diff --git a/README.md b/README.md index 9788058..cd13ca7 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,19 @@ -👍 推荐:PDF 版本在[公众号 JavaGuide](#公众号) 后台回复“开源”即可获取! -


中文 | English
Great Java project on Github(Github 上非常棒的 Java 开源项目).

+我是 Guide哥,一个工作整整两年,接触编程已经 6 年有余的程序员。大三开源了[JavaGuide](https://github.com/Snailclimb/JavaGuide) (如果无法访问Github,可以访问国内的码云:[JavaGuide](https://gitee.com/SnailClimb/JavaGuide)),目前已经 100k+ Star。 + +未来几年,希望持续完善自己开源的这些项目,争取能够帮助更多学习 Java 的小伙伴!共勉!凎! + +想要了解更多关于我的信息,[点击即可了解我的个人经历](https://link.zhihu.com/?target=https%3A//mp.weixin.qq.com/mp/appmsgalbum%3F__biz%3DMzg2OTA0Njk0OA%3D%3D%26action%3Dgetalbum%26album_id%3D1323354342556057602%23wechat_redirect)。 + +你可以在下面这些平台找到我: + +- [哔哩哔哩@Guide哥](https://space.bilibili.com/504390397) +- [知乎@JavaGuide](https://www.zhihu.com/people/javaguide) +- [微信公众号@JavaGuide](https://www.yuque.com/docs/share/71251673-1fef-416e-93d7-489a25a9eda5?#) + +👉[我把学习 Java 必备的一些书籍的 PDF 版本统一分类整理了下来,需要的小伙伴可以自取](https://gitee.com/SnailClimb/awesome-cs#%E8%B5%84%E6%96%99%E4%B8%8B%E8%BD%BD) (百度云链接放在公众号,需要关注一波。不喜欢公众号内容的话,领取了资料之后取关即可)。 + 大家都知道 Github 是一个程序员福地,这里有各种厉害的开源框架、软件或者教程。这些东西对于我们学习和进步有着莫大的进步,所以我有了这个将 Github 上非常棒的 Java 开源项目整理下来的想法。我会按照几个维度对项目进行分类,以便大家查阅。当然,如果你觉得不错的话,欢迎给本项目点个 Star。我会用我的业余时间持续完善这份名单,谢谢 🙏。 欢迎大家推荐自己觉得不错的 Java 项目,下面项目的排序很大程度是根据当前项目的 Star 数量。 @@ -373,18 +385,12 @@ Solr 比较老牌了,但是,目前生态以及社区活跃度都比不上 El 1. **[Deeplearning4j](https://github.com/eclipse/deeplearning4j)** : Deeplearning4j 是第一个为 Java 和 Scala 编写的商业级,开源,分布式深度学习库。 2. **[Smile](https://github.com/haifengl/smile)** :基于 Java 和 Scala 的机器学习库。 -相关阅读: - -1. [Java 能用于机器学习和数据科学吗?-InfoQ](https://www.infoq.cn/article/GA9UeYlv8ohBzBso9eph) -2. [Deeplearning4j 入门 - IBM Developer](https://developer.ibm.com/zh/technologies/artificial-intelligence/articles/cc-get-started-deeplearning4j/) +相关阅读:[Java 能用于机器学习和数据科学吗?-InfoQ](https://www.infoq.cn/article/GA9UeYlv8ohBzBso9eph) ## 其他 1. **[ip2region](https://github.com/lionsoul2014/ip2region)** :最自由的 ip 地址查询库,ip 到地区的映射库,提供 Binary,B 树和纯内存三种查询算法,妈妈再也不用担心我的 ip 地址定位。 2. **[thingsboard](https://github.com/thingsboard/thingsboard "thingsboard")** :开源物联网平台 - 设备管理,数据收集,处理和可视化。 -## 说明 - -### 公众号 +## 联系我 -![我的公众号](https://cdn.jsdelivr.net/gh/javaguide-tech/blog-images/2020-08/167598cd2e17b8ec.png) \ No newline at end of file From b58a24c98321691798c51e1d4c08e8a3c6b8f68d Mon Sep 17 00:00:00 2001 From: guide Date: Thu, 22 Jul 2021 20:20:33 +0800 Subject: [PATCH 05/36] Update README.md --- README.md | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index cd13ca7..49e30f5 100644 --- a/README.md +++ b/README.md @@ -38,10 +38,11 @@ 9. **[fullstack-tutorial](https://github.com/frank-lam/fullstack-tutorial)** :后台技术栈/架构师之路/全栈开发社区,春招/秋招/校招/面试。 10. **[JavaFamily](https://github.com/AobingJava/JavaFamily "JavaFamily")** :【互联网一线大厂面试+学习指南】进阶知识完全扫盲。 11. **[JGrowing](https://github.com/javagrowing/JGrowing "JGrowing")** :Java is Growing up but not only Java。Java 成长路线,但学到不仅仅是 Java。 -12. **[interview_internal_reference](https://github.com/0voice/interview_internal_reference)** :2019 年最新总结,阿里,腾讯,百度,美团,头条等技术面试题目,以及答案,专家出题人分析汇总。 -13. **[effective-java-3rd-chinese](https://github.com/sjsdfg/effective-java-3rd-chinese)**:Effective Java 中文版(第 3 版),Java 四大名著之一,本书一共包含 90 个条目,每个条目讨论 Java 程序设计中的一条规则。这些规则反映了最有经验的优秀程序员在实践中常用的一些有益的做法。 -14. **[OnJava8](https://github.com/LingCoder/OnJava8)**:《On Java 8》中文版,又名《Java 编程思想》第 5 版, Java 四大名著之一。 -15. **[java-design-patterns](https://github.com/iluwatar/java-design-patterns "java-design-patterns")** : Design patterns implemented in Java。 +12. **[bestJavaer](https://github.com/crisxuan/bestJavaer)** : 这是一个成为更好的Java程序员的系列教程。 +13. **[interview_internal_reference](https://github.com/0voice/interview_internal_reference)** :2019 年最新总结,阿里,腾讯,百度,美团,头条等技术面试题目,以及答案,专家出题人分析汇总。 +14. **[effective-java-3rd-chinese](https://github.com/sjsdfg/effective-java-3rd-chinese)**:Effective Java 中文版(第 3 版),Java 四大名著之一,本书一共包含 90 个条目,每个条目讨论 Java 程序设计中的一条规则。这些规则反映了最有经验的优秀程序员在实践中常用的一些有益的做法。 +15. **[OnJava8](https://github.com/LingCoder/OnJava8)**:《On Java 8》中文版,又名《Java 编程思想》第 5 版, Java 四大名著之一。 +16. **[java-design-patterns](https://github.com/iluwatar/java-design-patterns "java-design-patterns")** : Design patterns implemented in Java。 ### 数据结构/算法 From 6f2ba0721bb5def0183cf441f4cb55ce4a2bba29 Mon Sep 17 00:00:00 2001 From: guide Date: Wed, 11 Aug 2021 10:22:03 +0800 Subject: [PATCH 06/36] =?UTF-8?q?[feat*refractor]=E6=9E=B6=E6=9E=84?= =?UTF-8?q?=E9=87=8D=E6=9E=84&=E6=B7=BB=E5=8A=A0=E6=89=B9=E5=A4=84?= =?UTF-8?q?=E7=90=86=E6=A1=86=E6=9E=B6Spring=20Batch?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 21 ++++++++++----------- 1 file changed, 10 insertions(+), 11 deletions(-) diff --git a/README.md b/README.md index 49e30f5..a0b5f7a 100644 --- a/README.md +++ b/README.md @@ -150,6 +150,12 @@ _Guide 哥注:权限管理系统在企业级的项目中一般都是非常重 ## 系统设计 +### 基础框架 + +- **[Spring Boot ](https://github.com/spring-projects/spring-boot "spring-boot")** :Spring Boot 可以轻松创建独立的生产级基于 Spring 的应用程序,内置 web 服务器让你可以像运行普通 Java 程序一样运行项 目。另外,大部分 Spring Boot 项目只需要少量的配置即可,这有别于 Spring 的重配置。 +- **[SOFABoot](https://github.com/sofastack/sofa-boot)** :SOFABoot 基于 Spring Boot ,不过在其基础上增加了 Readiness Check,类隔离,日志空间隔离等等能力。 配套提供的还有:SOFARPC(RPC 框架)、SOFABolt(基于 Netty 的远程通信框架)、SOFARegistry(注册中心)...详情请参考:[SOFAStack ](https://github.com/sofastack) 。 +- [**Spring Batch**](https://github.com/spring-projects/spring-batch) : Spring Batch是一个轻量级但功能又十分全面的批处理框架,主要用于批处理场景比如从数据库、文件或队列中读取大量记录。不过,需要注意的是:**Spring Batch 不是调度框架**。商业和开源领域都有许多优秀的企业调度框架比如 Quartz、XXL-JOB、Elastic-Job。它旨在与调度程序一起工作,而不是取代调度程序。更多介绍请参考 [Spring Batch 官方文档](https://docs.spring.io/spring-batch/docs/4.3.x/reference/html/spring-batch-intro.html#spring-batch-intro),入门教程可以参考 [Spring Batch从入门到实战](https://mrbird.cc/Spring-Batch入门.html)。 + ### 数据库 #### 连接池 @@ -174,12 +180,6 @@ _Guide 哥注:权限管理系统在企业级的项目中一般都是非常重 ### 微服务&分布式 -#### 基础框架 - -1. **[Spring Boot ](https://github.com/spring-projects/spring-boot "spring-boot")** :Spring Boot 可以轻松创建独立的生产级基于 Spring 的应用程序,内置 web 服务器让你可以像运行普通 Java 程序一样运行项目。另外,大部分 Spring Boot 项目只需要少量的配置即可,这有别于 Spring 的重配置。 -2. **[SOFABoot](https://github.com/sofastack/sofa-boot)** :SOFABoot 基于 Spring Boot ,不过在其基础上增加了 Readiness Check,类隔离,日志空间隔离等等能力。 配套提供的还有:SOFARPC(RPC 框架)、SOFABolt(基于 Netty 的远程通信框架)、SOFARegistry(注册中心)...详情请参考:[SOFAStack ](https://github.com/sofastack) 。 -3. **[spring-cloud-alibaba](https://github.com/alibaba/spring-cloud-alibaba "spring-cloud-alibaba")** : Spring Cloud Alibaba 致力于提供微服务开发的一站式解决方案。此项目包含开发分布式应用微服务的必需组件,方便开发者通过 Spring Cloud 编程模型轻松使用这些组件来开发分布式应用服务。 - #### API 网关 微服务下一个系统被拆分为多个服务,但是像 安全认证,流量控制,日志,监控等功能是每个服务都需要的,没有网关的话,我们就需要在每个服务中单独实现,这使得我们做了很多重复的事情并且没有一个全局的视图来统一管理这些功能。 @@ -199,11 +199,10 @@ _Guide 哥注:权限管理系统在企业级的项目中一般都是非常重 传统的配置文件的方式已经无法满足当前需求,主要有两点原因:一是**安全性得不到保障**(配置放在代码库中容易泄露);二是**时效性不行** (修改配置需要重启服务才能生效)。 -除了 Apollo 和 Spring Cloud Config 之外,Spring Cloud Alibaba 中的 Nacos 组件也可以提高配置功能。 - -3. **[Apollo](https://github.com/ctripcorp/apollo "apollo")** :Apollo(阿波罗)是携程框架部门研发的分布式配置中心,能够集中化管理应用不同环境、不同集群的配置,配置修改后能够实时推送到应用端,并且具备规范的权限、流程治理等特性,适用于微服务配置管理场景。 -4. **[Spring Cloud Config](https://github.com/spring-cloud/spring-cloud-config)** : Spring Cloud Config 是 Spring Cloud 家族中最早的配置中心,虽然后来又发布了 Consul 可以代替配置中心功能,但是 Config 依然适用于 Spring Cloud 项目,通过简单的配置即可实现功能。 -5. **[Consul](https://github.com/hashicorp/consul)** :Consul 是 HashiCorp 公司推出的开源软件,提供了微服务系统中的服务治理、配置中心、控制总线等功能。这些功能中的每一个都可以根据需要单独使用,也可以一起使用以构建全方位的服务网格,总之 Consul 提供了一种完整的服务网格解决方案。 +- **[Apollo](https://github.com/ctripcorp/apollo "apollo")** :Apollo(阿波罗)是携程框架部门研发的分布式配置中心,能够集中化管理应用不同环境、不同集群的配置,配置修改后能够实时推送到应用端,并且具备规范的权限、流程治理等特性,适用于微服务配置管理场景。 +- **[Nacos](https://github.com/alibaba/nacos)** :Nacos 是 Spring Cloud Alibaba 提供的服务注册发现组件,类似于 Consul、Eureka。并且,提供了分布式配置管理功能。 +- **[Spring Cloud Config](https://github.com/spring-cloud/spring-cloud-config)** : Spring Cloud Config 是 Spring Cloud 家族中最早的配置中心,虽然后来又发布了 Consul 可以代替配置中心功能,但是 Config 依然适用于 Spring Cloud 项目,通过简单的配置即可实现功能。 +- **[Consul](https://github.com/hashicorp/consul)** :Consul 是 HashiCorp 公司推出的开源软件,提供了微服务系统中的服务治理、配置中心、控制总线等功能。这些功能中的每一个都可以根据需要单独使用,也可以一起使用以构建全方位的服务网格,总之 Consul 提供了一种完整的服务网格解决方案。 相关阅读:[微服务架构中配置中心的选择:Apollo VS Spring Cloud Config](https://www.jianshu.com/p/d78fa8412cbf) From 03058398a0e09551d2ceda1edbabe43293632516 Mon Sep 17 00:00:00 2001 From: guide Date: Thu, 26 Aug 2021 19:43:07 +0800 Subject: [PATCH 07/36] =?UTF-8?q?[feat]=E6=B7=BB=E5=8A=A0AJ-Captcha?= =?UTF-8?q?=E8=A1=8C=E4=B8=BA=E9=AA=8C=E8=AF=81=E7=A0=81(=E6=BB=91?= =?UTF-8?q?=E5=8A=A8=E6=8B=BC=E5=9B=BE=E3=80=81=E7=82=B9=E9=80=89=E6=96=87?= =?UTF-8?q?=E5=AD=97)=EF=BC=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 52 +++++++++++++++++++++++++++++----------------------- 1 file changed, 29 insertions(+), 23 deletions(-) diff --git a/README.md b/README.md index a0b5f7a..8300d8a 100644 --- a/README.md +++ b/README.md @@ -324,31 +324,19 @@ Solr 比较老牌了,但是,目前生态以及社区活跃度都比不上 El 1. [The Practical Test Pyramid- Martin Fowler](https://martinfowler.com/articles/practical-test-pyramid.html) (很赞的一篇文章,不过是英文的) 2. [浅谈测试之 PowerMock](https://juejin.im/post/6844903982058618894) -## 代码质量&常用工具类 - -1. **[lombok](https://github.com/rzwitserloot/lombok)** :使用 Lombok 我们可以简化我们的 Java 代码,比如使用它之后我们通过注释就可以实现 getter/setter、equals 等方法。 -2. **[guava](https://github.com/google/guava "guava")** :Guava 是一组核心库,其中包括新的集合类型(例如 multimap 和 multiset),不可变集合,图形库以及用于并发、I / O、哈希、原始类型、字符串等的实用程序! -3. **[p3c](https://github.com/alibaba/p3c "p3c")** :Alibaba Java Coding Guidelines pmd implements and IDE plugin。Eclipse 和 IDEA 上都有该插件,推荐使用! -4. **[arthas](https://github.com/alibaba/arthas "arthas")** : Arthas 是 Alibaba 开源的 Java 诊断工具。 -5. **[sonarqube](https://github.com/SonarSource/sonarqube "sonarqube")** :SonarQube 支持所有开发人员编写更干净,更安全的代码。 -6. **[checkstyle](https://github.com/checkstyle/checkstyle "checkstyle")** :Checkstyle 是一种开发工具,可帮助程序员编写符合编码标准的 Java 代码。它使检查 Java 代码的过程自动化,从而使人们不必执行这项无聊(但很重要)的任务。这使其成为想要实施编码标准的项目的理想选择。 -7. **[pmd](https://github.com/pmd/pmd "pmd")** : 可扩展的多语言静态代码分析器。 -8. **[spotbugs](https://github.com/spotbugs/spotbugs "spotbugs")** :SpotBugs 是 FindBugs 的继任者。静态分析工具,用于查找 Java 代码中的错误。 -9. **[hutool](https://github.com/looly/hutool "hutool")** : Hutool 是一个 Java 工具包,也只是一个工具包,它帮助我们简化每一行代码,减少每一个方法,让 Java 语言也可以“甜甜的”。 -10. **[oshi](https://github.com/oshi/oshi "oshi")** :一款为 Java 语言提供的基于 JNA 的(本机)操作系统和硬件信息库。 +## 工具类库 -## Devpos - -### CI +### 代码质量 -1. **[Jenkins](https://github.com/jenkinsci/jenkins)** : Jenkins 是领先的开源自动化服务器。它使用 Java 构建,提供了 1600 多个插件来支持几乎任何东西的自动化,从而使人类实际上可以将时间花在做机器无法做到的事情上。 - -## 工具 - -### 开发必备 - -1. **[Redis Manager](https://github.com/ngbdf/redis-manager)** :Redis Manager 是 Redis 一站式管理平台,支持集群(cluster、master-replica、sentinel)的监控、安装(除 sentinel)、管理、告警以及基本的数据操作功能。 -2. **[Portainer](https://github.com/portainer/portainer)** :可视化管理 Docker 和 Kubernetes。相关阅读:[《吊炸天的 Docker 图形化工具 Portainer,必须推荐给你!》](https://mp.weixin.qq.com/s?__biz=Mzg2OTA0Njk0OA==&mid=2247504221&idx=1&sn=85a3c69d64fba1b0d6d8485ab28ab4c4&chksm=cea19e96f9d617802920d5769bafc824b3b80afdfb6166a00532f0caa3b6f5bdac930e4e89de&token=693114125&lang=zh_CN#rd)。 +- **[lombok](https://github.com/rzwitserloot/lombok)** :使用 Lombok 我们可以简化我们的 Java 代码,比如使用它之后我们通过注释就可以实现 getter/setter、equals 等方法。 +- **[guava](https://github.com/google/guava "guava")** :Guava 是一组核心库,其中包括新的集合类型(例如 multimap 和 multiset),不可变集合,图形库以及用于并发、I / O、哈希、原始类型、字符串等的实用程序! +- **[p3c](https://github.com/alibaba/p3c "p3c")** :Alibaba Java Coding Guidelines pmd implements and IDE plugin。Eclipse 和 IDEA 上都有该插件,推荐使用! +- **[arthas](https://github.com/alibaba/arthas "arthas")** : Arthas 是 Alibaba 开源的 Java 诊断工具。 +- **[sonarqube](https://github.com/SonarSource/sonarqube "sonarqube")** :SonarQube 支持所有开发人员编写更干净,更安全的代码。 +- **[checkstyle](https://github.com/checkstyle/checkstyle "checkstyle")** :Checkstyle 是一种开发工具,可帮助程序员编写符合编码标准的 Java 代码。它使检查 Java 代码的过程自动化,从而使人们不必执行这项无聊(但很重要)的任务。这使其成为想要实施编码标准的项目的理想选择。 +- **[pmd](https://github.com/pmd/pmd "pmd")** : 可扩展的多语言静态代码分析器。 +- **[spotbugs](https://github.com/spotbugs/spotbugs "spotbugs")** :SpotBugs 是 FindBugs 的继任者。静态分析工具,用于查找 Java 代码中的错误。 +- **[hutool](https://github.com/looly/hutool "hutool")** : Hutool 是一个 Java 工具包,也只是一个工具包,它帮助我们简化每一行代码,减少每一个方法,让 Java 语言也可以“甜甜的”。 ### Excel @@ -367,6 +355,24 @@ Solr 比较老牌了,但是,目前生态以及社区活跃度都比不上 El 2. **[postman](https://www.getpostman.com/)** :API 请求生成器。 3. **[postwoman](https://github.com/liyasthomas/postwoman "postwoman")** :API 请求生成器-一个免费、快速、漂亮的 Postma 替代品。 +### 其他 + +- **[oshi](https://github.com/oshi/oshi "oshi")** :一款为 Java 语言提供的基于 JNA 的(本机)操作系统和硬件信息库。 +- **[AJ-Captcha](https://gitee.com/anji-plus/captcha)** :行为验证码(滑动拼图、点选文字),前后端(java)交互。 + +## Devpos + +### CI + +1. **[Jenkins](https://github.com/jenkinsci/jenkins)** : Jenkins 是领先的开源自动化服务器。它使用 Java 构建,提供了 1600 多个插件来支持几乎任何东西的自动化,从而使人类实际上可以将时间花在做机器无法做到的事情上。 + +## 工具 + +### 开发必备 + +1. **[Redis Manager](https://github.com/ngbdf/redis-manager)** :Redis Manager 是 Redis 一站式管理平台,支持集群(cluster、master-replica、sentinel)的监控、安装(除 sentinel)、管理、告警以及基本的数据操作功能。 +2. **[Portainer](https://github.com/portainer/portainer)** :可视化管理 Docker 和 Kubernetes。相关阅读:[《吊炸天的 Docker 图形化工具 Portainer,必须推荐给你!》](https://mp.weixin.qq.com/s?__biz=Mzg2OTA0Njk0OA==&mid=2247504221&idx=1&sn=85a3c69d64fba1b0d6d8485ab28ab4c4&chksm=cea19e96f9d617802920d5769bafc824b3b80afdfb6166a00532f0caa3b6f5bdac930e4e89de&token=693114125&lang=zh_CN#rd)。 + ### Markdown 1. **[Typora](https://www.typora.io/)** :我一直用的一款 Markdown 工具,直接文件夹试图和目录试图,支持 Markdown 格式直接导出成 PDF、HTML 等格式。 From 25a2c3d6bc2ac4ee42f88cca2b9ed630dcd3b200 Mon Sep 17 00:00:00 2001 From: guide Date: Thu, 26 Aug 2021 20:11:33 +0800 Subject: [PATCH 08/36] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 8300d8a..6320dff 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@ 未来几年,希望持续完善自己开源的这些项目,争取能够帮助更多学习 Java 的小伙伴!共勉!凎! -想要了解更多关于我的信息,[点击即可了解我的个人经历](https://link.zhihu.com/?target=https%3A//mp.weixin.qq.com/mp/appmsgalbum%3F__biz%3DMzg2OTA0Njk0OA%3D%3D%26action%3Dgetalbum%26album_id%3D1323354342556057602%23wechat_redirect)。 +想要了解更多关于我的信息,[点击即可了解我的个人经历](https://mp.weixin.qq.com/mp/appmsgalbum?__biz=Mzg2OTA0Njk0OA==&action=getalbum&album_id=2019767912546336773#wechat_redirect)。 你可以在下面这些平台找到我: From 8532bff5a5a15d66a8eecabedf44746ab9d9e257 Mon Sep 17 00:00:00 2001 From: guide Date: Thu, 26 Aug 2021 22:17:49 +0800 Subject: [PATCH 09/36] =?UTF-8?q?[feat]EasyCaptcha(=E5=9B=BE=E5=BD=A2?= =?UTF-8?q?=E9=AA=8C=E8=AF=81=E7=A0=81)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 6320dff..30d0689 100644 --- a/README.md +++ b/README.md @@ -355,10 +355,14 @@ Solr 比较老牌了,但是,目前生态以及社区活跃度都比不上 El 2. **[postman](https://www.getpostman.com/)** :API 请求生成器。 3. **[postwoman](https://github.com/liyasthomas/postwoman "postwoman")** :API 请求生成器-一个免费、快速、漂亮的 Postma 替代品。 +### 验证码 + +- **[EasyCaptcha](https://gitee.com/whvse/EasyCaptcha)** :Java图形验证码,支持gif、中文、算术等类型,可用于Java Web、JavaSE等项目。 +- **[AJ-Captcha](https://gitee.com/anji-plus/captcha)** :行为验证码(滑动拼图、点选文字),前后端(java)交互。 + ### 其他 - **[oshi](https://github.com/oshi/oshi "oshi")** :一款为 Java 语言提供的基于 JNA 的(本机)操作系统和硬件信息库。 -- **[AJ-Captcha](https://gitee.com/anji-plus/captcha)** :行为验证码(滑动拼图、点选文字),前后端(java)交互。 ## Devpos From 6c0ff8aba8e3537c2d509e72ac734f05bc8e7e82 Mon Sep 17 00:00:00 2001 From: guide Date: Fri, 10 Sep 2021 20:05:17 +0800 Subject: [PATCH 10/36] Update README.md --- README.md | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 30d0689..df54cb9 100644 --- a/README.md +++ b/README.md @@ -72,10 +72,8 @@ ### SpringCloud 1. **[SpringCloudLearning](https://github.com/forezp/SpringCloudLearning "SpringCloudLearning")** : 方志朋的《史上最简单的 Spring Cloud 教程源码》。 -2. **[SpringCloud-Learning](https://github.com/dyc87112/SpringCloud-Learning "SpringCloud-Learning")** : Spring Cloud 基础教程,持续连载更新中。 -3. **[spring-cloud](https://github.com/yinjihuan/spring-cloud "spring-cloud")** : 《Spring Cloud 微服务-全栈技术与案例解析》和《Spring Cloud 微服务 入门 实战与进阶》配套源码。 -4. **[spring-cloud-examples](https://github.com/ityouknow/spring-cloud-examples "spring-cloud-examples")** :Spring Cloud 学习案例,服务发现、服务治理、链路追踪、服务监控等 (基本没更新了,Spring Cloud 比较老了)。 -5. **[SpringCloud](https://github.com/zhoutaoo/SpringCloud "SpringCloud")** :基于 SpringCloud2.1 的微服务开发脚手架,整合了 spring-security-oauth2、nacos、feign、sentinel、springcloud-gateway 等。服务治理方面引入 elasticsearch、skywalking、springboot-admin、zipkin 等,让项目开发快速进入业务开发,而不需过多时间花费在架构搭建上。 +2. **[springcloud-learning](https://github.com/macrozheng/springcloud-learning)** : 一套涵盖大部分核心组件使用的Spring Cloud教程,包括Spring Cloud Alibaba及分布式事务Seata,基于Spring Cloud Greenwich及SpringBoot 2.1.7。22篇文章,篇篇精华,32个Demo,涵盖大部分应用场景。 +3. **[SpringCloud](https://github.com/zhoutaoo/SpringCloud "SpringCloud")** :基于 SpringCloud2.1 的微服务开发脚手架,整合了 spring-security-oauth2、nacos、feign、sentinel、springcloud-gateway 等。服务治理方面引入 elasticsearch、skywalking、springboot-admin、zipkin 等,让项目开发快速进入业务开发,而不需过多时间花费在架构搭建上。 相关文章:[Github 点赞接近 70k 的 Spring Cloud 学习教程+实战项目推荐!牛批!](https://mp.weixin.qq.com/s?__biz=Mzg2OTA0Njk0OA==&mid=2247488377&idx=1&sn=0fb33ef330159db5a9c8bc0f029cd739&chksm=cea25cb2f9d5d5a4c7bacc9dcfc90ed86e89f4262e32b40c7aa47af84c747cb6c0429f753e1d&token=496868067&lang=zh_CN#rd) From 594655636bf622aa0503c77f05afc0b207a24e6d Mon Sep 17 00:00:00 2001 From: guide Date: Sun, 10 Oct 2021 22:13:43 +0800 Subject: [PATCH 11/36] Update README.md --- README.md | 18 ++---------------- 1 file changed, 2 insertions(+), 16 deletions(-) diff --git a/README.md b/README.md index df54cb9..5a0c155 100644 --- a/README.md +++ b/README.md @@ -1,19 +1,5 @@


中文 | English
Great Java project on Github(Github 上非常棒的 Java 开源项目).

-我是 Guide哥,一个工作整整两年,接触编程已经 6 年有余的程序员。大三开源了[JavaGuide](https://github.com/Snailclimb/JavaGuide) (如果无法访问Github,可以访问国内的码云:[JavaGuide](https://gitee.com/SnailClimb/JavaGuide)),目前已经 100k+ Star。 - -未来几年,希望持续完善自己开源的这些项目,争取能够帮助更多学习 Java 的小伙伴!共勉!凎! - -想要了解更多关于我的信息,[点击即可了解我的个人经历](https://mp.weixin.qq.com/mp/appmsgalbum?__biz=Mzg2OTA0Njk0OA==&action=getalbum&album_id=2019767912546336773#wechat_redirect)。 - -你可以在下面这些平台找到我: - -- [哔哩哔哩@Guide哥](https://space.bilibili.com/504390397) -- [知乎@JavaGuide](https://www.zhihu.com/people/javaguide) -- [微信公众号@JavaGuide](https://www.yuque.com/docs/share/71251673-1fef-416e-93d7-489a25a9eda5?#) - -👉[我把学习 Java 必备的一些书籍的 PDF 版本统一分类整理了下来,需要的小伙伴可以自取](https://gitee.com/SnailClimb/awesome-cs#%E8%B5%84%E6%96%99%E4%B8%8B%E8%BD%BD) (百度云链接放在公众号,需要关注一波。不喜欢公众号内容的话,领取了资料之后取关即可)。 - 大家都知道 Github 是一个程序员福地,这里有各种厉害的开源框架、软件或者教程。这些东西对于我们学习和进步有着莫大的进步,所以我有了这个将 Github 上非常棒的 Java 开源项目整理下来的想法。我会按照几个维度对项目进行分类,以便大家查阅。当然,如果你觉得不错的话,欢迎给本项目点个 Star。我会用我的业余时间持续完善这份名单,谢谢 🙏。 欢迎大家推荐自己觉得不错的 Java 项目,下面项目的排序很大程度是根据当前项目的 Star 数量。 @@ -23,6 +9,8 @@ - Github 地址:[https://github.com/CodingDocs/awesome-java](https://github.com/CodingDocs/awesome-java) - 码云地址:[https://gitee.com/SnailClimb/awesome-java](https://gitee.com/SnailClimb/awesome-java)(Github 无法访问或者访问速度比较慢的小伙伴可以看码云上的对应内容) +👉[我把学习 Java 必备的一些书籍的 PDF 版本统一分类整理了下来,需要的小伙伴可以自取](https://gitee.com/SnailClimb/awesome-cs#%E8%B5%84%E6%96%99%E4%B8%8B%E8%BD%BD) (百度云链接放在公众号,需要关注一波。不喜欢公众号内容的话,领取了资料之后取关即可) + ## 教程 ### Java @@ -400,5 +388,3 @@ Solr 比较老牌了,但是,目前生态以及社区活跃度都比不上 El 1. **[ip2region](https://github.com/lionsoul2014/ip2region)** :最自由的 ip 地址查询库,ip 到地区的映射库,提供 Binary,B 树和纯内存三种查询算法,妈妈再也不用担心我的 ip 地址定位。 2. **[thingsboard](https://github.com/thingsboard/thingsboard "thingsboard")** :开源物联网平台 - 设备管理,数据收集,处理和可视化。 -## 联系我 - From fa5dea34fa0af0a3eb9e268cea50e201b6a06364 Mon Sep 17 00:00:00 2001 From: guide Date: Mon, 11 Oct 2021 11:21:21 +0800 Subject: [PATCH 12/36] =?UTF-8?q?[feat]=E6=95=B4=E7=90=86=E4=BA=86?= =?UTF-8?q?=E4=B8=80=E4=BA=9B=E6=95=B0=E6=8D=AE=E5=BA=93=E5=BB=BA=E6=A8=A1?= =?UTF-8?q?=E5=92=8C=E7=AE=A1=E7=90=86=E7=9A=84=E5=BC=80=E6=BA=90=E9=A1=B9?= =?UTF-8?q?=E7=9B=AE=E5=92=8C=E5=B7=A5=E5=85=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 36 +++++++++++++++++++++++++++++++----- 1 file changed, 31 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 5a0c155..6a6978f 100644 --- a/README.md +++ b/README.md @@ -9,8 +9,14 @@ - Github 地址:[https://github.com/CodingDocs/awesome-java](https://github.com/CodingDocs/awesome-java) - 码云地址:[https://gitee.com/SnailClimb/awesome-java](https://gitee.com/SnailClimb/awesome-java)(Github 无法访问或者访问速度比较慢的小伙伴可以看码云上的对应内容) +👉 如果你不知道该学习什么的话,请看 [Java 学习线路图是怎样的?](https://zhuanlan.zhihu.com/p/379041500) (原创不易,欢迎点赞,精简版学习路线正在路上),这是 2021 最新最完善的 Java 学习路线! + 👉[我把学习 Java 必备的一些书籍的 PDF 版本统一分类整理了下来,需要的小伙伴可以自取](https://gitee.com/SnailClimb/awesome-cs#%E8%B5%84%E6%96%99%E4%B8%8B%E8%BD%BD) (百度云链接放在公众号,需要关注一波。不喜欢公众号内容的话,领取了资料之后取关即可) +### Sponsor + +![](https://snailclimb.gitee.io/javaguide/media/sponsor/%E7%9F%A5%E8%AF%86%E6%98%9F%E7%90%83.png) + ## 教程 ### Java @@ -26,7 +32,7 @@ 9. **[fullstack-tutorial](https://github.com/frank-lam/fullstack-tutorial)** :后台技术栈/架构师之路/全栈开发社区,春招/秋招/校招/面试。 10. **[JavaFamily](https://github.com/AobingJava/JavaFamily "JavaFamily")** :【互联网一线大厂面试+学习指南】进阶知识完全扫盲。 11. **[JGrowing](https://github.com/javagrowing/JGrowing "JGrowing")** :Java is Growing up but not only Java。Java 成长路线,但学到不仅仅是 Java。 -12. **[bestJavaer](https://github.com/crisxuan/bestJavaer)** : 这是一个成为更好的Java程序员的系列教程。 +12. **[bestJavaer](https://github.com/crisxuan/bestJavaer)** : 这是一个成为更好的 Java 程序员的系列教程。 13. **[interview_internal_reference](https://github.com/0voice/interview_internal_reference)** :2019 年最新总结,阿里,腾讯,百度,美团,头条等技术面试题目,以及答案,专家出题人分析汇总。 14. **[effective-java-3rd-chinese](https://github.com/sjsdfg/effective-java-3rd-chinese)**:Effective Java 中文版(第 3 版),Java 四大名著之一,本书一共包含 90 个条目,每个条目讨论 Java 程序设计中的一条规则。这些规则反映了最有经验的优秀程序员在实践中常用的一些有益的做法。 15. **[OnJava8](https://github.com/LingCoder/OnJava8)**:《On Java 8》中文版,又名《Java 编程思想》第 5 版, Java 四大名著之一。 @@ -60,7 +66,7 @@ ### SpringCloud 1. **[SpringCloudLearning](https://github.com/forezp/SpringCloudLearning "SpringCloudLearning")** : 方志朋的《史上最简单的 Spring Cloud 教程源码》。 -2. **[springcloud-learning](https://github.com/macrozheng/springcloud-learning)** : 一套涵盖大部分核心组件使用的Spring Cloud教程,包括Spring Cloud Alibaba及分布式事务Seata,基于Spring Cloud Greenwich及SpringBoot 2.1.7。22篇文章,篇篇精华,32个Demo,涵盖大部分应用场景。 +2. **[springcloud-learning](https://github.com/macrozheng/springcloud-learning)** : 一套涵盖大部分核心组件使用的 Spring Cloud 教程,包括 Spring Cloud Alibaba 及分布式事务 Seata,基于 Spring Cloud Greenwich 及 SpringBoot 2.1.7。22 篇文章,篇篇精华,32 个 Demo,涵盖大部分应用场景。 3. **[SpringCloud](https://github.com/zhoutaoo/SpringCloud "SpringCloud")** :基于 SpringCloud2.1 的微服务开发脚手架,整合了 spring-security-oauth2、nacos、feign、sentinel、springcloud-gateway 等。服务治理方面引入 elasticsearch、skywalking、springboot-admin、zipkin 等,让项目开发快速进入业务开发,而不需过多时间花费在架构搭建上。 相关文章:[Github 点赞接近 70k 的 Spring Cloud 学习教程+实战项目推荐!牛批!](https://mp.weixin.qq.com/s?__biz=Mzg2OTA0Njk0OA==&mid=2247488377&idx=1&sn=0fb33ef330159db5a9c8bc0f029cd739&chksm=cea25cb2f9d5d5a4c7bacc9dcfc90ed86e89f4262e32b40c7aa47af84c747cb6c0429f753e1d&token=496868067&lang=zh_CN#rd) @@ -140,7 +146,7 @@ _Guide 哥注:权限管理系统在企业级的项目中一般都是非常重 - **[Spring Boot ](https://github.com/spring-projects/spring-boot "spring-boot")** :Spring Boot 可以轻松创建独立的生产级基于 Spring 的应用程序,内置 web 服务器让你可以像运行普通 Java 程序一样运行项 目。另外,大部分 Spring Boot 项目只需要少量的配置即可,这有别于 Spring 的重配置。 - **[SOFABoot](https://github.com/sofastack/sofa-boot)** :SOFABoot 基于 Spring Boot ,不过在其基础上增加了 Readiness Check,类隔离,日志空间隔离等等能力。 配套提供的还有:SOFARPC(RPC 框架)、SOFABolt(基于 Netty 的远程通信框架)、SOFARegistry(注册中心)...详情请参考:[SOFAStack ](https://github.com/sofastack) 。 -- [**Spring Batch**](https://github.com/spring-projects/spring-batch) : Spring Batch是一个轻量级但功能又十分全面的批处理框架,主要用于批处理场景比如从数据库、文件或队列中读取大量记录。不过,需要注意的是:**Spring Batch 不是调度框架**。商业和开源领域都有许多优秀的企业调度框架比如 Quartz、XXL-JOB、Elastic-Job。它旨在与调度程序一起工作,而不是取代调度程序。更多介绍请参考 [Spring Batch 官方文档](https://docs.spring.io/spring-batch/docs/4.3.x/reference/html/spring-batch-intro.html#spring-batch-intro),入门教程可以参考 [Spring Batch从入门到实战](https://mrbird.cc/Spring-Batch入门.html)。 +- [**Spring Batch**](https://github.com/spring-projects/spring-batch) : Spring Batch 是一个轻量级但功能又十分全面的批处理框架,主要用于批处理场景比如从数据库、文件或队列中读取大量记录。不过,需要注意的是:**Spring Batch 不是调度框架**。商业和开源领域都有许多优秀的企业调度框架比如 Quartz、XXL-JOB、Elastic-Job。它旨在与调度程序一起工作,而不是取代调度程序。更多介绍请参考 [Spring Batch 官方文档](https://docs.spring.io/spring-batch/docs/4.3.x/reference/html/spring-batch-intro.html#spring-batch-intro),入门教程可以参考 [Spring Batch 从入门到实战](https://mrbird.cc/Spring-Batch入门.html)。 ### 数据库 @@ -151,12 +157,33 @@ _Guide 哥注:权限管理系统在企业级的项目中一般都是非常重 #### 缓存 +- **[Redis](https://github.com/redis/redis)** :Redis 就是一个使用 C 语言开发的数据库,不过与传统数据库不同的是 Redis 的数据是存在内存中的 ,也就是它是内存数据库,所以读写速度非常快,因此 Redis 被广泛应用于缓存方向。另外,Redis 除了做缓存之外,也经常用来做分布式锁,甚至是消息队列。Redis 提供了多种数据类型来支持不同的业务场景。Redis 还支持事务 、持久化、Lua 脚本、多种集群方案。 - **[Redisson](https://github.com/redisson/redisson "redisson")** : [Redisson](https://redisson.org/ "Redisson")是架设在[Redis](http://redis.cn/ "Redis")基础上的一个 Java 驻内存数据网格(In-Memory Data Grid),支持超过 30 个对象和服务:`Set`,`SortedSet`, `Map`, `List`, `Queue`, `Deque` ......。更多介绍请看:[《Redisson 项目介绍》](https://github.com/redisson/redisson/wiki/Redisson%E9%A1%B9%E7%9B%AE%E4%BB%8B%E7%BB%8D "Redisson项目介绍") #### 框架 1. **[MyBatis-Plus](https://github.com/baomidou/mybatis-plus)** : [MyBatis-Plus](https://github.com/baomidou/mybatis-plus)(简称 MP)是一个 [MyBatis](http://www.mybatis.org/mybatis-3/) 的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。 +#### 数据库建模 + +- **[CHINER](https://gitee.com/robergroup/chiner)** :开源免费的国产数据库建模工具。目标是做一款丰富数据库生态,独立于具体数据库之外的,数据库关系模型设计平台。前生是 [PDMan](https://gitee.com/robergroup/pdman),定位为 PowerDesigner 的免费替代方案。 + +开源的数据库建模工具比较少,以下是一些非开源的数据库建模工具(部分需要付费才能使用) : + +- **[MySQL Workbench](https://www.mysql.com/products/workbench/)** : MySQL 官方为数据库架构师、开发人员和 DBA 提供的一个可视化工具。 MySQL Workbench 支持数据建模,SQL 开发以及服务器配置、用户管理、性能优化、数据库备份以及迁移等功能,支持 Windows、Linux 和 Mac OS X 平台。 +- **[Navicat Data Modeler](https://www.navicat.com.cn/products/navicat-data-modeler)** : 一款强大的和符合成本效益的数据库设计工具,它能帮助用户创建高质素的概念、逻辑和物理数据模型。让你可视化地设计数据库结构、执行逆向或正向工程程序、从 ODBC 数据源导入模型、生成复杂的 SQL/DDL 和打印模型到文件等。付费。 +- **[DbSchema](https://dbschema.com/)** : 一款功能强大的数据库设计和管理的可视化工具,支持几乎所有的关系型和 NoSQL 数据库。付费。 +- **[dbdiagram.io](https://dbdiagram.io/home)** : 是一款简单免费的在线 ER 图绘制工具,通过编写代码创建模型,专为开发人员和数据分析师而设计。它通过一个简单的自定义语言来生成数据模型,支持 MySQL、PostgreSQL、SQL Server 数据库 DDL 文件的正向工程和逆向工程、版本历史、在线共享、导出图片或者 PDF 等功能。dbdiagram.io 提供了免费版。 + +#### 数据库管理 + +- **[Beekeeper Studio](https://github.com/beekeeper-studio/beekeeper-studio)** :跨平台数据库管理工具,颜值高,支持 SQLite、MySQL、MariaDB、Postgres、CockroachDB、SQL Server、Amazon Redshift。 +- **[Sequel Pro](https://github.com/sequelpro/sequelpro)** :适用于 macOS 的 MySQL/MariaDB 数据库管理工具。 +- **[DBeaver](https://github.com/dbeaver/dbeaver)** :一个基于 Java 开发 ,并且支持几乎所有的数据库产品的开源数据库管理工具。DBeaver 社区版不光支持关系型数据库比如MySQL、PostgreSQL、MariaDB、SQLite、Oracle、Db2、SQL Server,还比如 SQLite、H2这些内嵌数据库。还支持常见的全文搜索引擎比如 Elasticsearch 和 Solr、大数据相关的工具比如Hive和 Spark。 +- **[Kangaroo](https://gitee.com/dbkangaroo/kangaroo)** :袋鼠 是一款为热门数据库系统打造的管理客户端(SQLite / MySQL / PostgreSQL / ...) ,支持建表、查询、模型、同步、导入导出等功能,支持 Windows / Mac / Linux 等操作系统,力求打造成好用、好玩、开发友好的 SQL 工具。 +- **[Mongood](https://github.com/RenzHoly/Mongood)** : MongoDB 图形化的管理工具。基于微软 Fluent UI,支持自动黑暗模式 +- + ### 数据同步 1. **[Canal](https://github.com/alibaba/canal "canal")** [kə'næl] : Canal 译意为水道/管道/沟渠,主要用途是基于 MySQL 数据库增量日志解析,提供增量数据订阅和消费。 @@ -343,7 +370,7 @@ Solr 比较老牌了,但是,目前生态以及社区活跃度都比不上 El ### 验证码 -- **[EasyCaptcha](https://gitee.com/whvse/EasyCaptcha)** :Java图形验证码,支持gif、中文、算术等类型,可用于Java Web、JavaSE等项目。 +- **[EasyCaptcha](https://gitee.com/whvse/EasyCaptcha)** :Java 图形验证码,支持 gif、中文、算术等类型,可用于 Java Web、JavaSE 等项目。 - **[AJ-Captcha](https://gitee.com/anji-plus/captcha)** :行为验证码(滑动拼图、点选文字),前后端(java)交互。 ### 其他 @@ -387,4 +414,3 @@ Solr 比较老牌了,但是,目前生态以及社区活跃度都比不上 El 1. **[ip2region](https://github.com/lionsoul2014/ip2region)** :最自由的 ip 地址查询库,ip 到地区的映射库,提供 Binary,B 树和纯内存三种查询算法,妈妈再也不用担心我的 ip 地址定位。 2. **[thingsboard](https://github.com/thingsboard/thingsboard "thingsboard")** :开源物联网平台 - 设备管理,数据收集,处理和可视化。 - From fd1d0adc9c0ffd5a0c396d048ecf2a09ecdf1cdc Mon Sep 17 00:00:00 2001 From: guide Date: Mon, 11 Oct 2021 15:34:56 +0800 Subject: [PATCH 13/36] Update README.md --- README.md | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 6a6978f..694de2f 100644 --- a/README.md +++ b/README.md @@ -15,7 +15,16 @@ ### Sponsor -![](https://snailclimb.gitee.io/javaguide/media/sponsor/%E7%9F%A5%E8%AF%86%E6%98%9F%E7%90%83.png) + + + + + + +
+ + +
## 教程 From 72e7ce5c5d537386a7f2f93b02602a850e749900 Mon Sep 17 00:00:00 2001 From: guide Date: Wed, 20 Oct 2021 19:27:29 +0800 Subject: [PATCH 14/36] =?UTF-8?q?[feat]=E6=B7=BB=E5=8A=A0=E9=9D=A2?= =?UTF-8?q?=E8=AF=95=E5=85=AB=E8=82=A1=E6=96=87=E9=A1=B9=E7=9B=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 31 ++++++++++++++++--------------- 1 file changed, 16 insertions(+), 15 deletions(-) diff --git a/README.md b/README.md index 694de2f..8c00caa 100644 --- a/README.md +++ b/README.md @@ -31,21 +31,22 @@ ### Java 1. **[JavaGuide](https://github.com/Snailclimb/JavaGuide "JavaGuide")** :【Java 学习+面试指南】 一份涵盖大部分 Java 程序员所需要掌握的核心知识。 -2. **[advanced-java](https://github.com/doocs/advanced-java "advanced-java")** :互联网 Java 工程师进阶知识完全扫盲:涵盖高并发、分布式、高可用、微服务、海量数据处理等领域知识。 -3. **[miaosha](https://github.com/qiurunze123/miaosha "miaosha")** : 秒杀系统设计与实现.互联网工程师进阶与分析。 -4. **[architect-awesome](https://github.com/xingshaocheng/architect-awesome "architect-awesome")** :后端架构师技术图谱。 -5. **[toBeTopJavaer](https://github.com/hollischuang/toBeTopJavaer "toBeTopJavaer")** :Java 工程师成神之路 。 -6. **[technology-talk](https://github.com/aalansehaiyang/technology-talk)** : 汇总 java 生态圈常用技术框架、开源中间件,系统架构、数据库、大公司架构案例、常用三方类库、项目管理、线上问题排查、个人成长、思考等知识 -7. **[tutorials](https://github.com/eugenp/tutorials "tutorials")**:该项目是一系列小而专注的教程 - 每个教程都涵盖 Java 生态系统中单一且定义明确的开发领域。 当然,它们的重点是 Spring Framework - Spring,Spring Boot 和 Spring Securiyt。 除了 Spring 之外,还有以下技术:核心 Java,Jackson,HttpClient,Guava。 -8. **[JCSprout](https://github.com/crossoverJie/JCSprout "JCSprout")** :处于萌芽阶段的 Java 核心知识库。 -9. **[fullstack-tutorial](https://github.com/frank-lam/fullstack-tutorial)** :后台技术栈/架构师之路/全栈开发社区,春招/秋招/校招/面试。 -10. **[JavaFamily](https://github.com/AobingJava/JavaFamily "JavaFamily")** :【互联网一线大厂面试+学习指南】进阶知识完全扫盲。 -11. **[JGrowing](https://github.com/javagrowing/JGrowing "JGrowing")** :Java is Growing up but not only Java。Java 成长路线,但学到不仅仅是 Java。 -12. **[bestJavaer](https://github.com/crisxuan/bestJavaer)** : 这是一个成为更好的 Java 程序员的系列教程。 -13. **[interview_internal_reference](https://github.com/0voice/interview_internal_reference)** :2019 年最新总结,阿里,腾讯,百度,美团,头条等技术面试题目,以及答案,专家出题人分析汇总。 -14. **[effective-java-3rd-chinese](https://github.com/sjsdfg/effective-java-3rd-chinese)**:Effective Java 中文版(第 3 版),Java 四大名著之一,本书一共包含 90 个条目,每个条目讨论 Java 程序设计中的一条规则。这些规则反映了最有经验的优秀程序员在实践中常用的一些有益的做法。 -15. **[OnJava8](https://github.com/LingCoder/OnJava8)**:《On Java 8》中文版,又名《Java 编程思想》第 5 版, Java 四大名著之一。 -16. **[java-design-patterns](https://github.com/iluwatar/java-design-patterns "java-design-patterns")** : Design patterns implemented in Java。 +2. **[interview-guide](https://github.com/csguide-dabai/interview-guide)** :总结了后端面试八股文中的重点,希望能帮助各位准备互联网开发岗校招面试的同学。 +3. **[advanced-java](https://github.com/doocs/advanced-java "advanced-java")** :互联网 Java 工程师进阶知识完全扫盲:涵盖高并发、分布式、高可用、微服务、海量数据处理等领域知识。 +4. **[miaosha](https://github.com/qiurunze123/miaosha "miaosha")** : 秒杀系统设计与实现.互联网工程师进阶与分析。 +5. **[architect-awesome](https://github.com/xingshaocheng/architect-awesome "architect-awesome")** :后端架构师技术图谱。 +6. **[toBeTopJavaer](https://github.com/hollischuang/toBeTopJavaer "toBeTopJavaer")** :Java 工程师成神之路 。 +7. **[technology-talk](https://github.com/aalansehaiyang/technology-talk)** : 汇总 java 生态圈常用技术框架、开源中间件,系统架构、数据库、大公司架构案例、常用三方类库、项目管理、线上问题排查、个人成长、思考等知识 +8. **[tutorials](https://github.com/eugenp/tutorials "tutorials")**:该项目是一系列小而专注的教程 - 每个教程都涵盖 Java 生态系统中单一且定义明确的开发领域。 当然,它们的重点是 Spring Framework - Spring,Spring Boot 和 Spring Securiyt。 除了 Spring 之外,还有以下技术:核心 Java,Jackson,HttpClient,Guava。 +9. **[JCSprout](https://github.com/crossoverJie/JCSprout "JCSprout")** :处于萌芽阶段的 Java 核心知识库。 +10. **[fullstack-tutorial](https://github.com/frank-lam/fullstack-tutorial)** :后台技术栈/架构师之路/全栈开发社区,春招/秋招/校招/面试。 +11. **[JavaFamily](https://github.com/AobingJava/JavaFamily "JavaFamily")** :【互联网一线大厂面试+学习指南】进阶知识完全扫盲。 +12. **[JGrowing](https://github.com/javagrowing/JGrowing "JGrowing")** :Java is Growing up but not only Java。Java 成长路线,但学到不仅仅是 Java。 +13. **[bestJavaer](https://github.com/crisxuan/bestJavaer)** : 这是一个成为更好的 Java 程序员的系列教程。 +14. **[interview_internal_reference](https://github.com/0voice/interview_internal_reference)** :2019 年最新总结,阿里,腾讯,百度,美团,头条等技术面试题目,以及答案,专家出题人分析汇总。 +15. **[effective-java-3rd-chinese](https://github.com/sjsdfg/effective-java-3rd-chinese)**:Effective Java 中文版(第 3 版),Java 四大名著之一,本书一共包含 90 个条目,每个条目讨论 Java 程序设计中的一条规则。这些规则反映了最有经验的优秀程序员在实践中常用的一些有益的做法。 +16. **[OnJava8](https://github.com/LingCoder/OnJava8)**:《On Java 8》中文版,又名《Java 编程思想》第 5 版, Java 四大名著之一。 +17. **[java-design-patterns](https://github.com/iluwatar/java-design-patterns "java-design-patterns")** : Design patterns implemented in Java。 ### 数据结构/算法 From b7b3e81449cfded87254b5642b30447601967365 Mon Sep 17 00:00:00 2001 From: guide Date: Mon, 25 Oct 2021 14:27:44 +0800 Subject: [PATCH 15/36] =?UTF-8?q?[feat]=E6=B7=BB=E5=8A=A0=E9=98=BF?= =?UTF-8?q?=E9=87=8C=E4=BA=91=E6=9C=80=E6=96=B0=E5=BC=80=E6=BA=90=E7=9A=84?= =?UTF-8?q?=E5=88=86=E5=B8=83=E5=BC=8F=E6=95=B0=E6=8D=AE=E5=BA=93PolarDB-X?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index 8c00caa..99b754b 100644 --- a/README.md +++ b/README.md @@ -165,15 +165,15 @@ _Guide 哥注:权限管理系统在企业级的项目中一般都是非常重 1. **[Druid](https://github.com/alibaba/druid)** : 阿里巴巴数据库事业部出品,为监控而生的数据库连接池。 2. **[HikariCP](https://github.com/brettwooldridge/HikariCP)** : 一个可靠的高性能 JDBC 连接池。Springboot 2.0 选择 HikariCP 作为默认数据库连接池。 +#### 框架 + +1. **[MyBatis-Plus](https://github.com/baomidou/mybatis-plus)** : [MyBatis-Plus](https://github.com/baomidou/mybatis-plus)(简称 MP)是一个 [MyBatis](http://www.mybatis.org/mybatis-3/) 的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。 + #### 缓存 - **[Redis](https://github.com/redis/redis)** :Redis 就是一个使用 C 语言开发的数据库,不过与传统数据库不同的是 Redis 的数据是存在内存中的 ,也就是它是内存数据库,所以读写速度非常快,因此 Redis 被广泛应用于缓存方向。另外,Redis 除了做缓存之外,也经常用来做分布式锁,甚至是消息队列。Redis 提供了多种数据类型来支持不同的业务场景。Redis 还支持事务 、持久化、Lua 脚本、多种集群方案。 - **[Redisson](https://github.com/redisson/redisson "redisson")** : [Redisson](https://redisson.org/ "Redisson")是架设在[Redis](http://redis.cn/ "Redis")基础上的一个 Java 驻内存数据网格(In-Memory Data Grid),支持超过 30 个对象和服务:`Set`,`SortedSet`, `Map`, `List`, `Queue`, `Deque` ......。更多介绍请看:[《Redisson 项目介绍》](https://github.com/redisson/redisson/wiki/Redisson%E9%A1%B9%E7%9B%AE%E4%BB%8B%E7%BB%8D "Redisson项目介绍") -#### 框架 - -1. **[MyBatis-Plus](https://github.com/baomidou/mybatis-plus)** : [MyBatis-Plus](https://github.com/baomidou/mybatis-plus)(简称 MP)是一个 [MyBatis](http://www.mybatis.org/mybatis-3/) 的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。 - #### 数据库建模 - **[CHINER](https://gitee.com/robergroup/chiner)** :开源免费的国产数据库建模工具。目标是做一款丰富数据库生态,独立于具体数据库之外的,数据库关系模型设计平台。前生是 [PDMan](https://gitee.com/robergroup/pdman),定位为 PowerDesigner 的免费替代方案。 @@ -191,8 +191,11 @@ _Guide 哥注:权限管理系统在企业级的项目中一般都是非常重 - **[Sequel Pro](https://github.com/sequelpro/sequelpro)** :适用于 macOS 的 MySQL/MariaDB 数据库管理工具。 - **[DBeaver](https://github.com/dbeaver/dbeaver)** :一个基于 Java 开发 ,并且支持几乎所有的数据库产品的开源数据库管理工具。DBeaver 社区版不光支持关系型数据库比如MySQL、PostgreSQL、MariaDB、SQLite、Oracle、Db2、SQL Server,还比如 SQLite、H2这些内嵌数据库。还支持常见的全文搜索引擎比如 Elasticsearch 和 Solr、大数据相关的工具比如Hive和 Spark。 - **[Kangaroo](https://gitee.com/dbkangaroo/kangaroo)** :袋鼠 是一款为热门数据库系统打造的管理客户端(SQLite / MySQL / PostgreSQL / ...) ,支持建表、查询、模型、同步、导入导出等功能,支持 Windows / Mac / Linux 等操作系统,力求打造成好用、好玩、开发友好的 SQL 工具。 -- **[Mongood](https://github.com/RenzHoly/Mongood)** : MongoDB 图形化的管理工具。基于微软 Fluent UI,支持自动黑暗模式 -- +- **[Mongood](https://github.com/RenzHoly/Mongood)** : MongoDB 图形化的管理工具。基于微软 Fluent UI,支持自动黑暗模式。 + +#### 分布式数据库 + +- **[PolarDB-X](https://github.com/ApsaraDB/galaxysql)** :PolarDB-X 是一款面向超高并发、海量存储、复杂查询场景设计的云原生分布式数据库系统。其采用 Shared-nothing 与存储计算分离架构,支持水平扩展、分布式事务、混合负载等能力,具备企业级、云原生、高可用、高度兼容 MySQL 系统及生态等特点。 ### 数据同步 From 312c4a7db65e8d53bf102e252c38dd5f1dbb46ed Mon Sep 17 00:00:00 2001 From: guide Date: Mon, 25 Oct 2021 17:48:33 +0800 Subject: [PATCH 16/36] =?UTF-8?q?=E5=85=8D=E8=B4=B9=E9=80=81=E4=B8=80?= =?UTF-8?q?=E5=8F=B0=E9=98=BF=E9=87=8C=E4=BA=91=E6=9C=8D=E5=8A=A1=E5=99=A8?= =?UTF-8?q?=E6=B4=BB=E5=8A=A8=EF=BC=881=E5=B9=B4=EF=BC=8C2=E6=A0=B82g?= =?UTF-8?q?=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index 99b754b..f22762e 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,5 @@ +👉 [免费送阿里云服务器!双11白嫖阿里云2核2g服务器一年(这个服务器平时的价格是 1020/年)!速度上车!!!朋友们!我找阿里云的朋友要的专属福利(顺便帮他完成KPI)。点击这个链接,可以了解如何参与以及活动的相关说明。](https://t.1yb.co/Ewon) +


中文 | English
Great Java project on Github(Github 上非常棒的 Java 开源项目).

大家都知道 Github 是一个程序员福地,这里有各种厉害的开源框架、软件或者教程。这些东西对于我们学习和进步有着莫大的进步,所以我有了这个将 Github 上非常棒的 Java 开源项目整理下来的想法。我会按照几个维度对项目进行分类,以便大家查阅。当然,如果你觉得不错的话,欢迎给本项目点个 Star。我会用我的业余时间持续完善这份名单,谢谢 🙏。 From 626520cd392340f364d2fc85be4da51d2d6d7753 Mon Sep 17 00:00:00 2001 From: guide Date: Wed, 3 Nov 2021 11:25:28 +0800 Subject: [PATCH 17/36] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index f22762e..a717692 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -👉 [免费送阿里云服务器!双11白嫖阿里云2核2g服务器一年(这个服务器平时的价格是 1020/年)!速度上车!!!朋友们!我找阿里云的朋友要的专属福利(顺便帮他完成KPI)。点击这个链接,可以了解如何参与以及活动的相关说明。](https://t.1yb.co/Ewon) +👉 [阿里云双11服务器新人优惠,2核2g ,一年仅需58元!数量有限!速抢](https://www.aliyun.com/minisite/goods?taskPkg=1111ydsrwb&pkgSid=1532&recordId=959605&userCode=hf47liqn)


中文 | English
Great Java project on Github(Github 上非常棒的 Java 开源项目).

From d6511ab3756d1e3976ae26c4c74b4318c6ab1788 Mon Sep 17 00:00:00 2001 From: guide Date: Thu, 4 Nov 2021 11:07:59 +0800 Subject: [PATCH 18/36] =?UTF-8?q?[feat]add=20Recaf(=20Java=20=E5=AD=97?= =?UTF-8?q?=E8=8A=82=E7=A0=81=E7=BC=96=E8=BE=91=E5=99=A8=EF=BC=8C=E5=8F=AF?= =?UTF-8?q?=E7=AE=80=E5=8C=96=E7=BC=96=E8=BE=91=E5=B7=B2=E7=BC=96=E8=AF=91?= =?UTF-8?q?=20Java=20=E5=BA=94=E7=94=A8=E7=A8=8B=E5=BA=8F=E7=9A=84?= =?UTF-8?q?=E8=BF=87=E7=A8=8B)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index a717692..97b6a60 100644 --- a/README.md +++ b/README.md @@ -404,6 +404,7 @@ Solr 比较老牌了,但是,目前生态以及社区活跃度都比不上 El 1. **[Redis Manager](https://github.com/ngbdf/redis-manager)** :Redis Manager 是 Redis 一站式管理平台,支持集群(cluster、master-replica、sentinel)的监控、安装(除 sentinel)、管理、告警以及基本的数据操作功能。 2. **[Portainer](https://github.com/portainer/portainer)** :可视化管理 Docker 和 Kubernetes。相关阅读:[《吊炸天的 Docker 图形化工具 Portainer,必须推荐给你!》](https://mp.weixin.qq.com/s?__biz=Mzg2OTA0Njk0OA==&mid=2247504221&idx=1&sn=85a3c69d64fba1b0d6d8485ab28ab4c4&chksm=cea19e96f9d617802920d5769bafc824b3b80afdfb6166a00532f0caa3b6f5bdac930e4e89de&token=693114125&lang=zh_CN#rd)。 +3. **[Recaf](https://github.com/Col-E/Recaf)** : Java 字节码编辑器,可简化编辑已编译 Java 应用程序的过程。 ### Markdown From c2df031b8234250fdf5c208afa6109da488a71df Mon Sep 17 00:00:00 2001 From: guide Date: Fri, 5 Nov 2021 10:31:36 +0800 Subject: [PATCH 19/36] [feat]add Kafdrop(Kafka Web UI) --- README.md | 22 +++++++++++------- ...5\350\257\206\346\230\237\347\220\203.png" | Bin 0 -> 286154 bytes 2 files changed, 14 insertions(+), 8 deletions(-) create mode 100644 "media/sponsor/\347\237\245\350\257\206\346\230\237\347\220\203.png" diff --git a/README.md b/README.md index 97b6a60..f9f3c55 100644 --- a/README.md +++ b/README.md @@ -15,19 +15,20 @@ 👉[我把学习 Java 必备的一些书籍的 PDF 版本统一分类整理了下来,需要的小伙伴可以自取](https://gitee.com/SnailClimb/awesome-cs#%E8%B5%84%E6%96%99%E4%B8%8B%E8%BD%BD) (百度云链接放在公众号,需要关注一波。不喜欢公众号内容的话,领取了资料之后取关即可) -### Sponsor +## Sponsor
- +
+ ## 教程 ### Java @@ -174,7 +175,7 @@ _Guide 哥注:权限管理系统在企业级的项目中一般都是非常重 #### 缓存 - **[Redis](https://github.com/redis/redis)** :Redis 就是一个使用 C 语言开发的数据库,不过与传统数据库不同的是 Redis 的数据是存在内存中的 ,也就是它是内存数据库,所以读写速度非常快,因此 Redis 被广泛应用于缓存方向。另外,Redis 除了做缓存之外,也经常用来做分布式锁,甚至是消息队列。Redis 提供了多种数据类型来支持不同的业务场景。Redis 还支持事务 、持久化、Lua 脚本、多种集群方案。 -- **[Redisson](https://github.com/redisson/redisson "redisson")** : [Redisson](https://redisson.org/ "Redisson")是架设在[Redis](http://redis.cn/ "Redis")基础上的一个 Java 驻内存数据网格(In-Memory Data Grid),支持超过 30 个对象和服务:`Set`,`SortedSet`, `Map`, `List`, `Queue`, `Deque` ......。更多介绍请看:[《Redisson 项目介绍》](https://github.com/redisson/redisson/wiki/Redisson%E9%A1%B9%E7%9B%AE%E4%BB%8B%E7%BB%8D "Redisson项目介绍") +- **[Redisson](https://github.com/redisson/redisson "redisson")** : [Redisson](https://redisson.org/ "Redisson")是架设在[Redis](http://redis.cn/ "Redis")基础上的一个 Java 驻内存数据网格(In-Memory Data Grid),支持超过 30 个对象和服务:`Set`,`SortedSet`, `Map`, `List`, `Queue`, `Deque` ......。更多介绍请看:[《Redisson 项目介绍》](https://github.com/redisson/redisson/wiki/Redisson%E9%A1%B9%E7%9B%AE%E4%BB%8B%E7%BB%8D "Redisson项目介绍")。 #### 数据库建模 @@ -195,10 +196,6 @@ _Guide 哥注:权限管理系统在企业级的项目中一般都是非常重 - **[Kangaroo](https://gitee.com/dbkangaroo/kangaroo)** :袋鼠 是一款为热门数据库系统打造的管理客户端(SQLite / MySQL / PostgreSQL / ...) ,支持建表、查询、模型、同步、导入导出等功能,支持 Windows / Mac / Linux 等操作系统,力求打造成好用、好玩、开发友好的 SQL 工具。 - **[Mongood](https://github.com/RenzHoly/Mongood)** : MongoDB 图形化的管理工具。基于微软 Fluent UI,支持自动黑暗模式。 -#### 分布式数据库 - -- **[PolarDB-X](https://github.com/ApsaraDB/galaxysql)** :PolarDB-X 是一款面向超高并发、海量存储、复杂查询场景设计的云原生分布式数据库系统。其采用 Shared-nothing 与存储计算分离架构,支持水平扩展、分布式事务、混合负载等能力,具备企业级、云原生、高可用、高度兼容 MySQL 系统及生态等特点。 - ### 数据同步 1. **[Canal](https://github.com/alibaba/canal "canal")** [kə'næl] : Canal 译意为水道/管道/沟渠,主要用途是基于 MySQL 数据库增量日志解析,提供增量数据订阅和消费。 @@ -244,6 +241,10 @@ _Guide 哥注:权限管理系统在企业级的项目中一般都是非常重 相关阅读: [Skywalking 官网对于主流开源链路追踪系统的对比](https://skywalking.apache.org/zh/blog/2019-03-29-introduction-of-skywalking-and-simple-practice.html) +#### 分布式数据库 + +- **[PolarDB-X](https://github.com/ApsaraDB/galaxysql)** :PolarDB-X 是一款面向超高并发、海量存储、复杂查询场景设计的云原生分布式数据库系统。其采用 Shared-nothing 与存储计算分离架构,支持水平扩展、分布式事务、混合负载等能力,具备企业级、云原生、高可用、高度兼容 MySQL 系统及生态等特点。 + ### 高并发 #### 消息队列 @@ -264,6 +265,11 @@ _Guide 哥注:权限管理系统在企业级的项目中一般都是非常重 - [《高性能内存队列——Disruptor》](https://tech.meituan.com/2016/11/18/disruptor.html) - [《你应该知道的高性能无锁队列 Disruptor》](https://juejin.cn/post/6844903648875528206) +消息队列管理工具 : + +1. **[Kafdrop](https://github.com/obsidiandynamics/kafdrop)** : 一个用于查看 Kafka 主题和浏览消费者组的 Web UI。 +2. **[EFAK](https://github.com/smartloli/EFAK)** (Eagle For Apache Kafka,以前叫做 Kafka Eagle) :一个简单的高性能监控系统,用于对 Kafka 集群进行全面的监控和管理。 + #### 数据源&读写分离&分库分表 数据库的数据量大了之后就要考虑读写分离、分库分表,但是一定要尽量能避免分库分表就避免,因为会带来很多其他问题。 @@ -402,7 +408,7 @@ Solr 比较老牌了,但是,目前生态以及社区活跃度都比不上 El ### 开发必备 -1. **[Redis Manager](https://github.com/ngbdf/redis-manager)** :Redis Manager 是 Redis 一站式管理平台,支持集群(cluster、master-replica、sentinel)的监控、安装(除 sentinel)、管理、告警以及基本的数据操作功能。 +2. **[Redis Manager](https://github.com/ngbdf/redis-manager)** :Redis Manager 是 Redis 一站式管理平台,支持集群(cluster、master-replica、sentinel)的监控、安装(除 sentinel)、管理、告警以及基本的数据操作功能。 2. **[Portainer](https://github.com/portainer/portainer)** :可视化管理 Docker 和 Kubernetes。相关阅读:[《吊炸天的 Docker 图形化工具 Portainer,必须推荐给你!》](https://mp.weixin.qq.com/s?__biz=Mzg2OTA0Njk0OA==&mid=2247504221&idx=1&sn=85a3c69d64fba1b0d6d8485ab28ab4c4&chksm=cea19e96f9d617802920d5769bafc824b3b80afdfb6166a00532f0caa3b6f5bdac930e4e89de&token=693114125&lang=zh_CN#rd)。 3. **[Recaf](https://github.com/Col-E/Recaf)** : Java 字节码编辑器,可简化编辑已编译 Java 应用程序的过程。 diff --git "a/media/sponsor/\347\237\245\350\257\206\346\230\237\347\220\203.png" "b/media/sponsor/\347\237\245\350\257\206\346\230\237\347\220\203.png" new file mode 100644 index 0000000000000000000000000000000000000000..565a8406507eb615350de82b6e8fb42cf6966937 GIT binary patch literal 286154 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

iZzrXbFFG$0Lx^j;DIDU&;q6m9>3zTzW`v1j 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

MBoF{3+d8UzVfmxW9=+x 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

J5C7Lq|*9(@c(jnk0;0$!I=1Z`0{nlvh4VUTN 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 z

H@1hhx=cQ!n~x%M7ql#MLh(OmnR%6 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

TLvo4=cI4iu%895@#SLd)r`MGe?DN|m5 zwatEiC`^K=OBu20{7JY1R9{uiAmTNbMN@#nmnm5A`jmRe6IzKAO6tpClSz9-N`8kp zrseokw}4$_WDiFo4fjzhrig@g@|ddw;K%0*A-BrO^Ru8+59LtLTGg6+lx0v|OUMci zyzEaI4nT(39KiLPkFk(^g*BQeN1)5`OS#6n}HkO>|7v zQw!r%vpDZGJU55t%iO0XHZ}Wy_&|?k=#2geOxKa}xP1F?8xport&1K6T%Mj%p3Ut2 zo(E1k73vF=6CKfBd6cYBH)Zr5BeC+$C#Go8 zHm5YZ_WaP_9RmmNnH^-DPLS^2Pd=^E;eDSyVtdzfGjZ7W&r5I;R3X%k??!N2Lk!qc zq>o+1lM}FhY{8fCdS2EI5>RcO)99*a)g~72@V6tERt#)o)a0bz$O|9sy=ssF`)HRO zVLCgi$>z`&I#3$+#||V4Os_wtOE`^yid zihvpOcWxHXwFZ3ACDG9z`$sb+PgvG=o^wmd2RDK+4IGv&6;ef_7#&8s%}bG?Ca{dQ z`|J!>d~{vif%C^_eX7IgIqZyb;O01Axc2~gjbH>HwC(!J>4nK1~!sS|BDgh-suhivv!r)@jDdrBpK~-WiAyVybe|mmA zqInxfIL|_c1Jyu@q4;$A304M`e5(PLnms1z%<=NU0pL^bM}3lzi@n{CSg!dp{!qWw zP~W0bu{#$MsoOJR7Tt z$lh?PvG&)g?CQiOlR^6QV6|@kp>TsH>^UuVzju=52O&{{j4%8ex>#^QsI8g%_8aW1 zGIN`Rx*>Zh3h8YEafXp;I;Yw=JLD$8NJj8j+6cUg^btEK z!p4jL!B!=Ppy{dP!C#$-D@4mzE?c-FN(Zmvfft&HAcN!s(4Pk=2rzjw34id-5JCij z8oX5esy!CoF9a-w_INHeAWUnyz4?yNRN>lsujbC0r!*k6HC2mR6tkCuUD)>p+WjoZ zc7GGp?-_<1#s6WU%D7@?v<*R*0x4n2QiE{;w-3pb)tGb!(`Cpd$wVt z`w54?AsN3?dlQ{*@uaSEL|uAlRN6p)L*ugkoI~o+p_WE8+if3_k_-va!iI7d+%-*_ z#9@0`t%l#R-k}1OjaQyOF^la~8_aLY@_bOJHpne?0PQMuaeEcn)@D$))BfrOE3?Vj z03@S`b@_Npf*4^0Pbsxb)K(YvY4-|X1%|5Fkd0zP%g7q8<~r)*o<&A}S)Pab;$ptW=8!|HaApY#Z`Y5%?b zePe<9#tiG!7SG7X9F5fjp}pVyhtf+<`efiqn=d{DF~LF<@)8#>$7D2nE$E^Ug#p5u z7b)jML2@liAcUx={pS2(G`BDX8Mj<^qi-~3_kkER9=#J&v$)_Ca6oCmZ%HnDb=VMu z6t?=-XzL>No0GpFi*NNP2MCh-6$U<#i6L0o&d)5x{lo{0b_0|KBBDHy9%zPri^+Vu zVawyzmKxjGcy#OV{5jTDxoe^CrQYdk%4Z)49)8R}M^28(^qA+qAnh!X${MP*w&rT}@D0Q~v^4U$qW}__m{i4}WLy=5D`-wB% zoqIFYd9D1QEBCyAP~KjU7>Vs>oY3*dSd>^yZ1hP0jbDaEU|p@7rvw;YMZV5PVM7HA zL3?+pHU4#GTKgr0FH98=BF|9X+Po$c@p}k0dk}BX%B%#1!?F>*Hd|5K#Qt+`9zF+Z z$R>C~78G=k5*s`U#^U@BJG|eczZ7ttb@8eY733eDLgh|lJ*JZVsg(O!aoFDs{+0se zzy+v3%3Y)PHIoS%`kI^U@Yr}evlnF6G_v3|xK8rFKljW0^YhgU8X~-D~Xx{=GZT=~_*qg!|7b=RQezkNl6VN9*(}LbS z$?!B=?*di3iq9Rwhj

PuT_y_+iKWG(JhXxc>T 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 literal 0 HcmV?d00001 From eaffc445b0d3f2dbed2727d96fc7debf364fecd5 Mon Sep 17 00:00:00 2001 From: guide Date: Fri, 5 Nov 2021 11:12:14 +0800 Subject: [PATCH 20/36] =?UTF-8?q?[feat]=E6=B7=BB=E5=8A=A0=E4=BA=86?= =?UTF-8?q?=E4=B8=80=E4=BA=9B=E5=BC=80=E6=BA=90=E4=B9=A6=E7=B1=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 45 +++++++++++++++++++++++---------------------- 1 file changed, 23 insertions(+), 22 deletions(-) diff --git a/README.md b/README.md index f9f3c55..04ab4e1 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -👉 [阿里云双11服务器新人优惠,2核2g ,一年仅需58元!数量有限!速抢](https://www.aliyun.com/minisite/goods?taskPkg=1111ydsrwb&pkgSid=1532&recordId=959605&userCode=hf47liqn) +👉 [阿里云双 11 服务器新人优惠,2 核 2g ,一年仅需 58 元!数量有限!速抢](https://www.aliyun.com/minisite/goods?taskPkg=1111ydsrwb&pkgSid=1532&recordId=959605&userCode=hf47liqn)


中文 | English
Great Java project on Github(Github 上非常棒的 Java 开源项目).

@@ -28,7 +28,6 @@ - ## 教程 ### Java @@ -36,20 +35,13 @@ 1. **[JavaGuide](https://github.com/Snailclimb/JavaGuide "JavaGuide")** :【Java 学习+面试指南】 一份涵盖大部分 Java 程序员所需要掌握的核心知识。 2. **[interview-guide](https://github.com/csguide-dabai/interview-guide)** :总结了后端面试八股文中的重点,希望能帮助各位准备互联网开发岗校招面试的同学。 3. **[advanced-java](https://github.com/doocs/advanced-java "advanced-java")** :互联网 Java 工程师进阶知识完全扫盲:涵盖高并发、分布式、高可用、微服务、海量数据处理等领域知识。 -4. **[miaosha](https://github.com/qiurunze123/miaosha "miaosha")** : 秒杀系统设计与实现.互联网工程师进阶与分析。 -5. **[architect-awesome](https://github.com/xingshaocheng/architect-awesome "architect-awesome")** :后端架构师技术图谱。 -6. **[toBeTopJavaer](https://github.com/hollischuang/toBeTopJavaer "toBeTopJavaer")** :Java 工程师成神之路 。 -7. **[technology-talk](https://github.com/aalansehaiyang/technology-talk)** : 汇总 java 生态圈常用技术框架、开源中间件,系统架构、数据库、大公司架构案例、常用三方类库、项目管理、线上问题排查、个人成长、思考等知识 -8. **[tutorials](https://github.com/eugenp/tutorials "tutorials")**:该项目是一系列小而专注的教程 - 每个教程都涵盖 Java 生态系统中单一且定义明确的开发领域。 当然,它们的重点是 Spring Framework - Spring,Spring Boot 和 Spring Securiyt。 除了 Spring 之外,还有以下技术:核心 Java,Jackson,HttpClient,Guava。 -9. **[JCSprout](https://github.com/crossoverJie/JCSprout "JCSprout")** :处于萌芽阶段的 Java 核心知识库。 -10. **[fullstack-tutorial](https://github.com/frank-lam/fullstack-tutorial)** :后台技术栈/架构师之路/全栈开发社区,春招/秋招/校招/面试。 -11. **[JavaFamily](https://github.com/AobingJava/JavaFamily "JavaFamily")** :【互联网一线大厂面试+学习指南】进阶知识完全扫盲。 -12. **[JGrowing](https://github.com/javagrowing/JGrowing "JGrowing")** :Java is Growing up but not only Java。Java 成长路线,但学到不仅仅是 Java。 -13. **[bestJavaer](https://github.com/crisxuan/bestJavaer)** : 这是一个成为更好的 Java 程序员的系列教程。 -14. **[interview_internal_reference](https://github.com/0voice/interview_internal_reference)** :2019 年最新总结,阿里,腾讯,百度,美团,头条等技术面试题目,以及答案,专家出题人分析汇总。 -15. **[effective-java-3rd-chinese](https://github.com/sjsdfg/effective-java-3rd-chinese)**:Effective Java 中文版(第 3 版),Java 四大名著之一,本书一共包含 90 个条目,每个条目讨论 Java 程序设计中的一条规则。这些规则反映了最有经验的优秀程序员在实践中常用的一些有益的做法。 -16. **[OnJava8](https://github.com/LingCoder/OnJava8)**:《On Java 8》中文版,又名《Java 编程思想》第 5 版, Java 四大名著之一。 -17. **[java-design-patterns](https://github.com/iluwatar/java-design-patterns "java-design-patterns")** : Design patterns implemented in Java。 +4. **[architect-awesome](https://github.com/xingshaocheng/architect-awesome "architect-awesome")** :后端架构师技术图谱。 +5. **[toBeTopJavaer](https://github.com/hollischuang/toBeTopJavaer "toBeTopJavaer")** :Java 工程师成神之路 。 +6. **[technology-talk](https://github.com/aalansehaiyang/technology-talk)** : 汇总 java 生态圈常用技术框架、开源中间件,系统架构、数据库、大公司架构案例、常用三方类库、项目管理、线上问题排查、个人成长、思考等知识 +7. **[tutorials](https://github.com/eugenp/tutorials "tutorials")**:该项目是一系列小而专注的教程 - 每个教程都涵盖 Java 生态系统中单一且定义明确的开发领域。 当然,它们的重点是 Spring Framework - Spring,Spring Boot 和 Spring Securiyt。 除了 Spring 之外,还有以下技术:核心 Java,Jackson,HttpClient,Guava。 +8. **[JCSprout](https://github.com/crossoverJie/JCSprout "JCSprout")** :处于萌芽阶段的 Java 核心知识库。 +9. **[bestJavaer](https://github.com/crisxuan/bestJavaer)** : 这是一个成为更好的 Java 程序员的系列教程。 +10. **[java-design-patterns](https://github.com/iluwatar/java-design-patterns "java-design-patterns")** : 用 Java 实现的设计模式。 ### 数据结构/算法 @@ -89,6 +81,15 @@ 1. **[BigData-Notes](https://github.com/heibaiying/BigData-Notes "BigData-Notes")** :大数据入门指南 ⭐️。 2. **[flink-learning](https://github.com/zhisheng17/flink-learning "flink-learning")** :含 Flink 入门、概念、原理、实战、性能调优、源码解析等内容。 +## 开源书籍 + +1. **[《Effective Java(第 3 版)各章节的中英文学习参考》](https://github.com/clxering/Effective-Java-3rd-edition-Chinese-English-bilingual)** +2. **[《On Java 8 中文版》](https://github.com/LingCoder/OnJava8)** +3. **[《DDIA(设计数据密集型应用) 中文翻译》](https://github.com/Vonng/ddia)** +4. **[《图说设计模式》](https://github.com/me115/design_patterns)** +5. **[《Java 8 简明教程 中文版》](https://github.com/wizardforcel/modern-java-zh)** +6. **[《凤凰架构》](https://github.com/fenixsoft/awesome-fenix)** + ## 实战项目 _Guide 哥注:下面这些推荐的项目几乎都和 Spring Boot 有关,毕竟这年头没有理由再搞 SSM/SSH 这些东西了。_ @@ -183,18 +184,18 @@ _Guide 哥注:权限管理系统在企业级的项目中一般都是非常重 开源的数据库建模工具比较少,以下是一些非开源的数据库建模工具(部分需要付费才能使用) : -- **[MySQL Workbench](https://www.mysql.com/products/workbench/)** : MySQL 官方为数据库架构师、开发人员和 DBA 提供的一个可视化工具。 MySQL Workbench 支持数据建模,SQL 开发以及服务器配置、用户管理、性能优化、数据库备份以及迁移等功能,支持 Windows、Linux 和 Mac OS X 平台。 +- **[MySQL Workbench](https://www.mysql.com/products/workbench/)** : MySQL 官方为数据库架构师、开发人员和 DBA 提供的一个可视化工具。 MySQL Workbench 支持数据建模,SQL 开发以及服务器配置、用户管理、性能优化、数据库备份以及迁移等功能,支持 Windows、Linux 和 Mac OS X 平台。 - **[Navicat Data Modeler](https://www.navicat.com.cn/products/navicat-data-modeler)** : 一款强大的和符合成本效益的数据库设计工具,它能帮助用户创建高质素的概念、逻辑和物理数据模型。让你可视化地设计数据库结构、执行逆向或正向工程程序、从 ODBC 数据源导入模型、生成复杂的 SQL/DDL 和打印模型到文件等。付费。 - **[DbSchema](https://dbschema.com/)** : 一款功能强大的数据库设计和管理的可视化工具,支持几乎所有的关系型和 NoSQL 数据库。付费。 -- **[dbdiagram.io](https://dbdiagram.io/home)** : 是一款简单免费的在线 ER 图绘制工具,通过编写代码创建模型,专为开发人员和数据分析师而设计。它通过一个简单的自定义语言来生成数据模型,支持 MySQL、PostgreSQL、SQL Server 数据库 DDL 文件的正向工程和逆向工程、版本历史、在线共享、导出图片或者 PDF 等功能。dbdiagram.io 提供了免费版。 +- **[dbdiagram.io](https://dbdiagram.io/home)** : 是一款简单免费的在线 ER 图绘制工具,通过编写代码创建模型,专为开发人员和数据分析师而设计。它通过一个简单的自定义语言来生成数据模型,支持 MySQL、PostgreSQL、SQL Server 数据库 DDL 文件的正向工程和逆向工程、版本历史、在线共享、导出图片或者 PDF 等功能。dbdiagram.io 提供了免费版。 #### 数据库管理 - **[Beekeeper Studio](https://github.com/beekeeper-studio/beekeeper-studio)** :跨平台数据库管理工具,颜值高,支持 SQLite、MySQL、MariaDB、Postgres、CockroachDB、SQL Server、Amazon Redshift。 - **[Sequel Pro](https://github.com/sequelpro/sequelpro)** :适用于 macOS 的 MySQL/MariaDB 数据库管理工具。 -- **[DBeaver](https://github.com/dbeaver/dbeaver)** :一个基于 Java 开发 ,并且支持几乎所有的数据库产品的开源数据库管理工具。DBeaver 社区版不光支持关系型数据库比如MySQL、PostgreSQL、MariaDB、SQLite、Oracle、Db2、SQL Server,还比如 SQLite、H2这些内嵌数据库。还支持常见的全文搜索引擎比如 Elasticsearch 和 Solr、大数据相关的工具比如Hive和 Spark。 +- **[DBeaver](https://github.com/dbeaver/dbeaver)** :一个基于 Java 开发 ,并且支持几乎所有的数据库产品的开源数据库管理工具。DBeaver 社区版不光支持关系型数据库比如 MySQL、PostgreSQL、MariaDB、SQLite、Oracle、Db2、SQL Server,还比如 SQLite、H2 这些内嵌数据库。还支持常见的全文搜索引擎比如 Elasticsearch 和 Solr、大数据相关的工具比如 Hive 和 Spark。 - **[Kangaroo](https://gitee.com/dbkangaroo/kangaroo)** :袋鼠 是一款为热门数据库系统打造的管理客户端(SQLite / MySQL / PostgreSQL / ...) ,支持建表、查询、模型、同步、导入导出等功能,支持 Windows / Mac / Linux 等操作系统,力求打造成好用、好玩、开发友好的 SQL 工具。 -- **[Mongood](https://github.com/RenzHoly/Mongood)** : MongoDB 图形化的管理工具。基于微软 Fluent UI,支持自动黑暗模式。 +- **[Mongood](https://github.com/RenzHoly/Mongood)** : MongoDB 图形化的管理工具。基于微软 Fluent UI,支持自动黑暗模式。 ### 数据同步 @@ -409,8 +410,8 @@ Solr 比较老牌了,但是,目前生态以及社区活跃度都比不上 El ### 开发必备 2. **[Redis Manager](https://github.com/ngbdf/redis-manager)** :Redis Manager 是 Redis 一站式管理平台,支持集群(cluster、master-replica、sentinel)的监控、安装(除 sentinel)、管理、告警以及基本的数据操作功能。 -2. **[Portainer](https://github.com/portainer/portainer)** :可视化管理 Docker 和 Kubernetes。相关阅读:[《吊炸天的 Docker 图形化工具 Portainer,必须推荐给你!》](https://mp.weixin.qq.com/s?__biz=Mzg2OTA0Njk0OA==&mid=2247504221&idx=1&sn=85a3c69d64fba1b0d6d8485ab28ab4c4&chksm=cea19e96f9d617802920d5769bafc824b3b80afdfb6166a00532f0caa3b6f5bdac930e4e89de&token=693114125&lang=zh_CN#rd)。 -3. **[Recaf](https://github.com/Col-E/Recaf)** : Java 字节码编辑器,可简化编辑已编译 Java 应用程序的过程。 +3. **[Portainer](https://github.com/portainer/portainer)** :可视化管理 Docker 和 Kubernetes。相关阅读:[《吊炸天的 Docker 图形化工具 Portainer,必须推荐给你!》](https://mp.weixin.qq.com/s?__biz=Mzg2OTA0Njk0OA==&mid=2247504221&idx=1&sn=85a3c69d64fba1b0d6d8485ab28ab4c4&chksm=cea19e96f9d617802920d5769bafc824b3b80afdfb6166a00532f0caa3b6f5bdac930e4e89de&token=693114125&lang=zh_CN#rd)。 +4. **[Recaf](https://github.com/Col-E/Recaf)** : Java 字节码编辑器,可简化编辑已编译 Java 应用程序的过程。 ### Markdown From 33ba5742e6b8afea3f9727dad074bee424d57697 Mon Sep 17 00:00:00 2001 From: guide Date: Fri, 5 Nov 2021 11:19:02 +0800 Subject: [PATCH 21/36] =?UTF-8?q?[feat]=20=E6=B7=BB=E5=8A=A0=20DataX-Web?= =?UTF-8?q?=20=EF=BC=88DataX=E9=9B=86=E6=88=90=E5=8F=AF=E8=A7=86=E5=8C=96?= =?UTF-8?q?=E9=A1=B5=E9=9D=A2=EF=BC=8C=E9=80=89=E6=8B=A9=E6=95=B0=E6=8D=AE?= =?UTF-8?q?=E6=BA=90=E5=8D=B3=E5=8F=AF=E4=B8=80=E9=94=AE=E7=94=9F=E6=88=90?= =?UTF-8?q?=E6=95=B0=E6=8D=AE=E5=90=8C=E6=AD=A5=E4=BB=BB=E5=8A=A1=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 04ab4e1..76e5c2a 100644 --- a/README.md +++ b/README.md @@ -200,7 +200,7 @@ _Guide 哥注:权限管理系统在企业级的项目中一般都是非常重 ### 数据同步 1. **[Canal](https://github.com/alibaba/canal "canal")** [kə'næl] : Canal 译意为水道/管道/沟渠,主要用途是基于 MySQL 数据库增量日志解析,提供增量数据订阅和消费。 -2. **[DataX](https://github.com/alibaba/DataX "DataX")** :DataX 是阿里巴巴集团内被广泛使用的离线数据同步工具/平台,实现包括 MySQL、Oracle、SqlServer、Postgre、HDFS、Hive、ADS、HBase、TableStore(OTS)、MaxCompute(ODPS)、DRDS 等各种异构数据源之间高效的数据同步功能。 +2. **[DataX](https://github.com/alibaba/DataX "DataX")** :DataX 是阿里巴巴集团内被广泛使用的离线数据同步工具/平台,实现包括 MySQL、Oracle、SqlServer、Postgre、HDFS、Hive、ADS、HBase、TableStore(OTS)、MaxCompute(ODPS)、DRDS 等各种异构数据源之间高效的数据同步功能。相关项目:**[DataX-Web](https://github.com/WeiYe-Jing/datax-web)** (DataX集成可视化页面,选择数据源即可一键生成数据同步任务)。 其他:**[Flinkx](https://github.com/DTStack/flinkx)** (基于 Flink 的分布式数据同步工具)。 From 59c21bcdc79e26a94335d31dc7de6a32d241a644 Mon Sep 17 00:00:00 2001 From: guide Date: Sat, 27 Nov 2021 18:59:01 +0800 Subject: [PATCH 22/36] =?UTF-8?q?[feat]=E6=B7=BB=E5=8A=A0=E4=BA=86?= =?UTF-8?q?=E5=87=A0=E4=B8=AA=E6=95=B0=E6=8D=AE=E5=BA=93=E7=9B=B8=E5=85=B3?= =?UTF-8?q?=E7=9A=84=E8=BD=AE=E5=AD=90=E9=A1=B9=E7=9B=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 76e5c2a..5db112e 100644 --- a/README.md +++ b/README.md @@ -153,6 +153,7 @@ _Guide 哥注:权限管理系统在企业级的项目中一般都是非常重 - **[guide-rpc-framework](https://github.com/Snailclimb/guide-rpc-framework)** :一款基于 Netty+Kyro+Zookeeper 实现的自定义 RPC 框架-附详细实现过程和相关教程。 - **[mini-spring](https://github.com/DerekYRC/mini-spring)** :简化版的 Spring 框架,能帮助你快速熟悉 Spring 源码和掌握 Spring 的核心原理。代码极度简化,保留了 Spring 的核心功能,如 IoC 和 AOP、资源加载器等核心功能。 - **[itstack-demo-jvm](https://github.com/fuzhengwei/itstack-demo-jvm)** :通过 Java 代码来实现 JVM 的基础功能(搜索解析 class 文件、字节码命令、运行时数据区等。相关阅读:[《zachaxy 的手写 JVM 系列》](https://zachaxy.github.io/tags/JVM/) +- **[Freedom](https://github.com/alchemystar/Freedom)** :自己DIY一个具有ACID的数据库。相关项目:[MYDB](https://github.com/CN-GuoZiyang/MYDB)(一个简单的数据库实现)、[toyDB](https://github.com/erikgrinaker/toydb)(Rust 实现的分布式 SQL 数据库)。 ## 系统设计 From ea1adc9a4993f872a0f47cc2c0139d47c76d016d Mon Sep 17 00:00:00 2001 From: guide Date: Sat, 4 Dec 2021 18:01:45 +0800 Subject: [PATCH 23/36] Update README.md --- README.md | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 5db112e..8052999 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,8 @@ -👉 [阿里云双 11 服务器新人优惠,2 核 2g ,一年仅需 58 元!数量有限!速抢](https://www.aliyun.com/minisite/goods?taskPkg=1111ydsrwb&pkgSid=1532&recordId=959605&userCode=hf47liqn) - -


中文 | English
Great Java project on Github(Github 上非常棒的 Java 开源项目).

+

+
+ 中文 | English
+ Great Java project on Github(Github 上非常棒的 Java 开源项目). +

大家都知道 Github 是一个程序员福地,这里有各种厉害的开源框架、软件或者教程。这些东西对于我们学习和进步有着莫大的进步,所以我有了这个将 Github 上非常棒的 Java 开源项目整理下来的想法。我会按照几个维度对项目进行分类,以便大家查阅。当然,如果你觉得不错的话,欢迎给本项目点个 Star。我会用我的业余时间持续完善这份名单,谢谢 🙏。 From 992d261bab107d9b3219bf3e89ca85f460d093e4 Mon Sep 17 00:00:00 2001 From: guide Date: Sun, 12 Dec 2021 13:05:39 +0800 Subject: [PATCH 24/36] =?UTF-8?q?[feat]=E6=B7=BB=E5=8A=A0=20Apifox=20?= =?UTF-8?q?=EF=BC=9AAPI=20=E6=96=87=E6=A1=A3=E3=80=81API=20=E8=B0=83?= =?UTF-8?q?=E8=AF=95=E3=80=81API=20Mock=E3=80=81API=20=E8=87=AA=E5=8A=A8?= =?UTF-8?q?=E5=8C=96=E6=B5=8B=E8=AF=95=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 8052999..8a3efd9 100644 --- a/README.md +++ b/README.md @@ -387,11 +387,12 @@ Solr 比较老牌了,但是,目前生态以及社区活跃度都比不上 El 3. **[itext7](https://github.com/itext/itext7)** :iText 7 代表了想要利用利用好 PDF 的开发人员的更高级别的 sdk。iText 7 配备了更好的文档引擎、高级和低级编程功能以及创建、编辑和增强 PDF 文档的能力,几乎对每个工作流都有好处。 4. **[FOP](https://xmlgraphics.apache.org/fop/)** :Apache FOP 项目的主要的输出目标是 PDF。 -### API 请求 +### API 调试 +1. **[Apifox](https://www.apifox.cn/)** :API 文档、API 调试、API Mock、API 自动化测试。 1. **[Insomnia](https://insomnia.rest/)** :像人类而不是机器人一样调试 API。我平时经常用的,界面美观且轻量,总之很喜欢。 -2. **[postman](https://www.getpostman.com/)** :API 请求生成器。 -3. **[postwoman](https://github.com/liyasthomas/postwoman "postwoman")** :API 请求生成器-一个免费、快速、漂亮的 Postma 替代品。 +2. **[Postman](https://www.getpostman.com/)** :API 请求生成器。 +3. **[Postwoman](https://github.com/liyasthomas/postwoman "postwoman")** :API 请求生成器-一个免费、快速、漂亮的 Postma 替代品。 ### 验证码 From c7c299e4b396f6cd0eaea760611ffbe4221a35f5 Mon Sep 17 00:00:00 2001 From: guide Date: Sun, 12 Dec 2021 13:06:46 +0800 Subject: [PATCH 25/36] Update README.md --- README.md | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index 8a3efd9..aaf2290 100644 --- a/README.md +++ b/README.md @@ -387,13 +387,6 @@ Solr 比较老牌了,但是,目前生态以及社区活跃度都比不上 El 3. **[itext7](https://github.com/itext/itext7)** :iText 7 代表了想要利用利用好 PDF 的开发人员的更高级别的 sdk。iText 7 配备了更好的文档引擎、高级和低级编程功能以及创建、编辑和增强 PDF 文档的能力,几乎对每个工作流都有好处。 4. **[FOP](https://xmlgraphics.apache.org/fop/)** :Apache FOP 项目的主要的输出目标是 PDF。 -### API 调试 - -1. **[Apifox](https://www.apifox.cn/)** :API 文档、API 调试、API Mock、API 自动化测试。 -1. **[Insomnia](https://insomnia.rest/)** :像人类而不是机器人一样调试 API。我平时经常用的,界面美观且轻量,总之很喜欢。 -2. **[Postman](https://www.getpostman.com/)** :API 请求生成器。 -3. **[Postwoman](https://github.com/liyasthomas/postwoman "postwoman")** :API 请求生成器-一个免费、快速、漂亮的 Postma 替代品。 - ### 验证码 - **[EasyCaptcha](https://gitee.com/whvse/EasyCaptcha)** :Java 图形验证码,支持 gif、中文、算术等类型,可用于 Java Web、JavaSE 等项目。 @@ -411,6 +404,13 @@ Solr 比较老牌了,但是,目前生态以及社区活跃度都比不上 El ## 工具 +### API 调试 + +1. **[Apifox](https://www.apifox.cn/)** :API 文档、API 调试、API Mock、API 自动化测试。 +2. **[Insomnia](https://insomnia.rest/)** :像人类而不是机器人一样调试 API。我平时经常用的,界面美观且轻量,总之很喜欢。 +3. **[Postman](https://www.getpostman.com/)** :API 请求生成器。 +4. **[Postwoman](https://github.com/liyasthomas/postwoman "postwoman")** :API 请求生成器-一个免费、快速、漂亮的 Postma 替代品。 + ### 开发必备 2. **[Redis Manager](https://github.com/ngbdf/redis-manager)** :Redis Manager 是 Redis 一站式管理平台,支持集群(cluster、master-replica、sentinel)的监控、安装(除 sentinel)、管理、告警以及基本的数据操作功能。 From 55cfd067a308cfad41c69c0322a5f7cb6eab3114 Mon Sep 17 00:00:00 2001 From: guide Date: Sun, 12 Dec 2021 13:13:55 +0800 Subject: [PATCH 26/36] Update README.md --- README.md | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/README.md b/README.md index aaf2290..785c14a 100644 --- a/README.md +++ b/README.md @@ -23,7 +23,7 @@ - + @@ -346,22 +346,29 @@ Solr 比较老牌了,但是,目前生态以及社区活跃度都比不上 El 为了能让我们编写的系统更加健壮,必要的测试(UI 测试、单元测试...)是必须的。 -**框架** : +#### 测试框架 1. **[JUnit](http://junit.org/)** : Java 测试框架。 2. **[Mockito](https://github.com/mockito/mockito)** :Mockito 是一个模拟测试框架,可以让你用优雅,简洁的接口写出漂亮的单元测试。(对那些不容易构建的对象用一个虚拟对象来代替,使其在调试期间用来作为真实对象的替代品) 3. **[PowerMock](https://github.com/powermock/powermock)** : 编写单元测试仅靠 Mockito 是不够。因为 Mockito 无法 mock 私有方法、final 方法及静态方法等。PowerMock 这个 framework,主要是为了扩展其他 mock 框架,如 Mockito、EasyMock。它使用一个自定义的类加载器,纂改字节码,突破 Mockito 无法 mock 静态方法、构造方法、final 类、final 方法以及私有方法的限制。 4. **[WireMock](https://github.com/tomakehurst/wiremock)** :模拟 HTTP 服务的工具(Mock your APIs)。 -**测试平台** : - -- **[MeterSphere](https://github.com/metersphere/metersphere)** : 一站式开源持续测试平台,涵盖测试跟踪、接口测试、性能测试、团队协作等功能,全面兼容 JMeter、Postman、Swagger 等开源、主流标准。 - 相关阅读: 1. [The Practical Test Pyramid- Martin Fowler](https://martinfowler.com/articles/practical-test-pyramid.html) (很赞的一篇文章,不过是英文的) 2. [浅谈测试之 PowerMock](https://juejin.im/post/6844903982058618894) +#### 测试平台 + +- **[MeterSphere](https://github.com/metersphere/metersphere)** : 一站式开源持续测试平台,涵盖测试跟踪、接口测试、性能测试、团队协作等功能,全面兼容 JMeter、Postman、Swagger 等开源、主流标准。 +- **[Apifox](https://www.apifox.cn/)** :API 文档、API 调试、API Mock、API 自动化测试。 + +#### API 调试 + +1. **[Insomnia](https://insomnia.rest/)** :像人类而不是机器人一样调试 API。我平时经常用的,界面美观且轻量,总之很喜欢。 +2. **[Postman](https://www.getpostman.com/)** :API 请求生成器。 +3. **[Postwoman](https://github.com/liyasthomas/postwoman "postwoman")** :API 请求生成器-一个免费、快速、漂亮的 Postma 替代品。 + ## 工具类库 ### 代码质量 @@ -404,13 +411,6 @@ Solr 比较老牌了,但是,目前生态以及社区活跃度都比不上 El ## 工具 -### API 调试 - -1. **[Apifox](https://www.apifox.cn/)** :API 文档、API 调试、API Mock、API 自动化测试。 -2. **[Insomnia](https://insomnia.rest/)** :像人类而不是机器人一样调试 API。我平时经常用的,界面美观且轻量,总之很喜欢。 -3. **[Postman](https://www.getpostman.com/)** :API 请求生成器。 -4. **[Postwoman](https://github.com/liyasthomas/postwoman "postwoman")** :API 请求生成器-一个免费、快速、漂亮的 Postma 替代品。 - ### 开发必备 2. **[Redis Manager](https://github.com/ngbdf/redis-manager)** :Redis Manager 是 Redis 一站式管理平台,支持集群(cluster、master-replica、sentinel)的监控、安装(除 sentinel)、管理、告警以及基本的数据操作功能。 From a8be896008e65346d9632f90bb01365e549b6ead Mon Sep 17 00:00:00 2001 From: guide Date: Wed, 15 Dec 2021 14:47:03 +0800 Subject: [PATCH 27/36] =?UTF-8?q?[feat]=E6=B7=BB=E5=8A=A0=20PrettyZoo?= =?UTF-8?q?=EF=BC=9A=E4=BC=98=E9=9B=85=E7=9A=84=20ZooKeeper=20=E5=9B=BE?= =?UTF-8?q?=E5=BD=A2=E5=8C=96=E7=AE=A1=E7=90=86=E5=AE=A2=E6=88=B7=E7=AB=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 一个基于 Apache Curator 和 JavaFX 实现的 ZooKeeper 图形化管理客户端,颜值非常高,支持 Mac / Windows / Linux 。你可以使用 PrettyZoo 来实现对 ZooKeeper 的可视化增删改查。 --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 785c14a..fccf111 100644 --- a/README.md +++ b/README.md @@ -415,7 +415,8 @@ Solr 比较老牌了,但是,目前生态以及社区活跃度都比不上 El 2. **[Redis Manager](https://github.com/ngbdf/redis-manager)** :Redis Manager 是 Redis 一站式管理平台,支持集群(cluster、master-replica、sentinel)的监控、安装(除 sentinel)、管理、告警以及基本的数据操作功能。 3. **[Portainer](https://github.com/portainer/portainer)** :可视化管理 Docker 和 Kubernetes。相关阅读:[《吊炸天的 Docker 图形化工具 Portainer,必须推荐给你!》](https://mp.weixin.qq.com/s?__biz=Mzg2OTA0Njk0OA==&mid=2247504221&idx=1&sn=85a3c69d64fba1b0d6d8485ab28ab4c4&chksm=cea19e96f9d617802920d5769bafc824b3b80afdfb6166a00532f0caa3b6f5bdac930e4e89de&token=693114125&lang=zh_CN#rd)。 -4. **[Recaf](https://github.com/Col-E/Recaf)** : Java 字节码编辑器,可简化编辑已编译 Java 应用程序的过程。 +4. **[Recaf](https://github.com/Col-E/Recaf)** : Java 字节码编辑器,基于 ASM(Java 字节码操作框架) 来修改字节码,可简化编辑已编译 Java 应用程序的过程。 +4. **[PrettyZoo](https://github.com/vran-dev/PrettyZoo)** : 一个基于 Apache Curator 和 JavaFX 实现的 ZooKeeper 图形化管理客户端,颜值非常高,支持 Mac / Windows / Linux 。你可以使用 PrettyZoo 来实现对 ZooKeeper 的可视化增删改查。 ### Markdown From e4908ef7b7df4c4391eb7df90c5c75d7a55748e1 Mon Sep 17 00:00:00 2001 From: guide Date: Mon, 10 Jan 2022 10:47:55 +0800 Subject: [PATCH 28/36] Update README.md --- README.md | 50 ++++++++++++++++++++++++++++++++------------------ 1 file changed, 32 insertions(+), 18 deletions(-) diff --git a/README.md b/README.md index fccf111..75c3d25 100644 --- a/README.md +++ b/README.md @@ -36,6 +36,7 @@ 1. **[JavaGuide](https://github.com/Snailclimb/JavaGuide "JavaGuide")** :【Java 学习+面试指南】 一份涵盖大部分 Java 程序员所需要掌握的核心知识。 2. **[interview-guide](https://github.com/csguide-dabai/interview-guide)** :总结了后端面试八股文中的重点,希望能帮助各位准备互联网开发岗校招面试的同学。 +2. **[toBeBetterJavaer](https://github.com/itwanger/toBeBetterJavaer)** :一份通俗易懂、风趣幽默的 Java 学习指南,内容涵盖 Java 基础、Java 集合框架、Java 并发编程、JVM、Java 企业级开发(Git、SSM、Spring Boot)等知识点。 3. **[advanced-java](https://github.com/doocs/advanced-java "advanced-java")** :互联网 Java 工程师进阶知识完全扫盲:涵盖高并发、分布式、高可用、微服务、海量数据处理等领域知识。 4. **[architect-awesome](https://github.com/xingshaocheng/architect-awesome "architect-awesome")** :后端架构师技术图谱。 5. **[toBeTopJavaer](https://github.com/hollischuang/toBeTopJavaer "toBeTopJavaer")** :Java 工程师成神之路 。 @@ -155,7 +156,7 @@ _Guide 哥注:权限管理系统在企业级的项目中一般都是非常重 - **[guide-rpc-framework](https://github.com/Snailclimb/guide-rpc-framework)** :一款基于 Netty+Kyro+Zookeeper 实现的自定义 RPC 框架-附详细实现过程和相关教程。 - **[mini-spring](https://github.com/DerekYRC/mini-spring)** :简化版的 Spring 框架,能帮助你快速熟悉 Spring 源码和掌握 Spring 的核心原理。代码极度简化,保留了 Spring 的核心功能,如 IoC 和 AOP、资源加载器等核心功能。 - **[itstack-demo-jvm](https://github.com/fuzhengwei/itstack-demo-jvm)** :通过 Java 代码来实现 JVM 的基础功能(搜索解析 class 文件、字节码命令、运行时数据区等。相关阅读:[《zachaxy 的手写 JVM 系列》](https://zachaxy.github.io/tags/JVM/) -- **[Freedom](https://github.com/alchemystar/Freedom)** :自己DIY一个具有ACID的数据库。相关项目:[MYDB](https://github.com/CN-GuoZiyang/MYDB)(一个简单的数据库实现)、[toyDB](https://github.com/erikgrinaker/toydb)(Rust 实现的分布式 SQL 数据库)。 +- **[Freedom](https://github.com/alchemystar/Freedom)** :自己 DIY 一个具有 ACID 的数据库。相关项目:[MYDB](https://github.com/CN-GuoZiyang/MYDB)(一个简单的数据库实现)、[toyDB](https://github.com/erikgrinaker/toydb)(Rust 实现的分布式 SQL 数据库)。 ## 系统设计 @@ -178,8 +179,9 @@ _Guide 哥注:权限管理系统在企业级的项目中一般都是非常重 #### 缓存 -- **[Redis](https://github.com/redis/redis)** :Redis 就是一个使用 C 语言开发的数据库,不过与传统数据库不同的是 Redis 的数据是存在内存中的 ,也就是它是内存数据库,所以读写速度非常快,因此 Redis 被广泛应用于缓存方向。另外,Redis 除了做缓存之外,也经常用来做分布式锁,甚至是消息队列。Redis 提供了多种数据类型来支持不同的业务场景。Redis 还支持事务 、持久化、Lua 脚本、多种集群方案。 -- **[Redisson](https://github.com/redisson/redisson "redisson")** : [Redisson](https://redisson.org/ "Redisson")是架设在[Redis](http://redis.cn/ "Redis")基础上的一个 Java 驻内存数据网格(In-Memory Data Grid),支持超过 30 个对象和服务:`Set`,`SortedSet`, `Map`, `List`, `Queue`, `Deque` ......。更多介绍请看:[《Redisson 项目介绍》](https://github.com/redisson/redisson/wiki/Redisson%E9%A1%B9%E7%9B%AE%E4%BB%8B%E7%BB%8D "Redisson项目介绍")。 +- **[Caffeine](https://github.com/ben-manes/caffeine)** : 一款强大的本地缓存解决方案,性能非常 🐂。 +- **[Redis](https://github.com/redis/redis)** :一个使用 C 语言开发的内存数据库,分布式缓存首选。 +- **[Redisson](https://github.com/redisson/redisson "redisson")** : Redis 基础上的一个 Java 驻内存数据网格(In-Memory Data Grid),支持超过 30 个对象和服务:`Set`,`SortedSet`, `Map`, `List`, `Queue`, `Deque` ......,并且提供了多种分布式锁的实现。更多介绍请看:[《Redisson 项目介绍》](https://github.com/redisson/redisson/wiki/Redisson%E9%A1%B9%E7%9B%AE%E4%BB%8B%E7%BB%8D "Redisson项目介绍")。 #### 数据库建模 @@ -203,7 +205,7 @@ _Guide 哥注:权限管理系统在企业级的项目中一般都是非常重 ### 数据同步 1. **[Canal](https://github.com/alibaba/canal "canal")** [kə'næl] : Canal 译意为水道/管道/沟渠,主要用途是基于 MySQL 数据库增量日志解析,提供增量数据订阅和消费。 -2. **[DataX](https://github.com/alibaba/DataX "DataX")** :DataX 是阿里巴巴集团内被广泛使用的离线数据同步工具/平台,实现包括 MySQL、Oracle、SqlServer、Postgre、HDFS、Hive、ADS、HBase、TableStore(OTS)、MaxCompute(ODPS)、DRDS 等各种异构数据源之间高效的数据同步功能。相关项目:**[DataX-Web](https://github.com/WeiYe-Jing/datax-web)** (DataX集成可视化页面,选择数据源即可一键生成数据同步任务)。 +2. **[DataX](https://github.com/alibaba/DataX "DataX")** :DataX 是阿里巴巴集团内被广泛使用的离线数据同步工具/平台,实现包括 MySQL、Oracle、SqlServer、Postgre、HDFS、Hive、ADS、HBase、TableStore(OTS)、MaxCompute(ODPS)、DRDS 等各种异构数据源之间高效的数据同步功能。相关项目:**[DataX-Web](https://github.com/WeiYe-Jing/datax-web)** (DataX 集成可视化页面,选择数据源即可一键生成数据同步任务)。 其他:**[Flinkx](https://github.com/DTStack/flinkx)** (基于 Flink 的分布式数据同步工具)。 @@ -274,7 +276,7 @@ _Guide 哥注:权限管理系统在企业级的项目中一般都是非常重 1. **[Kafdrop](https://github.com/obsidiandynamics/kafdrop)** : 一个用于查看 Kafka 主题和浏览消费者组的 Web UI。 2. **[EFAK](https://github.com/smartloli/EFAK)** (Eagle For Apache Kafka,以前叫做 Kafka Eagle) :一个简单的高性能监控系统,用于对 Kafka 集群进行全面的监控和管理。 -#### 数据源&读写分离&分库分表 +#### 多数据源&读写分离&分库分表 数据库的数据量大了之后就要考虑读写分离、分库分表,但是一定要尽量能避免分库分表就避免,因为会带来很多其他问题。 @@ -297,7 +299,7 @@ _Guide 哥注:权限管理系统在企业级的项目中一般都是非常重 1. **[Quartz](https://github.com/quartz-scheduler/quartz)** :一个很火的开源任务调度框架,Java 定时任务领域的老大哥或者说参考标准, 很多其他任务调度框架都是基于 `quartz` 开发的,比如当当网的`elastic-job`就是基于`quartz`二次开发之后的分布式调度解决方案 2. **[XXL-JOB](https://github.com/xuxueli/xxl-job)** :XXL-JOB 是一个分布式任务调度平台,其核心设计目标是开发迅速、学习简单、轻量级、易扩展。现已开放源代码并接入多家公司线上产品线,开箱即用。 3. **[Elastic-Job](http://elasticjob.io/index_zh.html)** :Elastic-Job 是当当网开源的一个基于 Quartz 和 Zookeeper 的分布式调度解决方案,由两个相互独立的子项目 Elastic-Job-Lite 和 Elastic-Job-Cloud 组成,一般我们只要使用 Elastic-Job-Lite 就好。 -4. **[EasyScheduler](https://github.com/analysys/EasyScheduler "EasyScheduler")** ( 更名为 DolphinScheduler,已经成为 Apache 孵化器项目): Easy Scheduler 是一个分布式工作流任务调度系统,主要解决“复杂任务依赖但无法直接监控任务健康状态”的问题。Easy Scheduler 以 DAG 方式组装任务,可以实时监控任务的运行状态。同时,它支持重试,重新运行等操作... 。 +4. **[EasyScheduler](https://github.com/analysys/EasyScheduler "EasyScheduler")** (已经更名为 DolphinScheduler,已经成为 Apache 孵化器项目): Easy Scheduler 是一个分布式工作流任务调度系统,主要解决“复杂任务依赖但无法直接监控任务健康状态”的问题。Easy Scheduler 以 DAG 方式组装任务,可以实时监控任务的运行状态。同时,它支持重试,重新运行等操作... 。 5. **[PowerJob](https://gitee.com/KFCFans/PowerJob)** :新一代分布式任务调度与计算框架,支持 CRON、API、固定频率、固定延迟等调度策略,提供工作流来编排任务解决依赖关系,使用简单,功能强大,文档齐全,欢迎各位接入使用!http://www.powerjob.tech/ 。 相关阅读:[Spring Job、Quartz、XXL-Job 对比+全解析](https://mp.weixin.qq.com/s/jqN4noo5NazckPCehWFgpA) @@ -411,25 +413,37 @@ Solr 比较老牌了,但是,目前生态以及社区活跃度都比不上 El ## 工具 -### 开发必备 +### Java 相关 -2. **[Redis Manager](https://github.com/ngbdf/redis-manager)** :Redis Manager 是 Redis 一站式管理平台,支持集群(cluster、master-replica、sentinel)的监控、安装(除 sentinel)、管理、告警以及基本的数据操作功能。 -3. **[Portainer](https://github.com/portainer/portainer)** :可视化管理 Docker 和 Kubernetes。相关阅读:[《吊炸天的 Docker 图形化工具 Portainer,必须推荐给你!》](https://mp.weixin.qq.com/s?__biz=Mzg2OTA0Njk0OA==&mid=2247504221&idx=1&sn=85a3c69d64fba1b0d6d8485ab28ab4c4&chksm=cea19e96f9d617802920d5769bafc824b3b80afdfb6166a00532f0caa3b6f5bdac930e4e89de&token=693114125&lang=zh_CN#rd)。 -4. **[Recaf](https://github.com/Col-E/Recaf)** : Java 字节码编辑器,基于 ASM(Java 字节码操作框架) 来修改字节码,可简化编辑已编译 Java 应用程序的过程。 -4. **[PrettyZoo](https://github.com/vran-dev/PrettyZoo)** : 一个基于 Apache Curator 和 JavaFX 实现的 ZooKeeper 图形化管理客户端,颜值非常高,支持 Mac / Windows / Linux 。你可以使用 PrettyZoo 来实现对 ZooKeeper 的可视化增删改查。 +- **[JADX](https://github.com/skylot/jadx)** :一款功能强大的反编译工具。 +- **[Recaf](https://github.com/Col-E/Recaf)** : Java 字节码编辑器,基于 ASM(Java 字节码操作框架) 来修改字节码,可简化编辑已编译 Java 应用程序的过程。 + +### Redis 可视化管理 + +- **[Another Redis Desktop Manager](https://github.com/qishibo/AnotherRedisDesktopManager/blob/master/README.zh-CN.md)** :更快、更好、更稳定的Redis桌面(GUI)管理客户端。 +- **[Redis Manager](https://github.com/ngbdf/redis-manager)** :Redis 一站式管理平台,支持集群(cluster、master-replica、sentinel)的监控、安装(除 sentinel)、管理、告警以及基本的数据操作功能。 + +### Docker & Kubernetes 可视化管理 + +- **[Portainer](https://github.com/portainer/portainer)** :可视化管理 Docker 和 Kubernetes。相关阅读:[《吊炸天的 Docker 图形化工具 Portainer,必须推荐给你!》](https://mp.weixin.qq.com/s?__biz=Mzg2OTA0Njk0OA==&mid=2247504221&idx=1&sn=85a3c69d64fba1b0d6d8485ab28ab4c4&chksm=cea19e96f9d617802920d5769bafc824b3b80afdfb6166a00532f0caa3b6f5bdac930e4e89de&token=693114125&lang=zh_CN#rd)。 + +### ZooKeeper 可视化管理 + +- **[PrettyZoo](https://github.com/vran-dev/PrettyZoo)** : 一个基于 Apache Curator 和 JavaFX 实现的 ZooKeeper 图形化管理客户端,颜值非常高,支持 Mac / Windows / Linux 。你可以使用 PrettyZoo 来实现对 ZooKeeper 的可视化增删改查。 ### Markdown -1. **[Typora](https://www.typora.io/)** :我一直用的一款 Markdown 工具,直接文件夹试图和目录试图,支持 Markdown 格式直接导出成 PDF、HTML 等格式。 -2. **[markdown-here](https://github.com/adam-p/markdown-here)** :使用 markdown 语法发邮件,并且提供多种主题,快来拯救你的邮件格式吧! +- **[MarkText](https://github.com/marktext/marktext)** :一个简单而优雅的开源 Markdown 编辑器,专注于速度和可用性。Linux、macOS 和 Windows 均适用。 +- **[Typora](https://www.typora.io/)** :我一直用的一款 Markdown 工具,直接文件夹试图和目录试图,支持 Markdown 格式直接导出成 PDF、HTML 等格式。 +- **[Markdown Here](https://github.com/adam-p/markdown-here)** :使用 Markdown 语法发邮件,并且提供多种主题,快来拯救你的邮件格式吧! ## 大数据 -1. **[Spark](https://github.com/apache/spark)** :Spark 是用于大规模数据处理的统一分析引擎。 -2. **[Flink](https://github.com/apache/flink "flink")** :Apache Flink 是一个框架和分布式处理引擎,用于在*无边界和有边界*数据流上进行有状态的计算。Flink 能在所有常见集群环境中运行,并能以内存速度和任意规模进行计算。 -3. **[HBase](https://hbase.apache.org/)**: HBase – Hadoop Database,是一个高可靠性、高性能、面向列、可伸缩的分布式存储系统,利用 HBase 技术可在廉价 PC Server 上搭建起大规模结构化存储集群。 -4. **[Flume](https://flume.apache.org/)** :Apache Flume 是一个分布式的、可靠的、可用的,从多种不同的源收集、聚集、移动大量日志数据到集中数据存储的系统。 -5. **[Storm](https://storm.apache.org/)** : 一个分布式,高容错的实时计算系统。 +- **[Spark](https://github.com/apache/spark)** :Spark 是用于大规模数据处理的统一分析引擎。 +- **[Flink](https://github.com/apache/flink "flink")** :Apache Flink 是一个框架和分布式处理引擎,用于在*无边界和有边界*数据流上进行有状态的计算。Flink 能在所有常见集群环境中运行,并能以内存速度和任意规模进行计算。 +- **[HBase](https://hbase.apache.org/)**: HBase – Hadoop Database,是一个高可靠性、高性能、面向列、可伸缩的分布式存储系统,利用 HBase 技术可在廉价 PC Server 上搭建起大规模结构化存储集群。 +- **[Flume](https://flume.apache.org/)** :Apache Flume 是一个分布式的、可靠的、可用的,从多种不同的源收集、聚集、移动大量日志数据到集中数据存储的系统。 +- **[Storm](https://storm.apache.org/)** : 一个分布式,高容错的实时计算系统。 ## 机器学习 From 9420cdf25332fc1723e2bd655ba74daef4384388 Mon Sep 17 00:00:00 2001 From: guide Date: Sat, 5 Mar 2022 16:53:15 +0800 Subject: [PATCH 29/36] Update README.md --- README.md | 58 ++++++++++++++++++++++++++++--------------------------- 1 file changed, 30 insertions(+), 28 deletions(-) diff --git a/README.md b/README.md index 75c3d25..780e9e7 100644 --- a/README.md +++ b/README.md @@ -3,6 +3,7 @@ 中文 | English
Great Java project on Github(Github 上非常棒的 Java 开源项目).

+> 我的最新网站已经上线,欢迎点击链接体验:[https://javaguide.cn/](https://javaguide.cn/) (「Java学习+面试指南」一份涵盖大部分 Java 程序员所需要掌握的核心知识。准备 Java 面试,首选 JavaGuide!) 大家都知道 Github 是一个程序员福地,这里有各种厉害的开源框架、软件或者教程。这些东西对于我们学习和进步有着莫大的进步,所以我有了这个将 Github 上非常棒的 Java 开源项目整理下来的想法。我会按照几个维度对项目进行分类,以便大家查阅。当然,如果你觉得不错的话,欢迎给本项目点个 Star。我会用我的业余时间持续完善这份名单,谢谢 🙏。 @@ -13,17 +14,13 @@ - Github 地址:[https://github.com/CodingDocs/awesome-java](https://github.com/CodingDocs/awesome-java) - 码云地址:[https://gitee.com/SnailClimb/awesome-java](https://gitee.com/SnailClimb/awesome-java)(Github 无法访问或者访问速度比较慢的小伙伴可以看码云上的对应内容) -👉 如果你不知道该学习什么的话,请看 [Java 学习线路图是怎样的?](https://zhuanlan.zhihu.com/p/379041500) (原创不易,欢迎点赞,精简版学习路线正在路上),这是 2021 最新最完善的 Java 学习路线! - -👉[我把学习 Java 必备的一些书籍的 PDF 版本统一分类整理了下来,需要的小伙伴可以自取](https://gitee.com/SnailClimb/awesome-cs#%E8%B5%84%E6%96%99%E4%B8%8B%E8%BD%BD) (百度云链接放在公众号,需要关注一波。不喜欢公众号内容的话,领取了资料之后取关即可) - ## Sponsor @@ -34,31 +31,31 @@ ### Java -1. **[JavaGuide](https://github.com/Snailclimb/JavaGuide "JavaGuide")** :【Java 学习+面试指南】 一份涵盖大部分 Java 程序员所需要掌握的核心知识。 -2. **[interview-guide](https://github.com/csguide-dabai/interview-guide)** :总结了后端面试八股文中的重点,希望能帮助各位准备互联网开发岗校招面试的同学。 -2. **[toBeBetterJavaer](https://github.com/itwanger/toBeBetterJavaer)** :一份通俗易懂、风趣幽默的 Java 学习指南,内容涵盖 Java 基础、Java 集合框架、Java 并发编程、JVM、Java 企业级开发(Git、SSM、Spring Boot)等知识点。 -3. **[advanced-java](https://github.com/doocs/advanced-java "advanced-java")** :互联网 Java 工程师进阶知识完全扫盲:涵盖高并发、分布式、高可用、微服务、海量数据处理等领域知识。 -4. **[architect-awesome](https://github.com/xingshaocheng/architect-awesome "architect-awesome")** :后端架构师技术图谱。 -5. **[toBeTopJavaer](https://github.com/hollischuang/toBeTopJavaer "toBeTopJavaer")** :Java 工程师成神之路 。 -6. **[technology-talk](https://github.com/aalansehaiyang/technology-talk)** : 汇总 java 生态圈常用技术框架、开源中间件,系统架构、数据库、大公司架构案例、常用三方类库、项目管理、线上问题排查、个人成长、思考等知识 -7. **[tutorials](https://github.com/eugenp/tutorials "tutorials")**:该项目是一系列小而专注的教程 - 每个教程都涵盖 Java 生态系统中单一且定义明确的开发领域。 当然,它们的重点是 Spring Framework - Spring,Spring Boot 和 Spring Securiyt。 除了 Spring 之外,还有以下技术:核心 Java,Jackson,HttpClient,Guava。 -8. **[JCSprout](https://github.com/crossoverJie/JCSprout "JCSprout")** :处于萌芽阶段的 Java 核心知识库。 -9. **[bestJavaer](https://github.com/crisxuan/bestJavaer)** : 这是一个成为更好的 Java 程序员的系列教程。 -10. **[java-design-patterns](https://github.com/iluwatar/java-design-patterns "java-design-patterns")** : 用 Java 实现的设计模式。 +- **[JavaGuide](https://github.com/Snailclimb/JavaGuide "JavaGuide")** :【Java 学习+面试指南】 一份涵盖大部分 Java 程序员所需要掌握的核心知识。 +- **[interview-guide](https://github.com/csguide-dabai/interview-guide)** :总结了后端面试八股文中的重点,希望能帮助各位准备互联网开发岗校招面试的同学。 +- **[toBeBetterJavaer](https://github.com/itwanger/toBeBetterJavaer)** :一份通俗易懂、风趣幽默的 Java 学习指南,内容涵盖 Java 基础、Java 集合框架、Java 并发编程、JVM、Java 企业级开发(Git、SSM、Spring Boot)等知识点。 +- **[advanced-java](https://github.com/doocs/advanced-java "advanced-java")** :互联网 Java 工程师进阶知识完全扫盲:涵盖高并发、分布式、高可用、微服务、海量数据处理等领域知识。 +- **[architect-awesome](https://github.com/xingshaocheng/architect-awesome "architect-awesome")** :后端架构师技术图谱。 +- **[toBeTopJavaer](https://github.com/hollischuang/toBeTopJavaer "toBeTopJavaer")** :Java 工程师成神之路 。 +- **[technology-talk](https://github.com/aalansehaiyang/technology-talk)** : 汇总 java 生态圈常用技术框架、开源中间件,系统架构、数据库、大公司架构案例、常用三方类库、项目管理、线上问题排查、个人成长、思考等知识 +- **[tutorials](https://github.com/eugenp/tutorials "tutorials")**:该项目是一系列小而专注的教程 - 每个教程都涵盖 Java 生态系统中单一且定义明确的开发领域。 当然,它们的重点是 Spring Framework - Spring,Spring Boot 和 Spring Securiyt。 除了 Spring 之外,还有以下技术:核心 Java,Jackson,HttpClient,Guava。 +- **[JCSprout](https://github.com/crossoverJie/JCSprout "JCSprout")** :处于萌芽阶段的 Java 核心知识库。 +- **[bestJavaer](https://github.com/crisxuan/bestJavaer)** : 这是一个成为更好的 Java 程序员的系列教程。 +- **[java-design-patterns](https://github.com/iluwatar/java-design-patterns "java-design-patterns")** : 用 Java 实现的设计模式。 ### 数据结构/算法 -1. **[LeetCodeAnimation](https://github.com/MisterBooo/LeetCodeAnimation "LeetCodeAnimation")** :Demonstrate all the questions on LeetCode in the form of animation.(用动画的形式呈现解 LeetCode 题目的思路)。 -2. **[TheAlgorithms-Java](https://github.com/TheAlgorithms/Java "TheAlgorithms-Java")** :All Algorithms implemented in Java。 -3. **[leetcode](https://github.com/doocs/leetcode)** :多种编程语言实现 LeetCode、《剑指 Offer(第 2 版)》、《程序员面试金典(第 6 版)》题解。 -4. **[LeetCode-Solution-in-Good-Style](https://github.com/liweiwei1419/LeetCode-Solution-in-Good-Style)** :这个项目是作者在学习《算法与数据结构》的时候,在 [LeetCode(力扣)](https://leetcode-cn.com/) 上做的练习,刷题以 Java 语言为主。作者在刷题的时候,非常考虑代码质量,他的很多问题的回答都被 Leetcode 官方精选,值得推荐! -5. **[Algorithms-in-4-Steps](https://github.com/Xunzhuo/Algorithms-in-4-Steps)** :四步从 0 到 1 系统学习算法和数据结构。 -6. **[algorithm-base](https://github.com/chefyuan/algorithm-base)** :专门为刚开始刷题的同学准备的算法基地,没有最细只有更细,立志用动画将晦涩难懂的算法说的通俗易懂! +- **[LeetCodeAnimation](https://github.com/MisterBooo/LeetCodeAnimation "LeetCodeAnimation")** :Demonstrate all the questions on LeetCode in the form of animation.(用动画的形式呈现解 LeetCode 题目的思路)。 +- **[TheAlgorithms-Java](https://github.com/TheAlgorithms/Java "TheAlgorithms-Java")** :All Algorithms implemented in Java。 +- **[leetcode](https://github.com/doocs/leetcode)** :多种编程语言实现 LeetCode、《剑指 Offer(第 2 版)》、《程序员面试金典(第 6 版)》题解。 +- **[LeetCode-Solution-in-Good-Style](https://github.com/liweiwei1419/LeetCode-Solution-in-Good-Style)** :这个项目是作者在学习《算法与数据结构》的时候,在 [LeetCode(力扣)](https://leetcode-cn.com/) 上做的练习,刷题以 Java 语言为主。作者在刷题的时候,非常考虑代码质量,他的很多问题的回答都被 Leetcode 官方精选,值得推荐! +- **[Algorithms-in-4-Steps](https://github.com/Xunzhuo/Algorithms-in-4-Steps)** :四步从 0 到 1 系统学习算法和数据结构。 +- **[algorithm-base](https://github.com/chefyuan/algorithm-base)** :专门为刚开始刷题的同学准备的算法基地,没有最细只有更细,立志用动画将晦涩难懂的算法说的通俗易懂! ### 计算机基础 -1. **[CS-Notes](https://github.com/CyC2018/CS-Notes "CS-Notes")** :技术面试必备基础知识、Leetcode 题解、后端面试、Java 面试、春招、秋招、操作系统、计算机网络、系统设计。 -2. **[Waking-Up](https://github.com/wolverinn/Waking-Up)** :计算机基础(计算机网络/操作系统/数据库/Git...)面试问题全面总结,包含详细的 follow-up question 以及答案;全部采用【问题+追问+答案】的形式,即拿即用,直击互联网大厂面试 🚀;可用于模拟面试、面试前复习、短期内快速备战面试... +- **[CS-Notes](https://github.com/CyC2018/CS-Notes "CS-Notes")** :技术面试必备基础知识、Leetcode 题解、后端面试、Java 面试、春招、秋招、操作系统、计算机网络、系统设计。 +- **[Waking-Up](https://github.com/wolverinn/Waking-Up)** :计算机基础(计算机网络/操作系统/数据库/Git...)面试问题全面总结,包含详细的 follow-up question 以及答案;全部采用【问题+追问+答案】的形式,即拿即用,直击互联网大厂面试 🚀;可用于模拟面试、面试前复习、短期内快速备战面试... ### SpringBoot @@ -163,6 +160,7 @@ _Guide 哥注:权限管理系统在企业级的项目中一般都是非常重 ### 基础框架 - **[Spring Boot ](https://github.com/spring-projects/spring-boot "spring-boot")** :Spring Boot 可以轻松创建独立的生产级基于 Spring 的应用程序,内置 web 服务器让你可以像运行普通 Java 程序一样运行项 目。另外,大部分 Spring Boot 项目只需要少量的配置即可,这有别于 Spring 的重配置。 +- **[Quarkus](https://github.com/quarkusio/quarkus)** : 用于编写 Java 应用程序的云原生和容器优先的框架。 - **[SOFABoot](https://github.com/sofastack/sofa-boot)** :SOFABoot 基于 Spring Boot ,不过在其基础上增加了 Readiness Check,类隔离,日志空间隔离等等能力。 配套提供的还有:SOFARPC(RPC 框架)、SOFABolt(基于 Netty 的远程通信框架)、SOFARegistry(注册中心)...详情请参考:[SOFAStack ](https://github.com/sofastack) 。 - [**Spring Batch**](https://github.com/spring-projects/spring-batch) : Spring Batch 是一个轻量级但功能又十分全面的批处理框架,主要用于批处理场景比如从数据库、文件或队列中读取大量记录。不过,需要注意的是:**Spring Batch 不是调度框架**。商业和开源领域都有许多优秀的企业调度框架比如 Quartz、XXL-JOB、Elastic-Job。它旨在与调度程序一起工作,而不是取代调度程序。更多介绍请参考 [Spring Batch 官方文档](https://docs.spring.io/spring-batch/docs/4.3.x/reference/html/spring-batch-intro.html#spring-batch-intro),入门教程可以参考 [Spring Batch 从入门到实战](https://mrbird.cc/Spring-Batch入门.html)。 @@ -170,8 +168,8 @@ _Guide 哥注:权限管理系统在企业级的项目中一般都是非常重 #### 连接池 -1. **[Druid](https://github.com/alibaba/druid)** : 阿里巴巴数据库事业部出品,为监控而生的数据库连接池。 -2. **[HikariCP](https://github.com/brettwooldridge/HikariCP)** : 一个可靠的高性能 JDBC 连接池。Springboot 2.0 选择 HikariCP 作为默认数据库连接池。 +- **[Druid](https://github.com/alibaba/druid)** : 阿里巴巴数据库事业部出品,为监控而生的数据库连接池。 +- **[HikariCP](https://github.com/brettwooldridge/HikariCP)** : 一个可靠的高性能 JDBC 连接池。Springboot 2.0 选择 HikariCP 作为默认数据库连接池。 #### 框架 @@ -301,8 +299,12 @@ _Guide 哥注:权限管理系统在企业级的项目中一般都是非常重 3. **[Elastic-Job](http://elasticjob.io/index_zh.html)** :Elastic-Job 是当当网开源的一个基于 Quartz 和 Zookeeper 的分布式调度解决方案,由两个相互独立的子项目 Elastic-Job-Lite 和 Elastic-Job-Cloud 组成,一般我们只要使用 Elastic-Job-Lite 就好。 4. **[EasyScheduler](https://github.com/analysys/EasyScheduler "EasyScheduler")** (已经更名为 DolphinScheduler,已经成为 Apache 孵化器项目): Easy Scheduler 是一个分布式工作流任务调度系统,主要解决“复杂任务依赖但无法直接监控任务健康状态”的问题。Easy Scheduler 以 DAG 方式组装任务,可以实时监控任务的运行状态。同时,它支持重试,重新运行等操作... 。 5. **[PowerJob](https://gitee.com/KFCFans/PowerJob)** :新一代分布式任务调度与计算框架,支持 CRON、API、固定频率、固定延迟等调度策略,提供工作流来编排任务解决依赖关系,使用简单,功能强大,文档齐全,欢迎各位接入使用!http://www.powerjob.tech/ 。 +6. **[DolphinScheduler](https://github.com/apache/dolphinscheduler)** :分布式易扩展的可视化工作流任务调度平台 + +相关阅读: -相关阅读:[Spring Job、Quartz、XXL-Job 对比+全解析](https://mp.weixin.qq.com/s/jqN4noo5NazckPCehWFgpA) +- [Spring Job、Quartz、XXL-Job 对比+全解析](https://mp.weixin.qq.com/s/jqN4noo5NazckPCehWFgpA) +- [推荐 5 个 YYDS 的 Java 项目](https://mp.weixin.qq.com/s?__biz=Mzg2OTA0Njk0OA==&mid=2247518215&idx=1&sn=91e467f39322d2e7979b85fe235822d2&chksm=cea1c7ccf9d64edaf966c95923d72d337bf5e655a773a3d295d65fc92e4535ae5d8b0e6d9d86&token=2063686030&lang=zh_CN#rd) ### 搜索引擎 @@ -420,7 +422,7 @@ Solr 比较老牌了,但是,目前生态以及社区活跃度都比不上 El ### Redis 可视化管理 -- **[Another Redis Desktop Manager](https://github.com/qishibo/AnotherRedisDesktopManager/blob/master/README.zh-CN.md)** :更快、更好、更稳定的Redis桌面(GUI)管理客户端。 +- **[Another Redis Desktop Manager](https://github.com/qishibo/AnotherRedisDesktopManager/blob/master/README.zh-CN.md)** :更快、更好、更稳定的 Redis 桌面(GUI)管理客户端。 - **[Redis Manager](https://github.com/ngbdf/redis-manager)** :Redis 一站式管理平台,支持集群(cluster、master-replica、sentinel)的监控、安装(除 sentinel)、管理、告警以及基本的数据操作功能。 ### Docker & Kubernetes 可视化管理 From b5ff07e01b0264e7de2e691991642d73d5ce7f21 Mon Sep 17 00:00:00 2001 From: guide Date: Sun, 13 Mar 2022 19:12:04 +0800 Subject: [PATCH 30/36] Update README.md --- README.md | 460 ++---------------------------------------------------- 1 file changed, 11 insertions(+), 449 deletions(-) diff --git a/README.md b/README.md index 780e9e7..e422971 100644 --- a/README.md +++ b/README.md @@ -1,460 +1,22 @@


中文 | English
- Great Java project on Github(Github 上非常棒的 Java 开源项目). + 非常棒的 Java 开源项目

> 我的最新网站已经上线,欢迎点击链接体验:[https://javaguide.cn/](https://javaguide.cn/) (「Java学习+面试指南」一份涵盖大部分 Java 程序员所需要掌握的核心知识。准备 Java 面试,首选 JavaGuide!) -大家都知道 Github 是一个程序员福地,这里有各种厉害的开源框架、软件或者教程。这些东西对于我们学习和进步有着莫大的进步,所以我有了这个将 Github 上非常棒的 Java 开源项目整理下来的想法。我会按照几个维度对项目进行分类,以便大家查阅。当然,如果你觉得不错的话,欢迎给本项目点个 Star。我会用我的业余时间持续完善这份名单,谢谢 🙏。 +由于项目内容过大,阅读起来不太方便,我已将其同步到了自己网站: -欢迎大家推荐自己觉得不错的 Java 项目,下面项目的排序很大程度是根据当前项目的 Star 数量。 +- [教程](https://javaguide.cn/open-source-project/tutorial.html) +- [实战](https://javaguide.cn/open-source-project/practical-project.html) +- [实战项目](https://javaguide.cn/open-source-project/practical-project.html) +- [系统设计](https://javaguide.cn/open-source-project/system-design.html) +- [工具类库](https://javaguide.cn/open-source-project/tool-library.html) +- [开发工具](https://javaguide.cn/open-source-project/tools.html) +- [机器学习](https://javaguide.cn/open-source-project/machine-learning.html) +- [大数据](https://javaguide.cn/open-source-project/big-data.html) -如果有码云上比较好的项目的话,我也会推荐到这里来!另外,我也会推荐少部分过于优秀但是非开源的优质 Java 项目。 +![](https://img-blog.csdnimg.cn/29862b1706b74c1ca9d731f7bd6db5c8.png) -- Github 地址:[https://github.com/CodingDocs/awesome-java](https://github.com/CodingDocs/awesome-java) -- 码云地址:[https://gitee.com/SnailClimb/awesome-java](https://gitee.com/SnailClimb/awesome-java)(Github 无法访问或者访问速度比较慢的小伙伴可以看码云上的对应内容) -## Sponsor -
- +
- - - - - -
- - -
- -## 教程 - -### Java - -- **[JavaGuide](https://github.com/Snailclimb/JavaGuide "JavaGuide")** :【Java 学习+面试指南】 一份涵盖大部分 Java 程序员所需要掌握的核心知识。 -- **[interview-guide](https://github.com/csguide-dabai/interview-guide)** :总结了后端面试八股文中的重点,希望能帮助各位准备互联网开发岗校招面试的同学。 -- **[toBeBetterJavaer](https://github.com/itwanger/toBeBetterJavaer)** :一份通俗易懂、风趣幽默的 Java 学习指南,内容涵盖 Java 基础、Java 集合框架、Java 并发编程、JVM、Java 企业级开发(Git、SSM、Spring Boot)等知识点。 -- **[advanced-java](https://github.com/doocs/advanced-java "advanced-java")** :互联网 Java 工程师进阶知识完全扫盲:涵盖高并发、分布式、高可用、微服务、海量数据处理等领域知识。 -- **[architect-awesome](https://github.com/xingshaocheng/architect-awesome "architect-awesome")** :后端架构师技术图谱。 -- **[toBeTopJavaer](https://github.com/hollischuang/toBeTopJavaer "toBeTopJavaer")** :Java 工程师成神之路 。 -- **[technology-talk](https://github.com/aalansehaiyang/technology-talk)** : 汇总 java 生态圈常用技术框架、开源中间件,系统架构、数据库、大公司架构案例、常用三方类库、项目管理、线上问题排查、个人成长、思考等知识 -- **[tutorials](https://github.com/eugenp/tutorials "tutorials")**:该项目是一系列小而专注的教程 - 每个教程都涵盖 Java 生态系统中单一且定义明确的开发领域。 当然,它们的重点是 Spring Framework - Spring,Spring Boot 和 Spring Securiyt。 除了 Spring 之外,还有以下技术:核心 Java,Jackson,HttpClient,Guava。 -- **[JCSprout](https://github.com/crossoverJie/JCSprout "JCSprout")** :处于萌芽阶段的 Java 核心知识库。 -- **[bestJavaer](https://github.com/crisxuan/bestJavaer)** : 这是一个成为更好的 Java 程序员的系列教程。 -- **[java-design-patterns](https://github.com/iluwatar/java-design-patterns "java-design-patterns")** : 用 Java 实现的设计模式。 - -### 数据结构/算法 - -- **[LeetCodeAnimation](https://github.com/MisterBooo/LeetCodeAnimation "LeetCodeAnimation")** :Demonstrate all the questions on LeetCode in the form of animation.(用动画的形式呈现解 LeetCode 题目的思路)。 -- **[TheAlgorithms-Java](https://github.com/TheAlgorithms/Java "TheAlgorithms-Java")** :All Algorithms implemented in Java。 -- **[leetcode](https://github.com/doocs/leetcode)** :多种编程语言实现 LeetCode、《剑指 Offer(第 2 版)》、《程序员面试金典(第 6 版)》题解。 -- **[LeetCode-Solution-in-Good-Style](https://github.com/liweiwei1419/LeetCode-Solution-in-Good-Style)** :这个项目是作者在学习《算法与数据结构》的时候,在 [LeetCode(力扣)](https://leetcode-cn.com/) 上做的练习,刷题以 Java 语言为主。作者在刷题的时候,非常考虑代码质量,他的很多问题的回答都被 Leetcode 官方精选,值得推荐! -- **[Algorithms-in-4-Steps](https://github.com/Xunzhuo/Algorithms-in-4-Steps)** :四步从 0 到 1 系统学习算法和数据结构。 -- **[algorithm-base](https://github.com/chefyuan/algorithm-base)** :专门为刚开始刷题的同学准备的算法基地,没有最细只有更细,立志用动画将晦涩难懂的算法说的通俗易懂! - -### 计算机基础 - -- **[CS-Notes](https://github.com/CyC2018/CS-Notes "CS-Notes")** :技术面试必备基础知识、Leetcode 题解、后端面试、Java 面试、春招、秋招、操作系统、计算机网络、系统设计。 -- **[Waking-Up](https://github.com/wolverinn/Waking-Up)** :计算机基础(计算机网络/操作系统/数据库/Git...)面试问题全面总结,包含详细的 follow-up question 以及答案;全部采用【问题+追问+答案】的形式,即拿即用,直击互联网大厂面试 🚀;可用于模拟面试、面试前复习、短期内快速备战面试... - -### SpringBoot - -1. **[springboot-guide](https://github.com/Snailclimb/springboot-guide)** :SpringBoot 核心知识点总结。 基于 Spring Boot 2.19+。 -2. **[SpringAll](https://github.com/wuyouzhuguli/SpringAll "SpringAll")** :循序渐进,学习 Spring Boot、Spring Boot & Shiro、Spring Cloud、Spring Security & Spring Security OAuth2,博客 Spring 系列源码。 -3. **[Springboot-Notebook](https://github.com/chengxy-nds/Springboot-Notebook)** :一系列以 Spring Boot 为基础开发框架,整合 Redis 、 Rabbitmq 、ES 、MongoDB 、Spring Cloud、Kafka、Skywalking 等互联网主流技术,实现各种常见功能点的综合性案例。 -4. **[springboot-learning-example](https://github.com/JeffLi1993/springboot-learning-example "springboot-learning-example")** :Spring Boot 实践学习案例,是 Spring Boot 初学者及核心技术巩固的最佳实践。 -5. **[spring-boot-demo](https://github.com/xkcoding/spring-boot-demo "spring-boot-demo")** :spring boot demo 是一个用来深度学习并实战 spring boot 的项目,目前总共包含 63 个集成 demo,已经完成 52 个。 -6. **[SpringBoot-Labs](https://github.com/YunaiV/SpringBoot-Labs)** :Spring Boot 系列教程。 - -相关文章:[Github 点赞接近 100k 的 SpringBoot 学习教程+实战推荐!牛批!](https://mp.weixin.qq.com/s?__biz=Mzg2OTA0Njk0OA==&mid=2247488298&idx=3&sn=0a8fd88ec5a050de131c2a3305482ac4&chksm=cea25ce1f9d5d5f7f53a0237d27489326bce4546353b038085c03b086d91ef396bf824d3a155&token=496868067&lang=zh_CN#rd) - -### SpringCloud - -1. **[SpringCloudLearning](https://github.com/forezp/SpringCloudLearning "SpringCloudLearning")** : 方志朋的《史上最简单的 Spring Cloud 教程源码》。 -2. **[springcloud-learning](https://github.com/macrozheng/springcloud-learning)** : 一套涵盖大部分核心组件使用的 Spring Cloud 教程,包括 Spring Cloud Alibaba 及分布式事务 Seata,基于 Spring Cloud Greenwich 及 SpringBoot 2.1.7。22 篇文章,篇篇精华,32 个 Demo,涵盖大部分应用场景。 -3. **[SpringCloud](https://github.com/zhoutaoo/SpringCloud "SpringCloud")** :基于 SpringCloud2.1 的微服务开发脚手架,整合了 spring-security-oauth2、nacos、feign、sentinel、springcloud-gateway 等。服务治理方面引入 elasticsearch、skywalking、springboot-admin、zipkin 等,让项目开发快速进入业务开发,而不需过多时间花费在架构搭建上。 - -相关文章:[Github 点赞接近 70k 的 Spring Cloud 学习教程+实战项目推荐!牛批!](https://mp.weixin.qq.com/s?__biz=Mzg2OTA0Njk0OA==&mid=2247488377&idx=1&sn=0fb33ef330159db5a9c8bc0f029cd739&chksm=cea25cb2f9d5d5a4c7bacc9dcfc90ed86e89f4262e32b40c7aa47af84c747cb6c0429f753e1d&token=496868067&lang=zh_CN#rd) - -### 大数据 - -1. **[BigData-Notes](https://github.com/heibaiying/BigData-Notes "BigData-Notes")** :大数据入门指南 ⭐️。 -2. **[flink-learning](https://github.com/zhisheng17/flink-learning "flink-learning")** :含 Flink 入门、概念、原理、实战、性能调优、源码解析等内容。 - -## 开源书籍 - -1. **[《Effective Java(第 3 版)各章节的中英文学习参考》](https://github.com/clxering/Effective-Java-3rd-edition-Chinese-English-bilingual)** -2. **[《On Java 8 中文版》](https://github.com/LingCoder/OnJava8)** -3. **[《DDIA(设计数据密集型应用) 中文翻译》](https://github.com/Vonng/ddia)** -4. **[《图说设计模式》](https://github.com/me115/design_patterns)** -5. **[《Java 8 简明教程 中文版》](https://github.com/wizardforcel/modern-java-zh)** -6. **[《凤凰架构》](https://github.com/fenixsoft/awesome-fenix)** - -## 实战项目 - -_Guide 哥注:下面这些推荐的项目几乎都和 Spring Boot 有关,毕竟这年头没有理由再搞 SSM/SSH 这些东西了。_ - -### 商城 - -_Guide 哥注:下面的商城系统大多比较复杂比如 mall ,如果没有 Java 基础和 Spring Boot 都还没有摸熟的话不推荐过度研究下面几个项目或者使用这些项目当作毕业设计。_ - -1. **[mall](https://github.com/macrozheng/mall "mall")** :mall 项目是一套电商系统,包括前台商城系统及后台管理系统,基于 SpringBoot+MyBatis 实现。 -2. **[mall-swarm](https://github.com/macrozheng/mall-swarm "mall-swarm")** : mall-swarm 是一套微服务商城系统,采用了 Spring Cloud Greenwich、Spring Boot 2、MyBatis、Docker、Elasticsearch 等核心技术,同时提供了基于 Vue 的管理后台方便快速搭建系统。 -3. **[onemall](https://github.com/YunaiV/onemall)** :mall 商城,基于微服务的思想,构建在 B2C 电商场景下的项目实战。核心技术栈,是 Spring Boot + Dubbo 。未来,会重构成 Spring Cloud Alibaba 。 -4. **[litemall](https://github.com/linlinjava/litemall "litemall")** : 又一个小商城。litemall = Spring Boot 后端 + Vue 管理员前端 + 微信小程序用户前端 + Vue 用户移动端。 -5. **[xmall](https://github.com/Exrick/xmall)** :基于 SOA 架构的分布式电商购物商城 前后端分离 前台商城:Vue 全家桶 后台管理系统:Spring/Dubbo/SSM/Elasticsearch/Redis/MySQL/ActiveMQ/Shiro/Zookeeper 等 -6. **[newbee-mall](https://github.com/newbee-ltd/newbee-mall)** :newbee-mall 项目(新蜂商城)是一套电商系统,包括 newbee-mall 商城系统及 newbee-mall-admin 商城后台管理系统,基于 Spring Boot 2.X 及相关技术栈开发。 - -### 博客/论坛/考试系统 - -_Guide 哥注:下面这几个项目都是非常适合 Spring Boot 初学者学习的,下面的大部分项目的总体代码架构我都看过,个人觉得还算不错,不会误导没有实际做过项目的老哥,特别是前两个项目 vhr 和 favorites-web 。_ - -1. **[vhr](https://github.com/lenve/vhr "vhr")** :微人事是一个前后端分离的人力资源管理系统,项目采用 SpringBoot+Vue 开发。 -2. **[favorites-web](https://github.com/cloudfavorites/favorites-web)** :云收藏 Spring Boot 2.X 开源项目。云收藏是一个使用 Spring Boot 构建的开源网站,可以让用户在线随时随地收藏的一个网站,在网站上分类整理收藏的网站或者文章。 -3. **[community](https://github.com/codedrinker/community)** :开源论坛、问答系统,现有功能提问、回复、通知、最新、最热、消除零回复功能。功能持续更新中…… 技术栈 Spring、Spring Boot、MyBatis、MySQL/H2、Bootstrap。 -4. **[VBlog](https://github.com/lenve/VBlog)** :V 部落,Vue+SpringBoot 实现的多用户博客管理平台! -5. **[My-Blog](https://github.com/ZHENFENG13/My-Blog)** : My Blog 是由 SpringBoot + Mybatis + Thymeleaf 等技术实现的 Java 博客系统,页面美观、功能齐全、部署简单及完善的代码,一定会给使用者无与伦比的体验。 -6. **[uexam](https://gitee.com/mindskip/uexam)** :一个非常不错的考试系统!考试系统应用场景还挺多的,不论是对于在校大学生还是已经工作的小伙伴,并且,类似的私活也有很多。相关阅读:[《好一个 Spring Boot 开源在线考试系统!解决了我的燃眉之急》](http://link.zhihu.com/?target=https%3A//mp.weixin.qq.com/s%3F__biz%3DMzg2OTA0Njk0OA%3D%3D%26mid%3D2247491585%26idx%3D1%26sn%3D8d3c6768c22e72d6bfcbeee9624886a7%26chksm%3Dcea1afcaf9d626dc918760289c37025ad526f6255786bc198d2402203df64c873ad7934f58df%26scene%3D178%26cur_album_id%3D1345382825083895808%23rd) 。 -7. **[PassJava-Platform](https://github.com/Jackson0714/PassJava-Platform)** :一个基于微服务(SpringBoot、Spring Cloud)的面试刷题系统!相关阅读:[《一个基于 Spring Cloud 的面试刷题系统。面试、毕设、项目经验一网打尽》](http://link.zhihu.com/?target=https%3A//mp.weixin.qq.com/s%3F__biz%3DMzg2OTA0Njk0OA%3D%3D%26mid%3D2247497045%26idx%3D1%26sn%3D577175bfd6c040a0df5a494fce6f9758%26chksm%3Dcea1ba9ef9d633883a2e213c0fb9a88bdc87051347d4b3fad2c2befb65d8b16e1ea81d8146dd%26scene%3D178%26cur_album_id%3D1345382825083895808%23rd)。 - -相关文章: - -1. [想要搭建个人博客?我调研了 100 来个 Java 开源博客系统,发现这 5 个最好用!](https://mp.weixin.qq.com/s?__biz=Mzg2OTA0Njk0OA==&mid=2247491191&idx=1&sn=fd5efa645c2f2e09f088f6a018cea028&chksm=cea251bcf9d5d8aac8653c686b7a331ffe4e13aa9ffc9beab2c378ea2497a9bd3295ff8d2c51&token=747074901&lang=zh_CN#rd) - -### 权限管理系统 - -_Guide 哥注:权限管理系统在企业级的项目中一般都是非常重要的,如果你需求去实际了解一个不错的权限系统是如何设计的话,推荐你可以参考下面这些开源项目。_ - -1. **[Spring-Cloud-Admin](https://github.com/wxiaoqi/Spring-Cloud-Admin "Spring-Cloud-Admin")** :Cloud-Admin 是国内首个基于 Spring Cloud 微服务化开发平台,具有统一授权、认证后台管理系统,其中包含具备用户管理、资源权限管理、网关 API 管理等多个模块,支持多业务系统并行开发,可以作为后端服务的开发脚手架。代码简洁,架构清晰,适合学习和直接项目中使用。核心技术采用 Spring Boot2 以及 Spring Cloud Gateway 相关核心组件,前端采用 vue-element-admin 组件。 -2. **[pig](https://gitee.com/log4j/pig "pig")**:(gitee)基于 Spring Boot 2.2、 Spring Cloud Hoxton & Alibaba、 OAuth2 的 RBAC 权限管理系统。 -3. **[FEBS-Shiro](https://github.com/wuyouzhuguli/FEBS-Shiro "FEBS-Shiro")** :Spring Boot 2.1.3,Shiro1.4.0 & Layui 2.5.4 权限管理系统。 -4. **[eladmin](https://github.com/elunez/eladmin)** : 项目基于 Spring Boot 2.1.0 、 Jpa、 Spring Security、redis、Vue 的前后端分离的后台管理系统,项目采用分模块开发方式, 权限控制采用 RBAC,支持数据字典与数据权限管理,支持一键生成前后端代码,支持动态路由。 -5. **[SpringBoot-Shiro-Vue](https://github.com/Heeexy/SpringBoot-Shiro-Vue)** :提供一套基于 Spring Boot-Shiro-Vue 的权限管理思路.前后端都加以控制,做到按钮/接口级别的权限。 - -### 快速开发脚手架 - -2. **[RuoYi](https://gitee.com/y_project/RuoYi)** :RuoYi 一款基于基于 SpringBoot 的权限管理系统 易读易懂、界面简洁美观,直接运行即可用 。 -3. **[ruoyi-vue-pro](https://github.com/YunaiV/ruoyi-vue-pro)** : 基于 SpringBoot,Spring Security,JWT,Vue & Element 的前后端分离权限管理系统。 -4. **[Guns](https://gitee.com/stylefeng/guns)** : 我在上大学的时候就了解和接触过了这个项目,当时我还是一个 Spring 入门不太久的小菜鸟。一晃,不经意间已经过去快 3 年了。Guns 功能齐全 ,采用主流框架 Spring Boot2.0+开发,并且支持 Spring Cloud Alibaba 微服务)。 适合企业后台管理网站的快速开发场景,不论是对于单体和微服务都有支持。 -5. **[JHipster](https://github.com/jhipster/generator-jhipster)** :开源应用程序平台,可在几秒钟内创建 Spring Boot + Angular / React 项目! -6. **[JeecgBoot](https://github.com/zhangdaiscott/jeecg-boot)** :一款基于代码生成器的 JAVA 快速开发平台,开源界“小普元”超越传统商业企业级开发平台! -7. **[zuihou-admin-cloud](https://github.com/zuihou/zuihou-admin-cloud)** :基于`SpringCloud(Hoxton.SR7)` + `SpringBoot(2.2.9.RELEASE)` 的 SaaS 型微服务快速开发平台,具备用户管理、资源权限管理、网关统一鉴权、Xss 防跨站攻击、自动代码生成、多存储系统、分布式事务、分布式定时任务等多个模块,支持多业务系统并行开发, 支持多服务并行开发,可以作为后端服务的开发脚手架。 -8. **[Erupt](https://gitee.com/erupt/erupt)** : 使用 Java 注解,快速开发 Admin 管理后台。零前端代码、零 CURD、不生成任何代码、自动建表、注解式 API,支持所有主流数据库,支持自定义页面,支持多数据源,提供二十几类业务组件,十几种展示形式,支持逻辑删除,动态定时任务,前端后端分离等。 核心技术:Spring Boot、JPA、Reflect、TypeScript、NG-ZORRO 等。 -9. **[SmartAdmin](https://gitee.com/lab1024/smart-admin)** : 互联网企业级的通用型中后台解决方案!使用最前沿的前后台技术栈 SpringBoot 和 Vue,前后端分离!代码质量非常高! -10. **[BallCat](https://github.com/ballcat-projects/ballcat)** :一个功能完善的快速开发脚手架!除了最基本的权限管理,定时任务功能之外,还额外支持 XSS 过滤,SQL 防注入、数据脱敏等多种功能 - -**相关文章** : - -1. [听说你要接私活?Guide 连夜整理了 5 个开源免费的 Java 项目快速开发脚手架。](https://sourl.cn/cFyLTR) -2. [解放双手,再来推荐 5 个 Java 项目开发快速开发脚手架!项目经验和私活都不愁了!](https://sourl.cn/StkiAv) - -### 造轮子 - -- **[guide-rpc-framework](https://github.com/Snailclimb/guide-rpc-framework)** :一款基于 Netty+Kyro+Zookeeper 实现的自定义 RPC 框架-附详细实现过程和相关教程。 -- **[mini-spring](https://github.com/DerekYRC/mini-spring)** :简化版的 Spring 框架,能帮助你快速熟悉 Spring 源码和掌握 Spring 的核心原理。代码极度简化,保留了 Spring 的核心功能,如 IoC 和 AOP、资源加载器等核心功能。 -- **[itstack-demo-jvm](https://github.com/fuzhengwei/itstack-demo-jvm)** :通过 Java 代码来实现 JVM 的基础功能(搜索解析 class 文件、字节码命令、运行时数据区等。相关阅读:[《zachaxy 的手写 JVM 系列》](https://zachaxy.github.io/tags/JVM/) -- **[Freedom](https://github.com/alchemystar/Freedom)** :自己 DIY 一个具有 ACID 的数据库。相关项目:[MYDB](https://github.com/CN-GuoZiyang/MYDB)(一个简单的数据库实现)、[toyDB](https://github.com/erikgrinaker/toydb)(Rust 实现的分布式 SQL 数据库)。 - -## 系统设计 - -### 基础框架 - -- **[Spring Boot ](https://github.com/spring-projects/spring-boot "spring-boot")** :Spring Boot 可以轻松创建独立的生产级基于 Spring 的应用程序,内置 web 服务器让你可以像运行普通 Java 程序一样运行项 目。另外,大部分 Spring Boot 项目只需要少量的配置即可,这有别于 Spring 的重配置。 -- **[Quarkus](https://github.com/quarkusio/quarkus)** : 用于编写 Java 应用程序的云原生和容器优先的框架。 -- **[SOFABoot](https://github.com/sofastack/sofa-boot)** :SOFABoot 基于 Spring Boot ,不过在其基础上增加了 Readiness Check,类隔离,日志空间隔离等等能力。 配套提供的还有:SOFARPC(RPC 框架)、SOFABolt(基于 Netty 的远程通信框架)、SOFARegistry(注册中心)...详情请参考:[SOFAStack ](https://github.com/sofastack) 。 -- [**Spring Batch**](https://github.com/spring-projects/spring-batch) : Spring Batch 是一个轻量级但功能又十分全面的批处理框架,主要用于批处理场景比如从数据库、文件或队列中读取大量记录。不过,需要注意的是:**Spring Batch 不是调度框架**。商业和开源领域都有许多优秀的企业调度框架比如 Quartz、XXL-JOB、Elastic-Job。它旨在与调度程序一起工作,而不是取代调度程序。更多介绍请参考 [Spring Batch 官方文档](https://docs.spring.io/spring-batch/docs/4.3.x/reference/html/spring-batch-intro.html#spring-batch-intro),入门教程可以参考 [Spring Batch 从入门到实战](https://mrbird.cc/Spring-Batch入门.html)。 - -### 数据库 - -#### 连接池 - -- **[Druid](https://github.com/alibaba/druid)** : 阿里巴巴数据库事业部出品,为监控而生的数据库连接池。 -- **[HikariCP](https://github.com/brettwooldridge/HikariCP)** : 一个可靠的高性能 JDBC 连接池。Springboot 2.0 选择 HikariCP 作为默认数据库连接池。 - -#### 框架 - -1. **[MyBatis-Plus](https://github.com/baomidou/mybatis-plus)** : [MyBatis-Plus](https://github.com/baomidou/mybatis-plus)(简称 MP)是一个 [MyBatis](http://www.mybatis.org/mybatis-3/) 的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。 - -#### 缓存 - -- **[Caffeine](https://github.com/ben-manes/caffeine)** : 一款强大的本地缓存解决方案,性能非常 🐂。 -- **[Redis](https://github.com/redis/redis)** :一个使用 C 语言开发的内存数据库,分布式缓存首选。 -- **[Redisson](https://github.com/redisson/redisson "redisson")** : Redis 基础上的一个 Java 驻内存数据网格(In-Memory Data Grid),支持超过 30 个对象和服务:`Set`,`SortedSet`, `Map`, `List`, `Queue`, `Deque` ......,并且提供了多种分布式锁的实现。更多介绍请看:[《Redisson 项目介绍》](https://github.com/redisson/redisson/wiki/Redisson%E9%A1%B9%E7%9B%AE%E4%BB%8B%E7%BB%8D "Redisson项目介绍")。 - -#### 数据库建模 - -- **[CHINER](https://gitee.com/robergroup/chiner)** :开源免费的国产数据库建模工具。目标是做一款丰富数据库生态,独立于具体数据库之外的,数据库关系模型设计平台。前生是 [PDMan](https://gitee.com/robergroup/pdman),定位为 PowerDesigner 的免费替代方案。 - -开源的数据库建模工具比较少,以下是一些非开源的数据库建模工具(部分需要付费才能使用) : - -- **[MySQL Workbench](https://www.mysql.com/products/workbench/)** : MySQL 官方为数据库架构师、开发人员和 DBA 提供的一个可视化工具。 MySQL Workbench 支持数据建模,SQL 开发以及服务器配置、用户管理、性能优化、数据库备份以及迁移等功能,支持 Windows、Linux 和 Mac OS X 平台。 -- **[Navicat Data Modeler](https://www.navicat.com.cn/products/navicat-data-modeler)** : 一款强大的和符合成本效益的数据库设计工具,它能帮助用户创建高质素的概念、逻辑和物理数据模型。让你可视化地设计数据库结构、执行逆向或正向工程程序、从 ODBC 数据源导入模型、生成复杂的 SQL/DDL 和打印模型到文件等。付费。 -- **[DbSchema](https://dbschema.com/)** : 一款功能强大的数据库设计和管理的可视化工具,支持几乎所有的关系型和 NoSQL 数据库。付费。 -- **[dbdiagram.io](https://dbdiagram.io/home)** : 是一款简单免费的在线 ER 图绘制工具,通过编写代码创建模型,专为开发人员和数据分析师而设计。它通过一个简单的自定义语言来生成数据模型,支持 MySQL、PostgreSQL、SQL Server 数据库 DDL 文件的正向工程和逆向工程、版本历史、在线共享、导出图片或者 PDF 等功能。dbdiagram.io 提供了免费版。 - -#### 数据库管理 - -- **[Beekeeper Studio](https://github.com/beekeeper-studio/beekeeper-studio)** :跨平台数据库管理工具,颜值高,支持 SQLite、MySQL、MariaDB、Postgres、CockroachDB、SQL Server、Amazon Redshift。 -- **[Sequel Pro](https://github.com/sequelpro/sequelpro)** :适用于 macOS 的 MySQL/MariaDB 数据库管理工具。 -- **[DBeaver](https://github.com/dbeaver/dbeaver)** :一个基于 Java 开发 ,并且支持几乎所有的数据库产品的开源数据库管理工具。DBeaver 社区版不光支持关系型数据库比如 MySQL、PostgreSQL、MariaDB、SQLite、Oracle、Db2、SQL Server,还比如 SQLite、H2 这些内嵌数据库。还支持常见的全文搜索引擎比如 Elasticsearch 和 Solr、大数据相关的工具比如 Hive 和 Spark。 -- **[Kangaroo](https://gitee.com/dbkangaroo/kangaroo)** :袋鼠 是一款为热门数据库系统打造的管理客户端(SQLite / MySQL / PostgreSQL / ...) ,支持建表、查询、模型、同步、导入导出等功能,支持 Windows / Mac / Linux 等操作系统,力求打造成好用、好玩、开发友好的 SQL 工具。 -- **[Mongood](https://github.com/RenzHoly/Mongood)** : MongoDB 图形化的管理工具。基于微软 Fluent UI,支持自动黑暗模式。 - -### 数据同步 - -1. **[Canal](https://github.com/alibaba/canal "canal")** [kə'næl] : Canal 译意为水道/管道/沟渠,主要用途是基于 MySQL 数据库增量日志解析,提供增量数据订阅和消费。 -2. **[DataX](https://github.com/alibaba/DataX "DataX")** :DataX 是阿里巴巴集团内被广泛使用的离线数据同步工具/平台,实现包括 MySQL、Oracle、SqlServer、Postgre、HDFS、Hive、ADS、HBase、TableStore(OTS)、MaxCompute(ODPS)、DRDS 等各种异构数据源之间高效的数据同步功能。相关项目:**[DataX-Web](https://github.com/WeiYe-Jing/datax-web)** (DataX 集成可视化页面,选择数据源即可一键生成数据同步任务)。 - -其他:**[Flinkx](https://github.com/DTStack/flinkx)** (基于 Flink 的分布式数据同步工具)。 - -### 微服务&分布式 - -#### API 网关 - -微服务下一个系统被拆分为多个服务,但是像 安全认证,流量控制,日志,监控等功能是每个服务都需要的,没有网关的话,我们就需要在每个服务中单独实现,这使得我们做了很多重复的事情并且没有一个全局的视图来统一管理这些功能。 - -综上:**一般情况下,网关一般都会提供请求转发、安全认证(身份/权限认证)、流量控制、负载均衡、容灾、日志、监控这些功能。** - -上面介绍了这么多功能实际上网关主要做了一件事情:**请求过滤** 。权限校验、流量控制这些都可以通过过滤器实现,请求转也是通过过滤器实现的。 - -1. **[Kong](https://github.com/Kong/kong "kong")** :Kong 是一个云原生、快速的、可伸缩的分布式微服务抽象层(也称为 API 网关、API 中间件或在某些情况下称为服务网格)。2015 年作为开源项目发布,其核心价值是高性能和可扩展性。 -2. **[Soul](https://github.com/Dromara/soul "soul")** :高性能、基于 webflux 的反应式 Java API 网关 -3. **[Spring Cloud Gateway](https://github.com/spring-cloud/spring-cloud-gateway)** : 基于 Spring Framework 5.x 和 Spring Boot 2.x 构建的高性能网关。 -4. **[Zuul](https://github.com/Netflix/zuul)** : Zuul 是一个 L7 应用程序网关,它提供了动态路由,监视,弹性,安全性等功能。 - -#### 配置中心 - -微服务下,业务的发展一般会导致服务数量的增加,进而导致程序配置(服务地址、数据库参数等等)增多。 - -传统的配置文件的方式已经无法满足当前需求,主要有两点原因:一是**安全性得不到保障**(配置放在代码库中容易泄露);二是**时效性不行** (修改配置需要重启服务才能生效)。 - -- **[Apollo](https://github.com/ctripcorp/apollo "apollo")** :Apollo(阿波罗)是携程框架部门研发的分布式配置中心,能够集中化管理应用不同环境、不同集群的配置,配置修改后能够实时推送到应用端,并且具备规范的权限、流程治理等特性,适用于微服务配置管理场景。 -- **[Nacos](https://github.com/alibaba/nacos)** :Nacos 是 Spring Cloud Alibaba 提供的服务注册发现组件,类似于 Consul、Eureka。并且,提供了分布式配置管理功能。 -- **[Spring Cloud Config](https://github.com/spring-cloud/spring-cloud-config)** : Spring Cloud Config 是 Spring Cloud 家族中最早的配置中心,虽然后来又发布了 Consul 可以代替配置中心功能,但是 Config 依然适用于 Spring Cloud 项目,通过简单的配置即可实现功能。 -- **[Consul](https://github.com/hashicorp/consul)** :Consul 是 HashiCorp 公司推出的开源软件,提供了微服务系统中的服务治理、配置中心、控制总线等功能。这些功能中的每一个都可以根据需要单独使用,也可以一起使用以构建全方位的服务网格,总之 Consul 提供了一种完整的服务网格解决方案。 - -相关阅读:[微服务架构中配置中心的选择:Apollo VS Spring Cloud Config](https://www.jianshu.com/p/d78fa8412cbf) - -#### 链路追踪 - -目前分布式链路追踪系统基本都是根据谷歌的《Dapper 大规模分布式系统的跟踪系统》这篇论文发展而来,主流的有 Pinpoint,Skywalking ,CAT(当然也有其他的例如 Zipkin,Jaeger 等产品,不过总体来说不如前面选取的 3 个完成度高)等。 - -1. **[Skywalking](https://github.com/apache/skywalking "skywalking")** : 针对分布式系统的应用性能监控,尤其是针对微服务、云原生和面向容器的分布式系统架构。 -2. **[Zipkin](https://github.com/openzipkin/zipkin "zipkin")** :Zipkin 是一个分布式跟踪系统。它有助于收集解决服务体系结构中的延迟问题所需的时序数据。功能包括该数据的收集和查找。 -3. **[CAT](https://github.com/dianping/cat "cat")** : CAT 作为服务端项目基础组件,提供了 Java, C/C++, Node.js, Python, Go 等多语言客户端,已经在美团点评的基础架构中间件框架(MVC 框架,RPC 框架,数据库框架,缓存框架等,消息队列,配置系统等)深度集成,为美团点评各业务线提供系统丰富的性能指标、健康状况、实时告警等。 - -相关阅读: [Skywalking 官网对于主流开源链路追踪系统的对比](https://skywalking.apache.org/zh/blog/2019-03-29-introduction-of-skywalking-and-simple-practice.html) - -#### 分布式数据库 - -- **[PolarDB-X](https://github.com/ApsaraDB/galaxysql)** :PolarDB-X 是一款面向超高并发、海量存储、复杂查询场景设计的云原生分布式数据库系统。其采用 Shared-nothing 与存储计算分离架构,支持水平扩展、分布式事务、混合负载等能力,具备企业级、云原生、高可用、高度兼容 MySQL 系统及生态等特点。 - -### 高并发 - -#### 消息队列 - -我们可以把消息队列比作是一个存放消息的容器,当我们需要使用消息的时候可以取出消息供自己使用。 - -使用消息队列主要有两点好处:**一是通过异步处理提高系统性能(削峰、减少响应所需时间);二是降低系统耦合性。** - -**分布式队列** : - -1. **[RocketMQ](https://github.com/apache/rocketmq "RocketMQ")** :阿里巴巴开源的一款高性能、高吞吐量的分布式消息中间件。 -2. **[Kafaka](https://github.com/apache/kafka "Kafaka")**: Kafka 是一种分布式的,基于发布 / 订阅的消息系统。关于它的入门可以查看:[Kafka 入门看这一篇就够了](https://github.com/Snailclimb/JavaGuide/blob/master/docs/system-design/data-communication/Kafka入门看这一篇就够了.md "Kafka入门看这一篇就够了") -3. **[RabbitMQ](https://github.com/rabbitmq "RabbitMQ")** :由 erlang 开发的基于 AMQP(Advanced Message Queue 高级消息队列协议)协议实现的消息队列。 - -**内存队列** : - -1. **[Disruptor](https://github.com/LMAX-Exchange/disruptor)** : Disruptor 是英国外汇交易公司 LMAX 开发的一个高性能队列,研发的初衷是解决内存队列的延迟问题(在性能测试中发现竟然与 I/O 操作处于同样的数量级)。相关阅读 : - - [《高性能内存队列——Disruptor》](https://tech.meituan.com/2016/11/18/disruptor.html) - - [《你应该知道的高性能无锁队列 Disruptor》](https://juejin.cn/post/6844903648875528206) - -消息队列管理工具 : - -1. **[Kafdrop](https://github.com/obsidiandynamics/kafdrop)** : 一个用于查看 Kafka 主题和浏览消费者组的 Web UI。 -2. **[EFAK](https://github.com/smartloli/EFAK)** (Eagle For Apache Kafka,以前叫做 Kafka Eagle) :一个简单的高性能监控系统,用于对 Kafka 集群进行全面的监控和管理。 - -#### 多数据源&读写分离&分库分表 - -数据库的数据量大了之后就要考虑读写分离、分库分表,但是一定要尽量能避免分库分表就避免,因为会带来很多其他问题。 - -1. **[ShardingSphere](https://github.com/apache/shardingsphere)** :ShardingSphere 是一套开源的分布式数据库中间件解决方案组成的生态圈,它由 Sharding-JDBC、Sharding-Proxy 和 Sharding-Sidecar(计划中)这 3 款相互独立的产品组成。 他们均提供标准化的数据分片、分布式事务和数据库治理功能,可适用于如 Java 同构、异构语言、云原生等各种多样化的应用场景。中文文档:[https://shardingsphere.apache.org/document/current/cn/overview/](https://shardingsphere.apache.org/document/current/cn/overview/) 。 -2. **[MyCat](https://github.com/MyCatApache/MyCat2)** : MyCat 是数据库分库分表的中间件,MyCat 使用最多的两个功能是:读写分离和分库分表。MyCat 是一些社区爱好者在阿里 Cobar 的基础上进行二次开发,解决了 Cobar 当时存 在的一些问题,并且加入了许多新的功能在其中。 -3. **[dynamic-datasource-spring-boot-starter](https://github.com/baomidou/dynamic-datasource-spring-boot-starter])** :dynamic-datasource-spring-boot-starter 是一个基于 springboot 的快速集成多数据源的启动器。如果说你有配置多数据源、读写分离等需求的话,可以了解一下这个项目。 - -相关阅读:[数据库中间件详解(精品长文)](https://zhuanlan.zhihu.com/p/87144535) - -### 任务调度/定时任务 - -任务调度/定时任务在系统中应用太广泛了。 **为什么需要任务调度/定时任务呢?** - -- **时间驱动处理场景**:整点发送优惠券,每天更新收益,每天刷新标签数据和人群数据。 -- **批量处理数据:** 按月批量统计报表数据,批量更新短信状态,实时性要求不高。 -- **步执行解耦:** 活动状态刷新,异步执行离线查询,与内部逻辑解耦。 - -这类框架也比较多,下面就带大家看看! - -1. **[Quartz](https://github.com/quartz-scheduler/quartz)** :一个很火的开源任务调度框架,Java 定时任务领域的老大哥或者说参考标准, 很多其他任务调度框架都是基于 `quartz` 开发的,比如当当网的`elastic-job`就是基于`quartz`二次开发之后的分布式调度解决方案 -2. **[XXL-JOB](https://github.com/xuxueli/xxl-job)** :XXL-JOB 是一个分布式任务调度平台,其核心设计目标是开发迅速、学习简单、轻量级、易扩展。现已开放源代码并接入多家公司线上产品线,开箱即用。 -3. **[Elastic-Job](http://elasticjob.io/index_zh.html)** :Elastic-Job 是当当网开源的一个基于 Quartz 和 Zookeeper 的分布式调度解决方案,由两个相互独立的子项目 Elastic-Job-Lite 和 Elastic-Job-Cloud 组成,一般我们只要使用 Elastic-Job-Lite 就好。 -4. **[EasyScheduler](https://github.com/analysys/EasyScheduler "EasyScheduler")** (已经更名为 DolphinScheduler,已经成为 Apache 孵化器项目): Easy Scheduler 是一个分布式工作流任务调度系统,主要解决“复杂任务依赖但无法直接监控任务健康状态”的问题。Easy Scheduler 以 DAG 方式组装任务,可以实时监控任务的运行状态。同时,它支持重试,重新运行等操作... 。 -5. **[PowerJob](https://gitee.com/KFCFans/PowerJob)** :新一代分布式任务调度与计算框架,支持 CRON、API、固定频率、固定延迟等调度策略,提供工作流来编排任务解决依赖关系,使用简单,功能强大,文档齐全,欢迎各位接入使用!http://www.powerjob.tech/ 。 -6. **[DolphinScheduler](https://github.com/apache/dolphinscheduler)** :分布式易扩展的可视化工作流任务调度平台 - -相关阅读: - -- [Spring Job、Quartz、XXL-Job 对比+全解析](https://mp.weixin.qq.com/s/jqN4noo5NazckPCehWFgpA) -- [推荐 5 个 YYDS 的 Java 项目](https://mp.weixin.qq.com/s?__biz=Mzg2OTA0Njk0OA==&mid=2247518215&idx=1&sn=91e467f39322d2e7979b85fe235822d2&chksm=cea1c7ccf9d64edaf966c95923d72d337bf5e655a773a3d295d65fc92e4535ae5d8b0e6d9d86&token=2063686030&lang=zh_CN#rd) - -### 搜索引擎 - -数据库对于全文检索不太友好,这种事情最好交给搜索引擎来做,比如电商系统的商品搜索往往都是基于搜索引擎来做的。 - -Elasticsearch 在搜索引擎数据库领域排名绝对第一,内核基于 Lucene 构建,支持全文搜索是职责所在,提供了丰富友好的 API。 - -Elasticsearch 除了做搜索引擎,还常常被拿来做日志检索(著名的 ELK 三件套,讲的就是 Elasticsearch,Logstash,Kibana,专门针对日志采集、存储、查询设计的产品组合,相关阅读:[什么是 ELK Stack?](https://www.elastic.co/cn/what-is/elk-stack))。 - -Solr 比较老牌了,但是,目前生态以及社区活跃度都比不上 Elasticsearch。 - -1. **[Elasticsearch](https://github.com/elastic/elasticsearch "elasticsearch")**:开源,分布式,RESTful 搜索引擎。 -2. **[Solr](https://lucene.apache.org/solr/)** : Solr(读作“solar”)是 Apache Lucene 项目的开源企业搜索平台。 - -### 认证授权 - -1. **[WxJava](https://github.com/Wechat-Group/WxJava)** : WxJava (微信开发 Java SDK),支持包括微信支付、开放平台、小程序、企业微信/企业号和公众号等的后端开发。 -2. **[Sa-Token](https://github.com/dromara/sa-token)** :轻量级 Java 权限认证框架。支持认证授权、单点登录、踢人下线、自动续签等功能。 -3. **[JustAuth](https://github.com/justauth/JustAuth)** :小而全而美的第三方登录开源组件。目前已经集成了诸如:Github、Gitee、支付宝、新浪微博、微信、Google、Facebook、Twitter、StackOverflow 等国内外数十家第三方平台。 - -### 日志 - -1. **EKL 老三件套** : 最原始的时候,ELK 是由 3 个开源项目的首字母构成,分别是 **E**lasticsearch 、**L**ogstash、**K**ibana。 -2. **新一代 ELK 架构** : Elasticsearch+Logstash+Kibana+Beats。 -3. **EFK** : EFK 中的 F 代表的是 [Fluentd](https://github.com/fluent/fluentd)。 -4. **[TLog](https://gitee.com/dromara/TLog)** :一个轻量级的分布式日志标记追踪神器,10 分钟即可接入,自动对日志打标签完成微服务的链路追踪。 - -### 监控 - -1. **[Spring Boot Admin](https://github.com/codecentric/spring-boot-admin)** :管理和监控 Spring Boot 应用程序。 -2. **[Metrics](https://github.com/dropwizard/metrics)** :捕获**JVM**和应用程序级别的指标。所以你知道发生了什么事。 - -### HTTP 客户端 - -1. **[Retrofit](https://github.com/square/retrofit)** :适用于 Android 和 Java 的类型安全的 HTTP 客户端。Retrofit 的 HTTP 请求使用的是 [OkHttp](https://square.github.io/okhttp/) 库(一款被广泛使用网络框架)。 -2. **[Forest](https://gitee.com/dromara/forest)** :轻量级 HTTP 客户端 API 框架,让 Java 发送 HTTP/HTTPS 请求不再难。它比 OkHttp 和 HttpClient 更高层,是封装调用第三方 restful api client 接口的好帮手,是 retrofit 和 feign 之外另一个选择。 - -### WebSocket - -1. **[netty-websocket-spring-boot-starter](https://github.com/YeautyYE/netty-websocket-spring-boot-starter)** :帮助你在 Spring Boot 中使用 Netty 来开发 WebSocket 服务器,并像 spring-websocket 的注解开发一样简单 - -### 测试 - -为了能让我们编写的系统更加健壮,必要的测试(UI 测试、单元测试...)是必须的。 - -#### 测试框架 - -1. **[JUnit](http://junit.org/)** : Java 测试框架。 -2. **[Mockito](https://github.com/mockito/mockito)** :Mockito 是一个模拟测试框架,可以让你用优雅,简洁的接口写出漂亮的单元测试。(对那些不容易构建的对象用一个虚拟对象来代替,使其在调试期间用来作为真实对象的替代品) -3. **[PowerMock](https://github.com/powermock/powermock)** : 编写单元测试仅靠 Mockito 是不够。因为 Mockito 无法 mock 私有方法、final 方法及静态方法等。PowerMock 这个 framework,主要是为了扩展其他 mock 框架,如 Mockito、EasyMock。它使用一个自定义的类加载器,纂改字节码,突破 Mockito 无法 mock 静态方法、构造方法、final 类、final 方法以及私有方法的限制。 -4. **[WireMock](https://github.com/tomakehurst/wiremock)** :模拟 HTTP 服务的工具(Mock your APIs)。 - -相关阅读: - -1. [The Practical Test Pyramid- Martin Fowler](https://martinfowler.com/articles/practical-test-pyramid.html) (很赞的一篇文章,不过是英文的) -2. [浅谈测试之 PowerMock](https://juejin.im/post/6844903982058618894) - -#### 测试平台 - -- **[MeterSphere](https://github.com/metersphere/metersphere)** : 一站式开源持续测试平台,涵盖测试跟踪、接口测试、性能测试、团队协作等功能,全面兼容 JMeter、Postman、Swagger 等开源、主流标准。 -- **[Apifox](https://www.apifox.cn/)** :API 文档、API 调试、API Mock、API 自动化测试。 - -#### API 调试 - -1. **[Insomnia](https://insomnia.rest/)** :像人类而不是机器人一样调试 API。我平时经常用的,界面美观且轻量,总之很喜欢。 -2. **[Postman](https://www.getpostman.com/)** :API 请求生成器。 -3. **[Postwoman](https://github.com/liyasthomas/postwoman "postwoman")** :API 请求生成器-一个免费、快速、漂亮的 Postma 替代品。 - -## 工具类库 - -### 代码质量 - -- **[lombok](https://github.com/rzwitserloot/lombok)** :使用 Lombok 我们可以简化我们的 Java 代码,比如使用它之后我们通过注释就可以实现 getter/setter、equals 等方法。 -- **[guava](https://github.com/google/guava "guava")** :Guava 是一组核心库,其中包括新的集合类型(例如 multimap 和 multiset),不可变集合,图形库以及用于并发、I / O、哈希、原始类型、字符串等的实用程序! -- **[p3c](https://github.com/alibaba/p3c "p3c")** :Alibaba Java Coding Guidelines pmd implements and IDE plugin。Eclipse 和 IDEA 上都有该插件,推荐使用! -- **[arthas](https://github.com/alibaba/arthas "arthas")** : Arthas 是 Alibaba 开源的 Java 诊断工具。 -- **[sonarqube](https://github.com/SonarSource/sonarqube "sonarqube")** :SonarQube 支持所有开发人员编写更干净,更安全的代码。 -- **[checkstyle](https://github.com/checkstyle/checkstyle "checkstyle")** :Checkstyle 是一种开发工具,可帮助程序员编写符合编码标准的 Java 代码。它使检查 Java 代码的过程自动化,从而使人们不必执行这项无聊(但很重要)的任务。这使其成为想要实施编码标准的项目的理想选择。 -- **[pmd](https://github.com/pmd/pmd "pmd")** : 可扩展的多语言静态代码分析器。 -- **[spotbugs](https://github.com/spotbugs/spotbugs "spotbugs")** :SpotBugs 是 FindBugs 的继任者。静态分析工具,用于查找 Java 代码中的错误。 -- **[hutool](https://github.com/looly/hutool "hutool")** : Hutool 是一个 Java 工具包,也只是一个工具包,它帮助我们简化每一行代码,减少每一个方法,让 Java 语言也可以“甜甜的”。 - -### Excel - -1. **[easyexcel](https://github.com/alibaba/easyexcel)** :快速、简单避免 OOM 的 java 处理 Excel 工具。 - -### PDF - -1. **[pdfbox](https://github.com/apache/pdfbox)** :用于处理 PDF 文档的开放源码 Java 工具。该项目允许创建新的 PDF 文档、对现有文档进行操作以及从文档中提取内容。PDFBox 还包括几个命令行实用程序。PDFBox 是在 Apache 2.0 版许可下发布的。 -2. **[OpenPDF](https://github.com/LibrePDF/OpenPDF)** :OpenPDF 是一个免费的 Java 库,用于使用 LGPL 和 MPL 开源许可创建和编辑 PDF 文件。OpenPDF 基于 iText 的一个分支。 -3. **[itext7](https://github.com/itext/itext7)** :iText 7 代表了想要利用利用好 PDF 的开发人员的更高级别的 sdk。iText 7 配备了更好的文档引擎、高级和低级编程功能以及创建、编辑和增强 PDF 文档的能力,几乎对每个工作流都有好处。 -4. **[FOP](https://xmlgraphics.apache.org/fop/)** :Apache FOP 项目的主要的输出目标是 PDF。 - -### 验证码 - -- **[EasyCaptcha](https://gitee.com/whvse/EasyCaptcha)** :Java 图形验证码,支持 gif、中文、算术等类型,可用于 Java Web、JavaSE 等项目。 -- **[AJ-Captcha](https://gitee.com/anji-plus/captcha)** :行为验证码(滑动拼图、点选文字),前后端(java)交互。 - -### 其他 - -- **[oshi](https://github.com/oshi/oshi "oshi")** :一款为 Java 语言提供的基于 JNA 的(本机)操作系统和硬件信息库。 - -## Devpos - -### CI - -1. **[Jenkins](https://github.com/jenkinsci/jenkins)** : Jenkins 是领先的开源自动化服务器。它使用 Java 构建,提供了 1600 多个插件来支持几乎任何东西的自动化,从而使人类实际上可以将时间花在做机器无法做到的事情上。 - -## 工具 - -### Java 相关 - -- **[JADX](https://github.com/skylot/jadx)** :一款功能强大的反编译工具。 -- **[Recaf](https://github.com/Col-E/Recaf)** : Java 字节码编辑器,基于 ASM(Java 字节码操作框架) 来修改字节码,可简化编辑已编译 Java 应用程序的过程。 - -### Redis 可视化管理 - -- **[Another Redis Desktop Manager](https://github.com/qishibo/AnotherRedisDesktopManager/blob/master/README.zh-CN.md)** :更快、更好、更稳定的 Redis 桌面(GUI)管理客户端。 -- **[Redis Manager](https://github.com/ngbdf/redis-manager)** :Redis 一站式管理平台,支持集群(cluster、master-replica、sentinel)的监控、安装(除 sentinel)、管理、告警以及基本的数据操作功能。 - -### Docker & Kubernetes 可视化管理 - -- **[Portainer](https://github.com/portainer/portainer)** :可视化管理 Docker 和 Kubernetes。相关阅读:[《吊炸天的 Docker 图形化工具 Portainer,必须推荐给你!》](https://mp.weixin.qq.com/s?__biz=Mzg2OTA0Njk0OA==&mid=2247504221&idx=1&sn=85a3c69d64fba1b0d6d8485ab28ab4c4&chksm=cea19e96f9d617802920d5769bafc824b3b80afdfb6166a00532f0caa3b6f5bdac930e4e89de&token=693114125&lang=zh_CN#rd)。 - -### ZooKeeper 可视化管理 - -- **[PrettyZoo](https://github.com/vran-dev/PrettyZoo)** : 一个基于 Apache Curator 和 JavaFX 实现的 ZooKeeper 图形化管理客户端,颜值非常高,支持 Mac / Windows / Linux 。你可以使用 PrettyZoo 来实现对 ZooKeeper 的可视化增删改查。 - -### Markdown - -- **[MarkText](https://github.com/marktext/marktext)** :一个简单而优雅的开源 Markdown 编辑器,专注于速度和可用性。Linux、macOS 和 Windows 均适用。 -- **[Typora](https://www.typora.io/)** :我一直用的一款 Markdown 工具,直接文件夹试图和目录试图,支持 Markdown 格式直接导出成 PDF、HTML 等格式。 -- **[Markdown Here](https://github.com/adam-p/markdown-here)** :使用 Markdown 语法发邮件,并且提供多种主题,快来拯救你的邮件格式吧! - -## 大数据 - -- **[Spark](https://github.com/apache/spark)** :Spark 是用于大规模数据处理的统一分析引擎。 -- **[Flink](https://github.com/apache/flink "flink")** :Apache Flink 是一个框架和分布式处理引擎,用于在*无边界和有边界*数据流上进行有状态的计算。Flink 能在所有常见集群环境中运行,并能以内存速度和任意规模进行计算。 -- **[HBase](https://hbase.apache.org/)**: HBase – Hadoop Database,是一个高可靠性、高性能、面向列、可伸缩的分布式存储系统,利用 HBase 技术可在廉价 PC Server 上搭建起大规模结构化存储集群。 -- **[Flume](https://flume.apache.org/)** :Apache Flume 是一个分布式的、可靠的、可用的,从多种不同的源收集、聚集、移动大量日志数据到集中数据存储的系统。 -- **[Storm](https://storm.apache.org/)** : 一个分布式,高容错的实时计算系统。 - -## 机器学习 - -1. **[Deeplearning4j](https://github.com/eclipse/deeplearning4j)** : Deeplearning4j 是第一个为 Java 和 Scala 编写的商业级,开源,分布式深度学习库。 -2. **[Smile](https://github.com/haifengl/smile)** :基于 Java 和 Scala 的机器学习库。 - -相关阅读:[Java 能用于机器学习和数据科学吗?-InfoQ](https://www.infoq.cn/article/GA9UeYlv8ohBzBso9eph) - -## 其他 - -1. **[ip2region](https://github.com/lionsoul2014/ip2region)** :最自由的 ip 地址查询库,ip 到地区的映射库,提供 Binary,B 树和纯内存三种查询算法,妈妈再也不用担心我的 ip 地址定位。 -2. **[thingsboard](https://github.com/thingsboard/thingsboard "thingsboard")** :开源物联网平台 - 设备管理,数据收集,处理和可视化。 From 630c24348c1d2aba297c7299198a285b5da3f995 Mon Sep 17 00:00:00 2001 From: guide Date: Sun, 13 Mar 2022 19:25:27 +0800 Subject: [PATCH 31/36] Update README.md --- README.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/README.md b/README.md index e422971..626fefe 100644 --- a/README.md +++ b/README.md @@ -3,9 +3,8 @@ 中文 | English
非常棒的 Java 开源项目

-> 我的最新网站已经上线,欢迎点击链接体验:[https://javaguide.cn/](https://javaguide.cn/) (「Java学习+面试指南」一份涵盖大部分 Java 程序员所需要掌握的核心知识。准备 Java 面试,首选 JavaGuide!) -由于项目内容过大,阅读起来不太方便,我已将其同步到了自己网站: +由于项目内容过多,阅读起来不太方便,我已将其同步到了自己网站: - [教程](https://javaguide.cn/open-source-project/tutorial.html) - [实战](https://javaguide.cn/open-source-project/practical-project.html) From 35933159a4ab02fe0ff609b2b977f31b063394aa Mon Sep 17 00:00:00 2001 From: guide Date: Thu, 12 May 2022 21:18:23 +0800 Subject: [PATCH 32/36] Update README.md --- README.md | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/README.md b/README.md index 626fefe..99151e8 100644 --- a/README.md +++ b/README.md @@ -3,6 +3,14 @@ 中文 | English
非常棒的 Java 开源项目

+精选 Github 和 Gitee 上优质的 Java 开源项目,希望能够帮助到你。 + +欢迎大家在项目 [issues 区](https://github.com/CodingDocs/awesome-java/issues)推荐自己认可的 Java 开源项目,让我们共同维护一个优质的 Java 开源项目精选集! + +- Github 地址:[https://github.com/CodingDocs/awesome-java](https://github.com/CodingDocs/awesome-java) +- Gitee 地址:[https://gitee.com/SnailClimb/awesome-java](https://gitee.com/SnailClimb/awesome-java) + +如果内容对你有帮助的话,欢迎给本项目点个 Star。我会用我的业余时间持续完善这份名单,感谢! 由于项目内容过多,阅读起来不太方便,我已将其同步到了自己网站: @@ -17,5 +25,20 @@ ![](https://img-blog.csdnimg.cn/29862b1706b74c1ca9d731f7bd6db5c8.png) +另外,我的公众号还会定期分享优质开源项目,每一期我都会精选 5 个高质量的 Java 开源项目。 + +目前已经更新到了第 7 期: + +- [一款基于 Spring Boot + Vue 的一站式开源持续测试平台](http://mp.weixin.qq.com/s?__biz=Mzg2OTA0Njk0OA==&mid=2247515383&idx=1&sn=ba7244020c05d966b483d8c302d54e85&chksm=cea1f33cf9d67a2a111bcf6cadc3cc1c44828ba2302cd3e13bbd88349e43d4254808e6434133&scene=21#wechat_redirect)。 +- [用 Java 写个沙盒塔防游戏!已上架 Steam,Apple Store](https://mp.weixin.qq.com/s?__biz=Mzg2OTA0Njk0OA==&mid=2247515981&idx=1&sn=e4b9c06af65f739bdcdf76bdc35d59f6&chksm=cea1f086f9d679908bd6604b1c42d67580160d9789951f3707ad2f5de4d97aa72121d8fe777e&token=435278690&lang=zh_CN&scene=21#wechat_redirect) +- [一款基于 Java 的可视化 HTTP API 接口开发神器](https://mp.weixin.qq.com/s?__biz=Mzg2OTA0Njk0OA==&mid=2247516459&idx=1&sn=a86fefe083fa91c83638243d75500a04&chksm=cea1cee0f9d647f69237357e869f52e0903afad62f365e18b04ff1851aeb4c80c8d31a488fee&scene=21&cur_album_id=1345382825083895808#wechat_redirect) +- [一款对业务代码无侵入的可视化 Java 进程管理平台](https://mp.weixin.qq.com/s?__biz=Mzg2OTA0Njk0OA==&mid=2247518215&idx=1&sn=91e467f39322d2e7979b85fe235822d2&chksm=cea1c7ccf9d64edaf966c95923d72d337bf5e655a773a3d295d65fc92e4535ae5d8b0e6d9d86&token=660789642&lang=zh_CN#rd) +- [一个比 Spring 更轻量级的 Web 框架!!!微软、红帽都在用](https://mp.weixin.qq.com/s?__biz=Mzg2OTA0Njk0OA==&mid=2247519466&idx=1&sn=0dd412d5220444b37a1101f77ccdc65d&chksm=cea1c321f9d64a376ef7de329b5c91e593a32c7a8e5c179b7ab3619296feea35939deb1f6a3f&scene=178&cur_album_id=1345382825083895808#rd) +- [轻量!Google 开源了一个简易版 Spring !](https://mp.weixin.qq.com/s?__biz=Mzg2OTA0Njk0OA==&mid=2247519972&idx=1&sn=f03c67e6e24eda2ccf703c8a9bc8c8f8&chksm=cea1c12ff9d6483943f409e5ab50b773b5750b63d00950805fa340a67ad7b52ee74ff6651043&scene=178&cur_album_id=1345382825083895808#rd) +- [一款跨时代的高性能 Java 框架!启动速度快到飞起](https://mp.weixin.qq.com/s?__biz=Mzg2OTA0Njk0OA==&mid=2247520633&idx=1&sn=aec35af40e3ed3b1e844addd04e31af5&chksm=cea1deb2f9d657a46a0684bbcbcb2900cebff39a2b2746a4a809b6b5306bce08d4382efd5ca8&scene=178&cur_album_id=1345382825083895808#rd) + +推荐你在我的公众号“**JavaGuide**”回复“**开源**”在线阅读[「优质开源项目推荐」](https://mp.weixin.qq.com/mp/appmsgalbum?__biz=Mzg2OTA0Njk0OA==&action=getalbum&album_id=1345382825083895808&scene=173&from_msgid=2247516459&from_itemidx=1&count=3&nolastread=1#wechat_redirect)系列。 +![“JavaGuide”公众号回复“开源”](https://guide-blog-images.oss-cn-shenzhen.aliyuncs.com/github/javaguide/open-source-project/image-20220512211235432.png) +![我的公众号](https://guide-blog-images.oss-cn-shenzhen.aliyuncs.com/github/javaguide/books167598cd2e17b8ec.png) From 39c092ffe690f0230e4f4b9d3eaa87485c455883 Mon Sep 17 00:00:00 2001 From: guide Date: Fri, 1 Jul 2022 15:39:43 +0800 Subject: [PATCH 33/36] Update README.md --- README.md | 36 ++++++++++++++++++++++++------------ 1 file changed, 24 insertions(+), 12 deletions(-) diff --git a/README.md b/README.md index 99151e8..d4f2160 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,16 @@ +> [JavaGuide 官方知识星球](https://www.yuque.com/docs/share/8a30ffb5-83f3-40f9-baf9-38de68b906dc)来啦!!!如果你需要专属面试小册/一对一交流/简历修改/专属求职指南/学习打卡,不妨花 3 分钟左右看看星球的详细介绍: [JavaGuide 知识星球详细介绍](https://www.yuque.com/docs/share/8a30ffb5-83f3-40f9-baf9-38de68b906dc) (一定要确定自己真的需要再加入,一定要看完详细介绍之后再加我)。 + +
+

+ + + +

+

+ Github | + Gitee +

+


中文 | English
@@ -7,9 +20,6 @@ 欢迎大家在项目 [issues 区](https://github.com/CodingDocs/awesome-java/issues)推荐自己认可的 Java 开源项目,让我们共同维护一个优质的 Java 开源项目精选集! -- Github 地址:[https://github.com/CodingDocs/awesome-java](https://github.com/CodingDocs/awesome-java) -- Gitee 地址:[https://gitee.com/SnailClimb/awesome-java](https://gitee.com/SnailClimb/awesome-java) - 如果内容对你有帮助的话,欢迎给本项目点个 Star。我会用我的业余时间持续完善这份名单,感谢! 由于项目内容过多,阅读起来不太方便,我已将其同步到了自己网站: @@ -27,15 +37,17 @@ 另外,我的公众号还会定期分享优质开源项目,每一期我都会精选 5 个高质量的 Java 开源项目。 -目前已经更新到了第 7 期: - -- [一款基于 Spring Boot + Vue 的一站式开源持续测试平台](http://mp.weixin.qq.com/s?__biz=Mzg2OTA0Njk0OA==&mid=2247515383&idx=1&sn=ba7244020c05d966b483d8c302d54e85&chksm=cea1f33cf9d67a2a111bcf6cadc3cc1c44828ba2302cd3e13bbd88349e43d4254808e6434133&scene=21#wechat_redirect)。 -- [用 Java 写个沙盒塔防游戏!已上架 Steam,Apple Store](https://mp.weixin.qq.com/s?__biz=Mzg2OTA0Njk0OA==&mid=2247515981&idx=1&sn=e4b9c06af65f739bdcdf76bdc35d59f6&chksm=cea1f086f9d679908bd6604b1c42d67580160d9789951f3707ad2f5de4d97aa72121d8fe777e&token=435278690&lang=zh_CN&scene=21#wechat_redirect) -- [一款基于 Java 的可视化 HTTP API 接口开发神器](https://mp.weixin.qq.com/s?__biz=Mzg2OTA0Njk0OA==&mid=2247516459&idx=1&sn=a86fefe083fa91c83638243d75500a04&chksm=cea1cee0f9d647f69237357e869f52e0903afad62f365e18b04ff1851aeb4c80c8d31a488fee&scene=21&cur_album_id=1345382825083895808#wechat_redirect) -- [一款对业务代码无侵入的可视化 Java 进程管理平台](https://mp.weixin.qq.com/s?__biz=Mzg2OTA0Njk0OA==&mid=2247518215&idx=1&sn=91e467f39322d2e7979b85fe235822d2&chksm=cea1c7ccf9d64edaf966c95923d72d337bf5e655a773a3d295d65fc92e4535ae5d8b0e6d9d86&token=660789642&lang=zh_CN#rd) -- [一个比 Spring 更轻量级的 Web 框架!!!微软、红帽都在用](https://mp.weixin.qq.com/s?__biz=Mzg2OTA0Njk0OA==&mid=2247519466&idx=1&sn=0dd412d5220444b37a1101f77ccdc65d&chksm=cea1c321f9d64a376ef7de329b5c91e593a32c7a8e5c179b7ab3619296feea35939deb1f6a3f&scene=178&cur_album_id=1345382825083895808#rd) -- [轻量!Google 开源了一个简易版 Spring !](https://mp.weixin.qq.com/s?__biz=Mzg2OTA0Njk0OA==&mid=2247519972&idx=1&sn=f03c67e6e24eda2ccf703c8a9bc8c8f8&chksm=cea1c12ff9d6483943f409e5ab50b773b5750b63d00950805fa340a67ad7b52ee74ff6651043&scene=178&cur_album_id=1345382825083895808#rd) -- [一款跨时代的高性能 Java 框架!启动速度快到飞起](https://mp.weixin.qq.com/s?__biz=Mzg2OTA0Njk0OA==&mid=2247520633&idx=1&sn=aec35af40e3ed3b1e844addd04e31af5&chksm=cea1deb2f9d657a46a0684bbcbcb2900cebff39a2b2746a4a809b6b5306bce08d4382efd5ca8&scene=178&cur_album_id=1345382825083895808#rd) +目前已经更新到了第 9 期: + +1. [一款基于 Spring Boot + Vue 的一站式开源持续测试平台](http://mp.weixin.qq.com/s?__biz=Mzg2OTA0Njk0OA==&mid=2247515383&idx=1&sn=ba7244020c05d966b483d8c302d54e85&chksm=cea1f33cf9d67a2a111bcf6cadc3cc1c44828ba2302cd3e13bbd88349e43d4254808e6434133&scene=21#wechat_redirect)。 +2. [用 Java 写个沙盒塔防游戏!已上架 Steam,Apple Store](https://mp.weixin.qq.com/s?__biz=Mzg2OTA0Njk0OA==&mid=2247515981&idx=1&sn=e4b9c06af65f739bdcdf76bdc35d59f6&chksm=cea1f086f9d679908bd6604b1c42d67580160d9789951f3707ad2f5de4d97aa72121d8fe777e&token=435278690&lang=zh_CN&scene=21#wechat_redirect) +3. [一款基于 Java 的可视化 HTTP API 接口开发神器](https://mp.weixin.qq.com/s?__biz=Mzg2OTA0Njk0OA==&mid=2247516459&idx=1&sn=a86fefe083fa91c83638243d75500a04&chksm=cea1cee0f9d647f69237357e869f52e0903afad62f365e18b04ff1851aeb4c80c8d31a488fee&scene=21&cur_album_id=1345382825083895808#wechat_redirect) +4. [一款对业务代码无侵入的可视化 Java 进程管理平台](https://mp.weixin.qq.com/s?__biz=Mzg2OTA0Njk0OA==&mid=2247518215&idx=1&sn=91e467f39322d2e7979b85fe235822d2&chksm=cea1c7ccf9d64edaf966c95923d72d337bf5e655a773a3d295d65fc92e4535ae5d8b0e6d9d86&token=660789642&lang=zh_CN#rd) +5. [一个比 Spring 更轻量级的 Web 框架!!!微软、红帽都在用](https://mp.weixin.qq.com/s?__biz=Mzg2OTA0Njk0OA==&mid=2247519466&idx=1&sn=0dd412d5220444b37a1101f77ccdc65d&chksm=cea1c321f9d64a376ef7de329b5c91e593a32c7a8e5c179b7ab3619296feea35939deb1f6a3f&scene=178&cur_album_id=1345382825083895808#rd) +6. [轻量!Google 开源了一个简易版 Spring !](https://mp.weixin.qq.com/s?__biz=Mzg2OTA0Njk0OA==&mid=2247519972&idx=1&sn=f03c67e6e24eda2ccf703c8a9bc8c8f8&chksm=cea1c12ff9d6483943f409e5ab50b773b5750b63d00950805fa340a67ad7b52ee74ff6651043&scene=178&cur_album_id=1345382825083895808#rd) +7. [一款跨时代的高性能 Java 框架!启动速度快到飞起](https://mp.weixin.qq.com/s?__biz=Mzg2OTA0Njk0OA==&mid=2247520633&idx=1&sn=aec35af40e3ed3b1e844addd04e31af5&chksm=cea1deb2f9d657a46a0684bbcbcb2900cebff39a2b2746a4a809b6b5306bce08d4382efd5ca8&scene=178&cur_album_id=1345382825083895808#rd) +8. [Spring Boot+MyBatis Plus+JWT 问卷系统!开源!open in new window](https://mp.weixin.qq.com/s/kRgqHt73ZJGFQ2XmKG4PXw) +9. [手写一个简化版的 Spring Cloud!](https://mp.weixin.qq.com/s/v3FUp-keswE2EhcTaLpSMQ) 推荐你在我的公众号“**JavaGuide**”回复“**开源**”在线阅读[「优质开源项目推荐」](https://mp.weixin.qq.com/mp/appmsgalbum?__biz=Mzg2OTA0Njk0OA==&action=getalbum&album_id=1345382825083895808&scene=173&from_msgid=2247516459&from_itemidx=1&count=3&nolastread=1#wechat_redirect)系列。 From e55a78ba2c889f4847568d5831d719bf591c3b2a Mon Sep 17 00:00:00 2001 From: guide Date: Fri, 1 Jul 2022 15:43:48 +0800 Subject: [PATCH 34/36] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index d4f2160..7402afd 100644 --- a/README.md +++ b/README.md @@ -46,7 +46,7 @@ 5. [一个比 Spring 更轻量级的 Web 框架!!!微软、红帽都在用](https://mp.weixin.qq.com/s?__biz=Mzg2OTA0Njk0OA==&mid=2247519466&idx=1&sn=0dd412d5220444b37a1101f77ccdc65d&chksm=cea1c321f9d64a376ef7de329b5c91e593a32c7a8e5c179b7ab3619296feea35939deb1f6a3f&scene=178&cur_album_id=1345382825083895808#rd) 6. [轻量!Google 开源了一个简易版 Spring !](https://mp.weixin.qq.com/s?__biz=Mzg2OTA0Njk0OA==&mid=2247519972&idx=1&sn=f03c67e6e24eda2ccf703c8a9bc8c8f8&chksm=cea1c12ff9d6483943f409e5ab50b773b5750b63d00950805fa340a67ad7b52ee74ff6651043&scene=178&cur_album_id=1345382825083895808#rd) 7. [一款跨时代的高性能 Java 框架!启动速度快到飞起](https://mp.weixin.qq.com/s?__biz=Mzg2OTA0Njk0OA==&mid=2247520633&idx=1&sn=aec35af40e3ed3b1e844addd04e31af5&chksm=cea1deb2f9d657a46a0684bbcbcb2900cebff39a2b2746a4a809b6b5306bce08d4382efd5ca8&scene=178&cur_album_id=1345382825083895808#rd) -8. [Spring Boot+MyBatis Plus+JWT 问卷系统!开源!open in new window](https://mp.weixin.qq.com/s/kRgqHt73ZJGFQ2XmKG4PXw) +8. [Spring Boot+MyBatis Plus+JWT 问卷系统!开源!](https://mp.weixin.qq.com/s/kRgqHt73ZJGFQ2XmKG4PXw) 9. [手写一个简化版的 Spring Cloud!](https://mp.weixin.qq.com/s/v3FUp-keswE2EhcTaLpSMQ) 推荐你在我的公众号“**JavaGuide**”回复“**开源**”在线阅读[「优质开源项目推荐」](https://mp.weixin.qq.com/mp/appmsgalbum?__biz=Mzg2OTA0Njk0OA==&action=getalbum&album_id=1345382825083895808&scene=173&from_msgid=2247516459&from_itemidx=1&count=3&nolastread=1#wechat_redirect)系列。 From 6e7a08bbba415e469036cbdcf1d5cb6432b94054 Mon Sep 17 00:00:00 2001 From: Guide Date: Thu, 15 Jun 2023 16:37:17 +0800 Subject: [PATCH 35/36] Update README.md --- README.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 7402afd..90b0f4f 100644 --- a/README.md +++ b/README.md @@ -3,7 +3,7 @@

- +

@@ -12,7 +12,7 @@

-
+
中文 | English
非常棒的 Java 开源项目

@@ -51,6 +51,6 @@ 推荐你在我的公众号“**JavaGuide**”回复“**开源**”在线阅读[「优质开源项目推荐」](https://mp.weixin.qq.com/mp/appmsgalbum?__biz=Mzg2OTA0Njk0OA==&action=getalbum&album_id=1345382825083895808&scene=173&from_msgid=2247516459&from_itemidx=1&count=3&nolastread=1#wechat_redirect)系列。 -![“JavaGuide”公众号回复“开源”](https://guide-blog-images.oss-cn-shenzhen.aliyuncs.com/github/javaguide/open-source-project/image-20220512211235432.png) +![“JavaGuide”公众号回复“开源”](https://oss.javaguide.cn/github/javaguide/open-source-project/image-20220512211235432.png) -![我的公众号](https://guide-blog-images.oss-cn-shenzhen.aliyuncs.com/github/javaguide/books167598cd2e17b8ec.png) +![我的公众号](https://oss.javaguide.cn/github/javaguide/books167598cd2e17b8ec.png) From e690a321d4367bdbb3768db5fdad249b3065d310 Mon Sep 17 00:00:00 2001 From: Guide Date: Sun, 18 Jan 2026 15:42:39 +0800 Subject: [PATCH 36/36] Update README.md --- README.md | 38 +++++++++----------------------------- 1 file changed, 9 insertions(+), 29 deletions(-) diff --git a/README.md b/README.md index 90b0f4f..e9b95ed 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,3 @@ -> [JavaGuide 官方知识星球](https://www.yuque.com/docs/share/8a30ffb5-83f3-40f9-baf9-38de68b906dc)来啦!!!如果你需要专属面试小册/一对一交流/简历修改/专属求职指南/学习打卡,不妨花 3 分钟左右看看星球的详细介绍: [JavaGuide 知识星球详细介绍](https://www.yuque.com/docs/share/8a30ffb5-83f3-40f9-baf9-38de68b906dc) (一定要确定自己真的需要再加入,一定要看完详细介绍之后再加我)。 -


- 中文 |
English
非常棒的 Java 开源项目

+ 精选 Github 和 Gitee 上优质的 Java 开源项目,希望能够帮助到你。 欢迎大家在项目 [issues 区](https://github.com/CodingDocs/awesome-java/issues)推荐自己认可的 Java 开源项目,让我们共同维护一个优质的 Java 开源项目精选集! @@ -24,33 +22,15 @@ 由于项目内容过多,阅读起来不太方便,我已将其同步到了自己网站: -- [教程](https://javaguide.cn/open-source-project/tutorial.html) -- [实战](https://javaguide.cn/open-source-project/practical-project.html) -- [实战项目](https://javaguide.cn/open-source-project/practical-project.html) -- [系统设计](https://javaguide.cn/open-source-project/system-design.html) -- [工具类库](https://javaguide.cn/open-source-project/tool-library.html) -- [开发工具](https://javaguide.cn/open-source-project/tools.html) -- [机器学习](https://javaguide.cn/open-source-project/machine-learning.html) -- [大数据](https://javaguide.cn/open-source-project/big-data.html) - -![](https://img-blog.csdnimg.cn/29862b1706b74c1ca9d731f7bd6db5c8.png) - -另外,我的公众号还会定期分享优质开源项目,每一期我都会精选 5 个高质量的 Java 开源项目。 - -目前已经更新到了第 9 期: - -1. [一款基于 Spring Boot + Vue 的一站式开源持续测试平台](http://mp.weixin.qq.com/s?__biz=Mzg2OTA0Njk0OA==&mid=2247515383&idx=1&sn=ba7244020c05d966b483d8c302d54e85&chksm=cea1f33cf9d67a2a111bcf6cadc3cc1c44828ba2302cd3e13bbd88349e43d4254808e6434133&scene=21#wechat_redirect)。 -2. [用 Java 写个沙盒塔防游戏!已上架 Steam,Apple Store](https://mp.weixin.qq.com/s?__biz=Mzg2OTA0Njk0OA==&mid=2247515981&idx=1&sn=e4b9c06af65f739bdcdf76bdc35d59f6&chksm=cea1f086f9d679908bd6604b1c42d67580160d9789951f3707ad2f5de4d97aa72121d8fe777e&token=435278690&lang=zh_CN&scene=21#wechat_redirect) -3. [一款基于 Java 的可视化 HTTP API 接口开发神器](https://mp.weixin.qq.com/s?__biz=Mzg2OTA0Njk0OA==&mid=2247516459&idx=1&sn=a86fefe083fa91c83638243d75500a04&chksm=cea1cee0f9d647f69237357e869f52e0903afad62f365e18b04ff1851aeb4c80c8d31a488fee&scene=21&cur_album_id=1345382825083895808#wechat_redirect) -4. [一款对业务代码无侵入的可视化 Java 进程管理平台](https://mp.weixin.qq.com/s?__biz=Mzg2OTA0Njk0OA==&mid=2247518215&idx=1&sn=91e467f39322d2e7979b85fe235822d2&chksm=cea1c7ccf9d64edaf966c95923d72d337bf5e655a773a3d295d65fc92e4535ae5d8b0e6d9d86&token=660789642&lang=zh_CN#rd) -5. [一个比 Spring 更轻量级的 Web 框架!!!微软、红帽都在用](https://mp.weixin.qq.com/s?__biz=Mzg2OTA0Njk0OA==&mid=2247519466&idx=1&sn=0dd412d5220444b37a1101f77ccdc65d&chksm=cea1c321f9d64a376ef7de329b5c91e593a32c7a8e5c179b7ab3619296feea35939deb1f6a3f&scene=178&cur_album_id=1345382825083895808#rd) -6. [轻量!Google 开源了一个简易版 Spring !](https://mp.weixin.qq.com/s?__biz=Mzg2OTA0Njk0OA==&mid=2247519972&idx=1&sn=f03c67e6e24eda2ccf703c8a9bc8c8f8&chksm=cea1c12ff9d6483943f409e5ab50b773b5750b63d00950805fa340a67ad7b52ee74ff6651043&scene=178&cur_album_id=1345382825083895808#rd) -7. [一款跨时代的高性能 Java 框架!启动速度快到飞起](https://mp.weixin.qq.com/s?__biz=Mzg2OTA0Njk0OA==&mid=2247520633&idx=1&sn=aec35af40e3ed3b1e844addd04e31af5&chksm=cea1deb2f9d657a46a0684bbcbcb2900cebff39a2b2746a4a809b6b5306bce08d4382efd5ca8&scene=178&cur_album_id=1345382825083895808#rd) -8. [Spring Boot+MyBatis Plus+JWT 问卷系统!开源!](https://mp.weixin.qq.com/s/kRgqHt73ZJGFQ2XmKG4PXw) -9. [手写一个简化版的 Spring Cloud!](https://mp.weixin.qq.com/s/v3FUp-keswE2EhcTaLpSMQ) +- [Java AI 相关优质开源项目](https://javaguide.cn/open-source-project/machine-learning.html):Java AI 开发框架和实战项目推荐。 +- [Java 优质开源技术教程](https://javaguide.cn/open-source-project/tutorial.html):优质面试资料/技术教程/学习路线整理,适合面试准备、系统学习与查缺补漏。 +- [Java 优质开源实战项目](https://javaguide.cn/open-source-project/practical-project.html):简历友好、可落地的实战项目精选(后台管理、电商、权限、网盘、社区等)。 +- [Java 优质开源系统设计项目](https://javaguide.cn/open-source-project/system-design.html):涵盖 Web 框架、微服务、消息队列、搜索引擎、数据库等基础架构组件精选。 +- [Java 优质开源工具类库](https://javaguide.cn/open-source-project/tool-library.html):涵盖 Lombok、Guava、Hutool、Arthas 等提升开发效率和代码质量的常用工具。 +- [程序员必备开发工具](https://javaguide.cn/open-source-project/tools.html):提升效率的开发工具与在线工具合集(IDE、调试、文档、效率等)。 -推荐你在我的公众号“**JavaGuide**”回复“**开源**”在线阅读[「优质开源项目推荐」](https://mp.weixin.qq.com/mp/appmsgalbum?__biz=Mzg2OTA0Njk0OA==&action=getalbum&album_id=1345382825083895808&scene=173&from_msgid=2247516459&from_itemidx=1&count=3&nolastread=1#wechat_redirect)系列。 +你也可以在我的公众号“**JavaGuide**”回复“**开源**”在线阅读[「优质开源项目推荐」](https://mp.weixin.qq.com/mp/appmsgalbum?__biz=Mzg2OTA0Njk0OA==&action=getalbum&album_id=1345382825083895808&scene=173&from_msgid=2247516459&from_itemidx=1&count=3&nolastread=1#wechat_redirect)系列。 ![“JavaGuide”公众号回复“开源”](https://oss.javaguide.cn/github/javaguide/open-source-project/image-20220512211235432.png) -![我的公众号](https://oss.javaguide.cn/github/javaguide/books167598cd2e17b8ec.png) +![JavaGuide 公众号](https://oss.javaguide.cn/github/javaguide/gongzhonghao-javaguide.png)