自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

G探险者的博客

不积跬步,无以至千里

  • 博客(157)
  • 资源 (1)
  • 问答 (2)
  • 收藏
  • 关注

原创 DDD开发模式说明

领域核心建模应用层编排基础设施隔离适配器/防腐层思想API层负责接入Application层负责编排Domain层负责业务规则Infra层负责技术实现对于复杂业务系统,这种模式比传统三层架构更适合持续演进,也更有利于团队协作和代码治理。

2026-03-16 16:03:38 316

原创 架构演进之 DDD:从 CRUD 到领域驱动设计

让软件系统真正反映业务世界。可理解性可维护性可演进性这正是领域驱动设计的核心价值。

2026-03-16 16:02:45 335

原创 Codex CLI 报 `stream disconnected before completion` 排障文档

Codex CLI 的只是表象,底层根因是 Windows 根证书库异常导致 HTTPS 证书链校验失败;更新根证书后,TLS 信任恢复,Codex CLI 也随之恢复正常。Plus 是否生效Codex 是否没额度指令是否写错本机是否能正常完成 HTTPS/TLS 握手系统证书库是否可信浏览器与命令行环境是否存在差异是否有安全软件、代理、抓包工具影响系统证书链。

2026-03-09 20:56:58 3419

原创 从安装到上手:Codex CLI 实战指南(Windows + Node + AI Agent)

Codex CLI 是 OpenAI 推出的命令行 AI 编程助手在终端运行能读取当前项目代码可以修改文件可以执行命令(如测试、构建)支持自动化代码任务codex为这个 service 写单元测试阅读代码生成 test运行测试修复失败可以在你本地代码库工作的 AI Agent你负责方向AI 负责体力。

2026-03-06 10:25:07 580

原创 聊一聊 CLI:为什么真正的工程能力,都藏在命令行里?

CLI 不是一种古老的操作方式。它是一种工程哲学。当你习惯用命令构建系统,而不是用鼠标操作系统时——你已经从“使用工具的人”,变成了“构建系统的人”。

2026-02-15 01:07:25 403

原创 国产化建设:从“可替代”走向“可控可演进”

很多人对“国产化”的理解停留在:把国外软件换成国产软件把国外服务器换成国产服务器把国外数据库换成国产数据库但真正的国产化国产化不是一场简单的“技术替换工程”,而是一场体系工程、生态工程、战略工程。对国家而言:是安全问题对企业而言:是生存问题对个人而言(程序员):是能力升级问题国产化的本质不是“国产”,而是“自主可控”国产化的终点不是“替代”,而是“生态”

2026-01-19 09:22:24 671

原创 为什么 VARCHAR(1000) 存不了 1000 个汉字? —— 详解主流数据库“字段长度”的底层差异

你说多少就是多少。Oracle / 达梦:你说多少,还要看看它每个字“有多重”(占多少字节)。

2025-11-20 23:37:32 1160

原创 为何一个系统上线要经过N轮测试?带你看懂企业级发布体系

越接近生产,越严格;越早发现问题,越便宜。这不仅是一套流程,更是一种质量保证体系,通过逐层过滤,确保最终上线系统的安全、稳定、可靠。

2025-10-19 00:20:10 921

原创 云原生时代下的 JVM 内存管理:为什么你的服务不会“自动扩容”?

项目旧版默认 (JDK8-)容器感知 (JDK10+)云环境推荐配置-Xms物理内存 1/64容器内存 1/64-Xmx物理内存 1/4容器内存 1/4自动扩容❌ 否❌ 否通过 HPA 实现 Pod 扩容适用场景本地部署容器环境华为云 CCE、K8s、Spring Boot云能自动扩“Pod”,但 JVM 不能自动扩“堆”。弹性伸缩的核心逻辑在于平台层(K8s),而 JVM 的堆空间大小仍然取决于启动时的参数配置。

2025-10-17 17:17:38 613

原创 滴滴P0级故障背后:互联网公司是如何分级处理线上事故的

等级核心描述关键词P0全国挂了“救火”P1核心功能出问题“紧急修”P2局部问题“当天搞定”P3小问题“排期修”P4优化建议“后续再说”

2025-10-16 00:21:03 1178

原创 从 Tomcat 与 Jetty 的对比,聊聊影响一个服务并发能力的关键因素

维度TomcatJetty适用场景标准Web应用(同步请求为主)高并发、长连接、WebSocket默认配置守旧(maxThreads=200)灵活、事件驱动可维护性Spring Boot默认支持最佳可扩展性强(嵌入式更灵活)性能瓶颈线程阻塞、队列等待网络带宽、Selector数量调优重点线程池与连接限制Bean理论并发上限1万左右2万~3万以上(视系统资源)Tomcat 胜在稳定与生态;Jetty 胜在轻量与高并发。

2025-10-15 23:58:42 609

原创 深入理解 KeepAlive:从 TCP 到连接池再到线程池的多层语义解析

大家好,我是G探险者!在日常开发中, 是一个常见但又极易混淆的参数。你可能在 Socket、HTTP 连接池、数据库连接池、甚至 线程池 中都见过它。然而,它们虽然同名,却处在不同的抽象层次,语义完全不同。本文将带你系统梳理 在各个层面的真正含义,从底层 TCP 到应用层连接池,再到 JVM 线程池,一次彻底搞清楚它到底“保”的是什么“活”。最底层的 来自 TCP 协议栈,它的本质是一个心跳机制。在一条 TCP 连接长时间没有数据传输时,系统可能认为它已经“闲置”。为了避免连接被 NAT、防火墙

2025-10-10 15:15:27 773

原创 常见线程池的创建方式及应用场景

在实际生产环境中,更推荐直接使用来精细化控制线程池。4, // 核心线程数10, // 最大线程数60, TimeUnit.SECONDS, // 空闲线程存活时间new ArrayBlockingQueue<>(100), // 有界任务队列Executors.defaultThreadFactory(), // 线程工厂new ThreadPoolExecutor.AbortPolicy() // 拒绝策略优势可控性强,避免Executors默认无界队列 / 无限线程带来的风险可以选择。

2025-08-31 21:33:54 668

原创 循环中的阻塞风险与异步线程解法

连接远程服务调用外部接口执行慢 SQL操作文件系统使用不稳定第三方 SDK那么都存在阻塞循环、拖垮整体的风险。把高风险操作丢给异步线程处理,主循环快速提交任务,避免单点阻塞。这是一种通用的编程经验,适用于批量任务、连接初始化、并发计算等场景。

2025-08-23 17:42:22 658

原创 Java 线程相关的三个常见接口、类

【代码】Java 线程相关的三个常见接口、类。

2025-08-23 16:33:17 264

原创 如何在批量创建 `DefaultMessageListenerContainer` 时避免阻塞问题

问题for循环批量创建 DMLC 时,如果某个容器启动阻塞,会导致整个循环卡住。方案:使用线程池,将 DMLC 的启动过程放到异步线程中执行,避免主循环阻塞。原理:同步 → 异步的线程模型转变,把“坏容器”的阻塞控制在自己线程内,不影响其他容器。注意点:线程池需要在程序停止时销毁,避免资源泄漏。最终效果是:即使部分 MQ 不可用,也不会影响其他 MQ 的监听容器正常启动,保证系统整体的健壮性。

2025-08-23 15:38:23 383

原创 Java 中 null 值在 JSON 输出时丢失的坑:一次 Object 参数 + Fastjson 多态的血泪教训

这个问题的根因,其实一句话就能说清:

2025-08-08 21:43:11 747

原创 JSON 序列化时,数字怎么偷偷‘变身’了?Jackson 科学计数法触发机制全解

科学计数法是一种用指数形式表达非常大或非常小的数字的方法。Java 中的double和float类型在打印或序列化时,默认就可能使用科学计数法。问题原因解决方案前端拿到1.23E8无法解析Jackson 默认输出科学计数法配置精度丢失,金额计算出错double存储金额使用BigDecimal科学计数法序列化后值变长被默认调用强制使用Jackson 并不会“自动触发”科学计数法,而是在数值超出正常范围后,出于效率和表达优化的考虑,采用了科学记数的格式。💰 金融业务;🧮 精度敏感场景;

2025-07-17 18:24:09 924

原创 语言只是压缩包:人类交流为何如此低效?

—《人类思维的边界》系列之一“你到底想表达什么?“我说得还不够清楚吗?“我听懂了你说的话,但不明白你真正的意思。夜深人静,一位产品经理盯着团队协作文档,头痛欲裂。他已经开了三次会议,写了五页需求文档,甚至画了流程图,可开发团队依旧做出了完全不同的东西。“为什么人类的交流总是这么困难?”他喃喃地说。

2025-07-09 16:54:33 475

原创 JMS 中的事务机制与消息确认模式全解:AUTO_ACK、CLIENT_ACK、SESSION_TRANSACTED 有啥区别?

大家好,我是G探险者!系列文章的第,本篇将全面解析 JMS 中的消息确认机制与事务控制,帮助你彻底搞懂以及之间的区别,以及如何结合 Spring 配置使用。

2025-07-01 17:10:31 914

原创 《搞懂 Spring 的 CachingConnectionFactory:为什么发送消息别直接用原始 ConnectionFactory》

场景推荐配置使用发送消息✅ 使用发送性能要求高✅ 设置≥ 并发数需要自动重连✅自动支持一定要避免每次连接创建开销❗ 千万不要直接使用裸。

2025-06-30 23:53:31 486

原创 《JMS 消息重试机制与死信队列配置指南:以 IBM MQ 与 TongLinkQ 为例》

场景推荐策略消息消费失败后希望自动重试开启,并抛异常控制最大重试次数和间隔MQ 队列上配置,如BOTHRESHRETRYINT失败后不丢弃消息配置 DLQ,并开启告警通知如何处理 DLQ 中的消息开发 DLQ 消费工具或人工平台Spring Retry 与 MQ Retry不建议混用,重点依赖 MQ Retry。

2025-06-30 23:24:47 1113

原创 《JMS事务性会话彻底解析:消息监听中的 commit、rollback 和幂等设计》

事务性会话()是一种将消息的接收与处理放入事务中控制的机制。

2025-06-30 23:24:09 369

原创 《如何在 Spring 中实现 MQ 消息的自动重连:监听与发送双通道策略》

场景推荐设置MQ监听端MQ发送端多 broker/集群设置事务性保障异常触发 rollback监听不生效检查是否调用了。

2025-06-30 23:23:23 681 2

原创 《JMS 消息监听的正确打开方式:Spring 中的 SimpleMessageListenerContainer vs DefaultMessageListener

Spring JMS 为我们封装了强大的消息监听容器。轻量好用适合容灾高可用场景真正的企业级 MQ 应用,应以容器 + 自动重连 + 可监控 + 容灾保护为基准线。下一篇我们将聚焦:📘《如何在Spring中实现MQ消息的自动重连:监听与发送双通道策略》

2025-06-30 23:22:39 412

原创 为什么 Zookeeper 越扩越慢,而 Nacos 却越扩越快?

对比项ZookeeperNacos数据结构树结构(ZTree)扁平结构 + 分组分区一致性协议Zab(单主)多 Raft Group(多主)写入模式单 Leader 写入多 Leader 分布写入扩展能力差,写入瓶颈集中强,分组分摊压力实例粒度路径表示实例,不灵活服务/实例/元数据分离场景适配配置协调、分布式锁高并发服务注册、配置中心。

2025-06-15 23:23:34 965

原创 【案例解析】一次 TIME_WAIT 导致 TPS 断崖式下降的排查与优化

维度建议原因RestTemplate 构建使用单例 Bean避免重复创建连接池OkHttpClient 配置显式配置和Dispatcher控制最大连接数与请求并发度系统内核参数(可选)调整和提高本地端口复用能力(仅作兜底)下游配合下游服务需支持keep-alive否则连接池复用无效监控指标TIME_WAIT数、连接池状态、TPS 曲线实时观测变化,辅助优化TIME_WAIT这是一个典型的“连接未复用 → TIME_WAIT 滥发 → 系统资源耗尽 → TPS 周期性下降”的问题。

2025-06-09 16:41:38 773

原创 《深入理解 Nacos 集群与 Raft 协议》系列五:为什么集群未过半,系统就不可用?从 Raft 的投票机制说起

Raft 是为了保证数据一致性而牺牲了可用性的一种协议。所有操作都要过半节点参与确认未过半时,为防止脑裂,系统主动进入保护性不可用在 Nacos 中体现为:Leader 无法选举、写请求挂起、读请求可能失败。

2025-06-08 16:04:09 969

原创 《深入理解 Nacos 集群与 Raft 协议》系列四:日志复制机制:Raft 如何确保提交可靠且幂等

Raft 中,该日志由 Leader 追加,且已被超过半数节点确认持久化。即使 Leader 崩溃,仍有过半节点持有该日志下次选主,一定会选出有这条日志的节点为新 Leader(见第 3 篇)→已提交的日志,不会丢。所有写请求必须经 Leader 统一调度复制必须超过半数成功才算提交提交后才能执行,确保所有节点状态一致Follower 校验 + 回退机制保证了幂等性下一篇,我们将以 Nacos 为例讲解:💡 如果集群未过半节点存活,为什么整个系统不可用?敬请期待第 5 篇!

2025-06-08 16:03:20 1176

原创 《深入理解 Nacos 集群与 Raft 协议》系列三:日志对比机制:Raft 如何防止数据丢失与错误选主

投票时检查候选人日志是否比自己新防止日志回滚,避免脑裂与数据丢失所有新 Leader 都必须有前任 Leader 的提交副本下一篇我们将继续讲解:💡 Raft 日志是如何复制的?提交策略、确认机制与幂等性保障敬请期待第 4 篇!

2025-06-08 16:02:32 1302

原创 《深入理解 Nacos 集群与 Raft 协议》系列二:Raft 为什么要“选主”?选主的触发条件与机制详解

每轮只能选出一个 Leader,统一处理写请求选主通过 RequestVote 实现,结合日志校验、随机超时多节点同时竞选不会脑裂,最终一定选出唯一 Leader下一篇,我们将重点解析:💡 Raft 是如何通过“日志对比”防止不合法节点当选 Leader?敬请期待第 3 篇!

2025-06-08 16:01:46 725

原创 《深入理解 Nacos 集群与 Raft 协议》系列一:为什么 Nacos 集群必须过半节点存活?从 Raft 协议说起

Nacos 集群部署时的“必须过半节点存活”要求,源于它底层使用的 Raft 协议。保证集群状态的一致性(避免脑裂)保证注册数据的可靠传播与持久化保证集群内部的正确选主下一篇我们将深入讲解:💡 Raft 为什么要选主?选主的条件、过程与常见误区敬请期待第 2 篇!

2025-06-08 16:00:56 844

原创 Excel 表操作小技巧:如何判断是否存在重复整行记录?

方法特点推荐使用场景COUNTIFS写法清晰,适合字段较少2~5 列的数据表拼接 +COUNTIF灵活高效,适合字段较多6列以上、重复逻辑复杂TEXTJOIN自动拼接整行Excel/WPS 新版UNIQUE判断是否存在重复整行(整体)判断全表重复即可删除重复项操作简单直接,不能标记重复行快速清理表格数据。

2025-06-05 15:19:17 986

原创 Jackson 数值转科学计数法问题分析与解决方案

Jackson 是一款强大而灵活的 JSON 处理工具,但其默认的自动类型推断和格式优化策略,在一些严谨的数据处理场景中可能引发意外行为。从JSON 字符串结构入手,控制字段类型;从ObjectMapper 配置入手,修改解析与输出行为;从节点层级处理逻辑入手,手动干预字段值类型。建议开发中针对业务要求,统一 JSON 处理策略,避免此类隐患反复出现。

2025-06-02 17:37:28 794

原创 表单请求为什么需要进行 URL 编码?—详解application/x-www-form-urlencoded的正确用法

凡是使用的请求,就必须对请求体的参数值进行 URL 编码!编码不仅是为了规范,也是确保数据安全和接口兼容性的基本保障。开发中如果使用第三方工具类或框架(如 Hutool、RestTemplate),请务必确认参数是否已经正确编码,或者直接使用.form()方法由框架自动完成。对 JSON 做 URL 编码后作为表单字段值(如或者改用类型,后端直接解析 JSON(更清晰)如需示例代码或想了解更多细节,可随时留言交流。

2025-05-29 16:00:37 1336

原创 聊一聊常见的超时问题:timeout

连接超时是指客户端在设定的时间内无法与目标服务建立连接,通常是在 TCP 三次握手阶段未完成时抛出的错误。连接建立成功后,客户端等待服务端返回数据,如果在规定时间内未收到响应,就会抛出响应超时异常。

2025-05-11 19:58:28 1618

原创 项目日志是否应该启用文件压缩?

大家好,我是G探险者!在项目中,日志管理是运维和开发人员需要重点关注的环节。随着系统规模的增长,日志文件可能会占据大量存储空间,因此很多项目会考虑使用日志压缩的方式来减少存储成本。然而,日志压缩也会带来一些额外的运维开销,例如日志查看不便、日志采集工具的兼容性问题等。因此,是否应该启用日志压缩需要权衡利弊。

2025-03-30 22:34:58 901

原创 AI时代只会加速拉大人与人之间的差距

AI时代并不会自动拉平人与人之间的差距,反而可能进一步加剧强者与平庸者的分化。AI只是一个工具,它可以放大认知优势,但无法赋予缺乏思考和学习能力的人竞争力。因此,我们需要在AI的辅助下,保持好奇心、提升思维能力,并不断学习,才能真正受益于这个时代的技术变革。

2025-03-09 14:36:33 401

原创 这样使用雪花算法被客户喷了!

我的代码确实借鉴了雪花算法的一些思想,尤其是时间戳和序列号递增的部分,但它并没有实现雪花算法的完整机制(如机器 ID、数据中心 ID、分布式保证等)。因此,它只能算是对雪花算法的一种简单模仿,适用于单机场景下的 ID 生成,但在分布式系统或高并发环境中,存在生成重复 ID 的风险。

2025-02-23 23:44:01 666

原创 聊一聊vue如何实现角色权限的控制的

大家好,我是G探险者。关于角色与权限控制,通常是分为两大类:一种是菜单权限;一种是操作权限。菜单权限是指,每个角色对应着可以看到哪些菜单,至于每个菜单里面的每个按钮,比如增删改查等等这类按钮控制不到这个粒度。简单来说就是控制看到的菜单多少。操作权限是指,每个角色对于所看到的数据具有哪些操作权限,就是增删改查这些具体的操作,简单来说就是读写权限。一套完整的角色访问控制:是应该包含这两种控制的。通常二者也是交叉在一起进行访问控制的。Vue.js 提供了灵活的方式来实现角色权限控制,本文将深入探讨如何通过 Vu

2025-02-16 23:35:06 1495

图标信息

图标图标信息

2020-05-22

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

TA关注的人

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