- 博客(640)
- 资源 (19)
- 收藏
- 关注
原创 ThreadLocal 内存泄露从原理到复现
蟹堡王的厨房里,每位员工(线程)都有自己的私人物品柜。柜子里可以放今天的订单小票、顾客偏好、追踪号……这就是同线程内自取自用,别跟隔壁工位串台。线程池里的工作线程复用了带脏数据的——打烊了还把蟹堡锁在柜子里不扔。很多人只记得一句口诀:「用完记得remove的 key 已经是弱引用了,为什么还会漏?为什么「普通新建线程」不一定爆,线程池却几乎必现?业务代码、框架过滤器、MDC 日志上下文分别该怎么收尾?钥匙(key)可以被章鱼哥 GC 收走,但蟹堡(value)仍被员工 Thread 死死拽着;
2026-08-05 08:15:00
306
原创 网络学习(五):从零理解 VIP 虚拟 IP
日常运维、上云、做高可用时,同事常说:「流量打到 VIP」「域名解析到 VIP」「主备切换后 VIP 漂过去了」。容易混淆的说法它实际更接近什么VIP一组机器对外共用的「虚拟」入口 IP物理 IP / 真实 IP网卡上真正配死在某台机器上的地址域名给人记的名字,本身不是 IPDNS把域名翻译成某个 IP(常常就是 VIP)的系统域名是门牌上的店名,VIP 是店门口统一的街道号;后面真正干活的可能是多台机器,街道号可以在机器之间「挪」。本文只做概念讲解,不绑定某一家云、某一份源码;
2026-08-04 14:23:05
207
原创 Git(九)你真的会合并代码到 master 吗?
很多团队「合到master」其实是这样做的:功能分支上积累十几次调试提交 → 直接提 MR 撞master→ 冲突丢给主干处理 → 历史脏、回滚难、评审费劲。冲突在功能分支消化:每个功能分支先合入最新master,冲突当场解决。历史压成一次提交:基于最新master再拉一条「待合入」干净分支,把功能分支成果带过去,用落回基线后再做成一条清晰 commit。用 MR 合入主干:推送待合入分支后,创建 MR(Merge Request,GitHub 上常叫 PR)合并到master,走评审与 CI。
2026-07-14 21:15:25
355
原创 Spring Boot 实战(四十二):集成 Spring AI 六大场景
做智能体或问答产品时,后端往往要同时暴露「对话、记忆、RAG、工具、多模态」等多类能力;前端则需要一页就能切换场景、填参数、看响应。如果一上来就接入真实模型供应商和向量库,环境、密钥、鉴权容易把学习路径打断。本文采用「先用可运行的模拟 AI 客户端把 API 契约和前端控制台搭通,后续再替换为真实 Spring AI」的路径:后端提供统一前缀/ai的 REST;前端用 Vue 控制台调用;开发期由 Vite 代理转发,避免跨域卡顿。用户在 Vue 页面选择场景并提交;Axios 请求/ai/*;
2026-07-09 22:28:57
454
1
原创 Spring Boot 实战(四十一):集成 BPMN(Flowable+bpmn-js)
企业里审批场景很多:请假、报销、采购……如果流转逻辑全写在 里,每次改流程都要发版。BPMN + Flowable 的做法是:本文用「请假审批」串联整条链路:最终你会得到两个工程:Java 侧常见工作流引擎均支持 BPMN 2.0,本文后端选用 Flowable,主要因为:它由 Activiti 原核心团队维护,API 与 Activiti 5/6 相近、迁移成本低;官方提供 Spring Boot Starter,几行配置即可跑起来;社区活跃、文档齐全,适合作为审批类系统的入门选型。流程建模前端的核心
2026-07-08 13:44:47
401
原创 IDEA(十五) IDEA 开发必备:Git Shelve Changes 与 Stash Changes 详解
Shelve(搁置)是 JetBrains IDE独有的功能,字面意思是「把东西搁到架子上」。它把选中的变更保存到本地目录,不经过 Git 提交历史,也不影响git status。只在 IDEA 内开发,不需要跨工具共享暂存内容需要按文件或代码块精细搁置(比 Stash 更灵活)希望搁置记录带 Changelist 名称,方便回来继续Stashgit stash push -m "你的说明"需要在命令行、SourceTree、GitKraken等其他 Git 工具中访问暂存。
2026-07-07 14:00:37
398
原创 ES 学习(十)DSL常用操作精简整理
must:必须满足且参与评分;must_not:必须不满足;should:或条件。分片公式:总分片数 = 主分片数 + 副本数 × 主分片数;生产注意:可添加新字段、可改副本数;不可改已有字段类型、不可删已有字段。精确匹配,不分词,适用于 keyword 字段;每两行一组:第一行元数据,第二行文档内容(delete 只需一行)。gte/lte/gt/lt:大于等于/小于等于/大于/小于。不需要相关性评分时,优先用 filter 替代 must。支持 Lucene 语法:AND、OR、NOT 等。
2026-07-03 13:20:40
283
原创 MySQL 学习(十一)MySQL 查索引还要「再查一次表」?——从 B+ 树到聚簇索引、二级索引与回表
MySQL 学习(十一)MySQL 查索引还要「再查一次表」?——从 B+ 树到聚簇索引、二级索引与回表
2026-05-25 23:45:00
375
原创 JDK 版本管理工具介绍:jenv与sdkman(Mac端)
jenv和sdkmanjenv 遵循 Unix 哲学的"单一职责",专注于做好JDK版本管理这一件事;sdkman 则提供了更为全面的开发工具管理解决方案。对于小型团队或个人开发者,如果主要工作集中在Java开发且环境相对稳定,jenv的简洁性和轻量性是理想选择。其简单的架构易于理解和维护,不会给开发环境带来额外负担。对于中大型团队或采用多技术栈的项目,sdkman的综合优势更为明显。它不仅能统一管理JDK,还能协调其他构建工具和JVM语言的版本,提供了一站式的开发环境管理方案。
2026-04-14 23:45:00
605
原创 ES 学习(九)从文本到词元:分词器如何“拆解“你的数据
是 ES 的默认分词器,适用于大多数语言场景。它基于Unicode文本分割算法,能够智能地识别单词边界。核心原理Unicode分词算法:基于Unicode标准附录#29(Unicode Text Segmentation)定义的词边界规则正则表达式匹配:使用正则表达式识别非字母数字字符作为分隔符双向最大匹配:在歧义情况下,优先选择更长的匹配结果工作流程1)字符过滤:可选的字符过滤器预处理(如HTML标签移除)2)分词:Tokenizer根据Unicode规则将文本按词边界切分3)小写转换。
2026-04-11 23:45:00
567
原创 ES 学习(八)为什么ES搜索这么快?倒排索引的实现解密
Elasticsearch之所以能够实现如此快速的搜索,其核心秘密就在于倒排索引这一精妙的数据结构。通过将"文档到词"的正向查找,转变为"词到文档"的逆向映射,ES从根本上解决了海量数据下全文检索的性能瓶颈。用户友好:简单的DSL语法隐藏复杂实现执行高效:并行分片、跳表加速、缓存优化扩展性强:分布式架构支持PB级数据理解这些底层机制,不仅能帮助我们写出更高效的查询,更能为系统架构设计提供重要参考。优秀的技术产品,是底层创新与上层抽象的完美结合。整理完毕,完结撒花~🌻。
2026-04-10 08:27:47
432
原创 ES 学习(七)性能陷阱
1)优先解决高频问题:深度分页、通配符查询、分片设置2)监控驱动优化:使用Profile API、慢查询日志等工具定位瓶颈3)渐进式优化:避免一次性做大量改动,逐步验证效果4)结合实际场景:根据业务特点选择合适的优化策略。
2026-04-09 23:45:00
470
原创 SpringBoot 实战(四十一):集成 Elasticsearch
本文介绍了在 SpringBoot 项目中集成 Elasticsearch 的完整流程。是一个基于 Lucene 的分布式全文搜索引擎,通过可以轻松实现与 SpringBoot 的整合,为应用提供强大的搜索、分析和数据可视化能力。本次集成将涵盖环境准备、依赖配置、索引管理、文档操作、高级查询等核心功能,确保系统具备高可用、高性能的搜索服务能力。
2026-04-08 07:12:38
573
原创 SimpleDateFormat 线程安全问题及修复方案
(java.text.SimpleDateFormat)是 Java 中常用的日期格式化工具类,但在多线程环境下存在严重的线程安全问题。本文将深入分析其线程不安全的根本原因,通过代码示例复现问题,并提供多种经过验证的修复与替代方案,最后总结高并发场景下的最佳实践。新项目优先:对于 Java 8 及以上版本的新项目,应无条件优先使用java.time包中的,它设计更合理,性能和安全性俱佳。旧项目改造:对于无法立即升级的旧项目,推荐使用方式封装,平衡安全与性能。避免静态共享绝对不要将实例声明为。
2026-04-03 08:26:20
441
原创 ES 学习(六)设置账号密码(安全认证)
登录 Kibana 管理界面。进入。点击。填写用户名、全名、电子邮件。在Roles部分,为用户分配一个或多个预定义角色(如)或自定义角色。设置密码并确认。正确设置和管理ES的账号密码是保障数据安全的基础。通过启用安全功能、初始化内置用户、创建自定义用户并遵循强密码策略,可以有效防止未授权访问。建议结合角色权限管理、TLS加密和API Key等机制,构建多层次的安全防护体系。另外,在Docker环境中,确保使用持久化存储是保障密码和配置不丢失的关键。整理完毕,完结撒花~🌻。
2026-04-02 08:26:16
651
原创 ES 学习(五):DSL常用操作整理
是基于 JSON 的查询语言,用于执行复杂的搜索、聚合和数据操作。本文档系统整理了DSL的核心操作类型、语法结构和最佳实践,帮助开发者快速掌握ES查询能力。本文档系统整理了Elasticsearch DSL的核心操作,涵盖了查询、聚合、索引管理和性能优化等关键领域。掌握这些常用操作,能够有效提升数据检索和分析的效率。在实际应用中,建议结合具体业务场景,灵活运用各种DSL特性,并持续关注性能优化,以构建高效稳定的搜索和分析系统。
2026-04-01 23:45:00
781
原创 Redis学习(十五)Mac 安装 Redis
1.Mac安装Redis,原来就是这么简单,https://blog.csdn.net/realize_dream/article/details/106227622。Redis 默认是前台启动,如果我们想以守护进程的方式运行(即后台运行),可以在。1、如果没有安装 Homebrew,可以安装 npm 的国内版本,下载会快一些。我们可以通过下面命令查看 Redis 是否正在运行。7、启动 Redis 客户端,打开终端并输入命令。6、redis-cli 连接 Redis 服务。为空,输入以下命令即可连接。
2025-11-06 23:45:00
482
原创 SpringBoot实战(三十九)集成 FreeMarker
FreeMarker是一款模板引擎工具:即一种基于模板和要改变的数据,用来生成输出文本(如:HTML网页、电子邮件、配置文件、源代码等)的通用工具。它不是面向最终用户的,而是一个Java类库,是一款程序员可以嵌入它们所开发产品的组件。(FreeMarker 是免费的。为模板编写语言。它是简单、专用的语言,不是像 PHP 那样成熟的编程语言。那就意味着要准备数据在真实编程语言中来现实,比如数据库查询和业务运算,之后模板现实已经准备好的数据。
2025-10-24 23:45:00
784
1
原创 DDD(三)领域模型关键词解释、领域模型分类、关系图
平常我们有的实体比较负责,为了满足业务,有可能会弄出一个非常复杂的实体,里面包含很多实体,跟这个类似,这里的聚合是指同一生命周期,同一业务域的实体聚合成一个聚合根,也就是最外面的实体,并且这个实体管理者里面的所有实体,外面只能通过聚合根进行任何请求,聚合根再对里面进行操作,这里我感觉就是高内聚,聚合根不宜过大。聚合根是实体,有实体的特点,具有全局唯一标识,有独立的生命周期。是指业务核心,核心的竞争力,因为企业愿景不同,领域愿景也不同,核心域也不同,说白了,就是你们项目最初立项的目的是什么,目标是什么?
2025-10-23 23:45:00
830
原创 DDD(二)对比 MVC 架构,DDD 的优劣势
以应用层 Service 使用 DAO、PO 基础设施层包装业务逻辑的开发方式,乍一看以为应用层是在对领域建模的实现,“领域层” 有着丰富的对象链接,和真正的领域模型也非常类似,但当我们代码随着业务功能逻辑的逐步实现中会慢慢发现,我们写了一堆的 get/set 度喜庆,而他们被反复交叉使用,没有与任何领域聚合,也就是不具有任何的行为动作,只是一堆贫血模型对象。这种反模式的设计,其实完全与面向对象的设计是背道而驰的,面向对象的设计更希望行为和数据绑定在一起,与之对比的贫血模型更像是面向过程设计。
2025-10-22 23:45:00
776
原创 DDD(一)认识领域驱动设计(DDD的概念、主要架构模型)
DDD(Domain Driven Design,领域驱动设计)是一种软件设计思想和方法论,以领域为核心构建软件设计体系,将业务模型抽象成领域模型进行拆解和封装。DDD 不是一种架构,而是一种架构方法论,是一种拆解业务、划分业务、确定业务边界的方法,是一种领域设计思想。DDD 实际上是一套软件架构设计的方法论,我们可以在此之上更好地理解业务。并且我们可以根据这套方法论进行架构风格填充,包括微服务架构、面向服务架构、REST 风格架构以及六边形架构等等。
2025-10-21 23:45:00
1175
原创 SpringBoot实战(三十八)实现一个 MCP 服务器(JDK17)
SpringBoot实战(三十八)实现一个 MCP 服务器(JDK17)
2025-08-29 00:30:00
1105
原创 大模型(一)什么是 MCP?如何使用 Charry Studio 集成 MCP?
大模型(一)什么是 MCP?如何使用 Charry Studio 集成 MCP?
2025-08-25 23:45:00
1566
原创 手撕源码(六)Java、Spring、Dubbo三者SPI机制的原理和区别
手撕源码(六)Java、Spring、Dubbo三者SPI机制的原理和区别
2025-08-23 06:45:00
901
原创 下载JDK的几种方式:OpenJDK、Oracle JDK、OpenLogic JDK、Zulu JDK 详解
下载JDK的几种方式:OpenJDK、Oracle JDK、OpenLogic JDK、Zulu JDK 详解
2025-08-22 23:45:00
2769
nginx-1.22.1-install.tar.gz,Linux环境编译后免安装Nginx压缩包
2023-03-19
SpringBoot和Spring版本对应-v20230314.xlsx
2023-03-14
Oracle简易版安装包及安装文档
2018-06-27
springboot-test.zip
2019-11-30
oracle可视化连接工具(sqldeveloper)绿色版
2018-06-27
mongodb-win32-x86_64-windows-4.4.5.zip(MongoDB + Robot 3T连接工具,包含一键添加服务、一键启/关闭脚本)
2021-04-20
settings.xml
2018-05-09
2019(上)2018(下)中级网络工程师试题及答案解析.zip
2019-11-12
.m2.rar文件
2018-05-09
spring-cloud-demo-main.zip
2020-12-14
springboot-test.zip
2019-11-28
关于#java#的问题,如何解决?
2022-11-27
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅