自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(153)
  • 资源 (1)
  • 收藏
  • 关注

原创 Redis+Lua的分布式限流器

摘要:Redis分布式限流实现方案 基于Redis+Lua的令牌桶算法实现分布式限流,核心设计如下: 算法选择:采用令牌桶算法,支持突发流量(桶容量限制)和恒定速率控制 Redis存储:使用Hash结构存储当前令牌数(tokens)和最后更新时间(last_time) 原子性保证:通过Lua脚本原子执行令牌计算、判断和更新操作 关键处理: 处理初始化数据和非数字异常 解决服务器时间回拨问题 自动设置Key过期时间避免冷数据堆积 性能优化:预编译Redis脚本提升执行效率。Java实现通过StringRedi

2025-08-03 21:34:39 753

原创 Redis实现分布式锁

本文介绍了一个基于Redis的分布式锁实现方案,主要包含以下几个核心设计: 锁状态管理:使用ThreadLocal存储当前线程持有的锁信息,包括锁值、重入计数器和租约时间,确保线程安全。 自动续期机制:通过ScheduledExecutorService创建定时任务,按租约时间的1/3间隔定期续期Redis锁,防止业务未完成时锁过期。 守护线程设计:自定义线程工厂创建守护线程执行续期任务,避免程序退出时线程无法正常终止。 完整生命周期管理:提供@PostConstruct初始化和@PreDestroy销毁方

2025-07-24 23:32:27 375

原创 springboot集成LangChain4j

本文介绍了使用LangChain4j与Spring Boot 3集成AI聊天功能的实现方案。主要内容包括:1) 环境要求为JDK17,通过修改pom.xml配置依赖项;2) 使用免费API测试接口,配置YML文件连接AI模型;3) 提供了测试类示例代码及运行效果截图;4) 详细讲解了ChatMemory的两种实现方式(基于消息数量或Token数量)及其适用场景;5) 介绍了通过实现ChatMemoryStore接口实现Redis持久化存储的方案,包含Redis配置和核心代码实现。该方案可作为AI对话系统的开

2025-07-23 23:03:37 350

原创 EXPLAIN 分析关键参数解析

EXPLAIN 分析关键参数解析

2025-06-16 12:11:24 520

原创 Redis缓存落地总结

避免大Key 合同PDF存储 元数据存Redis,文件存MinIO 内存降低80%,GC频率减少90%动态TTL 合同模板动态ttl防批量失效 每日积分缓存 TTL=24h±2h随机 数据库峰值压力降低92%熔断降级 CA机构调用 Sentinel熔断+本地存证+异步重试 签署服务可用性99.99%空值缓存 非法合同ID拦截 布隆过滤器+LegalNullObject+分布式锁 穿透查询减少100%分布式锁 签章流水号控制 Redisson红锁(5节点) 重复签署事故归零。

2025-06-01 14:37:09 686

原创 垃圾回收器深度对比与调优策略

内存模型:CMS基于传统分代,G1采用分区(Region)回收算法:CMS标记-清除(内存碎片),G1标记-整理暂停控制:G1可通过MaxGCPauseMillis预测停顿适用场景:CMS适用于中小堆,G1适合8G+大堆。

2025-02-16 13:19:35 803

原创 JVM调优参数分类

开头:标准参数(所有JVM实现支持), , 启用功能, 禁用功能, 设置数值型参数基础配置必检项:危险参数黑名单:

2025-02-10 21:56:26 904

原创 Spring源码(三)Spring Bean生命周期

Bean生命周期流程图。

2023-07-30 11:05:02 518

原创 Spring源码(二)Spring底层架构核心概念解析

BeanDefinition中存在很多属性用来描述一个Bean的特点。

2023-07-27 22:33:09 1205

原创 Spring源码(一)Spring底层核心原理解析

本文章将对以下Spring核心知识进行介绍。

2023-07-25 22:43:07 556

原创 Redis基础复习

Redis 是C语言开发的一个开源高性能键值对的内存数据库,可以用来做数据库、缓存、消息中间件等场景,是一种NoSQL(not-only sql,非关系型数据库)的数据库string是redis最基本的类型,一个key对应一个value。string类型是二进制安全的,意思是redis的string可以包含任何数据,比如jpg图片或者序列化的对象string类型是Redis最基本的数据类型,一个redis中字符串value最多可以是512M。

2023-05-11 21:31:46 1163

原创 POI和esayExcel

目前比较流行的就是ApachePoI和阿里巴巴的easyExcel!

2022-07-18 22:13:01 3074

原创 RocketMQ(五)集群RocketMQ搭建

手把手教你搭建RocketMQ集群

2022-04-28 13:04:31 1044

原创 RocketMQ(四)消息特殊处理

RocketMQ顺序消息和事务消息

2022-04-24 19:33:32 2266

原创 RocketMQ(三)RocketMQ消息发送

从零开始用Java实现RocketMQ消息发送

2022-04-22 16:31:06 5294

原创 RocketMQ(二)RocketMQ安装部署

注意:安装rocketmq需要提前安装好jdk和maven获取rocketmq wget https://archive.apache.org/dist/rocketmq/4.8.0/rocketmq-all-4.8.0-bin-release.zip

2022-04-22 10:35:11 2690 2

原创 RocketMQ(一)MQ介绍

消息队列(Message Queue,简称MQ),指保存消息的一个容器,本质是个队列。消息队列中间件是分布式系统中重要的组件(单机版也可用:单机版指的是在服务器上安装),主要解决应用耦合,异步消息,流量削锋等问题。实现高性能,高可用,可伸缩和最终一致性架构。使用较多的消息队列有ActiveMQ,RabbitMQ,ZeroMQ,Kafka,MetaMQ,RocketMQ。名词解释把数据放到(push)消息队列叫做生产者从消.

2022-04-21 15:31:03 3135

原创 搭建文件服务器 MinIO

分享一个使用springboot整合minio实现文件上传和下载的示例, 从零开始搭建自己的文件服务器

2022-03-19 19:06:40 6748

原创 hms项目Vue前台(四) nprogress进度条和vuex模块式开发

nprogress进度条加载的时候会有进度条显示,加载完毕没了安装命令cnpm install --save nprogress当请求时候显示,响应后不显示,所以可以在请求响应拦截器使用引入import nprogress from “nprogress”;import ‘nprogress/nprogress.css’ //样式必须引入使用nprogress .start(); //进度条开始nprogress .done(); // 进度条结束也可以在nprogr

2022-03-18 10:37:15 1177

原创 hms项目Vue前台(三) axios二次封装

为什么要进行二次封装?请求拦截器:可以在发请求之前处理一些业务响应拦截器:服务器返回数据后可以处理业务1 安装使用axios1.1 安装axioscnpm install --save axios1.2 src目录创建api/request.js在项目中一般有api文件夹[axios]import axios from "axios";// 1. 创建axios实例const requests = axios.create({ // 配置对象 // 请求路径都带/

2022-03-18 08:30:17 287

原创 SpringSecurity权限控制 鉴权

用户每次访问微服务的时候,先去oauth2.0服务登录,登录后再访问微服务网关,微服务网关将请求转发给其他微服务处理。这是前一篇的Oauth2 认证基本的数据库表user, role, user_role, menu, role_menu1 角色权限加载我们上一节中生成jwt ,第二部分通过Base64解密后:带着权限原来是在user_oauth微服务中UserDetailServiceImpl中写死的。所以我们可以修改这里面的代码设置权限。2 角色权限控制...

2022-03-15 20:02:38 1375

原创 Oauth2 认证

1 简介1.1 基本概念认证:用户访问系统资源时系统要求验证用户的身份信息,身份合法方可继续访问,常见的账号密码登录,验证码登录,指纹登陆授权:用户认证通过后去访问系统的资源,系统会判断用户是否拥有访问资源的权限单点登录 SSO:用户在一个系统中登录,其他任意受信任的系统都可以访问,例如在京东主页登陆了,京东其他页面就不需要再登录,这个功能就叫单点登录。第三方账号登录:第三方系统对用户认证通过1.2 认证解决方案1.2.1 单点登录技术方案分布式系统要实现单点登录,通常将认证系统独立抽

2022-03-15 16:01:22 8532

原创 webApi总结

webApi总结DOM1. DOM简介1.1 什么是DOM1.2 DOM树2 获取元素2.1 根据id获取2.2 根据标签名获取2.3 通过 HTML5 新增的方法获取2.4 获取特殊元素(body,html)3 事件基础3.1 事件三要素3.2 常见的鼠标事件4 操作元素4.1 改变元素内容4.2 修改元素属性4.3 表单元素的属性操作PC端网页特效事件高级移动网页特效BOM本地存储DOM1. DOM简介1.1 什么是DOM文档对象模型(Document Object Model,简称 DOM),

2022-03-05 09:30:33 696

原创 webApi(三)PC端网页特效

PC端网页特效1 元素偏移量 offset 系列1.1 offset概述使用 offset 系列相关属性可以动态的得到该元素的位置(偏移)、大小等获得元素距离带有定位父元素的位置, 如果父元素没有定位就返回距离body的距离获得元素自身的大小(宽度高度)1.2 offset使用(1) 距离带有定位父元素的位置偏移offsetLeftoffsetTop(2) 得到元素的大小(包含padding和margin)offsetWidthoffsetHeight(3) 得到带有定

2022-03-05 09:29:43 337

原创 webApi(二)事件高级

事件高级1 绑定和解绑事件1.1 绑定事件给元素添加事件,称为注册事件或者绑定事件。注册事件有两种方式:传统方式和方法监听注册方式(1)传统注册方式: 利用 on 开头的事件 onclick特点:注册事件唯一性,同一个元素同一个事件只能设置一个处理函数,最后注册的处理函数将会覆盖前面注册的处理函数(2)addEventListener 方法监听注册方式: addEventListener() 方法特点:同一个元素同一个事件可以注册多个监听器按注册顺序依次执行方法和参数eventTarget

2022-03-02 08:55:47 357

原创 webApi (一) DOM操作

webApi 之 DOM操作DOM1. DOM简介1.1 什么是DOM1.2 DOM树2 获取元素2.1 根据id获取2.2 根据标签名获取2.3 通过 HTML5 新增的方法获取2.4 获取特殊元素(body,html)3 事件基础3.1 事件三要素3.2 常见的鼠标事件4 操作元素4.1 改变元素内容4.2 修改元素属性4.3 表单元素的属性操作4.4 样式属性操作4.4.1 element.style 行内样式操作4.4.1 element.className 类名样式操作4.5 样式操作总结4

2022-03-01 08:44:41 720

原创 css高级技巧

css高级技巧1 元素隐藏与显示1.1 display: none1 元素隐藏与显示1.1 display: nonedisplay: none 元素隐藏display: block 除了转化为块级元素外,还有显示元素的意思特点:隐藏之后不再保留位置

2022-02-22 13:41:21 1076

原创 MySQL复习(二)MySQL基本数据类型

MySQL基本数据类型常用的字段类型大致可以分为数值类型、字符串类型、日期时间类型三大类1. 数值类型数值类型可以分为整型、浮点型、定点型三小类。1.1 整型(tiny:极小的, small:小的,medium:中等的,big:大的)tinyInt : 1字节smallInt: 2字节mediunInt : 3字节int: 4字节bigInt: 8字节注:int(M)中的 M 代表最大显示宽度,并不是说 int(1) 就不能存储数值10了,不管设定了显示宽度是多少个字符,int 都是占

2021-09-20 12:01:06 175

原创 MySQL复习(一)MySQL架构

MySQL架构MySQL采用的是C/S架构,我们在使用MySQL的时候,都是以客户端的身份,发送请求连接到运行服务端的MySQL守护进程,而MySQL服务器端则根据我们的请求进行处理并把处理后的结果返回给我们1. 连接管理器连接管理器的作用是管理和维持所有MySQL客户端的请求连接,当我们向MySQL发起请求时,连接管理器会负责创建连接并校验用户的权限。对于已经建立的连接,如果没有太久没有发送请求,连接管理器会自动断开连接,我们可以通过设置变量wait_timeout决定多久断开不活跃的连接。2

2021-09-20 11:13:33 116

原创 Netty学习笔记(2)ByteBuffer

1. 测试ByteBuffer1.1 依赖<dependencies> <dependency> <groupId>io.netty</groupId> <artifactId>netty-all</artifactId> <version>4.1.48.Final</version> </depen

2021-09-05 15:15:48 272

原创 Netty学习笔记(1)NIO三大组件

1. Channelchannel 有一点类似于 stream,它就是读写数据的双向通道,可以从 channel 将数据读入 buffer,也可以将 buffer 的数据写入 channel,而之前的 stream 要么是输入,要么是输出,channel 比 stream 更为底层常见的 Channel 有FileChannelDatagramChannelSocketChannelServerSocketChannel2. Bufferbuffer 用来缓冲读写数据,常见的 buff

2021-09-05 13:26:28 202

原创 Mybatis 动态Sql练习

建表CREATE TABLE `student` ( `s_id` varchar(20) NOT NULL, `s_name` varchar(20) NOT NULL DEFAULT '', `s_birth` varchar(20) NOT NULL DEFAULT '', `s_sex` varchar(10) NOT NULL DEFAULT '', PRIMARY KEY (`s_id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 CO

2021-07-14 15:47:07 332 1

原创 try-catch-finally面试题

try catch finally 执行顺序面试题总结执行顺序今天牛客网遇到这个题目,做对了,但是下面的评论却很值得看看public class TestTry { public int add(int a, int b){ try { return a + b; } catch (Exception e) { System.out.println("catch语句"); } finally {

2021-05-26 10:19:35 295

原创 正则表达式学习

今天在公司要用到正则表达式判断一些数据,就看了看博客,记录下学习到的正则表达式吧基本语法正则表达式全部符号解释例子1 手机号要求:(1)或(2)(1)是11位的手机号,其中必须是13 - 19开头(2)是以0开头,区号为3位或者4位,中间 - ,后面7位或者8位 (例如 027-1234567 , 0713-1234567)实现: (0\d{2,3}-\d{7,8})|(^1[3-9]\d{9})2 身份证要求:以非零数字开头, 末尾是小写字母x或者数字, 18 位实现:

2021-05-20 22:00:50 140

原创 springcloud(二) 微服务架构编码构建

微服务架构编码构建1 基础知识1.1 版本2 微服务cloud整体聚合父工程Project2.1 new project2.2 字符编码设置 utf-82.3 pom.xml2.4 父工程创建完成执行mvn:install将父工程发布到仓库方便子工程继承3 cloud-provider-payment8001微服务提供者支付Module模块3.1 建cloud-provider-payment80013.2 改POM3.3 写yml3.4 主启动3.5 数据库3.6 entity3.7 dao3.8 se

2021-05-03 17:24:07 1297 3

原创 springcloud (一)系统架构演变之路

演变过程从传统架构(单点应用)→分布式架构(以项目进行拆分)→SOA架构(面向服务架构)→微服务架构1 传统架构其实就是ssh架构或者ssm架构,属于单点应用,把整个开发业务模块都会在一个项目中开发,分为mvc架构,是模型(model)-视图(view)-控制器(controller)的缩写,这种架构包主要分为dao,controller,service,mapper,util一般只适合1个人或者小团队开发(小项目)一般只适合1个人或者小团队开发(小项目)缺点:耦合度太高,一旦,某个模块不可用,

2021-05-03 16:32:10 247

原创 Object方法

Java是一种面向对象编程语言(尽管不是纯粹的面向对象)。Java类层次结构的顶层是Object类,所有的其他类都隐式的继承于它。因此,所有的类也都从Object中继承了方法,其中最重要的几个方法如下表:方法描述protected Object clone()创建并返回当前对象的一份拷贝protected void finalize()该对象不再被引用时,调用finalize()boolean equals(Object obj)判断另外一个对象是否与当前对象相等

2021-03-19 16:13:34 137

原创 java关键字

final1. 数据声明数据为常量,可以是编译时常量,也可以是在运行时被初始化后不能被改变的常量。对于基本类型,final 使数值不变;对于引用类型,final 使引用不变,不能引用其它对象,但是被引用的对象本身是可以修改的final int x = 1;// x = 2; // cannot assign value to final variable 'x'final A y = new A();y.a = 1;2. 方法声明方法不能被子类重写。private 方法隐式地

2021-03-18 17:45:25 143

原创 第二章:物理层

简介物理层(Physical Layer)是计算机网络OSI模型中最低的一层。物理层规定:为传输数据所需要的物理链路创建、维持、拆除,而提供具有机械的,电子的,功能的和规范的特性。简单的说,物理层考虑的是怎样才能在连接各种计算机的传输媒体上传输数据比特流,而不是具体的传输媒体。如果您想要用尽量少的词来记住这个第一层,那就是“信号和介质”。传输媒介传输媒体也称为传输介质或传输媒介,分为两类:导引型传输媒体和非导引型传输媒体导引型传输媒体:双绞线同轴电缆光缆非导引型传输媒体:无线传输

2021-03-17 14:39:15 200

原创 java运算

参数传递Java中其实是值传递的,只不过对于对象参数,值的内容是对象的引用值传递(pass by value)是指在调用函数时将实际参数复制一份传递到函数中,这样在函数中如果对参数进行修改,将不会影响到实际参数。引用传递(pass by reference)是指在调用函数时将实际参数的地址直接传递到函数中,那么在函数中对参数所进行的修改,将影响到实际参数。1. 基本数据类型 @Test public void test01(){ int x = 3;

2021-03-17 13:39:20 273

软件开发文档模板.rar

软件开发模板,从概要设计, 需求分析, 数据库设计,测试等方面

2021-11-20

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除