- 博客(136)
- 收藏
- 关注
原创 Java线程池详解:Executor框架、常见线程池与实战
本文先从直接创建线程的局限入手,认识Executor框架,再集中通过演示核心线程 → 排队 → 扩容 → 拒绝的完整流程,并介绍队列、拒绝策略、任务异常、线程池关闭和监控。最后通过较短案例理解与的适用场景。最重要的不是背下七个参数,而是能够根据任务实际执行情况解释线程池为什么排队、为什么扩容,以及为什么拒绝,并通过实验验证。后续《Java并发集合》及《JUC同步工具与线程协作》专题,再分别深入Semaphore等内容。
2026-10-16 20:46:06
57
原创 mysql8基础(十六)InnoDB事务原理与MVCC
MVCC 全称Multi-Version Concurrency Control,多版本并发控制。它的核心思想不是简单地“给所有读操作加锁”,而是:一条记录保留多个可重建的历史版本,不同事务根据自己的可见性规则读取适合自己的版本。这样可以让大量“读”和“写”同时进行,提高数据库并发能力。InnoDB 的普通一致性读主要依靠隐藏事务字段 + Undo版本链 + Read View实现 MVCC。Buffer Pool 中已经被修改、但最新内容还没有完全写回磁盘数据文件的页称为脏页。
2026-09-23 18:01:17
471
原创 mysql8基础(十五)主从复制
MySQL 复制(Replication)是指将一个 MySQL 实例中的数据变更同步到一个或多个其他 MySQL 实例。MySQL 8 官方文档中通常将提供数据的一端称为Source(源库),接收数据的一端称为Replica(副本库);旧资料中常见的 Master / Slave 与之对应。复制的核心依赖。Source 将数据库中的数据变更记录到 Binlog,Replica 主动连接 Source 并读取这些日志事件,再写入本地的Relay Log(中继日志)
2026-09-16 22:37:59
312
原创 mysql8基础(十四)SQL技巧、常用工具与日志
常用SQL技巧:SQL编写顺序select distinct ...from 左表join 右表on 连接条件where...group by...having...order by...limit...SQL执行顺序from 左表on 连接条件join 右表where...group by...having...select distinct...order by...limit...正则表达式:SQL常用函数运算函数:字符串函数:日期函数
2026-09-11 18:24:20
166
原创 Spring Cloud 学习与实践(16):Elasticsearch 商品搜索、中文分词与索引一致性
当前 已经具备:商品数据目前保存在 MySQL:如果只按主键查询商品,MySQL 足够完成:但当需求变成:继续只用:会逐渐遇到几个问题:本章最终建立:同时解决:2、先理解 Elasticsearch 的核心概念2.1 Elasticsearch 是什么Elasticsearch 是一个面向搜索和分析的分布式文档数据库。本章最关心的能力是:它不是为了替代当前 MySQL,而是承担不同职责:本章始终坚持:因此:不能简单处理为:正确方向是:2.2 Elasticsearch 与
2026-07-24 19:45:00
895
原创 Spring Cloud 学习与实践(15):使用 TraceId 与 MDC 串联微服务日志
单服务 MDC↓Gateway 统一生成 TraceId↓所有业务服务接收↓OpenFeign 继续透传↓CircuitBreaker 线程池传播↓@Async 线程池传播↓失败链路验证Gateway 负责确定入口 TraceId请求头负责跨服务传递MDC 负责进入日志Feign 拦截器负责新的 HTTP 请求ExecutorService 和 TaskDecorator 负责线程切换finally 负责防止上下文串号接口请求成功不代表日志链路一定完整。
2026-07-12 22:48:52
504
原创 Spring Cloud 学习与实践(14):集成 Knife4j,实现 JWT 调试与 Gateway 文档聚合
单服务 Knife4j↓OpenAPI 3 注解↓多服务独立文档↓Gateway 调试↓↓Gateway 聚合↓生产关闭边界springdoc 负责生成文档Knife4j 负责展示与调试Gateway 负责聚合与鉴权OpenAPI Security 负责描述认证JwtAuthGlobalFilter 负责真正校验 JWT文档页面看起来正确不代表真实请求一定正确请求地址请求头状态码实际响应。
2026-07-11 15:41:56
448
原创 Spring Cloud 学习与实践(13):使用 Seata 解决分布式事务问题
第 12 章我们完成了 RabbitMQ 可靠消息链路:RabbitMQ 解决的是:但是当前下单流程里还有一个更靠前的问题:如果商品服务已经扣减库存,而订单服务随后保存失败,会发生什么?当前两个服务各自只有本地事务:所以原始结果可能是:第 13 章就是围绕这个问题,引入 Seata AT 模式,让订单和库存能够作为一个全局事务整体提交或整体回滚。本章主线是:2、本章环境与涉及模块本章继续基于前面章节的 项目。本章主要修改两个服务:本章不需要让所有服务都接入 Seata:Spring 的:只
2026-07-09 12:46:34
351
原创 Spring Cloud 学习与实践(12):RabbitMQ 异步消息、死信队列、手动 ACK 与可靠消息补偿
第 11 章我们把 Redis 接入到了 ,解决了商品详情接口反复查询 MySQL 的问题,也顺手演练了缓存穿透、缓存击穿、缓存雪崩和缓存一致性。这一章开始引入 RabbitMQ。不过这一章不只是演示“发一条消息、收一条消息”。如果只做到这一步,RabbitMQ 学起来会很轻,但真正写项目时还是不知道怎么处理异常。这一章继续沿用前面的订单链路,从 创建订单这个场景出发,一步一步解决这些问题:这一章最终会形成一条比较完整的可靠消息链路:2、本章环境与项目现状2.1 当前项目版本本章继续使用前面章节的
2026-06-30 17:49:14
717
原创 Spring Cloud 学习与实践(11):Redis 缓存、穿透、击穿、雪崩与数据一致性
商品详情每次都查 MySQL,有没有必要?然后一步一步走到了完整缓存链路。
2026-06-25 23:09:58
496
原创 Spring Cloud 学习与实践(10):Sentinel 限流、熔断与降级
微服务之间往往是链式调用。↓cloud-user↓如果响应非常慢,中等待商品服务返回的线程就会被占住。当请求越来越多时,中越来越多线程被阻塞。cloud-product 慢↓cloud-order 线程堆积↓cloud-order 也变慢或不可用↓Gateway 请求堆积↓整个链路被拖垮这就是微服务中常说的服务雪崩。1. 不是项目统一 Result 格式2. 前端不好统一处理3. 用户看不懂英文提示4. 不方便接口文档描述。
2026-06-24 18:57:30
568
原创 Spring Cloud 学习与实践(9):Gateway + JWT 统一鉴权
第 8 章已经完成了 Gateway 统一入口:但是现在所有业务接口只要知道地址就能访问,例如:这显然不符合真实项目要求。本章要完成的目标是:本章最终请求链路如下:2、为什么需要统一鉴权2.1 当前项目缺少什么能力在没有统一鉴权之前,业务接口存在几个问题。第一,任何人都能访问业务接口。第二,订单服务仍然信任客户端传入的 。这非常危险。客户端传什么用户 ID,服务端就用什么用户 ID,相当于把身份决定权交给了客户端。第三,每个服务如果都自己写鉴权逻辑,会导致重复代码。这样会带来:因此,更
2026-06-14 23:48:25
285
原创 如何解决codex频繁重连问题
C:\Users\你的用户名\.codex\.envHTTP_PROXY="http://127.0.0.1:<你的代理端口>"HTTPS_PROXY="http://127.0.0.1:<你的代理端口>"保存后,彻底退出并重新打开 Codex。如果你的问题来自 Codex 没有稳定使用本地代理端口,这个方法通常比单纯依赖系统代理更直接,也比一上来开启 TUN 模式更有针对性。
2026-06-11 18:16:12
7624
原创 Spring Cloud 学习与实践(8):Spring Cloud Gateway 统一入口、路由转发与双重跨域故障演练
协议域名端口只要有一项不同,就属于不同 Origin。前端页面:Gateway:端口不同,所以属于跨域。跨域主要是浏览器安全策略IDEA HTTP Client、Postman 和后端代码通常不会受浏览器 CORS 限制。gateway.http 能调用成功浏览器页面一定能成功调用OPTIONS是否允许当前来源?是否允许 POST?是否允许 Content-Type?是否允许自定义请求头?预检请求只有预检成功,浏览器才会发送正式 POST 请求。Gateway 启动↓。
2026-06-10 18:00:44
512
原创 Spring Cloud 学习与实践(7):OpenFeign 服务调用
前六章已经完成:本章解决:主要完成:二、为什么需要 OpenFeign2.1 第 4 章遗留了什么问题第 4 章的订单服务只做本地落库:这种设计存在明显问题:2.2 微服务拆分后的正确调用方式微服务拆分后,订单服务不能直接访问用户服务和商品服务内部数据库。正确流程应该是:2.3 OpenFeign 解决什么问题OpenFeign 将远程 HTTP 调用封装成 Java 接口调用。一句话总结:三、cloud-api、XxxApi 与 XxxClient3.1 正常调用链全景图如
2026-06-08 17:00:25
217
原创 Spring Cloud 学习与实践(6):Nacos 配置中心
上一章已经完成 Nacos 注册中心接入:本章继续使用 Nacos,但关注另一个能力:本章主要完成:2. 注册中心与配置中心的区别Nacos 同时提供:但两者解决的问题不同。配置中心解决的问题一句话总结:3. 为什么需要配置中心当前项目中,每个服务都有本地配置文件:如果未来有:那么修改一个业务开关时,如果仍然逐个修改本地文件,就会面临:配置中心的目标是:4. 本章版本说明当前项目统一版本:本章继续使用传统方式:较新的 Spring Cloud 生态逐步推荐:但本课程
2026-06-05 17:44:16
236
原创 Spring Cloud 学习与实践(5):Nacos 注册中心接入
前四章已经完成:目前三个业务服务虽然都可以独立运行,但它们彼此之间还没有建立服务发现机制:本章开始引入 Spring Cloud Alibaba 的第一个核心组件:主要完成:本章暂时不接入:这些能力将在后续章节中逐步加入。假设订单服务需要调用商品服务。最简单的写法是将商品服务地址写死:如果系统始终只有一个商品服务实例,这种方式暂时可以工作。但真实项目中,商品服务可能部署多个实例:这些实例还可能动态变化:如果每个调用方都手动维护地址列表,维护成本会越来越高。因此需要注册中心:一句话总结:
2026-06-04 18:09:49
20
原创 Spring Cloud 学习与实践(4):订单服务开发
本章订单服务完全本地落库故意不校验用户、商品、价格,方便演练后续服务间调用为第 5~7 章引出 OpenFeign、远程用户校验、商品校验及库存扣减逻辑做准备。
2026-06-02 18:16:25
178
原创 Spring Cloud 学习与实践(3):商品服务开发与并发超卖
现象:商品初始库存为 1。JMeter 使用 20 个线程并发购买。朴素版库存扣减出现多个成功请求。数据库最终库存仍然为 0。排查:多个线程同时读取到旧库存 stock=1。多个线程都通过 Java 内存中的库存判断。多个线程都将库存更新为 0。原因:SELECT 查询和 UPDATE 更新是两个独立步骤。查询与更新之间存在并发竞争窗口。@Transactional 不能自动解决此类并发竞争。修复:将库存判断和库存扣减写入同一条 UPDATE SQL。
2026-06-02 17:13:43
19
原创 Spring Cloud 学习与实践(2):用户服务开发
现象:分页接口传入 size=2,却返回全部 5 条数据。total 和 pages 均为 0。排查:Controller 已创建 Page 对象,但项目中没有分页拦截器。原因:Page 只保存分页参数。PaginationInnerInterceptor 才负责改写 SQL 和执行总数统计。修复:创建 MyBatisPlusConfig。注册 MybatisPlusInterceptor。添加 PaginationInnerInterceptor(DbType.MYSQL)。
2026-06-01 18:53:02
16
原创 Spring Cloud 学习与实践(1):项目骨架搭建
本章介绍了如何搭建Spring Cloud Alibaba微服务项目的骨架结构。主要内容包括: 创建Maven父工程cloud-demo,统一管理7个子模块:公共模块(cloud-common)、API契约(cloud-api)、网关(cloud-gateway)、认证(cloud-auth)以及用户、商品、订单服务模块。 通过父工程的dependencyManagement统一管理JDK 17、Spring Boot 2.7.18、Spring Cloud 2021.0.8、Spring Cloud Al
2026-06-01 17:25:20
32
原创 MySQL 表大小、行数及碎片空间统计
直观,适合查看单表信息:可用于 SQL 聚合统计关键指标:指标说明TABLE_ROWS表行数数据大小索引大小DATA_FREE碎片空间常用 SQL:统计行数、碎片空间、数据库容量、碎片表定位运维建议:定期巡检、发现碎片执行小技巧:可以将这些 SQL 做成每日巡检脚本,自动生成容量报表,便于容量规划与性能优化。
2026-04-02 16:59:33
329
原创 systemd服务启动失败排查:SELinux权限拦截的解决方案
场景推荐做法快速排查是否 SELinux 问题临时放行测试多个服务同时需要放行自动生成规则自定义安装路径的服务restorecon打标签不想深入研究 SELinux改为permissive模式(比 disabled 更安全)生产环境最佳实践修复标签,保持enforcingSELinux 的本质是给每个文件和进程打"身份标签",只允许匹配的标签之间交互。服务装在非标准路径时,文件没有正确的标签,SELinux 就会拒绝访问。理解这一点,遇到类似问题就能快速定位。
2026-03-19 17:38:35
43
原创 WinSW XML 配置参数介绍
WinSW(Windows Service Wrapper)是一个开源工具,用于将任意可执行文件(exe、jar、bat 等)包装成 Windows 服务。配置文件为 XML 格式(通常命名为。以下是 WinSW 3.x 版本的完整参数列表,按功能分类整理。根节点下(注意:不是。
2026-01-16 11:08:08
860
原创 掌握 systemd:从入门到生产级配置
统一管理:服务、日志、定时任务都整合了\安全性更强依赖清晰可观测性强扩展能力强(socket/path/timer 激活)一句话总结:systemd 是现代 Linux 的服务大脑,是传统 SysV init 的全面升级版。
2026-01-14 09:53:24
490
原创 journalctl 与 tail 使用对比
摘要: 本文对比了Linux系统日志工具journalctl和tail -f的使用场景与最佳实践。journalctl适用于systemd系统服务日志(二进制格式),支持结构化查询和实时监控,适合系统级故障排查;tail -f直接读取文本日志文件(如SpringBoot应用日志),操作简单但过滤能力弱。关键区别在于日志来源(systemd输出 vs 文件)、格式(二进制 vs 文本)及适用场景(系统服务 vs 应用日志)。推荐组合使用:journalctl监控服务状态,tail -f查看业务日志。文中还提供
2026-01-09 17:21:12
868
原创 web服务常见漏洞(nginx)
工具验证: 使用 Qualys SSLLabs()和curl -I确认协议、套件和头信息。结果: 所有漏洞(TLS 1.0、RSA密钥交换、信息泄露、安全头缺失)均通过配置优化解决。服务器安全性显著提升。注意事项: 升级后测试客户端兼容性(如旧浏览器),并定期更新配置。通过上述步骤,您可以有效修复 Web 服务器的常见安全漏洞。Nginx配置优化是关键,建议结合定期安全扫描(如Nessus)确保系统持续安全。如有疑问,欢迎留言讨论!
2025-08-28 10:40:06
98
原创 nginx和openresty默认模块对比
OpenResty 是基于 Nginx 的高性能 Web 平台,集成了 LuaJIT,提供了许多额外的模块。以下是 OpenResty 中的模块功能详解。
2025-04-29 14:23:46
1246
原创 飞凌嵌入式系统安装Java环境
mysql安装也一样,但是因为没有groupadd命令,不能执行。,执行以下命令,注意要先检查下UID 和 GID是否存在↓。也不行的,Buildroot 默认没有 systemd↓。注意要下载或从其它arm架构系统获取这两个文件放入。因为是精简的系统,没有。文件,执行初始化会报错。
2025-04-27 17:58:30
322
原创 centos下OpenSSH升级
如果我们在安装OPENSSH途中突然断网断电,导致无法通过ssh连接是件很可怕的事情。所以我们有必要先留条后路,也就是安装telnet服务端。将PermitRootLogin前的注释去掉,也可以根据自身需要去掉PubkeyAuthentication的注释↓。出现上述问题是缺失Perl模块,安装缺失模块后再次安装↓。升级可以解决绝大多数漏洞,现在我们得升到最新的9.8。错误,请安装PAM 开发包↓。目前最新版本9.9了,我还是下载9.8↓。等文件无权限,得执行授权↓。没提示也可以查看下权限↓。
2024-09-26 10:47:59
245
原创 Spring Boot 如何保证在终止前执行某项任务
我们在关闭某个程序的时候,可能有些扫尾的工作必须要做,比方说要通知其它程序本程序下线了,这时候我们就得考虑在程序停止的时候,先执行完这项任务才完全停止程序。
2024-08-28 16:55:57
273
原创 nvm安装与使用
Node Version Manager (nvm) 是Node.js版本管理工具,特别是对于那些需要在同一台机器上管理多个 Node.js 版本的开发者。它允许你轻松地安装、卸载、切换 Node.js 的不同版本,以适应不同项目的需求。
2024-08-20 21:28:02
353
原创 No usages found in Current FilePress Ctrl+Alt+F7 again to search解决办法
使用IDEA时,点击类中的某个字段突然无法跳转到使用处——也就是无法使用ctrl+click查看字段的使用情况。网上很多都建议清缓存、重新导入、重新编译等来解决,但是本人都试过却无效。本人最终是通过设置Find Usages解决的,在此记录,以供参考。首先点击选中一个类,然后编辑—>查找用法—>查找用法设置。
2024-03-04 13:33:00
231
空空如也
javacv视频裸流转推
2023-07-16
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅