区块链(Blockchain)调查研究(一)

文章目录

  • 1. 区块链是什么?
  • 2. 区块链分类和特点
  • 3. 区块链核心关键技术
    • 3.1 共识机制
    • 3.2 密码学技术
    • 3.4 分布式存储
    • 3.5 智能合约
  • 4. 区块链未来发展趋势
  • 5. 区块链能做什么、不能做什么?
    • 5.1 第一部分
    • 5.2 第二部分
    • 5.3 第三部分(结论)
  • 6. 区块链 Java 实现小案例

1. 区块链是什么?

  区块链是分布式数据存储、点对点传输、共识机制、加密算法等计算机技术的新型应用模式。区块链(Blockchain),是比特币的重要概念,它本质上是一个去中心化的数据库,同时作为比特币的底层技术,是一串使用密码学方法相关联产生的数据块,每一个数据块中包含了一批次比特币网络交易的信息,用于验证其他信息的有效性(防伪)和生成下一个区块。

  区块链简单理解就是一个多方参与的加密分布式记账本。这里面有三个关键词:记账本、加密和分布式。区块链更多相关的名次解释:https://www.processon.com/mindmap/66625e996b260b4ad3494eb7)

(1)记账本
  这个账本其实就像我们的银行账户一样,你在某一个银行里面有多少钱,今天花了多少等等,这些都是有记账的。
  这个账本可不是普通的账本,它前面有一个定语,叫多方参与。多方参与意味着什么?这个账本不是一个人去记的,也不是一个中心化机构去记的,而是由分散在全球各个角落的人一起记。甚至借助于卫星系统,接下来可能还会分布在星空中。

(2)加密
  加密的意思就是通过一个密码学的手段,保证你的账户不会被别人篡改。这就和现在我们去银行转账,他们通常会给你一个U盾一样,这个U盾就相当于你账户的一把钥匙,只有拥有钥匙的人才能操作这个账户,才能进行转账。
  在区块链里面也有这个概念。你在区块链开户的时候,系统会自动创建一把钥匙,有了这个钥匙才可以操作区块链上的账户。这把钥匙的产生,和使用钥匙进行账户操作的一些判断,都来源于这个加密学手段。

(3)分布式
  分布式的意思是说,区块链这个多方参与的节点,实际上是分布在全球的任何一个网络节点里面,它不归属于一个特定的机构。
  像现在网站的一些系统里,存在有很多服务器,这个服务器我们也可以说它是多方参与的,但是我们不能说它是分布式的。为什么呢?因为分布式有两个原则:一是它在物理位置上是分布式的;二是它在规则上面也是分布式的。但是像网站的服务器,是归属于一个特定机构或者特定的个体的,这不能叫分布式。

2. 区块链分类和特点

区块链根据应用场景和设计不同,主要分为公有链、联盟链和私有链:

(1)公有链:以比特币、以太坊和所有数字货币为代表,各个节点可以自由进入或退出区块链网络;

(2)联盟链:各个节点通常代表实体组织或个人,通常需要经过授权后加入或退出网络。由于各机构通常存在相关利益,因此需要各方共同参与和维护;

(3)私有链:各个节点的准入和退出权限均由内部控制,通常是在特定机构用于内部数据管理与审计。

区块链主要优势特点:
(1)去中心化:无需第三方介入,实现点对点的交易、协调和协作。在区块链系统中,没有任何一个机构或个人可以实现对全局数据的控制,而任一节点停止工作都不会影响系统整体运作,这种去中心化的网络将极大地提升数据安全性。

(2)不可篡改性:区块链利用加密技术来验证与存储数据、利用分布式共识算法来新增和更新数据,区块链需要各节点参与验证交易和出块;修改任一数据需要变更所有后续记录,修改单节点数据难度极大。

(3)公开透明与可溯源性:写入的区块内容将备份复制到各节点中,各节点都拥有最新的完整数据库拷贝且所有的记录信息都是公开的,任何人通过公开的接口都可查询区块数据。区块链中的每一笔交易通过链式存储固化到区块数据中,同时通过密码学算法对所有区块的所有交易记录进行叠加式 HASH 摘要处理,因此可追溯到任何一笔交易历史。

(4)集体维护性(自治性):区块链去中心化的特征决定了它的集体维护性。传统中心化机构通常要身兼三职:数据存储者、数据管理者和数据分析者,区块链则以对等的方式由各参与方共同维护,各方权责明确,无需向第三方机构让渡权利,实现共同协作。

(5)匿名性:区块链上面没有个人的信息,因为这些都是加密的,是一堆数字字母组成的字符串,这样就不会出现各种身份证信息、电话号码被倒卖的现象。

3. 区块链核心关键技术

从技术角度来讲,区块链并不是一个全新的技术,而是集成了多种现有技术进行的组合式创新,涉及到以下几个方面:

3.1 共识机制

  常用的共识机制主要有 PoW、PoS、DPoS、PBFT、PAXOS等(如图)。由于区块链系统中没有一个中心,因此需要有一个预设的规则来指导各方节点在数据处理上达成一致,所有的数据交互都要按照严格的规则和共识进行;(《常见共识算法(PBFT、PoW、PoS、DPoS、Ripple)》)
共识算法

3.2 密码学技术

  密码学技术是区块链的核心技术之一,目前的区块链应用中采用了很多现代密码学的经典算法,主要包括:哈希算法、对称加密、非对称加密、数字签名等。

HASH 摘要算法:HASH 算法的目的是针对不同输入,产生一个唯一的固定长度的输出。HASH 算法有 3 个特点:一是不同的输入数据产生的输出数据必定不同;二是输入数据的微小变动会导致输出的较大不同;三是给定已知输出数据,无法还原出原始的输入数据。常用的 SHA-256 算法就是针对任意长的数据数列输出 256 位数据,实际使用中 SHA256 用于对区块链的每个区块数据进行 HASH 摘要后防止篡改, 同时结合 Merkle Tree 数据结构实现部分区块数据的 HASH 值验
证。

对称加密算法:对称加密算法利用加密密钥对原始数据进行加密处理,然后将加密后的密文发送给接收者,接收者利用同一密钥及相同算法的逆算法对密文进行解密,才能使其恢复成原始数据。在对称加密算法中,使用的密钥只有一个,发收信双方都使用这个密钥对数据进行加密和解密,这就要求解密方事先必须知道加密密钥。区块链技术中常用的对称加密算法有 AES。

非对称加密算法:非对称加密算法需要两个密钥:公开密钥(Public Key)和私有密钥(Private Key)。公开密钥与私有密钥是一对,如果用公开密钥对数据进行加密,只有用对应的私有密钥才能解密;如果用私有密钥对数据进行加密,那么只有用对应的公开密钥才能解密。其实现机密信息交换的基本过程是:甲方生成一对密钥并将其中的一把作为公用密钥向其它方公开;得到该公用密钥的乙方使用该密钥对机密信息进行加密后再发送给甲方;甲方再用自己保存的另一把专用密钥对加密后的信息进行解密。

数字签名算法: 区块链技术中使用到的数字签名技术用于验证信息的完整性和真实性,基本流程如下:发送者将需要签名的原始数据进行 HASH 摘要,然后对摘要信息用私钥加密后与原始数据一起传送给接收者。接收者只有用发送者的公钥才能解密被加密的摘要信息,然后用同样 HASH 函数对收到的原文产生一个摘要信息,如果与解密的摘要信息对比相同则说明收到的信息是完整的,在传输过程中没有被修改,否则说明信息被修改过,因此数字签名能够验证信息的完整性。此外,信息发送者拥有私钥且不公开,因此只有发送者本人才能构造基于其私钥的签名信息,可以确保签名真实性。ECDSA 是区块链技术中常用的数字签名技术。

3.4 分布式存储

  区块链是一种点对点网络上的分布账本,每个参与的节点都将独立完整地存储写入区块数据信息。分布式存储区别于传统中心化存储的优势主要体现在两个方面:
(1)每个节点上备份数据信息,避免了由于单点故障导致的数据丢失。
(2)每个节点上的数据都独立存储,有效规避了恶意篡改历史数据。

3.5 智能合约

  智能合约允许在没有第三方的情况下进行可信交易,只要一方达成了协议预先设定的目标,合约将会自动执行交易,这些交易可追踪且不可逆转。具有透明可信、自动执行、强制履约的优点。

4. 区块链未来发展趋势

  面对区块链技术带来的机遇与挑战,全球各行各业都在进行积极布局,试图通过这一“组合式创新”技术改变原有的业务与管理模式,构建一个多方参与、安全信任的新型生态体系。区块链的未来发展趋势主要体现在以下几个方面:

(1) 产业渗透:虽然区块链的底层架构源于比特币,但作为一种通用技术,区块链正加速从数字货币向其他领域渗透,和各行各业创新融合。目前,金融服务、数字资产、慈善公益等行业纷纷投入到区块链应用的探索中,利用日志存证、信息追溯等特点,改变行业内原有的交易不公开透明等问题。相信在未来,区块链将在更多的领域发挥作用。诸如医疗健康等涉及到大规模数据交互的行业,必将通过区块链技术实现数据的可信交易,破除现有的利益壁垒,打造一个全新的数据行业内外安全共享生态体系;

(2) 多中心化:区块链的核心并不是“为了去中心化而抛弃中心化管理”,而是构建多方信任机制。在未来,随着跨链技术的不断发展,区块链的架构将演变为多方共同参与的可信任体系。即在多方信息不对称、背景不清晰的情况下,构建多方赖以信任与合作的新生态。未来在多中心化和去中心化之间,将会存在一个中间区域,而不同区块链系统根据特定场景需求,将呈现不同的非中心化程度。

(3) 技术融合:以云计算、大数据、物联网为代表的新一代信息技术正渗透进各行各业。未来区块链的发展必将以技术融合为切入点,共同解决单一技术的不足与难点,扩大应用场景,降低应用成本。以区块链与物联网结合为例,物联网是互联网在实体经济中的延伸,通过计算机技术实现物品与物品之间的信息交换与通信。区块链系统是典型的点对点网络,具有分布式异构特征,天然适合于在物联网中建立各主体的共识机制,制定交互规则,构建去中心化控制的交易网络。因此,如何通过区块链与其他技术的融合,实现产业创新,将成为区块链未来发展的重要课题。

(4) 标准规范:企业应用在未来将是区块链的主战场,联盟链将成为主流方向。与公有链不同,在企业级应用中,人们不仅关注通过软件和算法来构建信任基础,更重要的是如何从用户体验与业务需求出发,构建一套基于共识机制、权限管理、智能合约等多维度的生态规则。面对不断演进的区块链技术,同步考虑相应的技术标准和法律法规,增加区块链的可信程度,建立区块链的应用准则加强监管,防范风险。

5. 区块链能做什么、不能做什么?

  从央行官网发布了题为《区块链能做什么、不能做什么?》的工作论文,认为目前真正落地并产生社会效益的区块链项目很少,除了区块链物理性能不高以外,区块链经济功能的短板也是重要原因。(央行发布工作论文原文:《区块链能做什么、不能做什么?》)
第一部分,论文从Token、智能合约和共识算法三个角度归纳出目前主流区块链系统采取的“Token 范式”,并给予经济学解释。
第二部分,基于“Token”范式,论文分析了区块链的 4 类主要应用方向。
第三部分,该论文主张:应在持续研究和试验的基础上,理性客观评估区块链能做什么、不能做什么。

5.1 第一部分

在第一部分,论文从Token、智能合约和共识算法三个角度归纳出目前主流区块链系统采取的“Token 范式”,并给予经济学解释。

1、Token 是区块链内定义的状态变量,具有若干类似货币的特征。区块链内 Token 交易无需依靠受信任的第三方机构,但区块链内这种去信任环境不能延伸到区块链外

一旦脱离 Token 交易等原生场景,区块链要解决现实中的信任问题,往往需要引入区块链外的可信中心机制予以辅助。

2、智能合约是运行在区块链内、主要对 Token 进行复杂操作的计算机代码,可以实现 Token 的定义、发行、销毁、转让、抵押、冻结和解冻等功能,但无法确保区块链内债务的履约,也很难处理不完全契约。目前区块链内有限的运行环境,使得这类代码远没达到智能阶段

3、共识算法针对与 Token 的状态和交易等有关的信息,并保证了这类信息的真实准确。但区块链内与 Token 的状态或交易等无关的信息基本不属于共识的范围。

特别是,区块链外信息写入区块链内,只意味着这些信息全网公开且不可篡改,不能提升这些信息在源头的真实准确性。目前也没有去中心化预言机能真实准确地将区块链外信息写入区块链内。

5.2 第二部分

在第二部分,基于“Token”范式,论文分析了区块链的 4 类主要应用方向:
区块链的主要应用方向
1、无币区块链。这类应用发挥区块链的公共共享账本功能以提高劳动分工协作效率,不直接涉及产权和风险的转移,面临的主要问题是如何保证区块链外信息在源头和写入区块链环节的真实准确性。
联盟链因为仅对授权节点开放并依靠现实世界的约束,比公有链更适合这类应用。

2、以非公开发行交易的 Token 代表区块链外的资产或权利,以改进这些资产或权利的登记和交易流程。

但 Token 在物理上只是一段代码,Token 是否对应着区块链外的资产或权利,以及 Token 的状态和交易是否对区块链外的现实世界有 约束力或影响力,取决于区块链外的的法律和制度是否赋予 Token 以超越区块链 的内涵。

3、以公开发行交易的 Token 作为计价单位或标的资产,但依托区块链外的法律框架的经济活动。

因为很难根据基本面准确评估 Token 的内在价值,这类应用只能参考 Token 在二级市场上的价格,但 Token 价格往往表现出高波动性,限制了这类应用的开展。

4、用区块链构建分布式自治组织。这方面至今没有广受认可的成功案例,主要受制于以下障碍:

公有链的物理性能不高,支撑不了大规模交易;智能合约的功能短板;Token 价格的高波动性限制了 Token 作为支付工具和激励手段的有效
性;加密经济学模型设计不合理。

此外,论文在分析区块链的这些主要应用方向时,还讨论了其中涉及的经济学问题并综述了相关研究:
1、Token 类似货币的特征,包括加密货币作为支付工具的表现、二级市场价格特征、稳定加密货币试验以及与加密货币有关的反洗钱问题;

2、Token 对区块链平台型项目融资和发展的影响,以及 Token 的双重角色造成 Token 价格的内在不稳定性;

3、区块链的治理功能,包括股权型 Token 设计,Token 价格波动对基于 Token 的激励机制的影响,智能合约的功能短板对现实世界治理 机制移植到区块链场景的影响,以及 Token 的快速变现机制对区块链项目投融资 双方利益绑定的影响;

4、区块链系统的性能和安全,包括区块链的“三元悖论”、 POW 的利弊、POW“挖矿”的经济学问题以及区块链的经济安全边界。

5.3 第三部分(结论)

在结论部分,该论文主张:应在持续研究和试验的基础上,理性客观评估区块链能做什么、不能做什么。具体来讲:
1、首先,不要夸大或迷信区块链的功能。 这些年的行业实践已经证明一些区块链应用方向是不可行的。
  特别是,现代金融体系在发展过程中不断吸收各种技术创新。技术创新只要有助于提高金融资源配置效率以及金融交易的安全性、便利性,就会融入金融体系。
  迄今为止,还没有一项技术创新对金融体系产生过颠覆性影响,区块链也不会例外。
  加密货币供给没有灵活性,缺乏内在价值支撑和主权信用担保,无法有效履行货币职能,不可能颠覆或取代法定货币。而且区块链的匿名特征反而会增加金融交易中反洗钱(AML)和“了解你的客户”(KYC)的实施难度。
  但同时,论文也指出,也要看到我国的一些国情提供了实践区块链的机会,比如数字票据交易平台 有助于缓解我国票据市场分散化的问题。

2、其次,论文指出区块链应用要立足实际情况,不要拘泥于一些过于理想化的宗旨。比如,用科技来替代制度和信任是非常困难的,在很多场景甚至就是乌托邦。再比如,去中心化与中心化各有适用场景,不存在优劣之分。
  现实中完全的去中心化和完全的中心化场景都不多见。很多区块链项目从去中心化宗旨出发,但后期或多或少引入了中心化成分,否则就没法落地。比如,区块链外信息写入区块链内,往往需要一个可信任的中心化机构,完全的去中心化是不可能的。

3、最后,论文认为目前区块链投融资领域泡沫明显,投机炒作、市场操纵甚至违规违法等行为普遍,特别是涉及公开发行交易的 Token 的项目。政府有关部门应加强监管,防范金融风险。

6. 区块链 Java 实现小案例

首先,我们定义一个区块类,用于存储区块的基本信息:

package com.leo.demo.blockchaintest;/*** @author Leo825* @description : 定义一个区块类,用于存储区块的基本信息* @date 2024/6/6 16:59*/
public class Block {public String hash;public String previousHash;private String data;private long timeStamp;private int nonce;public Block(String data, String previousHash) {this.data = data;this.previousHash = previousHash;this.timeStamp = System.currentTimeMillis();this.hash = calculateHash();}/*** 计算区块的哈希值** @return*/public String calculateHash() {String calculatedhash = StringUtil.applySha256(previousHash +Long.toString(timeStamp) +Integer.toString(nonce) +data);return calculatedhash;}/*** 模拟挖矿** @param difficulty*/public void mineBlock(int difficulty) {String target = new String(new char[difficulty]).replace('\0', '0');while (!hash.substring(0, difficulty).equals(target)) {nonce++;hash = calculateHash();}System.out.println("Block Mined!!! : " + hash);}
}

接下来,我们创建一个区块链类,用于管理区块链:

package com.leo.demo.blockchaintest;
import com.google.gson.GsonBuilder;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;/*** @author Leo825* @description : TODO* @date 2024/6/6 16:55*/
public class BlockchainDemo {public static int difficulty = 5;public static List<Block> blockchain = new ArrayList<>();public static void main(String[] args) {blockchain.add(new Block("Hi im the first block", "0"));System.out.println("Trying to Mine block 1... ");blockchain.get(0).mineBlock(difficulty);blockchain.add(new Block("Yo im the second block", blockchain.get(blockchain.size() - 1).hash));System.out.println("Trying to Mine block 2... ");blockchain.get(1).mineBlock(difficulty);blockchain.add(new Block("Hey im the third block", blockchain.get(blockchain.size() - 1).hash));System.out.println("Trying to Mine block 3... ");blockchain.get(2).mineBlock(difficulty);System.out.println("\nBlockchain is Valid: " + isChainValid());String blockchainJson = new GsonBuilder().setPrettyPrinting().create().toJson(blockchain);System.out.println("\nThe block chain: ");System.out.println(blockchainJson);}/*** 验证区块链是否有效** @return*/public static Boolean isChainValid() {Block currentBlock;Block previousBlock;String hashTarget = new String(new char[difficulty]).replace('\0', '0');//循环遍历区块链检查哈希:for (int i = 1; i < blockchain.size(); i++) {currentBlock = blockchain.get(i);previousBlock = blockchain.get(i - 1);//比较当前块的哈希和计算的哈希:if (!currentBlock.hash.equals(currentBlock.calculateHash())) {System.out.println("Current Hashes not equal");return false;}//比较当前块的previousHash和前一个块的哈希:if (!previousBlock.hash.equals(currentBlock.previousHash)) {System.out.println("Previous Hashes not equal");return false;}//检查是否已挖掘:if (!currentBlock.hash.substring(0, difficulty).equals(hashTarget)) {System.out.println("This block hasn't been mined");return false;}}return true;}
}

其中用到的工具类如下:

package com.leo.demo.blockchaintest;
import com.google.gson.GsonBuilder;
import java.security.MessageDigest;/*** @author Leo825* @description : Sha256 算法实现* 算法实现 :https://blog.csdn.net/leho666/article/details/114253341* @date 2024/6/6 17:05*/
public class StringUtil {/*** Applies Sha256 to a string and returns the result.** @param input* @return*/public static String applySha256(String input) {try {MessageDigest digest = MessageDigest.getInstance("SHA-256");//Applies sha256 to our input,byte[] hash = digest.digest(input.getBytes("UTF-8"));// This will contain hash as hexidecimalStringBuffer hexString = new StringBuffer();for (int i = 0; i < hash.length; i++) {String hex = Integer.toHexString(0xff & hash[i]);if (hex.length() == 1) hexString.append('0');hexString.append(hex);}return hexString.toString();} catch (Exception e) {throw new RuntimeException(e);}}/*** Short hand helper to turn Object into a json string** @param o* @return*/public static String getJson(Object o) {return new GsonBuilder().setPrettyPrinting().create().toJson(o);}/*** Returns difficulty string target, to compare to hash. eg difficulty of 5 will return "00000"** @param difficulty* @return*/public static String getDificultyString(int difficulty) {return new String(new char[difficulty]).replace('\0', '0');}
}

执行日志如下所示:

Trying to Mine block 1... 
Block Mined!!! : 00000745c9adac5d49ec88f41c50c1daa9f0cbfae3d664443f3a0abd639ef77b
Trying to Mine block 2... 
Block Mined!!! : 00000db5f7452a693b60efecdff038da7c61dec372d7fe643b3b468f7ef1bcee
Trying to Mine block 3... 
Block Mined!!! : 00000625b130ceff9ab7e10b67179cd9f84437cf49eb3dd5710e19963293f1e3Blockchain is Valid: trueThe block chain: 
[{"hash": "00000745c9adac5d49ec88f41c50c1daa9f0cbfae3d664443f3a0abd639ef77b","previousHash": "0","data": "Hi im the first block","timeStamp": 1717744786179,"nonce": 596240},{"hash": "00000db5f7452a693b60efecdff038da7c61dec372d7fe643b3b468f7ef1bcee","previousHash": "00000745c9adac5d49ec88f41c50c1daa9f0cbfae3d664443f3a0abd639ef77b","data": "Yo im the second block","timeStamp": 1717744788844,"nonce": 3361693},{"hash": "00000625b130ceff9ab7e10b67179cd9f84437cf49eb3dd5710e19963293f1e3","previousHash": "00000db5f7452a693b60efecdff038da7c61dec372d7fe643b3b468f7ef1bcee","data": "Hey im the third block","timeStamp": 1717744802008,"nonce": 727505}
]

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

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

相关文章

新书推荐:2.3 消息机制

Windows程序的消息机制是指在Windows操作系统下&#xff0c;应用程序与操作系统之间的一种通信方式。通过消息机制&#xff0c;应用程序可以接收来自操作系统的各种事件和请求&#xff0c;以便做出相应的响应和处理。 在Windows程序中&#xff0c;消息机制的实现是基于消息队列…

用 Axios 封装一个双 token 无感刷新

为什么要用双Token无感刷新&#xff0c;它解决了什么问题&#xff1f; 为了保证安全性&#xff0c;后端设置的Token不可能长期有效&#xff0c;过了一段时间Token就会失效。而发送网络请求的过程又是需要携带Token的&#xff0c;一旦Token失效&#xff0c;用户就要重新登陆&…

欢乐打地鼠小游戏html源码

这是一款简单的js欢乐打地鼠游戏&#xff0c;挺好玩的&#xff0c;老鼠出来用鼠标点击锤它&#xff0c;击中老鼠获得一积分。 欢乐打地鼠小游戏html源码

kopf,一个实用的 Python 库!

更多Python学习内容&#xff1a;ipengtao.com 大家好&#xff0c;今天为大家分享一个实用的 Python 库 - kopf。 Github地址&#xff1a;https://github.com/nolar/kopf 在 Kubernetes 中&#xff0c;Operator 是一种用于扩展 Kubernetes 功能的强大工具。Operator 可以自动化应…

MySQL的group by与count(), *字段使用问题

文章目录 问题group by到底做了什么举个例子简单来说为什么select字段&#xff0c;count()不能和*共同使用总结 问题 这是一段摘抄自MySQL官网的文字。其大致意思是MySQL拓展了group by的使用&#xff0c;MySQL允许选择没有出现在group by中的字段。换句话说&#xff0c;标准SQ…

【QT5.14.2】编译MQTT库example的时候报No such file or directory

【QT5.14.2】编译MQTT库example的时候报No such file or directory 前几天导师让跑一下MQTT库&#xff0c;用的5.14.2版本的QT&#xff0c;于是就上网搜了一个教程&#xff1a;https://www.bilibili.com/video/BV1dH4y1e7hG/?spm_id_from333.337.search-card.all.click&v…

Fedora的远程桌面

要在 Fedora 40 上开启远程桌面功能。 首先&#xff0c;要确保已安装 gnome-remote-desktop 和 vino 包。 这些软件包通常默认安装在 Fedora 的 GNOME 桌面环境中。 可以按照以下步骤操作&#xff1a; 1、判断电脑是否安装了 gnome-remote-desktop 和 vino 包: tomfedora:…

第十三周 5.28 三个修饰符知识点

一、abstract[抽象的] 1.abstract可以修饰类: (1&#xff09;被abstract修饰的类称为抽象类 (2) 语法:abstract class 类名{} (3) 特点:抽象类只能声明引用&#xff0c;不能创建对象 (4) 抽象类中可以定义属性和成员方法、构造方法 2.abstr…

【Linux】匿名管道的应用场景 --- 进程池

&#x1f466;个人主页&#xff1a;Weraphael ✍&#x1f3fb;作者简介&#xff1a;目前正在学习c和算法 ✈️专栏&#xff1a;Linux &#x1f40b; 希望大家多多支持&#xff0c;咱一起进步&#xff01;&#x1f601; 如果文章有啥瑕疵&#xff0c;希望大佬指点一二 如果文章对…

Qt qtpropertybrowser使用实例(1)

属性界面实例&#xff1a; 代码如下&#xff1a; #include <QDate> #include <QLocale> #include "qtpropertymanager.h" #include "qtvariantproperty.h" #include "qttreepropertybrowser.h" int main(int argc, char *argv[]) {…

nginx mirror流量镜像详细介绍以及实战示例

nginx mirror流量镜像详细介绍以及实战示例 1.nginx mirror作用2.nginx安装3.修改配置3.1.nginx.conf3.2.conf.d目录下添加default.conf配置文件3.3.nginx配置注意事项3.3.nginx重启 4.测试 1.nginx mirror作用 为了便于排查问题&#xff0c;可能希望线上的请求能够同步到测试…

TalkingData 是一家专注于提供数据统计和分析解决方案的独立第三方数据智能服务平台

TalkingData 是一家专注于提供数据统计和分析解决方案的独立第三方数据智能服务平台。通过搜索结果&#xff0c;我们可以了解到 TalkingData 的一些关键特性和市场情况&#xff0c;并将其与同类型产品进行比较。 TalkingData 产品特性 数据统计与分析&#xff1a;提供专业的数…

【每日算法】

算法第15天| (二叉树part02)层序遍历、226.翻转二叉树(优先掌握递归)、101. 对称二叉树(优先掌握递归) 文章目录 算法第15天| (二叉树part02)层序遍历、226.翻转二叉树(优先掌握递归)、101. 对称二叉树(优先掌握递归)一、层序遍历二、226. 翻转二叉树(优先掌握递归)三、101. 对…

Elasticsearch index 设置 false,为什么还可以被检索到?

在 Elasticsearch 中&#xff0c;mapping 定义了索引中的字段类型及其处理方式。 近期有球友提问&#xff0c;为什么设置了 index: false 的字段仍能被检索。 本文将详细探讨这个问题&#xff0c;并引入列式存储的概念&#xff0c;帮助大家更好地理解 Elasticsearch 的存储和查…

基于STM32F030设计的多点温度采集系统(BC26+OneNet)

一、项目背景 随着物联网技术的迅猛发展&#xff0c;越来越多的智能设备应运而生&#xff0c;而温度采集系统是其中重要的一类。在现代工业和家庭生活中&#xff0c;温度对于生产、居住和储存等过程的控制有着非常重要的作用。因此&#xff0c;准确地采集环境温度数据并进行处…

HTML做成一个粒子漩涡特效页面

大家好&#xff0c;今天制作制作一个粒子漩涡特效的页面&#xff01; 先看具体效果&#xff1a; 要在一个单一的 index.html 页面中实现粒子漩涡特效&#xff0c;我们可以使用HTML、CSS和JavaScript&#xff08;不需要外部库&#xff09;。下面是一个简单的例子&#xff0c;展…

JWT 从入门到精通

什么是 JWT JSON Web Token&#xff08;JWT&#xff09;是目前最流行的跨域身份验证解决方案 JSON Web Token Introduction - jwt.ioLearn about JSON Web Tokens, what are they, how they work, when and why you should use them.https://jwt.io/introduction 一、常见会…

Git发布正式

一般我们开发都是在测试环境开发&#xff0c;开发完成后再发布到正式环境。 一.分支代码合并到主分支1.首先切换到自己的分支(比如分支叫&#xff1a;dev)git checkout dev2.把本地分支拉取下来git pull 或者 git pull origin dev3.切换到主分支mastergit checkout master4.更新…

【Vue】购物车案例-构建项目

脚手架新建项目 (注意&#xff1a;勾选vuex) 版本说明&#xff1a; vue2 vue-router3 vuex3 vue3 vue-router4 vuex4/pinia vue create vue-cart-demo需要勾选上vuex&#xff0c;由于这个项目只有一个页面&#xff0c;vuex可勾可不勾 将原本src内容清空&#xff0c;替换成教学…