自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 消息队列 Kafka 详解:从基本概念到核心原理

幂等性是指同一个操作执行一次和执行多次,最终产生的结果一致。例如,订单系统收到一条订单支付消息。如果同一条支付消息被消费两次,不能让用户账户重复增加余额。

2026-11-05 11:33:53 302

原创 RAG 检索完整流程解析:从 Query 预处理到 LLM 生成答案

用户问题↓Embedding↓向量数据库Query预处理↓Embedding向量化↓Hybrid Retrieval召回↓Rerank精排↓Prompt构建↓LLM生成答案模块作用让问题更适合搜索HyDE利用假设答案增强语义提高召回范围Embedding文本向量化BM25关键词匹配语义匹配Rerank提高准确率提供上下文LLM生成最终答案这就是现代 RAG 系统中一次完整的在线检索流程。

2026-09-25 16:20:37 308

原创 RAG 知识库中的分块与切分:从文档到 Chunk 切片

文档解析完成之后,并不是马上按照 500 个 Token、1000 个 Token 进行切分。通常可以先根据文档本身的结构,把文档划分成若干个较大的逻辑区域。Block(块)# Go语言并发Goroutine 是 Go 中的轻量级并发执行单元......## ChannelChannel 用于 Goroutine 之间的通信......## GMPGo 调度器采用 GMP 模型......Document│││文档中的逻辑结构。章节小节页面段落表格图片代码区域。

2026-09-19 09:22:57 74

原创 从“模型不知道”到“有据可依”:我对 RAG 检索增强生成的理解与实践

RAG 的本质不是“给模型塞更多文字”,而是建立一条可靠的信息供应链:把正确的资料切成合适的粒度,用向量和关键词找到相关内容,再通过精排和 Prompt 约束交给模型生成。如果业务知识经常变化、数据属于私有领域,RAG 通常是比重新训练模型更快、更可控的起点。真正上线前,还需要围绕数据质量、权限、评测集、延迟和成本持续迭代。模型能力决定上限,知识检索的质量则决定答案能不能落地。

2026-09-11 21:02:17 319 1

原创 双 Token 认证机制详解

登录↓↓Access Token访问接口↓Access Token过期↓Refresh Token刷新↓获取新的Access Token↓继续访问Access Token 短期访问,Refresh Token 长期续期,两者结合可以在安全性和用户体验之间取得更好的平衡。

2026-08-22 09:44:01 196

原创 SSE 与 WebSocket 深度对比:从原理到 Gin 实现,彻底搞懂服务器推送

服务器发送事件SSE 是一种基于 HTTP 的服务器推送技术。客户端发起一次 HTTP 请求,服务器保持连接,然后持续向客户端发送数据。客户端 服务器| || || || || || || 连接保持 |服务器发送数据以后,并不会关闭 HTTP 连接。一次请求↓保持连接↓服务器持续发送数据↓服务器持续发送数据↓服务器持续发送数据这就是 SSE 的核心思想。本文主要介绍了 SSE 和 WebSocket,并重点介绍了 SSE。普通 HTTP客户端 → 服务器。

2026-08-14 14:50:58 386

原创 Go实战:基于base64Captcha实现登录图形验证码人机校验

安装base64Captcha创建验证码DriverGenerate生成验证码返回captcha_id和Base64图片用户输入验证码Verify进行校验生成验证码↓保存验证码答案↓返回Base64图片↓用户输入验证码↓Verify验证↓成功 / 失败小型项目可以使用内存Store分布式项目建议使用Redis登录系统建议结合限流、防暴力破解通过图形验证码,可以有效降低自动化攻击风险,提高系统安全性。

2026-08-07 15:31:11 207

原创 Go Map 底层原理演进:从 Bucket 到 Swiss Table

在 Go 开发中, 是使用频率非常高的数据结构。无论是:都离不开 Map。很多 Go 开发者知道:但是当我们执行:的时候,Go 运行时到底做了什么?为什么 Go 的 Map 查询可以达到平均 O(1)?为什么 Go 1.24 又引入了新的 Swiss Table 结构?这篇文章将从 Go Map 的底层实现演进开始,深入分析:这一重大变化。Map 本质是一种基于 Hash 的数据结构。核心思想:基本流程:例如:内部并不是直接保存:而是:三、Go 旧版 Map:Bucket + Overflo

2026-07-31 15:19:10 345

原创 Go语言切片和Map扩容机制详解

Go中的Slice和Map虽然使用简单,但是底层隐藏了复杂的扩容机制。底层是数组append超过容量触发扩容小容量翻倍增长大容量平滑增长扩容会重新分配数组底层是哈希表根据负载因子触发扩容bucket数量翻倍使用渐进式迁移避免阻塞写出更高性能Go代码减少不必要的内存分配更深入理解Go运行时原理Go Runtime源码Go Runtime源码Go官方文档。

2026-07-18 10:22:05 304

原创 Go语言Zap日志库入门与实践:从基础到高级用法

有时候我们希望每条日志都带上应用名称或服务标识,可以通过包装Encoder实现。goif err!= nil {buff.AppendString("[myApp] " + data) // 添加前缀os.Stdout,// 输出:[myApp] 2026-07-10T... INFO ... with prefix快速上手(Development/Production)日志级别控制时间格式化结构化日志颜色美化自定义前缀双写(控制台+文件)按时间、按级别分片。

2026-07-11 11:41:40 229

原创 GORM 单表操作与高级查询

假设我们有一个用户表usersimport ("time"not null"`size:150"`Age uint8if err!= nil {// 自动迁移(仅开发环境推荐)注意:生产环境建议使用版本化迁移工具,如。

2026-07-04 21:33:17 227

原创 JWT令牌认证解析

无状态易扩展适合分布式性能高微服务前后端分离App + API架构中使用非常广泛。

2026-06-27 17:41:12 164

原创 Redis主从复制与哨兵模式:从原理到实战,构建高可用缓存集群

模式作用是否自动故障转移主从复制读写分离、数据备份❌哨兵模式在主从复制基础上实现自动故障转移✅主从复制是基础,解决了读压力和冷备问题。哨兵模式是进阶,解决了运维痛点,让 Redis 集群具备自愈能力。在生产环境中,更大型的集群还可以使用(分片集群),但主从+哨兵已经能满足绝大多数中小规模业务的高可用需求。希望这篇文章能帮你理清 Redis 高可用方案的脉络。主从复制基础上实现自动故障转移 | ✅ |主从复制是基础,解决了读压力和冷备问题。哨兵模式。

2026-06-20 08:55:44 199

原创 Redis 发布订阅模式与持久化机制详解

Redis 发布订阅模式(Pub/Sub)与持久化机制是 Redis 的两大核心特性。发布订阅模式通过频道实现消息解耦通信,具有低延迟但消息无法持久化的特点,适用于实时通知场景。持久化机制包括 RDB 快照和 AOF 日志两种方式:RDB 适合备份恢复,AOF 保证数据完整性,Redis 4.0+ 还支持混合持久化模式。生产环境建议根据需求组合使用这些特性,对可靠性要求高的场景可选用 Stream 替代 Pub/Sub。

2026-06-08 19:48:35 173

原创 Redis 缓存三大坑:穿透、击穿、雪崩,以及过期策略详解

问题现象常见解决方案缓存穿透查不存在的数据布隆过滤器、缓存空值缓存击穿热点 key 过期互斥锁、逻辑过期缓存雪崩大量 key 同时过期随机过期时间、高可用集群。

2026-06-05 14:42:47 308

原创 Redis五个基础数据类型详解

String 是 Redis 中最基础、最常用的类型。一个 Key 对应一个 Value,Redis 默认使用字符串来存储数据。它是二进制安全的,这意味着你可以存储任何形式的数据,例如文本、数字、序列化后的对象甚至图片的二进制流。单个 String 类型的值最大能存储512MB。Redis 的 List 类型实质上是一个双向链表,因此它既可以正向检索,也可以反向检索。它是有序的,且元素可以重复。在链表的头部和尾部进行插入、删除操作非常快,但随机访问(通过索引查找)速度较慢,这点与数组形成鲜明对比。

2026-05-29 14:39:11 390

原创 MySQL约束与索引详解:从入门到精通

约束是对表中字段的限制,用于保证数据的准确性和可靠性。就像现实世界的规则一样,约束确保进入数据库的数据是符合预期的。索引是数据库中为了加快查询速度而建立的辅助数据结构。可以理解为书籍的目录,通过目录快速定位到内容,而不用翻阅整本书。约束和索引约束保证数据质量,是数据完整性的守护者索引提升查询效率,是性能优化的加速器根据业务需求设计合理的约束根据查询模式设计高效的索引定期分析慢查询,优化索引策略避免过度索引,平衡查询效率和更新性能约束宁严勿宽,索引宁缺毋滥。

2026-05-23 16:09:56 373

原创 Go 并发编程:sync 包与 context 包详

sync 包提供了锁、等待组、安全 map 和一次性执行等基础并发原语,是多 goroutine 协同的基石。context 包则更侧重于对 goroutine 生命周期的控制,以及跨调用链传递请求范围的元数据。无论是写基础工具库还是业务服务,熟练掌握这两个包都能让代码更加健壮、优雅。希望本文的梳理对你的 Go 并发编程之路有所帮助!

2026-05-05 11:24:00 207 1

原创 Golang 文件操作与 JSON 处理完全指南

操作推荐方式适用场景读取小文件配置文件、模板逐行读取文本日志分析、CSV 处理写入小文件生成一次性输出多次追加写入日志记录解析命令行flag包通用 CLI 工具JSON 处理UnmarshalAPI 数据交换掌握这些基础操作,你就能在 Go 中轻松应对大多数文件与数据处理的挑战。

2026-04-11 11:08:29 415 1

原创 Go基础(类型转换)

指针类型转换unsafe包慎用,且不推荐使用(用unsafe包时,Go编译器不再帮你做类型检查,会出问题)var q *float64 = (*float64)(unsafe.Pointer(p)) // 不安全转换自定义类型转换type MyInt int //创建一个新类型var b MyInt = MyInt(a) // 可以转接口类型断言。

2026-03-29 15:04:47 484 1

空空如也

空空如也

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

TA关注的人

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