java
文章平均质量分 88
roykingw
充满好奇心的技术实用派。B站配套视频:https://space.bilibili.com/628711083
展开
-
程序员短视频上瘾综合症
程序员短视频上瘾综合症原创 2024-08-05 15:08:48 · 4582 阅读 · 3 评论 -
可上手 JVM 调优实战指南
JVM 调优快速上手指南。最快速度带你上手虚无神秘的 JVM 调优。原创 2023-11-19 10:00:02 · 1151 阅读 · 0 评论 -
关于程序员中年危机的一个真实案例
关于中年危机,网上已经有了各种各样的解读。但是,这两天一个学员跟我简单几句聊天,却触发了对于中年危机的另一种思考。如果你曾经也有点迷茫,或许你可以稍微花几分钟看下这个故事。原创 2023-02-26 18:18:44 · 10459 阅读 · 23 评论 -
RocketMQ 5.x新版本部署优化一览
RocketMQ 5.x版本快速上手原创 2023-02-24 18:30:15 · 3088 阅读 · 0 评论 -
Kafka3.x核心速查手册三、服务端原理篇-3、Broker故障恢复机制
所有Follower Partition上报后,Leader Partition才能更新HW的值,然后Follower Partition在下次拉取消息时,才能更新HW值。当Leader Partition出现切换,所有的Follower Partition都按照自己的HW进行数据恢复,就会出现数据不一致的情况。所以在很多对性能要求比较高的线上环境,会选择关闭Kafka的这个Leader Partiton自平衡操作,而用其他运维的方式手动进行Leader Partiton自平衡,尽量减少自平衡过程。原创 2022-09-16 19:33:25 · 1380 阅读 · 0 评论 -
Kafka3.x核心速查手册三、服务端原理篇-2、Broker选举机制
而在一个Partition的众多备份中,需要选举出一个Leader Partition,负责对接所有的客户端请求,并将消息优先保存,然后再通知其他Follower Partition来同步消息。 当一个集群内的Kafka服务启动时,就会尝试往Zookeeper上创建一个/controller临时节点,并将自己的brokerid写入这个节点。 选举产生的Controller节点,就会负责监听Zookeeper中的其他一些关键节点,触发集群的相关管理工作。原创 2022-09-16 19:31:06 · 879 阅读 · 0 评论 -
Kafka3.x核心速查手册三、服务端原理篇-1、Zookeeper整体数据
这一部分主要是理解Kafka的服务端重要原理。但是Kafak为了保证高吞吐,高性能,很多具体实现都是相当复杂的。如果直接跳进去学习研究,很快就会晕头转向。所以,找一个简单清晰的主线就显得尤为重要。这一部分主要是从存储的角度来理解Kafka的Broker运行机制。这对于上一章节建立的简单模型,是一个很好的细节补充。 Kafka依赖很多的存储数据,但是,总体上是有划分的。Kafka会将每个服务的不同之处,也就是状态信息,保存到Zookeeper中。原创 2022-09-16 19:28:49 · 750 阅读 · 0 评论 -
Kafka3.x核心速查手册二、客户端使用篇-7、生产者消息事务
快速、系统掌握Kafka生产者消息事务原创 2022-09-07 13:36:42 · 391 阅读 · 0 评论 -
Kafka3.x核心速查手册二、客户端使用篇-6、消息发送幂等性
Kafka消息发送幂等性原创 2022-09-07 13:34:29 · 336 阅读 · 0 评论 -
Kafka3.x核心速查手册二、客户端使用篇-5、发送应答机制
快速理解Kafka的发送应答机制原创 2022-09-07 13:32:41 · 389 阅读 · 0 评论 -
Kafka3.x核心速查手册二、客户端使用篇-4、消息路由机制
快速理解Kafka的消息路由机制原创 2022-09-07 13:30:56 · 449 阅读 · 0 评论 -
Kafka3.x核心速查手册二、客户端使用篇-3、消息序列化机制
快速理解Kafka的消息序列化机制原创 2022-09-07 13:29:02 · 345 阅读 · 0 评论 -
kafka如何保证消息不丢失?半分钟的答案和半个小时的答案有点不一样。
关于Kafka保证消息不丢失的问题,就简单总结到这里,但这其实并不是结束。相反,随着你对Kafka理解得越深,你会发现这个问题会有更多的发散空间。像MQ如何保证消息不丢失?如何不重复消费?如何处理消息积压?等等,这都是一系列非常开放的面试题。对于你是否真正理解了每个MQ产品,是非常好的检验标准。所以,这么好的题目,如果只是简简单单背个八股文,那太可惜了。...原创 2022-08-30 19:47:54 · 8128 阅读 · 0 评论 -
Kafka3.x核心速查手册二、客户端使用篇-2、分组消费机制
Kafka的HighLevel API的重要目的就是想要简化客户端的使用方式,所以对于API的使用,尽量熟练就可以了。对于其他重要的属性,都可以通过源码中的描述去学习,并且可以设计一些场景去进行验证。其重点,是要逐步在脑海之中建立一个Message在Kafka集群中进行流转的基础模型。 其实Kafka的设计精髓,是在网络不稳定,服务也随时会崩溃的这些作死的复杂场景下,如何保证消息的高并发、高吞吐,那才是Kafka最为精妙的地方。但是要理解那些复杂的问题,都是需要建立在这个基础模型基础上的。...原创 2022-08-28 15:57:43 · 594 阅读 · 0 评论 -
Kafka3.x核心速查手册二客户端使用篇-1、从基础的客户端说起
这一部分主要是从客户端使用的角度来理解Kakfa的重要机制。重点依然是要建立自己脑海中的Kafka消费模型。Kafka的HighLevel API使用是非常简单的,所以梳理模型时也要尽量简单化,主线清晰,细节慢慢扩展。...原创 2022-08-28 15:55:05 · 438 阅读 · 0 评论 -
Kafka3.x核心知识速查手册-一、快速上手篇
言简意赅,快速从零开始构建Kafka整体知识体系,有问题回头再来查。原创 2022-08-24 17:05:13 · 1104 阅读 · 0 评论 -
RocketMQ广播消费本地Offset文件丢失问题探秘
消费者端存储广播消费的本地offsets文件的默认缓存目录是 System.getProperty(“user.home”) + File.separator + “.rocketmq_offsets” ,可以通过定制 rocketmq.client.localOffsetStoreDir 系统属性进行修改。本地offsets文件在缓存目录中的具体位置与消费者的clientIp 和 instanceName有关。...原创 2022-08-15 17:26:43 · 2562 阅读 · 9 评论 -
MyCat2测试实战 -- 王者归来的故事
关于MyCat,不用做过多介绍,曾经大名鼎鼎的分库分表中间件。诞生于2013年,从MyCat1.6版本之后,陷入了一段时间的沉寂。从2021年11月低开始,重新推出新版本的MyCat2,官网地址:http://www.mycat.org.cn/ 。 重要特性一目了然,独立,是他最大的标签。然后在他的Git仓库中,对产品有一个简单的介绍: 立足于Sharding分库分表。简单、快速是MyCat2对自己最直白的声明。他的定位其实是代表了一整套基于MySQL的分布式数据处理系统,可以让MySQL拥有堪比原创 2022-06-22 09:25:01 · 3181 阅读 · 1 评论 -
SpringCloudStream实战拆解以及3.1后新版本特性分析
一套框架,带你对接所有的MQ产品。原创 2022-06-13 10:07:53 · 3548 阅读 · 1 评论 -
ShardingSphere分库分表6-5.x新版本特性
文章目录一、整体理解新版本二、5.X部分新特性1、DistSQL2、可插拔内核3、数据迁移三、全部内容总结一、整体理解新版本 ShardingSphere在2021年十月份推出了5.0的第一个发布版本,并在2022年一月份推出了5.1版本。从整体来看,ShardingSphere5.x将自己的功能定位从数据库中间件升级到了DataBase Plus,数据库功能增强。核心产品定位的变化,必然会带来非常多的改变。不过从功能方面来看,目前5.X版本还只是做了一些功能增强,但是核心功能并没有太大的变动。很多规原创 2022-04-11 14:53:57 · 3528 阅读 · 0 评论 -
互联网的未来架构之道-DDD领域驱动设计
DDD真的来了。后微服务时代,软件系统越来越庞大,也越来越老化。需求越来越模糊,代码越来越混乱,测试越来越困难,技术演进也基本不可能。大型软件项目很快从充满朝气的,充满竞争力的青年,变成了不求变,不敢变的老年。如何解决系统老化的问题?DDD领域驱动设计成了业界最大的希望。各大厂都在落地DDD,还不知道DDD?那就真的OUT了。大龄程序员如何提高竞争力?靠你的技术实力吗?信息爆炸的时代,你会的技术别人分分钟就能学会,凭什么来拉开你与别人的差距?其实方法都知道,提升架构思维,设计高质量的架构,写高质量的代码原创 2021-11-02 16:13:20 · 286 阅读 · 0 评论 -
Netty进阶篇二、关于Buffer内存
文章目录一、堆内内存与堆外内存二、内存对象初始化三、内存数据读写四、内存释放五、Cleaner机制和Finalizer机制六、JAVA四种引用类型七、章节总结 === 楼兰 === 这一节,将重点来讨论NIO中的Buffer。彻底理解清楚Buffer是个什么样的东西。 一、堆内内存与堆外内存 关于Buffer,在基础篇中已经做过简单介绍。他是网络IO数据与本地数据的缓冲。Nio中相关数据都是通过Buffer来携带。在这一部分,就来深入看看这个Buffer到底是什么。 实际上Buff原创 2021-08-10 10:45:13 · 822 阅读 · 0 评论 -
Netty进阶篇三:Channel如何保证高效数据传输?
文章目录一、Channel与流的区别二、从文件读写看IO到底会不会丢数据1、神奇的文件丢失现象。2、使用Channel保证数据不丢失。三、Page Cache机制解读四、进阶篇总结 这一节将来讨论NIO中最后一个组件,Channel。并讨论一个重要的问题, IO到底会不会丢数据。一、Channel与流的区别 在传统的标准IO下,java程序需要进行一些IO操作,例如读写文件,都只能通过流来进行。而在JDK1.4版本以后,java的NIO包中提供了另外一种增强版的IO操作方式, Channel。首先原创 2021-08-08 14:18:15 · 1389 阅读 · 0 评论 -
Netty系列进阶篇一:阻塞和多路复用到底是个啥?
文章目录一、进阶篇:Netty封装了什么?二、刨根问底:到底什么是阻塞?什么是多路复用器?1、操作系统基础1-1 用户态与内核态1-2 系统调用1-3 File Descriptor 文件描述符1-4 简单跟踪程序的系统调用过程2、多路复用的流程3、调试NIO的系统调用三、章节总结一、进阶篇:Netty封装了什么? 之前整理的整个Netty篇,快速的完成了从BIO到Netty的进化,但是始终会有一个感觉,就是这些网络IO的代码有点别扭,有很多代码之间的逻辑需要强行去记忆。这个番外篇我们就会深入底层去探原创 2021-08-04 21:30:20 · 957 阅读 · 1 评论 -
JDK8 JUC整理
一、内容与特点 JUC主要是指JDK8中java.util.concurrent里提供的一系列线程并发工具,但是线程并发的问题远不止几个工具这么简单。要学习工具使用,更要能深入理解工具的原理以及处理线程并发问题的思路。 新手学技术、老手学体系,高手学格局。二、理解线程1、线程与进程 进程是操作系统中分配资源的最小单位,线程是CPU调度运行的最小单位。同一个进程下分配多个线程,这些线程可以共享进程内的资源。 现在的CPU都是有多个核心独立运行的,所以使用多线程能够更多的使用CPU的性能。并原创 2021-07-08 17:47:49 · 554 阅读 · 0 评论 -
Netty系列三、Netty实战篇
文章目录一、传递POJO二、Google Protobuf三、TCP粘包与拆包四、心跳检测五、Netty整合Log4j六、WebSocket七、Netty群聊八、Netty实现RPC服务调用九、短连接与长连接配合示例代码 这一篇我们就玩起来,通过一些常用的实战问题,来理解如何使用Netty进行网络编程。一、传递POJO 第一个示例参见示例代码中的com.roy.netty.pojoTransfer。 这个示例实现的功能是这样的:1、客户端建立连接后,就会往服务端发送一个User对象。原创 2021-06-09 13:25:44 · 1018 阅读 · 2 评论 -
Netty系列二、Netty原理篇
文章目录一、Netty概述二、Netty整体架构设计1、Reactor模型2、Reactor模型分类2.1 单Reactor单线程2.2 单Reactor多线程2.3 多Reactor多线程三、Netty快速入门四、Netty核心组件1、BootStrap和ServerBootStrap2、Future和ChannelFuture3、Channel4、Pipeline和ChannelPipeline5、ChannelHandlerContext6、ChannelHandler及其实现类7、EventLoop原创 2021-06-09 13:22:28 · 732 阅读 · 3 评论 -
Netty系列:基础篇 BIO-NIO-AIO
文章目录一、IO模型二、BIO三、AIO四、NIO1、NIO的IO模型:2、Buffer缓冲3、Channel通道4、Selector选择器5、NIO的基础编程模型6、NIO的问题配合示例代码 这一篇主要是讲基础的网络IO模型,也就是用什么样的通道进行数据的发送和接收。这在很大程度上决定了程序通信的性能。一、IO模型 JAVA有三种网络IOC模型:BIO、NIO、AIO。 BIO 同步阻塞IO。服务器为每一个客户端连接分配一个线程。BIO方式适用于连接数目小且固定的架构。这种方式对服务器原创 2021-06-09 13:16:54 · 386 阅读 · 2 评论 -
Activit7整合Spring、SpringBoot快速精通
文章目录Activi7工作流经典实战一、Activiti7介绍1.1 工作流WorkFlow1.2 Activiti工作流引擎1.3 建模语言BPMN1.4 Activiti使用步骤二、Activiti环境搭建2.1 安装插件2.2 初始化数据库表2.3 表结构解读2.4 Activiti核心类RuntimeServiceTaskServiceHistoryServiceManagementService三、Activiti入门3.1 流程符号详解3.2 定制一个简单的请假流程3.3 部署请假流程3.4 启原创 2021-04-16 09:46:22 · 2635 阅读 · 2 评论 -
DDD专栏开篇词:关于DDD
你好,我是王良翼。在这个专栏中,你将跟我一起学习DDD(领域驱动设计)以及如何将这种抽象的架构思维方式进行落地实践。一、什么是DDD? 这其实并不是一个新奇的概念。在2004年,著名建模专家Eric Evans发表了一本非常有影响力的巨著:Domain Driven Design - Tackling Complexity in the Heart of Software(中文译名: 领域驱动设计-软件核心复杂性之道,2006年3月由清华出版社出版中文译本)。在此书中就系统性的提出了DDD(领域驱动原创 2021-04-11 18:21:36 · 234 阅读 · 1 评论 -
ShardingSphere分库分表5-ShardingSphere的分布式事务详解
文章目录一、ShardingJDBC分布式事务快速上手LOCAL本地事务XA事务快速上手BASE柔性事务快速上手二、分布式事务原理详解XA事务Base柔性事务ShardingJDBC扩展分布式事务管理器三、ShardingProxy分布式事务示例一、ShardingJDBC分布式事务快速上手ShardingJDBC支持的分布式事务方式有三种 LOCAL, XA , BASE,这三种事务实现方式都是采用的对代码无侵入的方式实现的。具体见 TransactionTypeHolder.set(Transact原创 2021-04-06 16:04:13 · 1924 阅读 · 1 评论 -
最全RabbitMQ教程4-常见问题
文章目录一、RabbitMQ如何保证消息不丢失?1、哪些环节会有丢消息的可能?2、RabbitMQ消息零丢失方案:1》 生产者发送消息保证零丢失2》 RabbitMQ消息存盘不丢消息3》 RabbitMQ 主从消息同步时不丢消息4》 RabbitMQ消费者不丢失消息二、如何保证消息幂等?三、如何保证消息的顺序?一、RabbitMQ如何保证消息不丢失?这是面试时最喜欢问的问题,其实这个是所有MQ的一个共性的问题,大致的解决思路也是差不多的,但是针对不同的MQ产品会有不同的解决方案。之前针对RocketMQ原创 2021-02-19 16:32:01 · 279 阅读 · 0 评论 -
最全RabbitMQ教程3-高级特性
文章目录一、Headers路由二、分组消费模式概述测试原理三、懒队列 Lazy Queue四、死信队列五、备份与恢复六、消费优先级与流量控制 RabbitMQ作为当今互联网最为成熟的MQ产品之一,他的高级特性是相当丰富的,如果需要全面了解,最好的参考资料当然是官方文档了。所有脱离官方文档的教学全是耍流氓。 具体可以访问官方文档: https://www.rabbitmq.com/documentation.html ,在右侧的Section模块有最为详细的RocketMQ特性说明。 关于客原创 2021-02-03 09:52:01 · 464 阅读 · 0 评论 -
最全RabbitMQ教程2-快速上手
文章目录RabbitMQ基础概念一、虚拟主机 virtual host二、连接 Connection三、信道 Channel四、交换机 Exchange五、队列 QueueRabbitMQ编程模型原生API一、maven依赖二、基础编程模型1、首先创建连接2、声明该channel下的queue类型3、Producer根据应用场景发送消息到queue4、Consumer消费消息三、官网的消息场景1:hello world体验2: Work queues 工作序列3:Publish/Subscribe 订阅 发原创 2021-01-28 09:18:29 · 763 阅读 · 1 评论 -
最全RabbitMQ教程1-安装使用篇
文章目录MQ介绍1、什么是MQ?为什么要用MQ?2、MQ的优缺点3、几大MQ产品特点比较Rabbitmq安装**实验环境****安装Erlang语言包****安装RabbitMQ:**RabbitMQ集群搭建搭建方式普通集群搭建镜像集群RabbitMQ基础使用MQ介绍这一部分理论介绍,其实在每个MQ产品中都是大致相同的,可以参见RocketMQ的部分。1、什么是MQ?为什么要用MQ?MQ:MessageQueue,消息队列。 队列,是一种FIFO 先进先出的数据结构。消息由生产者发送到MQ进行排原创 2021-01-28 09:13:09 · 757 阅读 · 0 评论 -
闲逛验证码江湖
文章目录验证码介绍一、手写图形验证码验证码的挑战:验证码的安全升级:二、手写表达式验证码三、体验开源验证码四、介绍商业验证码五、验证码的其他实现方式六、验证码的未来发展验证码介绍 图形验证码(CAPTCHA),是Completely Automated Public Turing Test to Tell Computers and Humans Apart (全自动区分计算机和人类的图灵测试)的简称。其本质是一种区分用户是计算机还是人的公共全自动程序。可以有效的防止某些特定程序以暴力方式不断进行登录原创 2021-01-17 11:56:56 · 558 阅读 · 0 评论 -
ShardingShpere分库分表4-ShardingProxy分库分表实战及同类产品选型对比
文章目录一、ShardingProxy快速使用1、ShardingProxy部署2、ShardingProxy使用3、ShardingProxy的服务治理4、Shardingproxy的其他功能5、ShardingProxy的SPI扩展二、ShardingSphere总结三、与其他相关产品的对比一、ShardingProxy快速使用 ShardingProxy的功能同样是分库分表,但是他是一个独立部署的服务端,提供统一的数据库代理服务。注意,ShardingProxy目前只支持MySQL和Postgr原创 2021-01-12 17:26:02 · 1115 阅读 · 0 评论 -
ShardingSphere分库分表3-内核原理及核心源码解析
文章目录一、内核剖析解析引擎路由引擎改写引擎执行引擎归并引擎二、源码环境安装三、ShardingSphere的SPI扩展点1、SPI机制2、ShardingSphere中的SPI扩展点3、实现自定义主键生成策略四、源码大图这一部分,我们主要了解ShardingSphere进行分库分表的底层原理,并且深入到源码了解分库分表的实际运行过程。一方面,我们之前在学习ShardingJDBC时,积累了大量的测试实例,对于学习底层原理是非常好的学习入口。另一方面,也是为了后面学习ShardingProxy做准备。原创 2021-01-12 17:24:01 · 1416 阅读 · 0 评论 -
ShardingSphere分库分表2-ShardingJDBC实战
文章目录一、ShardingSphere二、ShardingJDBC实战1、核心概念:2、测试项目介绍3、快速实战4、ShardingJDBC的分片算法5、ShardingSphere的SQL使用限制6、分库分表带来的问题7、分库分表方案设计实战一、ShardingSphere ShardingSphere是一款起源于当当网内部的应用框架。2015年在当当网内部诞生,最初就叫ShardingJDBC。2016年的时候,由其中一个主要的开发人员张亮,带入到京东数科,组件团队继续开发。在国内历经了当当网原创 2021-01-12 17:18:50 · 977 阅读 · 1 评论 -
ShardingSphere分库分表1-mysql生产环境高可用实战
文章目录一、实验目的与环境二、基础环境介绍三、搭建主从集群1、理论基础2、同步的原理3、搭建主从集群3.1 配置master主服务器3.2 配置slave从服务3.3 主从集群测试3.4 集群搭建扩展:3.5、GTID同步集群4、集群扩容5、半同步复制1、理解半同步复制2、搭建半同步复制集群6、主从架构的数据延迟问题:四、MySQL的高可用方案--了解1、MMM2、MHA3、MGR五、分库分表1、分库分表有什么用2、分库分表的方式3、分库分表的缺点4、什么时候需要分库分表?5、常见的分库分表组件一、实验目原创 2021-01-12 17:15:20 · 1779 阅读 · 0 评论