自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 LangGraph-AI智能体开发框架 - LangGraph 入门案例3 : 基于 LangGraph 实现的智能代理 RAG 系统 (深入理解 RAG 检索)

<think>好的,用户提供了一个很长的关于LangGraph实现代理式RAG系统的技术文档,要求我根据内容生成一个不超过150字的文章摘要。我需要仔细阅读原文档,提取核心要点,然后用简洁的语言概括。 用户的要求是“根据以下内容,生成≤150字的文章摘要”,这里的关键是“≤150字”,这个限制很严格,我必须非常精炼。原文档内容很多,包括系统介绍、编码思路、代码实现细节、运行结果和相关问题解答。 我需要提炼出最核心的信息:这是在LangGraph中构建了一个比传统LCEL链式RAG更智能的代理式R

2026-10-17 09:27:34 316

原创 LangGraph-AI智能体开发框架 - LangGraph 入门案例2 : 支持搜索的智能代理系统(进一步理解由 LangGraph 构成的 agent )

<think>我们根据用户提供的长文内容,生成一篇不超过150字的摘要。需要概括核心:支持搜索的智能代理系统,使用LangGraph+LangChain+Tavily+DeepSeek,实现对话、工具调用、循环决策,介绍了流程、节点、状态、示例等内容。要求≤150字。注意语言简洁。</think>本文介绍了基于LangGraph与LangChain构建的支持联网搜索的智能代理系统:以DeepSeek为LLM,Tavily为外部搜索工具,通过状态图实现“判断-调用工具-整合结果”的循环

2026-10-17 09:27:11 358

原创 LangGraph-AI智能体开发框架 - LangGraph 入门案例1 : 智能快递配送系统

<think>用户要求根据提供的长文本内容生成一篇不超过150字的文章摘要。这是一个关于LangGraph框架的教程,用智能快递配送系统作为案例来解释核心概念。摘要需要精简地概括文章的核心内容,不超过150个汉字。 我需要提取最核心的信息和结构。文章主要讲述了: 用快递配送系统类比LangGraph的图结构 核心概念:State(状态)、节点(Nodes)、边(Edges)、Reducers(更新规则)、编译 编码流程:定义状态、定义节点函数、添加节点/边、编译、执行 强调LangGraph不只

2026-10-02 18:53:45 411

原创 LangGraph-AI智能体开发框架(1) 认识 LangGraph 框架,Agent Server 智能体基础概念与核心能力

我们在 LangChain 的专栏中已经学习过了 LangChain,我们已经知道 AI 世界是如何初步搭建的。ChatGPT 原生模型:对话式 AI,一问一答DeepSeek 客户端:类似的对话助手一些 AI 工具:比如 AI 画画、AI 写文章等在 LangChain 篇章中,我们接入 LLM 构建的 AI 系统有以下特点:单次对话,“记不住” 太多上下文主要是问答模式相对简单的任务什么是 Agent Server?它是更聪明的 AI 助手,想象一个虚拟的 “小助手”,它不仅能回答问题。

2026-10-02 18:53:32 282

原创 LangGraph-AI智能体开发框架(2) LangGraph核心概念: agent、工作流、图计算、State (状态)、Nodes (节点)、Edges (边)

工作流具有预先确定的代码路径,并设计为按特定顺序运行。当需要设计更高复杂性的 AI 应用时,工作流为定义明确的任务提供可预测性和一致性。例如,现在需要研发一款主打城市通勤的智能电动自行车,具有导航、社交、防盗等功能。在开始研发前,需要进行多维度分析,如:用户关注续航里程、车身重量、防盗能力,并对 “骑行社交”(组队、分享路线)有新兴兴趣。传统品牌车型智能化不足;互联网品牌车型续航和线下售后服务是其短板。

2026-09-30 18:02:20 326

原创 LangChain AI应用开发框架核心组件的使用 - 检索器组件 : 检索系统,检索器,使用向量数据库作为检索器,使用 @chain 创建 “检索器”

上述代码中,RunnablePassthrough 我们之前还没有见过,简单来说,RunnablePassthrough 是一个 “伪” Runnable,它的主要作用是在链(Chain)中透明地传递输入数据,而不做任何修改。例如,使用关系数据库的检索系统,检索器可以将问题转换为 SQL 语句,并执行查询,最后将查询结果响应用户。注意,这并不是真正的检索器,检索器是一个 Runnable 对象,而我们定义的只是一个函数,具备其特点罢了。调用可以发现,它是一次性返回,与 invoke 调用无异。

2026-09-30 18:02:05 310

原创 LangChain AI应用开发框架核心组件的使用 - Redis 向量存储 : 理解 Redis 向量存储及相关概念, Redis 向量存储的增删查改, Redis向量搜索(相似性搜索与元数据过滤)

Pinecone 是为机器学习应用量身打造的生产级向量数据库服务,适用于高维向量数据的高效存储、索引与查询。它屏蔽了基础设施管理,提供无缝扩展、实时数据写入和强大安全保障,让开发者和数据科学家能够以极低运维成本,快速构建高效的相似度搜索、推荐系统和 AI 应用。Pinecone 是一个全托管的向量数据库平台,即负责所有后端维护、扩展、更新和监控,让用户专注于应用开发,无需担心数据库管理。(魔法上网)

2026-09-20 17:23:16 345

原创 LangChain AI应用开发框架核心组件的使用 - 向量存储 : 向量数据库,内存存储,向量数据库的增删查改,向量搜索(相似性搜索与元数据过滤)

在 LangChain 中,实际并不需要我们直接手动调用嵌入模型去生成向量,然后手动去比较向量。在我们之前提供的 RAG 知识地图中,存在一个 Vector Stores 向量存储,如下图所示:实际上,向量是被管理在专门的向量存储介质中,如向量数据库。向量存储的核心任务是解决一个传统数据库(如 MySQL)不擅长的问题:基于内容的相似性搜索(Similarity Search),而不是基于精确匹配的查询。根据上图,我们想要从向量数据库中进行相似度搜索,首先就需要将向量存储管理起来。

2026-09-20 17:22:47 225

原创 LangChain AI应用开发框架核心组件的使用 - 文本向量 : 嵌入与嵌入模型,Embeddings 嵌入模型类,处理和查询文档

首先我们要知道,嵌入的结果就是一个向量,它本质上是一个数字列表(一维数组)。例如:[0.023, 0.487, -0.129, ..., 0.325]。嵌入结果得到的列表长度是固定的,称为向量的 “维度”。例如,OpenAI 的 text‑embedding‑ada‑002 模型会生成一个 1536 维的向量,text‑embedding‑3‑large 模型会生成一个 3072 维的向量。维度越高,通常能捕捉更细微的语义信息,但也需要更多的计算和存储资源。向量空间。

2026-09-19 09:38:39 253

原创 LangChain AI应用开发框架核心组件的使用 - 文本分割器组件的使用 : 认识文本分割器,利用文本分割器进行基于字符长度拆分、基于 Token 长度拆分...

目录一、文本分割器 (Text splitters)概念根据文档长度与文档语义拆分二、基于字符长度拆分三、基于 Token 长度拆分四、硬性约束长度拆分五、特殊文档结构拆分我们已经知道可以通过文档加载器完成各种数据源的加载,将其转换为文档对象 Document。那么接下来要做的就是文档拆分。文档拆分通常是将大文本分解为更小的、易于管理的块。这对于索引数据并将其传递到模型中都很有用。因为大块更难搜索并且不适合模型的有限上下文窗口。拆分可以提高搜索结果的粒度,从而可以更精确地将查询与相关文档部分进行匹配。Lan

2026-09-19 09:38:19 299

原创 LangChain AI应用开发框架核心组件的使用 - 文档加载器组件的使用 : 认识 RAG,认识 Document 文档类,使用文档加载器加载 PDF 文档和 Markdown 文件

从本篇文章开始,我们将重点放在 RAG 阶段 (Retrieval‑Augmented Generation,检索增强生成) 。这是当前大语言模型应用的核心模式。RAG 的流程相对复杂,为了更好的理解 RAG,我们先用 AI 搜索来引出 RAG。下图展示了一个最简单的 AI 搜索工作流程,搜索引擎在这里充当知识库,结合我们的查询语句,大模型便可以从知识库中获取相应的查询结果:有了以上流程的铺垫,接下来,正式进入 RAG 的学习。首先,先来思考一个问题:搜索引擎可以帮我们解决实时数据的获取,但获取到的数据也是

2026-09-16 18:34:41 79

原创 LangChain AI应用开发框架核心组件的使用 - 输出解析器组件的使用 : 输出解析器的三种解析方式 : 文本解析、结构化对象解析、JSON 解析

举个生活例子,好比一张登记表,规定好:姓名必须是字符串、年龄必须是整数、手机号不能是空。别人填过来的表单就必须按照这张表的规则来。放到代码里,我们写一个继承 BaseModel 的类,这就是一个 Pydantic 模型。

2026-09-15 15:33:01 567

原创 LangChain AI应用开发框架核心组件的使用 - 示例选择器组件的使用 : 示例选择器的四种选择策略 : Length、Similarity、MMR、Ngram

文章摘要:本文详细介绍了LangChain中的四种示例选择器机制及其应用场景。1)长度选择器基于token数量动态控制示例数量;2)语义相似度选择器通过向量匹配选取最相关示例;3)最大边际相关性选择器兼顾相关性与多样性;4)Ngram选择器依据文本片段重合度排序。这些选择器能有效解决传统少样本学习中的token浪费问题,通过动态筛选示例优化提示工程效果。文章通过反义词、翻译等具体案例,结合代码演示了各选择器的实现方式及参数配置,为构建高效的大语言模型提示模板提供实用指导。

2026-09-15 15:32:42 553

原创 LangChain AI应用开发框架核心组件的使用 - 提示词模板组件的使用(2) : 少样本提示,少样本提示的推理引导,使用示例数据增强 LangChain 信息提取能力

本文系统介绍了少样本提示(few-shot prompting)技术及其在LangChain中的实现方法。主要内容包括:1. 概念解析:少样本提示通过提供少量示例指导大模型执行特定任务,相比零样本提示能有效约束输出格式和推理逻辑。2. 实现方法:使用FewShotChatMessagePromptTemplate将示例转换为模型可理解的对话格式,并嵌入主提示模板。3. 典型应用案例:(1)推理引导:通过分步示例强制模型展示思考过程;(2)信息提取:结合Pydantic模型和工具调用实现结构化输出。文章通过数

2026-09-09 11:44:11 165

原创 LangChain AI应用开发框架核心组件的使用 - 提示词模板组件的使用(1) : 提示词、字符串、占位符模板的使用

由此可得:提示词模板就是一个可复用的提示词蓝图,它允许我们动态地生成提示词,而不是每次都手动编写完整的提示词。一个简单的例子,假设我们想根据一个城市名询问 LLM 其历史,按照之前的做法,我们可以定义HumanMessage("请介绍上海的历史")、HumanMessage("请介绍西安的历史") 消息等等。一举措使得提示工程师更容易合作,重复使用现有的提示,并对其进行微调以实现特定的结果,从而加速对话代理和其他基于语言的应用程序的开发和部署。随着 LLM 的发展,提示变得越来越重要。

2026-09-09 11:44:07 241

原创 LangChain AI应用开发框架核心组件的使用 - 消息组件的使用 : 消息,历史消息的缓存,历史消息的管理(裁剪过滤合并)

本文介绍了LangChain中管理大模型对话的核心组件与方法,重点讲解了消息历史的管理技术。主要内容包括:1. 消息结构解析:详细说明消息角色、内容和元数据的组成,展示OpenAI和LangChain两种消息格式的转换方法。2. 多轮对话实现:通过代码示例演示如何通过维护完整消息列表来保持对话上下文,解决模型无状态的问题。3. 消息管理技术:- 内存缓存:使用InMemoryChatMessageHistory实现对话记忆(已不推荐用于生产环境)- 消息裁剪:基于token数或消息数的修剪方法(trim_m

2026-09-05 21:28:28 651 1

原创 LangChain AI应用开发框架的使用(4) - 聊天模型的流式传输,异步流式输出,深度探索流式传输,使用 LangSmith 跟踪 LLM 应用

多进程通常利用的是多核 CPU 的优势同时执行多个计算任务。每个进程有自己独立的内存管理,所以不同进程之间要进行数据通信比较麻烦。多线程是在一个 cpu 上创建多个子任务,当某一个子任务休息的时候其他任务接着执行。多线程的控制是由 python 自己控制的。线程存在数据同步问题,所以要有锁机制。协程的实现是在一个线程内实现的,相当于流水线作业。由于线程切换的消耗比较大,所以对于并发编程,可以优先使用协程。进程、线程、协程之间的关系"协程,作为一种轻量级的并发编程模型,可以被视为用户态的 “轻量级线程”

2026-09-03 21:23:05 262 1

原创 LangChain AI应用开发框架的使用(2) - 聊天模型的定义、部署、创建与调用

本文摘要:文章介绍了大语言模型(LLM)作为聊天模型的核心能力及其在LangChain中的实现方式。主要内容包括:1)聊天模型的定义及其与纯文本LLM的区别;2)两种定义聊天模型的方式:使用ChatOpenAI类和init_chat_model()工厂函数;3)本地部署LLM的使用方法;4)工具调用的概念与实现,包括工具创建、绑定和调用流程。文章详细说明了各种参数配置、环境变量设置和不同模式下的工具定义方法,并强调了Schema在工具验证中的重要性。通过具体代码示例,展示了如何扩展LLM能力边界、保证信息实

2026-09-03 21:22:44 335 1

原创 LangChain AI应用开发框架的使用(3) - 聊天模型的绑定,聊天模型的结构化输出及使用场景

本文介绍了LangChain聊天模型的绑定工具、结构化输出功能及实用场景。主要内容包括:1. 使用.bind_tools()方法将工具绑定到聊天模型,支持强制调用工具和并行工具调用;2. 通过.with_structured_output()实现结构化输出(Pydantic对象/TypedDict/JSON),便于程序处理;3. 官方工具集(如TavilySearch)的使用方法;4. 结构化输出与工具调用的结合方式及注意事项;5. 典型应用场景如信息提取和少样本提示增强。文章强调结构化输出实现了从字符串到

2026-09-01 23:29:27 223

原创 LangChain AI应用开发框架的使用(1) - 快速上手 LangChain,使用 LangChain 接入大模型组件

安装 OpenAI 包定义大模型参数说明:SystemMessage:表示系统角色消息,系统消息通常作为输入消息序列中的第一条传入,是用来启动 AI 行为的消息。HumanMessage:表示用户角色消息,是来自用户的、从用户传递到模型的消息。

2026-09-01 22:35:45 302

原创 LangChain-AI应用开发框架(7) - LangChain 软件包的安装

在这里执行pip install langchain,安装完之后,我们写代码 import 就能直接识别到库,不会出现 ModuleNotFoundError。但是,如果使用的功能仅在该依赖项的特定版本中可用,则可以选择这样做。如果后面 PyCharm 用的是虚拟环境,这里装的库 PyCharm 看不见,这是新手最容易踩的坑。后续学习过程中,若遇到使用的功能未在上述提到的包中,我们也会提前说明。简单来说,任何尚未拆分到自己的包中的集成,都存在于 langchain‑community 包中。

2026-08-30 16:32:19 174

原创 LangChain-AI应用开发框架(6) - 认识 LangGraph : 面向复杂工作流的图式架构以及技术特点

文章摘要 LangGraph是LangChain生态中针对复杂工作流设计的图式架构框架,解决了传统链式结构在循环、分支、状态维护和人机协作等方面的局限性。其核心优势包括动态路由、条件分支、持久化状态和可视化调试,适用于多轮对话、多智能体协作等场景。自2024年推出后,LangGraph通过版本迭代逐步完善检查点机制、异步支持、子图模块化和生产级部署能力,成为构建高级AI代理的主流工具。与LangChain互补,LangGraph专注于复杂工作流,而简单任务仍可使用链式结构。未来,LangGraph将持续强化

2026-08-30 16:31:54 786

原创 LangChain-AI应用开发框架(5) - 认识 LangChain : LLM 应用开发的核心框架以及 LangChain 能够解决的 6 大问题

文章摘要: LangChain是一个用于开发大语言模型(LLM)应用的核心框架,旨在解决LLM嵌入复杂应用时的六大痛点:幻觉问题、提示词规范、模型切换困难、非结构化输出、知识陈旧及外部工具调用。它通过标准化组件(如提示词模板、检索器、输出解析器)和链式编排(Chain)实现高效工作流,支持Python、JS等主流生态,而C++因开发效率低和生态差异更适用于底层推理(如llama.cpp)。LangChain通过模块化设计(如RAG、Agent)提升开发灵活性,并配套LangSmith等工具形成完整生态。自2

2026-08-26 19:09:32 383

原创 LangChain-AI应用开发框架(4) - AI 时代下的编程范式,Vibe Coding 氛围编程,认识 AI 大模型应用开发框架

更危险的是,它可能会 “幻觉” 出一些不存在的 API、库函数或参数,生成看似正确实则无法运行的代码,这对开发者甄别能力提出了极高要求。它做的是封装适配各类大模型 API、向量库、工具调用、记忆、提示词编排,以链式、模块化的方式把各个组件拼接起来,去调用外部大模型完成复杂业务。因此,在同年 8 月底,Karpathy 改变了口径,他发文表示:"不要幻想有一个万能的 AI 工具能解决所有编程问题,更可行的做法是建立一个结构,让不同的工具在不同场景各司其职,像接力赛一样完成开发任务"。

2026-08-26 19:08:20 547

原创 LangChain-AI应用开发框架(3) - 认识嵌入模型,嵌入模型的接入方式,嵌入模型的应用场景

文章摘要: 嵌入模型(Embedding Model)是将文本、图片等符号转化为数值向量(如3072维浮点数列表)的表示型模型,保留语义信息以供计算机处理,核心应用于语义搜索、RAG(检索增强生成)、推荐系统等场景。与大语言模型(生成文本)不同,嵌入模型仅输出向量,需搭配向量数据库使用。主流模型包括OpenAI的text-embedding-3-large、阿里的Qwen3-Embedding-8B(开源)等,接入方式分API调用(闭源)和本地部署(需GPU资源)。开发中可通过LangChain统一接口切换

2026-08-25 18:28:36 359

原创 LangChain-AI应用开发框架(2) - LLM 大语言模型的三种接入方式 : API 远程调用、开源模型本地部署和 SDK 接入

像 DeepSeek 网页、DeepSeek APP对话都属于现成客户端使用。我们只管输入提问,底层调用模型、网络、鉴权全部由平台帮你封装好了,我们不用写代码,直接拿来用。这是普通用户的用法,不属于原生开发接入方式。API 远程调用:发 http 请求去调用厂商云端大模型,最常用,LangChain 大部分场景都是走这套开源模型本地部署:把模型文件下载到自己电脑 / 服务器,本地跑,不走外网 APISDK 官方客户端库:厂商封装好的代码库,本质内部还是封装 API 请求,不用手写 requests。

2026-08-24 20:10:14 308

原创 LangChain-AI应用开发框架(1) - 认识大模型,认识大语言模型 LLM,LLM 大语言模型的提示词的编写技巧

模型是一个从数据中学习规律的 “数学函数” 或 “程序”。旨在处理和生成信息的算法,通常模仿人类的认知功能。通过从大型数据集中学习模式和洞察,这些模型可以进行预测、生成文本、图像或其他输出,从而增强各个行业的各种应用。可以简单理解为模型是一个 "超级加工厂",这个工厂是经过特殊训练的,训练师给它看了海量的例子 (数据),并告诉它该怎么做。通过看这些例子,它自己摸索出了一套规则,学会了完成某个 "特定任务"。模型就是一套学到的 "规则" 或者 "模式", 它能根据你给的东西,产生你想要的东西。

2026-08-24 20:09:43 515

原创 MySQL数据库 (十九) MySQL图像化界面,MySQL连接池

本文介绍了MySQL图形化界面工具及其核心功能,包括库表管理、SQL编辑执行、数据可视化操作等,并对比了MySQL Workbench、Navicat、DBeaver和DataGrip等主流工具的特点与适用场景。接着阐述了MySQL连接池的原理与优势,通过复用TCP连接、任务队列异步解耦等机制提升高并发场景下的数据库性能。文章指出图形化工具适合日常调试与学习,而连接池技术则适用于长期运行的后端服务,能有效减少连接开销并保护数据库服务。

2026-07-18 18:02:33 479

原创 MySQL数据库 (十八) MySQL访问,C/C++引入MySQL客户端库

本文介绍了如何在C/C++程序中通过MySQL官方提供的Connector/C库实现数据库操作。首先讲解了创建专用数据库账号、配置权限等准备工作,然后详细解析了四大核心接口:mysql_init初始化连接、mysql_real_connect建立TCP连接、mysql_query执行SQL语句、mysql_close关闭连接。文章重点说明了查询操作的特殊处理流程,包括使用mysql_store_result获取结果集、mysql_fetch_row遍历数据行、mysql_fetch_fields获取列名等元

2026-07-16 19:55:20 497

原创 MySQL数据库 (十七) MySQL用户管理,创建修改删除用户,用户的权限管理

MySQL用户管理与权限控制摘要 本文系统讲解了MySQL用户管理和权限控制的核心机制。首先阐述了root账户与普通账户的本质区别:root拥有全部权限,而普通账户权限受限,遵循"最小权限原则"。 主要内容包括: 用户管理 用户信息存储在mysql.user表中 创建用户使用CREATE USER语句,需指定用户名、主机和密码 主机限制包括localhost(仅本地)、%(任意主机)和特定IP 密码修改通过SET PASSWORD实现 权限管理 权限分为表级、库级和全局权限 使用GRAN

2026-07-16 19:54:46 341

原创 MySQL数据库 (十六) MySQL视图,视图的使用,视图的注意事项

MySQL视图是一种虚拟表,不存储数据,而是通过SELECT查询动态生成结果。视图基于一个或多个基表创建,修改视图数据会影响基表,反之亦然。视图能简化复杂查询(如多表连接),提高查询效率和数据安全性。创建语法为CREATE VIEW 视图名 AS SELECT语句,删除使用DROP VIEW。视图使用规则包括:名称唯一、不支持索引/触发器、可控制数据访问权限。注意复杂视图可能影响性能,且只有简单视图支持数据修改。删除视图不会影响基表数据。视图适用于封装常用查询,但需合理使用以避免性能问题。

2026-07-13 22:13:20 313

原创 MySQL数据库 (十四) MySQL事务(上),事务的四大特性,事务的操作方式,事务的隔离级别

本文系统介绍了MySQL事务的核心概念和特性。事务是数据库操作的安全单元,通过ACID特性(原子性、一致性、隔离性、持久性)保证数据安全可靠。文章详细解析了事务的四大隔离级别:读未提交(存在脏读)、读提交(解决脏读但存在不可重复读)、可重复读(MySQL默认级别,解决不可重复读和幻读)、串行化(最高隔离但性能最差)。通过实验演示了各隔离级别下的并发问题及解决方案,强调了事务提交与回滚机制的重要性,并指出InnoDB引擎支持事务而MyISAM不支持。最后建议在保证数据安全与系统性能间选择合适隔离级别,通常可重

2026-07-13 22:11:59 354

原创 Protobuffer(二) proto3语法,嵌套消息 message,向文件中进行读写

1. 为什么分 write.cc 和 read.cc,各自作用、最终目的核心原因:读写分开是两件完全相反的事,拆成两个文件好理解、好调试,真实开发里存文件、读文件也是分开两套逻辑,不会揉在一块乱成一团。先单独说 write.cc 是干什么、最终目的是什么,不只是单纯加联系人。write 的核心任务是「造数据 + 存到硬盘里」。新增联系人只是填充数据的步骤,它完整流程是先打开硬盘上的 contacts.bin 文件,如果之前存过联系人,就先把旧数据读到内存里;

2026-06-26 17:05:17 424

原创 Protobuffer(一) 序列化概念回顾,初识Protobuffer,Protobuffer的快速上手

文章摘要:本文系统介绍了Protocol Buffers(PB)序列化工具的核心概念与使用流程。首先通过电话信号传输、网络通信、数据存储三个场景阐释序列化的本质作用。随后详细讲解PB的定义、特点及开发流程,强调其通过.proto文件定义数据结构、自动生成代码的高效模式。文章重点解析了PB的安装、编译命令、自动生成的C++类结构,并演示了序列化/反序列化的核心接口使用方法。最后通过完整的测试代码展示数据赋值、二进制编解码的全流程,验证PB在数据隐蔽性和传输效率上的优势。全文以通讯录为例,贯穿理论讲解与实战操作

2026-06-26 17:05:09 365

原创 MySQL数据库 (十五) MySQL事务(下),MVCC机制,事务ID,Read view,undo日志

本文深入讲解了MySQL事务一致性及MVCC机制。一致性是ACID的核心目标,通过原子性、隔离性和持久性共同保障。重点剖析了MVCC如何实现RC和RR隔离级别:通过事务ID、隐藏字段(DB_TRX_ID、DB_ROLL_PTR等)和undo日志构建版本链,结合ReadView机制实现读写并发控制。ReadView包含高低水位和活跃事务列表,通过对比事务ID判断数据版本的可见性:RR级别事务首次快照读创建ReadView并复用,保证可重复读;RC级别每次快照读新建ReadView,实现读提交。实验演示了版本链

2026-06-24 12:25:10 769

原创 MySQL数据库 (十三) MySQL索引(下),主键索引,唯一索引,普通索引,复合索引,全文索引

本文系统介绍了MySQL索引的实操部分,重点讲解了五种索引的创建、查询和删除方法。主键索引自带唯一约束且每表唯一,唯一索引保证数据唯一性但可多个存在,普通索引最灵活无约束,复合索引优化多字段查询,全文索引专为文本搜索设计。文章详细演示了各类索引的SQL操作语法,并总结了索引使用原则:优先为高频查询字段建索引,避免低区分度或频繁更新字段建索引。特别强调了复合索引的"最左匹配原则"和"索引覆盖"的重要性,这些是提升查询性能的关键技术。通过本文,读者可以全面掌握MySQL索

2026-06-24 12:24:55 253

原创 MySQL数据库 (十一) MySQL表的内外连接,内连接,左外连接,右外连接

本文介绍了SQL中表的连接操作,重点对比了内连接和外连接的区别。内连接通过笛卡尔积加条件筛选,只保留两表匹配的记录;而外连接会保留主表所有记录,不匹配的字段显示NULL。左外连接保留左表全部数据,右外连接保留右表全部数据,两者可通过交换表位置相互转换。通过员工表、部门表、学生表等实例演示了不同连接方式的应用场景,如查询所有部门(含无员工部门)需使用左外连接。理解这些连接方式的本质差异对编写高效SQL查询至关重要。

2026-06-21 17:30:55 288

原创 MySQL数据库 (十二) MySQL索引(上),认识索引,认识Page,B+树索引结构,聚簇索引和非聚簇索引

MySQL索引是提升数据库查询性能的关键技术,其核心原理类似书籍目录,通过有序组织数据减少磁盘IO次数。索引分为主键、唯一、普通和全文索引等类型,B+树是其主流实现结构,具有矮胖树形和叶子节点链表特性,兼顾点查与范围查询效率。InnoDB采用聚簇索引(数据与主键索引绑定)和非聚簇索引(辅助索引需回表查询)的组合方案,相比MyISAM的非聚簇设计减少了IO次数。索引通过空间换时间优化查询,但会增加写操作开销,需权衡使用。理解索引需结合磁盘硬件特性(如扇区、局部性原理)和MySQL的16KB页交互机制,其本质是

2026-06-21 17:30:42 467

原创 MySQL数据库 (十) MySQL的复合查询,多表查询,自连接,子查询,合并查询

本文系统讲解了MySQL多表查询技术。首先回顾了单表查询的基本语法,包括条件过滤、排序和聚合函数的使用。重点介绍了多表查询的实现方式:通过等值连接消除笛卡尔积,使用自连接处理层级关系,以及各类子查询的应用场景(单行、多行、多列子查询)。特别强调了from子句中的子查询用法,以及union/unionall合并查询的区别。文章通过大量实例演示了如何将复杂查询拆解为分步操作,最终转化为单表查询处理。核心思想是通过关联字段或临时表将多表数据合并为逻辑单表,再应用单表查询技术解决问题。

2026-06-18 21:58:18 396

原创 MySQL数据库 (九) MySQL表的内置函数,日期函数,字符串函数,数学函数,其他函数

本文介绍了MySQL中常用的内置函数,主要包括四大类: 日期函数:如current_date()、current_time()、now()获取当前时间,date_add()/date_sub()进行日期加减,datediff()计算日期差等,适用于时间维度的数据处理和统计。 字符串函数:包括concat()拼接字符串、instr()查找子串位置、ucase()/lcase()大小写转换、substring()截取字符串、replace()替换内容等,满足各类文本处理需求。 数学函数:如abs()取绝对值、b

2026-06-18 21:58:00 379

httpserver.zip

httpserver.zip

2026-05-02

空空如也

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

TA关注的人

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