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

在这里插入图片描述

文章目录

  • 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.mfbz.cn/a/389378.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

深入理解lambda表达式

深入理解ASP.NET Core中的中间件和Lambda表达式 var builder WebApplication.CreateBuilder(args); var app builder.Build(); app.Use(async (context, next) > { // Add code before request. await next(context);// Add code after request.}); 这段C#代码是用于设…

杨中科 .netcore 依赖注入

1.概念 概念 生活中的“控制反转”:自己发电和用电网的电。 依赖注入(Dependency Injection,Dl)是控制反转:(Inversion of Control,l0c)思想的实现方式。 依赖注入简化模块的组装过程,降低模块之间的耦合度 自己发电的代码 var connSetti…

Peter算法小课堂—哈希与哈希表

额……字符串我们是第一次学,给大家铺一些基础的不能再基础的基础, 字符串比较大小 字符串大小的比较,不是以字符串的长度直接决定,而是从最左边第一个字符开始比较,大者为大,小者为小,若相等…

HTTP缓存技术

大家好我是苏麟 , 今天说说HTTP缓存技术 . 资料来源 : 小林coding 小林官方网站 : 小林coding (xiaolincoding.com) HTTP缓存技术 HTTP 缓存有哪些实现方式? 对于一些具有重复性的 HTTP 请求,比如每次请求得到的数据都一样的,我们可以把这对「请求-响…

OpenHarmony—UIAbility组件生命周期

概述 当用户打开、切换和返回到对应应用时,应用中的UIAbility实例会在其生命周期的不同状态之间转换。UIAbility类提供了一系列回调,通过这些回调可以知道当前UIAbility实例的某个状态发生改变,会经过UIAbility实例的创建和销毁,…

OS设备管理

设备管理 操作系统作为系统资源的管理者,其提供的功能有:处理机管理、存储器管理、文件管理、设备管理。其中前三个管理都是在计算机的主机内部管理其相对应的硬件。 I/O设备 I/O即输入/输出。I/O设备即可以将数据输入到计算机,或者可以接收…

【华为数通HCIP | 网络工程师】H12-831刷题日记 题目+解析(2)

个人名片: 🐼作者简介:一名大三在校生,喜欢AI编程🎋 🐻‍❄️个人主页🥇:落798. 🐼个人WeChat:hmmwx53 🕊️系列专栏:🖼️…

2007-2021年上市公司内控信息披露指数/上市公司内部控制信息披露指数数据

2007-2021年上市公司内控信息披露指数/上市公司内部控制信息披露指数数据 1、时间:2007-2021年 2、范围:上市公司 3、指标:证券代码、证券简称、辖区、证监会行业、申万行业、内部环境、风险评估、控制活动、信息与沟通、内部监督、内部控…

软考28-上午题-哈希表和堆

一、哈希表 将关键字作为自变量,使用哈希函数H(key),得到该记录的存储地址。 这一映射过程,称为哈希造表、散列;所得的存储位置 哈希地址、散列地址。 1-1、冲突的定义 两个关键字K1和K2,K1 ! K2,&…

行测线上考试答案查找?推荐你使用这七个公众号和工具 #学习方法#经验分享

合理利用学习辅助工具和资料,可以帮助大学生更好地组织学习内容、掌握知识点和提升学术水平。 1.快解题 这是一个网站 是一款服务于职业考证的考试搜题软件,拥有几千万不同考试医学考试题库和执业医师试题库,通过章节练习,模拟试题,历年真题等练习来让不同的用户…

BLDC驱动刹车电路、能量泄放电路

不同STM32的性能; APM2.8飞控整合资料: APM2.8飞控说明书 GitBook BLDC的制动首先要考虑MOS的泄放电阻的选择,参考前面博客。 刹车电阻制动: 如图所示就是一种通过功率电阻耗散电机制动过程中产生电能的电路。因为功率电阻在这个电路中起…

开什么店最稳定轻松?适合一个人开的实体店推荐

在创业的道路上,很多人都希望找到一种稳定轻松的开店方式。 作为一名资深的鲜奶吧创业者,我将分享我的经验和见解,希望能给那些想开实体店的朋友们一些启示!! 我开鲜奶吧已经有 5 年时间了,目前经营的是鲜…

Leetcode-103. 二叉树的锯齿形层序遍历

这个年和树过不去啦啦啦! 题目: 给你二叉树的根节点 root ,返回其节点值的 锯齿形层序遍历 。(即先从左往右,再从右往左进行下一层遍历,以此类推,层与层之间交替进行)。 示例 1&…

C#入门及进阶|数组和集合(六):集合概述

1.集合概述 数组是一组具有相同名称和类型的变量集合,但是数组初始化后就不便于再改变其大小,不能实现在程序中动态添加和删除数组元素,使数组的使用具有很多局限性。集合能解决数组存在的这个问题,下面我们来学习介绍集合…

TCP_IP(6)

网络层 在复杂的网络环境中确定一个合适的路径. IP协议 与TCP协议并列,都是网络体系中最核心的协议. 基本概念 主机:配有IP地址,但是不进行路由控制的设备; 路由器:即配有IP地址,又能进行路由控制; 节点:主机和路由器的统称; 协议头格式 4位版本号(version):指定IP协议的版…

红队笔记Day2 -->上线不出网机器

今天就来讲一下在企业攻防中如何上线不出网的机器!! 1.基本网络拓扑 基本的网络拓扑就是这样 以下是对应得的P信息,其中的52网段充当一个内网的网段,而111充当公网网段 先ping一下,确保外网ping不通内网,内…

threejs之使用shader实现雷达扫描

varying vec2 vUv; uniform vec3 uColor; uniform float uTime;mat2 rotate2d(float _angle){return mat2(cos(_angle),-sin(_angle),sin(_angle),cos(_angle)); }void main(){vec2 newUv rotate2d(uTime*6.18)*(vUv-0.5);float angle atan(newUv.x,newUv.y);// 根据uv坐标获…

C语言学习day15:数组定义的格式

数组的写法格式有很多种 int arr1[6] { 1,2,3,4,5,6 }; int arr[] { 1,2,3,4,5,6 }; int arr[10] { 1,2,3,4,5 }; int arr[10]; arr[0] 1; 这些都有差别 代码: int main() {//int arr1[6] { 1,2,3,4,5,6 };//int arr[] { 1,2,3,4,5,6 };//int arr[10]…

【计算机网络】物理层|传输介质|物理层设备|宽带接入技术

目录 一、思维导图 二、传输介质 1.传输介质——导引型 2.传输介质——非导引型​编辑 三、物理层设备 1.物理层设备:中继器&集线器 2.宽带接入技术(有线) ​编辑 四、趁热打铁☞习题训练 五、物理层总思维导图 推荐 前些天发现…

如何利用SpringSecurity进行认证与授权

目录 一、SpringSecurity简介 1.1 入门Demo 二、认证 ​编辑 2.1 SpringSecurity完整流程 2.2 认证流程详解 2.3 自定义认证实现 2.3.1 数据库校验用户 2.3.2 密码加密存储 2.3.3 登录接口实现 2.3.4 认证过滤器 2.3.5 退出登录 三、授权 3.1 权限系统作用 3.2 授…
最新文章