《区块链公链数据分析简易速速上手小册》第1章:区块链基础(2024 最新版)

news2024/12/29 11:23:19

在这里插入图片描述

文章目录

  • 1.1 区块链技术概览:深入探究与实用案例
    • 1.1.1 区块链的核心概念
    • 1.1.2 重点案例:供应链管理
    • 1.1.3 拓展案例 1:数字身份验证
    • 1.1.4 拓展案例 2:智能合约在房地产交易中的应用
  • 1.2 主流公链介绍
    • 1.2.1 公链的核心概念
    • 1.2.2 重点案例:以太坊上的去中心化金融(DeFi)
    • 1.2.3 拓展案例 1:比特币支付集成
        • 高级集成
    • 1.2.4 拓展案例 2:莱特币轻量级交易
        • 安装依赖
        • Python 示例:创建莱特币地址和发送交易
        • 注意事项
  • 1.3 区块链的工作原理
    • 1.3.1 区块链的核心组成
    • 1.3.2 重点案例:比特币的 PoW 机制
    • 1.3.3 拓展案例 1:智能合约自动执行
        • 智能合约示例(Solidity)
        • 使用 Python 部署智能合约
        • 总结
    • 1.3.4 拓展案例 2:使用 Python 与区块链交互
        • 安装 Web3.py
        • 读取区块信息
        • 发送交易
        • 与智能合约交互

1.1 区块链技术概览:深入探究与实用案例

在我们跳进区块链这个充满神奇的数字世界之前,让我们先来装备一些基础知识,确保我们不会在第一次遭遇智能合约或是加密货币时就迷路。

1.1.1 区块链的核心概念

  • 去中心化:想象一个没有中央服务器的世界,信息和数据分布在网络中的每一个节点上。这意味着没有单一的控制点,也更难被攻击或篡改。
  • 不可篡改性:一旦数据被添加到区块链上,它就无法被更改或删除。这是通过加密和每个区块之间的唯一连接(即哈希值)来实现的。
  • 透明性和匿名性:所有交易都是公开的,任何人都可以查看,但参与者的身份可以保持匿名。
  • 智能合约:自执行的合约,其条款直接写入代码中。一旦触发预定条件,合约就会自动执行。

1.1.2 重点案例:供应链管理

在供应链管理中,区块链技术能够提供透明、不可篡改且去中心化的记录系统。这对于追踪产品从生产到消费的每一步非常有用。例如,一个使用区块链技术来追踪农产品从田地到餐桌的系统可以确保食品的来源和质量,同时增加消费者的信任。

Python 操作案例
假设我们要创建一个简单的区块链来追踪产品。我们将使用 Python 来实现这个区块链模型。

import hashlib
import json
from time import time

class Blockchain:
    def __init__(self):
        self.chain = []
        self.pending_transactions = []
        self.new_block(previous_hash="The Times 03/Jan/2009 Chancellor on brink of second bailout for banks", proof=100)

    def new_block(self, proof, previous_hash=None):
        block = {
            'index': len(self.chain) + 1,
            'timestamp': time(),
            'transactions': self.pending_transactions,
            'proof': proof,
            'previous_hash': previous_hash or self.hash(self.chain[-1]),
        }
        self.pending_transactions = []
        self.chain.append(block)
        return block

    @staticmethod
    def hash(block):
        block_string = json.dumps(block, sort_keys=True).encode()
        return hashlib.sha256(block_string).hexdigest()

# 实例化区块链
blockchain = Blockchain()
print(blockchain.chain)

1.1.3 拓展案例 1:数字身份验证

在这个数字时代,我们的数字身份几乎和我们的物理身份一样重要。不幸的是,传统的身份验证系统存在诸多问题,包括易受攻击、身份盗窃风险高、以及缺乏用户控制等。区块链提供了一个革命性的解决方案,能够确保数字身份的安全、不可伪造,并且完全由用户控制。

区块链上的数字身份验证系统利用去中心化的特性,为每个用户创建一个唯一的、不可篡改的身份记录。用户可以控制谁可以访问他们的身份信息,以及在什么情况下可以访问,从而在保证安全的同时增加了透明度和信任。

Python Demo 案例

以下是一个简化版的数字身份验证系统的例子,使用 Python 实现。这个例子演示了如何在区块链上创建和验证一个简单的数字身份。

import hashlib
import json
from time import time
from uuid import uuid4

class Blockchain:
    def __init__(self):
        self.chain = []
        self.current_identities = []
        self.new_block(previous_hash='1', proof=100)

    def register_identity(self, identity_data):
        """
        创建一个新的身份记录到区块链上
        """
        self.current_identities.append(identity_data)

    def new_block(self, proof, previous_hash=None):
        """
        创建新的区块并将其加入到链中
        """
        block = {
            'index': len(self.chain) + 1,
            'timestamp': time(),
            'identities': self.current_identities,
            'proof': proof,
            'previous_hash': previous_hash or self.hash(self.chain[-1]),
        }
        self.current_identities = []
        self.chain.append(block)
        return block

    @staticmethod
    def hash(block):
        """
        创建一个区块的 SHA-256 hash值
        """
        block_string = json.dumps(block, sort_keys=True).encode()
        return hashlib.sha256(block_string).hexdigest()

    @staticmethod
    def verify_identity(identity_data, block):
        """
        验证身份信息是否在给定的区块中
        """
        return identity_data in block['identities']

# 创建一个区块链实例
blockchain = Blockchain()

# 用户注册身份
user_identity = {'user_id': str(uuid4()), 'name': 'Alice'}
blockchain.register_identity(user_identity)

# 挖矿(这里简化处理,直接创建新的区块)
blockchain.new_block(proof=12345)

# 在区块链中验证身份
last_block = blockchain.chain[-1]
if blockchain.verify_identity(user_identity, last_block):
    print("身份验证成功。")
else:
    print("身份验证失败。")

在这个例子中,我们首先创建了一个区块链和一个方法来注册新的身份信息。每当新的身份注册时,它会被添加到当前待处理的身份列表中。在区块链上“挖掘”新区块时,所有当前待处理的身份都会被记录在新区块中,并且通过verify_identity方法可以验证特定身份是否已经被记录在区块链中。

这个简单的 Demo 展示了如何使用区块链来创建和验证数字身份,提供了一个更安全、可信的身份验证机制。当然,实际应用中的数字身份系统会更加复杂,包括更多的安全措施和身份验证逻辑,但这个例子为我们提供了一个很好的起点,让我们理解区块链如何在数字身份验证中发挥作用。

1.1.4 拓展案例 2:智能合约在房地产交易中的应用

房地产行业长期以来一直依赖于繁琐的纸质流程、中间人以及各种形式的验证和确认。这不仅使得交易过程缓慢而且成本高昂。幸运的是,智能合约提供了一种简化和自动化这些过程的方式,从而减少了时间和费用,同时增加了透明度和信任。

智能合约是自动执行、控制或文档化法律事件和行为的合约。在房地产交易中,智能合约可以用来自动执行从房产销售到资金转移、甚至是权属登记的所有步骤,一旦合同中规定的条件得到满足。

Python Demo案例

由于直接在区块链上编写和执行智能合约通常需要使用Solidity(Ethereum智能合约编程语言)或其他区块链特定语言,我们将通过一个简化的Python模拟来说明智能合约如何在房地产交易中被应用。

这个模拟将展示一个卖家和买家之间的房产交易过程,其中使用智能合约来自动处理交易和转移资金。

class SmartContract:
    def __init__(self, seller, buyer, property_title, sale_price):
        self.seller = seller
        self.buyer = buyer
        self.property_title = property_title
        self.sale_price = sale_price
        self.contract_executed = False
        self.funds_transferred = False
        self.title_transferred = False

    def execute_contract(self, funds):
        if funds >= self.sale_price:
            self.funds_transferred = True
            print("Funds have been transferred from buyer to seller.")
            self.transfer_title()
        else:
            print("Insufficient funds to execute the contract.")

    def transfer_title(self):
        if self.funds_transferred:
            self.title_transferred = True
            print(f"Property title '{self.property_title}' has been transferred from {self.seller} to {self.buyer}.")
            self.contract_executed = True

# 示例使用
seller = 'Alice'
buyer = 'Bob'
property_title = '123 Blockchain Blvd'
sale_price = 100000

# 创建智能合约实例
contract = SmartContract(seller, buyer, property_title, sale_price)

# 执行合约(模拟买家支付)
contract.execute_contract(funds=100000)

# 检查合约状态
if contract.contract_executed:
    print("Contract successfully executed.")
else:
    print("Contract execution failed.")

在这个简化的例子中,SmartContract类代表了房地产交易中的智能合约。它接收卖家和买家的信息、物业名称、以及销售价格作为初始化参数。execute_contract方法模拟了交易执行过程,其中买家需要提供足够的资金来购买房产。如果条件得到满足(即资金充足),资金将被视为已转移,并且物业所有权将自动转给买家,模拟了智能合约自动执行合同条款的能力。

虽然这个例子相对简单,但它揭示了智能合约如何自动化和简化房地产交易过程的潜力。在实际应用中,智能合约将包含更多的逻辑来处理各种交易条件,如贷款批准、检查报告的满意度,以及其他法律和监管要求,进一步减少人为错误,提高效率。

通过这些案例,我们可以看到区块链技术的潜力及其在各个行业中的实际应用。从供应链管理到数字身份验证,再到房地产交易,区块链正在逐步改变我们的世界。而作为开发者,掌握如何使用诸如Python之类的工具来实现这些解决方案,将使你处于这场技术革命的前沿。

1.2 主流公链介绍

当我们谈论区块链时,我们通常指的是一系列通过加密安全地连接在一起的区块。这些区块链可以是公共的、私有的或是联盟的,但今天,我们的焦点是那些任何人都可以访问和验证的主流公链。

1.2.1 公链的核心概念

公链(Public Blockchain)是最原始的区块链概念形态,它是完全去中心化的,没有任何一个实体对网络有完全的控制。最著名的公链包括比特币(Bitcoin)、以太坊(Ethereum)、和莱特币(Litecoin)等。

  • 比特币(Bitcoin):作为第一个区块链实现和最著名的加密货币,比特币专注于提供一个去中心化的支付系统和一个价值存储手段。
  • 以太坊(Ethereum):以太坊引入了智能合约的概念,这是一种在满足特定条件时自动执行的代码,极大地扩展了区块链的应用场景。
  • 莱特币(Litecoin):常被视为比特币的“轻量版”,它在一些关键技术细节上做了调整,以实现更快的交易确认时间。

1.2.2 重点案例:以太坊上的去中心化金融(DeFi)

去中心化金融(DeFi)是近年来区块链最热门的应用之一,它利用智能合约在没有中央金融机构如银行或清算所的情况下提供金融服务。以太坊因其灵活的智能合约而成为DeFi项目的首选平台。

Python 操作案例

虽然创建一个完整的DeFi平台超出了一个简单示例的范围,我们可以展示如何使用Python与以太坊智能合约交互。以下示例使用了Web3.py库,这是一个允许与以太坊节点交互的Python库。

首先,确保安装Web3.py:

pip install web3

然后,我们可以编写代码来查询以太坊上的一个DeFi智能合约的余额:

from web3 import Web3

# 连接到以太坊节点
w3 = Web3(Web3.HTTPProvider('https://mainnet.infura.io/v3/YOUR_INFURA_PROJECT_ID'))

# DeFi智能合约地址(例如,Uniswap V2的一个合约地址)
contract_address = "0x..."
# 智能合约的ABI
contract_abi = [...]

# 创建合约对象
contract = w3.eth.contract(address=contract_address, abi=contract_abi)

# 假设我们想查询合约中的某个函数,比如获取流动性池的信息
liquidity_pool_info = contract.functions.getLiquidityPoolInfo().call()

print(liquidity_pool_info)

1.2.3 拓展案例 1:比特币支付集成

在电子商务和在线交易中,比特币支付提供了一种安全、去中心化的支付方式。对于开发者来说,集成比特币支付不仅可以拓宽支付渠道,还能吸引对加密货币感兴趣的用户群体。下面,我们将通过一个简化的Python示例,展示如何在应用中集成比特币支付。

首先,你需要安装bitcoinlib库,这个库提供了管理比特币钱包、生成地址、构建和发送交易等功能。

pip install bitcoinlib

接下来,我们将创建一个简单的脚本,该脚本生成一个新的比特币地址,用于接收用户的支付。

from bitcoinlib.wallets import Wallet

# 尝试打开已存在的钱包,如果不存在则创建一个新的钱包
wallet_name = 'MyBitcoinWallet'
try:
    wallet = Wallet(wallet_name)
except Exception as e:
    wallet = Wallet.create(wallet_name)

# 生成一个新的比特币接收地址
new_address = wallet.new_key().address

print(f"请向此地址发送比特币支付: {new_address}")

该示例生成了一个新的比特币地址,并打印出来供用户发送比特币到这个地址。在实际应用中,你可以将这个地址展示给用户,作为支付的一部分。

为了处理接收到的支付,你需要监控该地址上的交易。下面的代码示例展示了如何检查地址上的余额,以确认支付是否成功。

# 检查钱包地址的余额
balance = wallet.get_balance()

print(f"当前余额: {balance} Satoshi")

这个简单的检查余额脚本可以定期运行,或者根据你的需求进行调整,以监控比特币地址上的支付情况。

高级集成

在更复杂的应用场景中,你可能需要监听区块链上的特定事件,比如确认交易已经被矿工确认了特定数量的次数(通常为6次确认被认为是安全的)。这涉及到与比特币网络的更深层次交互,可能需要使用更高级的工具和库,比如bitcoinrpc或直接与比特币全节点交互。

此外,为了提升用户体验,开发者还可以实现更多高级功能,如估算交易费用、选择合适的费用策略以加快交易确认速度等。

通过集成比特币支付,开发者不仅能提供一个去中心化、安全的支付选项,还能探索数字货币带来的新商业模式和机会。这个案例仅仅是开始,真正的潜力和应用场景远远超出了这里的讨论。

1.2.4 拓展案例 2:莱特币轻量级交易

由于目前没有一个直接与莱特币交互的Python库像bitcoinlib那样广泛认知和使用,我们可以考虑使用一种通用方法来与莱特币及其他加密货币进行交互:通过RPC接口。大多数加密货币,包括莱特币,都提供了一个JSON-RPC接口,允许开发者执行诸如查询余额、创建地址、发送交易等操作。

为了使用RPC接口,你首先需要运行一个莱特币节点,并在莱特币的配置文件中启用RPC服务。这通常涉及到设置litecoin.conf文件,添加如下配置:

rpcuser=username
rpcpassword=password
rpcallowip=127.0.0.1
rpcport=9332

一旦你的节点配置并运行起来,你就可以使用Python的requests库来调用RPC接口了。

安装依赖

确保你已经安装了requests库。

pip install requests
Python 示例:创建莱特币地址和发送交易

以下是一个使用Python通过莱特币的RPC接口创建新地址和发送莱特币的简化示例。

import requests
import json

rpc_user = 'username'
rpc_password = 'password'

# RPC接口的URL
url = "http://127.0.0.1:9332/"

headers = {'content-type': 'application/json'}

# 创建新地址
payload = json.dumps({"method": "getnewaddress", "params": [], "jsonrpc": "2.0"})
response = requests.post(url, headers=headers, data=payload, auth=(rpc_user, rpc_password))
new_address = response.json()['result']
print(f"新的莱特币地址: {new_address}")

# 发送莱特币
# 注意:实际应用中应该小心处理amount和接收地址,确保它们是正确的
to_address = "接收方的莱特币地址"
amount = 0.01  # 要发送的莱特币数量
payload = json.dumps({"method": "sendtoaddress", "params": [to_address, amount], "jsonrpc": "2.0"})
response = requests.post(url, headers=headers, data=payload, auth=(rpc_user, rpc_password))
txid = response.json()['result']
print(f"交易ID: {txid}")

这个示例展示了如何通过RPC接口与莱特币节点交互,执行一些基本操作。首先,我们创建了一个新的莱特币地址,然后构造了一个简单的交易来发送莱特币到指定的地址。

注意事项
  • 在执行实际的莱特币发送操作之前,你应该确保有足够的余额。
  • 为了安全起见,RPC接口和凭据应该被妥善保护,避免未经授权的访问。
  • 实际部署时,应考虑使用更安全的方法来存储RPC凭据,而不是直接硬编码在脚本中。

通过这个案例,你可以看到,即使没有直接操作莱特币的专用Python库,我们仍然可以通过通用的RPC调用与莱特币(以及其他许多加密货币)节点进行交互,执行各种操作。这种方法提供了极大的灵活性,允许开发者直接利用核心节点的功能。

以上案例展示了使用Python操作不同主流公链的基本方法。它们为开发者提供了一个良好的起点,用于探索和实现更复杂的区块链应用。

1.3 区块链的工作原理

区块链技术是一种革命性的发明,它使得信息的存储和传输变得比以往任何时候都更加安全和透明。本质上,区块链是一个去中心化的数据库,或者说是一个公共账本,它通过网络中的多个节点来存储数据,而不是集中在单一的位置。

1.3.1 区块链的核心组成

  • 区块(Blocks):区块链的基本单位,每个区块包含一定数量的交易数据和两个重要的哈希值 —— 前一个区块的哈希值和当前区块内容的哈希值。
  • 链(Chain):这些区块通过哈希值相连形成一条链。每个区块中包含前一个区块的哈希值,这样就形成了一条链,任何对链中既有区块的修改都会使后续所有区块的哈希值失效,从而保证了区块链的不可篡改性。
  • 共识机制(Consensus Mechanisms):为了添加新区块,网络中的节点必须就其有效性达成一致。这通过各种共识机制实现,最著名的是比特币使用的工作量证明(Proof of Work,PoW)。

1.3.2 重点案例:比特币的 PoW 机制

比特币网络中的PoW机制要求矿工通过解决一个数学难题来证明他们完成了一定量的计算工作,从而获得新区块添加到区块链上的权利。这个过程既是创建新比特币的过程,也是验证和记录交易的过程。

Python 模拟 PoW

虽然真实的比特币PoW算法需要大量的计算资源,但我们可以通过Python简单模拟这个过程。

import hashlib

def proof_of_work(previous_proof):
    proof = previous_proof + 1
    while not (hashlib.sha256(f'{proof}{previous_proof}'.encode()).hexdigest().endswith("0000")):
        proof += 1
    return proof

# 假设前一个区块的proof是100
previous_proof = 100
proof = proof_of_work(previous_proof)
print(f"新的Proof of Work: {proof}")

这个简化的例子演示了PoW的基本思想:找到一个数字(proof),当它与前一个区块的proof一起哈希时,结果以特定的模式结束(例如,这里是以"0000"结尾)。在实际的比特币网络中,这个过程要复杂得多,需要的计算工作也更大。

1.3.3 拓展案例 1:智能合约自动执行

智能合约是存储在区块链上的程序,它在预设条件被满足时自动执行合约条款。这个机制在自动化执行、减少中间人的需要、增加透明度和降低欺诈风险方面具有巨大潜力。以太坊是最著名的支持智能合约的区块链平台之一。

在实际应用中,智能合约可以用于各种场景,如自动支付、投票系统、自动化交易等。以下是一个使用Python与以太坊智能合约交互的实用案例,演示了如何部署一个简单的智能合约,该合约在接收到一定数量的以太币后自动向另一个账户转账。

首先,你需要安装Web3.py库,这是一个允许你与以太坊区块链交互的Python库。

pip install web3

接下来,我们将部署一个简单的智能合约。为了简化,我们假设智能合约已经由Solidity编写并编译成了ABI和字节码。智能合约的功能是:接收一定数量的以太币后,自动将这些以太币转账到预设的地址。

智能合约示例(Solidity)
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

contract AutoTransfer {
    address payable public owner;

    constructor() {
        owner = payable(msg.sender);
    }

    receive() external payable {
        // 当合约接收到以太币时,自动将其转账到owner地址
        owner.transfer(msg.value);
    }
}
使用 Python 部署智能合约
from web3 import Web3

# 连接到以太坊测试网络
w3 = Web3(Web3.HTTPProvider('https://ropsten.infura.io/v3/YOUR_PROJECT_ID'))

# 编译后的合约ABI和字节码
contract_abi = 'YOUR_CONTRACT_ABI'
contract_bytecode = 'YOUR_CONTRACT_BYTECODE'

# 部署合约
AutoTransfer = w3.eth.contract(abi=contract_abi, bytecode=contract_bytecode)
tx_hash = AutoTransfer.constructor().transact({'from': w3.eth.accounts[0], 'gas': 4000000})

# 等待交易确认
tx_receipt = w3.eth.waitForTransactionReceipt(tx_hash)

# 获取部署后的合约地址
contract_address = tx_receipt.contractAddress
print(f'智能合约地址: {contract_address}')

这个Python脚本首先连接到以太坊的Ropsten测试网络,然后部署了我们的AutoTransfer智能合约。请注意,为了成功执行这个脚本,你需要提供你自己的Infura项目ID、合约的ABI、合约的编译后字节码,以及一个有足够测试以太币的账户地址。

总结

通过这个案例,我们展示了如何使用Python与以太坊智能合约进行交互,特别是如何部署一个智能合约到以太坊网络。智能合约的自动执行能力为开发去中心化应用(DApps)提供了强大的工具,能够处理各种逻辑和交易,而无需人工干预。这只是智能合约潜力的一个小小展示,实际应用场景远不止于此。

1.3.4 拓展案例 2:使用 Python 与区块链交互

与区块链进行交互通常涉及到读取区块链数据、发送交易以及与智能合约的交互。在本案例中,我们将使用 Python 和 Web3.py 库来展示如何实现这些基本的区块链交互功能。Web3.py 是一个强大的以太坊区块链交互库,它使得与以太坊网络进行交互变得简单。

安装 Web3.py

首先,确保安装了Web3.py库。

pip install web3
读取区块信息

以下Python代码演示了如何连接到以太坊网络(使用Infura)并读取最新区块的信息。

from web3 import Web3

# 使用Infura的Ropsten测试网络
infura_url = 'https://ropsten.infura.io/v3/YOUR_INFURA_PROJECT_ID'
w3 = Web3(Web3.HTTPProvider(infura_url))

# 确认连接成功
if w3.isConnected():
    print("Connected to Ethereum network")

# 获取最新区块的编号
latest_block_number = w3.eth.block_number
print(f"Latest Block Number: {latest_block_number}")

# 获取最新区块的信息
latest_block = w3.eth.get_block(latest_block_number)
print(f"Latest Block Hash: {latest_block['hash'].hex()}")
发送交易

为了发送交易,你需要有一个以太坊账户和一些以太币。以下代码展示了如何构建和发送一个简单的交易。

# 配置你的以太坊账户地址和私钥
account_address = 'YOUR_ACCOUNT_ADDRESS'
private_key = 'YOUR_PRIVATE_KEY'

# 构建交易
nonce = w3.eth.get_transaction_count(account_address)
transaction = {
    'to': 'RECIPIENT_ADDRESS',  # 接收者的地址
    'value': w3.toWei(0.001, 'ether'),  # 发送的金额
    'gas': 2000000,
    'gasPrice': w3.toWei('50', 'gwei'),
    'nonce': nonce,
    'chainId': 3  # Ropsten的chain ID
}

# 签署交易
signed_txn = w3.eth.account.sign_transaction(transaction, private_key)

# 发送交易
tx_hash = w3.eth.send_raw_transaction(signed_txn.rawTransaction)

# 获取交易哈希值
print(f"Transaction hash: {tx_hash.hex()}")
与智能合约交互

最后,我们将展示如何与一个已部署的智能合约交互。假设我们有一个简单的智能合约,它有一个函数可以返回合约拥有者的地址。

# 智能合约的地址和ABI
contract_address = 'CONTRACT_ADDRESS'
contract_abi = 'CONTRACT_ABI'

# 创建智能合约对象
contract = w3.eth.contract(address=contract_address, abi=contract_abi)

# 调用合约的函数
owner_address = contract.functions.owner().call()
print(f"Contract Owner Address: {owner_address}")

这个简化的示例展示了如何读取区块信息、发送交易以及与智能合约进行交互的基本方法。通过结合这些技巧,你可以开始构建更复杂的以太坊应用,利用区块链的强大功能来创建去中心化的应用(DApps)。在实际应用中,还需要考虑交易的安全性、错误处理和其他高级特性,但这些示例提供了一个良好的起点。

以上案例简单介绍了区块链的工作原理,并通过Python代码示例展示了如何在实际应用中使用这些原理。从比特币的PoW到智能合约的自动执行,再到与区块链网络的直接交互,这些示例提供了实用性强且贴近实际生产的操作案例。

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

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

相关文章

Qt for android : Qt6.6.2 搭建 环境

环境说明 参考Qt助手: Assistant 6.6.2 (MinGW 11.2.0 64-bit) ***Gradle : Gradle wrapper, version 8.3***JDK11 SDK Tools / NDK 25.1.8937393 参考 Qt For Android : Qt5.13.1 Qt for android: Qt6.4搭建环境遇到的几个问题

MySQL数据库基础(五):SQL语言讲解

文章目录 SQL语言讲解 一、SQL概述 二、SQL语句分类 1、DDL 2、DML 3、DQL 4、DCL 三、SQL基本语法 1、SQL语句可以单行或多行书写,以分号结尾 2、可使用空格和缩进来增强语句的可读性 3、MySQL数据库的SQL语句不区分大小写,关键字建议使用大写…

MongoDB从入门到实战之.NET Core使用MongoDB开发ToDoList系统(3)-系统数据集合设计

前言 前几章教程我们把ToDoList系统的基本框架搭建好了,现在我们需要根据我们的需求把ToDoList系统所需要的系统集合(相当于关系型数据库中的数据库表)。接下来我们先简单概述一下这个系统主要需要实现的功能以及实现这些功能我们需要设计那些…

开源PDF工具 Apache PDFBox 认识及使用(知识点+案例)

文章目录 前言源码获取一、认识PDFBox二、导入依赖三、基础功能demo1:读取pdf所有内容demo2:读取所有页内容(分页)demo3:添加页眉、页脚demo4:添加居中45文字水印demo5:添加图片到右上角 参考文…

云计算基础-存储基础

存储概念 什么是存储: 存储就是根据不同的应用程序环境,通过采取合理、安全、有效的方式将数据保存到某些介质上,并能保证有效的访问,存储的本质是记录信息的载体。 存储的特性: 数据临时或长期驻留的物理介质需要保…

【打工日常】使用docker部署可视化工具docker-ui

一、docker-ui介绍 docker-ui是一个易用且轻量化的Docker管理工具,透过Web界面的操作,方便快捷操作docker容器化工作。 docker-ui拥有易操作化化界面,不须记忆docker指令,仅需下载镜像即可立刻加入完成部署。基于docker的特性&…

【c++】vector的增删查改

1.先定义一个类对象vector 为了防止和库里面发生冲突&#xff0c;定义一个命名空间&#xff0c;将类对象放在命名空间 里面 #include<iostream> using namespace std; namespace zjw {class vector {public:private:}; }2.定义变量&#xff0c;需要一个迭代器&#xff…

RK3568平台开发系列讲解(存储篇)文件描述符相关系统调用实现

🚀返回专栏总目录 文章目录 一、open 系统调用二、close 系统调用沉淀、分享、成长,让自己和他人都能有所收获!😄 一、open 系统调用 open()系统调用会分配新的文件句柄(file description),用来维护与打开文件相关的元信息(如偏移量、路径、操作方法等),并会给进程…

云计算基础-计算虚拟化-CPU虚拟化

CPU指令系统 在CPU的工作原理中&#xff0c;CPU有不同的指令集&#xff0c;如下图&#xff0c;CPU有4各指令集&#xff1a;Ring0-3&#xff0c;指令集是在服务器上运行的所有命令&#xff0c;最终都会在CPU上执行&#xff0c;但是CPU并不是说所有的命令都是一视同仁的&#xf…

一文分清OMS、CMS、PMS、TMS、IM、BI、BPMS、SCRM、DSS等B端系统

继5月22日发布一文分清OA、CRM、ERP、MES、HRM、SCM、WMS、KMS等后&#xff0c;很多老铁又给我推荐了其他系统&#xff0c;贝格前端工场这次再撰一文&#xff0c;介绍这些系统。 之前文章&#xff1a; 一文分清OA、CRM、ERP、MES、HRM、SCM、WMS、KMS等 1、OMS系统 OMS系统是…

Apache POI | Java操作Excel文件

目录 1、介绍 2、代码示例 2.1、将数据写入Excel文件 2.2、读取Excel文件中的数据 &#x1f343;作者介绍&#xff1a;双非本科大三网络工程专业在读&#xff0c;阿里云专家博主&#xff0c;专注于Java领域学习&#xff0c;擅长web应用开发、数据结构和算法&#xff0c;初步…

红色警戒 3 修改游戏速度

原文&#xff1a;https://blog.iyatt.com/?p13852 红警 2 是有提供游戏速度修改的&#xff0c;红警 3 没有&#xff0c;而且游戏速度似乎和 FPS 关联的&#xff0c;在配置低一些的电脑上会变慢&#xff0c;FPS 也降低&#xff0c;我电脑上开最高画质 FPS 不超过 30&#xff0c…

Confluence CVE-2023-22527利用工具

介绍 Confluence CVE 2021&#xff0c;2022&#xff0c;2023 利用工具&#xff0c;支持命令执行&#xff0c;哥斯拉&#xff0c;冰蝎 内存马注入 支持 Confluence 版本&#xff1a;CVE-2021-26084&#xff0c;CVE-2022-26134&#xff0c;CVE_2023_22515&#xff0c;CVE-2023-2…

Matplotlib plt.scatter:从入门到精通,只需一篇文章!

Matplotlib plt.scatter&#xff1a;从入门到精通&#xff0c;只需一篇文章&#xff01;&#x1f680; 利用Matplotlib进行数据可视化示例 &#x1f335;文章目录&#x1f335; 一、plt.scatter入门&#xff1a;轻松迈出第一步 &#x1f463;二、进阶探索&#xff1a;plt.scatt…

【研究生复试】计算机软件工程人工智能研究生复试——资料整理(速记版)——数据库

1、JAVA 2、计算机网络 3、计算机体系结构 4、数据库 5、计算机租场原理 6、软件工程 7、大数据 8、英文 自我介绍 4. 数据库 1. B树相对于B树的区别及优势 B树中有重复元素&#xff0c;B树没有重复元素B树种每个节点都存储了key和data&#xff0c;B树内节点去掉了其中指向数…

互联网时代的文学复兴:中文诗词大数据分析 | 开源日报 No.170

chinese-poetry/chinese-poetry Stars: 45.4k License: MIT 最全的中文诗歌古典文集数据库&#xff0c;包含 5.5 万首唐诗、26 万首宋诗、2.1 万首宋词和其他古典文集。数据来源于互联网。该开源项目旨在通过 JSON 格式分发&#xff0c;方便用户开始自己的项目&#xff0c;并借…

嵌入式内核链表list_head,如何管理不同类型节点的实现

在Linux内核中&#xff0c;提供了一个用来创建双向循环链表的结构 list_head。虽然linux内核是用C语言写的&#xff0c;但是list_head的引入&#xff0c;使得内核数据结构也可以拥有面向对象的特性&#xff0c;通过使用操作list_head 的通用接口很容易实现代码的重用&#xff0…

AAAI 2024 | Adobe提出全新上下文提示学习框架CoPL,高效提升下游性能

论文题目&#xff1a;CoPL: Contextual Prompt Learning for Vision-Language Understanding 论文链接&#xff1a;https://arxiv.org/abs/2307.00910 提示学习&#xff08;Prompt Learning&#xff09;在近几年的快速发展&#xff0c;激活了以Transformer为基础的大型语言模型…

【机器学习】数据清洗之识别重复点

&#x1f388;个人主页&#xff1a;甜美的江 &#x1f389;欢迎 &#x1f44d;点赞✍评论⭐收藏 &#x1f917;收录专栏&#xff1a;机器学习 &#x1f91d;希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出指正&#xff0c;让我们共同学习、交流进步…

1、若依(前后端分离)框架的使用

若依&#xff08;前后端分离&#xff09;框架的使用 0、环境1、下载若依(1) 下载并解压(2) 导入SQL语句(3) 配置Redis、MySQL 2、运行若依3、登录(1) 前端(2) 后端 4、获取用户角色、权限和动态路由(1) 获取用户角色、权限(2) 根据用户信息获取动态路由【getRouters】 5、杂6、…