Diamond iO:实用 iO 的第一缕曙光
1. 引言
当前以太坊基金会PSE的Machina iO团队宣布,其已经成功实现了 Diamond iO: A Straightforward Construction of Indistinguishability Obfuscation from Lattices —— 其在2025年2月提出的、结构简单的不可区分混淆(iO)构造,并完成了其端到端的完整工作流程。详细的开源代码见:
- https://github.com/MachinaIO/diamond-io(Rust + Python)
当前的实现在细节上与理论构造略有不同,并仅支持一小部分电路功能。不过,它已经展示了 Diamond iO 所引入的新技术的具体效率,为实现实用化 iO 开辟了新的路径。
2. iO 拥有强大能力,但离实用尚远
在由数据驱动的算法不断加速科技发展的同时,控制这些海量数据的却是中心化实体,个人对自己数据的掌控力正不断减弱。
一个全球性的私密计算平台是实现技术加速与个人数据主权之间平衡、并进一步推动两者发展的唯一可行方案。随着委托给该平台的隐私信息的价值不断上升,必须依赖一个可以在任何安全级别下扩展的安全基础。
与多方计算(Multi-Party Computation, MPC)或多方同态加密(Multi-Party Fully Homomorphic Encryption, MP-FHE)等其他技术不同,MPC和MP-FHE面临隐私可扩展性问题(详情见PSE团队2025年1月博客Why We Can’t Build Perfectly Secure Multi-Party Applications (yet)),iO 完全消除了对可信委员会在分布式设置之后的持续依赖。 换句话说,iO 启用了一种可编程协议,它充当了完美的无需信任的第三方,其安全性仅依赖于密码学难题,就像 Nick Szabo 所定义的 The God Protocols 神之协议。
在一系列关于 iO 的研究之后,Aayush Jain、Huijia Lin 和 Amit Sahai 在 2020 年的突破性工作——Indistinguishability Obfuscation from Well-Founded Assumptions 展示了 iO 可以仅基于标准密码学假设构造,这些假设已经通过十多年研究得到牢固建立。然而,由于构造过程极其复杂,iO 长期以来一直被视为一个理论性的密码学原语。事实上,近期关于 iO 实现的研究——2015年论文Idea: Benchmarking Indistinguishability Obfuscation – A Candidate Implementation 报告称,对一个 2 位乘法电路进行混淆的模拟结果是:大约需要 1 0 27 10^{27} 1027 年的时间以及 20 ZB(泽字节)的内存。
3. Diamond iO:一个可实现的 iO 构造
Diamond iO 通过提出一个基于格的全新 iO 构造,成功克服了以往难以实现的障碍。这一构造足够简单,可以实际落地。此前 iO 方案中一个常见的瓶颈是严重依赖功能加密(functional encryption,FE)中开销高昂(且递归)的运算。Diamond iO 通过改用简单的矩阵运算解决了这一问题。
https://github.com/MachinaIO/diamond-io)实现了Diamond iO: A Straightforward Construction of Indistinguishability Obfuscation from Lattices 论文中第 4 节定义的构造。此次实现与理论构造之间有以下一些小差异:
- RLWE 与 LWE。 论文在误差学习(learning with error,LWE)设定下描述该方案,而代码实现则采用了环误差学习(RLWE)设定。在实践中,用多项式环替代了有限域元素,使得每个矩阵中能打包更多信息位,并可利用数论变换高效地完成乘法运算。
- 伪随机函数(PRF)方案。 理论构造中通过 FHE 同态计算 PRF;而在代码实现中,不使用 FHE,而是根据评估者的输入位复用密钥,作为 PRF 密钥来执行。这一机制将在即将发布的论文更新版本中详细说明。
- 电路模型。 理论构造混淆整个电路,而代码实现中,混淆器设置一个私钥 k k k 和一个电路 C C C,以获得一个只隐藏 k k k 的混淆程序,电路 C C C 则保持公开。评估者随后可以在不交互的情况下,对其输入 x x x 执行混淆程序,得到 C ( k , x ) C(k, x) C(k,x),而无法获取其他信息。这与实际应用场景(详情见2025年4月博客Why program obfuscation matters)一致,即通常只需隐藏签名或解密密钥,而functionality功能需保持透明。
- FHE 方案。 理论构造采用了 GSW FHE(详情见2013年论文Homomorphic Encryption from Learning with Errors: Conceptually-Simpler, Asymptotically-Faster, Attribute-Based),而实现则采用了基于 RLWE 的更简单加密方法,出自 LPR10——2010年论文On Ideal Lattices and Learning with Errors Over Rings。该方案仅支持对加密的二进制向量进行线性同态操作。相比 GSW,它所需的密文位数更少。
- 缺少伪随机预言机。 伪随机预言机——见2023年论文The Pseudorandom Oracle Model
and Ideal Obfuscation(可通过哈希函数实现)在安全性证明中是必要的,确保 iO 能支持不仅仅是伪随机功能,还包括通用功能(详见 BDJ+24——见2024年论文Pseudorandom Obfuscation and Applications 第 5.4 小节)。不过目前该部分尚未在实现中加入,因为所需的哈希函数仍过于复杂。
尽管以上差异(除第一项外)均是为了降低 AKY24——2024年论文Compact Pseudorandom Functional Encryption from Evasive LWE 中功能加密方案的实现复杂度,但 Diamond iO 的关键创新点——即 将评估者输入位 插入 由混淆器提供的 FE 密文的矩阵处理过程——仍按理论构造实现(仅作了些微优化)。因此,尽管存在部分差异,该实现依然成功展示了Diamond iO论文中所提出新技术的具体效率。
4. 超越理论:基准测试结果
在基准测试场景中,混淆器设置了一个公开电路 C C C,其算术深度(加法和乘法层数)和输入规模均可变。作为混淆算法的一部分,混淆器会对一个二进制向量形式的硬编码密钥 k k k 进行采样,并将其嵌入到被混淆的电路中。随后,混淆后的电路被发布,任何评估者都可以在其动态选择的输入 x x x 上运行该电路,获得 C ( k , x ) C(k,x) C(k,x),无需与混淆器交互,也无法获取 k k k 的信息(除非能从 C ( k , x ) C(k,x) C(k,x) 中推断出来)。
// 公共电路 C
let mut public_circuit = PolyCircuit::new();// 输入:BaseDecompose(ct)、评估者输入
// 输出:BaseDecompose(ct) * acc
{let inputs = public_circuit.input((2 * log_base_q) + 1);let mut outputs = vec![];let eval_input = inputs[2 * log_base_q];// 根据 add_n 和 mul_n 的值计算 acclet mut acc = if add_n == 0 {public_circuit.const_one_gate()} else {public_circuit.const_zero_gate()};for _ in 0..add_n {acc = public_circuit.add_gate(acc, eval_input);}for _ in 0..mul_n {acc = public_circuit.mul_gate(acc, eval_input);}// 计算输出for ct_input in &inputs[0..2 * log_base_q] {let muled = public_circuit.mul_gate(*ct_input, acc);outputs.push(muled);}public_circuit.output(outputs);
}
在下面的描述中,“乘法深度”指的是公共电路中的乘法门深度,而不是整个电路的深度。即使该深度为 0,整个被混淆和被评估的电路也至少有一个深度,因为最终的 FHE 解密步骤包含一次内积操作。
通过将公共电路设置为恒等函数并验证评估输出是否与混淆器采样的硬编码密钥相匹配,确认了实现的正确性。
需要特别强调的一个性能要点是:
- 混淆操作是每个应用仅需进行一次的过程。
由于可以假设混淆器拥有强大的硬件资源,因此优化的重点应放在评估阶段,它是一个重复执行、性能关键的过程。
4.1 基准测试设置
使用未启用任何功能标志(feature flags)编译的 dio CLI 可执行文件,在上述场景下对实现进行了基准测试。对于每个实验配置,分别测量了执行时间、内存消耗以及混淆电路的大小,并取其平均值。基准测试所用公共电路中的加法层和乘法层(即深度)根据实验设置进行了调整。
选用了根据 https://github.com/malb/lattice-estimator 评估能够提供至少 80 位安全性(对抗当前已知最佳攻击方式)的最优参数。这一过程通过所实现的模拟器脚本自动完成。
4.2 基准测试 1:电路复杂度(固定输入规模)
在第一个基准测试中,将输入规模固定为 1 位,通过改变公共电路中乘法的深度来扩展电路复杂度,如下表所示(表 1)。此处,忽略 FHE 解密过程中用于内积计算的一个乘法深度,因为这是与公共电路定义无关的通用操作。
表1——基准测试 1的试验设置:
乘法深度(Multiplicative depth) | 参数配置 | 最终电路门数(输入 / 常量 / 加法 / 减法 / 乘法) |
---|---|---|
0 | ID 33 | 46 / 108 / 36 / 0 / 180 |
5 | ID 34 | 58 / 144 / 68 / 4 / 260 |
10 | ID 35 | 76 / 198 / 106 / 4 / 370 |
这些实验在以下环境中进行:
- 机器配置: AWS
i4i.8xlarge
实例(32 核 vCPU,256 GB 内存) - 基准测试所用代码提交版本: f3b2fdc
基准测试 1 的结果: 表 2 总结了每个乘法深度下电路混淆执行时间、峰值内存使用以及混淆电路大小的结果。第二列、第三列和第四列分别表示混淆电路并写入磁盘所需时间、从磁盘加载混淆电路到内存所需时间,以及评估该电路所需时间。
表2——每个乘法深度下的基准测试1的结果:
乘法深度 | 混淆时间(分钟) | 加载时间(分钟) | 执行时间(分钟) | 峰值内存使用(GB) | 混淆电路大小(GB) |
---|---|---|---|---|---|
0 | 15.80 | 4.575 | 2.542 | 34.30 | 6.303 |
5 | 39.85 | 12.84 | 7.789 | 80.38 | 10.79 |
10 | 129.3 | 42.16 | 29.94 | 225.1 | 19.77 |
图1——不同乘法深度下的各阶段执行时间变化图:
图2——不同乘法深度下的峰值内存使用与混淆电路大小变化图:
图 1 展示了各个操作的执行时间随乘法深度增加而呈超线性增长的趋势。图 2 所示的峰值内存使用量和混淆电路大小也遵循相同趋势。
这一趋势可从理论上解释如下:
- 在评估阶段,累积误差的上界会随电路深度呈指数级增长。
- 为了保持正确性,模数 q q q 的位长必须与电路深度成正比地增长。
- 在混淆电路中包含的矩阵中,最大的矩阵(即preimage原像矩阵)的大小大致随 q q q 的位长或其平方而增长。
- 因此,其位长至少以深度的平方速度增加,导致总体执行时间的增长快于线性趋势。
4.3 基准测试 2:输入规模(固定电路复杂度)
在第二组基准测试中,将公共电路的复杂度保持与基准测试 1 中乘法深度为 0 的情形一致,并变更输入位数,如表 3 所示。
表3——基准测试 2 的实验设置:
输入规模(比特) | 参数配置 | 最终电路门数量(输入 / 常量 / 加法 / 减法 / 乘法) |
---|---|---|
1 | ID 33 | 46 / 108 / 36 / 0 / 180 |
2 | ID 36 | 58 / 144 / 48 / 0 / 240 |
4 | ID 39 | 82 / 216 / 72 / 0 / 360 |
这些实验在如下环境中进行:
- 机器配置: AWS
i4i.16xlarge
实例(64 个 vCPU,512 GB 内存) - 基准测试使用的代码提交版本: a2fe732
与基准测试 1 中的实现不同,基准测试 2 的实现仅在每次评估步骤中从磁盘加载所需的部分混淆电路,从而避免了即使在输入规模较大时也可能发生的内存溢出。
基准测试 2 的结果。 表 4 总结了不同输入规模下的混淆时间、评估时间、峰值内存使用和混淆电路大小。其中第三列包括在评估过程中从磁盘加载混淆电路所需的时间。
表4——不同输入规模下的基准测试2的结果:
输入规模(比特) | 混淆时间(分钟) | 评估时间(分钟) | 峰值内存使用(GB) | 混淆电路大小(GB) |
---|---|---|---|---|
1 | 12.55 | 2.925 | 20.80 | 6.303 |
2 | 52.01 | 11.54 | 62.97 | 20.76 |
4 | 372.8 | 85.19 | 270.5 | 88.05 |
图 3——输入规模递增下的执行时间变化图:
图 4——输入规模递增下的峰值内存使用和混淆电路大小变化图:
图 3 和图 4 展示了与基准测试 1 相比,基准测试 2 中的各项指标随着输入规模增长而上升得更快。理论分析表明,与乘法深度类似,模数 q q q 的位长度也会随着输入规模线性增长。然而,这种增长不仅会导致每个矩阵变大,还会线性增加需要使用的原像矩阵数量。因此,理论上可以解释为何执行时间和数据大小的增长速度超过了基准测试 1 中观察到的水平。
5. 讨论:迈向实用可行性
这些基准测试结果表明,无论是混淆时间、评估时间,还是混淆电路的大小,在乘法深度和输入规模的变化下,增长趋势都是非线性的。然而值得鼓舞的是,评估时间的增长速度慢于其他两者,这是一个积极信号,因为评估是最频繁执行的过程。
尽管当前实现距离实际可用的电路规模似乎还有一定距离,但根据 GGH+13——2013年论文Candidate Indistinguishability Obfuscation and Functional Encryption for all circuits 和 BIS+17——2017年论文Lattice-Based SNARGs and Their Application to More Efficient Obfuscation 的观点,实际上并不需要支持对任意复杂电路的混淆。相反,只需要支持包含以下逻辑的电路即可:
- 通过零知识证明(ZKP)验证 FHE 评估的正确性,并根据结果有条件地使用嵌入的密钥解密给定密文。
- 这样一来,可以将应用逻辑外包给一个 FHE 程序,同时专注于高效地混淆一个具有固定乘法深度和输入规模的电路。
6. 未来研究方向
下一步将着手解决以下安全性与效率方面的挑战。
-
安全性挑战有:
- 关于 evasive LWE 假设的近期攻击。 以下四篇论文均发表于 Diamond iO 论文之后,它们提出了针对 evasive LWE 假设的新型攻击。尽管 Diamond iO 的安全性证明高度依赖这一假设,但据Machina iO团队所知,这些攻击目前仅在特定参数和采样器设定下有效,而这些设定并不一定适用于现实中基于该假设的密码方案。Machina iO团队目前正在评估这些攻击是否可以适用于Diamond iO构造中使用的具体参数和采样方式。
- 2025年论文 Simple and General Counterexamples for Private-Coin Evasive LWE(针对私密币 evasive LWE 的简单且通用的反例)
- 2025年论文 Evasive LWE: Attacks, Variants & Obfustopia(evasivse LWE:攻击、变体与混淆乌托邦)
- 2025年论文 Lattice-Based Post-Quantum iO from Circular Security with Random Opening Assumption(基于格的后量子 iO 构造:来自循环安全与随机揭示假设)
- 2025年论文 A Note on Obfuscation-based Attacks on Private-Coin Evasive LWE(关于基于混淆的对私密币 evasive LWE 的攻击研究)
- 分布式混淆。 细心的读者可能已经注意到,如果混淆器仍然掌握混淆程序中的秘密,那么 iO 几乎毫无意义。一个朴素的解决方案是将混淆过程置于 MPC(多方安全计算)中执行,但这在现实中极其不切实际。很期待探索更加可行的方式来实现混淆的分布式可信初始化,因为这个议题在现有文献中基本未被重视。
-
效率方面的挑战有:
- 评估过程中的噪声刷新。 如前所述,只需支持对一个验证零知识证明并随后解密给定 FHE 密文的电路进行混淆。然而,由于当前实现支持的输入规模有限,还无法对这样一个电路进行混淆。具体来说,由于输入规模越大,累计误差呈指数增长,导致模数位数线性增长,因此Machina iO团队正在研究在评估过程中降低误差的技术,如 HLL23——2023年论文Attribute-Based Encryption for Circuits of Unbounded Depth from Lattices: Garbled Circuits of Optimal Size, Laconic Function Evaluation, and More 中提出的用于 BGG+ 编码的技术。
7. Machina iO团队介绍
Machina(读音为“mah-kin-ah”)iO 是 Privacy and Scaling Explorations(PSE) 项目中的一部分,致力于将不可区分混淆(iO)从理论推进到实践。将持续在研究与工程方面努力,并计划发布一系列文章,解释技术背后的核心理念、愿景,以及在实现过程中汲取的经验教训。
8. Machina iO团队致谢
衷心感谢 OpenFHE 和 openfhe-rs 的开发者们。这些开源格加密与 FHE 库中对 trapdoor 采样、RLWE 原语以及 Rust 绑定的优化实现,为构建 Diamond iO 提供了关键支持。同时也感谢 Yuriy Polyakov 教授在 preimage 采样方面提供的宝贵建议,以及对 Diamond iO 优化实现的深刻反馈。
参考资料
[1] Machina iO团队2025年4月28日博客 HELLO, WORLD: THE FIRST SIGNS OF PRACTICAL IO
相关文章:
Diamond iO:实用 iO 的第一缕曙光
1. 引言 当前以太坊基金会PSE的Machina iO团队宣布,其已经成功实现了 Diamond iO: A Straightforward Construction of Indistinguishability Obfuscation from Lattices —— 其在2025年2月提出的、结构简单的不可区分混淆(iO)构造…...
Spring MVC中跨域问题处理
在Spring MVC中处理跨域问题可以通过以下几种方式实现,确保前后端能够正常通信: 方法一:使用 CrossOrigin 注解 适用于局部控制跨域配置,直接在Controller或方法上添加注解。 示例代码: RestController CrossOrigin…...
Python爬虫(20)Python爬虫数据存储技巧:二进制格式(Pickle/Parquet)性能优化实战
目录 背景介绍一、二进制存储的核心优势二、Python Pickle:轻量级对象序列化1. 基本介绍2. 代码示例3. 性能与局限性 三、Apache Parquet:列式存储的工业级方案1. 基本介绍2. 代码示例(使用PyArrow库)3. 核心优势 四、性能对比与选…...
MCP系列(一)什么是MCP?
一、MCP 是什么:从 USB-C 到 AI 的「万能接口」哲学 MCP(Model Context Protocol,模型上下文协议) 是Anthropic于2024年11月推出的AI跨系统交互标准,专为解决LLM(大语言模型)的「数字失语症」—…...
使用Java NIO 实现一个socket通信框架
使用Java NIO(非阻塞I/O)实现一个Socket通信框架,可以让你构建高性能的网络应用。NIO提供了Channel、Buffer和Selector等核心组件,支持非阻塞模式下的网络编程。下面是一个简单的例子,展示了如何使用Java NIO创建一个基本的服务器端和客户端进行Socket通信。 1.服务器端 …...
Web前端技术栈:从入门到进阶都需要学什么内容
概述 Web前端技术栈:从入门到进阶都需要学什么内容。 1. jQuery:经典高效的DOM操作利器 作为早期前端开发的“瑞士军刀”,jQuery通过简洁的语法和链式调用大幅简化了DOM操作与事件处理。其核心模块如选择器引擎、动画效果和Ajax交互至今仍值…...
Kepware 连接Modbus TCP/IP
Modbus TCP modbus tcp 是modbus协议的一个变种,基于TCP/IP协议栈在以太网上进行通信。Modbus TCP采用客户端-服务器(Master-Slave)的通信模型。客户端发起请求,服务器响应请求。一个网络中可以有多个客户端和服务器,…...
PyCharm连接WSL2搭建的Python开发环境
目录 一、开启WSL2服务 二、安装Ubuntu 三、安装Anaconda 四、构建Tensorflow_gpu环境 五、PyCharm连接到WSL2环境 使用 PyCharm 连接 WSL2 搭建 Python 开发环境的主要目的是结合 Windows 的易用性和 Linux 的开发优势,提升开发效率和体验。以下是具体原因和优…...
JVM中类加载过程是什么?
引言 在Java程序运行过程中,类的加载是至关重要的环节,它直接关系到程序的执行效率和安全性。类加载不仅仅是简单地将.class文件读取到内存中,而是经历了加载、连接(包含验证、准备和解析)以及初始化等多个复杂步骤&a…...
JVM中对象的存储
引言 在 Java 虚拟机中,对象的内存布局是一个非常基础且重要的概念。每个 Java 对象在内存中都由三个主要部分构成:对象头(Header)、实例数据(Instance Data)和对齐填充(Padding)。…...
精益数据分析(48/126):UGC商业模式的指标剖析与运营策略
精益数据分析(48/126):UGC商业模式的指标剖析与运营策略 在创业和数据分析的学习之旅中,探索不同商业模式的运营奥秘是我们不断前行的动力。今天,依旧怀揣着和大家共同进步的期望,深入研读《精益数据分析》…...
SpringBoot优雅参数检查
SpringBoot优雅参数检查 在 Spring Boot 中,参数验证通常基于 JSR-380(Bean Validation 2.0)规范,结合 javax.validation(或 jakarta.validation)和 Hibernate Validator 实现。以下是常用的验证注解及其意…...
(九)PMSM驱动控制学习---分流电阻采样及重构
在电机控制当中,无论是我们的控制或者电机工作情况的检测,都十分依赖于电机三相电流的值, 所以相电流采样再在FOC控制中是一个特别关键的环节。 在前几篇中我们介绍了逆变电路的相关内容,所以在此基础上我们接着说道电流采样。目前…...
医疗人工智能大模型中的关键能力:【中期训练】mid-training
引言 医疗人工智能(AI)领域的快速发展正在重塑医疗保健的未来。从辅助诊断到个性化治疗方案,AI技术已经显示出改变医疗实践的巨大潜力。然而,在将AI技术应用于医疗场景时,我们面临着独特的挑战。医疗数据的复杂性、决策的高风险性以及对可解释性的严格要求,都使得医疗AI…...
Unity垃圾回收(GC)
1.GC的作用:定期释放不再使用的内存空间。 注:C不支持GC,需要手动管理内存,使用new()申请内存空间,使用完后通过delete()释放掉,但可能出现忘记释放或者指针…...
什么是跨域,如何解决跨域问题
什么是跨域,如何解决跨域问题 一、什么是跨域 跨域是指浏览器出于安全考虑,限制网页脚本访问不同源(协议、域名、端口)的资源。两个URL的协议、域名或端口任意一个不相同时,就属于不同源,浏览器会阻止脚本…...
JVM的双亲委派模型
引言 Java类加载机制中的双亲委派模型通过层层委托保证了核心类加载器与应用类加载器之间的职责分离和加载安全性,但其单向的委托关系也带来了一些局限性。尤其是在核心类库需要访问或实例化由应用类加载器加载的类时,双亲委派模型无法满足需求…...
ARCGIS PRO DSK 选择坐标系控件(CoordinateSystemsControl )的调用
在WPF窗体上使用 xml:加入空间命名引用 xmlns:mapping"clr-namespace:ArcGIS.Desktop.Mapping.Controls;assemblyArcGIS.Desktop.Mapping" 在控件区域加入: <mapping:CoordinateSystemsControl x:Name"CoordinateSystemsControl&q…...
一个电平转换电路导致MCU/FPGA通讯波形失真的原因分析
文章目录 前言一、问题描述二、原因分析三、 仿真分析四、 尝试的解决方案总结前言 一、问题描述 一个电平转换电路,800kHz的通讯速率上不去,波形失真,需要分析具体原因。输出波形如下,1码(占空比75%)低于5V,0码(占空比25%)低于4V。,严重失真。 电平转换电路很简单,M…...
不同OS版本中的同一yum源yum list差异排查思路
问题描述: qemu-guest-agent二进制rpm包的yum仓库源和yum源仓库配置文件path_to_yum_conf, 通过yum list --available -c path_to_yum_conf 查询时,不同的OS版本出现了不同的结果 anolis-8无法识别 centos8可以识别 说明: 1 测试…...
Android Studio开发安卓app 设置开机自启
Android Studio开发安卓app 设置开机自启 AndroidManifest.xml增加配置 增加的配置已标记 AndroidManifest.xml完整配置 <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/androi…...
全文索引数据库Elasticsearch底层Lucene
Lucene 全文检索的心,天才的想法。 一个高效的,可扩展的,全文检索库。全部用 Java 实现,无须配置。仅支持纯文本文件的索引(Indexing)和搜索(Search)。不负责由其他格式的文件抽取纯文本文件,或从网络中抓取文件的过程…...
互联网大厂Java求职面试:分布式系统中向量数据库与AI应用的融合探索
互联网大厂Java求职面试:分布式系统中向量数据库与AI应用的融合探索 面试开场:技术总监与郑薪苦的“较量” 技术总监(以下简称T):郑薪苦先生,请简单介绍一下你在分布式系统设计方面的经验。 郑薪苦&…...
游戏引擎学习第262天:绘制多帧性能分析图
回顾并为今天设定阶段 事情开始录制了,大家好,欢迎来到游戏直播节目。我们正在直播完成游戏的开发工作,目前我们正在做性能分析器,它现在已经非常酷了。我们只是在清理一些界面问题,但它能做的事情真的很厉害。我觉得…...
1、RocketMQ 核心架构拆解
1. 为什么要使用消息队列? 消息队列(MQ)是分布式系统中不可或缺的中间件,主要解决系统间的解耦、异步和削峰填谷问题。 解耦:生产者和消费者通过消息队列通信,彼此无需直接依赖,极大提升系统灵…...
探索 C++ 语言标准演进:从 C++23 到 C++26 的飞跃
引言 C 作为一门历史悠久且广泛应用的编程语言,其每一次标准的演进都备受开发者关注。从早期的 C98 到如今的 C23,再到令人期待的 C26,每一个版本都为开发者带来了新的特性和改进,推动着软件开发的不断进步。本文将深入探讨 C23 …...
ROBOVERSE:面向可扩展和可泛化机器人学习的统一平台、数据集和基准
25年4月来自UC Berkeley、北大、USC、UMich、UIUC、Stanford、CMU、UCLA 和 北京通用 AI 研究院(BIGAI)的论文“ROBOVERSE: Towards a Unified Platform, Dataset and Benchmark for Scalable and Generalizable Robot Learning”。 数据扩展和标准化评…...
【Bootstrap V4系列】学习入门教程之 组件-轮播(Carousel)高级用法
【Bootstrap V4系列】学习入门教程之 组件-轮播(Carousel)高级用法 轮播(Carousel)高级用法2.5 Crossfade (淡入淡出)2.6 Individual .carousel-item interval (单个轮播项目间隔)2.…...
LangChain4j简介
LangChain4j 是什么? The goal of LangChain4j is to simplify integrating LLMs into Java applications. LangChain4j 的目标是简化将 LLMs 集成到 Java 应用程序中。 提供如下能力: ● 统一的 API: LLM 提供商(如 OpenAI 或 Go…...
Git 撤销已commit但未push的文件
基础知识:HEAD^ 即上个版本, HEAD~2 即上上个版本, 依此类推… 查看commit日志 git log撤销commit,保留git add git reset --soft HEAD^ #【常用于:commit成功,push失败时的代码恢复】保留工作空间改动代码,撤销com…...
OC语言学习——面向对象(下)
一、OC的包装类 OC提供了NSValue、NSNumber来封装C语言基本类型(short、int、float等)。 在 Objective-C 中,**包装类(Wrapper Classes)**是用来把基本数据类型(如 int、float、char 等)“包装…...
SafeDrive:大语言模型实现自动驾驶汽车知识驱动和数据驱动的风险-敏感决策——论文阅读
《SafeDrive: Knowledge- and Data-Driven Risk-Sensitive Decision-Making for Autonomous Vehicles with Large Language Models》2024年12月发表,来自USC、U Wisconsin、U Michigan、清华大学和香港大学的论文。 自动驾驶汽车(AV)的最新进…...
什么是先验?(CVPR25)Detail-Preserving Latent Diffusion for Stable Shadow Removal论文阅读
文章目录 先验(Prior)是什么?1. 先验的数学定义2. 先验在深度生成模型中的角色3. 为什么需要先验?4. 先验的常见类型5. 如何选择或构造先验?6. 小结 先验(Prior)是什么? 在概率统计…...
【论文阅读】Attentive Collaborative Filtering:
Attentive Collaborative Filtering: Multimedia Recommendation with Item- and Component-Level Attention Attentive Collaborative Filtering (ACF)、隐式反馈推荐、注意力机制、贝叶斯个性化排序 标题翻译:注意力协同过滤:基于项目和组件级注意力的…...
如何使用极狐GitLab 软件包仓库功能托管 maven?
极狐GitLab 是 GitLab 在中国的发行版,关于中文参考文档和资料有: 极狐GitLab 中文文档极狐GitLab 中文论坛极狐GitLab 官网 软件包库中的 Maven 包 (BASIC ALL) 在项目的软件包库中发布 Maven 产物。然后,在需要将它们用作依赖项时安装它…...
Notion Windows桌面端快捷键详解
通用导航 这些快捷键帮助用户在 Notion 的界面中快速移动。 打开 Notion:Ctrl T 打开一个新的 Notion 窗口或标签页,方便快速进入工作空间。返回上一页:Ctrl [ 导航回之前查看的页面。前进到下一页:Ctrl ] 跳转到导航历史中的…...
企业智能化第一步:用「Deepseek+自动化」打造企业资源管理的智能中枢
随着Deepseek乃至AI人工智能技术在企业中得到了广泛的关注和使用,多数企业开始了AI探索之旅,迅易科技也不例外,且在不断地实践中强化了AI智能应用创新的强大能力。 为解决企业知识管理碎片化、提高内部工作效率等问题,迅易将目光放…...
GoFly企业版框架升级2.6.6版本说明(框架在2025-05-06发布了)
前端框架升级说明: 1.vue版本升级到^3.5.4 把"vue": "^3.2.40",升级到"vue": "^3.5.4",新版插件需要时useTemplateRef,所以框架就对齐进行升级。 2.ArcoDesign升级到2.57.0(目前最新2025-02-10&a…...
LeapVAD:通过认知感知和 Dual-Process 思维实现自动驾驶飞跃——论文阅读
《LeapVAD: A Leap in Autonomous Driving via Cognitive Perception and Dual-Process Thinking》2025年1月发表,来自浙江大学、上海AI实验室、慕尼黑工大、同济大学和中科大的论文。 尽管自动驾驶技术取得了显著进步,但由于推理能力有限,数…...
ps信息显示不全
linux执行ps是默认宽度是受限制的,例如: ps -aux 显示 遇到这种情况,如果显示的信息不是很长可以添加一个w参数来放宽显示宽度 ps -auxw 显示 再添加一个w可以接触宽度限制,有多长就显示多长 ps -auxww 显示...
性能比拼: Redis Streams vs Pub/Sub
本内容是对知名性能评测博主 Anton Putra Redis Streams vs Pub/Sub: Performance 内容的翻译与整理, 有适当删减, 相关指标和结论以原作为准 在这个视频中,我们首先将介绍 Redis Streams 和 Redis Pub/Sub 之间的区别。然后,我们将在 AWS 上运行一个基准…...
实践004-Gitlab CICD部署应用
文章目录 Gitlab CICD部署应用部署设计集成Kubernetes后端Java项目部署创建gitlab部署项目创建部署文件创建流水线提交流水线 前端Web项目部署创建gitlab部署项目创建部署文件创建流水线提交流水线 Gitlab CICD部署应用 部署设计 对于前后端服务都基于 Kubernetes 进行部署&a…...
二叉树与优先级队列
1.树 树是由n个数据构成的非线性结构,它是根朝上,叶朝下。 注意:树形结构之中,子树之间不能连接,不然就不构成树形结构 1.子树之间没有交集 2.除了根节点以外,每一个节点有且只有一个父亲节点 3.一个n个…...
如何使用极狐GitLab 软件包仓库功能托管 npm?
极狐GitLab 是 GitLab 在中国的发行版,关于中文参考文档和资料有: 极狐GitLab 中文文档极狐GitLab 中文论坛极狐GitLab 官网 软件包库中的 npm 包 (BASIC ALL) npm 是 JavaScript 和 Node.js 的默认包管理器。开发者使用 npm 共享和重用代码ÿ…...
uniapp自定义底部导航栏h5有效果小程序无效的解决方案
在使用 uni-app 开发跨端应用时,常见问题之一是自定义底部导航栏(tabbar)在H5端有效,但在小程序端无效。这是因为小程序端的页面结构和生命周期与H5有差异,且小程序端的原生tabbar有更高的优先级,覆盖了自定…...
开发搭载阿里云平台的物联网APP(支持数据接收与发送)
一、开发环境准备 工具安装 HBuilderX:下载并安装最新版(支持Vue.js和uni-app框架)阿里云IoT SDK:使用JavaScript版SDK(如aliyun-iot-mqtt或mqtt.js)插件安装:HBuilderX插件市场搜索安装mqtt相关…...
Flowchart 流程图的基本用法
以下是 Flowchart 流程图 的基本用法整理,涵盖核心概念、符号含义、绘制步骤及注意事项,助你高效表达流程逻辑: 一、流程图的核心作用 可视化流程:将复杂步骤转化为直观图形,便于理解和分析。梳理逻辑:明确…...
Excel模版下载文件导入
工作中经常遇到Excel模板下载,然后填好后再导入的情况,简单记录下,方便下次使用 Excel模版下载(返回Base64) 模板文件存放位置 import java.util.Base64; import org.apache.commons.io.IOUtils; import org.sprin…...
深入了解linux系统—— 进程控制
进程创建 fork函数 在Linux操作系统中,我们可以通过fork函数来创建一个子进程; 这是一个系统调用,创建子进程成功时,返回0给子进程,返回子进程的pid给父进程;创建子进程失败则返回-1给父进程。 我们就可…...
【前端基础】7、CSS的字体属性(font相关)
一、font-size:设置字体大小 设置方法: 具体数值单位 例如:100px 也可以用em为单位:1em代表100%,2em代表200%……0.5em代表50%。 px方式: em方式: 但是设置em的时候具体是多大呢?…...