目录

Python实例题

题目

问题描述

解题思路

关键代码框架

难点分析

扩展方向

Python实例题

题目

基于区块链的去中心化应用平台(区块链、智能合约)

问题描述

开发一个基于区块链的去中心化应用平台,包含以下功能:

  • 区块链基础:实现区块链的数据结构和基本操作
  • 共识机制:实现工作量证明 (PoW) 或权益证明 (PoS) 共识
  • 智能合约:设计并实现简单的智能合约语言和执行环境
  • 去中心化应用:构建基于智能合约的去中心化应用
  • 网络通信:实现节点间的 P2P 通信协议

解题思路

  • 设计区块链的数据结构和区块格式
  • 实现共识算法保证区块链的一致性和安全性
  • 开发智能合约虚拟机和编程语言
  • 设计 P2P 网络协议实现节点间的通信和同步
  • 构建用户界面和 API 供开发者使用

关键代码框架

# 区块链基础实现
import hashlib
import json
import time
from typing import List, Dict, Any, Optional
import requestsclass Block:def __init__(self, index: int, transactions: List[Dict[str, Any]], timestamp: float, previous_hash: str, nonce: int = 0):"""初始化区块参数:index: 区块索引transactions: 交易列表timestamp: 时间戳previous_hash: 前一个区块的哈希值nonce: 用于工作量证明的随机数"""self.index = indexself.transactions = transactionsself.timestamp = timestampself.previous_hash = previous_hashself.nonce = nonceself.hash = self.calculate_hash()def calculate_hash(self) -> str:"""计算区块的哈希值"""block_string = json.dumps({"index": self.index,"transactions": self.transactions,"timestamp": self.timestamp,"previous_hash": self.previous_hash,"nonce": self.nonce}, sort_keys=True).encode()return hashlib.sha256(block_string).hexdigest()def to_dict(self) -> Dict[str, Any]:"""将区块转换为字典形式"""return {"index": self.index,"transactions": self.transactions,"timestamp": self.timestamp,"previous_hash": self.previous_hash,"nonce": self.nonce,"hash": self.hash}class Blockchain:def __init__(self):"""初始化区块链"""self.chain: List[Block] = []self.pending_transactions: List[Dict[str, Any]] = []self.nodes: set = set()# 创建创世区块self.create_genesis_block()def create_genesis_block(self) -> Block:"""创建创世区块"""genesis_block = Block(0, [], time.time(), "0")self.chain.append(genesis_block)return genesis_blockdef get_latest_block(self) -> Block:"""获取最新区块"""return self.chain[-1]def proof_of_work(self, block: Block) -> int:"""工作量证明算法参数:block: 需要进行工作量证明的区块返回:有效的nonce值"""difficulty = 4  # 难度级别,前导0的数量prefix = "0" * difficultyblock.nonce = 0computed_hash = block.calculate_hash()while not computed_hash.startswith(prefix):block.nonce += 1computed_hash = block.calculate_hash()return block.noncedef is_chain_valid(self, chain: List[Block]) -> bool:"""验证区块链的有效性参数:chain: 需要验证的区块链返回:区块链是否有效"""previous_block = chain[0]current_index = 1while current_index < len(chain):block = chain[current_index]# 验证哈希值if block.hash != block.calculate_hash():return False# 验证前一个区块的哈希值if block.previous_hash != previous_block.hash:return False# 验证工作量证明difficulty = 4prefix = "0" * difficultyif not block.hash.startswith(prefix):return Falseprevious_block = blockcurrent_index += 1return Truedef add_block(self, block: Block, proof: int) -> bool:"""添加新区块到区块链参数:block: 要添加的区块proof: 工作量证明的结果返回:是否成功添加区块"""previous_hash = self.get_latest_block().hash# 验证前一个区块的哈希值if previous_hash != block.previous_hash:return False# 验证工作量证明difficulty = 4prefix = "0" * difficultyif not block.hash.startswith(prefix) or block.hash != block.calculate_hash():return Falseself.chain.append(block)return Truedef add_transaction(self, sender: str, recipient: str, amount: float, contract_code: Optional[str] = None) -> int:"""添加新交易到待处理交易池参数:sender: 发送方地址recipient: 接收方地址amount: 交易金额contract_code: 智能合约代码(如果是合约部署交易)返回:交易将被包含的区块索引"""self.pending_transactions.append({"sender": sender,"recipient": recipient,"amount": amount,"timestamp": time.time(),"contract_code": contract_code})return self.get_latest_block().index + 1def mine_block(self, miner_address: str) -> Block:"""挖矿创建新区块参数:miner_address: 矿工地址,用于接收挖矿奖励返回:新创建的区块"""# 添加挖矿奖励交易self.add_transaction(sender="0",  # 表示系统奖励recipient=miner_address,amount=10  # 挖矿奖励)# 创建新区块previous_block = self.get_latest_block()new_block = Block(index=previous_block.index + 1,transactions=self.pending_transactions,timestamp=time.time(),previous_hash=previous_block.hash)# 执行工作量证明proof = self.proof_of_work(new_block)# 添加新区块到区块链if self.add_block(new_block, proof):# 清空待处理交易池self.pending_transactions = []return new_blockelse:return Nonedef register_node(self, address: str) -> None:"""注册新节点参数:address: 节点地址"""self.nodes.add(address)def resolve_conflicts(self) -> bool:"""共识算法:解决冲突,使用最长链规则返回:区块链是否被更新"""neighbours = self.nodesnew_chain = Nonemax_length = len(self.chain)# 获取所有邻居节点的区块链for node in neighbours:try:response = requests.get(f"http://{node}/chain")if response.status_code == 200:length = response.json()["length"]chain = response.json()["chain"]# 验证链的有效性并检查是否更长if length > max_length and self.is_chain_valid([Block(**block_data) for block_data in chain]):max_length = lengthnew_chain = chainexcept requests.exceptions.RequestException:continue# 如果找到更长的有效链,则替换当前链if new_chain:self.chain = [Block(**block_data) for block_data in new_chain]return Truereturn False
# 智能合约实现
class Contract:def __init__(self, code: str, owner: str, contract_id: str):"""初始化智能合约参数:code: 合约代码owner: 合约所有者contract_id: 合约ID"""self.code = codeself.owner = ownerself.contract_id = contract_idself.state = {}  # 合约状态self.balance = 0  # 合约余额def execute(self, function_name: str, params: Dict[str, Any], caller: str) -> Dict[str, Any]:"""执行智能合约函数参数:function_name: 函数名params: 函数参数caller: 调用者地址返回:执行结果"""# 简单的合约执行环境# 实际应用中需要更复杂的虚拟机和安全机制try:# 这里简化处理,实际应执行合约代码if function_name == "get_balance":return {"success": True, "result": self.balance}elif function_name == "transfer":amount = params.get("amount", 0)recipient = params.get("recipient", "")if amount <= 0 or not recipient:return {"success": False, "error": "Invalid parameters"}if amount > self.balance:return {"success": False, "error": "Insufficient balance"}self.balance -= amount# 这里应该触发一个交易到接收方return {"success": True, "message": f"Transferred {amount} to {recipient}"}elif function_name == "deploy":# 部署新合约的逻辑passelse:return {"success": False, "error": f"Function {function_name} not found"}except Exception as e:return {"success": False, "error": str(e)}class ContractManager:def __init__(self, blockchain: Blockchain):"""初始化智能合约管理器参数:blockchain: 关联的区块链"""self.blockchain = blockchainself.contracts: Dict[str, Contract] = {}def deploy_contract(self, code: str, owner: str) -> str:"""部署新智能合约参数:code: 合约代码owner: 合约所有者返回:合约ID"""# 生成合约IDcontract_id = hashlib.sha256(f"{code}{owner}{time.time()}".encode()).hexdigest()[:16]# 创建合约实例contract = Contract(code, owner, contract_id)# 添加到合约管理器self.contracts[contract_id] = contract# 添加部署交易到区块链self.blockchain.add_transaction(sender=owner,recipient="0",  # 表示系统合约amount=0,contract_code=code)return contract_iddef execute_contract(self, contract_id: str, function_name: str, params: Dict[str, Any], caller: str) -> Dict[str, Any]:"""执行智能合约函数参数:contract_id: 合约IDfunction_name: 函数名params: 函数参数caller: 调用者地址返回:执行结果"""if contract_id not in self.contracts:return {"success": False, "error": f"Contract {contract_id} not found"}contract = self.contracts[contract_id]# 添加交易到区块链tx_index = self.blockchain.add_transaction(sender=caller,recipient=contract_id,amount=0,  # 无代币转移,只是调用合约contract_code=None)# 执行合约函数result = contract.execute(function_name, params, caller)# 如果执行成功,记录到区块链if result["success"]:# 这里可以添加更多的执行结果记录passreturn result
# P2P网络节点
import socket
import threading
import jsonclass P2PNode:def __init__(self, host: str, port: int, blockchain: Blockchain):"""初始化P2P网络节点参数:host: 主机地址port: 端口号blockchain: 关联的区块链"""self.host = hostself.port = portself.blockchain = blockchainself.peers = set()  # 存储连接的对等节点self.server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)self.server.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)self.server.bind((self.host, self.port))self.server.listen(10)self.running = False# 注册自身节点到区块链self.blockchain.register_node(f"{self.host}:{self.port}")def start(self) -> None:"""启动节点"""self.running = Trueprint(f"Node listening on {self.host}:{self.port}")# 启动接收线程receive_thread = threading.Thread(target=self._receive_connections)receive_thread.daemon = Truereceive_thread.start()def stop(self) -> None:"""停止节点"""self.running = Falseself.server.close()def connect_to_peer(self, peer_address: str) -> None:"""连接到其他对等节点参数:peer_address: 对等节点地址"""if peer_address == f"{self.host}:{self.port}":returnif peer_address not in self.peers:try:peer_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)host, port = peer_address.split(':')peer_socket.connect((host, int(port)))# 发送握手消息self._send_message(peer_socket, {"type": "handshake","data": {"address": f"{self.host}:{self.port}","chain_length": len(self.blockchain.chain)}})# 添加到对等节点列表self.peers.add(peer_address)# 注册到区块链self.blockchain.register_node(peer_address)# 启动消息处理线程thread = threading.Thread(target=self._handle_peer, args=(peer_socket,))thread.daemon = Truethread.start()print(f"Connected to peer: {peer_address}")except Exception as e:print(f"Failed to connect to peer {peer_address}: {e}")def broadcast(self, message: Dict[str, Any]) -> None:"""广播消息到所有连接的对等节点参数:message: 要广播的消息"""for peer in list(self.peers):try:host, port = peer.split(':')peer_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)peer_socket.connect((host, int(port)))self._send_message(peer_socket, message)peer_socket.close()except Exception as e:print(f"Failed to send message to peer {peer}: {e}")self.peers.discard(peer)def _receive_connections(self) -> None:"""接收新的连接"""while self.running:try:client_socket, client_address = self.server.accept()print(f"New connection from {client_address}")# 启动消息处理线程thread = threading.Thread(target=self._handle_peer, args=(client_socket,))thread.daemon = Truethread.start()except Exception as e:if self.running:print(f"Error receiving connection: {e}")def _handle_peer(self, peer_socket: socket.socket) -> None:"""处理来自对等节点的消息参数:peer_socket: 对等节点的套接字"""while self.running:try:message = self._receive_message(peer_socket)if not message:breakself._process_message(message, peer_socket)except Exception as e:print(f"Error handling peer: {e}")break# 关闭连接peer_socket.close()def _send_message(self, socket: socket.socket, message: Dict[str, Any]) -> None:"""发送消息到指定套接字参数:socket: 目标套接字message: 要发送的消息"""socket.send(json.dumps(message).encode() + b'\n')def _receive_message(self, socket: socket.socket) -> Dict[str, Any]:"""从指定套接字接收消息参数:socket: 源套接字返回:接收到的消息"""data = b''while True:chunk = socket.recv(1024)if not chunk:return Nonedata += chunkif b'\n' in data:messages = data.split(b'\n')for msg in messages[:-1]:try:return json.loads(msg.decode())except json.JSONDecodeError:continuedata = messages[-1]def _process_message(self, message: Dict[str, Any], peer_socket: socket.socket) -> None:"""处理接收到的消息参数:message: 接收到的消息peer_socket: 发送消息的套接字"""message_type = message.get("type")data = message.get("data")if message_type == "handshake":# 处理握手消息peer_address = data.get("address")peer_chain_length = data.get("chain_length")if peer_address and peer_address != f"{self.host}:{self.port}":self.peers.add(peer_address)self.blockchain.register_node(peer_address)# 检查谁的链更长,决定是否需要同步if peer_chain_length > len(self.blockchain.chain):# 请求对方的完整区块链self._send_message(peer_socket, {"type": "request_chain","data": {}})elif message_type == "new_block":# 处理新区块通知block_data = data.get("block")if block_data:new_block = Block(index=block_data["index"],transactions=block_data["transactions"],timestamp=block_data["timestamp"],previous_hash=block_data["previous_hash"],nonce=block_data["nonce"])new_block.hash = block_data["hash"]# 添加新区块self.blockchain.add_block(new_block, new_block.nonce)# 广播新区块给其他节点self.broadcast({"type": "new_block","data": {"block": new_block.to_dict()}})elif message_type == "new_transaction":# 处理新交易通知transaction = data.get("transaction")if transaction:self.blockchain.add_transaction(sender=transaction["sender"],recipient=transaction["recipient"],amount=transaction["amount"],contract_code=transaction.get("contract_code"))# 广播新交易给其他节点self.broadcast({"type": "new_transaction","data": {"transaction": transaction}})elif message_type == "request_chain":# 处理区块链请求self._send_message(peer_socket, {"type": "chain_response","data": {"chain": [block.to_dict() for block in self.blockchain.chain],"length": len(self.blockchain.chain)}})elif message_type == "chain_response":# 处理区块链响应chain_data = data.get("chain")chain_length = data.get("length")if chain_length > len(self.blockchain.chain):# 验证并替换当前链new_chain = [Block(**block_data) for block_data in chain_data]if self.blockchain.is_chain_valid(new_chain):self.blockchain.chain = new_chainprint("Blockchain updated from peer")
# 去中心化应用示例
class DApp:def __init__(self, node: P2PNode, contract_manager: ContractManager, wallet_address: str):"""初始化去中心化应用参数:node: P2P网络节点contract_manager: 智能合约管理器wallet_address: 钱包地址"""self.node = nodeself.contract_manager = contract_managerself.wallet_address = wallet_addressdef deploy_token_contract(self, name: str, symbol: str, total_supply: int) -> str:"""部署代币合约参数:name: 代币名称symbol: 代币符号total_supply: 总供应量返回:合约ID"""# 代币合约代码contract_code = f"""// 简单的ERC20风格代币合约contract {name} {{string public name = "{name}";string public symbol = "{symbol}";uint256 public totalSupply = {total_supply};mapping(address => uint256) public balanceOf;constructor() {{balanceOf[msg.sender] = totalSupply;}}function transfer(address to, uint256 value) public returns (bool) {{require(balanceOf[msg.sender] >= value, "Insufficient balance");balanceOf[msg.sender] -= value;balanceOf[to] += value;return true;}}function balanceOf(address account) public view returns (uint256) {{return balanceOf[account];}}}}"""# 部署合约contract_id = self.contract_manager.deploy_contract(contract_code, self.wallet_address)print(f"代币合约已部署,合约ID: {contract_id}")return contract_iddef transfer_tokens(self, contract_id: str, recipient: str, amount: int) -> Dict[str, Any]:"""转移代币参数:contract_id: 合约IDrecipient: 接收方地址amount: 转移数量返回:交易结果"""# 执行合约函数result = self.contract_manager.execute_contract(contract_id=contract_id,function_name="transfer",params={"to": recipient, "value": amount},caller=self.wallet_address)return resultdef get_balance(self, contract_id: str, address: str) -> int:"""获取代币余额参数:contract_id: 合约IDaddress: 查询地址返回:余额"""# 执行合约函数result = self.contract_manager.execute_contract(contract_id=contract_id,function_name="balanceOf",params={"account": address},caller=self.wallet_address)if result["success"]:return result["result"]else:return 0# 主程序示例
def main():# 创建区块链blockchain = Blockchain()# 创建智能合约管理器contract_manager = ContractManager(blockchain)# 创建P2P节点node = P2PNode(host="localhost", port=5000, blockchain=blockchain)node.start()# 连接到其他节点(如果有)# node.connect_to_peer("localhost:5001")# 创建钱包地址wallet1 = hashlib.sha256("user1".encode()).hexdigest()wallet2 = hashlib.sha256("user2".encode()).hexdigest()# 创建去中心化应用dapp = DApp(node, contract_manager, wallet1)# 部署代币合约token_contract_id = dapp.deploy_token_contract("MyToken", "MTK", 1000000)# 挖矿以确认合约部署print("Mining to confirm contract deployment...")block = blockchain.mine_block(wallet1)print(f"Block mined: {block.index}")# 转移代币print(f"Transferring tokens from {wallet1} to {wallet2}")result = dapp.transfer_tokens(token_contract_id, wallet2, 1000)print(f"Transfer result: {result}")# 挖矿以确认交易print("Mining to confirm transaction...")block = blockchain.mine_block(wallet1)print(f"Block mined: {block.index}")# 查询余额balance1 = dapp.get_balance(token_contract_id, wallet1)balance2 = dapp.get_balance(token_contract_id, wallet2)print(f"{wallet1} balance: {balance1}")print(f"{wallet2} balance: {balance2}")# 显示区块链信息print(f"Blockchain length: {len(blockchain.chain)}")for block in blockchain.chain:print(f"Block {block.index}: {block.hash[:10]}...")for tx in block.transactions:print(f"  Transaction: {tx['sender'][:10]}... -> {tx['recipient'][:10]}... ({tx['amount']})")# 停止节点node.stop()if __name__ == "__main__":main()

难点分析

  • 共识机制实现:设计和实现安全高效的共识算法
  • 智能合约安全:确保智能合约代码的安全性,防止漏洞
  • 网络同步:在分布式环境中保持区块链的一致性
  • 性能优化:提高区块链的吞吐量和降低延迟
  • 用户体验:简化复杂的区块链概念,提供友好的用户界面

扩展方向

  • 实现更复杂的智能合约功能
  • 添加代币和经济模型
  • 开发分布式应用生态系统
  • 研究隐私保护技术
  • 探索与其他区块链的互操作性

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

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

相关文章

接口请求重复触发问题的排查流程:iOS抓包实战中的工具协作

有时候&#xff0c;Bug 并不体现在程序错误上&#xff0c;而是行为偏差。在一次常规功能测试中&#xff0c;我们发现移动端某个提交请求被触发了两次&#xff0c;虽然后端做了幂等处理&#xff0c;但频繁请求仍可能带来性能问题、错误日志膨胀、以及潜在副作用。 这类问题常被…

oracle 表空间与实例妙用,解决业务存储与权限处理难题

oracle 表空间与实例妙用&#xff0c;解决业务存储与权限处理难题 一、方案背景 在同一个研发数仓中&#xff0c;现使用 Oracle 数据库存储生产和质量的数据。为了满足业务发展需求&#xff0c;需要新增财务数据的存储&#xff0c;同时确保不影响现有的生产和质量数据。本方案…

迅为RK3576开发板NPU环境搭建和使用rknn-toolkit2功能演示模型转换

开发板采用核心板底板结构&#xff0c;在我们的资料里提供了底板的原理图工程以及PCB工程&#xff0c;可以实现真正意义上的裁剪、定制属于自己的产品&#xff0c;满足更多应用场合。 迅为针对RK3576开发板整理出了相应的开发流程以及开发中需要用到的资料&#xff0c;并进行详…

如何在 Python 中连接 Elasticsearch 并使用 Qwen3 来实现 RAG

今天的这篇文章是 “在本地电脑中部署阿里 Qwen3 大模型及连接到 Elasticsearch” 的续篇。我们接着上次的文章&#xff0c;继续探索如何使用 Qwen3 来实现 RAG。在本练习中&#xff0c;我们使用 Elastic Stack 9.0.1 版本。 创建 Elasticsearch API key 我们按照如下的步骤来…

Domain 层完全指南(面向 iOS 开发者)

目录 为什么需要 Domain 层清晰的三层架构核心概念&#xff1a;Entity / Value Object / Use Case / RepositorySwift 代码实战测试策略在旧项目中落地的步骤结语 1 为什么需要 Domain 层 在传统 MVC / MVVM 中&#xff0c;我们往往把业务规则写进 ViewController 或 ViewMod…

华为OD机试_2025 B卷_矩形相交的面积(Python,100分)(附详细解题思路)

题目描述 给出3组点坐标(x, y, w, h)&#xff0c;-1000<x,y<1000&#xff0c;w,h为正整数。 (x, y, w, h)表示平面直角坐标系中的一个矩形&#xff1a; x, y为矩形左上角坐标点&#xff0c;w, h向右w&#xff0c;向下h。 (x, y, w, h)表示x轴(x, xw)和y轴(y, y-h)围成…

17、Rocket MQ快速实战以及核⼼概念详解

⼀ 、MQ简介 MQ&#xff1a;MessageQueue&#xff0c;消息队列。是在互联⽹中使⽤⾮常⼴泛的—系列服务中间件。 这个词可以分两个部分来看&#xff0c; —是Message&#xff1a;消息。消息是在不同进程之间传递的数据。这些进程可以部署在同—台机器上&#xff0c;也可以 分…

设计模式之手写策略模式实现动态支付(Java实现)

首先&#xff0c;定义一个接口类 import java.util.Map;public interface PayInterface {/*** 支付方法* param amount 支付金额* param paymentInfo 支付信息&#xff08;如卡号、密码等&#xff09;* return 支付结果*/boolean pay(double amount, Map<String, String>…

Spring Boot 虚拟线程 vs WebFlux:谁更胜一筹?

Spring Boot 作为构建现代 Java 应用程序的强大框架,为开发者提供了多种处理并发和可扩展性的解决方案。其中最受关注的两种方案是 Spring Boot 虚拟线程(Java 21 引入)和 Spring Boot WebFlux(基于响应式编程)。虽然两者都致力于优化资源利用率和提升高并发处理能力,但在…

淘宝商品搜索接口|关键字获取商品列表API接入指南

在电商领域&#xff0c;淘宝作为中国最大的电子商务平台之一&#xff0c;拥有海量的商品资源。对于开发者而言&#xff0c;通过淘宝开放平台提供的 API 接口&#xff0c;能够实现与淘宝平台的深度整合&#xff0c;其中关键字搜索商品 API 接口尤为重要。它允许开发者根据特定的…

Centos 离线部署(MQTT)EMOX脚本并设置开机自启

文件结构 install_emqx.sh #!/bin/bash # Filename: install_emqx.sh # Description: EMQX离线一键部署脚本 (针对特殊目录结构)# 检查root权限 if [[ $EUID -ne 0 ]]; thenecho "请使用root权限运行此脚本&#xff01;" exit 1 fi# 定义依赖包和安装路径 DEP_RPM&…

机器学习基础:从概念到应用的全面解析

&#x1f9d1; 博主简介&#xff1a;CSDN博客专家、CSDN平台优质创作者&#xff0c;高级开发工程师&#xff0c;数学专业&#xff0c;10年以上C/C, C#, Java等多种编程语言开发经验&#xff0c;拥有高级工程师证书&#xff1b;擅长C/C、C#等开发语言&#xff0c;熟悉Java常用开…

【机器学习1】线性回归与逻辑回归

‌逻辑回归与线性回归的主要区别在于理论基础、应用场景和数学模型。 1 线性回归 1.1 理论基础 线性回归主要用于建模自变量与连续性因变量之间关系的统计方法&#xff0c;试图利用一条线来拟合自变量与因变量之间的线性关系。 1.2 应用场景 从应用场景来说&#xff0c;适…

小程序 顶部栏标题栏 下拉滚动 渐显白色背景

![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/3164fd0e6d6848efaa1e87e02c35179e.png 下拉 100px 后 变成渐变成白色 显示原理 <wd-navbar fixed safeAreaInsetTop :bordered"false":custom-style"background-color: rgba(255, 255, 255, op…

Java底层原理:深入理解类加载机制与反射

一、Java类加载机制 Java类加载机制是Java运行时环境的重要组成部分&#xff0c;它负责将字节码文件加载到JVM内存中&#xff0c;并将其转换为可执行的类。类加载机制的实现涉及类加载器&#xff08;ClassLoader&#xff09;、类加载过程和类加载器的层次结构。 &#xff08;…

Android 中查看数据库内容方式

一、背景 创建的db数据库&#xff0c;有时候需要查看数据库中的数据内容,或者查看数据是否有更新到数据等等。这时候就需要查看数据库的内容。 二、数据库路径 博主用的是第三方的greendao数据库框架,生成的.db文件路径如下:(路径仅供参考) /data/data/app_package/database…

unity实现浮动组件

目录 前言方法后言组件代码 前言 在unity中&#xff0c;要让一个物体变得让人感到轻飘飘的&#xff0c;就可以给一个物体添加上浮动组件。今天我们就来实现它。 方法 我们先来看一下 sin ⁡ \sin sin函数的曲线。 在这条曲线上&#xff0c;随着 x x x向右移动&#xff0c; y…

Cisco Nexus93240接口带宽显示异常高故障- bug

hardware: cisco N93240 software: 9.3(10) 1个万兆接口&#xff0c;显示的rate超出几万倍 开case查询&#xff0c;告知是bug&#xff0c;需要版本升级解决。

pyhton基础【15】函数进阶一

目录 一. 函数进阶 1. 默认参数&#xff1a; 2. 关键字参数&#xff1a; 3. 可变参数&#xff1a; 4. 装饰器&#xff1a; 5. 匿名函数lambda&#xff1a; 6. 高阶函数&#xff1a; 7. 递归函数&#xff1a; 8. 类型注解&#xff1a; 二.函数参数的高级使用 缺…

【软考高级系统架构论文】论企业应用系统的数据持久层架构设计

论文真题 数据持久层 (Data Persistence Layer) 通常位于企业应用系统的业务逻辑层和数据源层之间,为整个项目提供一个高层、统一、安全、并发的数据持久机制,完成对各种数据进行持久化的编程工作,并为系统业务逻辑层提供服务。它能够使程序员避免手工编写访问数据源的方法…