掌握 LangChain 文档处理核心:Document Loaders 与 Text Splitters 全解析
🐇明明跟你说过:个人主页
🏅个人专栏:《深度探秘:AI界的007》 🏅
🔖行路有良友,便是天堂🔖
目录
一、引言
1、什么是LangChain
2、LangChain 在智能应用中的作用
二、Document Loaders 概述
1、什么是 Document Loader
2、常见的 Loader 类型
三、Text Splitters 概述
1、为什么需要 Text Splitter
2、常见的文本切分策略
四、实战示例
1、使用 PDFLoader + RecursiveCharacterTextSplitter 构建文档块
2、多文档加载并批量切分
一、引言
1、什么是LangChain
想象一下,你正在和 ChatGPT 聊天,问它一个复杂的问题,比如:“我上传的这份 PDF 文档里,第三章说的那个算法和第五章的原理有啥关系?”
这时候,你希望 AI 不光能看懂问题,还能读懂文档、记住上下文、把答案说清楚,对吧?😎
这,就是 LangChain 登场的地方!
🌟 简单一句话:
LangChain 是一个帮你构建 “更聪明的 AI 应用” 的框架。
🧩 它能做什么?
LangChain 像一个多才多艺的管家,替你打理 AI 应用的多个方面:
能力 | 举个栗子 🌰 |
---|---|
📄 文档读取 | 支持 PDF、Word、网页、Notion 等多种格式! |
✂️ 文本切分 | 把长文章变成模型“能吃得下”的小块块 |
📦 存储与检索 | 把文档变成向量存在“记忆库”里,方便快速查找 |
🧠 调用大模型 | 接入 OpenAI、Claude、Ollama 等模型对话 |
🪜 工作流链条 | 把多个步骤串成“智能流程”,比如 读取→提问→总结 |
🤔 举个真实的例子:
你想构建一个 智能客服机器人,它能自动读取你的公司文档、PDF 手册、产品说明书,并且回答用户的问题。
你只要这样做:
-
✅ 用 LangChain 的 Document Loader 读取资料
-
✂️ 用 Text Splitter 把文档切成合适的大小
-
📦 存到向量数据库中,比如 FAISS 或 Elasticsearch
-
🤖 用户提问 → LangChain 帮你搜索相关文档片段
-
💬 调用大模型回答问题,还能引用来源!
是不是有点小惊艳?✨
🛠️ 为什么开发者喜欢它?
-
模块化:想换个模型、数据库?一行代码改完!
-
灵活性:适合快速搭建原型,也能打造企业级系统
-
社区活跃:文档全、插件多,成长飞快!
🏁 总结
LangChain = LLM 的超级助理工具箱🧰 + AI 应用的魔法管家🪄
如果你想让 AI 不止聊天,还能 读文档、处理流程、接数据源、当助手——LangChain 会是你的好搭档!
2、LangChain 在智能应用中的作用
在过去,我们想让 AI 做事,大多是“一个模型回答一个问题”——比如问 ChatGPT:“天气怎么样?”它会给你一个答案。
但当我们想让 AI 真正“工作起来”,比如:
-
📄 阅读上百页的 PDF 文档
-
📚 理解多个文件之间的关系
-
🧠 记住用户的历史提问
-
⚙️ 调用外部工具,比如数据库、搜索引擎、API
-
🔁 串联多个步骤,像人一样完成一项任务
👉 光靠一个大模型可不够了!这时,就轮到 LangChain 登场了!
🧰 LangChain 的作用是什么?
可以简单理解为:
LangChain 是连接大模型(LLM)与真实世界的桥梁🌉,让你的 AI 应用更聪明、更有用、更像“工具人”。
✅ 它解决了哪些问题?
智能应用需求 | LangChain 帮你搞定 ✔️ |
---|---|
加载和处理各种格式文档 | 使用 Document Loaders |
将大文本拆分为小块供模型处理 | 使用 Text Splitters |
存储、检索知识片段 | 集成向量数据库(如 FAISS、Chroma 等) |
结合上下文做连续对话 | 支持 Memory 模块 |
自动调用外部工具 / API | Agent + Tool 模块 |
多步骤任务处理流程 | 使用 Chain(链式执行)机制 |
🧠 举个例子:
你要做一个 “AI 法律助手”,目标是能:
-
📂 读取几十份法律文书
-
🤔 回答用户关于具体条款的问题
-
💡 根据上下文推荐可能适用的法规
-
📬 自动生成答复邮件或草案
用 LangChain 的做法大致是这样:
-
用 Document Loaders 加载文书内容 📄
-
用 Text Splitters 切分成模型能处理的小段 ✂️
-
用 Embedding + 向量数据库 存储和快速检索 🧠
-
用 LLM + Chain 回答用户提问,引用相关文档 💬
-
用 Agent + Tool 自动生成邮件并发送 📧
是不是已经能脑补出整个系统架构了?😆
二、Document Loaders 概述
1、什么是 Document Loader
在构建 AI 应用时,我们经常会遇到这样的任务:
“把一份 PDF 文档、网页、Markdown 文件、甚至 Notion 页面内容,喂给大模型,让它理解并回答问题。”
问题来了:这些内容格式五花八门,模型又只接受纯文本或结构化数据,我们该怎么办?🤔
这时,LangChain 提供的 Document Loader(文档加载器) 就派上用场啦!
Document Loader 就像一个“格式转换器”+“文件导入助手”,负责把各种各样的文档 👉 变成大模型能理解的“纯文本+元信息”结构。
📦 一个典型的加载结果长这样:
{"page_content": "这里是文档的正文内容……","metadata": {"source": "my_file.pdf","page": 2}
}
这个结构非常适合后续切分、嵌入向量、检索和问答等操作。
📚 支持哪些格式?
LangChain 内置或扩展支持的 Document Loaders 非常多,几乎覆盖常见的所有数据源:
类型 | 举例 |
---|---|
📄 文件类 | .txt , .pdf , .docx , .md , .csv 等 |
🌐 网络类 | 网页、博客、RSS、Sitemap |
📋 协作类 | Notion、Google Docs、Slack、Confluence |
🗃️ 数据类 | JSON、SQL、Elasticsearch、MongoDB 等 |
🧩 其他 | 自定义 Loader,只要你能解析,都能加! |
Document Loader 是智能应用中第一个“入口守门员”👮♂️,它帮你把“各种格式的知识”变成“模型可读的文本”。
没有它,大模型就只能瞪着 PDF 干瞪眼了 😂
2、常见的 Loader 类型
1️⃣ 本地文件加载器(File Loaders)
这些 Loader 适用于你电脑里的各种文档,比如:
格式 | Loader 名称 | 说明 |
---|---|---|
.txt | TextLoader | 加载纯文本文件 |
.pdf | PyPDFLoader , PDFMinerLoader 等 | 支持按页加载 PDF 文档 |
.docx | UnstructuredWordDocumentLoader | 解析 Word 文件 |
.md | UnstructuredMarkdownLoader | 加载 Markdown 文件 |
.csv | CSVLoader | 逐行加载 CSV 文件内容 |
📌 提示:PDF 支持的 Loader 有多个,可按需选择,比如:
-
PyPDFLoader
: 按页加载,保留分页信息 -
PDFPlumberLoader
: 更适合带复杂格式的 PDF
2️⃣ 网络内容加载器(Web Loaders)
想让 AI 看网页、博客、Sitemap?这些 Loader 派上用场:
数据源 | Loader 名称 | 说明 |
---|---|---|
网页 | WebBaseLoader | 读取网页内容(可自定义解析器) |
RSS | RSSFeedLoader | 加载 RSS 订阅内容 |
Sitemap | SitemapLoader | 扫描整站结构并加载页面内容 |
3️⃣ 协作平台加载器(SaaS & Cloud Docs)
适用于现代团队的“云端知识库”,比如:
平台 | Loader 名称 | 说明 |
---|---|---|
Notion | NotionDBLoader | 加载 Notion 数据库中的页面 |
Google Docs | GoogleDriveLoader | 加载 Google 文档、表格等 |
GitHub | GitHubRepoLoader | 加载 GitHub 仓库中的代码文件或文档 |
Slack | SlackLoader | 加载 Slack 聊天记录 |
📝 很适合用于构建企业内部知识问答系统!
4️⃣ 数据库 / 数据源加载器(DB/Data Source)
当你的知识存储在结构化数据库或其他系统中时:
数据源 | Loader 名称 | 说明 |
---|---|---|
SQL 数据库 | SQLDatabaseLoader | 连接数据库并提取数据 |
Elasticsearch | ElasticsearchLoader | 加载已有索引中的数据 |
MongoDB | MongoDBLoader | 读取 MongoDB 集合内容 |
JSON | JSONLoader | 加载本地或远程 JSON 文件 |
🔗 有些数据库 Loader 可与 ORM / SQLAlchemy 结合使用。
5️⃣ 自定义/非结构化内容加载器
当你遇到“杂七杂八”的文档,比如 HTML、扫描图像、邮件正文……也不用怕:
类型 | Loader 名称 | 说明 |
---|---|---|
任意文本块 | UnstructuredFileLoader | 自动识别结构,适配多种格式(PDF, HTML, EML等) |
邮件 | UnstructuredEmailLoader | 提取 EML/MSG 邮件内容 |
图片 | UnstructuredImageLoader | OCR 图像并提取文字内容(需 Tesseract) |
🧠 “Unstructured” 系列 Loader 是 LangChain 的秘密武器,适配面非常广!
✅ 总结一张图:Loader 类型一览表
📁 本地文件类 → Text, PDF, Word, Markdown, CSV
🌐 网络页面类 → HTML 网页, RSS, Sitemap
☁️ 协作平台类 → Notion, Google Docs, GitHub, Slack
🗃️ 数据源/数据库类 → SQL, MongoDB, Elasticsearch, JSON
🌀 非结构化类 → Email, HTML, OCR 图片, 多格式文档
三、Text Splitters 概述
1、为什么需要 Text Splitter
当我们使用大语言模型(LLM)处理文档时,比如问它:
“请总结这份 200 页的产品白皮书”📄
你可能会遇到👇这种“灵魂打击”:
❌ 模型回复:文本太长,我读不下去了!
因为 大多数模型对输入长度是有限制的(比如 GPT-4 的上下文长度是几千到几万 token,不等于几万字)。文档太长会:
-
❌ 超出 token 限制,直接报错
-
❌ 信息太杂,模型难以理解上下文
-
❌ 检索性能下降,影响回答质量
于是,LangChain 中的 “Text Splitter(文本切分器)” 就成了救场英雄 🦸♂️!
🧠 Text Splitter 是干嘛的?
通俗来说:
Text Splitter 就是一个“聪明的剪刀 ✂️”,它把一整段大文本,裁剪成模型可以处理的小段落,并尽量保留上下文逻辑。
✅ 为什么一定要切分?
原因 | 举个例子 🌰 |
---|---|
📏 模型有输入长度限制 | 一次最多只能看几千 token |
🔍 检索更精准 | 小段落更容易关联关键词 |
🧠 上下文更清晰 | 避免模型迷失在长篇大论中 |
🧪 后续处理更灵活 | 每段可以独立做嵌入、摘要、问答等操作 |
2、常见的文本切分策略
🧱 1. CharacterTextSplitter
—— 纯文本切分砖头式 🧱
📌 按固定字符数切分文本,最基础的策略。
-
优点:简单粗暴,适用于没有结构的纯文本
-
缺点:容易在中间截断句子,影响上下文理解
🧠 适合场景:纯文本日志、没有结构的长段文字
🧠 2. RecursiveCharacterTextSplitter
—— 递归智能剪刀 ✂️
📌 优先按段落 > 句子 > 单词 > 字符切分,保持最大完整性。
-
优点:保留语义结构,尽可能避免切断上下文
-
缺点:略比
CharacterTextSplitter
慢一些,但更智能
🌟 这是 LangChain 默认推荐使用的切分器!
🧠 适合场景:通用文本、PDF、网页内容、问答任务等
🔡 3. TokenTextSplitter
—— 模型视角的切分器 🔍
📌 按 Token 数量切分文本,而不是字符数!
-
优点:精确控制模型的输入上限,避免超出上下文窗口
-
缺点:需要引入 Tokenizer(如 OpenAI 或 HuggingFace)
🔍 每个 token ≈ 0.75 个英文单词,适合多语言文本处理
🧠 适合场景:需要严格控制 token 长度(如 GPT-3.5/4)
📄 4. MarkdownTextSplitter
—— Markdown 专用 ✍️
📌 识别标题、列表、代码块等 Markdown 结构,有结构感地切分。
-
优点:支持 Markdown 语法,切分结果更有层次感
-
缺点:不适合非 Markdown 文档
🧠 适合场景:知识库、技术文档、博客文章
🧬 5. SpacyTextSplitter
—— 语言学视角的切分器 📚
📌 用 NLP 工具 Spacy 对文本按句子切分,更具语言理解力。
-
优点:语义层面更精细,尤其适合自然语言句子
-
缺点:依赖第三方库,处理速度较慢
🧠 适合场景:高质量问答、摘要、学术文章
🧾 一张表对比:快速选择适合的切分器 ✅
Splitter 名称 | 切分方式 | 优点 | 适用场景 |
---|---|---|---|
CharacterTextSplitter | 按字符数切分 | 简单快速 | 纯文本 |
RecursiveCharacterTextSplitter | 递归结构切分 | 最推荐,保留语义 | 通用文档、问答系统 |
TokenTextSplitter | 按 token 数切分 | 精准控制输入 | Token 限制敏感任务 |
MarkdownTextSplitter | 识别 Markdown 结构 | 有层次感 | 技术文档、博客 |
SpacyTextSplitter | 按句子切分 | 更符合语言逻辑 | NLP 高质量处理 |
四、实战示例
1、使用 PDFLoader + RecursiveCharacterTextSplitter 构建文档块
🧠 系统目标
构建一个能同时处理:
-
✅ 文本内容(用于问答/摘要)
-
🖼 图片内容(用于图文搜索、OCR 或视觉问答)
🧱 系统组件架构
[PDF 文档]
│
├── PDF 文本块提取 ---> 文本切分(RecursiveCharacterTextSplitter)
│ ↓
│ 文本文档块 (List[Document])
│
├── PDF 图片提取 ---> 图片切片、OCR(可选)
↓
图片数据块 (List[ImageDocument])
│
└── 图文融合文档构建 ---> 图文统一格式:带文本+图片的 Document
↓
最终图文文档块 (List[FusedDocument])
✅ 第一步:提取文本块
from langchain.document_loaders import PyPDFLoader
from langchain.text_splitter import RecursiveCharacterTextSplitter# 加载 PDF 文本
pdf_loader = PyPDFLoader("example.pdf")
pages = pdf_loader.load()# 切分文本块
splitter = RecursiveCharacterTextSplitter(chunk_size=1000, chunk_overlap=100)
text_chunks = splitter.split_documents(pages)
第二步:提取图片块 + 可选切分/OCR
import fitz # PyMuPDF
from PIL import Image
from io import BytesIOimage_chunks = []doc = fitz.open("example.pdf")for page_num, page in enumerate(doc):images = page.get_images(full=True)for img_index, img in enumerate(images):xref = img[0]base_image = doc.extract_image(xref)image_bytes = base_image["image"]image_ext = base_image["ext"]image = Image.open(BytesIO(image_bytes))# 可选:切分图片或运行 OCRimage_chunk = {"page": page_num + 1,"index": img_index + 1,"image": image,"description": f"第{page_num+1}页的图片{img_index+1}"}image_chunks.append(image_chunk)
💡 OCR 可选:可结合
pytesseract
提取图片中的文字以增强图文问答。
🔗 第三步:图文融合文档块
我们把图像信息整合进 LangChain 的 Document 中(或自定义类):
from langchain.schema import Documentfused_documents = []# 文本块先入
for chunk in text_chunks:fused_documents.append(chunk)# 图片块转为 Document(注意可自定义内容结构)
for image_data in image_chunks:doc = Document(page_content=f"[图像] {image_data['description']}",metadata={"type": "image","page": image_data["page"],"image_obj": image_data["image"]})fused_documents.append(doc)
📌 建议:将图像保存为本地路径或上传后使用 URL,再嵌入 metadata。
🤖 最终用途(示例)
构建向量索引(仅文本内容 + OCR 图像文字):
from langchain.vectorstores import FAISS
from langchain.embeddings import OpenAIEmbeddings# 只索引文本文档
vectorstore = FAISS.from_documents(text_chunks, OpenAIEmbeddings())
问答应用(图文支持):
-
用户提问时,匹配文本块
-
如果命中含图文 metadata 的块,可联动前端展示图片
-
图片块也可通过关键词 OCR 搜索检索
2、多文档加载并批量切分
要实现 多 PDF 文档的批量加载 + 切分(支持后续统一向量化、入库),我们可以使用 PyPDFLoader
或 UnstructuredPDFLoader
,配合 RecursiveCharacterTextSplitter
进行统一处理。
下面是完整且实用的代码示例 ✅
🧠 完整代码逻辑:
import os
from langchain.document_loaders import PyPDFLoader
from langchain.text_splitter import RecursiveCharacterTextSplitter# 设置你的 PDF 文件夹路径
pdf_folder = "./docs"# 初始化空列表收集所有文档
all_documents = []# 遍历目录下所有 PDF 文件
for filename in os.listdir(pdf_folder):if filename.endswith(".pdf"):file_path = os.path.join(pdf_folder, filename)# 加载当前 PDFloader = PyPDFLoader(file_path)documents = loader.load()# 添加文档元信息(可选)for doc in documents:doc.metadata["source_file"] = filenameall_documents.extend(documents)print(f"总共加载了 {len(all_documents)} 个页面 📝")# 切分文档块
splitter = RecursiveCharacterTextSplitter(chunk_size=1000, chunk_overlap=200)
split_docs = splitter.split_documents(all_documents)print(f"切分后文档块数: {len(split_docs)} ✅")
📌 输出样例:
总共加载了 85 个页面 📝
切分后文档块数: 431 ✅
🧰 补充建议
功能 | 方法 |
---|---|
📌 元信息添加 | 用于记录文件名、页码等,方便溯源 |
🧠 多格式支持 | 用 UnstructuredLoader 支持 Word、HTML、TXT 等 |
💾 存入向量库 | 用 FAISS.from_documents() 或 Chroma.from_documents() |
🔐 大模型向量化 | 使用 OpenAIEmbeddings 、HuggingFaceEmbeddings 等 |
💕💕💕每一次的分享都是一次成长的旅程,感谢您的陪伴和关注。希望这些文章能陪伴您走过技术的一段旅程,共同见证成长和进步!😺😺😺
🧨🧨🧨让我们一起在技术的海洋中探索前行,共同书写美好的未来!!!
相关文章:
掌握 LangChain 文档处理核心:Document Loaders 与 Text Splitters 全解析
🐇明明跟你说过:个人主页 🏅个人专栏:《深度探秘:AI界的007》 🏅 🔖行路有良友,便是天堂🔖 目录 一、引言 1、什么是LangChain 2、LangChain 在智能应用中的作用 …...
Oracle — 总结
Oracle 公司及产品概述 公司背景 Oracle(甲骨文)是全球领先的数据库软件和服务提供商,成立于1977年,核心产品包括: Oracle Database:关系型数据库管理系统(RDBMS)。Java:…...
【Vue 3全栈实战】从响应式原理到企业级架构设计
目录 🌟 前言🏗️ 技术背景与价值🩹 当前技术痛点🛠️ 解决方案概述👥 目标读者说明 🧠 一、技术原理剖析📊 核心概念图解💡 核心作用讲解🔧 关键技术模块说明⚖️ 技术选…...
升级kafka4.0.0,无ZK版本
设备规划: 172.20.192.47 kafka-0 172.20.192.48 kafka-1 172.20.192.49 kafka-2 单机块7TB Nvme磁盘一共9块 # 格式化成GPT分区 sudo parted /dev/nvme0n1 --script mklabel gpt sudo parted /dev/nvme1n1 --script mklabel gpt sudo parted /dev/nvme2n1 --s…...
GESP2025年3月认证C++二级( 第三部分编程题(1)等差矩阵)
参考程序: #include <bits/stdc.h> using namespace std;int n, m; // 声明矩阵的行数 n 和列数 mint main() {// 输入两个正整数 n 和 mscanf("%d%d", &n, &m);// 遍历每一行for (int i 1; i < n; i)// 遍历每一列for (int j 1; j &…...
Linux系统启动相关:vmlinux、vmlinuz、zImage,和initrd 、 initramfs,以及SystemV 和 SystemD
目录 一、vmlinux、vmlinuz、zImage、bzImage、uImage 二、initrd 和 initramfs 1、initrd(Initial RAM Disk) 2、initramfs(Initial RAM Filesystem) 3、initrd vs. initramfs 对比 4. 如何查看和生成 initramfs 三、Syste…...
单序列双指针---初阶篇
目录 相向双指针 344. 反转字符串 125. 验证回文串 1750. 删除字符串两端相同字符后的最短长度 2105. 给植物浇水 II 977. 有序数组的平方 658. 找到 K 个最接近的元素 1471. 数组中的 k 个最强值 167. 两数之和 II - 输入有序数组 633. 平方数之和 2824. 统计和小于…...
K8s CoreDNS 核心知识点总结
文章目录 一、章节介绍背景与主旨核心知识点及面试频率 二、知识点详解1. CoreDNS 概述2. 工作原理(高频考点)服务发现流程 3. 配置与插件系统(高频考点)核心配置文件:Corefile常用插件 4. Pod DNS策略(中频…...
Java视频流RTMP/RTSP协议解析与实战代码
在Java中实现视频直播的输入流处理,通常需要结合网络编程、多媒体处理库以及流媒体协议(如RTMP、HLS、RTSP等)。以下是实现视频直播输入流的关键步骤和技术要点: 1. 视频直播输入流的核心组件 网络输入流:通过Socket或…...
卓力达电铸镍网:精密制造与跨领域应用的创新典范
目录 引言 一、电铸镍网的技术原理与核心特性 二、电铸镍网的跨领域应用 三、南通卓力达电铸镍网的核心优势 四、未来技术展望 引言 电铸镍网作为一种兼具高精度与高性能的金属网状材料,通过电化学沉积工艺实现复杂结构的精密成型,已成为航空航天、电…...
label-studio功能常用英文翻译
Projects 项目 Settings 设置 Labeling Interface 标注界面 1、Computer Vision 计算机视觉 Semantic Segmentation with Polygons 多边形语义分割 Semantic Segmentation with Masks 掩码语义分割 Object Detection with Bounding Boxes 边界框目标检测 Keypoint Label…...
2025年PMP 学习十六 第11章 项目风险管理 (总章)
2025年PMP 学习十六 第11章 项目风险管理 (总章) 第11章 项目风险管理 序号过程过程组1规划风险管理规划2识别风险规划3实施定性风险分析规划4实施定量风险分析规划5规划风险应对执行6实施风险应对执行7监控风险监控 目标: 提高项目中积极事件的概率和…...
Jenkins 执行器(Executor)如何调整限制?
目录 现象原因解决 现象 Jenkins 构建时,提示如下: 此刻的心情正如上图中的小老头,火冒三丈,但是不要急,因为每一次错误,都是系统中某个环节在说‘我撑不住了’。 原因 其实是上图的提示表示 Jenkins 当…...
Jenkins 安装与配置指南
Jenkins 安装与配置指南(MD 示例) markdown Jenkins 安装与配置指南 ## 一、环境准备 1. **系统要求** - 操作系统:Linux/macOS/Windows - Java 版本:JDK 8 或更高(建议 JDK 11)2. **安装方式** - **L…...
使用unsloth对Qwen3在本地进行微调
Fine-tune Qwen3(100% locally) 使用unsloth进行微调,使用huggingface在本地运行model。 load model from unsloth import FastLanguageModel import torchMODEL = "unsloth/Qwen3-14B" model,tokenizer = FastLanguageModel.from_pretrained(model_name=MODE…...
GpuGeek 实操指南:So-VITS-SVC 语音合成与 Stable Diffusion 文生图双模型搭建,融合即梦 AI 的深度实践
GpuGeek 实操指南:So-VITS-SVC 语音合成与 Stable Diffusion 文生图双模型搭建,融合即梦 AI 的深度实践 前言 本文将详细讲解 So-VITS-SVC 语音合成与 Stable Diffusion 文生图的搭建方法,以及二者与即梦 AI 融合的实践技巧,无论你…...
CSS- 3.1 盒子模型-块级元素、行内元素、行内块级元素和display属性
本系列可作为前端学习系列的笔记,代码的运行环境是在HBuilder中,小编会将代码复制下来,大家复制下来就可以练习了,方便大家学习。 HTML系列文章 已经收录在前端专栏,有需要的宝宝们可以点击前端专栏查看! 点…...
使用exceljs将excel文件转化为html预览最佳实践(完整源码)
前言 在企业应用中,我们时常会遇到需要上传并展示 Excel 文件的需求,以实现文件内容的在线预览。经过一番探索与尝试,笔者最终借助 exceljs 这一库成功实现了该功能。本文将以 Vue 3 为例,演示如何实现该功能,代码示例…...
7. 进程控制-进程替换
目录 1. 进程替换 1.1 单进程版: 1.2 进程替换的原理 1.3 多进程版-验证各种程序替换接口 2. 进程替换的各种接口 2.1 execl 2.2 execlp 2.3 execv 2.4 execvp 2.5 execle 1. 进程替换 上图为程序替换的接口,之后会详细介绍。 1.1 单进程版&am…...
关于计算机系统和数据原子性的联系
目录 1、计算机架构 1.1、处理器架构 1.2、内存寻址能力 1.3、性能差异 1.4、软件兼容性 1.5、指令集 1.6、开发和维护 2.、基本数据类型 3、原子类型 3.1、基本概念 3.2、基本数据类型的原子性 3.3、原子操作的解释 3.4、不保证原子性 3.5、解决方案 4、原子性…...
Armijo rule
非精线搜索步长规则Armijo规则&Goldstein规则&Wolfe规则_armijo rule-CSDN博客 [原创]用“人话”解释不精确线搜索中的Armijo-Goldstein准则及Wolfe-Powell准则 – 编码无悔 / Intent & Focused...
从数据包到可靠性:UDP/TCP协议的工作原理分析
之前我们已经使用udp/tcp的相关接口写了一些简单的客户端与服务端代码。也了解了协议是什么,包括自定义协议和知名协议比如http/https和ssh等。现在我们再回到传输层,对udp和tcp这两传输层巨头协议做更深一步的分析。 一.UDP UDP相关内容很简单…...
Prometheus实战教程:k8s平台-Mysql监控案例
配置文件优化后的 Prometheus 自动发现 MySQL 实例的完整 YAML 文件。该配置包括: MySQL Exporter 部署:使用 ConfigMap 提供 MySQL 连接信息。Prometheus 自动发现:通过 Kubernetes 服务发现自动抓取 MySQL 实例。 1、mysql 配置文件 &…...
执行apt-get update 报错ModuleNotFoundError: No module named ‘apt_pkg‘的解决方案汇总
Ubuntu版本ubuntu18.04 报错内容: //执行apt-get upgrade报错: Traceback :File “/usr/lib/cnf-update-db”, line 8, in <module>from CommandNotFound.db.creator import DbcreatorFile “/usr/lib/python3/dist-packages/CommandNotFound/db…...
QT6 源(101)篇一:阅读与注释 QPlainTextEdit,其继承于QAbstractScrollArea,属性学习与测试
(1) (2) (3)属性学习与测试 : (4) (5) 谢谢...
Redis(2):Redis + Lua为什么可以实现原子性
Redis 作为一款高性能的键值对存储数据库,与 Lua 脚本相结合,为实现原子性操作提供了强大的解决方案,本文将深入探讨 Redis Lua 实现原子性的相关知识 原子性概念的厘清 在探讨 Redis Lua 的原子性之前,我们需要明确原子性的概念…...
ios打包ipa获取证书和打包创建经验分享
在云打包或本地打包ios应用,打包成ipa格式的app文件的过程中,私钥证书和profile文件是必须的。 其实打包的过程并不难,因为像hbuilderx这些打包工具,只要你输入的是正确的证书,打包就肯定会成功。因此,证书…...
Python生成器:高效处理大数据的秘密武器
生成器概述 生成器是 Python 中的一种特殊迭代器,通过普通函数的语法实现,但使用 yield 语句返回数据。生成器自动实现了 __iter__() 和 __next__() 方法,因此可以直接用于迭代。生成器的核心特点是延迟计算(lazy evaluation&…...
C++11(2)
文章目录 右值引用和移动语义在传参中的提效list容器push_back & insert右值版本的模拟实现类型分类 (了解即可)引用折叠万能引用 完美转发(跟引用折叠有关) 简介:这篇文章是继续介绍C11的一些新语法知识点,也是对…...
unity terrain 在生成草,树,石头等地形障碍的时候,无法触发碰撞导致人物穿过模型
1.terrain地形的草,石头之类要选择模型预制体 2.在人物身上挂碰撞器和刚体,或者单挂一个character controller组件也行 3.在预制体上挂碰撞盒就好了,挂载meshcollider会导致碰撞无效...
以项目的方式学QT开发C++(二)——超详细讲解(120000多字详细讲解,涵盖qt大量知识)逐步更新!
API 描述 函数原型 参数说明 push_back() 在 list 尾部 添加一个元素 void push_back(const T& value); value :要添 加到尾部的元 素 这个示例演示了如何创建 std::list 容器,并对其进行插入、删除和迭代操作。在实际应用中&am…...
养生:健康生活的极简攻略
在追求高效生活的当下,养生也能化繁为简。通过饮食、运动、睡眠与心态的精准调节,就能轻松为健康续航。 饮食上,遵循 “均衡、节制” 原则。早餐用一杯热豆浆搭配水煮蛋和半个苹果,唤醒肠胃活力;午餐以糙米饭为主食&am…...
C语言-8.数组
8.1数组 8.1.1初试数组 如何写一个程序计算用户输入的数字的平均数? #include<stdio.h> int main() {int digit;//输入要求平均数的数字double sum=0;//记录输入数字的和int count=0;//记录输入数字的个数printf("请输入一组数字,用来求平均数,以-1结束\n&quo…...
代码随想录算法训练营第四十一天
LeetCode题目: 739. 每日温度496. 下一个更大元素 I503. 下一个更大元素 II 其他: 今日总结 往期打卡 739. 每日温度 跳转: 739. 每日温度 学习: 代码随想录公开讲解 问题: 给定一个整数数组 temperatures ,表示每天的温度,返回一个数组 answer &…...
c++,windows,多线程编程详细介绍
目录 一、C11 标准库 <thread> 实现多线程编程1. 基本线程创建2. 线程管理3. 线程传参4. 同步机制5. 异步编程 二、Windows API 实现多线程编程1. 基本线程创建2. 线程管理3. 线程传参 三、两种方法的对比 在 Windows 平台上使用 C 进行多线程编程,可以通过 C…...
Python多线程
Python多线程 作为一名Python开发者,你是否遇到过这样的场景:程序需要同时处理多个任务,但单线程执行效率太低?这时候,多线程技术就能派上用场了。本文将带你深入浅出地理解Python多线程,并通过丰富的示例…...
VisionPro斑点寻找工具Blob
斑点寻找工具Blob 斑点概述 斑点分析 探测并且分析图像中的二维形状Blob是先根据用户设定好的灰阶范围对图像进行分割,然后对目标进行查找和分析。斑点报告多种属性: 面积质心周长主轴…….. 应用场景 Blob分析非常适合以下场合的应用: 对…...
【Python】【面试凉经】Fastapi为什么Fast
核心的关键词:ASGI、原生异步、协程、uvloop、异步生态、Pydantic编译时生成校验代码、DI system预计算依赖树 interviewer 00:32:49 FastAPI 它优越于其他一些主流web框架像 django或 flask 的这个点在哪里? 我 00:33:00fastapi 就是说它的 fast 性能高…...
LocalDateTime类型的时间在前端页面不显示或者修改数据时因为LocalDateTime导致无法修改,解决方案
1.数据库中的时间数据,在控制台可以正常返回,在前端无法返回,即显示空白,如下图所示: 2.这种问题一般时由于数据库和我们实体类的名称不一致引起的,我们数据库一般采用_的方式命名,但是在Java中我们一般采用…...
【Linux】gcc从源码编译安装,修改源码,验证修改的源码
前阵子电脑使用的win10,win10过几天就让升级,烦得不行。 然后把操作系统切换到ubuntu24的样子,然后也是让升级,又烦的不行,然后切换到ubuntu server版本,感觉用起来要舒服些了,至少不会天天让升级。 回到标…...
牛客网NC22157:牛牛学数列2
牛客网NC22157:牛牛学数列2 📝 题目描述 🔍 输入输出说明 输入描述: 输入一个整数 N,范围在 0 到 1000 输出描述: 输出一个保留6位小数的浮点数 示例: 输入:2输出:1.500000 …...
智能手表集成测试报告(Integration Test Report)
📄 智能手表集成测试报告(Integration Test Report) 项目名称:Aurora Watch S1 测试阶段:系统集成测试 测试周期:2025年xx月xx日 – 2025年xx月xx日 报告编号:AW-S1-ITR-2025-001 版本…...
1C:ENTERPRISE 8.3 实用开发者指南-示例和标准技术(Session1-Session3)
1C:ENTERPRISE 8.3(1课-3课) 本博客是全网首个关于1C:Enterprice的中文指南,支持快速吸收使用 1C:Enterprise 8.3 软件开发和调整应用程序的技术 在这篇博客中我会基于实际应用示例,演示各种系统对象的结构、功能和用法。使用内…...
AgenticSeek开源的完全本地的 Manus AI。无需 API,享受一个自主代理,它可以思考、浏览 Web 和编码,只需支付电费。
一、软件介绍 文末提供程序和源码下载 AgenticSeek开源的完全本地的 Manus AI。无需 API,享受一个自主代理,它可以思考、浏览 Web 和编码,只需支付电费。这款支持语音的 AI 助手是 Manus AI 的 100% 本地替代品 ,可自主浏览网页…...
Java类一文分解:JavaBean,工具类,测试类的深度剖析
解锁Java类的神秘面纱:从JavaBean到测试类的深度剖析 前言一、JavaBean 类:数据的守护者(一)JavaBean 类是什么(二)JavaBean 类的特征(三)JavaBean 类的使用场景(四&…...
2025认证杯数学建模第二阶段C题:化工厂生产流程的预测和控制,思路+模型+代码
2025认证杯数学建模第二阶段思路模型代码,详细内容见文末名片 一、探秘化工世界:问题背景大揭秘 在 2025 年 “认证杯”数学中国数学建模网络挑战赛第二阶段 C 题中,我们一头扎进了神秘又复杂的化工厂生产流程预测与控制领域。想象一下&…...
day 17 无监督学习之聚类算法
一、聚类流程 1. 利用聚类发现数据模式 无监督算法中的聚类,目的就是将数据点划分成不同的组或 “簇”,使得同一簇内的数据点相似度较高,而不同簇的数据点相似度较低,从而发现数据中隐藏的模式。 2. 对聚类后的类别特征进行可视…...
渗透测试流程-上篇
#作者:允砸儿 #日期:乙巳青蛇年 四月十八 本期就开始进入到网安的内容了笔者会和大家一起开始实操练习。在此之前笔者的老师和我说要知己知彼,胆大心细。笔者也把他的理念传出去,网安的知识比较复杂且使用的工具很多。笔者看过…...
Ubuntu离线安装Minio
MinIO 支持在 Linux 环境下离线安装,非常适合内网或无法联网的服务器环境。下面是详细的 Linux 离线安装 MinIO 服务端 的步骤: ✅ 一、准备工作 1. 创建安装目录(可选) mkdir -p /opt/minio cd /opt/minio2. 下载 MinIO 可执行…...
2025年山东省数学建模F题思路
2025年山东省数学建模F题思路 一、问题背景 在现代金融市场中,资产价格波动呈现出非线性、高噪声、强跨市场联动性等复杂动态特征。例如,2020年新冠疫情期间,美股数次熔断事件引发全球股市剧烈震荡;而2023年美元加息周期&#x…...