动手开发一个SKILL-AI技术绘图法宝mermaid-checker
skill如何使用、如何动手开发和上架skill、AI技术绘图法宝mermaid-checker skill👍
skill如何使用、如何动手开发和上架skill、AI技术绘图法宝mermaid-checker skill👍
🔍 来看看Golang 1.25新出的GreenTea GC是怎么个事
RAG graph LR subgraph "Query Process 💬 问答流程" direction TB Q1((用户问题)) --> Q2{{"Embedding模型🧮<br>向量化"}} Q2 --> Q3{"检索Retrieval🔍<br>计算相似度(topK)"} Q3 -.查询.-> VectorDB VectorDB -.topk个结果.-> Q3 Q3 --> Q4[["相关片段📄"]] Q4 -.注入上下文.-> Q5("增强/Augmented🔀<br>Prompt=问题+相关片段") Q1 -.原始问题.-> Q5 Q5 -.输入.-> Q6{{"大语言模型🤖"}} Q6 --> Q7[["最终回答💬"]] end subgraph "Index Process 🔧 离线数据准备" direction TB KB["(私有知识库📚<br>PDF/Word/Wiki)"] --> Chunking("切片/Chunking🔪<br>长文本切分成小段") Chunking --> Embedding{{"Embedding模型🧮<br>向量化"}} Embedding --> VectorDB["(向量数据库🗄️<br> VectorDB ..)"] end style KB fill:#e1f5ff,stroke:#007acc,stroke-width:2px style VectorDB fill:#e1f5ff,stroke:#007acc,stroke-width:2px style Q1 fill:#fff2cc,stroke:#d6b656,stroke-width:2px style Q7 fill:#d5e8d4,stroke:#82b366,stroke-width:2px style Embedding fill:#f0e1ff,stroke:#9673a6,stroke-width:2px style Q6 fill:#f0e1ff,stroke:#9673a6,stroke-width:2px style Q4 fill:#ffe6cc,stroke:#d79b00,stroke-width:2px MCP sequenceDiagram User->>MCP Client/IDE/Agent:User Query(今天天气怎么样?) MCP Client/IDE/Agent->>MCP Server:连接 MCP Server & Get Tools MCP Server->>MCP Client/IDE/Agent:Tools List(文件工具、天气工具...) MCP Client/IDE/Agent->>LLM:User Query(今天天气怎么样?) + Tools List(这些工具可以用) LLM->>MCP Client/IDE/Agent: 建议调用的Tool + 参数(建议使用天气工具 参数:date:'20260127',city:'武汉') MCP Client/IDE/Agent->>MCP Server:使用参数调用Tool(天气工具(date, city)) MCP Server->>MCP Server:内部触发逻辑 MCP Server->>MCP Client/IDE/Agent:返回值/Error(temp:30°, weather:sunny) MCP Client/IDE/Agent->>LLM: Tool的返回值(temp:30°, weather:sunny) note over LLM: 思考、推理 LLM->>MCP Client/IDE/Agent:总结归纳后的自然语言(明日(20260127)天气为晴天,温度30°,建议穿凉爽的衣服) MCP Client/IDE/Agent->>User: 格式化结果 Agent React graph RL Input((Task/Input<br>任务输入)) --> Thought["Thought<br>思考: 分析任务,决定步骤"] subgraph ReAct_Loop ["ReAct Loop 循环"] direction TB Thought --> Action{Action<br>行动: 选择工具/动作} Action -- 调用工具 --> Execute["Environment/Tool<br>执行环境/工具"] Execute --> Observation["Observation<br>观察: 获取执行结果"] Observation --> Thought end Action -- 任务完成 --> Final["Final Answer<br>最终回答"] style Input fill:#fff2cc,stroke:#d6b656,stroke-width:2px style Final fill:#d5e8d4,stroke:#82b366,stroke-width:2px style Thought fill:#e1f5ff,stroke:#007acc,stroke-width:2px style Action fill:#f0e1ff,stroke:#9673a6,stroke-width:2px style Observation fill:#ffe6cc,stroke:#d79b00,stroke-width:2px
Kafka和RocketMQ的架构都是啥样的?功能上有啥区别?性能上谁更强?
缓存一致性组件(优化版的CacheSide)、高可靠轻量延时队列(不是简单的定时任务扫zset)
什么是Rebalance、哪些时候会触发、触发Rebalance会带来哪些坑
先看一个索引未命中问题 1 2 3 4 5 6 7 8 9 10 11 12 CREATE TABLE `type_test` ( `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT, `num` bigint(20) unsigned NOT NULL, `str` varchar(1024) NOT NULL DEFAULT '', PRIMARY KEY (`id`), KEY `idx_num` (`num`) USING BTREE, KEY `idx_str` (`str`) USING BTREE ) DEFAULT CHARSET=utf8; -- 两个查询:where参数的类型和实际类型不一致 EXPLAIN SELECT * FROM type_test where str=1; EXPLAIN SELECT * FROM type_test where num='13'; 你认为上述两个查询都会命中索引吗? ...
Lucene 核心数据结构 (单机视角) Lucene 是如何通过倒排索引实现快速搜索,以及如何解决排序和存储问题的 graph TD subgraph Lucene_Segment ["Lucene Segment (最小索引单元/不可变)"] direction TB subgraph Inverted_Index ["倒排索引 (Inverted Index) - 用于搜索"] TI["Term Index (内存)"] TD["Term Dictionary (磁盘)"] PL["Posting List (磁盘)"] TI --"前缀索引/加速定位"--> TD TD --"关联文档ID"--> PL note1["> 举例: 查找 '小白'<br/>1. Term Index 定位大概位置<br/>2. Dictionary 找到 '小白'<br/>3. Posting List 得到 ID: [0, 1]"] style TI fill:#e1f5fe,stroke:#01579b style TD fill:#fff9c4,stroke:#fbc02d style PL fill:#fff9c4,stroke:#fbc02d end subgraph Storage ["数据存储"] SF["Stored Fields (行式存储)"] DV["Doc Values (列式存储)"] SF --"根据ID获取完整内容"--> Content["文档原始JSON"] DV --"用于排序/聚合"--> Sort["排序/聚合操作"] note2["> Stored Fields: 存完整数据<br/>> Doc Values: 空间换时间,优化排序"] style SF fill:#e8f5e9,stroke:#2e7d32 style DV fill:#f3e5f5,stroke:#7b1fa2 end end Query["搜索请求"] --> TI PL -.->|"得到文档ID"| Storage Elasticsearch 在Lucene基础上的分布式架构 架构图 graph Client["客户端应用"] --> Coord subgraph Cluster["Elasticsearch Cluster (集群)"] subgraph CoordLayer["协调节点层 (请求入口/分发/聚合)"] Coord["协调节点 (Coordinating Node)"] end subgraph MasterLayer["Master 节点层 (集群管理/选主/元数据)"] Master1["Master Node A"] Master2["Master Node B"] Master3["Master Node C"] end subgraph DataLayer["Data 节点层 (存储/搜索/写入)"] Data1["Data Node 1"] Data2["Data Node 2"] Data3["Data Node 3"] end subgraph IndexLayer["Index: news_index (逻辑索引)"] subgraph Shard0["Shard 0"] P0["Primary Shard 0"] R0["Replica Shard 0"] end subgraph Shard1["Shard 1"] P1["Primary Shard 1"] R1["Replica Shard 1"] end end subgraph LuceneLayer["Lucene层 (分片的底层引擎)"] subgraph SegA["Segment A (不可变)"] IIA["倒排索引-用于搜索"] TIA["Term Index-用于加速搜索"] SFA["Stored Fields-doc原始信息"] DVA["Doc Values-排序和聚合"] end subgraph SegB["Segment B (不可变)"] IIB["倒排索引"] TIB["Term Index"] SFB["Stored Fields"] DVB["Doc Values"] end end end %% === 核心链路简化 === %% 1. 请求路由: Coord -> Data Node (物理流向: 先找到持有分片的节点) Coord --"路由写入 / 分发查询"--> Data1 %% 2. 数据处理: Data Node -> Shard (节点调用内部主要分片) Data3 -- "执行请求" --> P0 %% 3. 数据同步: Primary -> Replica (跨节点同步) P1 -.-> R1 P0 -.-> R0 %% 4. 其它关系示意 Master3 -.-|"集群管理"| Data3 R0 -.-|"底层引擎"| SegA %% === 样式定义 === style Cluster fill:#f5f5f5,stroke:#333,stroke-width:2px style CoordLayer fill:#e3f2fd,stroke:#1565c0,stroke-dasharray: 5 5 style MasterLayer fill:#f3e5f5,stroke:#7b1fa2,stroke-dasharray: 5 5 style DataLayer fill:#e8f5e9,stroke:#2e7d32,stroke-dasharray: 5 5 style IndexLayer fill:#fff9c4,stroke:#fbc02d,stroke-dasharray: 5 5 style LuceneLayer fill:#fff3e0,stroke:#e65100 style SegA fill:#ffffff,stroke:#333 style SegB fill:#ffffff,stroke:#333 classDiagram class Cluster { +String cluster_name +List nodes } class Node { +String node_name +List roles +store_data() +coordinate_request() } class NodeRoles { Master Data Coordinating } note for NodeRoles "枚举类型 (Enumeration)<br/>Master: 集群管理<br/>Data: 数据存储<br/>Coordinating: 请求转发" class Index { +String index_name +List shards } class Shard { +int shard_id +LuceneInstance underlying_engine } class PrimaryShard { +sync_to_replica() } class ReplicaShard { +promote_to_primary() } class LuceneInstance { +List segments +merge_segments() } class Segment { +InvertedIndex +StoredFields +DocValues +is_immutable } Cluster *-- Node Node ..> NodeRoles : 扮演角色 Index *-- Shard Shard <|-- PrimaryShard Shard <|-- ReplicaShard Shard *-- LuceneInstance : 底层引擎 LuceneInstance "1" *-- "*" Segment : 包含多个 Node "1" o-- "*" Shard : 承载 note for PrimaryShard "负责写入,同步数据给副本" note for ReplicaShard "提供读能力,主分片挂掉后升级" note for Node "单节点可扩展为多节点集群<br/>通过 Raft 类机制选主" note for LuceneInstance "写入产生新Segment<br/>后台定期合并小Segment<br/>以优化文件句柄和查询性能" 从 Lucene 到 Elasticsearch 的演进 Lucene 作为一个单纯的搜索库,虽然功能强大,但在面对海量数据和高并发场景时存在明显的单机局限性: ...
底层公理:第一性原理的本质 第一性原理源于亚里士多德的定义:“在每一系统的探索中,存在第一原理,是一个最基本的命题或假设,不能被省略或删除,也不能被违反”。 其核心方法论是: ...
WebSocket WebSocket连接建立过程 sequenceDiagram note over Client,Server: TCP三次握手(传输层) Client ->> Server: SYN Server ->> Client: SYNC+ACK Client ->> Server: ACK note over Client,Server: HTTP请求 转换为WebSocket协议(应用层) Client ->> Server: HTTP GET请求<br>GET HTTP1.1<br>Connection:Upgrade<br>Upgrade:websocket<br>Sec-Websocket-Key: 字符串.base64() note over Server: Sec-Websocket-Accept=fn(字符串) Server ->> Client: HTTP 101响应<br>HTTP1.1 101 Switching Protocals<br>Sec-Websocket-Accept:base64码<br>Upgrade:websocket<br>Connection:Upgrade note over Client: check(fn(base64(字符串))=Sec-Websocket-Accept) note over Client,Server: Websocket连接成功 基于TCP长连接<br>(HTTP通常返回消息后就断开了 但是ws没断开) Server ->> Client: Websocket数据帧 Server ->> Client: Websocket数据帧 Client ->> Server: Websocket数据帧 Client --> Server: ...... SSE llm chatbot 挨个吐字的过程展示 ...
sequenceDiagram participant User as 用户 participant Frontend as 前端/App participant Redis as Redis缓存 participant MQ as 消息队列 participant OrderService as 订单服务 participant DB as 数据库 User->>Frontend: 点击"立即抢购" Frontend->>Frontend: 校验(未开始/验证码) Frontend->>Redis: 请求扣减库存 (Lua脚本) alt 库存不足 或 用户已买 Redis-->>Frontend: 返回失败 (秒杀结束) Frontend-->>User: 提示"手慢了" else 库存充足 Redis->>Redis: 预扣库存 (decr) Redis-->>Frontend: 返回成功 (排队中) Frontend->>MQ: 发送"创建订单"消息 Frontend-->>User: 提示"正在为您排队..." loop 轮询结果 Frontend->>Backend: 查询订单结果 end end MQ->>OrderService: 消费消息 OrderService->>DB: 1. 插入订单 (唯一索引防重) OrderService->>DB: 2. 扣减真实库存 alt 数据库事务成功 OrderService-->>Redis: 标记订单创建成功 else 异常/重复 OrderService-->>Redis: 回滚Redis库存 end 秒杀系统的核心挑战 秒杀系统的特点是时间短、并发高、资源少,核心要解决的问题是: ...
荒野大镖客2 PS5 DualSense手柄自适应板机安装教程,以及DSX内UDP红色解决。针对正版/学习版 自适应扳机指的是:DS手柄的扳机随着游戏内的场景,自动切换力度。比如:拉弓是阻尼、射击是咔哒一下、机枪会随着bang bang bang一起抖动 ...
前言 毕设啊毕设,终于落下帷幕。 最后竟然还水了个校优秀毕业设计/计算机系第三名,搞回来了一波论文的打印费😄。 论文选题有点类似增删改查的项目:课堂直播系统。后面为了不让它不那么 CURD 、泯然众人,另一方面是为例论文能凑出字数,自己在前面加了个“基于微服务架构的XXX”。这样一来逼格瞬间就上去了嘛! ...
持续集成 Continuous Integration(CI)和持续交付 Continuous Delivery(CD),在当前 DevOps 的趋势下,具有支柱性地位。 软件交付管道以快速、自动化和可重复的方式从源代码生成发布版本,就类似于工厂里的装配线以快速、自动化、可重复的方式从原材料生产出消费品,完成这项工作的总体设计我们就称之为持续交付,启动装配线的过程我们称之为持续集成 ...
思维导图 GC的概念 GC全称是 garbage collection,即垃圾回收。 新开发的语言(java,python,php等等),在使用的时候,可以使语言用户不必关心内存对象的释放,只需要关心对象的申请即可 ...
LRU LRU算法即淘汰最近一段时间内没有被访问(命中)的数据,最理想的实现方法为双链表+Hash表。 双链表:新加入/新命中的节点放到表尾,空间用完需要淘汰的时候,删除表头(最近一段时间没有被命中)。 双链表可以使添加删除的时间复杂度降到O(1) Hash表:访问的时间复杂度降到O(1) 实现 具体流程写在注释内: ...
分布式锁 基于数据库 乐观锁(数据更新之前先查状态,起冲突就更新失败) 悲观锁(for update,会占有,不利于并发) 获取锁的前提:结果集中的数据没有使用排他锁或共享锁时,才能获取锁,否则将会阻塞。 需要注意的是, FOR UPDATE 生效需要同时满足两个条件时才生效: 数据库的引擎为 innoDB 操作位于事务块中(BEGIN/COMMIT) 实现: ...
最近用到了分库分表,也见识到了某业务表数已经到了几万张。下面主要是对分库分表平滑扩容 这篇文章的学习和整理 分库分表 为了增加db的并发能力,常见的方案就是对数据进行分库分表 ...
起因 实习也有两个多月了,Redis算做是使用得比较多的技术,各种数据结构在日常开发中也是用了个遍。 不过基本是在运维同学搭好的实例上玩耍、在公司基础库封装好的API上进行一通操作。 ...
背景 高并发场景常常想到用多线程来接收网络请求 但是多线程会涉及到CPU的上下问切换,会处理一些操作句柄,连接数比较多的时候,会带来极大的开销 多线程并不是最佳的解决方案! ...