关于区块链的安全和隐私

news2024/11/14 7:14:25

背景

区块链技术在近年来发展迅速,被认为是安全计算的突破,但其安全和隐私问题在不同应用中的部署仍处于争论焦点。

目的

对区块链的安全和隐私进行全面综述,帮助读者深入了解区块链的相关概念、属性、技术和系统。

结构

首先介绍区块链的基本概念,然后描述其安全属性,接着介绍共识算法,最后讨论安全和隐私技术。

区块链概述

定义

区块链是一种去中心化的分布式账本技术。它由一系列链式的数据区块组成,每个区块包含了一定时间内的交易记录。这些区块按照时间顺序依次相连,形成了一条不可篡改、不可伪造的账本链条。

区块链的特点:

  1. 去中心化。去中心化意味着没有中心化的控制机构,所有节点共同参与账本的维护和更新
  2. 不可篡改。不可篡改是由于其采用了复杂的加密算法和共识机制,使得一旦数据被记录在区块链上,就很难被修改
  3. 安全透明。安全透明则保证了交易的安全性和可追溯性,所有参与者都可以查看账本中的交易记录
  4. 去信任化。去信任化让参与者无需依赖第三方的信任背书就能进行安全的交易和交互。

起源

2008年:发布第一版设计文档

2009年:发布区块链的第一个开源实现(bitcoin-core),比特币系统是基于区块链的首个应用

工作原理

以比特币网络为例,客户端发起交易,矿工收集交易到区块并验证,通过共识协议广播区块以获得网络认可,当其他节点验证交易有效后,区块被添加到区块链中。

基本能力(比特币系统的实现中)

3个基础且重要的能力:

  1. 哈希链存储。
  2. 数字签名
  3. 添加新块的共识机制

通过将一系列流行的安全技术(如哈希链默克尔树数字签名)与共识机制进行巧妙结合,比特币区块链既可以防止比特币的双重支付问题,又可以防篡改

哈希链存储。

基于哈希链存储比特币系统中构件区块的基础:

  1. hash pointer。是数据加密的hash值,可用于检查数据是否被篡改。区块链就是使用hash指针将区块连接起来的。
  2. Merkle tree。

默克尔树:A Merkle tree is defined as a binary search tree with its tree nodes linked to oneanother using hash pointers

数字签名

A digital signature establishes the validity of a piece of data by usinga cryptographic algorithm.

有三个核心组件构成了数字签名方案:

  1. 密钥生成算法(key generation algorithm)。创建2个key,一个私钥,一个公钥。私钥用于对数据签名,公钥用于验证数据的有效性。
  2. 签名算法(signing algorithm)。使用私钥对输入信息进行签名。
  3. 验证算法(verification algorithm)。使用签名、数据信息和公钥作为输入,使用公钥验证数据信息的签名,并返回一个布尔值。

一个定义良好且安全的签名算法应该有两个属性:

  1. 有效的签名必须是可验证的
  2. 签名在存在性上是不可伪造的

椭圆曲线数字签名算法(Elliptic Curve Digital Signature Algorithm (ECDSA)):在比特币的区块链中使用该算法对交易数据进行签名。

比特币系统中,采用去中心化的身份管理,密钥对由用户自己生成,想生产多少就生成多少。公钥用作账户,私钥用作密码。

共识机制

共识机制被用于寻求网络中的大多数节点就单个状态更新达成一致,以确保全球账本(区块链)的扩展安全,并防止不诚实的尝试或恶意攻击。

交易模型

介绍了比特币采用的未花费交易输出(UTXO)模型和以太坊采用的账户交易模型,以及它们对解决双重花费问题的影响。

2个具有代表性的区块链交易级别的模型:

  1. 未花费交易输出模型(the unspent transaction outputs (UTXO)model)。在比特币系统中使用。
  2. 基于帐户的交易模型(the account-based transaction model)。在以太坊中使用。

The UTXO Model

任何一个交易,它总是由若干个输入(Input)和若干个输出(Output)构成,一个Input指向的是前面区块的某个Output,只有Coinbase交易(矿工奖励的铸币交易)没有输入,只有凭空输出。所以,任何交易,总是可以由Input溯源到Coinbase交易。

这些交易的Input和Output总是可以串联起来:

给定任何一个区块,计算当前所有的UXTO金额之和,等同于自创世区块到给定区块的挖矿奖励之和。

想要确定某个人拥有的比特币,并无法通过某个账户查到,必须知道此人控制的所有UTXO金额之和。

在钱包程序中,钱包管理的是一组私钥,对应的是一组公钥和地址。钱包程序必须从创世区块开始扫描每一笔交易,如果:

  1. 遇到某笔交易的某个Output是钱包管理的地址之一,则钱包余额增加;
  2. 遇到某笔交易的某个Input是钱包管理的地址之一,则钱包余额减少。

钱包的当前余额总是钱包地址关联的所有UTXO金额之和。

每笔 UTXO 交易如果满足以下三个约束条件就可以得到认可:

  1. 交易中引用的每个输入都必须由其所有者(发送者)签名且尚未被花费;
  2. 如果交易有多个输入,那么每个输入都必须有与其所有者相匹配的签名;
  3. 如果交易输入的总值等于或超过其输出的总值,那么该交易就是合法的。

使用UTXO的好处:

  1. 潜在的高度隐私(Potentially high degree of privacy)
  2. 潜在的高度可扩展性(Potentially high degree of scalability)
  3. 潜在的高度安全性(Potentially high degree of security)。比特币通过为将新区块提交到区块链中实施基于共识的确认机制,并将区块链作为通用账本进行维护,解决了双重支付问题。

Account-based Online Transaction Model

如果满足以下三个有效性约束,则具有令牌值(ETH)的交易是有效的:

  1. 令牌由消息编写者(发送者)签名;
  2. 可以证明编写者对令牌值的所有权
  3. 编写者的支出账户有足够的余额用于交易。

基于账户的交易模型有许多明显的好处:

  1. 与 UTXO 模型相比,它节省了更大的空间,因为 accountbalance-based 模型中的每笔交易只需要一个引用和一个签名来产生输出。
  2. 更简单。与 UTXO 模型不同,它不维护区块链交易中硬币的来源信息。因此,币不会根据收到的来源进行区分。
  3. 它不允许更改每笔交易的引用,但它提供了对账户相关数据的轻松访问。MPT(Merkle Patricia Tree)

关于MPT

MPT树结合了字典树和默克尔树的优点,在压缩字典树中根节点是空的,而MPT树可以在根节点保存整棵树的哈希校验和,而校验和的生成则是采用了和默克尔树生成一致的方式。 以太坊采用MPT树来保存,交易,交易的收据以及世界状态,为了压缩整体的树高,降低操作的复杂度,以太坊又对MPT树进行了一些优化。将树节点分成了四种:

  • 空节点(hashNode)
  • 叶子节点(valueNode)
  • 分支节点(fullNode)
  • 扩展节点(shortNode)

Account nonce

Account nonce是一个标量值,等于从该地址发送的交易数量,对于有相关代码的账户,它是该账户创建的合约数量。以太坊的交易都是基于账户的,与基于未花费交易输出(UTXO)的比特币不同,因此需要对每次交易按顺序记录,而 nonce 值就是这个顺序,它是交易原始地址的属性,不存储在以太坊区块链上,而是通过计算从一个地址发送的交易数量来确定。

每发起一笔交易,nonce 就会加一。对于外部账户(EOA)来说,每发送一笔交易,nonce 增加;对于合约账户来说,每创建一个合约,nonce 增加。而转入交易、合约调用其他合约等属于内部调用,nonce 值不变。

Account nonce 的主要作用:

  1. 保证交易顺序
  2. 防止重放攻击。重放攻击是指将一条用户交易信息在一条链上再次发送。

区块链中的CAP 属性

CAP理论

分布式系统涉及一组通过覆盖网络连接并相互通信以完成某些任务的计算节点。CAP定理指出,任何分布式系统只能具有以下两个属性:

  1. Consistency 一致性:每个计算节点接收最近的写入。
  2. Availability 可用性:对某些数据的任何请求始终可用。
  3. Partition tolerance 分区容错性:分布式系统始终处于运行状态,即使部分节点无法运行。

分布式账本中的CAP属性

在分布式账本的背景下,CAP属性意味着(1)一致性:所有节点都保持一个具有最新更新的相同账本。(2)可用性:网络中任何时候生成的任何交易都将被接受在账本中。(3)分区容错性:即使部分节点发生故障,网络仍然可以正常运行。

主要问题是,如果不满足所有三个条件,任何广泛接受的货币都很难存在。

当交易启动或部分交易系统无法识别的时候,如果系统不可用,没有人会使用这种货币(CP system)。

如果任何一个节点发生故障,系统将无法正常运行,没有人会使用这种货币(CA system)。

如果分布式账本系统中不同节点保存的账本不一致,则没有人会使用这种货币(PA system)。

区块链解决方案

比特币系统的区块链似乎违反了CAP定理,这是最成功的区块链实现之一,因为它实现了一致性、可用性和分区容错。然而,事实并非如此。

在现实中,区块链一致性并不是作为可用性和分区容错同时实现的,而是在一段时间后。比特币中使用了挖矿的概念,结合共识协议和至少六次确认,以确保通过达成共识最终保持一致性。

区块链的分类和演化

分类

架构分层

区块链的安全和隐私属性

安全和隐私要求

包括账本一致性、交易完整性、系统和数据可用性、防止双花、交易机密性、用户身份匿名性和交易不可关联性。

基本安全属性

一致性、抗篡改、抗 DDoS 攻击、抗双重花费攻击、伪匿名性等。

额外安全和隐私属性

不可关联性和交易数据隐私性,比特币区块链仅实现了伪匿名性,未能提供交易的不可关联性和数据隐私保护。

共识算法

概念

共识是一种基于组的协议,用于在组中动态达成协议。当前区块链系统中的共识算法为拜占庭将军问题提供了概率性解决方案。

工作量证明(PoW)

比特币采用的共识协议,通过解决计算难题来验证交易,有效解决了拜占庭将军问题,但存在计算效率低、依赖挖矿奖励和算力集中等问题。

通过调整nonce,满足H(block header) <= target

权益证明(PoS)

以太坊等采用的共识协议,通过参与者锁定资金作为押金来验证交易,避免了对挖矿奖励的依赖,采用惩罚机制确保安全。

在以太坊中,权益证明(Proof of Stake,简称 PoS)是一种用于达成区块链共识的机制,与比特币所采用的工作量证明(Proof of Work,PoW)有所不同。

在权益证明机制下,验证交易和创建新区块的权利是根据参与者所拥有的以太币数量(即权益)以及他们愿意锁定这些币的时长来决定的(币天)拥有更多权益并且愿意长时间锁定的参与者,更有可能被选中来验证新区块。

与工作量证明相比,权益证明具有一些优势。例如,它消耗的能源相对较少,因为不需要大量的计算工作来竞争区块创建权。同时,权益证明对于恶意行为的惩罚更为直接和有效,因为攻击者需要拥有大量的权益才有能力进行攻击,而一旦被发现作恶,他们将损失巨大的权益。

然而,权益证明也面临一些挑战和质疑,比如可能会导致富者更富的情况,以及在初期可能存在的安全性和稳定性方面的担忧。但随着技术的发展和改进,权益证明机制在以太坊及其他区块链项目中的应用不断完善和优化。

BFT-based 共识算法

拜占庭容错算法,许多相关算法和协议被提出以解决拜占庭故障相关的误解和困难,如 PBFT、AlgoRAND 和 HoneyBadgerBFT 等。

“BFT-based 共识算法” 指的是基于拜占庭容错(Byzantine Fault Tolerance,简称 BFT)的共识算法。
拜占庭容错在存在故障节点甚至恶意节点的情况下,仍能保证分布式系统正常运行并达成一致的能力。
基于 BFT 的共识算法旨在解决分布式网络中,部分节点可能出现错误、故障或恶意行为时,如何让整个网络仍能达成一致的决策和状态同步。
这类算法通常具有较强的容错性,可以在多达三分之一的节点出现错误或恶意行为的情况下,依然保证系统的安全性和活性,确保系统能够正常运行和达成共识。常见的 BFT 类共识算法包括实用拜占庭容错(Practical Byzantine Fault Tolerance,PBFT)等。

其他共识算法

包括 Sleepy Consensus、Proof of Elapsed Time(PoET)、Proof of Authority(PoA)和 Proof of Reputation(PoR)等。

比较

实际应用中根据不同约束,共识算法分为强一致性共识和最终一致性共识,不同算法适用于不同场景和区块链类型。

区块链中使用的隐私和安全技术

混合技术

比特币区块链不能保证用户匿名性,因为交易使用假名地址且可公开验证,通过分析地址可关联用户的交易,当交易地址与用户真实身份关联时会导致所有交易泄露,所以设计了混合服务(或搅拌器)来防止用户地址被关联。混合就是随机交换用户的币与其他用户的币,结果是对于观察者来说,币的所有权被模糊了。但这些混合服务不能防止币被盗。

Mixcoin和CoinJoin,可用于防止用户地址被关联,但存在中心化服务可能泄露用户隐私等问题。

Mixcoin

Mixcoin 是由 Bonneau 等人在 2014 年提出的,它在比特币及类似加密货币中提供匿名支付

为了抵御被动敌手,Mixcoin 扩大了匿名集合,允许所有用户同时对币进行混合。

为了抵御主动敌手,Mixcoin 提供类似于传统通信混合的匿名性。

此外,Mixcoin 使用问责机制来检测盗窃行为,并且表明通过激励调整,用户会理性地使用 Mixcoin 而不会窃取比特币。

CoinJoin

CoinJoin于 2013 年被提出,作为比特币交易的一种替代性匿名化方法。它的提出基于联合支付的理念

假设一个用户想要进行支付,她会找到另一个也想要进行支付的用户,然后他们通过协商在一笔交易中共同进行支付。通过这种联合支付的方式,显著降低了在一笔交易中连接输入和输出以及追踪特定用户资金流动确切方向的概率。

CoinJoin 要求用户与他们希望共同支付的对象协商交易。提供此功能的第一代混合服务(如 SharedCoin [66])使用了中心化服务器,并要求用户信任服务运营商不会窃取或允许他人窃取比特币。然而,尽管存在单点故障,中心化服务可能存在用户隐私泄露的风险,因为它们会保存交易日志并记录联合支付的所有参与者。

匿名签名

数字签名技术由几种变体发展而来。一些签名方案本身就具有为签名者提供匿名性的能力。我们称这种签名方案为匿名签名。在匿名签名方案中,群签名和环签名是较早提出的,并且是两种最重要和典型的匿名签名方案

包括组签名和环签名,能为签名者提供匿名性,组签名适合联盟链,环签名适合公链。

群签名

Group Signature(群签名)是一种密码学方案,最初在 1991 年提出

在一个群组中,任何成员都可以使用自己的个人密钥为整个群组匿名签署消息任何拥有群组公钥的成员都可以检查和验证生成的签名,并确认是某个群组成员的签名用于签署消息。签名验证过程除了能确定签名者是群组成员外,不会透露签名者的真实身份。

群签名有一个群管理员负责管理添加群组成员、处理争议事件,包括揭示原始签名者。在区块链系统中,也需要一个权威实体来创建和撤销群组,动态地向群组添加新成员以及从群组中删除或撤销某些参与者的成员资格。

由于群签名需要一个群管理员来设置群组,所以群签名适用于联盟链。最近,PlatON 在其平台中添加了群签名,为用户提供匿名支持。

环签名

环形签名(Ring Signature)也可以通过由一组用户中的任何成员进行签名来实现匿名性。“环形签名”这一术语源自使用环状结构的签名算法。如果难以确定该组中的哪个成员使用其密钥对消息进行签名,那么环形签名就是匿名的。

环形签名与群签名在两个主要方面有所不同:

  • 首先,在环形签名方案中,一旦发生争议,签名者的真实身份无法被揭示,因为环形签名中没有群管理员。
  • 其次,任何用户都可以自行组成一个“环”,无需额外的设置。

因此,环形签名适用于公共区块链

环形签名的一个典型应用是 CryptoNote。它采用环形签名来隐藏交易发送者地址之间的联系。更确切地说,CryptoNote 使用其他几个密钥构建发送者的公钥,使得无法确定实际上是谁发送(签名)了交易。由于使用了环形签名,如果环成员的数量是 n,那么对手成功猜测交易真正发送者的概率是 1/n。后来,以太坊在 2015 年添加了环形签名,这为用户提供了像 CryptoNote 货币(如门罗币)那样的匿名性。

同态加密(HE)

可在区块链上加密数据,保护隐私,以太坊智能合约使用了该技术。

同态加密(Homomorphic encryption,HE)是一种强大的加密技术。它可以直接在密文上进行某些类型的计算,并且确保在对加密数据进行的操作所得到的计算结果进行解密时,会生成与在明文上进行相同操作所得结果完全相同的结果。

decode(encode(A) + encode(B)) = A+B

可以使用同态加密技术在区块链上存储数据,而不会对区块链的属性产生重大改变。这确保了区块链上的数据将被加密,解决了与公共区块链相关的隐私问题。同态加密技术的使用提供了隐私保护,并允许在公共区块链上方便地访问加密数据以用于审计和其他目的,例如管理员工费用。以太坊智能合约在存储在区块链中的数据上提供同态加密,以实现更好的控制和隐私。

基于属性的加密(ABE)

根据用户属性加密密文,具有抗共谋性,但目前应用较少,在区块链上的部署面临挑战。

基于属性的加密(Attribute-based encryption,ABE)是一种加密方法,其中属性是使用用户密钥加密的密文的定义和调节因素

如果用户的属性与密文的属性一致,那么就可以使用用户的密钥来解密加密数据。

抗合谋性是基于属性加密的一个重要安全属性。确保当恶意用户与其他用户合谋时,除了能用其私钥解密的数据之外,他无法访问其他数据。

基于属性的加密概念于 2005 年被提出,当时是单一授权机构。从那以后,对基本的基于属性的加密进行了许多扩展,包括具有多个授权机构共同生成用户私钥的基于属性的加密,以及支持任意谓词的基于属性的加密方案。

基于属性的加密非常强大,但由于对核心概念和高效实现的理解不足,迄今为止很少有应用部署它。到目前为止,基于属性的加密还没有以任何形式在区块链上进行实时操作部署。2011 年,提出了一种去中心化的基于属性的加密方案,以便在区块链上使用基于属性的加密。例如,在区块链上,权限可以由访问令牌的所有权来表示。网络中的所有节点,如果拥有颁发给它们的特定令牌,将被授予与该令牌相关的特殊权利和特权。令牌提供了一种跟踪谁具有某些属性的方法,并且这种跟踪应该由分发令牌的权威实体以算法和一致的方式进行。令牌可以被视为代表属性或资格的徽章,并且应该被用作不可转让的声誉或属性的量化器。

安全多方计算(SMPC)

定义了多方协议以保护输入隐私,在区块链系统中用于保护用户隐私,如 Enigma 平台。

多方计算(MPC)模型定义了一种多方协议,允许各方在其私有数据输入上共同进行一些计算,而不会侵犯其输入隐私,这样,对手除了联合计算的输出之外,对真实方的输入一无所知。

1982 年,姚期智(Andrew Yao)正式定义了安全两方计算,并在 1986 年针对百万富翁问题进行了推广。

1987 年,Goldreich 等人将两方计算推广到多方计算,假设计算的所有输入和零知识证明都是秘密共享的一部分。这种推广为许多后续且越来越高效的多方计算(MPC)协议奠定了基础。在分布式投票、私人竞标和私人信息检索中采用 MPC 的成功使其成为许多现实世界问题的流行解决方案。

MPC 的首次大规模部署是在 2008 年,用于丹麦的一个实际拍卖问题。

近年来,MPC 已被用于区块链系统以保护用户隐私。2014 年,Andrychowicz 等人在比特币系统上设计并实现了安全多方计算协议。他们构建了无需任何可信权威的安全多方彩票协议。他们的协议能够保证诚实用户的公平性,无论不诚实的用户行为如何。如果用户违反或干扰协议,那么她将成为输家,她的比特币将被转移给诚实用户。

2015 年,Zyskind 等人提出了一个名为 Enigma 的去中心化安全多方计算(SMP)平台。通过使用高级版本的 SMP 计算,Enigma 采用可验证的秘密共享方案来保证其计算模型的隐私。此外,Enigma 使用改进的分布式哈希表对共享秘密数据进行编码以实现高效存储。而且,它利用外部区块链作为抗篡改的事件记录以及对等网络的监管者,用于身份管理和访问控制。与比特币系统类似,Enigma 在消除对可信第三方的必要性和依赖性的同时,提供对个人数据的自主控制和保护。

非交互式零知识(NIZK)证明

用户可在不透露账户余额的情况下证明有足够余额进行转账,Zcash 使用了该技术。

零知识证明是一种密码学技术,允许一方(证明者)向另一方(验证者)证明某一陈述是真实的,而无需透露除了该陈述为真之外的任何额外信息。

例如,假设要向朋友证明知道某个秘密房间的开门密码,可在朋友不看到输入密码的情况下,进入房间并拿出预先放置的特定物品来证明,这就是一种零知识证明。

零知识证明包括交互式和非交互式两种

  1. 交互式零知识证明中,证明者和验证者之间有多个来回的通信过程;
  2. 非交互式零知识证明则证明者只需要发送一次信息给验证者,不需要后续交互。

零知识证明还可分为完美、统计和计算三种类型。

  1. 完美零知识证明中,验证者在理论上无法从证明过程中获得任何关于证明内容的信息;
  2. 统计零知识证明里,验证者获得信息的可能性非常小;
  3. 计算零知识证明是在计算上,验证者无法从证明过程中获得信息,即使理论上可能,但计算成本非常高。

可信执行环境(TEE)基于的智能合约

如果一个执行环境为应用程序的执行提供完全隔离的环境,能有效防止其他软件应用和操作系统篡改及了解在其中运行的应用程序的状态,就被称为可信执行环境(TEE)

英特尔软件防护扩展(SGX)是实现可信执行环境的一种代表性技术。例如,Ekiden 是一个基于 SGX 的保护机密的智能合约解决方案。Ekiden 将计算与共识分离。它在链下的计算节点的可信执行环境中执行智能合约计算,然后使用远程证明协议在链上验证计算节点的执行正确性。共识节点用于维护区块链,不需要使用可信硬件。Enigma 在其当前版本中利用可信执行环境,允许用户使用去中心化的信用评分算法创建保护隐私的智能合约。信用评分会考虑多个因素的权重,如账户的数量和类型、支付历史以及信用利用率。

基于游戏的智能合约

基于游戏的智能合约验证解决方案是非常新的发展,以 TrueBit和 Arbitrum为代表。

TrueBit 使用交互式“验证游戏”来确定计算任务是否正确执行。TrueBit 提供奖励以鼓励参与者检查计算任务并发现漏洞,这样智能合约就可以安全地执行具有可验证属性的计算任务。此外,在每一轮“验证游戏”中,验证者递归地检查越来越小的计算子集,这使得 TrueBit 大大减轻了节点上的计算负担。

Arbitrum为各方设计了一种激励机制,以便在链下就虚拟机的行为达成一致,因此它只要求验证者验证合同的数字签名。对于试图谎报虚拟机行为的不诚实方,Arbitrum 设计了一种有效的基于挑战的协议来识别并惩罚不诚实方。虚拟机行为的链下验证激励机制显著提高了智能合约的可扩展性和隐私性。

TrueBit 和 Arbitrum,通过激励机制鼓励各方验证智能合约的正确性,提高了智能合约的可扩展性和隐私性,但仍存在被恶意用户欺骗的风险。

讨论

实现区块链的安全和隐私需要综合多种技术,同时要注意新技术可能带来的问题,以及在安全、隐私和效率之间进行权衡。

结论

文章阐述了区块链安全和隐私的属性及实现这些属性的技术,深入理解区块链的安全和隐私属性对增强其信任度和发展防御技术至关重要,未来发展需要轻量级加密算法和实用的安全隐私方法。

参考:

  1. 区块链技术:架构及进展-计算机学报
  2. B站北京大学肖臻老师的《区块链技术与应用》
  3. 以太坊开发文档 以太坊开发文档 | ethereum.org
  4. 廖雪峰的区块链教程 简介 - 区块链教程 - 廖雪峰的官方网站

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

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

相关文章

Python酷库之旅-第三方库Pandas(124)

目录 一、用法精讲 551、pandas.DataFrame.notna方法 551-1、语法 551-2、参数 551-3、功能 551-4、返回值 551-5、说明 551-6、用法 551-6-1、数据准备 551-6-2、代码示例 551-6-3、结果输出 552、pandas.DataFrame.notnull方法 552-1、语法 552-2、参数 552-3…

BitSet-解决数据压缩问题

一、问题引入 假设QQ音乐服务器上有9000万首音乐&#xff0c;用户按照歌名来搜索歌曲&#xff0c;如何使得满足这一需求所需的数据占用的内存空间最小以及用户搜索歌曲速度更快 二、分析问题 1、为了满足使得数据占用的内存更小&#xff0c;可以采用映射的思路&#xff0c;按…

项目实战bug修复

实操bug修复记录 左侧侧边栏切换&#xff0c;再次切换侧边栏&#xff0c;右侧未从顶部初始位置展示。地图定位展示&#xff0c;可跳转到设置的对应位置。一个页面多个el-dialog弹出框导致渲染层级出现问题。锚点滚动定位错位问题。动态类名绑定。el-tree树形通过 draggable 属性…

Linux 进程与进程状态

目录 1.进程。 1.进程的概念 2.并行和并发 3.并行和并发的区别&#xff1a; 4.PCB&#xff08;程序控制块&#xff09; 5.进程组与会话。 6.进程状态。 1.进程。 1.进程的概念 进程是操作系统进行资源分配和调度的一个独立单位。每个进程都运行在操作系统的控制之下&…

游戏化在电子课程中的作用:提高参与度和学习成果

游戏化&#xff0c;即游戏设计元素在非游戏环境中的应用&#xff0c;已成为电子学习领域的强大工具。通过将积分、徽章、排行榜和挑战等游戏机制整合到教育内容中&#xff0c;电子课程可以变得更具吸引力、激励性和有效性。以下是游戏化如何在转变电子学习中发挥重要作用&#…

git命令将已经commit的代码push到其他分支

文章目录 一&#xff1a;对于多分支的代码库&#xff0c;将提交记录从一个分支转移到另一个分支是常见需求方法1&#xff1a;撤销commit操作方法2&#xff1a;实用命令git cherry-pick 来移动commit 二、不小心revert导致代码消失的问题 一&#xff1a;对于多分支的代码库&…

U8集成网页开发的数据查询(二)

前言 根据上一篇的开发&#xff0c;最近又做了一些单据查询的开发。 效果展示图片 结语 目前网页查询已经完善功能&#xff1a; 1.与U8的账号密码保持一致&#xff0c;定时从U8同步账号密码。 2.角色管理&#xff0c;权限分配。 3.U8基础档案数据查询&#xff08;示例&#…

828华为云征文 | 解锁企业级邮件服务,在华为云Flexus x实例上部署Mailcow开源方案

前言 华为云Flexus X实例携手Mailcow开源邮件方案&#xff0c;为企业打造了一个既高效又安全的邮件服务解决方案。Flexus X实例的柔性算力与高性能&#xff0c;是这一方案的坚实基石。它提供CPU内存的灵活定义&#xff0c;以经济型价格实现旗舰级性能&#xff0c;确保邮件服务的…

实例讲解电动汽车故障分级处理策略及Simulink建模方法

电动汽车的故障有很多种&#xff0c;每种故障发生时产生危害性是不同的&#xff0c;因此对于不同故障应采取不同的处理方式。目前一般有两种故障处理方式&#xff0c;一种是针对每一种故障对其故障危害性进行判断&#xff0c;然后针对不同故障设定不同的故障处理机制&#xff1…

day-59 四数之和

思路 双指针&#xff1a;类似16. 最接近的三数之和&#xff0c;将数组排序后&#xff0c;只需要枚举第一个数&#xff0c;则会变为与第16题相似的解题思路 解题过程 枚举选取的第一个数&#xff0c;0<i<len-3,然后就是第16题的解题思路 Code class Solution {public L…

【Linux实践】实验三:LINUX系统的文件操作命令

【Linux实践】实验三&#xff1a;LINUX系统的文件操作命令 实验目的实验内容实验步骤及结果1. 切换和查看目录2. 显示目录下的文件3. 创建和删除目录① mkdir② rm③ rmdir 4. 输出和重定向① 输出② 重定向 > 和 >> 5. 查看文件内容① cat② head 6. 权限7. 复制8. 排…

Kali nmap扫描

物理机 ipconfig 扫描物理机 nmap 192.168.0.198 扫描物理机所有开放的端口&#xff08;TCP半开扫描 nmap -sS 192.168.0.198 扫描物理机所有开放的端口&#xff08;TCP全开扫描 nmap -sT 192.168.0.198 扫描物理机主机系统 nmap -O 192.168.0.198 扫描物理机所在网段所有…

C++ STL容器(三) —— 迭代器底层剖析

本篇聚焦于STL中的迭代器&#xff0c;同样基于MSVC源码。 文章目录 迭代器模式应用场景实现方式优缺点 UML类图代码解析list 迭代器const 迭代器非 const 迭代器 vector 迭代器const 迭代器非const迭代器 反向迭代器 迭代器失效参考资料 迭代器模式 首先迭代器模式是设计模式中…

YOLOv8——测量高速公路上汽车的速度

引言 在人工神经网络和计算机视觉领域&#xff0c;目标识别和跟踪是非常重要的技术&#xff0c;它们可以应用于无数的项目中&#xff0c;其中许多可能不是很明显&#xff0c;比如使用这些算法来测量距离或对象的速度。 测量汽车速度基本步骤如下&#xff1a; 视频采集&#x…

江协科技STM32学习- P18 实验-PWM输入捕获测频率PWMI输入捕获模式测频率和占空比

&#x1f680;write in front&#x1f680; &#x1f50e;大家好&#xff0c;我是黄桃罐头&#xff0c;希望你看完之后&#xff0c;能对你有所帮助&#xff0c;不足请指正&#xff01;共同学习交流 &#x1f381;欢迎各位→点赞&#x1f44d; 收藏⭐️ 留言&#x1f4dd;​…

分布式光伏的发电监控

国拥有丰富的清洁可再生能源资源储量&#xff0c;积极开发利用可再生能源&#xff0c;为解决当前化石能源短缺与环境污染严重的燃眉之急提供了有效途径[1]。但是可再生能源的利用和开发&#xff0c;可再生能源技术的发展和推广以及可再生能源资源对环境保护的正向影响&#xff…

Qt窗口——QMenuBar

文章目录 QMenuBar示例演示给菜单栏设置快捷键给菜单项设置快捷键添加子菜单添加分割线添加图标 QMenuBar Qt中采用QMenuBar来创建菜单栏&#xff0c;一个主窗口&#xff0c;只允许有一个菜单栏&#xff0c;位于主窗口的顶部、主窗口标题栏下面&#xff1b;一个菜单栏里面有多…

计算机毕业设计之:基于微信小程序的电费缴费系统(源码+文档+讲解)

博主介绍&#xff1a; ✌我是阿龙&#xff0c;一名专注于Java技术领域的程序员&#xff0c;全网拥有10W粉丝。作为CSDN特邀作者、博客专家、新星计划导师&#xff0c;我在计算机毕业设计开发方面积累了丰富的经验。同时&#xff0c;我也是掘金、华为云、阿里云、InfoQ等平台…

鸿蒙OpenHarmony【小型系统基础内核(进程管理调度器)】子系统开发

调度器 基本概念 OpenHarmony LiteOS-A内核采用了高优先级优先 同优先级时间片轮转的抢占式调度机制&#xff0c;系统从启动开始基于real time的时间轴向前运行&#xff0c;使得该调度算法具有很好的实时性。 OpenHarmony 的调度算法将 tickless 机制天然嵌入到调度算法中&…

gRPC介绍

gRPC 是一个由谷歌开发的现代开源高性能 RPC 远程过程调用&#xff08; Remote Procedure Calls&#xff09;框架&#xff0c;具备良好的兼容性&#xff0c;可在多个开发环境下运行。 相较于目前主流的 HTTP API 接口&#xff0c;gRPC 接口采用了领先的 HTTP/2 底层架构设计作…