- 博客(90)
- 收藏
- 关注
原创 从 JMM 到 AQS,我用实验把 Java 并发底层跑了一遍
volatile(Day 2 语义):保证可见性、禁止重排、不保证原子 —— "我写你看得见"CAS(Day 3 机制):原子改状态,冲突自旋重试 —— "写之前比对,插脚就重来"AQS(Day 4 框架):state(CAS 改)+ CLH 队列(park 睡觉 / unpark 叫号)→ ReentrantLock / CountDownLatch / Semaphore / 线程池 Worker 全是它的子孙。
2026-09-03 17:07:00
361
原创 日均 1.5 亿请求的系统,容量评估到底怎么做
单机能扛多少?这里有个高频踩坑点。很多人压测时盯着 CPU:“CPU 到 70% 了,单机容量就是 800 QPS”。错。单机容量的正确定义:P99 不超过 SLO 前提下的最大 QPS。RT 分布是右偏长尾(后面第三节细说),CPU 还没到 70% 时,P99 可能早就超标了。单机容量 = 700 QPS @ P99 300ms(SLO:P99 ≤ 300ms)如果你压测报告里只有一个 QPS 数字没有 RT 边界,这份报告在容量评估上是不能用的。
2026-09-01 18:07:44
374
原创 排序三阶段:粗排→精排→重排,把业务信号灌进 ES 排序管道
为什么不是一阶段全搞?如果把所有业务信号都用的500 个文档每个都要跑 Painless 脚本 → 500 次脚本执行 → 至少 200ms+脚本里 if-else 分支多 → JIT 编译开销大排序逻辑和查询逻辑耦合 → 改一个加权系数要动查询 DSL三阶段的核心思想是渐进式收敛每阶段文档量级缩小一个数量级越往后计算越精细,但文档越少所以总耗时可控阶段之间解耦,改精排逻辑不动粗排。
2026-06-16 14:11:54
377
原创 多路召回架构——精确→覆盖→语义三层召回与 RRF 融合实战
系列第 7 篇。前面六篇把「ES 怎么找文档、怎么打分、怎么调权」讲完了,都是单路召回视角。但医药搜索的真实场景里,单路召回根本不够——用户搜「阿莫西林」,可能要匹配「阿莫西林胶囊」「羟氨苄青霉素」(通用名别名)、「Amoxicillin」(中英文混输)。一条路走到底,召回的天花板很低。,以及 RRF 多路融合机制。
2026-06-16 14:07:33
349
原创 相关性调优实战——业务信号怎么注入 BM25,function_score 三大招
让你可以写 Painless 脚本,自由计算每个文档的分数。灵活性最高,性能代价也最大。
2026-06-16 14:04:58
375
原创 从 Dubbo+ZK 到 Nacos:注册中心深度拆解
Dubbo + ZK + Spring Boot 的关系→ Provider/Consumer 启动流程→ Provider 宕机 Consumer 怎么感知(双层感知 + Failover)→ Cluster 容错为什么在最外层(编排者 vs 执行者)→ Dubbo 2.x vs 3.x(接口级→应用级服务发现)→ CAP 视角:ZK 为什么不适合做注册中心(CP vs AP)→ ZK Leader 宕机对 Dubbo 的影响(Netty 直连,不受影响)
2026-06-15 15:25:54
477
原创 BM25 凭什么让这个文档排第一——TF-IDF 到 BM25 的完整推导
搜索底层认知」系列第 3 篇。上一篇拆了 Analyzer 分词链路,知道搜索串怎么变成 Token。
2026-06-01 14:24:02
314
原创 02-Analyzer分词器-你的召回第一道关口
ik 的主词典没有收录所有医药名词。我们建了一个自定义词典ext.dic# 药品通用名阿莫西林头孢克肟左氧氟沙星布洛芬奥司他韦对乙酰氨基酚...# 剂型关键词胶囊片剂颗粒口服液注射液...# 规格量词组合(关键!0.25g0.25克100mg12粒24粒10片...量词组合为什么要注册为词?因为如果不注册,“24粒” 会被 ik 切成 [“24”, “粒”]。索引时doc的 specification 字段存了24和粒两个 Token。
2026-05-29 15:10:24
429
原创 01-倒排索引原理-搜索引擎为什么能秒搜
搜索底层认知」系列第 1 篇。我在医药电商做搜索,每天跟 ES 的 match query、bool query、function score 打交道。两年来写了上千条 DSL,直到把 Lucene 的倒排索引从磁盘结构到内存缓存完整串了一遍,才觉得自己真的懂了。这一篇把我理解的过程写下来。
2026-05-29 14:34:55
683
原创 一次 Elasticsearch 索引重建与向量化改造的完整迁移记录
我们项目用的 Java Client 版本较旧,直接不支持retrieverDSL 的构建。无法用 Client API 直接构造 retriever 请求只能手拼 JSON 字符串然后发出去搜索工程师这个角色,正在发生质的变化。以前做搜索,核心能力是:分词、倒排、query 改写、相关性调优。现在这些依然是基础,但已经不够了。
2026-05-15 15:36:29
426
原创 Elasticsearch 底层存储与写入链路:从 Segment 到 Merge,一篇搞懂
Segment 是 Lucene 中最核心的存储单元:👉 一个 Segment 就是一个已经写好、不可再修改的小索引文件一个 Index(索引)由多个 Shard(分片)组成,每个 Shard 内部维护了一组 Segment 文件。Index│ ├── Segment 1(不可变)│ ├── Segment 2(不可变)│ └── Segment 3(不可变)├── Segment 1(不可变)└── Segment 2(不可变)translog(transaction log)是 ES 的。
2026-04-22 11:53:56
544
原创 大模型 Prompt 体系与调参完全指南:System/User/Tools Prompt 区别与推理参数实战
System Prompt 是模型的元指令层,定义了模型的身份、行为准则、价值观和输出规范。它在整个会话生命周期中持续生效,类似操作系统的内核参数。User Prompt 是用户与模型交互的直接入口,承载具体的任务需求和待处理数据。它依赖近因效应(Recency Effect)——越靠近当前轮次的内容,模型越关注。角色一句话总结System“我是谁,我该怎么做” —— 全局元指令,优先级最高User“现在做什么” —— 具体任务输入,依赖近因效应Assistant。
2026-04-21 09:17:17
627
原创 AI Agent 技能系统渐进式加载设计
按需、分层次地将信息注入 LLM 上下文。就像搜索引擎不会把整个互联网预加载到内存里,而是先用索引定位,再按需获取详情。Level 1(常驻): 技能元数据 → 让 AI 知道"有哪些能力"Level 2(触发时): 技能主体 → 告诉 AI "怎么用"Level 3(执行时): 参考资源 → 提供深层知识和工具渐进式加载不是偷懒,而是工程取舍:在有限的上下文窗口和无限的技能扩展之间找到平衡点Description 是灵魂:它是整个路由机制的入口,质量直接决定系统的可用性三级加载是最佳实践。
2026-04-21 09:08:49
650
原创 从零拆解一个企业级Prompt:药品数据审核Prompt工程全解析
大语言模型本质上是"下一个词预测"引擎。角色定义是改变模型"基线行为"的最有效手段之一——它相当于给模型设置了一个系统级的人格背景。实验数据表明,一个好的角色定义可以提升输出质量约15%~30%(根据具体任务场景)。│ 角色定义四要素 ││ 1. 身份定位:你是谁?││ 2. 专业领域:你擅长什么?││ 3. 核心任务:你要做什么?││ 4. 行为准则:你怎么做?│陷阱1:角色过于笼统❌ 你是一个AI助手,请帮我审核药品数据。问题:模型不知道自己在这个领域有什么权限和标准,输出会非常随机。
2026-04-03 16:43:10
424
原创 一文搞懂 Workflow 工作流:从原理到企业级落地实战
本文介绍了如何使用Spring AI Alibaba Graph框架构建六要素智能校验工作流。主要内容包括:工作流基础概念与优势、Spring AI Alibaba Graph核心组件解析、实战案例详细实现(状态定义、节点实现、图编译等)、关键技术点(异步并行、策略模式、容错机制)以及最佳实践建议。该框架通过图结构编排业务流程,显著提升复杂AI应用的可维护性和扩展性。
2026-04-03 16:04:41
689
原创 一文搞懂 Workflow 工作流:从原理到企业级落地实战(附完整代码解析)
本文介绍了如何使用Spring AI Graph构建企业级药品六要素检查工作流。文章首先分析了传统工作流实现方式的问题,如代码耦合度高、流程调整困难等,然后详细讲解了工作流的核心概念和Spring AI Graph框架的特性。Spring AI Graph作为轻量级工作流框架,具有简单易用、状态管理、并行执行等优势。文章重点解析了StateGraph、NodeAction和Edge三个核心组件,通过代码示例展示了如何定义节点动作和流转关系。该框架特别适合Java应用的自动化流程和数据处理场景,能够有效解决企
2026-04-03 16:04:14
463
原创 ThreadLocal / InheritableThreadLocal / TransmittableThreadLocal(TTL)学习总结
InheritableThreadLocal 是 ThreadLocal 的一个变体,允许子线程继承父线程中的值。TTL 在提交任务时捕获当前线程的 ThreadLocal 上下文,并在任务执行前后自动传递和恢复特性TTL线程隔离✅✅✅new Thread 继承❌✅✅线程池传递❌❌✅自动清理❌❌✅生产推荐✅❌✅。
2025-12-30 15:33:58
1068
原创 ZooKeeper 系统学习总结
ZooKeeper 是一个为“分布式一致性协调”而生的系统,其价值在于状态与顺序,而非数据本身。理解并尊重其设计边界,是正确使用 ZooKeeper 的前提。
2025-12-30 15:28:44
1168
原创 dubbo系统学习总结
理解 Dubbo 的调用与治理模型判断 Cluster / 重试 / 超时的适用边界理解 SPI 扩展的设计与源码结构能进行 Dubbo vs HTTP 的合理选型从“会用 Dubbo”升级为“理解 Dubbo 为什么这样设计”
2025-12-30 15:07:11
869
原创 Qdrant向量数据库
在提供的上下文约束下,检索与给定目标最相似的点。上下文搜索:当仅提供上下文(没有目标)时,将使用成对的点来生成损失,从而将搜索引导至大多数正例重叠的区域。一个点可以获得的最高分数是 0.0,这意味着许多点的分数可能是 0.0。目标搜索:当提供目标(有或没有上下文)时,分数由两部分组成:整数部分表示相对于上下文的排名,小数部分与与目标的距离有关。如果点更接近正例而不是反例,则每对的上下文分数为 +1,否则为 -1。根据向量相似性和给定的过滤条件检索最近点,并按给定的有效载荷字段分组。
2025-03-24 13:31:59
2546
原创 向量数据库基础
实例是腾讯云中独立运行的数据库环境,是用户购买向量数据库服务的基本单位,以单独的进程存在。一个数据库实例可以包含多个由用户创建的数据库。
2025-03-17 10:25:14
2680
原创 软件设计师:软件工程
可靠性是指一个系统对于给定的时间间隔内、在给定的条件下无失效运作的概率。可以用MTTF/(1+MTTF)来度量,其中MTTF为平均无故障时间。可用性是在给定的时间点上,一个系统能够按照规格说明正确运作的概率,可以用MTBF/(1+MTBF)来度量,其中MTBF为平均失效间隔时间。可维护性是在给定的使用条件下,使用规定的过程和资源完成维护活动的概率。可以用1/(1+MTTR)来度量,其中MTTR为平均修复时间。自顶向下集成不需要驱动模块,自底向上不需要桩模块。检测模块接口、局部数据结构。
2024-10-21 21:44:18
3074
原创 软件设计师:系统开发与运行
判断依据:1、数据流的两端必须有一个是加工2、加工最少要有一个输入数据流和一个输出数据流3、数据流名称在题中不能重名3.1、依赖关系只要在方法局部变量、方法参数位置、方法返回值处使用了另外的类,他们就产生了依赖关系3.2、实现关系3.3、泛化关系3.4、关联关系单向关联跟依赖差不多,不过单向关联的依赖性更强一点
2024-10-14 14:49:15
2214
原创 软件设计师:03操作系统原理
特别注意:这里的磁头它旋转的时候是不会停下来的,也就是在处理记录的时候磁头还是会继续往下转,而不会留下来等记录处理完。顺序处理:(单个读取时间+单个处理时间+X)*(物理块数量-1) + (单个读取时间+单个处理时间)依次类推到倒数第二个记录I结束需要(单个读取时间+单个处理时间+X)*(物理块数量-1)最后的H记录起始位置读取完毕之后再执行处理时间便结束(单个读取时间+单个处理时间)优化处理:(单个读取时间+单个处理时间)*物理块数量。读取A记录需要(单个读取时间+单个处理时间+X)
2024-10-07 12:20:32
2548
原创 软件设计师:02程序语言设计
源程序 -》 词法分析 -》 记号流 -》语法分析 -》语法树 -》语义分析。分析构成程序的字符,及由字符按照构造规则构成的符号是否符合程序语言的规定。编译时独立生成目标程序,源程序和编译程序不参与目标程序的运行过程。记录程序中各个符号的必要信息,以辅助语义的正确性检查和代码生成。编译时不生成独立的目标程序,解释程序和源程序都参与程序运行过程。语法结构错误, if、endif不匹配,缺分号。对每个状态来说,识别字符后转移的状态是不唯一的。对每个状态来说,识别字符后转移的状态是唯一的。
2024-09-30 09:35:41
1941
原创 软件设计师:01计算机组成与结构
解析:内存容量为4GB =》 2^32 B ,所以地址总线宽度是32。位于cpu和主存之间,对程序员透明,cache容量越大,命中率越高。I/O设备发中断信号,向CPU报告,两者并行工作、CPU利用率高。CPU需要一直轮询检查,长时间处于忙等状态,利用率低。仅需要在传送数据块的开始和结束时才需要CPU的干预。在信息传输过程中、附加一些用于检错和纠错的信息。cache与主存之间的映射是 硬件自动 完成的。全相联映射 –> 组相联映射 –> 直接映射。运算器、控制器、寄存器、内部总线。
2024-09-23 18:06:10
2053
原创 ElasticSearch入门到掌握,用心看完这三篇就够了【完结2】
elasticsearch 支持对搜索结果排序,默认是根据相关度算分( _score )来排序。可以排序字段类型有: keyword类型、数值类型、地理坐标类型、日期类型等。全文检索的 match 和 multi_match 查询与 match_all 的 API 基本一致。当我们利用 match 查询时,文档结果会根据与搜索词条的关联度打分( _score ),返回结果时按照分值降序排列。所以不会对搜索条件分词。布尔查询是一个或多个查询子句的组合。算分函数查询,可以控制文档相关性算分,控制文档排名。
2024-09-02 15:46:29
3141
原创 开发团队如何应对突发的技术故障和危机
在数字化时代,软件服务的稳定性至关重要。然而,即便是像网易云音乐这样的大型平台,也难免遇到突发的技术故障。8月19日下午,网易云音乐疑似出现服务器故障,网页端出现502 Bad Gateway 报错,且App也无法正常使用。面对这类情况,开发团队该如何快速响应、高效解决问题,并从中吸取教训以防患未然?又该如何在日常工作中培养团队应对突发事件的能力?让我们一起探讨如何在技术风暴中站稳脚跟,提升团队的应急处理能力吧!在面对突发技术故障时,快速响应和准确的问题定位至关重要。方向二:建立健全的应急预案和备份机制。
2024-09-01 16:58:05
1294
原创 大白话单元测试之mock测试
Mock通常是指,在测试一个对象A时,我们构造一些假的对象来模拟与A之间的交互,而这些Mock对象的行为是我们事先设定且符合预期。这什么意思呢?就是指在测试一个单元方法的时候,我们不想加载其他的类,默认其他类的功能是正常的,只测试这个方法。好吧,我知道其实还是不太明白,那么请看示例。
2024-08-19 13:33:41
5516
原创 Apache Hive详解
Apache Hive是一款建立在Hadoop之上的开源数据仓库系统,可以将存储在Hadoop文件中的结构化、半结构化数据文件映射为一张数据库表,基于表提供了一种类似SQL的查询模型,称为Hive查询语言(HQL),用于访问和分析存储在Hadoop文件中的大型数据集。Hive核心是将HQL转换为MapReduce程序,然后将程序提交到Hadoop集群执行。Hive由Facebook实现并开源。Hive利用HDFS存储数据,利用MapReduce查询分析数据。
2024-08-12 09:57:55
3691
原创 大数据技术之Hadoop(YARN)
Apache Hadoop YARN (Yet Another Resource Negotiator,另一种资源协调者)是一种新的Hadoop资源管理器。YARN是一个通用资源管理系统和调度平台,可为上层应用提供统一的资源管理和调度。它的引入为集群在利用率、资源统一管理和数据共享等方面带来了巨大好处。
2024-08-05 15:47:55
2288
原创 大数据技术之Hadoop(MapReduce)
分布式计算是一种计算方法,和集中式计算是相对的。Hadoop MapReduce是一个分布式计算框架,用于轻松编写分布式应用程序,这些应用程序以可靠,容错的方式并行处理大型硬件集群(数千个节点)上的大量数据(多TB数据集)。MapReduce是一种面向海量数据处理的一种指导思想,也是一种用于对大规模数据进行分布式计算的编程模型。
2024-07-29 10:37:23
2497
原创 大数据技术之Hadoop(HDFS)
文件系统是一种存储和组织数据的方法,实现了数据的存储、分级组织、访问和获取等操作,使得用户对文件访问和查找变得容易;文件系统使用树形目录的抽象逻辑概念代替了硬盘等物理设备使用数据块的概念,用户不必关心数据底层存在硬盘哪里,只需要记住这个文件的所属目录和文件名即可;比如windows操作系统数据:指存储的内容本身,比如文件、视频、图片等元数据:又称之为解释性数据,记录数据的数据;一般指文件大小、最后修改时间、底层存储位置、属性、所属用户、权限等信息。Hadoop分布式文件系统。
2024-07-22 09:41:58
4865
原创 Sentinel限流算法总结
之所以叫漏桶算法,就是把请求看做水,队列看做是一个漏了的桶。因此,在使用令牌桶算法时,尽量不要将令牌上限设定到服务能承受的QPS上限。设置一个窗口的大小,然后窗口是匀速往前滑动的,在一段时间范围内,请求落在同一个窗口的数量大于窗口阈值,就拒绝该请求。在限流的时候,要统计每秒钟的QPS,同样是计数。漏桶的优势就是流量整型,不管并发量如何波动,经过漏桶处理后的请求一定是相对平滑的曲线。Sentinel中的热点参数限流正是基于令牌桶算法实现的。基于令牌桶算法,每秒产生的令牌数量基本就是QPS上限。
2024-07-02 14:06:25
2480
1
原创 分布式事务之Seata框架
传统的单体项目被拆分成多个微服务,一个完整的流程可能涉及到多个服务之间的调用,多个服务的入库操作,为了满足事务的ACID原则,提出了分布式事务。
2024-06-25 13:59:11
2476
原创 2024年,计算机相关专业还值得选择吗?
随着2024年高考落幕,数百万高三学生又将面临人生中的重要抉择:选择大学专业。在这个关键节点,计算机相关专业是否仍是“万金油”的选择?在过去很长一段时间里,计算机科学与技术、人工智能、网络安全、软件工程等专业一直以来是炙手可热的存在,吸引了大批学生前往。然而,随着行业竞争加剧和市场饱和度提高,该类专业是否仍具有长远的发展潜力和就业前景呢?
2024-06-20 14:32:53
499
原创 普通人当前可以入局AIGC行业吗
近年来,人工智能、大数据和云计算等领域的高速发展,使得AIGC(人工智能、大数据、云计算)行业成为一个备受瞩目的领域。他们负责从市场需求和技术可行性的角度,制定人工智能产品的策略和路线图,并协调各个团队的工作。数据工程师是负责处理和管理大数据的专家。他们使用各种工具和技术来收集、清洗和存储海量的数据,并为数据科学家和机器学习工程师提供可靠的数据支持。总的来说,AIGC行业的前景非常广阔,将对社会经济的各个领域产生巨大的影响。随着技术不断进步和应用的拓展,AIGC行业将继续发展壮大,并带来更多的创新和机会。
2024-06-19 14:24:36
1335
原创 ollama部署本地大模型
本地运行大模型的工具,可以运行Llama 3、Phi 3、Mistral、Gemma和其他型号。定制并创建您自己的型号。
2024-06-18 15:03:18
3245
1
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅