自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(997)
  • 资源 (9)
  • 收藏
  • 关注

原创 JVM专题

从JDK源码级别彻底剖析JVM类加载机制

2022-02-01 16:47:01 449

原创 MySQL学习系列

系列文章目录MySQL 的分支、变种与替代

2021-12-31 22:51:06 487

原创 gradle构建工具学习系列

系列文章目录

2021-12-18 12:05:23 552

原创 并发编程系列

系列文章目录并发编程之深入理解JMM&并发三大特性并发编程之深入理解Java线程

2021-11-28 16:07:26 419

原创 MyBatis源码学习系列文章目录

系列文章目录MyBatis开发要点MyBatis一级缓存MyBatis二级缓存MyBatis日志模块MyBatis日志增强MyBatis数据源MyBatis缓存模块(二级缓存深入理解)MyBatis反射模块MyBatis工作流程-初始化阶段一MyBatis工作流程-初始化阶段二MyBatis工作流程-代理封装阶段MyBatis工作流程-数据访问阶段MyBatis工作流程-与Spring整合...

2021-04-24 21:44:25 291

原创 腾讯课堂某培训机构Spring源码问题集锦

系列文章目录注解方式与xml方式注册问题

2021-04-17 11:12:25 378

原创 MyBatis工作流程-与Spring整合

系列文章目录MyBatis开发要点MyBatis一级缓存MyBatis二级缓存MyBatis日志模块MyBatis日志增强MyBatis数据源MyBatis缓存模块(二级缓存深入理解)MyBatis反射模块MyBatis工作流程-初始化阶段一MyBatis工作流程-初始化阶段二MyBatis工作流程-代理封装阶段MyBatis工作流程-数据访问阶段MyBatis工作流程-与Spring整合文章目录系列文章目录 前言与MyBatis相关的Beanbean实例化的流程1. Sql

2020-12-19 16:12:11 271 1

原创 兼容Oracle与MySQL的一些事

文章目录前言一、字段类型差异二、函数差异 1、几种兼容方案a. 利用Mybatis的特性b. 是否存在相同的函数c. 自定义同名函数三、语法差异四、锁的差异总结前言由于公司目前主要使用的数据库为Oracle,然后部分兼容MySQL,后期会考虑全部支持Oracle和MySQL。由于二者的各种差异,我们必须有一套可行的方案减少工作量。在兼容Oracle与MySQL的那些事中我们已经仔细讨论过在数据层对多数据库的支持了,接下来的目标就是结合这种支持同时考虑其他手段达到目标了。本文从以下几点来谈一下对兼容考

2020-11-09 10:56:58 2112 7

原创 Java并发包中的PriorityBlockingQueue解析

特性说明线程安全所有公共操作都通过加锁,支持多线程并发访问。无界(逻辑上)理论上可以无限添加元素(但受 JVM 内存限制,可能抛不允许 null 元素插入null会抛。基于堆(Heap)实现底层使用数组表示的二叉堆(最小堆),保证queue[0]是优先级最高的元素。阻塞式取操作提供take()等方法,在队列为空时可阻塞等待。不保证迭代顺序iterator()不按优先级顺序遍历!如需有序,必须用。插入/删除时间复杂度O(log n),因为要维护堆结构。

2026-01-06 16:09:44 215

原创 Java并发跳表Map:无锁有序的高效实现

是 Doug Lea 利用“跳表 + 无锁链表 + 双阶段删除 + 弱一致性”设计出的一个高性能并发有序 Map。它牺牲了部分强一致性(如 size() 不精确、迭代器弱一致),换来了极高的并发吞吐量和可扩展性,是高并发场景下替代TreeMap的首选。

2026-01-06 11:34:42 625

原创 Java并发利器:CyclicBarrier深度解析

它是一个可重复使用的“集合点”:N 个线程各自完成任务后在此汇合,全部到齐才一起继续;支持在汇合时执行一个汇总操作,并且任何一人掉队(中断/超时)则全员失败。用Generation隔离不同轮次;用实现高效等待/唤醒;提供强一致性语义和灵活的扩展点(barrier action)。这也是 Doug Lea 并发设计的经典之作。

2026-01-05 19:58:51 656

原创 彻底理解CountDownLatch

它是一个“倒计时门闩”:门关着(count > 0),所有想通过的线程(调用 await)都得等着;每有人完成一件事(countDown),计数减一;当计数归零,门打开,所有等待者一拥而过,且之后来的人直接通行。简单、高效、线程安全;利用 AQS 共享模式实现“一对多”或“多对一”的同步;提供明确的内存可见性保证。这也是为什么它成为并发编程中的“瑞士军刀”之一。

2026-01-05 19:44:32 917

原创 AQS共享锁的传播机制精髓

概念作用传播(Propagation)共享模式下,一次释放可能需唤醒多个线程明确指示“后继需要唤醒”在状态模糊时,防止释放信号丢失的保险机制自旋 + CAS 循环应对高并发下的状态竞争,确保最终一致性✅设计哲学“宁可多唤醒几次(unnecessary wake-ups),也不能漏掉一次该唤醒的线程。—— 这就是 AQS 共享模式的鲁棒性所在。

2026-01-05 17:30:43 850

原创 深入解析Java ReentrantLock:可重入锁的核心机制

的核心是内部类Sync,它继承自(AQS),这是 Java 并发包的基石。AQS 使用一个int 状态(state)表示锁的持有次数。使用CLH 队列管理等待线程(FIFO)。Sync有两个实现:非公平锁(默认)FairSync公平锁是一个功能更强、更灵活的 synchronized 替代品,支持中断、超时、公平性、多条件变量,但需要手动管理锁的释放,且默认是非公平的以换取更高性能。如果你需要精细控制并发行为(比如响应中断、避免死等、多条件等待),就用;否则,简单场景用更安全简洁。

2026-01-05 16:05:56 471

原创 Java信号量Semaphore:并发控制的利器

信号量维护一组“许可证”(permits),线程在访问受保护资源前必须先获取一个许可证。如果没有可用许可证,线程会阻塞(或立即返回失败,取决于调用方法),直到有其他线程释放许可证。不实际创建“许可证对象”,只是用一个整数计数器表示当前可用数量。比如:停车场有 10 个车位(permits = 10)。每来一辆车(线程),要先“acquire”一个车位;离开时“release”归还车位。Semaphore。

2026-01-05 16:00:13 834

原创 深入解析AQS:Java并发基石

队列管理、线程阻塞/唤醒、状态原子性、中断/超时处理。定义“什么是获取成功”、“什么是释放成功”。这使得你可以用几十行代码实现出工业级的同步器,而无需操心底层并发细节。如果你正在学习 JUC 或想深入理解Semaphore等的原理,掌握 AQS 是必经之路。它的设计堪称 Java 并发编程的“皇冠上的明珠”。如需进一步分析某个具体同步器(比如如何用 AQS 实现读写锁),欢迎继续提问!

2026-01-04 17:09:38 884

原创 Java并发神器Phaser:动态同步屏障详解

Phaser是一个支持动态参与者数量、可重用、可分层、带阶段编号的高级同步屏障,适用于复杂、多阶段、参与者数量变化的并发协调场景。如果你有具体使用场景(比如“我想让1000个线程分10批执行”),我可以给出代码示例!

2026-01-04 14:20:15 747

原创 一文读懂 AI Agent:让大模型从“会聊天”变成“能办事”

原文定义白话翻译AI Agent = 大语言模型 + 自主行动能力 → 能独立完成复杂任务的 AI 系统它不只是回答问题,而是代表你去完成一件事。你给一个目标(Goal)↓[Agent 大脑(LLM)]→ 规划步骤(Plan)→ 调用工具(Search / Code / API)→ 记住过程(Memory)→ 检查结果(Reflect)↓自动完成任务!✅关键一句话AI Agent 不是“问答机器”,而是“任务执行者”—— 它代表你去行动,而不仅仅是说话。📘延伸建议。

2025-12-24 14:58:28 314

原创 一文读懂 LLM 可信度:AI 不只是“聪明”,更要“可靠”

一个“可信”的 AI =✔ 说真话(Truthfulness)✔ 不害人(Safety)✔ 不歧视(Fairness)✔ 抗干扰(Robustness)✔ 守秘密(Privacy)✔ 有道德(Ethics)关键结论当前 LLM尚未完全可信,尤其在公平性、隐私、复杂伦理方面仍有短板。闭源模型整体更优,但开源模型进步迅速。我们不能盲目相信 AI 输出,而应结合技术手段 + 人工监督构建安全应用。📘核心参考文献希望这篇“小白友好版”帮你彻底搞懂LLM 可信度!

2025-12-24 14:45:14 549

原创 一文读懂 LLM 推理:大模型真的会“思考”吗?

在人类世界,“推理”就是有逻辑地一步步思考问题。问题:小明比小红高,小红比小刚高。谁最高?推理过程小明 > 小红小红 > 小刚所以:小明 > 小红 > 小刚 → 小明最高!这个“中间步骤”就是推理。而LLM 推理(Large Language Model Reasoning)指的是:让大语言模型(如 ChatGPT、Claude)在回答复杂问题时,不直接猜答案,而是先写出思考过程,再得出结论。答案更准确错了也能看出哪里错能解决数学、逻辑、科学等复杂问题用户问题(复杂)↓。

2025-12-24 14:44:17 434

原创 一文读懂 LLM Agent:让大模型不只是“聊天”,而是“做事”

普通的 ChatGPT 就像一个坐在图书馆里的聪明人:你问问题,他凭记忆回答。但他不能上网查资料不能写代码运行不能操作电脑。而LLM Agent(大语言模型智能体)就是:给这个聪明人配上眼睛(感知)、手脚(工具)、笔记本(记忆)和计划能力(规划),让他不仅能回答问题,还能主动完成复杂任务!✅一句话定义LLM Agent = 大语言模型 + 规划能力 + 记忆 + 工具调用 → 能自主执行多步任务的 AI 系统用户请求(复杂任务)↓[Planning] → 拆解成子任务↓。

2025-12-24 14:41:59 809

原创 什么是 RAG、为什么需要它、怎么工作、有哪些类型、如何评估以及未来趋势

你问一个非常聪明的学生:“2024 年诺贝尔物理学奖得主是谁?但他只学过 2023 年以前的知识,所以答错了。但如果允许他先去图书馆查最新资料,再回答,答案就准确了!RAG(Retrieval-Augmented Generation)就是干这件事的它让大语言模型(LLM)在回答问题前,先从外部数据库里“查资料”,把查到的相关信息塞进提示词(prompt),然后再生成答案。✅好处回答更准确(基于真实数据)能回答训练后的新问题减少“胡说八道”(幻觉)知识更新只需改数据库,不用重新训练模型。

2025-12-24 14:38:19 785

原创 Java并发利器:AtomicStampedReference解析

假设有一个栈,初始状态为A → B → C,栈顶是 A。线程1 读取栈顶为 A,准备执行 CAS(期望 A,替换为 D)。此时线程2 弹出 A,再压入新节点 A’(内容相同但地址不同,或甚至同一个 A 被回收后重用)。A → B → C(看起来没变)。线程1 执行 CAS:发现栈顶仍是 A,于是成功替换为 D。但实际上,中间发生了变化(A 被弹出又压入),但 CAS 无法感知,这就是ABA 问题。值看起来没变,但语义已变。是 Java 并发编程中解决 ABA 问题的经典工具。

2025-12-22 17:33:53 844

原创 Java线程安全利器:CopyOnWriteArraySet详解

是 CopyOnWriteArrayList的 Set 封装版,通过委托 + 去重逻辑,实现了线程安全的无重复集合。“牺牲写性能,换取极致的读性能和遍历安全性”在合适的场景下(小、读多、写少),它是优雅且高效的解决方案;但在高写频或大数据场景下,应考虑其他并发 Set 实现。如果你正在处理回调注册、监听器管理、配置项缓存等场景,很可能就是你要找的工具。

2025-12-22 16:05:03 486

原创 Java线程安全利器:CopyOnWriteArrayList详解

特性说明线程安全所有可变操作加锁,读操作无锁但可见性由volatile保证内存一致性happens-before:写入前的操作对后续读取该元素的线程可见允许 null 元素null被当作普通元素处理fail-safe 迭代器基于快照,不抛高写成本每次写都复制整个数组,适合小规模、低频修改最终一致性读操作可能看到“过期”数据,但不会出错是为高并发读、低频写场景量身定制的线程安全容器。它用空间换时间 + 最终一致性的思路,巧妙避免了读写冲突,是并发编程中“乐观锁”思想的经典体现。

2025-12-22 15:24:22 337

原创 深入解析ThreadLocalMap核心实现

特性说明哈希冲突线性探测(开放寻址)Key 引用类型WeakReference(防 ThreadLocal 本身泄漏)Value 生命周期依赖 stale entry 清理,否则内存泄漏清理时机get/set/remove 时触发 expunge/cleanSomeSlots/rehash扩容条件size ≥ 2/3 * capacity,且清理后仍 ≥ 3/4 * threshold最佳实践使用完务必remove()如有需要,我可以进一步画出ASCII 流程图或UML 结构图。

2025-12-22 15:17:03 811

原创 深入解析ThreadLocal:线程私有变量的秘密

ThreadLocal 不是“线程”,而是“每个线程拥有自己独立副本的变量”。正常变量:所有线程共享同一个值。每个线程调用get()时,拿到的是自己独有的值,互不干扰。典型用途:用户会话 ID(Web 应用中每个请求线程保存自己的用户信息)数据库连接 / 事务上下文SimpleDateFormat(非线程安全,可用 ThreadLocal 封装)概念说明存储位置数据存在(Map)中,不是 ThreadLocal 里key 类型对象(弱引用)value 类型。

2025-12-22 15:08:23 598

原创 深入解析Kafka核心:Partition类源码揭秘

Da.txt中的Partition类是Kafka 副本机制的大脑维护分区的角色、状态、日志、元数据实现Leader 选举后的状态初始化管理ISR 的动态扩缩容推进高水位(HW)以保证一致性支持分区迁移(futureLog)提供JMX 监控指标使用精细锁控制并发安全💡 如果你想深入理解 Kafka 的一致性模型、故障恢复、副本同步、限流、监控,这个类是必读源码。“ISR 是怎么判断副本落后的?“Leader Epoch 如何防止数据丢失?

2025-12-16 14:11:25 914

原创 Kafka副本同步机制核心解析

是 Kafka高可用、强一致性副本机制的核心执行者拉取Leader 数据校验offset 和 epoch 一致性写入本地日志更新HW / LSO截断脏数据限流异常副本理解它,就理解了 Kafka 如何做到“即使宕机,也不丢数据、不错数据”。如果你正在调试副本同步延迟、ISR 频繁变动、或数据不一致问题,深入这个类会非常有帮助。需要我进一步解释某个方法(比如)或画更详细的时序图吗?

2025-12-16 14:10:12 735

原创 Kafka高可用:延迟请求处理揭秘

当 Producer 要求“所有副本写入成功”(acks=-1),而 Leader 虽已写入但 Followers 还未同步时,Kafka 会将该请求挂起为一个延时操作,注册到对应分区的监听器上;一旦 Followers 追上或超时,就自动完成并回复 Producer。这种机制既保证了数据一致性,又避免了线程阻塞,是 Kafka 高性能的关键设计之一。如果你还想了解Purgatory内部如何管理延时请求、如何避免内存泄漏、或者如何通知 Purgatory,也可以继续问!

2025-12-16 10:03:19 929

原创 Kafka元数据缓存机制深度解析

是 Kafka Broker 的元数据中心枢纽高性能:读无锁、Copy-on-Write、避免分配一致性:快照语义,避免脏读灵活性:支持多 Listener、动态更新、部分更新健壮性:处理 Broker 下线、Listener 缺失、分区删除等边界情况理解它,就理解了 Kafka如何在分布式环境下高效同步和使用集群拓扑信息。如果你有具体问题(比如某段逻辑、某个字段用途、或如何调试),可以继续问!

2025-12-16 09:46:58 687

原创 Kafka核心揭秘:ReplicaManager如何保障高可用

是 Kafka Broker 的“副本大脑”它既是数据管道的枢纽(协调读写与复制),也是一致性协议的执行者(维护 HW/LEO/ISR),更是故障自愈的守门人(处理磁盘失效、触发重平衡)。其设计体现了 Kafka 对高性能、强一致性、高可用的综合权衡,是理解 Kafka 内部机制的关键入口。

2025-12-15 19:58:46 682

原创 Kafka高水位与日志末端偏移量解析

概念含义表示当前副本(Replica)日志中下一条待写入消息的 offset。即:已有消息的最大 offset + 1。例如 LEO=10 表示已写入 [0, 9] 共 10 条消息。表示已被所有 ISR(In-Sync Replicas)副本成功复制的消息的最高 offset。消费者只能消费 offset < HW 的消息,以确保读取的是“已提交”且“多副本一致”的数据。LEO= “我写到哪了”(本地进度)HW= “大家都确认到哪了”(全局共识)

2025-12-15 19:52:29 872

原创 Kafka副本管理核心机制解析

功能说明Leader 管理识别本机 Leader 分区,提供 LEO/HW持久化定期 checkpoint 高水位容错处理磁盘故障,自动下线分区指标暴露副本健康状态关闭优雅 shutdown,保证一致性扩展性可插拔的 fetcher / selector协议支持支持 LeaderEpoch 查询、Leader 选举如果你是在阅读 Kafka 源码、调试副本问题、或开发自定义存储层,理解这些方法非常关键。需要更深入某一部分(比如或),可以继续提问!

2025-12-15 19:51:55 986

原创 Kafka副本管理核心机制全解析

它实现了 Kafka Broker 如何动态响应 Controller 指令,完成分区 Leader/Follower 角色切换,并维护副本同步、读写分离、限流、ISR 等核心机制。你可以把它看作 Kafka副本生命周期管理的中枢神经。“为什么 makeFollower 要先 truncate 日志?“ReplicaSelector 是怎么工作的?“HW 和 LEO 的关系是什么?欢迎继续提问!我可以深入某一部分详细解释。

2025-12-15 19:50:03 823

原创 深入解析Kafka Broker核心读写机制

机制说明根据客户端类型控制可见性(HW / LSO / LEO)使用 Purgatory 实现“条件满足再响应”(Produce/Fetch/Delete)细粒度监控(成功/失败请求、字节速率、消息速率)区分“预期异常”(如 NotLeader)和“系统异常”(如 IO 错误)支持副本同步限流(支持 KIP-392:消费者可从 Follower 读(需 ClientMetadata)你看到的这段代码,是 Kafka高可靠、高性能、多租户写入路径:安全追加 + 多级 ACK + 延迟确认读取路径。

2025-12-15 19:48:41 624

原创 Kafka日志迁移与查询机制解析

机制目的实现无停机、安全的日志迁移复用现有副本同步逻辑,保证一致性支持“预设目录”,适用于尚未创建的分区迁移期间暂停 Log Compaction,避免冲突提供可观测性,便于运维这两段代码体现了 Kafka面向运维友好、高可用、可扩展:通过“未来副本 + 异步复制”实现安全在线迁移:提供细粒度存储视图,支撑自动化运维它们共同构成了 Kafka存储层弹性调度的基础,是大规模集群管理的关键能力。如果你正在做磁盘扩容、性能调优、容量规划,这些接口非常实用。需要我进一步解释。

2025-12-15 19:47:32 950

原创 深入解析Kafka核心写入逻辑

机制目的先写 Leader,再异步同步 Follower保证写入高性能Purgatory(炼狱)模式统一处理“不能立即完成”的请求(Produce/Fetch/Delete)acks=-1触发等待实现强一致性语义HW(High Watermark)推进作为完成条件确保 ISR 副本都已持久化协调删除操作保证日志截断的一致性这段代码体现了 Kafka高吞吐 + 可配置一致性快速写 Leader→ 保证性能异步同步 Follower→ 保证可扩展性Purgatory 延迟机制。

2025-12-15 19:46:03 954

原创 Kafka副本管理核心:ReplicaManager揭秘

Apache Kafka Broker 端核心组件 它是 Kafka 实现 副本管理、ISR(In-Sync Replicas)维护、Leader/Follower 同步、日志存储协调 的中枢。下面我将从 整体定位、关键字段、核心机制、工作流程 四个维度,帮你系统性理解这段代码的含义和设计思想。每个 Kafka Broker 启动时都会创建一个 实例,它::本 Broker 所有托管分区的容器。 是一个密封类(sealed trait),有三种状态::正常在线:所在日志目录故障,分区不可用:

2025-12-15 19:43:36 1114

原创 Sentinel系统保护规则深度解析

继承包含上述 5 个阈值字段setter 方法中,≤ 0 的值表示“清除该阈值”支持动态更新(通过Sentinel 的 SystemRule 是一个“系统级熔断器”🛡️从全局视角保护应用,防止资源耗尽📈实时采集CPU、Load、QPS、RT、线程 5 大指标🧠引入 BBR 思想,避免误判🐳兼容容器环境,精准获取进程 CPU⚙️支持动态配置,无需重启💡最佳实践:在生产环境中,务必配置 SystemRule。

2025-12-12 15:50:43 887

K8S安装以及基础知识的学习

K8S学习笔记

2023-08-20

Quartz2.2.2版本发布包脚本定义

Quartz发布包

2023-07-28

examples.zip

MySQL学习系列SQL案例

2022-01-03

Spring Boot整合Druid Demo项目代码包

Spring Boot整合Druid Demo项目源代码,同时整合了MyBatis,以及实现动态的数据源、Druid连接池的监控。

2020-03-03

simpe-demo-diffdb.7z

该项目包含了动态数据源、兼容Oracle/MySQL数据库、同时通过MyBatis-PageHelper、MyBatis-Plus解决多数据库分页的问题

2020-11-10

动态多数据源示例代码

本项目由SpringBoot+MyBatis+Druild组成,主要关于多数据的动态配置,以及多数据源的配置。用于通过前端请求自由切换数据源,切换数据源的同时也动态执行不同的SQL

2020-11-04

Spring Boot中整合MyBatis

关于SpringBoot中如何配置数据层MyBatis,以及多数据源的配置,多个数据层mapperInterface和xml文件路径的配置源码

2020-04-01

dubbo-thought.7z

Java SPI 机制与 Dubbo SPI 机制的一些说明与测试代码 方便SPI的学习 该项目来自于享学课堂学习资料 请勿随意商业使用

2020-02-22

编程式创建Aspect代理源码

编程式创建Aspect代理源码 You can use the org.springframework.aop.aspectj.annotation.AspectJProxyFactory class to create a proxy for a target object that is advised by one or more @AspectJ aspects.

2020-05-27

Spring Boot中整合MyBatis

关于SpringBoot中如何配置数据层MyBatis,以及多数据源的配置,多个数据层mapperInterface和xml文件路径的配置源码

2020-04-01

springcloud.zip

Spring Cloud 微服务源码:分为用户微服务、课程微服务、网关微服务,通过consul实现了服务发现组件和配置服务器,外面的请求通过网关打进来,微服务之间通过轻量级通信机制,包括http和rabbitmq,微服务之间有一定的认证与授权机制,从而保证安全,对于高并发的应用,通过集成Resilience4j,从而提升应用的可用性。

2020-03-15

空空如也

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

TA关注的人

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