【论文解读】《C-Pack: Packed Resources For General Chinese Embeddings》
论文链接:https://arxiv.org/pdf/2309.07597
本论文旨在构建一套通用中文文本嵌入的完整资源包——C-Pack,解决当前中文文本嵌入研究中数据、模型、训练策略与评测基准缺失的问题。论文主要贡献体现在以下几个方面:
- 大规模训练数据(C-MTP)
- 统一的评测基准(C-MTEB)
- 多尺度中文嵌入模型(BGE)
- 完整的训练方案
下面逐节对论文内容进行详细解读。
1. 摘要
-
资源组成
论文介绍了 C-Pack 这一资源包,它包含三大关键资源:- C-MTP:一个大规模的训练数据集,用于文本嵌入模型的学习,其中既包含从海量无标签语料中抽取的文本对,也整合了高质量标注数据;
- C-MTEB:一个专门为中文文本嵌入设计的评测基准,覆盖 6 种任务和 35 个数据集,能全面评估嵌入模型的各项能力;
- BGE:一系列预训练的中文嵌入模型,提供小型、基础和大型三个版本,用户可根据计算资源与任务需求进行选择。
-
性能提升与扩展
BGE 模型在 C-MTEB 上的整体表现比此前中文嵌入模型提升了超过 10%,此外,论文还同步发布了英文文本嵌入的训练数据和模型,其英文数据量甚至是中文数据的两倍。
2. 引言
-
文本嵌入的重要性
文本嵌入技术通过将文本映射到低维语义向量空间,成为搜索、问答、检索增强生成等多种任务的基础。随着大语言模型(LLMs)的快速发展,文本嵌入在连接外部知识库和工具模块方面扮演着至关重要的角色。 -
通用嵌入 vs. 任务特定嵌入
与仅针对某一任务优化的嵌入方法不同,通用文本嵌入要求模型具备足够的泛化能力,能够应对检索、排序、分类等多种应用场景。这对训练数据的规模、数据的多样性、清洗质量以及训练策略提出了更高要求。 -
当前挑战与动因
尽管近年来英文领域在此方向上取得了不少成果(如 Contriever、E5、GTR、OpenAI Text Embedding 等),但中文领域由于数据和基准缺失,仍面临严重制约。因此,构建适用于中文场景的通用嵌入系统尤为重要。
3. C-Pack 框架
论文的核心贡献是搭建了一个由数据、模型、评测以及训练方案构成的完整系统,下文详细介绍各个组成部分。
3.1 C-MTEB:中文文本嵌入评测基准
-
数据集构成
C-MTEB 汇集了 35 个公开数据集,并根据文本嵌入模型的能力分为 6 大任务:- 检索(Retrieval):
给定查询,在大规模文档库中找出最相关文档。主要评测指标为 NDCG@10。 - 重排序(Re-ranking):
针对候选文档(通常包含一个正样本和多个负样本)进行排序,主要指标为 MAP(平均精度)。 - 语义文本相似度(STS):
测量两个句子的语义相似性,采用 Spearman 相关系数作为指标。 - 分类(Classification):
使用逻辑回归等方法对文本进行分类,评测指标为平均准确率。 - 句对分类(Pair Classification):
针对句子对之间的二元关系进行分类,同样以平均准确率为评测指标。 - 聚类(Clustering):
采用 mini-batch k-means 聚类方法,通过 V-measure 分数来评估聚类质量。
- 检索(Retrieval):
-
统一评测流程
论文中构建了标准化评测协议和自动化评测管道,使得不同嵌入模型能在统一标准下进行公平对比,并且评测结果可直接提交至 C-MTEB 排行榜。
3.2 C-MTP:大规模中文文本对训练数据
-
数据规模与来源
C-MTP 包含两大部分:- 无标签部分(C-MTP unlabeled):
主要从开放网页(如百度百科、知乎、新闻网站等)中提取,构成 1 亿对文本对。这些文本对通过从标题-正文、问题-答案、摘要-全文等多种结构中抽取。 - 有标签部分(C-MTP labeled):
整合了来自 T2-Ranking、DuReader、mMARCO、NLI 等数据集,总计约 83.8 万对文本对,具备较高标注质量。
- 无标签部分(C-MTP unlabeled):
-
数据清洗策略
由于直接从海量数据中抽取的文本对可能存在噪声,论文采用了两步清洗:- 一般过滤: 去除非文本、重复或恶意内容。
- 语义过滤: 利用第三方模型 Text2Vec-Chinese 对每对文本计算语义相关性分数,并设定阈值(0.43)筛除相关性不足的样本。
3.3 BGE:BAAI 通用嵌入模型
-
模型架构与规模
BGE 模型基于 BERT 类架构,并经过三阶段训练:- 预训练;
- 对比学习;
- 任务特定微调。
提供三种模型规模:
- Small: 参数量 24M,适用于高吞吐量场景;
- Base: 参数量 102M,性能与效率兼顾;
- Large: 参数量 326M,在多个任务上表现最佳。
-
优势
实验表明,无论在检索、语义相似度还是分类等任务上,BGE 模型均大幅超越现有中文嵌入模型。此外,BGE 模型不仅可以直接用于下游应用,也为进一步任务特定的微调提供了坚实基础。
3.4 训练方案
训练方案分为三个阶段,每个阶段均针对提升文本嵌入的泛化能力设计。
3.4.1 预训练
-
目标与方法
在大规模未标注的文本数据上,使用自编码思想训练嵌入编码器。论文借鉴了 RetroMAE 的 MAE 风格预训练方法。其预训练目标如下:min ∑ x ∈ X − log D e c ( x ∣ e ( x ~ ) ) , e ( x ~ ) ← E n c ( x ~ ) \min \sum_{x \in X} -\log \mathrm{Dec}(x | e(\tilde{x})), \quad e(\tilde{x}) \leftarrow \mathrm{Enc}(\tilde{x}) minx∈X∑−logDec(x∣e(x~)),e(x~)←Enc(x~)
其中, X X X 表示干净文本集合, x ~ \tilde{x} x~ 为经过噪声处理的文本; E n c \mathrm{Enc} Enc 与 D e c \mathrm{Dec} Dec 分别为编码器和解码器。
3.4.2 对比学习
-
目的
利用从 C-MTP 无标签数据中获得的文本对,通过对比学习提升模型的辨识能力,使得正样本对的嵌入更为接近,而与负样本的距离更远。 -
损失函数
对比学习采用 in-batch 负样本,损失函数形式为:min ∑ ( p , q ) − log e ⟨ e p , e q ⟩ / τ e ⟨ e p , e q ⟩ / τ + ∑ q ′ ∈ Q ′ e ⟨ e p , e q ′ ⟩ / τ \min \sum_{(p,q)} -\log \frac{e^{\langle e_p, e_q \rangle/\tau}}{e^{\langle e_p, e_q \rangle/\tau} + \sum_{q' \in Q'} e^{\langle e_p, e_{q'} \rangle/\tau}} min(p,q)∑−loge⟨ep,eq⟩/τ+∑q′∈Q′e⟨ep,eq′⟩/τe⟨ep,eq⟩/τ
其中, ( p , q ) (p,q) (p,q) 为正样本对, q ′ q' q′ 表示负样本, τ \tau τ 为温度超参数, ⟨ ⋅ , ⋅ ⟩ \langle \cdot,\cdot \rangle ⟨⋅,⋅⟩ 表示向量内积。
-
批次策略
论文通过梯度检查点和跨设备嵌入共享等技术,实现了高达 19,200 的大批次规模,从而充分利用 in-batch 负样本,尤其对检索任务效果显著。
3.4.3 任务特定微调
-
数据与目标
使用 C-MTP 的有标签数据进行微调,以使模型在具体任务(如检索、分类、句对判断等)上获得更好的表现。 -
策略
- 指令微调(Instruction-based Fine-tuning):
为每个文本对附加一个任务指令 I t I_t It(例如“为查询搜索相关段落”),将输入由 ( p , q ) (p, q) (p,q) 转换为 q ′ = q + I t q' = q + I_t q′=q+It,以帮助模型区分不同任务需求。 - 硬负样本采样:
除了 in-batch 的负样本,还从任务原始语料中采样一个硬负样本,以进一步增强模型区分能力。
- 指令微调(Instruction-based Fine-tuning):
4. 实验与分析
论文通过大量实验验证了 C-Pack 的有效性,主要分为总体评估和详细消融分析两部分。
4.1 总体评估
-
评测设置
在 C-MTEB 基准上,论文评测了检索、STS、句对分类、分类、重排序和聚类等多个任务,并计算了各任务的平均性能作为整体指标。 -
对比模型
实验对比了 Text2Vec、Luotuo、M3E、多语种 E5 以及 OpenAI-Ada-002 等多种现有中文文本嵌入模型。 -
主要发现
- 显著超越: BGE 模型在各项任务上均取得了明显提升,特别是在检索和语义相似度任务上优势突出。
- 模型规模效应: 随着模型规模从 Small、Base 到 Large,整体性能呈现一致上升趋势。
- 跨语言扩展: 基于相同训练策略训练的英文嵌入模型在 MTEB 英文基准上也实现了最先进水平。
4.2 详细消融分析
-
训练数据的影响
- C-MTP (unlabeled): 单独使用无标签数据训练得到的中间模型(BGE-pretrain)在检索任务上就能明显超越其他基线模型;
- C-MTP (labeled): 通过在 BGE-pretrain 基础上进行有标签数据微调(BGE-finetune),整体平均性能从 59.0 提升到 63.96,尤其在检索、重排序、STS 和句对分类任务上效果尤为显著。
-
批次大小对比学习的作用
实验表明,增大批次大小(如从 256 到 19,200)能够稳定提升模型性能,主要原因在于更多的 in-batch 负样本使得嵌入向量具有更强的判别能力,尤其适用于大规模检索任务。 -
指令微调的效果
消融实验显示,若去除任务指令(即不采用 instruction-based 微调),模型在多任务上的表现会有所下降,证明任务指令在帮助模型适应不同任务中的关键作用。 -
预训练编码器的选择
实验还验证了专门预训练的文本编码器相较于通用预训练模型(如 Chinese-RoBERTa)的优势,特别在检索性能上,专用预训练的编码器能提供更优的语义表示。
5. 结论与贡献
-
资源开放性:
论文公开了最大规模的中文文本嵌入训练数据、统一的评测基准以及多尺度的 BGE 嵌入模型,为研究人员和应用开发者提供了一站式解决方案。 -
技术创新:
通过集成预训练、对比学习和任务特定微调的全链路训练方案,BGE 模型在多项任务上取得了显著性能提升,证明了大规模数据与精心设计训练策略在提升文本嵌入泛化能力方面的有效性。 -
应用前景:
除了直接支持搜索、问答、聚类等应用外,BGE 模型还可以作为下游任务微调的基础,从而推动中文自然语言处理各个方向的进步。
总的来说,本论文通过构建一整套从数据到评测再到模型训练的闭环体系,显著推动了中文文本嵌入领域的发展。C-Pack 不仅为当前研究提供了重要资源,也为后续方法的改进和应用落地奠定了坚实基础。
相关文章:
【论文解读】《C-Pack: Packed Resources For General Chinese Embeddings》
论文链接:https://arxiv.org/pdf/2309.07597 本论文旨在构建一套通用中文文本嵌入的完整资源包——C-Pack,解决当前中文文本嵌入研究中数据、模型、训练策略与评测基准缺失的问题。论文主要贡献体现在以下几个方面: 大规模训练数据…...
Python 3 实用工具库
Python 作为一门强大且灵活的编程语言,提供了许多内建库和模块,可以大大简化开发工作,提升开发效率。在日常开发中,使用一些实用的工具库能够帮助你更轻松地完成任务。本文将介绍几款常用且实用的 Python 3 工具库,它们…...
vue+element-dialog:修改关闭icon / 遮罩层不能挡住弹窗 / 遮罩层不能遮挡元素
一、是否显示操作按钮 二、修改dialog默认关闭icon .el-dialog__headerbtn {top: 15px !important;width: 18px;height: 18px;background: url(~assets/img/formworkManagement/close-button.png) left no-repeat;background-size: cover; } .el-dialog__headerbtn i {content…...
深入解析React性能优化三剑客:React.memo、useMemo与useCallback
目录 渲染机制基础 React的渲染流程解析组件重渲染的根本原因性能优化的核心目标 React.memo深度解析 组件级缓存原理浅比较机制详解自定义比较函数实现 useMemo核心技术 值缓存机制剖析引用稳定性控制复杂计算场景实战 useCallback终极指南 函数缓存本质闭包陷阱解决方案事…...
Java高频面试之SE-23
hello啊,各位观众姥爷们!!!本baby今天又来了!哈哈哈哈哈嗝🐶 Java 中的 Stream 是 Java 8 引入的一种全新的数据处理方式,它基于函数式编程思想,提供了一种高效、简洁且灵活的方式来…...
SOC-ATF 安全启动BL31流程分析(3)
一、BL31启动流程 与bl1和bl2不同,bl31包含两部分功能,在启动时作为启动流程的一部分,执行软硬件初始化以及启动bl32和bl33镜像。在系统启动完成后,将继续驻留于系统中,并处理来自其它异常等级的smc异常,以…...
计算机三级网络技术备考
#subtotal 1Mbps1024kb128KB12.8M/s #1024B1KB 1024KB1MB 1024MB1GB #路由器的5G信号和平常的波长不同(5G的穿墙性能差) #局域网LAN(一公里内——构成集线机、交换机、同轴电缆) #城域网MAN(几公里到几十公里——光…...
Linux红帽:RHCSA认证知识讲解(四)修改远程配置文件,取消root禁用,便于使用root身份远程
Linux红帽:RHCSA认证知识讲解(四)修改远程配置文件,取消root禁用,便于使用root身份远程 前言一、远程连接的用途和原因二、通过 ssh 远程登陆系统三、默认限制及解决方案(一)非常规方法一&#…...
【笔记ing】每天50个英语词汇
ex- e-out exclude 排外,排除 expect 期待,期望 单词构成: 前缀(prefix):情感(emotion)方向(orientation) 词根(root)…...
Linux 基本开发工具的使用(yum、vim、gcc、g++、gdb、make/makefile)
文章目录 Linux 软件包管理器 - yum理解什么是软件包和yum如何查看/查找软件包如何安装软件如何实现本地机器和云服务器之间的文件互传如何卸载软件 Linux 编辑器 - vim 的使用vim 的基本概念vim 的基本操作vim 命令模式各命令汇总vim 底行模式各命令汇总vim 的简单配置 Linux …...
idea创建第一个springboot程序
说明: 我计划用idea,创建第一个springboot程序,但是作为新手完全不会弄,今天我就亲自尝试一边,并且出一期详细,完美的教程,亲测可以运行 step1. 点击file , 选new, 选…...
python 使用 venv 创建虚拟环境 (VSCode)
Python 自带了一个名为 venv 的模块,可以用来创建虚拟环境。这是 Python 官方推荐的方式,不需要额外安装 Anaconda 或其他工具。 假设项目名为myproject,进入到项目目录 cd myproject 创建虚拟环境 python3 -m venv 虚拟环境名(…...
组态软件在物联网中的应用
随着物联网的快速发展,组态软件在物联网中的应用也越来越广泛。组态软件是一种用于创建和管理物联网系统的可视化工具,它能够将传感器、设备和网络连接起来,实现数据的采集、分析和可视化。本文将探讨组态软件在物联网中的应用,并…...
字节火山引擎-大模型声音复刻,流式语音合成接口
字节火山引擎-大模型声音复刻,流式语音合成接口 参考文档:火山引擎-大模型声音复刻文档 官网给出的示例代码有bug,这里已经修改了 创建应用 声音复刻大模型页面查看应用,获取接口调用需要的参数 注意调用tts接口时候需要三个参数…...
QT:Graphics View的坐标系介绍
在 Qt 的 Graphics View 框架中,存在三种不同的坐标系,分别是 物品坐标系(Item Coordinates)、场景坐标系(Scene Coordinates) 和 视图坐标系(View Coordinates)。这三种坐标系在图形…...
轻松搭建:使用Anaconda创建虚拟环境并在PyCharm中配置
一、使用Anaconda创建虚拟环境 1. 安装Anaconda 2..conda常用的命令 3. 创建虚拟环境-以搭建MachineVision为例 4. 激活虚拟环境 5. 安装依赖包 二、PyCharm配置环境 在进行Python项目开发时,合理的环境管理是必不可少的,特别是当你在多个项目中…...
Unity TMPro显示中文字体
TMP默认的字体只能显示英语,那么怎么显示中文呢 1、找到支持中文的字体文件 在c盘搜索Fonts文件夹有很多支持中文的字体文件 我这里选择雅黑 PS.双击打开发现里面有粗体细体普通三个版本,也可以只导入一个版本进去 2、将其拖入到unity Assets里面 3…...
【嵌入式原理设计】实验五:远程控制翻盖设计
目录 一、实验目的 二、实验环境 三、实验内容 四、实验记录及处理 五、实验小结 六、成果文件提取链接 一、实验目的 熟悉和掌握舵机及串口控制方式 二、实验环境 Win10ESP32实验开发板 三、实验内容 1、熟悉舵机的控制方式; 2、用串口发…...
矩阵乘积态简介
定义 矩阵乘积态(Matrix Product State, MPS)是一种用于表示量子多体系统的强大工具,特别是在一维系统中。MPS 是一种张量网络状态,它通过将全局量子态分解为一系列局部张量的乘积来有效地表示量子态。 注释: 量子态表…...
国自然面上项目|基于肺癌精准靶向治疗的基因影像组学研究|基金申请·25-02-26
小罗碎碎念 今天和大家分享一个国自然面上项目,执行年限为2019.01~2022.12,直接费用为57万元。 项目旨在解决肺癌靶向治疗耐药问题,通过整合多组学和影像组学技术构建预测模型。 研究期间,对非小细胞肺癌 CT 影像组学…...
OA办公系统自动渗透测试过程
目录 一、下载环境源码 二、部署环境 三、测试 XSS漏洞 SQL注入 文件上传漏洞 一、下载环境源码 OA源码打包地址: https://download.csdn.net/download/weixin_43650289/90434502?spm=1001.2014.3001.5503 二、部署环境...
Fisher信息矩阵(Fisher Information Matrix,简称FIM)
Fisher信息矩阵简介 Fisher信息矩阵(Fisher Information Matrix,简称FIM)是统计学和信息理论中的一个重要概念,广泛应用于参数估计、统计推断和机器学习领域。它以统计学家罗纳德费希尔(Ronald Fisher)的名…...
nginx反向代理以及负载均衡(常见案例)
一、nginx反向代理 1、什么是代理服务器? 代理服务器,客户机在发送请求时,不会直接发送给目的主机,而是先发送给代理服务器,代理服务接受客户机请求之后,再向主机发出,并接收目的主机返回的数据…...
LabVIEW形状误差测量系统
在机械制造领域,形状与位置公差(GD&T)直接影响装配精度与产品寿命。国内中小型机加工企业因形状误差导致的返工率高达12%-18%。传统测量方式存在以下三大痛点: 设备局限:机械式千分表需人工读数,精度…...
将VsCode变得顺手好用(1
目录 设置中文 配置调试功能 提效和增强相关插件 主题和图标相关插件 创建js文件 设置中文 打开【拓展】 输入【Chinese】 下载完成后重启Vs即可变为中文 配置调试功能 在随便一个位置新建一个文件夹,用于放置调试文件以及你未来写的代码,随便命名但…...
排序模板——C++
0.排序模板题目 题目描述 将读入的 N 个数从小到大排序后输出。 输入格式 第一行为一个正整数 N。 第二行包含 N 个空格隔开的正整数 ai,为你需要进行排序的数。 输出格式 将给定的 N 个数从小到大输出,数之间空格隔开,行末换行且无空格。 …...
HTTP/HTTPS 服务端口监测的简易实现
一 HTTP/HTTPS 服务端口监测的简易实现方法 在当今快节奏的工作环境中,工作忙碌成为了许多职场人的常态。就拿我们团队最近经历的事情来说,工作任务一个接一个,大家都在各自的岗位上争分夺秒地忙碌着。然而,就在这样高强度的工作…...
快速入门——状态管理VueX
Vuex介绍 状态管理 每一个Vuex应用的核心都是一个store,与普通的全局对象不同的是,基于Vue数据与视图绑定的特点,当store中的状态发生变化时,与之绑定的视图也会被重新渲染。 store中的状态不允许被直接修改,改变sto…...
C# 根据Ollama+DeepSeekR1开发本地AI辅助办公助手
在上一篇《访问DeepSeekR1本地部署API服务搭建自己的AI办公助手》中,我们通过通过Ollama提供的本地API接口用Python实现了一个简易的AI办公助手,但是需要运行Py脚本,还比较麻烦,下面我们用C#依据Ollama提供的API接口开发一个本地A…...
Flutter - 基础Widget
Flutter 中万物皆 Widget,基础Widget 同步对应 Android View. 普通文本 Text /*** 控制文本样式统一使用 style:TextStyle, 例:fontSize(字体大小),color(颜色),shadows(阴影)等等* 控制文本布局需单独设置:* textAlign(文不对齐方式)* te…...
Tips :仿真竞争条件 指的是什么?
文章目录 **为什么会出现仿真竞争条件?****典型场景举例****System Verilog 如何解决竞争条件?****1. 使用 `program` 块隔离测试平台****2. 使用 `clocking` 块明确时序关系****3. 非阻塞赋值(`<=`)的合理使用****竞争条件的根本原因****总结****代码结构****1. 设计模…...
【Elasticsearch】script_fields 和 runtime_fields的区别
script_fields和runtime_fields都是 Elasticsearch 中用于动态计算字段值的功能,但它们在实现方式、应用场景和性能表现上存在显著区别。以下是两者的详细对比: 1.定义和应用场景 • script_fields: • 定义:通过 Painless 脚本…...
达梦DTS数据迁移工具生产篇(MySQL->DM8)
本文章使用的DTS工具为 2024年9月18日的版本,使用的目的端DM8数据库版本为2023年12月的版本,注意数据库版本和DTS版本之间跨度不要太大,以免出现各种兼容性的报错。若发现版本差距过大时,请联系达梦技术服务工程师处理。 1. 迁移…...
【安卓逆向】逆向APP界面UI修改再安装
1.背景 有一客户找到我,说能不能把APP首页的底部多余界面去掉。 逆向实战 想要去除安卓应用软件中的内容,需要对APP逆向进行修改再打包。 通过工具 MIT管理器工具 提取APK包,点击apk文件,点击查看反编译apk。 搜索关键字。这里关键…...
企业级大模型应用的Java-Python异构融合架构实践
一、后端语言相关技术生态 Python语言 Python在AI计算领域拥有全面的生态支持: 底层工具库: Pandas、NumPy、SciPy、Matplotlib深度学习框架: PyTorch、TensorFlow领域专用框架: HuggingFace Transformers(社区生态为主) 常见Python框架 …...
深度剖析数据中台架构图,铸造数字文明的基石
🔥🔥 AllData大数据产品是可定义数据中台,以数据平台为底座,以数据中台为桥梁,以机器学习平台为中层框架,以大模型应用为上游产品,提供全链路数字化解决方案。 ✨奥零数据科技官网:http://www.aolingdata.com ✨AllData开源项目:https://github.com/alldatacenter/a…...
python实现基于文心一言大模型的sql小工具
一、准备工作 注册与登录: 登录百度智能云千帆控制台,注册并登录您的账号。 创建千帆应用: 根据实际需求创建千帆应用。创建成功后,获取AppID、API Key、Secret Key等信息。如果已有千帆应用,可以直接查看已有应用的AP…...
飞腾腾锐D2000 + OpenHarmony 4.1release部署deepseek大模型
简介 1.1 飞腾腾锐D2000 飞腾腾锐D2000是一款面向桌面应用的高性能通用处理,集成8个飞腾自主研发的高能效处理器核FTC663,兼 容64位ARMv8指令集并支持ARM64和ARM32两种执行模式,支持单精度、双精度浮点运算指令和ASIMD处理 指令,主…...
进程概念、PCB及进程查看
文章目录 一.进程的概念进程控制块(PCB) 二.进程查看通过指令查看进程通过proc目录查看进程的cwd和exe获取进程pid和ppid通过fork()创建子进程 一.进程的概念 进程是一个运行起来的程序,而程序是存放在磁盘的,cpu要想执行程序的指…...
Oracle 数据库基础入门(一):搭建数据管理基石
在当今数字化时代,数据库作为数据管理的核心工具,对于各类应用系统的开发至关重要。尤其是在 Java 全栈开发领域,掌握一款强大的数据库技术是必备技能。Oracle 数据库以其卓越的性能、高度的可靠性和丰富的功能,在企业级应用中广泛…...
selenium如何实现,开启浏览器的开发者工具模式,并且开启 toggle移动设备模拟模式
核心实现代码 pythonCopy Code from selenium import webdriver from selenium.webdriver.chrome.options import Options def enable_devtools_with_toggle(): options Options() # 强制开启开发者工具 options.add_argument("--auto-open-devtools-for-tabs&quo…...
分布式锁实现(数据库+Redis+Zookeeper)
1. 数据库分布式锁 实现原理 基于唯一索引: 创建一张锁表,通过唯一索引(如锁名称)保证互斥性。 加锁:插入一条记录,成功则获取锁,失败则重试。 解锁:删除对应记录。 乐观锁&…...
七、Spring Boot:初识与项目搭建
深入解析 Spring Boot:初识与项目搭建 Spring Boot 是基于 Spring Framework 的开源 Java 基础框架,旨在简化 Spring 应用的开发过程。它通过“约定优于配置”的理念,极大地减少了开发中的配置工作,同时提供了“开箱即用”的功能…...
记录一下用docker克隆某授权制定ip的环境恢复
#首先还是要看日志根据问题去进行调整 java web的老项目配置文件一般是 bin启动里边的脚本 还有conf中的 xml配置文件 再或者就是classes中的配置文件,再或者就是lib中的jar包中的配置文件 1.安装docker 2.创建docker网络 docker network create --driver bridge --subnet…...
【含文档+PPT+源码】基于微信小程序的健康饮食食谱推荐平台的设计与实现
项目介绍 本课程演示的是一款基于微信小程序的健康饮食食谱推荐平台的设计与实现,主要针对计算机相关专业的正在做毕设的学生与需要项目实战练习的 Java 学习者。 1.包含:项目源码、项目文档、数据库脚本、软件工具等所有资料 2.带你从零开始部署运行本…...
主流虚拟化技术讲解
目录 VMware vSphere Microsoft Hyper-V KVM(Kernel-based Virtual Machine) OpenStack VMware vSphere 架构与组件:VMware vSphere 是基于裸金属虚拟化技术的平台,核心组件包括 ESXi 主机和 vCenter Server。ESXi 是虚拟化层…...
java开发——为什么要使用动态代理?
举个例子:假如有一个杀手专杀男的,不杀女的。代码如下: public interface Killer {void kill(String name, String sex);void watch(String name); }public class ManKiller implements Killer {Overridepublic void kill(String name, Stri…...
kotlin 知识点一 变量和函数
在Kotlin中定义变量的方式和Java 区别很大,在Java 中如果想要定义一个变 量,需要在变量前面声明这个变量的类型,比如说int a表示a是一个整型变量,String b表 示b是一个字符串变量。而Kotlin中定义一个变量,只允许在变量…...
将CUBE或3DL LUT转换为PNG图像
概述 在大部分情况下,LUT 文件通常为 CUBE 或 3DL 格式。但是我们在 OpenGL Shader 中使用的LUT,通常是图像格式的 LUT 文件。下面,我将教大家如何将这些文件转换为 PNG 图像格式。 条形LUT在线转换(不是8x8网络)&am…...
侯捷 C++ 课程学习笔记:类的声明与构造函数
目录 一、类的声明 二、内联函数 三、访问级别 四、构造函数 五、构造函数重载 六、实际应用案例 七、学习心得 一、类的声明 类的声明是定义类的基本结构,包括类的成员变量和成员函数。类的声明分为类头和类体两部分。 类头(class head…...