- 博客(72)
- 资源 (7)
- 收藏
- 关注
原创 玩转JUC - 如何优雅的异步处理任务
本篇文章主要给大家介绍线程池的使用,以及异步处理任务的最佳实践,希望对大家有所帮助,后续我们将会继续给大家分享背后的实现细节以及底层原理。
2025-04-03 17:03:23
412
原创 玩转JUC - 闲聊并发包中那些好用的工具类
本篇文章我们主要学习Java 并发包中的一些工具类。主要内容包括 原子类、Lock、Condition 以及 线程间协作的 CountDownLatch、CyclicBarrier、Semaphore、Exchanger 和 Phaser 等内容,本篇文章主要介绍如何使用,后续我们会进一步分析原理。
2025-03-31 13:42:12
547
原创 流量分配的艺术: 如何设计一款负载均衡组件
本篇文章给大家介绍了负载均衡常见的六种策略,并且给出了实现思路和落地的代码,在分布式系统设计中,除了远程通信、序列化之外 负载均衡也是一个重要的核心的组件。到现在我们已经自研了远程通信组件、序列化组件和负载均衡组件,后面我们将他们集成在一起,将我们的 cheese彻底打造成一款可投产的 分布式服务框架。
2025-03-22 20:45:12
1137
1
原创 玩转 SpringCloud - 快速构建分布式系统详解
本篇文章主要搭建了一个简单的分布式系统,主要包含两个服务,后面我们可以基于这个项目深入的学习分布式系统环境中的一些组件以及实现原理和一些优秀的设计。前面我们在设计 Cheese 的时候有给大家介绍过 服务注册中心、远程过程调用相关的内容,通过本次案例相信你有更加深入的理解了。后续我们将会继续的深入分析 注册中心、远程过程调用以及负载均衡原理的实现,参考其中一些优秀的设计整合到我们的 Cheese 中。
2025-03-22 15:45:36
980
原创 玩转 Netty : 如何设计高性能RPC通信组件
本篇文章通过一个多人聊天的案例引入了 Netty 中的线程模型,接着通过图解的形式给大家分析了 Netty 内部线程模型的结构,以及 Netty 内部的一些组件是怎么协同工作的,这些都是 Netty 高性能的技术基础。最后结合 Netty 中的编码和解码机制,以及前面开发的序列化组件 设计了一款基于 Netty 的 RPC 通信的组件,希望对大家有帮助。
2025-02-26 14:12:27
3509
1
原创 玩转 Netty:从零开始构建高性能的网络服务
本篇文章结合案例给大家介绍了 Netty 的基本用法以及编码的步骤,并且详细的剖析了 Netty 中常用的一些组件,没有讲解复杂的概念,最后使用 Netty 实现看一个 HTTP 服务器。结合两个案例相信大家已经知道如何使用 Netty 开发一个网络应用程序了。至于Netty 的高级特性 线程模型 我会再后面的文章给大家介绍。
2025-02-26 13:51:22
3434
原创 分布式服务框架 如何设计一个更合理的协议
这篇文章给大家介绍了如何自定义应用层的协议,根据我们的实际业务设计一个更合理的协议。我们主要的实现方案就是基于 NIO 创建 Socket 通道传输根据Cheese协议封装的对象来完成客户端和服务端的数据交换。6.2、关于Cheese的思考数据从内存里传递到网络中这个过程会涉及到序列化,本篇文章我们使用的是 JSON序列化,这种方式比较直观,因为人可以看懂所以也方便调试。缺点就是效率不高,我们后面会研究一下常用的序列化方式,为我们的Cheese 协议 选择一种最佳的方案。
2025-02-11 15:58:48
8468
原创 从内存到网络:深入理解对象序列化
首先我们的编写的代码最终都会变成计算机能够执行的机器码指令,编译型的语言一步到位生成机器码,解释型的语言通过解释器或者虚拟机来翻译成机器码。那么我们的程序处理的数据是怎么从内存里进入到网络呢毫无疑问,数据进入网络或者磁盘肯定是通过IO操作实现的,比如Java中的InputStream和 OutputStream以及C++中的ifstream和ofstream函数 等等。但是数据在内存中的组织结构千奇百怪,有各种简单类型的数据,也有复杂类型的对象以及各种奇奇怪怪的数据结构。
2025-02-11 11:18:39
8360
原创 大话HTTP协议 手动实现一个HTTP服务器
本篇文章主要和大家讨论了一下HTTP请求的结构和特性,并且使用Java的NIO实现了一个简单的HTTP服务器,具备处理get和Post请求的能力,到这里相信你肯定对HTTP请求有了一个全面的认知。最近的两篇文章都是侧重网络和HTTP协议,看似好像和我们的分布式框架cheese无关,其实关系非常紧密,任何分布式服务框架都离不开网络和协议这两个核心问题。
2024-12-21 10:48:21
11779
原创 HTTP请求的奇幻旅程:从发起至响应的全方位探索
当我们在浏览器中轻轻一点或者通过一个应用程序发送一个HTTP请求时,这个请求便踏上了一段既复杂又精彩的旅程。这不仅是一次数据的传递,更是一场跨越网络与服务器边界的冒险。
2024-12-21 09:52:18
11863
原创 漫谈 Socket 编程 如何设计 Cheese 的远程调用功能
本篇文章详细的解析了Java中Socket 编程的实战应用,然后结合案例分析了Spring中 RestTemplate 组件处理 get请求的源码 ,最后实现了一个简单的远程调用的组件,文章中还穿插了 URI 和URL的概念解析、Socket 常用的API 、以及乱码的解决方案等常见的面试题。
2024-12-04 10:59:34
12185
原创 抽丝剥茧 分布式服务框架设计 缓存优化篇
本篇文章我们引入了本地缓存组件,解决了每次请求之前都需要查询Zookeeper的问题,提高了百分之50的请求处理的效率。同时降低了Zookeeper集群百分之五十的访问压力,有效的提高了Cheese 的生产效率。但是 我们的cheese 依然还很脆弱,依然存在很多问题,后面我们将不断的完善它。相关代码地址:cheese-store: 分布式服务框架设计与开发 - Gitee.com。
2024-12-04 10:50:56
12001
原创 抽丝剥茧 分布式服务框架设计 实战落地篇
我们完成了 cheese 的设计和开发,Jerry 通过它找到了想要吃的奶酪,但是你肯定会存在一些疑问。比如 Cheese 每次都会先去Zookeeper 查一下Tom的位置在进行调用,这样Tom和Jerry 之间的沟通效率会很低,并且如果多个服务这么玩 zookeeper 就会有很大访问压力。关于这些问题后面我们会进行一步一步的优化。cheese 是一个粗糙的开始,也是一个最好的开始,我们后面一起加油。
2024-10-31 11:53:39
12058
原创 抽丝剥茧 分布式服务框架设计 理论设计篇
Cheese 是本篇文章的主角,关于她的雏形和项目架构相信大家已经有了很清晰的认知了,目前的设计虽然十分简陋,但我们的目标是先把Cheese生产出来,然后用起来,后续我们在使用的过程中发现了问题 在逐步的解决,让Cheese 持续的演进。
2024-10-31 09:38:56
12321
原创 Zookeeper客户端工具 Apache Curator 最佳实践
本篇文章给大家详细的介绍了Curator 这个Zookeeper的客户端工具,从API的使用,到Watch机制的实现方案,都给出了相应的代码,最后带着大家实现了一个分布式队列的案例,希望对大家有所帮助,有疑问的小伙伴欢迎留下自己的问题,或者在公众号留言均可。
2024-10-25 19:25:01
12708
原创 Zookeeper实战 集群环境部署
本篇文章主要给家介绍Zookeeper集群环境的搭建以及相关的异常情况产生的效果,大家可以根据本文中提供的命令进行实操。最后还闲聊了一下Zookeeper强一致性的特性,建议大家可以去官方文档上查阅相关的内容,相信一定会有不同 的收获。
2024-10-25 18:09:02
18398
1
原创 Zookeeper 快速入门到实战
Zookeeper 的 Watch 机制主要是用于监控节点状态变化的机制。简而言之就是它允许客户端在zookeeper上注册某个节点的事件监听器,当该节点发生了变更的时候Zookeeper会通知到该客户端。这个功能就很厉害了,我们先来做一个小案例,体会下这个过程,之后那你就能很快的理解这个机制的工作原理了。
2024-10-20 13:45:04
18723
1
原创 消息中间件 Kafka 快速入门与实战
最近感觉上班实在是太无聊,打算给大家分享一下Kafka的使用,本篇文章首先给大家分享三种方式搭建Kafka环境,接着给大家介绍kafka核心的基础概念以及Java API的使用,最后分享一个SpringBoot的集成案例,希望对大家有所帮助。
2024-09-28 10:50:23
22864
原创 Apache POI Excel 处理最佳实践
问题的背景是在需求设计的时候 ,我们在业务专家的配合下设计了一些表,但是为了方便的和他们讨论我们把表结构的描述通过Excel文件的方式记录了下来,然后我们需要根据excel文件中的内容生成对应的DDL。今天就给大家分享一下我们的解决方案
2024-06-30 13:43:42
22589
原创 CentOS 环境下 PostgreSQL 在线安装和源码安装详解
昨天给大家简单的介绍了一下 PostgreSQL,并且在Windows系统上通过图形化界面的方式搭建好了环境,今天我们就来学习一下如何在Linux 系统上搭建 PostgreSQL环境,我会给大家介绍在线安装、离线源码安装以及Docker 安装三种方式。
2024-06-06 13:06:19
15709
原创 Windows 下 PostgreSQL 图形化界面安装、配置详解
这里给大家解释一下这几个组件,首先 PostgreSQL Server 相信大家都知道,这个就是数据库的服务端程序,所以我们肯定要安装,后续的数据都是通过这个组件组织存放的。接着是pgAdmin4 这个组件,顾名思义它是PG的 一个图形化界面管理工具,可以链接PG的服务端,也就类似navicat那种,至于Stack Builder 组件是用来下载额外需要的扩展包的。好了,关于PG 在Windows 下的环境搭建 就先到这里了,后面给大家继续介绍在Linux环境上搭建PG服务,以及PG的一些基本的用法。
2024-06-01 10:45:47
17134
4
原创 SpringBoot2 极简开发 -- 核心配置详解
昨天给大家介绍了SpringBoot官方文档的入门案例,相信大家现在已经可以使用SpringBoot开发一些简单的小demo了,那么今天我们就来学习一下SpringBoot的一些常用的配置,首先我们先来创建一个项目,项目结构如下: 关于这几个目录先给大家介绍下 ,首先大家肯定知道我们编写的代码都是在src/main/java路径下,test包下是存放测试的代码,那么毫无疑问resources目录下 存放的肯定就是项目需要用到的一些配置文件,我们发现其中有一个appl...
2021-04-07 21:50:26
498
1
原创 SpringBoot2 极简开发 -- 官方文档解读
这几天学习(上班摸鱼)的时候突然发现官网上SpringBoot 已经更新到了2.4.2的版本了。好吧,很久都没碰Spring家族的东西了,新入职的这家公司自己的技术栈严重的滞后,今天就抽空回忆一下SpringBoot的基本使用 。 首先按照惯例我们打开官网(spring.io)。我们发现截止到目前最新的稳定版是SpringBoot2.4.2。如下图所示:我们可以发现 最新的GA版本就是2.4.2 ,所以我们今天使用的版本也是2.4.2。首先我们打开文档https://docs.spr...
2021-01-30 15:49:46
1120
3
原创 深入学习消息中间件 -- RabbitMQ高级应用
前面给大家讲解了RabbitMQ的环境搭建以及工作模式和一些基本的用法,今天就来给大家讨论一下RabbitMQ的高级用法。在讨论之前先给大家讲解一下SpringBoot整合RabbitMQ,后面的示例代码我们也使用SpringBoot了,不再使用main方法来演示了。 首先创建一个空的项目,在空的项目中创建模块。如下图所示:创建完成之后我们首先创建一个module ,如下图所示:然后填写项目名以及左边等信息,首先我们创建消息生产者,创建完成之后项目结构如下: ...
2020-09-13 23:44:36
358
原创 深入学习消息中间件 -- RabbitMQ工作模式详解以及使用场景简介
在之前的博客中给大家介绍了CentOS7环境下搭建RabbitMQ,今天就来和大家详细的讨论一下RabbitMQ的几种工作模式。 首先我们来看最简单一个入门案例,打开idea,新建一个工程,项目结构如下所示:pom文件中加入AMPQ的客户端: <dependency> <groupId>com.rabbitmq</groupId> <artifactId>amqp-cl...
2020-09-12 19:49:52
264
原创 Elastic Stack核心技术实战02--Elasticsearch中的Domain Specific Language详解
上一篇博客中给大家介绍了Elasticsearch单机版的环境搭建以及简单的增删改查,今天我们就来学习一下Elasticsearch的Domain Specific Language,也就是我们常说的DSL查询。在es中以JSON的格式出现。 在此之前先给大家介绍一下分词器,首先...
2020-08-01 21:23:39
510
原创 Elastic Stack核心技术实战03--Elasticsearch中的JavaAPI详解
@RunWith(SpringRunner.class)@SpringBootTestpublic class GmallSearchServiceApplicationTests { @Reference SkuService skuService;// 查询mysql @Autowired JestClient jestClient; @Test public void contextLoads() throws IOException {.
2020-07-28 08:21:38
306
原创 Elastic Stack核心技术实战01--Elasticsearch环境搭建与基础入门
相信大家对于ELK并不陌生吧,大家在工作中一定都接触过Elasticsearch这个搜索引擎,ELK技术栈就是Elasticsearch和Logstash以及Kibana三个组件共同组成的,但是随着后来又有新组件Beats的加入,于是就形成了Elastic Stack。因此作为一个优秀的程序开发者,我们现在在和别人条田的时候不应该再说ELK了(过时了),而是称之为Elastic Stack。关于两者的区别,如下图所示: 好了,今天就给大家介绍一下第一个组件Elast...
2020-07-27 00:07:48
262
原创 深入学习消息中间件 -- CentOS7下RabbitMQ环境搭建以及工作机制简介
前几天给大家介绍了一下Redis的基本使用以及主从复制的集群搭建,今天来给大家介绍 一下RabbitMQ的基本使用,首先我们来搭建环境,本次教程是在CentsOS7下搭建,首先准备好虚拟机 打开虚拟机,我们知道RabbitMQ是使用Erlang语言开发的,因此我们在使用RabbitMQ之前必须要安装一个Erlang的环境,这就类似于我们想要运行Java应用,就必须要安装一个Java的运行环境是一样的。首先准备好安装包,如下图所示:这里我使用的是RabbitMQ的版本是3.7...
2020-06-01 09:43:17
291
原创 Redis主从复制集群部署
昨天给大家介绍了以下Redis的一些基础知识、常用的数据类型以及数据持久化的两种方式。同时对于Redis中的事务也做了一个简单的介绍,相信大家对Redis已经有了一个全面的认识。今天我们就来学习一下Redis的集群部署。 首先我们先来准备好虚拟机,这里使用的CentOS7环境。下面来看具体的操作。首先我们准备号配置文件。这里先来说明一下...
2020-05-27 20:09:51
294
原创 Redis环境搭建以及基础入门
今天我们来学习一下Redis相关的内容,相信作为一名优秀的程序员,我们对Redis肯定不陌生,所以就不多废话了,我们直接来开干,首先准备一台虚拟机,这里我是用的是CentOS7的环境,准备好了之后我们准备好安装包,并上传至虚拟机我们都知道,redis是使用C语言编写的,因此我们在安装之前需要检查一下gcc的编译环境,如果没有的话,就需要使用yum install -y gcc-c++ 命令进行安装 好了,安装完成之后我们解压redis的包,进入解压目录,修改一下src...
2020-05-26 20:52:35
365
1
原创 Tomcat架构解析以及源码构建
作为一个优秀的程序开发者,我们不仅需要对自己编写的程序有深刻的理解和认识,同样的我们还需要对我们编写的程序的运行环境有一个彻底的认识,这样我们在能在这条路上走的更远。相信大家对tomcat都很熟悉,目前也是大陆使用的较多的一种开源的Web容器。对于Tomcat的基本使用这里不做过多的介绍。具体的下载和使用可以查看我在2018年写的https://blog.youkuaiyun.com/qq_38701478/article/details/85003063这篇文章。 好了今天我们进入主题,我们首...
2020-05-25 20:55:59
8026
1
原创 开启DevOps之旅--Docker入门与实践
前几年一直流传这一句话,虚拟机已死,容器才是未来! 这句话听起来似乎不可思议,很显然有的事容器并不能取代虚拟机,但是从这句话可以看得出来,某些领域容器技术已经逐渐的成为主流了,尤其是微服务架构已经成为一种潮流的今天,我们作为技术人员也应该努力的追上技术的发展。关于虚拟机和容器的相关概念大家可以自己去查询相关的资料(自己太菜了,怕把你们带偏)。 看到标题大家可能会对DevOps这个名词很好奇,这里给出百度百科的解释。 看起来很不错吧,不过这里先不对De...
2020-05-25 19:14:35
454
原创 CentOS7环境下Mysql5.7的用户远程登录配置(用户与权限管理)
昨天给大家介绍了怎么在Linux 环境下安装Mysql5.7,今天给大家介绍一下Mysql5.7d的用户与权限管理,首先我们先来登录到mysql中,并且先来创建一个数据库,接着我们创建一张数据表,好了,我们先来看看能不能往里面插入数据,我们发现可以正常的数读写数据,接下来我们来试试中文,我们发现中文依然是可以的,这里需要说明一下,如果你在插入中文报...
2020-05-17 12:17:19
699
原创 CentOS7下搭建MySql5.7环境
上次教大家在Windows上安装了一次mysql5.5的教程,今天就给大家介绍一下如何在Linux环境下搭建MySql的环境,首先我们准备好一台虚拟机,由于之前安装了5.5的版本,因此我先卸载掉之前的版本接着我们将官网上下载的安装包上传到linux环境中。关于MySql的下载大家可以自行去官网下载, 这里给出官网地址(https://dev.mysql.com/downloads/)...
2020-04-23 15:26:58
317
原创 解决异常org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type XXXX
今天在撸码的时候碰到了一个小小的问题,具体的异常信息如下Description:Field pmsBaseCatalog1Mapper in com.wcan.gmall.manager.service.CatalogServiceImpl required a bean of type 'com.wcan.gmall.manager.mapper.PmsBaseCatalo...
2020-04-19 18:45:06
1410
原创 解决Idea下创建Maven项目出现Cannot resolve plugin org.apache.maven.plugins:maven-surefire-plugin:2.18.1异常
今天自己在撸码的时候发现了一个很迷的问题,更新了一下maven项目,突然出现了某个插件异常,控制台提示信息Cannot resolve plugin org.apache.maven.plugins:maven-surefire-plugin:2.18.1如下图所示:从上面的信息我们知道是maven的一个插件没找到,导致更新项目的时候发生错误,好了,按照一贯的思路,我们先在本地仓库找到...
2020-04-17 21:34:34
16705
4
原创 探索Java14新特性
2020年3月17号oracle发布了Java14,今天我们来尝尝鲜,看看新发布的版本都有一些什么新特性,首先我们在oracle官方网站上下载JDK14,(https://www.oracle.com/java/technologies/javase-downloads.html),进入之后如下图所示:我们点击下载,即可下载JDK14,下载完成之后点击安装即可,需要要注意的...
2020-04-16 21:37:34
437
Java图形用户界面的简易计算器
2018-03-24
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人