本地化智能运维助手:基于 LangChain 数据增强 和 DeepSeek-R1 的K8s运维文档检索与问答系统 Demo
写在前面
- 博文内容为基于 LangChain 数据增强 和 Ollams 本地部署 DeepSeek-R1
- 实现 K8s运维文档检索与问答系统 Demo
- 通过 Demo 对
LEDVR 工作流
,语义检索
有基本认知 - 理解不足小伙伴帮忙指正 😃,生活加油
我看远山,远山悲悯
持续分享技术干货,感兴趣小伙伴可以关注下 _
Ollama 部署 DeepSeek-R1
过 Ollama
在本地部署 DeepSeek-R1
蒸馏模型,通过 langChain
调用,下载模型,启动 Ollama
服务
PS C:\Users\Administrator> ollama list
NAME ID SIZE MODIFIED
deepseek-r1:latest 0a8c26691023 4.7 GB 3 seconds ago
deepseek-r1:32b 38056bbcbb2d 19 GB 2 weeks ago
deepseek-r1:14b ea35dfe18182 9.0 GB 2 weeks ago
deepseek-r1:8b 28f8fd6cdc67 4.9 GB 2 weeks ago
bge-m3:latest 790764642607 1.2 GB 2 weeks ago
PS C:\Users\Administrator> ollama serve
Error: listen tcp 127.0.0.1:11434: bind: Only one usage of each socket address (protocol/network address/port) is normally permitted.
PS C:\Users\Administrator> ollama serve
2025/03/09 01:22:39 routes.go:1187: INFO server config env="map[CUDA_VISIBLE_DEVICES: GPU_DEVICE_ORDINAL: HIP_VISIBLE_DEVICES: HSA_OVERRIDE_GFX_VERSION: HTTPS_PROXY: HTTP_PROXY: NO_PROXY: OLLAMA_DEBUG:false OLLAMA_FLASH_ATTENTION:false OLLAMA_GPU_OVERHEAD:0 OLLAMA_HOST:http://127.0.0.1:11434 OLLAMA_INTEL_GPU:false OLLAMA_KEEP_ALIVE:5m0s OLLAMA_KV_CACHE_TYPE: OLLAMA_LLM_LIBRARY: OLLAMA_LOAD_TIMEOUT:5m0s OLLAMA_MAX_LOADED_MODELS:0 OLLAMA_MAX_QUEUE:512 OLLAMA_MODELS:C:\\Users\\Administrator\\.ollama\\models OLLAMA_MULTIUSER_CACHE:false OLLAMA_NOHISTORY:false OLLAMA_NOPRUNE:false OLLAMA_NUM_PARALLEL:0 OLLAMA_ORIGINS:[http://localhost https://localhost http://localhost:* https://localhost:* http://127.0.0.1 https://127.0.0.1 http://127.0.0.1:* https://127.0.0.1:* http://0.0.0.0 https://0.0.0.0 http://0.0.0.0:* https://0.0.0.0:* app://* file://* tauri://* vscode-webview://*] OLLAMA_SCHED_SPREAD:false ROCR_VISIBLE_DEVICES:]"
time=2025-03-09T01:22:39.303+08:00 level=INFO source=images.go:432 msg="total blobs: 14"
。。。。。。。。。。。。。。。。。。。。。。。。。。。。
time=2025-03-09T01:22:39.448+08:00 level=INFO source=types.go:131 msg="inference compute" id=GPU-e65029a6-c2f9-44b1-bd76-c12e4083fa4c library=cuda variant=v12 compute=8.6 driver=12.8 name="NVIDIA GeForce RTX 3060" total="12.0 GiB" available="11.0 GiB"
LangChain 数据增强模块
LangChain 的数据增强模块是构建大语言模型(LLM)应用的核心组件,专注于整合、优化外部数据
以提升模型输入的精准度与效率。
该模块通过文档加载器(Document Loaders)
从多源数据(如PDF、数据库、网页)
中提取内容
并标准化为结构化文档
。针对长文本或复杂格式问题,内置的文档转换器(Document Transformers)支持切割、合并、过滤
等操作。
同时,模块还通过向量存储(Vector Stores)和检索器(Retrievers)
实现数据的高效管理
,利用嵌入模型
将文本转换为向量
,构建语义检索能力
,从而在用户提问时快速定位相关片段作为上下文注入提示词模板
。
与LLM
的协作流程形成检索增强生成(RAG)
范式:外部数据经加载、转换、存储后,结合用户问题生成动态提示词
,通过模型包装器调用底层API并解析输出。其典型应用包括长文本摘要(如法律条款分析)、知识库问答(精准召回专业内容)以及实时数据更新(定期抓取网页信息并同步向量库)
。通过模块化设计,LangChain
大幅简化了异构数据处理复杂度,为开发者提供灵活、可扩展的LLM应用支持。
LEDVR 工作流
数据增强模块是一个多功能的数据增强集成工具,一般称作 LEDVR
其中:
L
代表加载器(Loader)
E
代表嵌人模型包装器(Text EmbeddingModcl)
D
代表文档转换器( Document Transformers)
V
代表向量存储库( VectorStore )
R
代表检索器(Retriever)
加载器
负责从各种来源加载数据作为文档,其中文档是由文本和相关元数据组成的。无论是简单的.txt 文件,还是任何网页文本内容,加载器都可以将它们加载为文档。
嵌人模型包装器
一个专为与各种文本嵌人模型(如 OpenAI、Coherc、HuggingFace
等)交互而设计的类。它的作用与模型 I/O 模块
的 LLM 模型包装器
和聊天模型包装器
一样,用于通过嵌入模型生成向量
文档转换器
主要用来对文档进行切割、组合、过滤等各种转换
。文本切割器(RecursiveCharacterTcxtSplitter)
是最常见的文档转换工具。文档转换器的目的是将加载的文档转换为可被嵌入模型包装器操作的文档数据格式
。
向量存储库
是用于存储和检索嵌入向量
的工具,处理的数据是通过模型平台的文本嵌人模型(Text Embedding Mode1)转换的向量数据
,这是处理非结构化数据的-种常见方法。向量存储库负责存储嵌入数据并执行向量检索
。在检索时,可以嵌入非结构化查询,以检索与嵌入数据“最相似”的嵌入向量。
检索器
是一个接口,返回非结构化查询
的文档。它比向量存储库更通用。检索器
无须存储文档,只需要返回(或检索)文档
。
K8s运维文档检索与问答系统 Demo
下面为一个基于 LEDVR 工作流(Loader → Embedding → Document Transformers → VectorStore → Retriever)与本地部署 Ollama 的完整代码示例
Demo
#!/usr/bin/env python
# -*- encoding: utf-8 -*-
"""
@File : demo_LEDVR.py
@Time : 2025/03/15 04:30:36
@Author : Li Ruilong
@Version : 1.0
@Contact : liruilonger@gmail.com
@Desc : None
"""# here put the import lib
#pip install langchain langchain-community ollama -i https://pypi.tuna.tsinghua.edu.cn/simple
#pip install faiss-cpu
#pip install pypdf
#pip install "unstructured[md]"import nltk
#nltk.download('averaged_perceptron_tagger')from langchain.prompts import PromptTemplate
from langchain_community.document_loaders import UnstructuredMarkdownLoader
from langchain_text_splitters import TokenTextSplitter
from langchain_community.embeddings import OllamaEmbeddings
from langchain_community.vectorstores import FAISS
from langchain_community.llms import Ollama
from langchain.chains import RetrievalQA
import warningswarnings.filterwarnings("ignore") # 忽略嵌入模型警告#### 1. 加载md文档 L 加载器
print("=============开始加载md文档")
loader = UnstructuredMarkdownLoader("K8s面试系列:K8s常用API资源总结速记 .md")
documents = loader.load()print(len(documents))#### 2. 文档转换器 (Document Transformers)
# 2. 按token分块
print("=============按token分块")
text_splitter = TokenTextSplitter(chunk_size=500, chunk_overlap=50)
chunks = text_splitter.split_documents(documents)
print(f"有效分块数: {len(chunks)}") # 应大于0if not chunks:raise ValueError("文档分块失败!请检查原始文件内容和分块参数。")print(len(chunks)) #### 3. 嵌入模型 (Embedding)
print("=============嵌入模型")
embeddings = OllamaEmbeddings(model="bge-m3", # 支持的模型包括bge-m3base_url="http://localhost:11434" # 默认端口11434
)#### 4. 向量存储库 (VectorStore)
# 构建本地 FAISS 向量数据库
vector_db = FAISS.from_documents(chunks, embeddings)#### 5. 检索器 (Retriever)
# 配置 Top-3 相似度检索
retriever = vector_db.as_retriever(search_kwargs={"k": 3})### **集成 Ollama 本地模型**
# 配置本地 DeepSeek R1 模型(需提前通过 Ollama 下载)
llm = Ollama(base_url='http://localhost:11434',model="deepseek-r1:latest"
)prompt_template = """基于以下上下文回答问题:
{context}
问题:{question}
答案(不超过4句话):"""# 构建问答链
qa_chain = RetrievalQA.from_chain_type(llm=llm,chain_type="stuff",retriever=retriever,chain_type_kwargs={"prompt": PromptTemplate.from_template(prompt_template)},return_source_documents=True
)# 执行查询
question = "K8s 中准入控制器资源有哪些?"
response = qa_chain.invoke({"query": question})# 输出结果
print("回答:", response["result"])
print("参考来源:")
for doc in response["source_documents"]:print(f"- {doc.page_content[:80]}...")
下面为实际的输出示例
PS C:\Users\Administrator\Documents\GitHub\LangChainDemo> & C:/Users/Administrator/AppData/Local/Programs/Python/Python310/python.exe c:/Users/Administrator/Documents/GitHub/LangChainDemo/demo/demo_LEDVR.py
[nltk_data] Downloading package averaged_perceptron_tagger to
[nltk_data] C:\Users\Administrator\AppData\Roaming\nltk_data...
[nltk_data] Package averaged_perceptron_tagger is already up-to-
[nltk_data] date!
=============开始加载md文档
1
=============按token分块
有效分块数: 86
86
=============嵌入模型
回答: <think>
嗯,我现在要回答关于K8s中准入控制器资源的问题。根据提供的上下文,我看到有几种不同的准入控制器,比如ValidatingAdmissionPolicy、ValidatingWebhookConfiguration和NetworkPolicy。
首先,ValidatingAdmissionPolicy是在K8s 1.30版本中发布的,用于在资源被创建、更新或删除时执行验证逻辑。它应用到apps/v1组中的deployment资源,并且拒绝请求如果副本数超过5。
然后是ValidatingWebhookConfiguration,这个结构包含一个配置和一个认证,允许从服务或其他地方发送钩子调用到容器注册表中。这意味着当服务发布到K8s的时候,会自动触发这些钩子,这在扩展性方面很有帮助。
接下来是NetworkPolicy,这是一组策略,可以定义网络的白名单规则。比如,允许特定IP范围和端口下的流量通过。虽然Flannel不支持它,但其他插件如Calico、Cilium等支持,并且这些插件可以集成到K8s中使用。
还有ResourceQuota,用于限制命名空间中的资源使用。这是一种策略,可以在集群级别限制CPU、内存等资源的使用,有助于确保资源分配公平。
总结一下,准入控制器资源包括ValidatingAdmissionPolicy、ValidatingWebhookConfiguration和NetworkPolicy,这些都是用来控制和管理K8s资源的工 具。
</think>在K8s中,准入控制器资源主要用于控制和验证API请求。以下是一些常见的准入控制器资源及其用途:1. **ValidatingAdmissionPolicy**:- **版本信息**:发布于K8s 1.30。- **用途**:应用于特定的资源类型(如Deployments),在资源被创建、更新或删除时执行验证逻辑。- **示例策略**:限制部署的副本数不超过5个。2. **ValidatingWebhookConfiguration**:- **结构**:包含一个配置和一个认证,用于允许从服务或其他位置发送钩子调用到容器注册表中。- **用途**:简化服务发布流程,自动触发钩子调用。3. **NetworkPolicy**:- **支持的工具**:Calico、Cilium、Weave Net等插件支持,并可集成到K8s中。- **用途**:定义网络的白名单规则,允许特定IP范围和端口下的流量通过。4. **ResourceQuota**:- **功能**:限制命名空间中的资源使用,如CPU和内存,确保资源分配公平。这些资源共同作用,帮助实施集群级别的安全和管理策略。参考来源:
- 个新的准入控制器,定义自定义的验证逻辑,在资源被创建、更新或删除时执行。K8s 1.30 发布正式版本yaml apiVersion: admissionr...
- .1.0/24 - namespaceSelector: #命名空间限制 matchLabels: project: myproject - podSelect...
- title: K8s面试系列:K8s常用 API 资源总结速记 tags: - Kubernetes categories: - Kubernetes toc:...
PS C:\Users\Administrator\Documents\GitHub\LangChainDemo>
可以看到答案对于这本地运行的蒸馏模型,并且只有几十行代码来实现的功能来说以及很不错了。
下面部分为加载的文档中的内容的简单摘要,这是我之前写的一篇博文,可以看到通过一个简单的Demo检索的答案很接近
…
–#### ValidatingAdmissionPolicy
一种类似 Admission Webhook
的声明式配置方式。ValidatingAdmissionPolicy
是 K8s 1.26
版本引入的一个新的准入控制器
,定义自定义的验证逻辑,在资源被创建、更新或删除时执行。K8s 1.30
发布正式版本
apiVersion: admissionregistration.k8s.io/v1
kind: ValidatingAdmissionPolicy
metadata:name: "demo-policy.example.com"
spec:failurePolicy: Fail # Fail表示如果验证失败,则拒绝请求。matchConstraints: #定义哪些API请求应该被此策略验证。resourceRules:- apiGroups: ["apps"]apiVersions: ["v1"]operations: ["CREATE", "UPDATE"]resources: ["deployments"]validations: # 具体的验证规则- expression: "object.spec.replicas <= 5" # 验证部署(Deployment)对象的副本数(replicas)是否小于或等于5。
这个策略将应用于所有对apps/v1组中deployments资源的CREATE和UPDATE操作,并且会拒绝任何副本数超过5的部署请求。
前面讲到的 ValidatingWebhookConfiguration
和 ValidatingAdmissionPolicy
都是 Kubernetes 中的准入控制机制,但它们在设计和使用方式上有一些重要区别:
…
…
关于上面的关键组件做说明
模块 | 技术实现 | 优势说明 |
---|---|---|
Loader | UnstructuredMarkdownLoader md 格式文档加载 | 统一处理 md 格式 |
Document Transformers | 递归字符分块法保留上下文语义 | 解决长文本 token 限制问题 |
Embedding | bge-m3 轻量化模型 | 本地部署无需 API 密钥 |
VectorStore | FAISS 高效向量检索 | 支持毫秒级相似度匹配 |
Ollama | DeepSeek R1 7B 量化版 | 消费级 GPU 即可运行 |
这里我们在看一个有报错信息的 Demo
.............................
loader = UnstructuredMarkdownLoader("Kubernetes 触发 OOMKilled(内存杀手)如何排除故障.md")
...................
# 执行查询
question = """```bash
┌──[root@vms100.liruilongs.github.io]-[~/ansible/oomkiller]
└─$kubectl apply -f oom-killer-pod.yaml
pod/oom-killer-pod created
┌──[root@vms100.liruilongs.github.io]-[~/ansible/oomkiller]
└─$kubectl get pods oom-killer-pod -w
NAME READY STATUS RESTARTS AGE
oom-killer-pod 0/1 ContainerCreating 0 7s
oom-killer-pod 1/1 Running 0 25s
oom-killer-pod 0/1 OOMKilled 0 28s
oom-killer-pod 0/1 OOMKilled 1 (18s ago) 45s
oom-killer-pod 0/1 CrashLoopBackOff 1 (13s ago) 57s
oom-killer-pod 0/1 OOMKilled 2 (29s ago) 73s
/```
上面的报错是什么原因?如何解决?
"""
response = qa_chain.invoke({"query": question})# 输出结果
print("回答:", response["result"])
print("参考来源:")
for doc in response["source_documents"]:print(f"- {doc.page_content[:180]}...")
PS C:\Users\Administrator\Documents\GitHub\LangChainDemo> c:; cd 'c:\Users\Administrator\Documents\GitHub\LangChainDemo'; & 'c:\Users\Administrator\AppData\Local\Programs\Python\Python310\python.exe' 'c:\Users\Administrator\.vscode\extensions\ms-python.debugpy-2025.4.1-win32-x64\bundled\libs\debugpy\launcher' '55098' '--' 'C:\Users\Administrator\Documents\GitHub\LangChainDemo\demo\demo_LEDVR.py'
[nltk_data] Downloading package averaged_perceptron_tagger to
[nltk_data] C:\Users\Administrator\AppData\Roaming\nltk_data...
[nltk_data] Package averaged_perceptron_tagger is already up-to-
[nltk_data] date!
=============开始加载md文档
1
=============按token分块
有效分块数: 21
21
=============嵌入模型
回答: <think>
好吧,我现在要解决这个Kubernetes中的OOMKilled错误问题。让我先理清楚发生了什么。首先,用户运行了一个Pod,里面装有一个叫bigmem的应用程序,这通常会模拟内存不回收的情况。当他们运行这个Pod时,发现出现了oom-killer-pod的Pod状态,其中有两个OOMKilled日志。根据提供的上下文,这可能是因为内存不足导致系统调用内核中的OOMKiller来终止进程。
我看到用户提到他们使用了_ansible任务,并且在yaml文件中装了一个 bigmem 包。这个包通常会让容器保持大段内存,导致内存泄漏。当Pod的内存消耗超过限制时,Kubernetes会通 过CrashLoopBackOff机制调用OOMKiller来终止进程。
问题是如何解决这个问题。首先,我需要理解为什么会触发OOM错误。这可能是因为内存管理不善,或者Pod的资源设置不当。例如,没有正确设置 pod resource limits 或 container resources limit。
接下来,我应该检查用户生成的 YAML 文件,看看是否正确限制了pod或容器的内存。确保 bigmem 包被正确卸载,并且资源限制足够。
此外,调整容器和pod的资源限制也是一个好方法。比如,为每个容器添加一个适当的 resource Limits,或者将 pod 的资源限制提高到足以运行所有容器,但又不超出系统处理能力。
如果资源限制不足以应对内存泄漏的问题,可能需要重新审视 bigmem 包的配置,看看是否可以适当卸载或优化其内存使用情况。
最后,如果调整资源限制后问题仍然存在,可能需要进一步检查是否有其他进程占用过多内存,或者系统中的内存分配策略是否有问题。此外,确保容器调度器(如Podman)已经正确设置,并且没有其他潜在的内存消耗因素。
总之,解决这个问题的关键在于识别导致OOM错误的根本原因,可能是资源限制不当或内存泄漏,然后相应地调整配置以避免这种情况。
</think>
上面的情况是由于容器内存不回收(bigmem 包的存在)导致系统调用 Kubernetes 的 OOMKiller 功能。OOMKiller 通过终止进程来释放内存。解决方法:
1. 在 pod.yaml 中卸载 bigmem 包:/```yamlresources:bigmem-7.0-1.r29766.x86_64.rpm: null/```
2. 调整 container resource limits,限制每个容器的内存使用:/```yamlcontainers:- image=bigmem-7.0-1.r29766.x86_64.rpmresources:memory: '512MiB'/```
3. 确保 pod resource limits 足够大,以支持所有容器同时运行。通过这些调整,可以避免因内存泄漏导致的 OOMKilled 错误。参考来源:
- ms100.liruilongs.github.io]-[~/ansible/oomkiller] └─$kubectl get pods oom-killer-pod -w NAME READY STATUS RESTARTS AGE oom-killer-pod 0/1 ContainerCreating 0 7s oom-killer-pod 1/1 ...
- /ansible/oomkiller] └─$
对于在生产环境的 Pod ,OOMKilled 常常 伴随这 CrashLoopBackOff,触发 OOM 之后,被 Kill 掉,之后由于 Pod 重启机制,会陷入 CrashLoopBackOff
什么是 OOMKilled K8s 错误
当 Kubernetes 集群中的容器超出其内存限制时,Ku...
- o wide No resources found in resources namespace. ┌──[root@vms81.liruilongs.github.io]-[~/ansible/resources] └─$vim pod-demo.yaml ┌──[root@vms81.liruilongs.github.io]-[~/ansible/re...
PS C:\Users\Administrator\Documents\GitHub\LangChainDemo>
博文部分内容参考
© 文中涉及参考链接内容版权归原作者所有,如有侵权请告知 😃
《LangChain 入门指南构建高可复用、可扩展的 LLM 应用程序》
书籍获取有条件小伙伴可以支持一下原书作者,pdf 版本获取:https://pan.quark.cn/s/2bf8697bf0d2
© 2018-至今 liruilonger@gmail.com, 保持署名-非商用-相同方式共享(CC BY-NC-SA 4.0)
相关文章:
本地化智能运维助手:基于 LangChain 数据增强 和 DeepSeek-R1 的K8s运维文档检索与问答系统 Demo
写在前面 博文内容为基于 LangChain 数据增强 和 Ollams 本地部署 DeepSeek-R1实现 K8s运维文档检索与问答系统 Demo通过 Demo 对 LEDVR 工作流, 语义检索有基本认知理解不足小伙伴帮忙指正 😃,生活加油 我看远山,远山悲悯 持续分享技术干货…...
中间件框架漏洞攻略
中间件(英语:Middleware)是提供系统软件和应⽤软件之间连接的软件,以便于软件各部件之间的沟通。 中间件处在操作系统和更⾼⼀级应⽤程序之间。他充当的功能是:将应⽤程序运⾏环境与操作系统隔离,从⽽实…...
在 Ubuntu 上安装 Docker 的完整指南
1. 卸载旧版本(如有) 在安装新版本前,建议先卸载旧版本: sudo apt remove docker docker-engine docker.io containerd runc 2. 安装依赖包 更新软件包索引并安装必要的依赖: sudo apt update sudo apt install -y ca-certificates curl gnupg lsb-release 3. 添加 Do…...
Another Redis Desktop Manager下载安装使用
🤟致敬读者 🟩感谢阅读🟦笑口常开🟪生日快乐⬛早点睡觉 📘博主相关 🟧博主信息🟨博客首页🟫专栏推荐🟥活动信息 文章目录 Another Redis Desktop Manager下载安装使用…...
GitLab 中文版17.10正式发布,27项重点功能解读【一】
GitLab 是一个全球知名的一体化 DevOps 平台,很多人都通过私有化部署 GitLab 来进行源代码托管。极狐GitLab 是 GitLab 在中国的发行版,专门为中国程序员服务。可以一键式部署极狐GitLab。 学习极狐GitLab 的相关资料: 极狐GitLab 官网极狐…...
mysql慢查询日志
在 MySQL 中,慢查询日志(Slow Query Log)用于记录执行时间超过指定阈值的 SQL 语句。通过分析慢查询日志,可以优化数据库性能。以下是查看和配置 MySQL 慢查询日志的详细步骤: 1. 检查慢查询日志是否已启用 登录 MySQ…...
unity 截图并且展现在UI中
using UnityEngine; using UnityEngine.UI; using System.IO; using System.Collections.Generic; using System; using System.Collections;public class ScreenshotManager : MonoBehaviour {[Header("UI 设置")]public RawImage latestScreenshotDisplay; // 显示…...
Linux上位机开发实践(MPP平台的核心构成)
【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing 163.com】 芯片行业是一个赢者通吃的行业。也就是说细分领域的前两名,相比较后来者而言,拥有很多无可比拟的优势。以安防市场的soc来说…...
Hosts文件与DNS的关系:原理、应用场景与安全风险
目录 引言 Hosts文件与DNS的基本概念 2.1 什么是Hosts文件? 2.2 什么是DNS? Hosts文件与DNS的关系 Hosts文件的应用场景 4.1 本地开发与测试 4.2 屏蔽广告与恶意网站 4.3 绕过DNS污染或劫持 Hosts文件的优势 5.1 解析速度快 5.2 不受DNS缓存影…...
Stable Diffusion vue本地api接口对接,模型切换, ai功能集成开源项目 ollama-chat-ui-vue
1.开启Stable Diffusion的api服务 编辑webui-user.bat 添加 –api 开启api服务,然后保存启动就可以了 2.api 文档地址 http://127.0.0.1:7860/docs3. 文生图 接口 地址 /sdapi/v1/txt2img //post 请求入参 {enable_hr: false, // 开启高清hrdenoising_stre…...
【含文档+源码】基于SpringBoot的过滤协同算法之网上服装商城设计与实现
项目介绍 本课程演示的是一款 基于SpringBoot的过滤协同算法之网上服装商城设计与实现,主要针对计算机相关专业的正在做毕设的学生与需要项目实战练习的 Java 学习者。 1.包含:项目源码、项目文档、数据库脚本、软件工具等所有资料 2.带你从零开始部署…...
优化 Docker 构建之方法(Methods for Optimizing Docker Construction)
优化 Docker 构建之方法 优化 Docker 构建不仅是为了提高效率,它还是降低部署成本、确保安全性和保持跨环境一致性的有效方法。每个层、依赖项和配置选择都会影响镜像的大小、安全性和可维护性。大型镜像部署速度较慢且消耗更多资源,这会增加成本&#…...
谈谈空间复杂度考量,特别是递归调用栈空间消耗?
空间复杂度考量是算法设计的核心要素之一,递归调用栈的消耗问题在前端领域尤为突出。 以下结合真实开发场景进行深度解析: 一、递归调用栈的典型问题 1. 深层次DOM遍历的陷阱 // 危险操作:递归遍历未知层级的DOM树 function countDOMNode…...
四川省汽车加气站操作工备考题库及答案分享
1.按压力容器的设计压力分为( )个压力等级。 A. 三 B. 四 C. 五 D. 六 答案:B。解析:按压力容器的设计压力分为低压、中压、高压、超高压四个压力等级。 2.缓冲罐的安装位置在天然气压缩机( )。 A. 出口处 …...
《探秘SQL的BETWEEN:解锁数据范围查询的深度奥秘》
在数据的广袤宇宙中,结构化查询语言(SQL)宛如一座精密的导航系统,引导我们穿越数据的浩瀚星河,精准定位所需信息。其中,BETWEEN作为SQL的关键工具之一,以其独特的能力,在数据的海洋里…...
AppArmor 使用说明
目录 一:AppArmor 功能介绍二:AppArmor 配置介绍1、AppArmor 配置文件存放路径2、AppArmor 配置文件命名规则 三: AppArmor 工作模式1、AppArmor 两种工作模式2、查看当前进程的工作模式3、给指定进程切换工作模式4、重新加载配置文件生效 四…...
Linux的一些常见指令
一、ls指令 语法: ls (选项) 功能: ls可以查看当前目录下的所有文件和目录。 常用选项: -a:列出目录下的所有文件,包括以点(.)开头的隐含文件 。-d:将目录像文件一样显示,不显示其下的文件。…...
MATLAB中getfield函数用法
目录 语法 说明 示例 访问标量结构体的字段 嵌套结构体的字段 结构体数组元素的字段 嵌套结构体数组的索引 字段的元素 getfield函数的功能是结构体数组字段。 语法 value getfield(S,field) value getfield(S,field1,...,fieldN) value getfield(S,idx,field1,..…...
算法 | 河马优化算法原理,公式,应用,算法改进及研究综述,matlab代码
以下是关于河马优化算法(Hippopotamus Optimization Algorithm, HO)的完整综述,包含原理、公式、应用场景、改进方向及可直接运行的 Matlab 完整代码。一、算法原理 河马优化算法(HO)由Amiri等人于2024年提出,是受河马群体行为启发的元启发式算法,其核心基于以下三阶段行…...
Oracle到MySQL实时数据互通:透明网关跨库查询终极方案
技术架构概述 节点类型IP示例Oracle数据库172.18.0.11透明网关节点192.168.5.20MySQL数据库10.10.8.100 提示:透明网关支持部署在Oracle服务器实现集中式管理 一、MySQL环境准备 1. ODBC驱动部署 从MySQL官网获取对应版本的ODBC驱动: # 企业版推荐使…...
BAPLIE船图文件:EDI 核心字段与应用场景解析
BAPLIE(Bay Plan/Stowage Plan Occupied and Empty Locations Message)作为EDIFACT国际报文标准(D96A版本)的核心成员,是集装箱海运领域实现船舶配载数字化的关键工具。其通过结构化数据精确描述集装箱在船舶上的物理位…...
C#中获取字节数据的高字节和低字节
字节顺序(Endianness): 1.小端序(Little-Endian):低字节在前(x86架构) 2.大端序(Big-Endian):高字节在前(网络字节序) 特性小端序(Little-Endian)大端序(B…...
26考研——查找_树形查找_二叉排序树(BST)(7)
408答疑 文章目录 三、树形查找二叉排序树(BST)二叉排序树中结点值之间的关系二叉树形查找二叉排序树的查找过程示例 向二叉排序树中插入结点插入过程示例 构造二叉排序树的过程构造示例 二叉排序树中删除结点的操作情况一:被删除结点是叶结点…...
OpenCV图像拼接(5)图像拼接模块的用于创建权重图函数createWeightMap()
操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 cv::detail::createWeightMap 是 OpenCV 库中用于图像拼接模块的一个函数,主要用于创建权重图。这个权重图在图像拼接过程中扮演着重…...
【Unity】 鼠标拖动物体移动速度跟不上鼠标,会掉落
错误示范: 一开始把移动的代码写到update里去了,发现物体老是掉(总之移动非常不流畅,体验感很差) void Update(){Ray ray Camera.main.ScreenPointToRay(Input.mousePosition);if (Physics.Raycast(ray, out RaycastHit hit, M…...
docker网桥问题导致ldap组件安装失败分析解决
使用pass_install_x86_64_0124版部署k8s底座、kem; 问题:一台kem节点部署ldap组件失败 解决:恢复问题主机的docker0网卡,重新部署kem相关组件 二、问题详情 现象描述 ansible部署kem组件 TASK [kem : start ldap] **********…...
如何保障kafka的数据不会重复消费呢,如何防止漏掉呢
在 Kafka 中保障数据不重复消费且不丢失,需要从生产者、消费者和 Kafka 自身配置三个层面综合设计。以下是具体实现方案: 一、防止数据重复消费 1. 消费者端控制 手动提交 Offset 禁用自动提交(enable.auto.commitfalse)&#x…...
mac vim命令快捷键
目录 移动光标插入模式复制/粘贴删除搜索/替换退出 移动光标 快捷键说明0 / ^跳到行首,移动到光标所在行的"行首"$跳到行末,移动到光标所在行的"行尾"gg跳到文件第一行G移动到文章的最后[n]G跳到第n行w光标跳到下个字的开头e光标跳…...
【01】噩梦终结flutter配安卓android鸿蒙harmonyOS 以及next调试环境配鸿蒙和ios真机调试环境-flutter项目安卓环境配置
噩梦终结:Flutter 配安卓、鸿蒙、iOS 真机调试环境 问题背景 很多开发者在配置 Flutter 项目环境时遇到困难,尤其是在处理 Android、鸿蒙和 iOS 真机调试环境时。卓伊凡最近接手了一个项目,发现很多“专业程序员”在环境搭建上花费了大量时…...
React 中React.memo的作用,如何利用它进行组件性能优化?
大白话React 中React.memo的作用,如何利用它进行组件性能优化? React.memo 是啥玩意儿 在 React 里,组件渲染是很频繁的事儿。每次父组件状态变了,子组件就可能会重新渲染,哪怕子组件的 props 压根儿没变化。这就好比…...
Python实现图片文字识别-OCR
PaddleOCR是由百度飞桨(PaddlePaddle)团队开发的OCR工具库,它包含超轻量级的中文OCR模型,支持多种语言和复杂情况下的文字识别。 pip install paddlepaddle paddleocr使用:已知我的图片是 img.png from paddleocr imp…...
MCP Server 实现一个 天气查询
Step1. 环境配置 安装 uv curl -LsSf https://astral.sh/uv/install.sh | shQuestion: 什么是 uv 呢和 conda 比有什么区别? Answer: 一个用 Rust 编写的超快速 (100x) Python 包管理器和环境管理工具,由 Astral 开发。定位为 pip 和 venv 的替代品…...
第38周:文献阅读
目录 摘要 Abstract 文献阅读 问题引入 研究背景 研究意义 研究目的 相关工作 自回归循环网络 基于 GAN 的序列生成方法 时间序列表示学习 创新点 提出模型 基本原理 代码实现 实验研究 实验1——基准和评估 实验2——不同类型的时间序列数据 实验3——…...
CD19.【C++ Dev】类和对象(10) 日期类对象的成员函数(日期+天数)
目录 日期天数 需要考虑的几个问题 1.天数加在日上,有可能会溢出,需要进位 2.对月进位,也有可能导致月会溢出,需要进位 3.对年进位,需要考虑是否为闰年 代码设计 取得指定月的天数GetMonthDay函数 方法1:if判断或switch/case 方法2:查表 版本1 版本2 operator 初始…...
Linux安装MySQL数据库并使用C语言进行数据库开发
目录 一、前言 二、安装VMware运行Ubuntu 1.安装VMware 2.使用VMware打开Ubuntu 三、配置VMware使用网卡 1.添加NAT网卡 四、Linux下安装MySQL数据库 五、安装MySQL开发库 六、演示代码 sql_connect.c sql_connect.h main.c中数据库相关代码 结尾 一、前言 由于最…...
GStreamer —— 3.1、Qt+GStreamer制作多功能播放器,支持本地mp4文件、rtsp流、usb摄像头等(可跨平台,附源码)
🔔 GStreamer 相关音视频技术、疑难杂症文章合集(掌握后可自封大侠 ⓿_⓿)(记得收藏,持续更新中…) 运行效果...
如何在根据名称或id找到json里的节点以及对应的所有的父节点?
函数如下: 数据如下: [{ "name": "数据看板", "id": "data", "pageName": "tableeauData", "list": [] }, { "name": "审计模块", "id": &quo…...
IP第一次笔记
一、TCP协议 第0步:如果浏览器和host文件存在域名对应的P地址记录关系 则直接封装HTTP数据报文,如果没有记录则触发DNS解析获 取目标域名对应的P地址 第一步:终端主机想服务器发起TCP三次握手 1.TCP的三次握手 2.传输网页数据 HTTP --应用层…...
手机硬件检测详解:从版本信息到相机功能的全面指南
手机硬件检测概述 接下来,我们将为您提供一份详尽的手机硬件检测指南,涵盖三十项关键内容,助您轻松掌握手机硬件的检测技巧。对于开发者而言,在测试手机硬件性能时,可以结合使用克魔开发助手(Keymob&#…...
大数据学习(86)-Zookeeper去中心化调度
🍋🍋大数据学习🍋🍋 🔥系列专栏: 👑哲学语录: 用力所能及,改变世界。 💖如果觉得博主的文章还不错的话,请点赞👍收藏⭐️留言📝支持一…...
05-SpringBoot3入门-整合SpringMVC(配置静态资源、拦截器)
1、说明 在01-SpringBoot3入门-第一个项目-CSDN博客中,其实就已经整合了SpringMVC。下面讲解怎么配置静态资源和拦截器 2、配置静态资源 命名:static(文件夹) 位置:src/main/resources 编写一个html文件 访问 http:/…...
大数据学习(88)-zookeeper实现的高可用(HA)
🍋🍋大数据学习🍋🍋 🔥系列专栏: 👑哲学语录: 用力所能及,改变世界。 💖如果觉得博主的文章还不错的话,请点赞👍收藏⭐️留言📝支持一…...
自然语言处理(5)—— 中文分词
中文分词的基本原理及实现 1. 什么是词2. 基本原理3. 发展趋势:多数场景无需显式分词 信息处理的目标是使用计算机能够理解和产生自然语言。而自然语言理解和产生的前提是对语言能够做出全面的解析。 汉语词汇是语言中能够独立运用的最小的语言单位,是语…...
MP4音视频格式
1.MP4 MP4是一种用于封装音视频/字幕/图片/章节信息等数据的多媒体容器格式,是MPEG-4系列的成员之一 2.文件结构 MP4由一层层的嵌套Box(atom)组成 [ size (4 bytes) ][ type (4 bytes)][ payload (嵌套box或者数据) ] 3.常见Box 类型名称…...
NO.59十六届蓝桥杯备战|基础算法-前缀和|一维前缀和|最大子段和|二维前缀和|激光炸弹(C++)
前缀和与差分的核⼼思想是预处理,可以在暴⼒枚举的过程中,快速给出查询的结果,从⽽优化时间复杂度。 是经典的⽤空间替换时间的做法 前缀和 解法1:暴力模拟,q有几次,就套几次for循环 解法2:前…...
Node.js 模块加载机制--详解
目录 Node.js 模块加载机制详解 1. 什么是模块? 2. 模块加载顺序 3. 核心模块加载 4. 自定义模块加载 5. 目录作为模块(index.js) 6. require.resolve() 查找模块路径 7. module 对象解析 8. require.cache 机制(避免重复…...
Live555+Windows+MSys2 编译Androidso库和运行使用(三,实战篇)
文章目录 先上效果图VLC中打开日志权限cmakelist 和gradle建议直接去git查看源代码ui下一篇视频预览和采集 先上效果图 VLC中打开 日志 com.mq.qrtspclient E mystream stream, from the file /storage/emulated/0/Android/data/com.mq.qrtspclient/files/…...
验证码通过“Canvas 绘制”与“Base64 图片”渲染两种不同的实现方式显示
文章目录 🎉验证码通过“Canvas 绘制”与“Base64 图片”渲染两种不同的实现方式显示一、Canvas 绘制:接口回调“字符串”通过绘制的方式显示到前端✨1、前端代码(Canvas 绘制):包含验证码区域、绘制验证码方法&#x…...
FALL靶场通关攻略
1,下载好靶机后打开,通过kali扫描靶机ip和端口,得到靶机ip为192.168.50.144 2,扫描目录 3,访问靶机 4,访问扫描到的test.php,得到缺少GET请求参数的提示 5,使用FUZZ来扫出参数为file 6ÿ…...
(学习总结31)Linux 进程地址空间与进程控制
Linux 进程地址空间与进程控制 进程地址空间Linux 进程地址空间分布虚拟地址空间和页表创建子进程与写时拷贝权限访问缺页中断 Linux 虚拟内存管理mm_struct 内存描述符区域划分vm_area_struct 独立虚拟内存区域 虚拟地址空间的作用 进程控制进程创建fork 函数介绍写时拷贝作用…...