- 博客(42)
- 收藏
- 关注
原创 SpringBoot+Redis集群构建分布式“高”并发扣库存
学习技术是枯燥的,更是有趣和满心欢喜的。1,前言首先为什么【高】加了双引号?因为我没有多节点(3个以上)或者上云测试过,也没有部署前端Nginx+Tomcat集群,算不上真正完整的能抗住高并发的系统,文章内容只给大家提供一个基本实现和部署细节,大家可以指摘出其中的问题,或有更好的建议意见也欢迎告诉我。2,CentOS部署Redis主从集群概要:5个CentOS虚拟机节点,分别部署在两台物理主机的虚拟机上。IP地址为:192.168.2.5/192.168.2.6/192.168.2.8/192
2021-02-05 14:42:52
816
原创 分库分表场景下如何设计主键 ID 以保证高可用和高性能
通过将分片信息(dbIndex + tableIndex)嵌入 Snowflake ID✅ 全局唯一 ID;✅ 无中心化高性能生成;✅仅凭 ID 即可定位数据所在库表,无需额外路由表;✅ 完美适配分库分表架构。这种设计被广泛应用于高并发系统(如电商订单、支付流水),是工业级分库分表 ID 方案的最佳实践之一。
2025-12-17 11:55:50
332
1
原创 雪花算法之时钟回拨的解决方案总结
本文总结了雪花算法(Snowflake)在时钟回拨场景下的解决方案。雪花算法依赖系统时钟单调递增,当时钟回拨时可能导致ID重复。主要解决方案包括:1)等待时钟追回(最常用但会阻塞);2)扩展时间戳位+回拨容忍窗口;3)使用逻辑时钟替代系统时钟;4)引入外部高可靠时间源;5)回退到备用ID策略。工业实践中,美团Leaf采用逻辑时钟+小回拨等待,百度UidGenerator使用RingBuffer预分配。最佳实践建议根据业务场景选择合适方案,并加强NTP配置、禁用人工改时等运维预防措施。
2025-12-17 10:48:34
904
2
原创 【生产级别可用】自定义异步处理框架 async-ak-starter
async-ak-starter框架核心组件包括可配置线程池管理、全局异步异常处理器、事务感知任务执行器和返回值包装处理器。主要功能特性有:线程池参数可配置化、支持异步任务事务管理、全局异常捕获、CompletableFuture返回值支持、线程上下文传递和线程池监控。通过整合Spring Boot基础组件、AOP支持、事务管理和监控功能。配置类AsyncExecutorProperties提供了线程池参数的可配置选项,自动配置类AsyncAutoConfiguration实现了框架的自动装配。
2025-06-26 17:04:53
945
原创 无效的目标发行版:11
无效的目标发行版:11=> 按照网上的各种配置完成后仍报该错误的,请检查Maven 运行窗口的Profiles标签下对应的 JDK 版本是否勾选或者反勾选1,把不用的或者删除的 JDK 去掉勾选2,把需要的 JDK 勾选住=> 按照网上的各种配置完成后仍报该错误的,请检查Maven 运行窗口的Profiles标签下对应的 JDK 版本是否勾选或者反勾选1,把不用的或者删除的 JDK 去掉勾选2,把需要的 JDK 勾选住
2024-06-17 12:36:49
579
原创 CentOS7设置 redis 开机自启动
如果你傲娇,不想拷贝!就一定要睁大你迷人的小眼睛,千万别敲错!是自己redis配置文件所在的系统本地目录。
2023-11-18 20:36:04
1245
原创 MybatisPlus 中if标签传入0判断失效的场合及解决办法
原因:是传入的Integer类型的0会变成【‘’】,造成判断失效。正常传入0 话应该检索出20条数据:如下。
2023-04-16 13:01:01
1256
1
原创 push to origin/master was rejected 的应对办法
push to origin/master was rejected 错误
2022-11-09 13:12:26
445
原创 MSBUILD : error MSB3428: 未能加载 Visual C++ 组件“VCBuild.exe”。
MSBUILD : error MSB3428: 未能加载 Visual C++ 组件“VCBuild.exe”。大家在npm run dev 的时候会遇到标题所示的错误,以下是解决方法:首先:npm install --global --production windows-build-toolsPS C:\Users\leo> npm install --global --production windows-build-toolsnpm WARN deprecated windows
2022-05-27 23:13:43
1225
原创 【算法】动态规划之连续子串
环绕字符串中唯一的子字符串把字符串 s 看作是 “abcdefghijklmnopqrstuvwxyz” 的无限环绕字符串,所以 s 看起来是这样的:“…zabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcd…” .现在给定另一个字符串 p 。返回 s 中 唯一 的 p 的 非空子串 的数量 。public static int findSubstringInWraproundString(String p) { int[] dp
2022-05-25 22:00:46
500
原创 An import path cannot end with a ‘.ts’ extension. Consider importing ‘@/*.js’ instead.
学习前端vue+ts构建项目的时候总会遇到以下的问题:An import path cannot end with a ‘.ts’ extension. Consider importing ‘@/core/services/JwtService.js’ instead.网上很多文章会让这么改:# 在tsconfig.json中加入以下配置"baseUrl": ".","paths": { "@/*": [ "src/*" ]}在webpack的配置文件中加入"includ
2022-05-18 01:05:24
10285
9
原创 关于zookeeper启动不了,需要配置admin.serverPort的记录
最近学习的微服务需要用到zookeeper,索性今天重新安装了zookeeper-3.8.0想再找找感觉。以前3.6.X版本无脑安装完成,设定好zoo.cfg就可启动,谁知道3.8.0不能无脑了,需要脑子拿出来活动一下了。zookeeper-3.8.0安装完成一直启动不了:[root@localhost zookeeper-3.8.0]# ./bin/zkServer.sh statusZooKeeper JMX enabled by defaultUsing config: /usr/local
2022-05-15 00:26:13
4491
转载 LeetCode 691题 【贴纸拼词】
来源:力扣(LeetCode)链接:https://leetcode.cn/problems/stickers-to-spell-word著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。我们有 n 种不同的贴纸。每个贴纸上都有一个小写的英文单词。您想要拼写出给定的字符串 target ,方法是从收集的贴纸中切割单个字母并重新排列它们。如果你愿意,你可以多次使用每个贴纸,每个贴纸的数量是无限的。返回你需要拼出 target 的最小贴纸数量。如果任务不可能,则返回 -1 。注.
2022-05-14 23:55:56
307
1
原创 Mybatis缓存学习笔记
Mybatis缓存学习笔记1,一级缓存1.1)默认开启;1.2)使用HashMap存储;1.3)一级缓存只是相对于同一个SqlSession;1.3.1)SqlSession,Executor,PerpetualCache三者的关系:1.4)核心要点:在参数和SQL完全一样的情况下,我们使用同一个SqlSession对象调用一个Mapper方法,往往只执行一次SQL,因为使用SelSession第一次查询后,MyBatis会将其放在缓存中,以后再查询的时候,如果没有声明需要刷新或者没有执行更新操作,并且缓存
2022-04-20 17:02:38
511
原创 Java8 日期函数的新特性以及Mysql数据库在存储日期类字段时数据类型的选择对比
Java8 日期函数的新特性以及Mysql数据库在存储日期类字段时数据类型的选择对比代码执行结果代码/** * Java Date 类型总结 * 如果使用 datetime 需要 8 个字节。 * 如果使用 timestamp 需要 4 个字节。 * * MySQL5.6.4 之前,TIMESTAMEP 固定占用 4 个字节,从 MySQL5.6.4 开始,依据毫秒的精度,TIMESTAMEP 占用的字节数介于 4 到 7 之间。 * * DATETIME 的存储范围介于 1000-01-
2022-04-15 16:53:07
1148
1
原创 看到哪学到哪系列之Springboot整合Thymeleaf遇到的问题
Springboot整合Thymeleaf遇到的问题一,问题1,背景2,描述3,原因4,正确的做法一,问题1,背景@Controllerpublic class HomeController { @Autowired private IndexService indexService; @GetMapping({"/ ","/home"}) public String showIndex(){ return "calculation"; }
2021-09-24 17:01:49
253
1
原创 看到哪学到哪系列之Java集合框架
为什么要重写某些类的hashCode和equals两个方法一,回答标题的问题二,小常识一,回答标题的问题Person对象public class Person { private String userName; private int age; public Person(String userName, int age) { this.userName = userName; this.age = age; } publi
2021-06-07 16:44:54
317
原创 SpringBoot配置Druid数据库连接池
1,首先POM文件中加入以下Dependence:<dependency> <groupId>com.alibaba</groupId> <artifactId>druid-spring-boot-starter</artifactId> <version>1.2.4</version></dependency>2,其次application.yml文件中加入以下配置:datasour
2021-05-23 23:07:27
754
转载 SpringBoot+Shiro学习之数据库动态权限管理和Redis缓存
原文转自:死鬼去哪里了发现问题,需找解决思路。之前我们整合Shiro,完成了登录认证和权限管理的实现,登录认证没什么说的,需要实现AuthorizingRealm中的doGetAuthenticationInfo方法进行认证,但是我们在实现doGetAuthorizationInfo权限控制这个方法的时候发现以下两个问题:第一个问题:我们在ShiroConfig中配置链接权限的时候,每次只要有一个新的链接,或则权限需要改动,都要在ShiroConfig.java中进行权限的修改。而且改动后还需要重新
2021-05-17 23:33:03
376
转载 Spring Boot 如何解决项目启动时初始化资源
原文转载自:纯洁的微笑在我们实际工作中,总会遇到这样需求,在项目启动的时候需要做一些初始化的操作,比如初始化线程池,提前加载好加密证书等。今天就给大家介绍一个 Spring Boot 神器,专门帮助大家解决项目启动初始化资源操作。这个神器就是 CommandLineRunner,CommandLineRunner 接口的 Component 会在所有 Spring Beans 都初始化之后,SpringApplication.run() 之前执行,非常适合在应用程序启动之初进行一些数据初始化的工作。接
2021-05-17 22:24:33
285
原创 MySQL中金额存储用DECIMAL类型还是BIGINT类型
MySQL 4.1以前的版本使用浮点运算实现DECIMAL的计算,这样会因为精度损失导致结果很奇怪。MySQL 5.0之后DECIMAL类型支持精确计算了。但是,归根结底,DECIMAL类型只是一个存储类型。因为CPU是不支持DECIMAL的直接计算,CPU本身是直接支持原生浮点计算,浮点计算的速度更快。但在MySQL5.0以后的版本中MySQL服务器本身实现了DECIMAL的高精度计算。MySQL 5.0以后的版本中,是将数字打包保存到一个二进制字符串中(每4个字节保存9个数字)例如:DEC
2021-04-25 21:31:16
8486
1
原创 【2021】JAVA基础总结
0,零碎基础知识 1),二元运算符的运算规则: 1,如果两个操作数有一个为long,那结果也为long; 2,没有long时,结果为int。即使操作数全为short,byte结果也为int; 3,如果两个操作数有一个为double,则结果为double; 4,只有两个操作数都是float,则结果才为float; 2),取模运算: 1,其操作数可以为浮点数,一般使用整数,结果是“余数”,“余数”符号和左边操作数相同; 如:7%3=11,Java中浮点数是不精确的,所
2021-03-11 21:08:11
241
原创 jmeter5+版本 安装没有logkit-2.0.jar
jmeter 5+版本没有logkit-2.0.jar,所以在配置环境变量的时候可以忽略不用设置,网上很多版本的帖子都是贴来贴去的,没有一个明确的说明,在此记录一下!
2021-01-20 15:41:11
3298
2
转载 java.lang.UnsupportedOperationException异常的原因和解决办法
java.lang.UnsupportedOperationException异常的原因和解决办法在项目中对List进行操作时报错java.lang.UnsupportedOperationException,后来发现操作的List是由数组转换而成的,通过看源码发现问题如下:代码块:private String[] strList = {"1","2","3","4","5","6","7","8","9","10","11","12","13"}; @Override public void
2020-10-20 12:22:24
3095
原创 关于A*算法的研究总结
关于A*算法的研究总结重要公式:f(n)=g(n)+h(n)f(n)=g(n)+h(n)f(n)=g(n)+h(n)其中:f(n)是节点n的综合优先级。当我们选择下一个要遍历的节点时,我们总会选取综合优先级最高(值最小)的节点。g(n) 是节点n距离起点的代价。h(n)是节点n距离终点的预计代价,这也就是A*算法的启发函数。关于启发函数我们在下面详细讲解。A*算法在运算过程中,每次从优先队列中选取f(n)值最小(优先级最高)的节点作为下一个待遍历的节点。另外,A*算法使用两个集合来表示待遍
2020-05-27 15:25:37
2215
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅