青山木

青山木

无标题
发表于2026-11-05|Java|Java•并发•synchronized•CAS•悲观锁•乐观锁•Atomic•Unsafe•锁升级•ABA
一段 i++ 代码引发的丢失更新,引出两条解决路线。本文先讲清问题的本质,再把悲观锁落到 synchronized 的对象头与 monitor,把乐观锁落到 CAS、版本号与 Atomic 原子类,最后讨论锁升级、自旋、阻塞排队与选型。
多线程为什么会读到旧值?从 CPU 缓存、JMM 到 volatile 的全链路拆解
发表于2026-11-01|Java|Java•JMM•volatile•CPU缓存•指令重排•内存屏障•happens-before•DCL
一段 flag 标志位的代码,线程 B 明明看到 flag=true,却可能打印出 a=0。本文先分清并发问题的两类根源——缓存/重排与线程交错,再从 CPU 三级缓存、指令重排序讲到 JMM 的主内存/本地内存、八种操作与 happens-before,最后落到 volatile 的可见性、内存屏障和 DCL 半初始化问题。
RAG为什么答不出全局性和关联性问题? GraphRAG 与 LightRAG 全链路拆解
发表于2026-10-29|RAG|RAG•GraphRAG•LightRAG•知识图谱•社区发现•实体消歧
围绕传统 RAG 的三类失效——切片把逻辑关系切断、全局性问题检索不出来、多跳推理没有交集机制,拆解 GraphRAG 如何用「实体关系图 + 分层 Leiden 社区 + 社区报告」换来全局视角,以及 LightRAG 如何删掉社区、改用双层关键词检索,换来更低的成本、自然的增量与更低的延迟。最后给出两者的四个困点、各自的代价与一套可落地的选型路径。
RAG 为什么总答不准?从切块到混合检索的全链路拆解
发表于2026-10-20|RAG|RAG•向量数据库•Embedding•BM25•Rerank•RAGAS
围绕「RAG 为什么总答不准」这条线索,讲透全流程原理。从 LLM 的知识截止、私有知识缺失与幻觉讲起,把 RAG 拆成「离线存储」与「在线检索」两大阶段:切块的六种策略与父子块、Embedding 三代演进(Word2Vec/BERT/BGE-M3)与多向量检索、向量库的 HNSW/IVF/PQ 三大索引、Bi-Encoder 与 Cross-Encoder 的取舍、Rerank 精排、BM25+向量的混合检索与融合、查询改写,以及检索与生成两层评测指标、RAGAS 框架和幻觉的不确定性量化。
Java 并发基础全解:从进程与线程到多线程、线程安全与死锁
发表于2026-10-16|Java|Java•并发•多线程•进程•线程•上下文切换•线程安全•死锁•虚拟线程•线程池
并发是一座楼,地基是"进程与线程"。本文按"先概念、后原理、再问题"的顺序,从进程与线程是什么讲起,逐层拆开线程私有/共享的资源、Java 线程与操作系统线程的映射、并发与并行、多线程的收益与代价,直到线程生命周期、上下文切换、线程安全与死锁,配全流程图、状态转换表与可运行代码。
一文搞懂 Spring AI Alibaba Graph:状态驱动的 AI Agent 编排引擎
发表于2026-10-15|agent|ReAct•Java•Spring AI Alibaba•AI Agent•Graph
从 ReAct 快速入门到核心概念拆解,讲透 Spring AI Alibaba Graph 状态驱动的图编排引擎:OverAllState、NodeAction、条件边与 Dispatcher、并行扇出扇入、Checkpoint 持久化与中断恢复(HITL),附完整装配示例与避坑清单。
Agent 核心概念全解:从 Workflow 之辨到大脑·规划·记忆·工具
发表于2026-10-14|agent|Skill•Agent•Workflow•Function Calling•MCP•ReAct•Multi-Agent•A2A•大模型
从 Workflow 与 Agent 的本质区别(确定性的下一步 vs 不确定的下一步)切入,系统讲解 Agent 的四大核心组成:大脑(LLM)、记忆、工具(Function Calling/MCP/Skill/渐进式披露)、规划(ReAct/Plan-and-Execute/Reflection/Multi-Agent/A2A),并说明这些架构不是互斥选项而是可叠加的积木。
Redis 为什么又快又省内存?五大类型底层结构与编码切换全解
发表于2026-10-11|Redis|双向链表•Redis•数据类型•底层数据结构•SDS•ziplist•listpack•quicklist•hashtable•intset•跳表•编码转换•Stream•Geo•HyperLogLog
Redis 的快和省,藏在"一套接口、多套内核"的设计里:数据小用紧凑结构省内存,数据大自动切换高性能结构。本文拆解 SDS、跳表、哈希表、listpack 等八种底层结构的来龙去脉,给出五大类型完整的编码切换阈值表与版本演进脉络,并配全命令示例和业务场景。
秒杀系统设计(三):规模扩展——库存分片与容量规划
发表于2026-10-03|后端开发|秒杀•高并发•负载均衡•库存分片•分桶•兜底桶•桶间借调•分库分表•容量规划•QPS•压测
前两篇的方案,都建立在"一个商品、库存 100 件"这个前提上。作为系列第三篇,本文先讨论前提被打破时怎么办:大库存怎么做库存分桶(DB 侧与 Redis 侧,以及路由算法必须一致这条铁律)、多商品怎么分库分表、分片最大的坑"分桶不均导致少卖"的两种解法(预留兜底桶与桶间借调);再回答最实际的问题——基于压测基线与漏斗衰减,逐层算出到底要几台机器。
秒杀系统设计(二):数据正确性——防超卖、分布式锁与一人一单
发表于2026-10-02|后端开发|CAS•悲观锁•乐观锁•Redis•MQ•分布式锁•幂等•Redisson•Lua•秒杀•高并发•超卖•自旋•唯一索引
流量问题解决后,系统活下来了,但不代表数据是对的。作为系列第二篇,本文解决秒杀里两件"必须正确"的事:一是库存不能超卖——从 Redis 侧的 Lua 原子扣减,到数据库侧的四种并发控制方案(悲观锁、乐观锁、CAS 原子 SQL、分布式锁)、三种锁的等待机制,以及"锁必须放在事务外"等三个坑点;二是一人只能有一单——三种实现方案、幂等设计,以及超时未支付的库存回补。
12…13
avatar
青山木
正在学习Java后端开发+智能体开发,希望能与大家多多交流
文章
122
标签
295
分类
9
Follow Me
公告
欢迎来到我的博客,记录学习与成长的点滴。
最新文章
无标题
无标题2026-11-05
多线程为什么会读到旧值?从 CPU 缓存、JMM 到 volatile 的全链路拆解
多线程为什么会读到旧值?从 CPU 缓存、JMM 到 volatile 的全链路拆解2026-11-01
RAG为什么答不出全局性和关联性问题? GraphRAG 与 LightRAG 全链路拆解
RAG为什么答不出全局性和关联性问题? GraphRAG 与 LightRAG 全链路拆解2026-10-29
RAG 为什么总答不准?从切块到混合检索的全链路拆解
RAG 为什么总答不准?从切块到混合检索的全链路拆解2026-10-20
Java 并发基础全解:从进程与线程到多线程、线程安全与死锁
Java 并发基础全解:从进程与线程到多线程、线程安全与死锁2026-10-16
分类
  • Java3
  • LeetCode 热题 HOT 10084
  • RAG2
  • Redis1
  • agent8
  • 博客搭建1
  • 后端开发22
    • RocketMQ6
标签
Rebalance 工作流 缓存穿透 RocketMQ 原地哈希 实体消歧 线程池 PBAC 翻转 Java 双端队列 重试 volatile Redis Top K 回文 二叉树 LFU Cache Aside BM25 双向链表 分治 Canal Lua Graph Gossip 实战 GitHub Pages quicklist 布隆过滤器 模拟 BFS 顺序写 Docker 半消息 有序矩阵 Checklist PageCache LRU 底层数据结构
归档
  • 十一月 2026 2
  • 十月 2026 9
  • 九月 2026 33
  • 八月 2026 9
  • 七月 2026 35
  • 六月 2026 29
  • 五月 2026 1
  • 四月 2026 4
网站信息
文章数目 :
122
最后更新时间 :
© 2025 - 2026 By 青山木框架 Hexo 7.3.0|主题 Butterfly 5.5.4