- 博客(296)
- 资源 (1)
- 收藏
- 关注
原创 Netty 之 NioEventLoop 源码阅读
EventExecutorGroup 继承了 ScheduledExecutorService、AbstractExecutorService、Iterable;定时调度线程池定时执行任务线程池异步提交执行任务迭代器NioEventLoop 继承了 SingleThreadEventLoop,继承了SingleThreadEventExecutor, 是一个单线程事件处理器,单线程事件调度线程池;
2024-08-11 16:11:52
522
原创 Netty 启动源码阅读
主从Reactor模型 :Acceptor 接收到客户端TCP连接请求并处理完成后, 将新创建的SocketChannel 注册到 I/O线程池 (sub Reactor)执行完之后才能被添加到。是一个异步过程,需要。的注册流程,所以等到。
2024-07-07 18:35:00
625
原创 Netty 粘包/拆包、解码工具类
1. 概述1.1 粘包发送 abc def,接收 abcdef原因滑动窗口:假设发送方 256 bytes 表示一个完整报文,但由于接收方处理不及时且窗口大小足够大,这 256 bytes 字节就会缓冲在接收方的滑动窗口中,当滑动窗口中缓冲了多个报文就会粘包Nagle 算法:会造成粘包1.2 半包现象,发送 abcdef,接收 abc def原因应用层:接收方 ByteBuf 小于实际发送数据量MSS 限制:当发送的数据超过 MSS 限制后,会将数据切分发送,就会造成半包滑动窗口
2024-06-30 17:49:28
383
原创 Netty 入门实例
Netty 是一款用于高效开发网络应用的 NIO 网络框架,它大大简化了网络应用的开发过程。Netty 相比 JDK NIO 的优势:● 易用性:Netty 在 NIO 基础上进行了更高层次的封装,屏蔽了 NIO 的复杂性,大大降低了开发者的上手难度;● 稳定性:Netty 修复和完善了 JDK NIO 较多已知问题,例:select 空转导致 CPU 消耗 100%,TCP 断线重连,keep-alive 检测等问题;
2024-06-22 23:02:39
774
原创 Netty ByteBuf 使用详解
ByteBuf 对字节进行操作readerIndex: 读指针,字节数组,读到哪了writerIndex: 写指针,字节数组,写到哪了maxCapacity:最大容量,字节数组最大容量markedReaderIndex:标记读指针,方法可以把修改为,回退重新读某段数据markedWriterIndex: 标记写指针,方法可以把修改为,回退重新写数据。
2024-06-22 18:56:57
1076
原创 Reactor 网络模型、Java代码实例
在 I/O 多路复用的场景下,当有数据处于就绪状态后,需要一个事件分发器(Event Dispather),它负责将读写事件分发给对应的读写事件处理器(Event Handler)。
2024-06-15 15:43:13
944
2
原创 Java Socket 网络编程实例(阻塞IO、非阻塞IO、多路复用Selector、AIO)
之前还有一篇文章:套接字进行网络连接流程, 如下图:socket()bind()listen()accept()read()write()close()close()socket()connect()write()read()close()流程图如下, 具体代码示例可以看下面的。
2024-06-02 17:14:06
636
原创 Linux C++ Socket 套接字、select、poll、epoll 实例
网络编程, 就是编写程序, 使两台联网的电脑可以交换数据,套接字是网络数据传输用的软件设备, 用来连接网络的工具在 linux中 socket被认为是文件中的一种, 在网络数据传输过程中, 使用文件I/O的相关函数套接字常用网络协议:TCP、UDP套接字进行网络连接流程, 如下图:创建服务器套接字socket()绑定端口bind()监听端口listen()接受客户端请求accept()读取客户端请求的数据read()返回客户端要响应的数据write()关闭与客户端的连接close()
2024-05-26 16:42:04
1159
原创 ReentrantLock源码阅读
lock锁, 基于AQS, 实现公平锁、非公平锁AQS可以阅读我这篇文章: 点击传送实现了Lock接口:2. 源码阅读2.1 属性2.2 构造函数构造函数:2.3 Sync队列同步器2.3.1 非公平尝试获取同步状态 nonfairTryAcquirestate为0● 直接CAS 尝试获取同步状态, compareAndSetState(0, acquires)● 成功设置当前线程占有锁 setExclusiveOwnerThread(current);当前线程已经获取锁:● sta
2024-04-14 20:35:20
401
原创 ThreadLocal核心源码阅读
ThreadLocal为每个使用该变量的线程提供独立的变量副本,因此每一个线程都可以独立地改变自己的副本,而不会影响其他线程所对应的副本。
2024-04-06 23:28:19
203
原创 AbstractQueuedSynchronizer 独占式源码阅读
*** 同步队列的头,懒惰地初始化。只能通过方法setHead修改* 注:如果Head存在,则保证其waitStatus不会已取消。*//*** 尾节点,enq 加入*//*** 同步状态*//*** 获取状态*//*** 设置状态*//*** CAS 设置状态*//***/
2024-03-23 17:50:29
831
原创 Java线程池ThreadPoolExecutor源码阅读
线程池先判断核心线程池是否已经已满,即工作线程数是否大于核心线程数,如果不是则创建核心工作线程执行该任务,否则下一步判断工作队列是否已经满了,如果队列没有满,则将该任务入队,否则进入下一步判断线程池中的线程是否已经满了,即是否大于最大线程数,如果不是则创建工作线程执行该任务,否则拒绝这个任务。
2024-03-10 18:54:27
897
原创 SpringBoot整合Redis管道(pipeline)实例
1. Redis 之管道(pipeline执行一个Redis命令,Redis客户端和Redis服务器就需要执行以下步骤:客户端发送命令到服务器;服务器接受命令请求,执行命令,产生相应的结果;服务器返回结果给客户端;客户端接受命令的执行结果,并向用户展示。Redis命令所消耗的大部分时间都用在了发送命令请求和接收命令结果上面,把任意多条Redis命令请求打包在一起,然后一次性地将它们全部发送给服务器,而服务器则会把所有命令请求都处理完毕之后,一次性地将它们的执行结果全部返回给客户端。注意事项
2021-07-05 23:48:29
3085
11
原创 SpringBoot 整合 ShardingSphere JDBC、MySQL分表实例
1. 概述ShardingSphere 分为ShardingSphere-JDBC、ShardingSphere-Proxy、ShardingSphere-Sidecar(TODO)。ShardingSphere 官方手册:传送门 ;这里使用的是 ShardingSphere-JDBC ,ShardingSphere-JDBC为轻量级 Java 框架,在 Java 的 JDBC 层提供的额外服务。 它使用客户端直连数据库,以 jar 包形式提供服务,无需额外部署和依赖,可理解为增强版的 JDBC 驱动,
2021-05-06 23:19:46
682
4
原创 Spring 事务失效的情况
1. 数据库引擎不支持事务以 MySQL 为例,MyISAM存储引擎不支持事务, InnoDB 引擎支持事务。2. @Transactional 注解修饰的方法为非public类型修饰的方法为非public类型时,IDEA 会提示有错误。3. 异常被catch执行以下测试方法,数据成功插入,没有回滚。 @Override @Transactional(rollbackFor = Exception.class, propagation = Propagation.REQUIRED
2021-05-05 21:31:09
429
原创 Spring IoC(控制反转)、DI(依赖注入)
1. IoCIoC(Inversion of Control,控制反转) 面向对象的一种设计思想,很多语言的框架都使用了IoC这个设计思想,并非特属于Spring,其实现为将实例对象交给第三方容器管理,创建实例对象的时候,注入这些实例对象所依赖的实例对象,而不是在内部创建。所谓的内部创建如下所示,连接数据库的示例所示:/** * @author syrdbt * @date 2020-11-15 */public class DateSource { private String da
2020-11-15 13:39:30
312
原创 享元设计模式 和 享元设计模式在 FastDateFormat类中的应用
1. 概述享元设计模式:通过尽量共项实例来避免new出实例。享元设计模式中有两个角色,一是要共享的类,二是获取或创建这些共享实例的工厂。举一个例子:例如 String 常量池,大家创建的String常量,创建String的时候,先去常量池中看一下,有该String常量直接使用该常量,如果没有就去创建,创建成功后放在常量池中,当然这些常量不允许修改的,享元模式中的共享的实例也不允许修改,一旦被修改,大家在共用的时候就会出现问题。2. 享元设计模式在 FastDateFormat类中的应用这里的Da
2020-11-08 17:36:32
831
原创 xxl-job 入门第一个完整实例
文章目录1. xxl-job 概述2. 代码示例参考文献:1. xxl-job 概述官方网址:链接XXL-JOB是一个轻量级分布式任务调度平台,其核心设计目标是开发迅速、学习简单、轻量级、易扩展。现已开放源代码并接入多家公司线上产品线,开箱即用。2. 代码示例下载 demo 。放置配置:修改配置,主要修改 数据库配置。### 1、调度中心项目的端口号以及访问路径server....
2020-10-25 23:49:30
5708
16
原创 什么是 Shell,Shell 功能介绍和脚本编程入门实例
1. 概述Shell 是一种交互工具,为用户提供了启动程序、管理文件系统中的文件和运行在Linux系统上的进程。Shell 的核心是命令行提示符,命令行提示提示符是 Shell 负责交互的部分,允许输入命令,然后解释命令,并在内核中执行。Shell 包含了一组内部命令,这些命令可以创建文件(touch命令)、移动文件(mv命令)等;2. 在这里插入代码片输出 HelloWorld 示例打开控制台终端,输入以下命令,创建helloWorld.sh脚本。vi helloWorld.sh点击回车进
2020-10-24 16:00:38
698
原创 MAC 下载安装、启动和关闭 RocketMQ实例
文章目录1. 下载并解压2. 进入目录,下载依赖3. 启动 nameserver 和 broker4. 关闭 rocketmq 的命令参考文献1. 下载并解压网址:http://rocketmq.apache.org/dowloading/releases/下载 rocketmq-all-4.4.0-source-release.zip 。解压:unzip rocketmq-all-4....
2020-10-19 20:30:05
1125
6
原创 Java递归查询文件下所有的图片,移动到指定文件夹中,分批次建立子文件夹
代码如下所示,将 /Users/shiheng/desktop/测试文件 目录下的图片(包含子文件夹目录下的图片)移动到了 /Users/shiheng/desktop/测试结果 目录下,默认不分批次建立文件夹,重名文件只保存一个:package com.syrdbt.java.study;import java.io.File;import java.util.*;/** * @author syrdbt * @date 2020-10-09 */public class FileUt
2020-10-18 23:26:32
449
原创 MySQL 表自连接,两次自连接查询
有一个分类表,可以有三个等级的分类,一级分类下会有二级分类,二级分类会有三级分类,表结构如下所示。模拟数据如下所示,:现在有个一次性需求需要将所有的分类查询出来保存到excel,格式如下:一级分类id一级分类名称二级分类id二级分类名称三级分类id三级分类名称查询SQL 如下所示:select c1.id as 一级分类id, c1.name as 一级分类名称, temp.c2id as 二级分类id, temp.c2name as 二级分类名称,
2020-10-11 22:59:56
1424
转载 有赞订单管理的三生三世与“十面埋伏”
原文地址:https://tech.youzan.com/trade_manage/有赞订单管理主要承接有赞所有订单搜索及详情展示功能,系统随着业务的不断发展经历了多次飞升之路。下面简单介绍下有赞订单管理系统的三生三世与“十面埋伏”。...
2020-05-29 17:33:51
550
转载 有赞统一日志平台初探
原文地址:https://tech.youzan.com/you-zan-tong-ri-zhi-ping-tai-chu-tan/https://www.jianshu.com/p/8b45af25cbe9
2020-05-29 17:17:42
1682
原创 MAC 使用国内源安装历史版本 Neo4j
1. 概述推荐去官网下载,不管这里用的张帜老师推荐的国内源:http://doc.we-yun.com:1008/neo4j。注意:最新 Neo4j4.x 需要 jdk11,Neo4j3.X 使用 jdk8。这是我找到国内neo4j下载地方的论坛 (因为这个下载源是张帜老师推荐的,感觉肯定没问题,我就用了,请你考虑后再使用,本人不能保证这个下载源和官网是一样的,出了问题读者自己负责哈):http://we-yun.com/index.php/blog/releases-56.html2. 安装教程
2020-05-17 17:13:31
2182
转载 MySQL的四种事务隔离级别(Windows10+MySQL5.6.36+InnoDB)
原文地址:https://www.cnblogs.com/huanongying/p/7021555.html本文在原文的基础上补充了查看MySQL8.0查看默认事务隔离级别,8.0版本和5.6版本默认事务隔离级别一样,都是可重复读 (repeatable-read)。MySQL8.0查询默认事务隔离级别:select @@transaction_isolation;一、事务的...
2020-04-16 01:10:01
588
原创 IDEA 创建 Gradle 工程入门实例
1. 概述Gradle是专注于灵活性和性能的开源构建自动化工具。Gradle构建脚本是使用 Groovy 或 Kotlin DSL 编写的用户手册链接:https://docs.gradle.org/current/userguide/userguide.html 。用户中文链接:2. 创建工程New Project --> Gradle --> Java 。...
2020-04-12 17:57:02
1013
2
转载 Spring Cloud Gateway 2.1.0 中文官网文档
原文地址:https://www.jianshu.com/p/6ff196940b67文章目录1. 如何在工程中引用Spring Cloud Gateway2. 词汇表3. 如何工作的4. 路由断言Factories4.1 After 路由断言 Factory4.2 Before 路由断言 Factory4.3 Between 路由断言 Factory4.4 Cookie 路由断言 Fact...
2020-03-08 12:50:57
1114
原创 装饰者设计模式(Decorator)、装饰者设计模式在 FilterInputStream 中的应用
1. 概述1.1 什么是装饰设计模式?假如现在有一块蛋糕,涂上奶油,就是奶油蛋糕,加上水果就是水果奶油蛋糕,加上生日快乐四个字就是生日蛋糕。奶油蛋糕,水果奶油蛋糕,生日蛋糕其核心都是蛋糕,经过装饰之后成为目的更明确的蛋糕,更能解决问题。像这种不断为对象添加装饰的模式就叫 Decorator 模式,Decorator 指的是装饰物。1.2 装饰者设计模式的角色核心角色(Componen...
2020-03-03 21:06:21
715
2
转载 MySQL事务隔离级别和MVCC
原文地址:https://juejin.im/post/5c9b1b7df265da60e21c0b57事前准备为了故事的顺利发展,我们需要创建一个表:CREATE TABLE t ( id INT PRIMARY KEY, c VARCHAR(100)) Engine=InnoDB CHARSET=utf8;然后向这个表里插入一条数据:INSERT INTO t...
2020-02-26 17:34:48
340
1
原创 Java 阻塞队列实现生产者和消费者场景
1. 阻塞队列阻塞队列(BlockingQueue)是一个支持两个附加操作的队列。这两个附加的操作是:在队列为空时,获取元素的线程会等待队列变为非空。当队列满时,存储元素的线程会等待队列可用。当阻塞队列满时,如果生产者线程使用put方法向队列中添加元素,队列会一直阻塞生产者线程,直到拿到数据,或者响应中断退出。当队列空时,消费者使用take方法从队列中获取元素,队列也会阻塞消费者线程,...
2020-02-26 12:08:14
784
转载 Java 中的阻塞队列
原文地址:http://ifeve.com/java-blocking-queue/1. 什么是阻塞队列?阻塞队列(BlockingQueue)是一个支持两个附加操作的队列。这两个附加的操作是:在队列为空时,获取元素的线程会等待队列变为非空。当队列满时,存储元素的线程会等待队列可用。阻塞队列常用于生产者和消费者的场景,生产者是往队列里添加元素的线程,消费者是从队列里拿元素的线程。...
2020-02-25 21:17:58
312
转载 SpringBoot 自动原配原理
原文地址:https://www.jianshu.com/p/83693d3d0a65预警:本文非常长,建议先mark后看,也许是最后一次写这么长的文章说明:前面有4个小节关于Spring的基础知识,分别是:IOC容器、JavaConfig、事件监听、SpringFactoriesLoader详解,它们占据了本文的大部分内容,虽然它们之间可能没有太多的联系,但这些知识对于理解Sprin...
2020-02-10 21:03:08
333
转载 减少回表的一次SQL查询优化
原文地址:https://www.jianshu.com/p/0768ebc4e28d读后感:减少了回表的次数,从而减少磁盘I/O,降低了查询时间,很有意思。有一张财务流水表,未分库分表,目前的数据量为9555695,分页查询使用到了limit,优化之前的查询耗时16 s 938 ms (execution: 16 s 831 ms, fetching: 107 ms),按照下文的方式调...
2020-02-04 22:09:42
1384
5
原创 SpringBoot2 整合 Redis 实例,实现写入和读取的操作
1. 启动 Redis Server启动 redis server,如下图所示,端口号 6379:2. 工程实例2.1 工程目录工程目录如下图所示:2.2 pom.xml引入依赖: <dependency> <groupId>org.springframework.boot</groupId> ...
2020-02-04 21:33:55
920
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人