自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 万物皆插件:DeepSeek Harness 的核心架构、Cordis 内核与 Agent 可组合性

DeepSeek Harness 真正有意思的地方,不是它又增加了多少工具,而是它重新定义了 Agent 的扩展单位。过去我们会说:给 Agent 加 Tool给 Agent 加 Memory给 Agent 加 MCP给 Agent 加 Workflow而“万物皆插件”的思路是:Tool 是插件Memory 是插件MCP 是插件Workflow 是插件Agent Loop 是插件Session 是插件Sandbox 是插件Filesystem 是插件UI 是插件。

2026-08-15 13:38:36 241

原创 别再让 AI“自由发挥”:SDD 规格驱动开发,正在重塑软件开发方式

SDD 是一种以“规格说明 Spec”为核心输入的软件开发方法。需求描述 -> 开发理解 -> 编写代码 -> 测试验证 -> 补充文档需求澄清 -> 编写规格 -> 评审规格 -> 生成计划-> 编写测试 -> 实现代码 -> 验证规格 -> 持续维护这里的 Spec 不是一份泛泛而谈的产品说明,而是对系统行为、接口契约、数据约束、异常场景、权限边界和验收标准的结构化描述。系统要解决什么问题?谁可以执行这个操作?输入是什么?输出是什么?哪些情况算成功?哪些情况必须失败?

2026-08-13 21:39:15 265

原创 第一段实习有感

第一次实习让我意识到,一个看似简单的“发布视频”功能,背后可能包含任务建模、账号分配、资源抢占、本地事务、Outbox、Worker、外部异步调用、状态轮询、幂等拦截、失败重试、资源释放和结果统计。真正的工程能力,不是让接口在理想情况下跑通,而是让系统在失败、重启、重复请求和外部依赖不稳定时仍然可控。本文已删除原始材料中的公司名称、平台账号、域名、密码、密钥和其他敏感信息。公开发布时也应继续检查截图、日志和代码中是否包含真实凭证。

2026-08-05 22:38:31 236

原创 Git 不只是提交代码

Git 的学习重点不是背命令,而是建立状态意识:当前在哪个分支?工作区和暂存区分别有什么?本地和远程谁更新?这次操作会不会重写公共历史?掌握工作区、暂存区、commit、引用和远程跟踪分支的关系后,mergerebaseresetrevert和reflog就不再是容易混淆的命令,而是对不同历史状态进行精确操作的工具。建议将本文命令放到临时测试仓库中逐条执行。尤其是和历史清理命令,不要直接在生产仓库尝试。Git 的学习重点不是背命令,而是建立状态意识:当前在哪个分支?工作区和暂存区分别有什么?

2026-08-05 22:04:28 199

原创 登录一次,畅行所有系统:单点登录 SSO 的原理、协议、架构与安全设计

统一身份认证+ 标准协议+ 短期凭证+ 严格回调校验+ 权限与会话治理+ 可审计与可撤销= 可生产化的单点登录系统对新系统而言,OIDC Authorization Code + PKCE 是常见起点;对传统企业系统,SAML 仍有价值;对浏览器安全,BFF + HttpOnly Cookie 通常比把 Token 暴露给前端更稳妥。无论使用何种协议,都必须将state、nonce、PKCE、redirect_uri、issuer、audience、scope、过期、撤销和审计。

2026-08-04 22:24:56 4568

原创 Transformer 为什么能“看懂”整句话?

顺序传递的隐藏状态↓全局可访问的动态关系矩阵↓可并行训练、可扩展堆叠、可统一生成与理解从工程角度看,理解 Transformer 不能停在“QKV 公式”:还要理解 Mask、位置编码、残差归一化、KV Cache、显存带宽、长上下文、并行训练和推理服务。大模型的很多优化,本质上都是在回答同一个问题:如何让 Attention 看到正确的信息,同时用更少的计算、显存和通信完成它。

2026-08-01 22:46:56 3850

原创 布隆过滤器太难删除?深入理解布谷鸟过滤器:原理、源码、性能对比与工程选型

布隆过滤器的优势是简单、成熟、只增集合下表现稳定;布谷鸟过滤器的优势是支持删除、查询只访问两个候选桶,并在部分参数区间内具有良好空间效率。但 Cuckoo Filter 不是免费的升级版:它引入了踢出链、满载失败、并发修改、扩容迁移和指纹删除歧义。只增 + 简单 + 预算有限 -> Bloom Filter动态集合 + 需要删除 -> Cuckoo Filter需要计数/频率 -> Counting/Count-Min 等结构零误判/关键事实 -> 过滤器只做优化,最终回源确认。

2026-07-31 11:12:29 3701

原创 不要把 Skill 写成 Prompt

最常见的问题是 Skill 目标过大,例如“负责所有文档处理”。这会导致触发范围模糊、上下文过长、工具冲突和难以测试。这个 Skill 服务哪类任务?明确不服务什么?输入和输出是什么?哪些步骤必须执行?哪些动作需要用户确认?什么情况下应该停止并报告失败?例如,“PDF 读取和版面验证”比“文档专家”更容易触发和评估;“生成 RAG 评测集”比“AI 工程 Skill”更可控。

2026-07-29 14:28:08 225

原创 别再把 RAG 当作向量数据库

用户问题 -> 查询理解 -> 检索 -> 排序/过滤 -> 上下文组装 -> LLM 生成^ ||-------- 反馈/评估/记忆 -------|它把模型参数中的“静态知识”与外部知识库中的“动态证据”分开。模型负责理解和表达,检索系统负责找到依据,应用层负责权限、时效、引用和事实约束。接收请求:创建 request_id,解析用户、租户、项目和时效要求。Session 初始化:加载最近对话和长期记忆,但不直接把历史全文放入 Prompt。:识别意图、实体、时间范围、语言、是否需要最新版本;

2026-07-28 22:20:34 328

原创 一文彻底搞懂 Harness:从零理解现代 Agent Runtime 的核心架构

Harness 是包裹 LLM 的执行控制平面:它接收用户意图,创建并持久化会话,组装上下文,调用模型,解释模型产生的 Action/Tool Call,执行工具,记录事件和状态,并在完成、失败、暂停、取消或恢复时保持一致性。它不是模型,也不是一个 Prompt 模板。模型负责“提出下一步”,Harness 负责“是否允许、在哪里执行、执行后如何继续、如何恢复和审计”。收到请求:API 将文本、用户身份、仓库范围和幂等键交给 Harness。创建request_id,校验租户和 GitHub 权限。

2026-07-27 15:32:30 6079 21

原创 一文带你掌握Kafka常见面试题

架构:Producer、Consumer、Broker、Topic、Partition、Replica、Controller。性能:顺序写、Page Cache、零拷贝、批量、压缩、分区并行。可靠性:不丢、不重、幂等、顺序性,分别从生产者、Broker、消费者看。运维:消息积压、分区规划、消费者扩容、Broker 资源瓶颈。面试回答 Kafka 时,不要只背概念。先讲清楚“Kafka 解决什么问题”,再讲“为什么能做到高吞吐”,最后补上“消息丢失、重复、顺序和积压怎么处理”,整体就会很完整。

2026-06-13 17:14:39 3825 21

原创 一文带你掌握JVM常见面试题

面试里说“JVM 内存模型”通常指 JVM 运行时数据区,不要和 JMM Java 内存模型混淆。程序计数器:记录当前线程执行到哪条字节码指令。Java 虚拟机栈:每个线程私有,方法调用时创建栈帧。本地方法栈:给 native 方法使用。堆:线程共享,主要存放对象实例,是 GC 管理的重点区域。方法区:线程共享,存放类元信息、常量、静态变量、JIT 编译后的代码等。运行时常量池:方法区的一部分,存放字面量和符号引用。

2026-05-31 20:59:35 2746 22

原创 一文带你掌握计算机网络常见面试题

SYN 泛洪攻击是利用 TCP 三次握手过程发起的攻击。攻击者大量发送 SYN 请求,但不完成第三次 ACK。服务端会为这些半连接分配资源,半连接队列被占满后,正常用户就无法连接。SYN Cookie。增大半连接队列。缩短 SYN 超时时间。防火墙和限流。负载均衡清洗异常流量。一句话:SYN 泛洪就是只开头不收尾,耗尽服务端半连接资源。HTTP:掌握方法、状态码、版本演进和缓存重定向。HTTPS:抓住 TLS 握手、证书、对称和非对称加密。

2026-05-28 18:52:41 2441 16

原创 一文带你掌握Redis常见面试题

16384 是一个工程折中。槽太少,分片不够细;槽太多,集群节点之间需要交换的槽位状态信息会变大。Redis Cluster 节点之间通过 gossip 协议传播集群信息,每个节点都要维护槽位分配状态。16384 个槽既能满足绝大多数分片需求,也能控制元数据开销。基础概念:理解 Redis 为什么快、适合做什么。数据结构:掌握 String、Hash、List、Set、ZSet 及特殊结构的场景。缓存问题:穿透、击穿、雪崩、大 key、热 key 是必问。

2026-05-25 22:33:44 2790 22

原创 一文带你掌握mysql常考面试题

事务是一组操作的集合,要么全部成功,要么全部失败。AAtomicity 原子性:事务内操作要么全成功,要么全失败。主要靠 undo log。CConsistency 一致性:事务执行前后,数据从一个一致状态变成另一个一致状态。IIsolation 隔离性:多个事务并发执行时,彼此影响受隔离级别控制。DDurability 持久性:事务提交后数据不会丢。主要靠 redo log。死锁是多个事务互相等待对方持有的锁,导致都无法继续。互斥。持有并等待。不可剥夺。循环等待。使用。

2026-05-24 16:27:01 850 5

原创 一文带你掌握JUC常考八股!

守护线程是为用户线程服务的后台线程。JVM 退出时,只要没有用户线程存活,即使守护线程还在运行,JVM 也会结束。用户线程会阻止 JVM 退出。守护线程不会阻止 JVM 退出。应用场景:GC 线程、监控线程、定时清理线程等。注意:不要把重要业务逻辑放到守护线程里,因为 JVM 退出时它可能来不及执行完。上下文切换是 CPU 从一个线程切到另一个线程执行。切换时要保存当前线程的寄存器、程序计数器、栈等信息,再恢复另一个线程的信息。保存和恢复线程现场有成本。线程切换可能导致 CPU 缓存失效。

2026-05-23 20:44:21 929 5

原创 Java 后端面试高频题整理(02)

Java 后端面试里,很多题并不难。能不能讲清楚原理能不能讲出底层逻辑能不能形成体系不要只背定义要理解为什么这样设计学会从“原理 -> 优缺点 -> 场景”去回答这样会比单纯背八股更容易通过面试。

2026-05-17 22:33:44 986 3

原创 Canal + Outbox、Kafka 选型与高可用、Caffeine 底层原理总结

本文总结了后端面试中常见的工程问题,包括Canal底层原理、Outbox模式、Kafka选型与高可用机制以及Caffeine本地缓存实现。Canal通过伪装MySQL从库订阅binlog实现数据变更捕获,配合Outbox模式解决业务数据与消息发送的一致性问题。Kafka凭借高吞吐、低延迟和可靠存储成为主流消息队列选择,其高可用通过分区副本机制实现。Caffeine作为高性能本地缓存,采用W-TinyLFU算法优化缓存命中率。这些技术在实际业务链路中各司其职,共同构建可靠、高效的分布式系统架构。

2026-05-15 23:20:56 1238 3

原创 JUC常见八股

第一,进程是操作系统进行资源分配的基本单位,每个进程有独立的地址空间;线程是CPU调度的基本单位,一个进程可以包含多个线程。第二,不同进程之间是相互隔离的,拥有独立的内存空间;同一进程内的线程共享进程的地址空间,包括代码段、数据段等,但每个线程有自己的栈和寄存器。第三,进程之间通信需要通过IPC机制,比如管道、消息队列、共享内存等;线程之间因为共享内存,通信更简单,但也更容易出现线程安全问题。第四,进程创建和切换开销比较大,因为涉及地址空间切换;线程开销较小,切换更快。第五,

2026-05-13 10:03:10 456 3

原创 # synchronized、监视器锁、Mark Word、轻量级锁与重量级锁:一次系统梳理

因为是重量级路径的核心结构。当锁发生竞争、需要阻塞线程、需要唤醒线程,或者涉及wait()notify()这些复杂语义时,轻量级路径已经不够用了。这时锁会膨胀为重量级锁,底层就会使用。典型的owner 当前持有锁的线程recursions 重入次数EntryList 竞争锁失败后等待进入同步区的线程集合cxq 竞争队列,具体实现和版本有关WaitSet 调用 wait() 后进入等待状态的线程集合所以,介绍底层时讲并不是错的。主要描述的是锁膨胀后的重量级实现,不代表每次进入。

2026-05-13 08:00:00 413 1

原创 Java 后端面试高频题整理(字节高频面试题01)

MVCC 通过 ReadView + undo log 版本链,实现了“读历史版本”,从而做到读不加锁,提高并发性能。乐观锁通过“检测冲突”保证并发安全,悲观锁通过“避免冲突”保证并发安全。Spring AOP 本质是通过动态代理,在方法调用前后构建拦截器链,实现对方法执行过程的增强。大 Key 的核心是拆小,热 Key 的核心是分散访问压力并避免缓存击穿。HTTPS 在 HTTP 基础上增加 TLS,通过加密和证书机制保证数据安全。

2026-05-12 21:12:27 678

原创 多线程与并发编程

线程修改变量后。别的线程立刻能看到。防止指令重排序。比较并交换。CPU原子指令。多个线程互相等待资源。谁也不释放。

2026-05-11 21:37:56 724

原创 MySQL常见八股

查询的数据在二级索引内,能直接查到数据,不用回表查询。

2026-04-18 16:28:55 640 1

原创 pai-smart(RAG 系统的聊天助手模块)

聊天助手模块是派聪明系统的核心组件之一,承载了用户与系统之间的主要交互能力。模块通过WebSocket 协议实现双向通信,支持大语言模型(接入了 DeepSeek)输出内容的流式返回;为支持多轮连续对话,该模块集成了 Redis 用于存储和维护用户会话上下文,确保大模型在生成回答时能够“记住”前文内容,维持语义连贯性。同时,模块深度集成了 Elasticsearch,可以为用户提供结构化文本的全文索引和关键词匹配,通过这套混合检索机制,派聪明能在海量本地知识中快速定位与用户问题相关的信息片段。

2026-04-15 22:17:42 357 1

原创 pai-smart(RAG知识库检索模块)

知识库检索模块是派聪明这个 RAG 项目的核心功能模块,我们是基于 Elasticsearch 实现的文档混合检索能力,将语义检索和关键词检索结果结合起来,为用户提供更高质量的搜索体验。该模块依赖于文件上传与解析模块完成的向量化处理,直接使用存储在 Elasticsearch 中的向量数据进行检索。系混合检索:结合语义检索和关键词检索结果,按权重排序返回搜索结果支持指定返回结果数量:通过 topK 参数控制结果数量基于组织标签的数据权限:确保用户只能访问有权限的文档。

2026-04-14 21:40:03 427 1

原创 pai-smart架构流程详解(文件上传模块)

文件上传与解析模块实现了功能。通过 Redis 和 MinIO 的结合,确保大文件上传的可靠性;并通过 Kafka 实现异步处理。模块支持多种文档格式(PDF、Word、Excel)的解析,并提取文本内容用于后续向量化处理。文本向量化通过调用豆包 API 实现,生成的向量数据目前存储在 Elasticsearch 中。

2026-04-14 08:00:00 641 2

原创 pai-smart架构流程详解(用户管理模块)

负责处理用户的功能。

2026-04-13 22:02:25 590 1

原创 RAG常见八股(1)

传统的搜索时将文档全部扔给大模型,让大模型在海量的文档中检索,这种方式影响了大模型的检索精度,而且大量的文档里的无效信息也占用了大模型的上下文窗口。所以RAG是专门解决这个问题RAG是检索,增强,生成。检索:通过向量检索,找到最相关的内容片段增强:把检索到的内容拼进 prompt,生成:LLM 基于这些上下文生成答案1.通过向量检索最相近的几个片段,只提供相关信息给大模型2.将长文档切割成数个chunk,并转化成向量,是每个chunk满足大模型上下文窗口大小。

2026-04-12 21:47:45 725 1

原创 创建一个agent-demo

要写好注释,因为大模型不是“看源码逻辑”,它主要看的是:工具名参数名描述文字。

2026-03-27 22:12:03 412 1

原创 全网最强Elasticsearch快速入门

Mapping 定义了索引里字段的类型、分词规则,是搜索的核心,必须先定义 Mapping,再插入数据,不要让 ES 自动生成类型,会导致搜索不符合预期。核心字段类型创建索引并定义完整mapping(相当于建表)运行后返回acknowledged: true,说明创建成功,后续插入数据必须符合这个字段类型规范。

2026-03-22 19:25:32 663

原创 feed二级缓存设计day05

SingleFlight = 同一时刻,对同一个 key 的请求,只执行一次,结果共享给所有等待者。对于多个请求,只有一个请求能进去,先重查L2(因为第一个请求已经回源了数据库,所以可以直接返回),后回源数据库,- 窗口长度:60秒(可配置)- 分段长度:10秒(可配置)- 分段数量:6个(60/10)- 使用 ConcurrentHashMap<String, int[]> 存储每个key的计数数组。

2026-03-20 18:06:15 393 1

原创 渐进式文件发布day04

草稿:草稿 是知识帖子的一种临时状态,用于用户在发布内容前进行编辑和完善。对象键:对象键 (Object Key)是在对象存储服务(如阿里云OSS)中用于 唯一标识一个对象 的字符串。每一步都可独立失败和重试,草稿状态是整个流程的"检查点",极大提升了用户体验和系统健壮性。- 作用 :清理可能存在的旧缓存,为后续的数据库更新做准备。- 目的 :确保数据库更新完成后,缓存中的旧数据被彻底清除。1.分布式中的唯一标识,而自增ID只能满足单jvm唯一。:从自定义的时间开始,到现在的时间差(单位为毫秒)

2026-03-17 21:42:23 372 1

原创 关于计数系统的优化day03

SDS数据大规模损坏- Redis完全故障- 需要从零重建所有计数。

2026-03-17 14:00:35 248 1

原创 后端day02--计数系统

SDS 是 Redis 底层使用的字符串数据结构 ,全称 Simple Dynamic String (简单动态字符串)。在这个计数系统项目中, SDS 是一个自定义的概念 ,指的是 固定结构的二进制存储格式 ,不是 Redis 原生的 SDS例子:核心思想 :将多个相关的计数字段打包存储在一个 Redis String 中,通过偏移量访问特定字段。

2026-03-15 20:01:44 428

原创 kafka入门

右上角创建主题Topic Name:Topic 的唯一标识,用于消息的发布与订阅(必填):分区数(必填)清理策略,当前选择Delete(删除),表示消息到期后直接删除;另一种常见策略是Compact(压缩),用于保留键的最新值。:副本数,决定每个分区的副本数量,提升数据可靠性,建议 ≥3。:最小同步副本数,要求至少多少个副本完成写入才认为消息提交成功,用于保证数据不丢失。

2026-03-12 21:09:32 434

原创 创建一个知识社区后端day01

toC的后端管理系统,首先我们要先做用户模块采用邮箱,手机号,电话登录。

2026-03-10 21:03:09 348

原创 秒杀项目总结

面向本地生活服务的O2O点评平台,实现用户登录、商铺浏览、优惠券领取、秒杀抢购、探店笔记、关注互动等核心功能,解决用户线下消费决策难的问题。技术栈:Spring Boot + MyBatis-Plus + MySQL + Redis + Redisson + RabbitMQ + JWT + Swagger。

2026-03-08 20:02:12 357

原创 基于消息队列RabbitMq修改黑马点评

配置队列,交换机,不配置消息,队列和交换机虽能恢复,但队列里未消费的消息会全部丢失(秒杀场景会出现“消息已投递到 MQ,但 MQ 宕机后,未处理的订单消息丢失,无法创建订单”)来告知 MQ 消息已成功处理,如果消费端在处理过程中崩溃或抛出异常,且未发送 ACK(确认),MQ 会认为消息未被处理,将其重新入队。只配置队列持久化,当服务宕机时候,队列虽然存在,交换机却删除了,当生产者发送消息的时候,没有找到交换机,会导致消息投递失败。当前业务以及实现了消息的重试,可是这样是不够的,可以有如下提升。

2026-03-07 15:57:58 497

原创 RabbitMq快速入门

消息队列的作用和优势:我们基于redis做秒杀资格的判断,将判断结果发布给消息队列中,监听者收到mq的结果对数据库进行操作优势:解耦:各个业务流程独立进行,其中一个出错不会影响到其他的业务消峰:面对高并发,数据库有大量请求承受不住,可以将请求发送到消息队列中,由消息队列慢慢的处理提速:各个业务异步执行对于之前的同步串行有巨大的效率提升1.引入Mq的pom文件2.在xml文件中配置mq的服务端信息3.引入RabbitTemplate工具类的bean,通过调用它的方法发送消息,如果要接受消息只需要@Rabbit

2026-03-06 23:09:51 396

空空如也

空空如也

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

TA关注的人

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