当前位置: 首页 > news >正文

【隐私计算】算术秘密分享的加法和乘法运算(Beaver Triple预处理)

在安全多方计算中(MPC)中,算术秘密分享是最基础的机制。一直有在接触,但是一直没有整理清楚最基础的加法和乘法计算流程。

算术秘密分享

概念: 一个位宽为 l l l-bit的数 x x x,被拆分为两个在 Z 2 l \mathbb{Z}_{2^l} Z2l环上的数之和。
形式化描述: 对于一个位宽为 l l l-bit的数 x x x,其算术秘密分享是 ⟨ x ⟩ A \langle x\rangle^A xA,则满足 x ≡ ⟨ x ⟩ 0 A + ⟨ x ⟩ 1 A m o d 2 l x \equiv \langle x\rangle^A_0+\langle x\rangle^A_1~\mathrm{mod}~2^l xx0A+x1A mod 2l,其中, ⟨ x ⟩ 0 A , ⟨ x ⟩ 1 A ∈ Z 2 l \langle x\rangle^A_0, \langle x\rangle^A_1 \in \mathbb{Z}_{2^l} x0A,x1AZ2l
Share(分享)算法
P i P_i Pi生成随机数 r ∈ R Z 2 l r\in_R\mathbb{Z}_{2^l} rRZ2l,令 ⟨ x ⟩ i A = x − r \langle x \rangle^A_i=x-r xiA=xr作为自己的share,并将随机数 r r r发给另一方 P 1 − i P_{1-i} P1i,即 ⟨ x ⟩ 1 − i A = r \langle x \rangle^A_{1-i}=r x1iA=r
Reconstruct(重构)算法
P 1 − i P_{1-i} P1i将自己的share发给 P i P_i Pi,然后 P i P_i Pi计算 x = ⟨ x ⟩ 0 A + ⟨ x ⟩ 1 A x=\langle x\rangle^A_0+\langle x\rangle^A_1 x=x0A+x1A重构真实的 x x x值。

算术秘密分享的加法

加法非常简单,两方在本地直接计算share的加法,即满足真实值的加法。
当计算 z = x + y z=x+y z=x+y时, P i P_i Pi在本地计算 ⟨ z ⟩ i A = ⟨ x ⟩ i A + ⟨ y ⟩ i A \langle z\rangle^A_i=\langle x\rangle^A_i+\langle y\rangle^A_i ziA=xiA+yiA
本地可加性很好证明, P 0 P_0 P0计算 ⟨ z ⟩ 0 A = ⟨ x ⟩ 0 A + ⟨ y ⟩ 0 A \langle z\rangle^A_0=\langle x\rangle^A_0+\langle y\rangle^A_0 z0A=x0A+y0A,同时 P 1 P_1 P1计算 ⟨ z ⟩ 1 A = ⟨ x ⟩ 1 A + ⟨ y ⟩ 1 A \langle z\rangle^A_1=\langle x\rangle^A_1+\langle y\rangle^A_1 z1A=x1A+y1A,于是, z = ⟨ z ⟩ 0 A + ⟨ z ⟩ 1 A = ⟨ x ⟩ 0 A + ⟨ y ⟩ 0 A + ⟨ x ⟩ 1 A + ⟨ y ⟩ 1 A = x + y z = \langle z\rangle^A_0+\langle z\rangle^A_1=\langle x\rangle^A_0+\langle y\rangle^A_0+\langle x\rangle^A_1+\langle y\rangle^A_1=x+y z=z0A+z1A=x0A+y0A+x1A+y1A=x+y,因此成立。
因此,在MPC中,秘密分享的加法只需简单的本地加法,不会引入任何通信开销。

算术秘密分享的乘法

相比于加法,乘法则复杂很多,需要依靠双方的通信来实现。
当计算 z = x ⋅ y z=x\cdot y z=xy时,需要依赖预处理阶段生成的乘法三元组(Beaver Triple): c = a ⋅ b c=a\cdot b c=ab,注意 a , b , c a, b, c a,b,c均与真实的输入 x , y x, y x,y无关。
下面是基于Beaver Triple计算秘密分享乘法的流程:

  1. P i P_i Pi本地计算 ⟨ e ⟩ i A = ⟨ x ⟩ i A − ⟨ a ⟩ i A \langle e\rangle^A_i=\langle x\rangle^A_i-\langle a\rangle^A_i eiA=xiAaiA ⟨ f ⟩ i A = ⟨ y ⟩ i A − ⟨ b ⟩ i A \langle f\rangle^A_i=\langle y\rangle^A_i-\langle b\rangle^A_i fiA=yiAbiA
  2. 双方共同计算(重构)出 e = ⟨ e ⟩ 0 A + ⟨ e ⟩ 1 A = x − a e=\langle e\rangle^A_0+\langle e\rangle^A_1=x-a e=e0A+e1A=xa f = ⟨ f ⟩ 0 A + ⟨ f ⟩ 1 A = y − b f=\langle f\rangle^A_0+\langle f\rangle^A_1=y-b f=f0A+f1A=yb
  3. P i P_i Pi本地计算 ⟨ z ⟩ i A = i ⋅ e ⋅ f + f ⋅ ⟨ a ⟩ i A + e ⋅ ⟨ b ⟩ i A + ⟨ c ⟩ i A \langle z\rangle^A_i=i\cdot e\cdot f+f\cdot \langle a\rangle^A_i+e\cdot \langle b\rangle^A_i+\langle c\rangle^A_i ziA=ief+faiA+ebiA+ciA
  4. 最后,重构输出 z = ⟨ z ⟩ 0 A + ⟨ z ⟩ 1 A z=\langle z\rangle^A_0+\langle z\rangle^A_1 z=z0A+z1A

证明:
⟨ z ⟩ 0 A = f ⋅ ⟨ a ⟩ 0 A + e ⋅ ⟨ b ⟩ 0 A + ⟨ c ⟩ 0 A \langle z\rangle^A_0=f\cdot \langle a\rangle^A_0+e\cdot \langle b\rangle^A_0+\langle c\rangle^A_0 z0A=fa0A+eb0A+c0A
⟨ z ⟩ 1 A = e ⋅ f + f ⋅ ⟨ a ⟩ 1 A + e ⋅ ⟨ b ⟩ 1 A + ⟨ c ⟩ 1 A \langle z\rangle^A_1=e\cdot f+f\cdot \langle a\rangle^A_1+e\cdot \langle b\rangle^A_1+\langle c\rangle^A_1 z1A=ef+fa1A+eb1A+c1A
z = ⟨ z ⟩ 0 A + ⟨ z ⟩ 1 A = e ⋅ f + a ⋅ f + e ⋅ b + c = ( x − a ) ( y − b ) + a ( y − b ) + ( x − a ) b + c = x y − b x − a y + a b + a y − a b + b x − a b + a b = x y z=\langle z\rangle^A_0+\langle z\rangle^A_1\\~~~=e\cdot f+a\cdot f+e\cdot b+c\\~~~=(x-a)(y-b)+a(y-b)+(x-a)b+c\\~~~=xy-bx-ay+ab+ay-ab+bx-ab+ab\\~~~=xy z=z0A+z1A   =ef+af+eb+c   =(xa)(yb)+a(yb)+(xa)b+c   =xybxay+ab+ayab+bxab+ab   =xy
故成立。

Beaver Triple的生成

上面已经介绍了基于Beaver Triple计算乘法的流程,但是需要注意, c = a b c=ab c=ab也是秘密分享的形式:
c = a b = ( ⟨ a ⟩ 0 A + ⟨ a ⟩ 1 A ) ( ⟨ b ⟩ 0 A + ⟨ b ⟩ 1 A ) = ⟨ a ⟩ 0 A ⟨ b ⟩ 0 A + ⟨ a ⟩ 1 A ⟨ b ⟩ 1 A + ⟨ a ⟩ 0 A ⟨ b ⟩ 1 A + ⟨ a ⟩ 1 A ⟨ b ⟩ 0 A c=ab\\~~~=(\langle a\rangle^A_0+\langle a\rangle^A_1)(\langle b\rangle^A_0+\langle b\rangle^A_1)\\~~~=\langle a\rangle^A_0 \langle b\rangle^A_0+\langle a\rangle^A_1 \langle b\rangle^A_1+\langle a\rangle^A_0\langle b\rangle^A_1+\langle a\rangle^A_1\langle b\rangle^A_0 c=ab   =(⟨a0A+a1A)(⟨b0A+b1A)   =a0Ab0A+a1Ab1A+a0Ab1A+a1Ab0A
可以看到,第一项 ⟨ a ⟩ 0 A ⟨ b ⟩ 0 A \langle a\rangle^A_0 \langle b\rangle^A_0 a0Ab0A和第二项 ⟨ a ⟩ 1 A ⟨ b ⟩ 1 A \langle a\rangle^A_1 \langle b\rangle^A_1 a1Ab1A均可以在 P 0 , P 1 P_0, P_1 P0,P1本地计算,因此无需通信。而重点就在于后两项 ⟨ a ⟩ 0 A ⟨ b ⟩ 1 A , ⟨ a ⟩ 1 A ⟨ b ⟩ 0 A \langle a\rangle^A_0\langle b\rangle^A_1, \langle a\rangle^A_1\langle b\rangle^A_0 a0Ab1A,a1Ab0A,两个share分别在两方,因此必然引入通信,通常我们将这两项称作“交叉项”或CrossTerm。
那么,Beaver Triple的生成,本质上也就是解决交叉项计算的问题。下面介绍两种常用的计算方式:

基于同态加密(HE)的Beaver Triple生成
流程如下:

  1. P 0 P_0 P0 E n c ( ⟨ a ⟩ 0 A ) Enc(\langle a\rangle^A_0) Enc(⟨a0A) E n c ( ⟨ b ⟩ 0 A ) Enc(\langle b\rangle^A_0) Enc(⟨b0A)发给 P 1 P_1 P1
  2. P 1 P_1 P1生成一个随机数 r r r,计算 d = E n c ( ⟨ a ⟩ 0 A ) ⟨ b ⟩ 1 A × E n c ( ⟨ b ⟩ 0 A ) ⟨ a ⟩ 1 A × E n c ( r ) d=Enc(\langle a\rangle^A_0)^{\langle b\rangle^A_1} \times Enc(\langle b\rangle^A_0)^{\langle a\rangle^A_1} \times Enc(r) d=Enc(⟨a0A)b1A×Enc(⟨b0A)a1A×Enc(r),然后将 d d d发给 P 0 P_0 P0
  3. P 0 P_0 P0计算 ⟨ c ⟩ 0 A = ⟨ a ⟩ 0 A + ⟨ b ⟩ 0 A + D e c ( d ) = ⟨ a ⟩ 0 A ⟨ b ⟩ 0 A + ⟨ a ⟩ 0 A ⟨ b ⟩ 1 A + ⟨ a ⟩ 1 A ⟨ b ⟩ 0 A + r \langle c\rangle^A_0=\langle a\rangle^A_0+\langle b\rangle^A_0+Dec(d)=\langle a\rangle^A_0\langle b\rangle^A_0+\langle a\rangle^A_0 \langle b\rangle^A_1+\langle a\rangle^A_1 \langle b\rangle^A_0+r c0A=a0A+b0A+Dec(d)=a0Ab0A+a0Ab1A+a1Ab0A+r
  4. P 1 P_1 P1计算 ⟨ c ⟩ 1 A = ⟨ a ⟩ 1 A ⟨ b ⟩ 1 A − r \langle c\rangle^A_1=\langle a\rangle^A_1\langle b\rangle^A_1-r c1A=a1Ab1Ar

证明:
c = ⟨ c ⟩ 0 A + ⟨ c ⟩ 1 A = ⟨ a ⟩ 0 A ⟨ b ⟩ 0 A + ⟨ a ⟩ 1 A ⟨ b ⟩ 1 A + ⟨ a ⟩ 0 A ⟨ b ⟩ 1 A + ⟨ a ⟩ 1 A ⟨ b ⟩ 0 A = a b c=\langle c\rangle^A_0+\langle c\rangle^A_1\\~~~=\langle a\rangle^A_0 \langle b\rangle^A_0+\langle a\rangle^A_1 \langle b\rangle^A_1+\langle a\rangle^A_0\langle b\rangle^A_1+\langle a\rangle^A_1\langle b\rangle^A_0\\~~~=ab c=c0A+c1A   =a0Ab0A+a1Ab1A+a0Ab1A+a1Ab0A   =ab
故成立。

如上采用的加密算法Enc是Pailler同态加密算法,其同态性如下:

  • 明文加法 <=> 密文乘法;
  • 明文乘法 <=> 密文指数幂

因此在上面流程的第3步中Dec(d)时才会将乘法转成加法,指数幂转成乘法。关于背后的原理参考我的另一篇博客:【密码学基础】半/全同态加密算法基础学习笔记

基于不经意传输(OT)的Beaver Triple生成
另一种常用的方式是基于COT(相关性不经意传输)的方式。
下面是计算交叉项 ⟨ a ⟩ 0 A ⟨ b ⟩ 1 A \langle a\rangle^A_0\langle b\rangle^A_1 a0Ab1A的流程:

  1. P 0 , P 1 P_0, P_1 P0,P1之间建立COT协议通信,其中 P 0 P_0 P0作为发送方, P 1 P_1 P1作为接收方;
  2. 在第 i i i轮的COT通信中:
    • P 1 P_1 P1输入 ⟨ b ⟩ 1 A [ i ] \langle b\rangle^A_1[i] b1A[i]作为自己的选择比特, P 0 P_0 P0输入相关性函数 f Δ i ( x ) = ( ⟨ a ⟩ 0 A ⋅ 2 i − x ) m o d 2 l f_{\Delta_i}(x)=(\langle a\rangle^A_0 \cdot 2^i - x)~\mathrm{mod}~2^l fΔi(x)=(⟨a0A2ix) mod 2l
    • P 0 P_0 P0获得消息对 ( s i , 0 , s i , 1 ) (s_{i, 0}, s_{i, 1}) (si,0,si,1),其中, s i , 0 ∈ R Z 2 l s_{i, 0}\in _R\mathbb{Z}_{2^l} si,0RZ2l s i , 1 = f Δ i ( s i , 0 ) = ( ⟨ a ⟩ 0 A ⋅ 2 i − s i , 0 ) m o d 2 l s_{i, 1}=f_{\Delta_i}(s_{i, 0})=(\langle a\rangle^A_0 \cdot 2^i - s_{i, 0})~\mathrm{mod}~2^l si,1=fΔi(si,0)=(⟨a0A2isi,0) mod 2l P 1 P_1 P1获得 s i , ⟨ b ⟩ 1 A [ i ] = ( ⟨ b ⟩ 1 A [ i ] ⋅ ⟨ a ⟩ 0 A ⋅ 2 i − s i , 0 ) m o d 2 l s_{i, \langle b\rangle^A_1[i]}=(\langle b\rangle^A_1[i]\cdot \langle a\rangle^A_0 \cdot 2^i - s_{i, 0})~\mathrm{mod}~2^l si,b1A[i]=(⟨b1A[i]a0A2isi,0) mod 2l
    • ⟨ u ⟩ 0 A = ( ∑ i = 0 l s i , 0 ) m o d 2 l \langle u\rangle^A_0=(\sum_{i=0}^ls_{i, 0})~\mathrm{mod}~2^l u0A=(i=0lsi,0) mod 2l, ⟨ u ⟩ 1 A = ( ∑ i = 0 l s i , ⟨ b ⟩ 1 A [ i ] ) m o d 2 l \langle u\rangle^A_1=(\sum_{i=0}^l s_{i, \langle b\rangle^A_1[i]})~\mathrm{mod}~2^l u1A=(i=0lsi,b1A[i]) mod 2l

证明:
⟨ a ⟩ 0 A ⟨ b ⟩ 1 A = ⟨ u ⟩ 0 A + ⟨ u ⟩ 1 A = ∑ i = 0 l s i , 0 + ∑ i = 0 l s i , ⟨ b ⟩ 1 A [ i ] = ∑ i = 0 l ( s i , 0 + ⟨ b ⟩ 1 A [ i ] ⋅ ⟨ a ⟩ 0 A ⋅ 2 i − s i , 0 ) = ∑ i = 0 l ( ⟨ b ⟩ 1 A [ i ] ⋅ ⟨ a ⟩ 0 A ⋅ 2 i ) \langle a\rangle^A_0 \langle b\rangle^A_1=\langle u\rangle^A_0+\langle u\rangle^A_1\\~~~~~~~~~~~~~~~~=\sum_{i=0}^ls_{i, 0}+\sum_{i=0}^l s_{i, \langle b\rangle^A_1[i]}\\~~~~~~~~~~~~~~~~=\sum_{i=0}^l(s_{i, 0}+\langle b\rangle^A_1[i]\cdot \langle a\rangle^A_0 \cdot 2^i - s_{i, 0})\\~~~~~~~~~~~~~~~~=\sum_{i=0}^l(\langle b\rangle^A_1[i]\cdot \langle a\rangle^A_0 \cdot 2^i) a0Ab1A=u0A+u1A                =i=0lsi,0+i=0lsi,b1A[i]                =i=0l(si,0+b1A[i]a0A2isi,0)                =i=0l(⟨b1A[i]a0A2i)
注:到这一步已经非常直观了,其实就是在二进制中做乘法,一个数的每一位去乘另一个数,然后移位(乘上对应位的2的幂次)累加(对每一位的乘法结果求和)。

举例:
假设 ⟨ a ⟩ 0 A = 3 , ⟨ b ⟩ 1 A = 5 = ( 101 ) 2 \langle a\rangle^A_0=3, \langle b\rangle^A_1=5=(101)_2 a0A=3,b1A=5=(101)2,于是:

⟨ a ⟩ 0 A ⟨ b ⟩ 1 A = ⟨ u ⟩ 0 A + ⟨ u ⟩ 1 A = ∑ i = 1 l ( s i , 0 + s i , ⟨ b ⟩ 1 A [ i ] ) = ∑ i = 1 l ( s i , 0 + ⟨ b ⟩ 1 A [ i ] ⋅ ⟨ a ⟩ 0 A ⋅ 2 i − s i , 0 ) = ∑ i = 1 l ( ⟨ b ⟩ 1 A [ i ] ⋅ ⟨ a ⟩ 0 A ⋅ 2 i ) = 1 ⋅ 3 ⋅ 2 0 + 0 ⋅ 3 ⋅ 2 1 + 1 ⋅ 3 ⋅ 2 2 = 3 + 0 + 12 = 15 \langle a\rangle^A_0 \langle b\rangle^A_1=\langle u\rangle^A_0+\langle u\rangle^A_1\\~~~~~~~~~~~~~~~~=\sum_{i=1}^l (s_{i, 0}+s_{i, \langle b\rangle^A_1[i]})\\~~~~~~~~~~~~~~~~=\sum_{i=1}^l (s_{i, 0}+\langle b\rangle^A_1[i]\cdot \langle a\rangle^A_0 \cdot 2^i - s_{i, 0})\\~~~~~~~~~~~~~~~~=\sum_{i=1}^l (\langle b\rangle^A_1[i]\cdot \langle a\rangle^A_0 \cdot 2^i)\\~~~~~~~~~~~~~~~~=1\cdot 3 \cdot 2^0+0 \cdot 3\cdot 2^1+1\cdot 3\cdot 2^2\\~~~~~~~~~~~~~~~~=3+0+12\\~~~~~~~~~~~~~~~~=15 a0Ab1A=u0A+u1A                =i=1l(si,0+si,b1A[i])                =i=1l(si,0+b1A[i]a0A2isi,0)                =i=1l(⟨b1A[i]a0A2i)                =1320+0321+1322                =3+0+12                =15
故计算正确。

相关文章:

【隐私计算】算术秘密分享的加法和乘法运算(Beaver Triple预处理)

在安全多方计算中&#xff08;MPC&#xff09;中&#xff0c;算术秘密分享是最基础的机制。一直有在接触&#xff0c;但是一直没有整理清楚最基础的加法和乘法计算流程。 算术秘密分享 概念&#xff1a; 一个位宽为 l l l-bit的数 x x x&#xff0c;被拆分为两个在 Z 2 l \ma…...

【LeetCode刷题-字符串】--71.简化路径

71.简化路径 思路&#xff1a; 对于给定的字符串&#xff0c;先根据/分割成一个由若干字符串组成的列表&#xff0c;记为names&#xff0c;根据题意names中包含的字符串只能是以下几种&#xff1a; 空字符串一个点两个点只包含英文字母、数字或_的目录名 对于空字符串和一个…...

数据结构与算法(Java)-树形DP题单

树形DP&#xff08;灵神笔记&#xff09; 543 二叉树的直径 543. 二叉树的直径 - 力扣&#xff08;LeetCode&#xff09; 给你一棵二叉树的根节点&#xff0c;返回该树的 直径 。 二叉树的 直径 是指树中任意两个节点之间最长路径的 长度 。这条路径可能经过也可能不经过根…...

C#,《小白学程序》第一课:初识程序,变量,数据与显示

曰&#xff1a;扫地僧练就绝世武功的目的是为了扫地更干净。 1 引言 编程只是一项技术&#xff0c;如包包子&#xff0c;不是什么高深的科学。 学习程序最不好的方法是先学习枯燥的语法。 学习程序主要是用代码解决问题。因此&#xff0c;我们抛开所有的语法与诸多废物&…...

oracle的sysaux使用量排查sql

水1篇工具sql SELECT OCCUPANT_NAME,OCCUPANT_DESC,SCHEMA_NAME,MOVE_PROCEDURE,MOVE_PROCEDURE_DESC,SPACE_USAGE_KBYTES SPACE_USAGE_KB,ROUND(SPACE_USAGE_KBYTES / 1024 / 1024,2) SPACE_USAGE_GFROM V$SYSAUX_OCCUPANTS DORDER BY D.SPACE_USAGE_KBYTES DESC; 分享些经…...

Cytoscape软件下载、安装、插件学习[基础教程]

写在前面 今天分享的内容是自己遇到问题后&#xff0c;咨询社群里面的同学&#xff0c;帮忙解决的总结。 关于Cytoscape&#xff0c;对于做组学或生物信息学的同学基本是陌生的&#xff0c;可能有的同学用这个软件作图是非常溜的&#xff0c;做出来的网络图也是十分的好看&am…...

[Linux] linux防火墙

一、防火墙是什么 防火墙&#xff08;FireWall&#xff09;&#xff1a;隔离功能&#xff0c;工作在网络或主机的边缘&#xff0c;数据包的匹配规则与由一组功能定义的操作组件处理的规则相匹配&#xff0c;根据特定规则检查网络或主机的入口和出口 当要这样做时&#xff0c;基…...

【开源】基于JAVA的音乐偏好度推荐系统

项目编号&#xff1a; S 012 &#xff0c;文末获取源码。 \color{red}{项目编号&#xff1a;S012&#xff0c;文末获取源码。} 项目编号&#xff1a;S012&#xff0c;文末获取源码。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、系统设计2.1 功能模块设计2.1.1 音乐档案模块2.1…...

架构图是什么,该怎么制作?

架构图是指可视化展示软件、系统、应用程序、网络等各种体系结构的一类图表或图形&#xff0c;它能够形象地展示体系结构中各个组成部分和它们之间的关系。 架构图的类型 架构图的种类比较多&#xff0c;逐一列举不太合适&#xff0c;这里只列举一些常见的架构图类型&#…...

信号类型(通信)——最小频移键控(MSK)

系列文章目录 《信号类型&#xff08;通信&#xff09;——仿真》 《信号类型&#xff08;通信&#xff09;——QAM调制信号》 《信号类型&#xff08;通信&#xff09;——QPSK、OQPSK、IJF_OQPSK调制信号》 目录 前言 一、MSK信号特点 1.1、最小频移 1.2、相位连续 二…...

滴滴打车崩了!全过程

滴滴发布致歉10元补偿券&#xff0c;文末可领取 。 事情发生于 2023年11月27日晚~28日中午&#xff0c;滴滴打车服务出现大面积故障&#xff0c;登上微博热搜。 许多用户在使用滴滴出行时遇到了无法叫车、订单异常等问题&#xff0c;导致大量用户滞留在外&#xff0c;出行受阻…...

【刷题】DFS

DFS 递归&#xff1a; 1.判断是否失败终止 2.判断是否成功终止&#xff0c;如果成功的&#xff0c;记录一个成果 3.遍历各种选择&#xff0c;在这部分可以进行剪枝 4.在每种情况下进行DFS&#xff0c;并进行回退。 199. 二叉树的右视图 给定一个二叉树的 根节点 root&#x…...

Gin投票系统(2)

投票系统 数据库的建立 先分析需求&#xff0c;在sql中建立数据库&#xff0c;关于项目数据库如何建立可以在“goweb项目创建流程分析中看如何去建表” 成功后目前有四个表&#xff1a; vote&#xff0c;user&#xff0c;vote_opt,vote_opt_user 建立数据库&#xff0c;可以…...

docker (简介、dcoker详细安装步骤、容器常用命令)一站打包- day01

一、 为什么出现 Docker是基于Go语言实现的云开源项目。 Docker的主要目标是“Build&#xff0c;Ship and Run Any App,Anywhere”&#xff0c;也就是通过对应用组件的封装、分发、部署、运行等生命周期的管理&#xff0c;使用户的APP&#xff08;可以是一个WEB应用或数据库应…...

请简要说明 Mysql 中 MyISAM 和 InnoDB 引擎的区别

“请简要说明 Mysql 中 MyISAM 和 InnoDB 引擎的区别”。 屏幕前有多少同学在面试过程与遇到过类似问题&#xff0c; 可以在评论区留言&#xff1a;遇到过。 考察目的 对于 xxxx 技术的区别&#xff0c;在面试中是很常见的一个问题 一般情况下&#xff0c;面试官会通过这类…...

Nginx漏洞复现与分析

Nginx如何处理PHP请求 Nginx本身不支持直接解析和执行PHP代码,但可以通过与PHP解释器的集成来处理PHP请求。一种常见的方法是使用PHP-FPM(FastCGI Process Manager)作为PHP解释器。 原理图: Step 1 Step 2 +---------------------+ …...

Go 中切片(Slice)的长度与容量

切片长度与容量在 Go 中很常见。切片长度是切片中可用元素的数量&#xff0c;而切片容量是从切片中第一个元素开始计算的底层数组中的元素数量。 Go 中的开发者经常混淆切片长度和容量&#xff0c;或者对它们不够了解。理解这两个概念对于高效处理切片的核心操作&#xff0c;比…...

顶级大厂Quora如何优化数据库性能?

Quora 的流量涉及大量阅读而非写入&#xff0c;一直致力于优化读和数据量而非写。 0 数据库负载的主要部分 读取数据量写入 1 优化读取 1.1 不同类型的读需要不同优化 ① 复杂查询&#xff0c;如连接、聚合等 在查询计数已成为问题的情况下&#xff0c;它们在另一个表中构…...

Java第二十章多线程

一、线程简介 线程是操作系统能够进行运算调度的最小单位&#xff0c;它被包含在进程之中&#xff0c;是进程中的实际运作单位。一个进程可以包含多个线程&#xff0c;这些线程可以并发执行。线程拥有自己的栈和局部变量&#xff0c;但是它们共享进程的其他资源&#xff0c;如…...

家庭教育,培养娃什么最重要?

家庭教育&#xff0c;培养娃什么最重要&#xff1f; 培养能力最重要 &#xff08;我这么认为的&#xff09; 时代巨变&#xff0c;技术变革的非常快&#xff0c;所以总的来说 年轻一代接触的新东西慢慢比老一代的要多&#xff0c;年轻一代的工作会比老一代的多而且多很多&…...

XCTF-web-easyupload

试了试php&#xff0c;php7&#xff0c;pht&#xff0c;phtml等&#xff0c;都没有用 尝试.user.ini 抓包修改将.user.ini修改为jpg图片 在上传一个123.jpg 用蚁剑连接&#xff0c;得到flag...

day52 ResNet18 CBAM

在深度学习的旅程中&#xff0c;我们不断探索如何提升模型的性能。今天&#xff0c;我将分享我在 ResNet18 模型中插入 CBAM&#xff08;Convolutional Block Attention Module&#xff09;模块&#xff0c;并采用分阶段微调策略的实践过程。通过这个过程&#xff0c;我不仅提升…...

以下是对华为 HarmonyOS NETX 5属性动画(ArkTS)文档的结构化整理,通过层级标题、表格和代码块提升可读性:

一、属性动画概述NETX 作用&#xff1a;实现组件通用属性的渐变过渡效果&#xff0c;提升用户体验。支持属性&#xff1a;width、height、backgroundColor、opacity、scale、rotate、translate等。注意事项&#xff1a; 布局类属性&#xff08;如宽高&#xff09;变化时&#…...

.Net框架,除了EF还有很多很多......

文章目录 1. 引言2. Dapper2.1 概述与设计原理2.2 核心功能与代码示例基本查询多映射查询存储过程调用 2.3 性能优化原理2.4 适用场景 3. NHibernate3.1 概述与架构设计3.2 映射配置示例Fluent映射XML映射 3.3 查询示例HQL查询Criteria APILINQ提供程序 3.4 高级特性3.5 适用场…...

ETLCloud可能遇到的问题有哪些?常见坑位解析

数据集成平台ETLCloud&#xff0c;主要用于支持数据的抽取&#xff08;Extract&#xff09;、转换&#xff08;Transform&#xff09;和加载&#xff08;Load&#xff09;过程。提供了一个简洁直观的界面&#xff0c;以便用户可以在不同的数据源之间轻松地进行数据迁移和转换。…...

Neo4j 集群管理:原理、技术与最佳实践深度解析

Neo4j 的集群技术是其企业级高可用性、可扩展性和容错能力的核心。通过深入分析官方文档,本文将系统阐述其集群管理的核心原理、关键技术、实用技巧和行业最佳实践。 Neo4j 的 Causal Clustering 架构提供了一个强大而灵活的基石,用于构建高可用、可扩展且一致的图数据库服务…...

爬虫基础学习day2

# 爬虫设计领域 工商&#xff1a;企查查、天眼查短视频&#xff1a;抖音、快手、西瓜 ---> 飞瓜电商&#xff1a;京东、淘宝、聚美优品、亚马逊 ---> 分析店铺经营决策标题、排名航空&#xff1a;抓取所有航空公司价格 ---> 去哪儿自媒体&#xff1a;采集自媒体数据进…...

深度学习习题2

1.如果增加神经网络的宽度&#xff0c;精确度会增加到一个特定阈值后&#xff0c;便开始降低。造成这一现象的可能原因是什么&#xff1f; A、即使增加卷积核的数量&#xff0c;只有少部分的核会被用作预测 B、当卷积核数量增加时&#xff0c;神经网络的预测能力会降低 C、当卷…...

【C++进阶篇】智能指针

C内存管理终极指南&#xff1a;智能指针从入门到源码剖析 一. 智能指针1.1 auto_ptr1.2 unique_ptr1.3 shared_ptr1.4 make_shared 二. 原理三. shared_ptr循环引用问题三. 线程安全问题四. 内存泄漏4.1 什么是内存泄漏4.2 危害4.3 避免内存泄漏 五. 最后 一. 智能指针 智能指…...

HubSpot推出与ChatGPT的深度集成引发兴奋与担忧

上周三&#xff0c;HubSpot宣布已构建与ChatGPT的深度集成&#xff0c;这一消息在HubSpot用户和营销技术观察者中引发了极大的兴奋&#xff0c;但同时也存在一些关于数据安全的担忧。 许多网络声音声称&#xff0c;这对SaaS应用程序和人工智能而言是一场范式转变。 但向任何技…...