自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(38)
  • 收藏
  • 关注

原创 # Function Calling 幻觉:防御、纠正、兜底

Function Calling 幻觉不会彻底消失,模型迭代会改善但不会根除。把"模型会犯错"当作默认前提来设计,比期待下一个模型版本能解决所有问题更实际。防御层让它少犯错,纠正层让它错了能改,兜底层让系统不崩——三层加起来,多数场景就够用了。—— 焦虑的饼干。

2026-07-09 21:48:59 166

原创 Java Heap Space OOM

在做 LightCatch(拾光)AI 自媒体内容平台时,需要将用户上传的文档切分成小块并向量化(Embedding),存入向量库供后续检索。文档不大,才。但每次点"重新向量化",后端必定 OOM 崩溃。

2026-07-06 00:58:40 166

原创 特别好用的ClaudeCode约束!!!

我用 AI 写代码也有一段时间了,踩过最大的坑其实跟 AI 没啥关系,是我自己问问题的方式有问题。记一下。

2026-07-03 11:38:17 251

原创 Harness Engineering

AI 工程化的瓶颈不再是模型能力,而是围绕模型的基础设施。三年前大家都在问"哪个模型最强";现在更值得问的问题是"我该怎么给这个模型配一套好用的 Harness"。工具迭代很快,这个领域三个月后可能又有新概念。但"人类掌舵,智能体执行"这个方向,大概率不会变。参考资料:Mitchell Hashimoto 博客、OpenAI Codex Engineering Blog、arXiv 2605.13357、O’Reilly / Addy Osmani、腾讯云/阿里云开发者社区 Harness 专题。

2026-07-03 10:46:32 431

原创 Claude Code vs Codex:两个 AI 编码助手的真实使用体验

Claude Code 的确认机制一开始不习惯,但它比 IDE 插件的确认更可控。你可以批量确认,而不是弹窗问 10 次。Codex 在多语言支持上更广,Claude Code 的语言能力主要取决于模型本身(Claude 在 Python/TS/Go 上很强,小众语言表现一般)。Claude Code 现在也有了"规范补全"的尝试,通过/init写入 CLAUDE.md 来指导行为,但这和 Tab 补全是两回事。价格方面。

2026-07-03 10:37:50 558

原创 文件描述符,端口,Socket到底是什么?一篇文章讲清楚

概念本质作用FD整数编号索引内核资源,一切皆文件端口网络层标识在一台机器上区分不同进程Socket内核数据结构封装连接信息,收发数据场景默认TCP❌ 不行✅ 可以,内核做负载均衡UDP✅ 可以,内核复制数据可以但不推荐Socket 是一种 FD,用操作文件的方式操作网络连接。

2026-06-16 10:20:33 370

原创 秒杀场景Redis做预扣减,问题在哪里?

问题后果解法缓存DB不一致多卖或少卖异常路径必须回滚 Redis 库存少卖库存留到结束没人买秒杀订单超时缩到 2 分钟Redis 宕机丢数据库存状态对不上调高 AOF 频率 + 主从哨兵热 Key单节点被打爆静态数据放本地缓存 + 拆分库存 Key一致性靠回滚兜底,高可用靠主从哨兵,高性能靠本地缓存 + 必要时拆 Key。把这三件事想清楚,Redis 预扣减方案就能用。

2026-06-01 14:51:19 249

原创 本地缓存和分布式缓存如何选择?

Caffeine:快,但管好自己就行Redis:能装、能扛、能共享,但要过网络这道坎数据量小、单机部署、追求极致速度 → 本地缓存。数据量大、多机部署、需要全局共享 → 分布式缓存。成熟的项目从来不在两者之间二选一,聪明的做法是把它们叠起来用。!!

2026-05-30 10:44:42 419

原创 ClaudeCode的使用技巧

Claude Code 不是用来聊天的——它是你的终端副驾驶。给它明确的任务、充分的上下文,它能帮你省掉大量的重复劳动。别跟它客套,直接说干什么、在哪干、想达到什么效果。

2026-05-29 13:17:15 407

原创 五大页面置换算法详解

FIFO最弱,Belady 异常直接判死刑LRU效果最好但太贵,实际系统用不起Clock是 LRU 的务实平替,性价比最高,工业界最爱LFU看频率不看时间,需要加衰减机制才能凑合用OPT是理论天花板,只存在于教科书里,用来给你比一比差距学页面置换,本质上就是学"在成本和效果之间做权衡"——这和操作系统的设计哲学是一回事。

2026-05-29 13:09:56 419

原创 MySQL覆盖索引和索引下推,你分得清吗?

概念本质一句话回表二级索引查到主键后,去聚簇索引取数据一次二级索引查询 = 一次随机 I/O覆盖索引查询列全在索引里,直接返回不用回表索引下推在二级索引层面先用条件过滤跳过无效回表覆盖索引和索引下推,都是在"减少回表"这件事上做文章。一个是根本不需要回(覆盖索引),一个是能少回就少回(索引下推)。理解了这一点,你不仅知道它们是什么,还知道它们为什么存在。。

2026-05-28 13:17:07 361

原创 别再让你的索引失效了!最常见的MySQL索引失效的场景全概括

列在索引里无序、你加工了索引列、优化器觉得全扫更划算。面试被问到的时候,先讲这三类大框架,再每类举一两个场景。对方就知道你是真的理解了,不是在背题。。

2026-05-27 10:25:56 379

原创 一篇文章帮你彻底搞懂AOP

AOP 听起来高大上,底层就是代理模式 + 反射/字节码。理解了 JDK 代理和 CGLIB 代理的区别,整个 Spring AOP 的运作机制就通透了。代理对象里面持有目标对象和通知链,方法调用先过通知链再过目标方法——这句话记住了,面试官怎么问都不慌。我是小饼干,把八股拆成能真正讲给别人听的东西。

2026-05-25 20:32:06 320

原创 关于Caffeine,你必须知道这些

Count-Min Sketch 用了一个很巧妙的近似方案:一个 4 行 × N 列的二维数组,每个 key 通过多个哈希函数映射到每一行的某个位置,取这些位置中的最小值作为该 key 的近似访问频率。Caffeine 的解决办法是定期衰减——每隔一段时间把所有计数除以 2,历史高频但现在不热的数据,计数值慢慢降到零,自然就被淘汰了。跟过期的核心区别在于:过期了必须同步等,刷新是异步的,先返回旧值,后台慢慢加载新的,用户无感知。读请求先走 Caffeine,没命中走 Redis,还没有才到 DB。

2026-05-24 15:29:10 369

原创 缓存三兄弟解决方案:缓存穿透,缓存击穿,缓存雪崩,缓存和数据库一致性问题这篇文章让你彻底搞懂!

缓存穿透缓存击穿缓存雪崩现象查一个数据库中也不存在的数据热点 key 刚好过期大量 key 同时过期或 Redis 宕机结果每次都打到数据库(白打)大量请求瞬间打到数据库请求全部打到数据库核心解法缓存空值 / 布隆过滤器分布式锁互斥 / 逻辑过期随机过期时间 / 集群 / 限流一致性解法看业务:允许不一致就延迟删或 Canal,要强一致就分布式读写锁当缓存失效的时候,怎么保护数据库不被压垮。理解了这个,面试官再怎么变着花样问,你都能答到点子上。

2026-05-23 20:33:48 355

原创 你来说说select、poll、epoll

select 和 poll 都是"你挨个问我,我挨个告诉你",连接少还行,多了就是灾难。epoll 是"连接就位了你通知我,没就位你别烦我",这才是真正能扛高并发的玩法。理解了这一层,再去学 Redis 为什么用 epoll,Nginx 为什么用 epoll,就豁然开朗了。我是小饼干,帮你把八股文变成能真正讲给别人听的答案。

2026-05-22 20:35:57 334

原创 每次面试都被问,说说你对Spring IoC 和 DI的理解

你通过注解或 XML告诉 Spring 哪些类是 Bean、Bean 之间谁依赖谁Spring 启动时用反射扫描你的配置,动态创建 Bean 实例根据依赖关系,用反射把被依赖的 Bean 注入进去(setter / 构造器 / 字段三种方式)处理等生命周期回调把创建好的 Bean 放进IoC 容器(工厂模式的体现)你需要用的时候,从容器里取就行了理解了这一套,Spring Boot 自动配置、条件装配那些高级特性,本质上也是基于 IoC 容器做的扩展——万变不离其宗。。

2026-05-22 20:28:22 346

原创 HTTP和RPC有什么区别?好奇怪的问题!

HTTPRPC本质应用层传输协议远程调用思想/框架面向资源(RESTful)动作(方法调用)数据格式通常是 JSON/XML(文本)通常是 Protobuf/Thrift(二进制)性能HTTP/1.1 有队头阻塞更高效,多路复用底层传输仅 TCPTCP / UDP / HTTP / 自定义代表实现典型场景浏览器-服务器、对外 API微服务内部通信HTTP 和 RPC 不是对立的,甚至不应该拿来比较,但是面试官就是会问这个问题。

2026-05-21 21:57:41 542

原创 限流算法:令牌桶限流,漏桶限流,固定窗口限流,滑动窗口限流

如果你想彻底保护老旧系统,不希望它被任何瞬间大流量冲垮,用漏桶算法(Nginx)把流量死死压在平稳的水准。如果你是在微服务网关层保护核心业务,希望在保证安全的前提下尽可能快地处理用户请求,支持弹性突发,用令牌桶算法版权声明:本文归“小饼干”所有,坚持带来硬核、无废话的技术干货!

2026-05-19 21:22:33 362

原创 Redis为什么这么快?

先问个问题:同样是数据库,为什么 MySQL 单台 4 核 8G 的机器 QPS 大概在 5000 左右徘徊,而 Redis 同样的配置能干到 10w+?反观 MySQL,B+ 树确实磁盘 IO 友好,但每次插入删除为了维持平衡,要做节点分裂、合并、数据移动,一套组合拳下来性能损耗不小。这样既享受了多线程的并发收益,又没引入复杂的锁问题,我觉得是很务实的一个改进。这个机制让 Redis 用一个线程就能同时应付成千上万个连接,配合内存操作的极快速度,做到了高并发下的低延迟。靠的就是 IO 多路复用。

2026-05-18 20:00:32 219

原创 ClaudeCode使用体验

我们这行经常讨论"AI 会不会取代程序员"。不会取代程序员,但会彻底改变程序员的工作方式。以前写代码,大部分时间在"敲";现在写代码,大部分时间在"想"和"决策"。那些重复的、机械的部分,Claude Code帮我干了。我可以把精力花在真正需要人的判断力的事情上。它没有让我变懒,它让我变强了。如果你还没试过 Claude Code,我建议你找个项目试一下。不用搞什么大工程,就从一个小功能开始,感受一下那种"被理解"的感觉。

2026-05-18 11:54:11 439

原创 写了代码事务却不回滚?盘点 Spring 事务失效的 7 大坑

开发者姿势不对:异常没抛出或类型不对(坑 1, 2)。代理机制的限制:非 public、final 或类内部调用(坑 3, 4, 6)。基础设施不支持:多数据源配置缺失或存储引擎不行(坑 5, 7)。搞懂了这 7 个坑,下次再遇到事务不回滚的情况,分分钟定位问题。版权声明:本文归“小饼干”所有,专注 Java 技术干货分享。

2026-05-15 14:32:10 297

原创 进程,线程,协程都问烂了,你还答不出来?

特性进程线程协程角色资源分配的基本单位CPU 调度的基本单位用户态轻量级线程内存空间完全独立,相互隔离同进程内共享堆内存共享堆内存,有独立栈切换成本极高(需换页表地址空间)中(需保存上下文)极低(用户态控制)稳定性极高(崩溃互不影响)较差(一个挂全家挂)较差(取决于逻辑)调度方式操作系统内核调度操作系统内核调度用户程序手动调度版权声明:本文归“小饼干”所有,未经许可不得转载。

2026-05-15 14:27:54 387

原创 单例模式的实现

如果你追求简单省事,且对象占用资源不高,饿汉式是首选。如果你追求极致性能和延迟加载,请务必使用。这就是单例模式中的“细节决定成败”。作为 Java 开发者,不仅要会写代码,更要理解代码背后 JVM 和内存模型的运行逻辑。希望这篇分享对你有帮助,我们下次再见!版权声明:本文归“小饼干”所有,欢迎专业讨论。

2026-05-14 21:39:52 340

原创 RAG高级范式

作者:小饼干 | 2026年5月13日。

2026-05-13 10:23:53 331

原创 Query Rewriting:跨越用户与文档的语义鸿沟

Query Rewriting是RAG系统中连接用户与知识库的关键桥梁。从简单的直接改写到复杂的多Query扩展,每种方法都针对特定的语义鸿沟问题。核心思想是:不要期望用户按照文档的方式提问,而是要让系统能够理解用户的各种提问方式。在实际应用中,通常需要组合使用多种方法,形成多层次的query理解体系。通过这种分层策略,可以在成本可控的前提下,最大化检索效果,确保用户的问题能够找到最相关的知识库内容。最终的目标是:无论用户怎么问,系统都能找到正确的答案。

2026-05-12 19:32:15 389

原创 RAG幻觉:从何而来,如何防治

RAG幻觉的产生源于检索失败和生成失控两个关键环节。有效的防治策略需要针对这两个环节分别设计解决方案。最实用的组合——Prompt强约束和检索质量门控——提供了高性价比的防御能力。而高风险场景则需要更严格的四重防御体系。核心原则是:在成本可控的前提下,尽可能地从多个维度限制幻觉产生的可能性。没有任何单一策略能够完全消除幻觉,但合理的组合能够将其控制在可接受的范围内。

2026-05-12 19:03:06 332

原创 微调 vs RAG

基本不变的东西扔给微调(格式、风格、术语)经常变的东西丢给 RAG(具体知识、实时数据)两个都想要?那就两个都用。以上是我最近折腾的一点笔记,欢迎拍砖。如果你有更好的方案,也请告诉我,我还在学习。—— 小饼干。

2026-05-10 22:03:57 377

原创 幂等性如何设计?

最近在做一个电商项目,遇到了一个经典问题:用户在下单页面疯狂点击提交按钮,结果生成了5个相同的订单,扣了5次钱。用户投诉,老板发火,我加班到凌晨三点。这就是典型的幂等性问题。今天咱们就来好好聊聊,怎么让系统变得"聪明"一点,知道哪些请求是重复的,哪些是新的。同一个业务操作,执行一次和执行多次,最终结果都一样。预防为主:能在前端拦截的,不要放到后端分层防护:不要依赖单一方案,多层防护更安全快速失败:发现重复请求,立即返回,减少资源浪费用户体验:给用户明确的反馈,而不是系统错误分析业务场景。

2026-05-05 15:52:45 383

原创 进化论:从 HTTP/1.1 到 HTTP/3 的技术演进全解析

特性HTTP/1.1HTTP/2HTTP/3传输层协议TCPTCPUDP + QUIC数据格式纯文本二进制分帧二进制分帧多路复用无 (串行)有 (受限于 TCP)有 (流之间完全独立)队头阻塞HTTP 层阻塞TCP 层阻塞无阻塞握手延迟2-3 RTT2-3 RTT0-1 RTT连接迁移不支持 (断线重连)不支持支持 (通过 Connection ID)头部压缩不压缩HPACK (静态/动态表)QPACK (解耦同步)!!

2026-05-04 17:24:23 380

原创 #订单超时自动关闭:三种主流方案的技术选型分析

订单超时自动关闭功能的实现,技术方案的选择需要综合考虑业务规模、实时性要求、技术栈现状和团队运维能力等因素。没有绝对"最好"的方案,只有最适合当前业务发展阶段和技术条件的方案。在实际应用中,很多系统会采用组合策略,比如主流程使用消息队列保证实时性,同时配合定时任务作为兜底和补偿机制,这样可以在保证功能可靠性的同时,提供更好的用户体验。希望这篇文章对你了解订单超时方案选型有所帮助。在实际项目中,建议根据具体业务需求进行技术验证和压力测试,选择最适合的方案。

2026-05-01 17:55:29 380

原创 #TCP三次握手:全方位解析

简单来说,TCP三次握手是TCP协议建立连接的过程。它由客户端和服务端之间通过交换三个报文段来完成连接的建立,确保双方都能发送和接收数据,并协商好初始序列号。确保连接可靠性:通过三次确认,保证双方都能收发数据防止历史连接:避免网络延迟导致的错误连接同步序列号:为后续可靠传输奠定基础避免资源浪费:防止服务端建立无效连接理解三次握手的原理和细节,不仅能帮助我们更好地进行网络编程,还能在遇到网络问题时快速定位和解决。希望这篇文章能帮助你彻底理解TCP三次握手。如果有任何问题或补充,欢迎在评论区交流!

2026-05-01 17:46:01 453

原创 MySQL的锁到底有哪些啊?

MySQL的锁 = 三种模式(S/X/自增) × 四种粒度(全局/表/行/自增) × 两种隔离级别(RC/RR)的应用。

2026-04-29 20:12:36 260

原创 读已提交和可重复读到底有啥不一样?为什么RC就不能解决不可重复读和幻读呢?

大家好,我是小饼干。读已提交(Read Committed, RC)和可重复读(Repeatable Read, RR)。很多人知道它们不同,但为什么不同,底层的MVCC机制是如何让它们产生差异的?这就是我们今天要解开的谜题。我会用详细的图例和一步步的推导,带你彻底理解为什么RC不能解决不可重复读和幻读,而RR可以。读已提交和可重复读到底有啥不一样?ReadView的创建时机不同。RC:每次SELECT新建ReadView,能看到本次查询前已提交的所有数据RR。

2026-04-29 19:56:17 398

原创 这篇文章让你彻底搞懂TCP拥塞控制!

如果ACK长时间未返回(超时时间RTO到点),表明网络发生了严重拥塞,可能有大量数据包丢失。处理逻辑:重置阈值重回起点重启慢启动:重新开始指数增长这个“惩罚”最严厉,因为TCP假设网络状况已经恶化到需要完全重新探测。TCP拥塞控制的核心思想是积极试探、谨慎提升、及时回退慢启动:快速探测网络容量拥塞避免:温和增加发送速率快速恢复:对轻微丢包做出快速响应超时重传:对严重拥塞做出强硬反应这套算法在传输效率与网络公平性之间取得了精妙的平衡。

2026-04-25 15:53:33 213

原创 老生常谈,秒杀系统如何设计?

🟢数据库防超卖(方案一)足矣。🟡Redis + Lua(方案三)性价比最高。🔴绝对是 Redis预扣减 + MQ削峰填谷异步化(方案五)的天下。关于架构设计,最忌讳的就是过度设计。一步一步演进,解决当前痛点,才是王道。💬互动时间你公司的秒杀系统用到的是哪一种方案呢?或者是遇到过什么奇葩的超卖 BUG?欢迎在评论区留言和小饼干一起讨论哦!👇我们下期干货见!

2026-04-24 19:21:02 368

原创 Agent到底是个啥?

比如你问它"帮我订一张明天去上海的机票",它需要理解你的意图,然后决定先查询航班信息,再进行价格对比,最后完成预订。举个例子,如果你经常让 Agent 帮你查技术文档,它会记住你偏好的编程语言和技术栈,下次直接给你推荐相关内容。现在的 Agent 技术还在快速发展中,但核心思路已经很清晰了:让 AI 不仅能思考,还能行动。如果你对 Agent 的具体实现感兴趣,可以关注我后续的文章,我会分享一些实战案例和代码实现。简单来说,Agent(智能体)是以大模型为大脑,拥有自主决策和执行任务能力的系统。

2026-04-24 19:10:49 207

原创 不是吧,都2026了,你还搞不懂MVCC?

你看,其实咱们只要跳出那些冷冰冰的名词定义,MVCC 就是一套精巧的“多版本链表 + 活跃名单对比快照”机制。下次面试官再问你:“MySQL 怎么解决读写冲突的?你马上脑子里要浮现出三件套:隐藏字段(标记是谁改的),Undo Log(时光机保留历史),Read View(拍照定格当前状态),再搭配 RC 和 RR 拍照时机的不同。如果你能像小饼干这样,自己在面试草稿纸上画一条版本链,随便写几个活跃事务数组,然后顺着规则给面试官现场推导一遍。

2026-04-16 09:45:37 378

空空如也

空空如也

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

TA关注的人

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