PSI算法经典论文算法概述

news2024/11/28 2:31:29

文章目录

  • 什么是隐私求交PSI
  • PSI协议分类
  • PSI算法的分类
    • 基于哈希函数的PSI算法
    • 基于不经意传输(OT)的 PSI算法
    • 基于GC的PSI算法
    • 基于公钥加密的PSI算法
      • 基于DH的PSI算法
      • 基于RSA盲签名的PSI算法
      • 基于同态加密的PSI算法
    • 基于差分隐私的PSI算法
  • 总结
  • 参考文献

什么是隐私求交PSI

隐私求交是多方安全计算中的密码学技术,它允许数据持有方通过比较加密集合计算得到交集,且任何一方都不会获得其他信息。PSI还存在一种变体,即CS场景。客户端可以获取其与服务器的交集但是服务器无法学习到该集合。如果在一个小的可以预测的域上通过密码哈希比较数据集合,应该采取预防措施来防止字典攻击。

PSI在日常生活中也有许多应用案例。Apple 在密码监控中使用了这种技术。 它已提议将该技术用于其宣布的扩大对儿童的保护。

PSI协议分类

根据数据的托管方式,PSI 协议可分为两大类:传统 PSI 和 委托 PSI。

  1. 在传统的 PSI 类别中,数据所有者直接相互交互,并且在计算时需要拥有其集合的副本,参考论文《Efficient Private Matching and Set Intersection》。
  2. 在委托 PSI 中,PSI 的计算和/或集合的存储可以委托给第三方服务器(它本身可能是被动或主动的对手)。 委托 PSI 类别可以进一步分为两类:(a) 支持一次性委托的类别,以及 (b) 支持重复委托的类别。 支持一次性委托的 PSI 协议要求数据所有者重新编码其数据并将编码后的数据发送到服务器以进行每次计算。 那些支持重复委托的允许数据所有者只将他们的(加密的)数据上传到服务器一次,然后在服务器之外的每次计算中多次重复使用它。

最近,研究人员提出了一种支持数据更新的 PSI 协议变体(包括传统类别和委托类别。 这种类型的 PSI 协议允许数据所有者以低开销和保护隐私的方式将集合元素插入/删除其数据。参考论文《Updatable Private Set Intersection》、《Multi-party Updatable Delegated Private Set Intersection》。

PSI算法的分类

PSI算法大致可用分为以下4类。

  1. 基于哈希函数的PSI算法:这类算法使用哈希函数对数据集中的元素进行哈希,并将哈希值发送给其他参与方进行比对。其中一种常见的算法是Bloom Filter,它使用多个哈希函数将元素映射到一个位向量中。该类型的方法是一种不安全的交集协议,当双方输入域很小的时候,存在字典攻击的风险。

  2. 基于不经意传输(OT)的 PSI算法:这类算法利用零知识证明或者类似的技术,使得参与方可以获取另一方拥有的特定元素,而不了解其他元素的信息。最早提出基于OT的PSI算法是在2014年《Faster Private Set Intersection Based on OT Extension》中。在安全的PSI算法中,基于OT的PSI算法是最快速的,但是通信代价并不是最低的。

  3. 基于GC PSI算法:该算法采用Garbled Circuit(GC)协议作为核心方法,并结合了OT协议来实现PSI。此类协议的每一个交集内元素会带有一个“负载”(payload),可以用来计算交集的一些函数。然而,基于GC方案的性能与其他类型的方案相比仍有较大差距,随着数据规模的增加,电路深度不断增加,导致电路规模快速膨胀,通信、计算、内存开销都随之膨胀。基于GC的PSI方案虽然不如基于OT的PSI算法快速高效,但是其更灵活,并且可以轻松适应计算集合交集功能的变体。

  4. 基于公钥加密的PSI算法:在基于公钥的PSI算法中,参与方通常采用非对称加密算,如RSA、椭圆曲线或同态加密技术将隐私集合中的原始进行加解密计算,找到共同的元素。基于公钥的PSI算法是相对安全且通信消耗最少的PSI算法。

  5. 基于差分隐私的PSI算法:为了防止PSI结果的隐私泄露,提出了交集满足差分隐私的方法,即在PSI结果中添加一定要求的噪声,从而保证敌手无法通过交集结果推测数据集合。交集满足差分隐私广泛应用于数据分析场景,比如社交网络分析、医疗研究、用户行为分析等。基于差分隐私的PSI方案在前述的PSI算法中提供了对结果的安全保护,具有更严格的隐私保护。可以通过需求调整噪声参数平衡隐私保护和数据准确性要求。

基于哈希函数的PSI算法

基于哈希函数的PSI(Private Set Intersection)算法主要包括以下几种常见算法:

  1. Bloom Filter:Bloom Filter是一种经典的基于哈希函数的PSI算法。它使用多个哈希函数对数据集中的元素进行哈希,并将哈希值映射到一个位向量中。通过比对位向量,可以确定两个数据集之间的交集元素。参考文献《Private set intersection with Bloom filters》进行详细了解。

  2. Count-Min Sketch:Count-Min Sketch是一种概率型数据结构,常用于基于哈希函数的PSI算法。它利用多个哈希函数将元素映射到一个二维计数表中,通过对计数进行累加,可以估计元素的出现频率。在PSI中,Count-Min Sketch可以用于判断两个数据集是否存在交集。参考文献《 An improved data stream summary: the CountMin sketch and its applications》。

  3. Cuckoo Filter:Cuckoo Filter是一种近似集合成员检测的数据结构,也可以应用于基于哈希函数的PSI算法。它使用两个哈希函数将元素映射到一个哈希表中,通过检查哈希表中的位来判断元素是否存在。参考文献《Efficient Circuit-based PSI via Cuckoo Hashing》。

  4. MinHash:MinHash是一种用于近似计算集合相似度的算法,也可以用于PSI。它通过将元素进行哈希,选择哈希值中的最小值,将最小值组成一个签名,通过比对签名来判断集合之间的交集。参考文献《EsPRESSo: Efficient Privacy-Preserving Evaluation of Sample Set Similarity∗》。

基于哈希的PSI算法,由于需要随时随机访问操作,所以需要将过滤器全部存储在内存中,所以会占用一定的内存空间。基于布谷鸟哈希的PSI算法空间占用优于基于布隆过滤的PSI算法方案。

基于不经意传输(OT)的 PSI算法

基于OT的PSI算法流程如下:
假设有两个集合 A A A B B B,其中 A A A包含元素 a 1 , a 2 , . . . , a n a_1,a_2,...,a_n a1a2...an B B B包含元素 b 1 , b 2 , . . . , b m b_1,b_2,...,b_m b1b2...bm。使用OT方式计算PSI,相当于求解 m m m ( N 1 ) O T \binom{N}{1} OT (1N)OT 问题,其中 B B B 中的元素 b i b_i bi 就是每次的选择队列。

基于OT的PSI算法可以分为以下几类:

  1. 基于哈希技术的OT PSI算法:该算法利用哈希函数来生成OT所需的参数,并使用它们执行OT协议,该算法可以降低通信次数到 O ( n l o g n ) O(nlogn) O(nlogn)。参考文献《Phasing: Private Set Intersection using Permutation-based Hashing》。

  2. 基于伪随机函数(Pseudo Random Function, PRF)的OT PSI算法:该算法使用PRF来生成OT所需的参数,然后利用这些参数执行OT协议来实现PSI,该算法为KKRT PSI 算法。参考文献2016年《Efficient batched oblivious PRF with applications to private set intersection》,该算法是将《Phasing: Private Set Intersection using Permutation-based Hashing》中的组件使用BaRK-OPRF(来源于IKNP OT)进行替换,从而提高了长数据和大数据集的效率,比起高2.3至3.6倍。

  3. 基于承诺方案(Commitment Scheme)的OT PSI算法:该算法使用承诺方案来实现随机选择,然后利用这些随机数执行OT协议来实现PSI。参考文献《Malicious-Secure Private Set Intersection via Dual Execution》(该算法目前是恶意敌手模型下最快的PSI算法)、《Actively Secure 1-out-of-N OT Extension with Application to Private Set Intersection》。

  4. 基于Bloom Filter的PSI算法:Bloom Filter是一种可以高效地判断某个元素是否在集合中的数据结构。这类算法使用Bloom Filter存储集合元素的哈希值,从而减少通信和计算成本。该想法首先通过《Fast private set operations with sepia》提出。在《Outsourced private set intersection using homomorphic encryption》中又将Bloom Filter与同态加密方法进行结合。为了解决论文上述两篇文章中的安全和效率问题,《When Private Set Intersection Meets Big Data: An Efficient and Scalable Protocol》提出一种Oblivious Bloom Filter算法,在该算法中,客户端使用Bloom Filter(BF)对其私有集进行编码,服务端使用GBF(Garbled Bloom Filter)对其私有集合进行编码,再通过OT协议进行求交运算。该算法有标准和增强版本,可以从半诚实敌手模型扩展到敌手模型。该算法拥有较好的效率,计算 200 万个元素集的交集,在并行模式下的中等硬件上仅需要 41 秒(80 位安全性)和 339 秒(256 位安全性)。在《Quantum private set intersection cardinality based on bloom filter》中还提出了抗量子攻击的基于Bloom Filter的PSI算法。

《When Private Set Intersection Meets Big Data: An Efficient and Scalable Protocol》的硬件配置:服务器是 Mac Pro,配备 2 个 Intel E5645 6 核 2.4GHz CPU、32 GB RAM,运行 Mac OS X 10.8。 客户端是一台 Macbook Pro 笔记本电脑,配备 Intel 2720QM 四核 2.2 GHz CPU、16 GB RAM,运行 Mac OS X 10.7。 两台电脑通过1000M以太网连接。

基于GC的PSI算法

基于GC的PSI算法最早在2012年《Private set intersection_Are garbled circuits better than custom protocols?》中提出。该方案基于半诚实敌手模型,文中提出的基于GC的PSI算法主要思想是各方在本地对他们的集合进行排序,私下将他们的排序集合并到一个排序列表中。 然后不经意地比较每个相邻的元素对,如果该对中的元素相等,则保留该值,否则用虚拟值替换。 最后,在显示整个列表之前,所得到的匹配元素列表会被明显地打乱。 这个混洗步骤是必要的,因为否则有关匹配元素的位置信息会泄漏有关各方集合中不匹配元素的信息。该过程中,GC过程可以看作是一个黑盒。

基于GC的PSI算法由于比较和混洗步骤不同,其对应的复杂度也不相同。

  • 比较算法Bitwise-AND(BWA),只适用于小数量级。
  • 比较算法Pairwise-Compare (PWC) protocol,最坏的情况下复杂度是 Θ ( n 2 ) Θ(n^2) Θ(n2),其中 n n n 是输入数据集大小。
  • 不经意洗牌算法Sort-Compare-Shuffle, 在小数量级的情况下是 Θ ( n log ⁡ n ) Θ(n\log n) Θ(nlogn)。该算法的主要思想是各方在本地对他们的集合进行排序,然后(私下)将他们的排序集合并到一个排序列表中。
ProtocolNumber of Non-Free Gates
BWA 2 σ 2^σ 2σ
PWC ( ( 2 n − n ^ ) 2 + n ^ ) ( σ − 1 ) / 4 ((2n-\hat{n})^2+\hat{n})(σ-1)/4 ((2nn^)2+n^)(σ1)/4
Sort-Compare-Shuffle-SORT 2 σ n l o g ( 2 n ) + ( ( 3 n − 1 ) σ − n ) + 2 σ n l o g 2 ( 2 n ^ ) 2\sigma nlog(2n)+((3n−1)\sigma −n) + 2\sigma nlog^2(2\hat{n}) 2σnlog(2n)+((3n1)σn)+2σnlog2(2n^)
Sort-Compare-Shuffle-HE 2 σ n l o g ( 2 n ) + ( ( 3 n − 1 ) σ − n ) + ( σ + 32 ) n 2\sigma nlog(2n)+((3n−1)\sigma −n) + (\sigma +32)n 2σnlog(2n)+((3n1)σn)+(σ+32)n
Sort-Compare-Shuffle-SORT 2 σ n l o g ( 2 n ) + ( ( 3 n − 1 ) σ − n ) + σ ( n log ⁡ n − n + 1 ) 3 2\sigma nlog(2n)+((3n−1)\sigma −n) + \frac{\sigma (n\log n-n+1)}{3} 2σnlog(2n)+((3n1)σn)+3σ(nlognn+1)

在GC中,计算过程需要转换为一系列的门,而门可以是 Free Gates 和 Non-Free Gates。Free Gates 表示计算结果直接从密文获得,不需要解密密钥,所以计算成本极低。而Non-Free Gates 表示具有更高的计算成本,Non-Free Gates越多,计算成本越高,所需计算量更大,所以Non-Free Gates的数量代表了GC的计算效率和速度。所以在GC中通过控制Non-Free Gates的数量可以优化GC的效率和速度。

为了解决基于GC的PSI算法中通信开销、计算和内存开销都较大的问题,有如下的改进方案提出:

  1. 基于哈希的改进算法:这类算法采用哈希函数将集合中的元素映射到一个固定长度的哈希值,并在比较时只比较哈希值,从而减少通信和计算成本。比如2015年的《Phasing: Private Set Intersection using Permutation-based Hashing》一文中通过应用Phasing(使用基于排列的散列来减少表示的位长度) 改进上述不经意洗牌过程,减低了Non-Free Gates的数量和电路门的深度,从而使得效率比Sort-Compare-Shuffle算法快5倍以上。2018年的《Efficient Circuit-Based PSI via Cuckoo Hashing》优化 Cuckoo 哈希算法,将参与方扩展到多方。

  2. 基于OT的改进算法:2019年Benny Pinkas等人通过《Efficient Circuit-based PSI with Linear Communication》一文提出了线性复杂度的基于GC的PSI算法。该算法基于用于计算不经意的可编程伪随机函数 (OPPRF) 的协议的使用,将多次调用 OPPRF 的成本分摊到一起,从而使得通信成本是线性的。

基于公钥加密的PSI算法

基于DH的PSI算法

基于DH的PSI算法是在通信条件受限下最好的PSI协议,参考《Enhancing privacy and trust in electronic communities》(1999年)。该算法流程是双方计算其集合中每个隐私元素的共享密钥值,并将该共享密钥值组成散列,接收方进行比较,得到对应的交集。《Private set intersection with ECDH》(2020年)通过将隐私集合中每个元素映射为椭圆曲线上的点后再计算对应的共享密钥散列,从而得到对应的交集。ECDH算法使用椭圆曲线只需要更小的私钥来实现相同级别的安全性。

基于RSA盲签名的PSI算法

2009年《Practical Private Set Intersection Protocols with Linear Computational and Bandwidth Complexity》中提出了基于RSA盲签名的PSI算法,该算法在上述DH-PSI算法基础上,通过盲签名机制对隐私元素进行盲化和签名,从而计算隐私集合交集。

基于同态加密的PSI算法

同态加密是一种加密技术,允许在密文状态下进行计算,而无需解密。这类算法使用同态加密技术对数据进行加密,并在加密状态下执行集合交集运算。代表性的同态加密算法包括基于Paillier、BGV、BFV同态加密的PSI算法。

  1. 首先将同态加密用于PSI的是在2004年《Efficient Private Matching and Set Intersection》中。该文提出了基于同态加密技术和平衡散列的PSI协议,可以对抗两方的恶意敌手模型。在半诚实敌手模型下,该算法中,双方首先通过多项式对数据集合中每项展开得到加密值 P ( y ) P(y) P(y),然后生成随机扰动 r r r,最后通过同态加得到每项的加密值 E n c ( r ⋅ P ( r ) + y ) Enc(r\cdot P(r)+y) Enc(rP(r)+y)。在恶意安全模型下,客户端和服务端都增加一个 k c k_c kc k s k_s ks根校验,从而对抗恶意的客户端或服务端。

  2. 2010年《Efficient Set Operations in the Presence of Malicious Adversaries》提出了一种基于同态加密和零知识证明的方案,可以保证在恶意攻击者存在的情况下仍然能够保护集合的隐私并实现高效的集合操作。

  3. 《Fast Private Set Intersection from Homomorphic Encryption》(2017年)中提出了一种基于同态加密的高效私有集合交集算法,该算法使用 Paillier 同态加密算法对集合元素进行加密,并利用同态加法和同态乘法实现集合交集计算。该算法通过将批处理与布谷鸟散列和基于排列的散列结合使用优化同态加密算法,同时通过加窗和分区技术将同态加密的电路深度从原来的 O ( log ⁡ N x ) O(\log N_x) O(logNx)降低到:

    其中 N x N_x Nx X X X 数据集大小, B B B是数据集切分之后的大小, α \alpha α 是电路切分后子集大小。

  4. 《Outsourced Private Set Intersection Using Homomorphic Encryption》(2017年)通过同态加密技术将集合交集计算任务安全地外包给第三方计算服务商,该算法具有较低的计算和通信开销,但是需要信任第三方计算服务商,并且在实现中需要解决数据隐私保护和安全性等问题。

  5. 《Private set intersection with linear communication from general assumptions》(2019年)提出了一种基于广义假设的线性通信私有集合交集算法,使用同态加密实现加密和计算,并通过引入新的技术,将通信复杂度降低到线性级别。

  6. 《Labeled PSI from Fully Homomorphic Encryption with Malicious Security》(2018)和《Labeled PSI from Homomorphic Encryption with Reduced Computation and Communication》(2021)分别实现了基于层次全同态的PSI算法。二者底层采用标记PSI(LPSI)技术,该技术为每个数据项增加标记,然后使用HE技术等进行加密。LPSI技术可以应用于有针对性的价格歧视、移动通信中的密钥检索等。二者都使用层次同态(leveled FHE)BFV或BGV算法(SEAL库),文章2通过改进SIMD打包技术,使用Paterson-Stockmeyer 算法降低计算复杂度,修改窗口技术降低通信成本,从而提高计算效率。

基于差分隐私的PSI算法

差分隐私最早是微软研究院Cynthia Dwork在2006年《Differential Privacy》中提出,该论文提出差分隐私算法的目的是为了防止恶意敌手从直方图、K-匿名化结果等中预测出其他隐私数据信息,从而造成数据库的隐私泄露。

2012年,《DJoin: Differentially Private Join Queries over Distributed Databases》首次将差分隐私应用用于PSI中,该论文提出的DJoin 可以支持许多 SQL 风格的查询,包括由不同实体维护的数据库的联接,只需要将原SQL转换为其对应的原语表达即可:BN-PSI-CA(私有集交集基数的差分私有形式)和 DCR(多方组合运算符,可以聚合噪声基数而不复合各个噪声项。2019年《Cheaper Private Set Intersection via Differentially Private Leakage》提出了一种用于恶意安全 2PC 中差分隐私泄露的安全模型,同时还引入了两种新的改进机制,用于“差分隐私直方图高估”,这是差分隐私 PSI 的主要技术挑战。2020年《Differentially Private Two-Party Set Operations》将差分隐私、同态加密和电路进行结合,使得通信复杂度能达到 O ( m ) O(m) O(m),其中 m m m是数据集最小的规模。2023年《Split, Count, and Share: A Differentially Private Set Intersection Cardinality Estimation Protocol》介绍了如何通过差分隐私PSI进行交集基数的估计,通过其测试结果,该算法可以较好地替代传统交集基数(PSI-CA)协议。

私有交集基数(PSI-CA)协议是计算两个隐私集合中同时存在的隐私元素数量,即这两个隐私集合的交集的大小。

总结

在实际应用中,需要权衡通信复杂度、计算复杂度、安全性要求:(1)如果网络是计算瓶颈,则可以考虑通信复杂度低的基于公钥加密的PSI算法;(2)如果计算资源是瓶颈可以考虑基于哈希或OT的PSI算法;(3)而对安全性较高的应用场景,推荐使用基于GC、同态和差分的PSI算法。同时,在考虑选择PSI的时候,需要考虑双方数据集大小是否一致,上述许多论文中的算法是在假设双方数据集一致的情况下(平衡PSI)。而非平衡PSI场景下,通信量和计算量一般是受数据集较大一方决定的。

目前PSI在社交网络中的关系路径发现、 僵尸网络检测、全测序人类基因组测试、接近度测试、在线作弊者检测游戏、情报收集等方面都有显著应用。

参考文献

  • Wiki PSI介绍:Private set intersection
  • 多方安全计算热点:隐私保护集合求交技术 (PSI) 分析研究报告
  • 上述论文

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/719968.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

wails+vue3实现一个简单Monitor

介绍 本来呢最近是在学Rust,顺便看看Tauri相关的内容.然后刷评论区突然看到有人提到go生态中也有类似的框架—Wails,所以下午花了点时间来动手玩一下. 首先看一下最终的运行效果,前端样式懒得调整所以界面很丑只是实现一下功能 开始 这次的目标就是做一个功能类似于nvidia-s…

C#基础学习_字段与属性的比较

C#基础学习_字段与属性的比较 字段: 字段主要是为类的内部做数据交互使用,字段一般是private修饰; 字段可以赋值也可以读取; 当需要为外部提供数据的时候,请将字段封装为属性,而不是使用公有字段,这是面对对象编程所提倡的。 //字段:学号private int studentID;属性: …

语义分割大模型RSPrompter论文阅读

论文链接 RSPrompter: Learning to Prompt for Remote Sensing Instance Segmentation based on Visual Foundation Model 开源代码链接 RSPrompter 论文阅读 摘要 Abstract—Leveraging vast training data (SA-1B), the foundation Segment Anything Model (SAM) propo…

vue动态组件component详解

附上代码 <template><div class"export-full-data-manage"><div class"main"><div class"left"><ul><li v-for"item in menus" :key"item.value" :class"[item.valuecurrent?curre…

【UE5 Cesium】11-Cesium for Unreal 切换Dynamic Pawn为其它Pawn

前言 我们知道在Cesium for Unreal中默认使用的是DynamicPawn来浏览地图场景。DynamicPawn适用全球浏览&#xff0c;可以按自定义曲线进行飞行。但是DynamicPawn是使用的是地理参考坐标系&#xff0c;并不是标准的UE坐标系&#xff0c;当我们全球浏览结束后&#xff0c;可能需要…

2023年6月榜单丨飞瓜数据B站UP主排行榜(哔哩哔哩)发布!

飞瓜轻数发布2023年6月飞瓜数据UP主排行榜&#xff08;B站平台&#xff09;&#xff0c;通过充电数、涨粉数、成长指数三个维度来体现UP主账号成长的情况&#xff0c;为用户提供B站号综合价值的数据参考&#xff0c;根据UP主成长情况用户能够快速找到运营能力强的B站UP主。 飞…

工作是EXCEL的天下

文章目录 EXCEL单元格内的换行筛选某一列的重复值批量删除重复值以某一列为联结&#xff0c;合并两个表格中的内容 本篇博文记录了笔者在工作中常用的EXCEL操作方法&#xff0c;持续更新中…… EXCEL单元格内的换行 AltEnter 筛选某一列的重复值 选中需要查找重复值的一列→…

如何在Microsoft Word中制作组织架构图

如果要说明公司或组织中的报告关系,可以创建一个使用组织结构图布局的 SmartArt 图形,如组织结构图。 注意:绘制组织结构图的另一种方法是使用 Microsoft 绘图应用程序 Visio。 使用 SmartArt 图形在 Excel、Outlook、PowerPoint 或 Word 中创建组织结构图,以显示组织中的…

磁盘镜像软件

什么是磁盘镜像 磁盘镜像是存储在计算机磁盘中的数据的副本或副本。磁盘镜像将包含数据存储设备的内容&#xff0c;并复制此类设备的结构。它还将包含操作系统分区。 磁盘镜像本质上是一种从主系统复制操作系统和存储在磁盘中的数据以将其分发到其他目标计算机的方法。自动化…

4.40ue4:样条线(轨迹)

1.创建样条线&#xff08;样条组建&#xff09; spline 多出一个点&#xff0c;按住alt拖住断点可以再生成一个点 可以在场景中拖动点编辑样条线 如果想要直角&#xff0c;可以点击细节面板找到spline组件&#xff0c;修改类型为linear&#xff0c;前后两点都需要改为绝对值&a…

3d渲染画面变形怎么办?

在用3dmax渲染图片时有时会遇到画面变形的情况&#xff0c;这个是什么原因呢&#xff1f;今天我们就来看看吧。 首先我们来看下变形的具体情况&#xff0c;再分析原因。可以看到整个画面都畸变了&#xff0c;呈现出上下拉伸的情况&#xff0c;能造成这个效果的&#xff0c;只有…

集合面试题详解

算法复杂度分析 List ArrayList 数据结构-数组 ArrayList源码分析 成员变量 构造方法 关键方法 ArrayList底层实现原理 如何实现数组和ArrayList之间的转换 LinkedList 单向链表 双向链表 ArrayList和LinkedList的区别 HashMap 二叉树 红黑树 散列表 HashMap的实现原理 Ha…

《C++ Primer》--学习12

动态内存 动态内存与智能指针 除了静态内存和栈内存&#xff0c;每个程序还拥有一个内存池。这部分内存被称为自由空间 或 堆&#xff0c;程序用堆来存储动态分配的对象 动态内存和智能指针 智能指针负责自动释放所指向的对象 shared_ptr 类 智能指针也是模板

一篇读懂React、vue框架的生命周期函数

当涉及到前端框架时&#xff0c;React 和 Vue.js 是两个非常受欢迎的选择。它们都提供了强大的工具和功能&#xff0c;帮助开发者构建交互式的、可扩展的应用程序。在这两个框架中&#xff0c;生命周期函数是一个重要的概念&#xff0c;它们允许我们在组件的不同阶段执行特定的…

车规芯片物理实现上的难度

在PR部分&#xff0c;车规级芯片的温度范围根据芯片工作位置不同也有所差别&#xff0c;最差的位置需要-40到150&#xff0c;除了DFM和功耗以及EM比较严格外&#xff0c;有些产品物理实现上对运算逻辑单元的位置也有特殊要求。 DFT部分才是车规级芯片的难点&#xff0c;感兴趣…

软件设计模式与体系结构-设计模式-行为型软件设计模式-迭代器模式

行为型软件设计模式 概述 行为型设计模式是软件设计模式中的一类&#xff0c;用于处理对象之间的交互和通信。这些模式关注的是对象之间的行为和职责分配。以下是几种常见的行为型设计模式&#xff1a; 观察者模式&#xff08;Observer Pattern&#xff09;&#xff1a;定义了…

【网络安全带你练爬虫-100练】第4练:添加异常处理代码

目录 一、异常处理代码&#xff1a; 二、执行结果&#xff1a; 三、完整代码&#xff1a; &#xff08;当代码越来越长的时候&#xff0c;异常处理代码有时候能起到很好的作用&#xff09; 一、异常处理代码&#xff1a; &#xff08;1&#xff09;try-except搭配&#xff…

Stable Difussion 解决绘图图片灰暗模糊,让图像色彩更丰富

在使用Stable Difussion进行AI绘画的时候&#xff0c;使用VAE能够产生许多有趣的效果。其滤镜功能可根据需要调整图像的色彩饱和度&#xff0c;使图像产生不同的视觉效果。 如下图所示&#xff1a; 但是如果不使用VAE那你的图像可能就会变得灰暗。 文章目录 VAE用途VAE的使…

cspm是什么?对比pmp怎么样?

一、国标项目管理&#xff08;项目管理专业人员能力评级&#xff09;证书是什么&#xff1f; 证书样式 《项目管理专业人员能力评价要求》&#xff08;GB/T 41831-2022&#xff09;是2022年10月12日开始实施的一项中国国家标准&#xff0c;归口于全国项目管理标准化技术委员会。…

【问题】TypeError: Cannot read properties of undefined (reading ‘getStackAddendum‘)

问题描述 项目运行中&#xff0c;控制台提示类型错误&#xff0c;无法读取未定义的属性getStackAddendum TypeError: Cannot read properties of undefined (reading getStackAddendum) 原因分析&#xff1a; 在上述截图的错误日志中&#xff0c;有执行validateChildKeys和va…