WEB3全栈开发——面试专业技能点P2智能合约开发(Solidity)

news2025/6/12 19:36:47

一、Solidity合约开发

下面是 Solidity 合约开发 的概念、代码示例及讲解,适合用作学习或写简历项目背景说明。


🧠 一、概念简介:Solidity 合约开发

Solidity 是一种专门为 以太坊(Ethereum)平台编写智能合约的高级编程语言,语法类似 JavaScript。
智能合约(Smart Contract)是运行在区块链上的自执行代码,能在没有第三方的情况下自动执行交易、权限控制、逻辑判断等操作。

Solidity 支持继承、库、自定义结构体和映射等复杂数据结构,并提供了事件、修饰器等语言特性,适合构建安全可扩展的去中心化应用(DApp)。


📦 二、简单代码示例:ERC-20代币

下面是一个基本的 ERC-20 Token 合约,用于发行和转账代币:

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

contract MyToken {
    string public name = "MyToken";
    string public symbol = "MTK";
    uint8 public decimals = 18;
    uint256 public totalSupply;

    mapping(address => uint256) public balanceOf;

    event Transfer(address indexed from, address indexed to, uint256 value);

    constructor(uint256 initialSupply) {
        totalSupply = initialSupply * 10 ** uint256(decimals);
        balanceOf[msg.sender] = totalSupply;
    }

    function transfer(address to, uint256 value) public returns (bool success) {
        require(balanceOf[msg.sender] >= value, "Insufficient Balance");
        balanceOf[msg.sender] -= value;
        balanceOf[to] += value;
        emit Transfer(msg.sender, to, value);
        return true;
    }
}

🔍 三、讲解要点

部分说明
pragma solidity ^0.8.0;指定使用的Solidity编译器版本
mapping(address => uint256)记录每个地址的代币余额
constructor 构造函数初始化代币总量并分配给部署者
transfer 函数用户之间转账功能,内含余额检查和事件通知
event Transfer日志事件,可供前端监听链上代币交易


🛠 四、配合工具

  • 开发环境:Hardhat / Foundry / Remix

  • 测试工具:Chai + Mocha + Hardhat Network

  • 部署工具:Hardhat 的 deploy 插件,或脚本调用 ethers.Contract.deploy

  • 链上调用工具:Web3.js / Ethers.js


如你需要我给出更复杂的合约,如 NFT(ERC-721) 或支持 合约升级 / 链上治理 / DAO投票 的合约结构,我也可以继续补充。你也可以告诉我你正在做哪一类 Web3 项目,我给你量身定制代码示例。

二、ERC-20标准

概念介绍

ERC-20 是以太坊上一种最常见的代币标准,全称为 “Ethereum Request for Comments 20”,由 Fabian Vogelsteller 在 2015 年提出。它定义了一组代币应遵守的接口规范,使得不同的代币能被钱包、交易所、DApp 等工具统一识别和交互。

符合 ERC-20 标准的代币就像“以太坊上的货币”,可以用于转账、余额查询、授权第三方操作等基本金融功能。

常见 ERC-20 代币包括:USDT、LINK、UNI、MKR 等。


示例代码:简化的 ERC-20 实现

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

interface IERC20 {
    function totalSupply() external view returns (uint);
    function balanceOf(address account) external view returns (uint);
    function transfer(address to, uint amount) external returns (bool);
    function approve(address spender, uint amount) external returns (bool);
    function allowance(address owner, address spender) external view returns (uint);
    function transferFrom(address from, address to, uint amount) external returns (bool);

    event Transfer(address indexed from, address indexed to, uint value);
    event Approval(address indexed owner, address indexed spender, uint value);
}

contract MyERC20 is IERC20 {
    string public name = "MyToken";
    string public symbol = "MTK";
    uint8 public decimals = 18;
    uint public override totalSupply;

    mapping(address => uint) public override balanceOf;
    mapping(address => mapping(address => uint)) public override allowance;

    constructor(uint _supply) {
        totalSupply = _supply * 10 ** uint(decimals);
        balanceOf[msg.sender] = totalSupply;
        emit Transfer(address(0), msg.sender, totalSupply);
    }

    function transfer(address to, uint amount) public override returns (bool) {
        require(balanceOf[msg.sender] >= amount, "Insufficient balance");
        balanceOf[msg.sender] -= amount;
        balanceOf[to] += amount;
        emit Transfer(msg.sender, to, amount);
        return true;
    }

    function approve(address spender, uint amount) public override returns (bool) {
        allowance[msg.sender][spender] = amount;
        emit Approval(msg.sender, spender, amount);
        return true;
    }

    function transferFrom(address from, address to, uint amount) public override returns (bool) {
        require(balanceOf[from] >= amount, "Insufficient balance");
        require(allowance[from][msg.sender] >= amount, "Insufficient allowance");
        allowance[from][msg.sender] -= amount;
        balanceOf[from] -= amount;
        balanceOf[to] += amount;
        emit Transfer(from, to, amount);
        return true;
    }
}

讲解要点

  • 接口 IERC20:规定了 ERC-20 的核心函数与事件,便于标准化集成。

  • totalSupply():返回代币总供应量。

  • balanceOf(address):查询指定地址余额。

  • transfer(to, amount):从调用者向目标地址转账。

  • approve(spender, amount):授权某地址可以花费自己的代币。

  • transferFrom(from, to, amount):由授权者代表他人转账。

  • allowance(owner, spender):查看授权额度。

为什么重要?

  • 所有主流钱包(如 MetaMask)、交易所(如 Uniswap、Binance)、区块链浏览器(如 Etherscan)都默认支持 ERC-20。

  • 遵循该标准的代币可以在整个以太坊生态中自由流通。

  • 其他合约或 DApp 可直接与该标准代币互操作,不需特殊适配。


如果你需要加入“燃气费优化(gas efficiency)”或“合约安全(如重入攻击防御)”的说明,我也可以继续扩展说明部分。是否还需要接着写 ERC-721 标准?

三、ERC-721标准

概念介绍

ERC-721 是以太坊上用于实现 非同质化代币(NFT) 的标准接口。与 ERC-20 标准代币的“可互换性”不同,ERC-721 强调每个代币的 唯一性与不可替代性,非常适用于收藏品、数字艺术、虚拟地产、游戏道具等领域。

ERC-721 定义了一套智能合约接口,使得支持它的钱包、交易市场(如 OpenSea)、DApp 等可以标准化操作和展示 NFT。

核心特性包括:

  • 每个代币都有唯一 tokenId

  • 支持所有权转移与授权

  • 事件用于追踪链上资产流动

示例代码

下面是一个简化的 ERC-721 合约示例,使用 OpenZeppelin 提供的标准库:

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

import "@openzeppelin/contracts/token/ERC721/ERC721.sol";

contract MyNFT is ERC721 {
    uint public nextTokenId;
    address public admin;

    constructor() ERC721("MyNFT", "MNFT") {
        admin = msg.sender;
    }

    function mint(address to) external {
        require(msg.sender == admin, "only admin can mint");
        _safeMint(to, nextTokenId);
        nextTokenId++;
    }
}

简要说明:

  • 继承了 ERC721 标准实现。

  • 构造函数中设定名称(MyNFT)和代号(MNFT)。

  • mint() 函数通过 _safeMint() 创建新的 NFT,每个 NFT 拥有不同的 tokenId

讲解说明

  • 唯一性(non-fungibility):每个 tokenId 对应唯一资产,无法互换。

  • 所有权跟踪ownerOf(tokenId) 用于查询 NFT 当前拥有者。

  • 安全转移safeTransferFrom() 支持合约接收检查,避免资产丢失。

  • 事件机制:如 TransferApproval 支持链上交易透明追踪。

  • 元数据扩展(可选):通过 tokenURI(tokenId) 返回指向图片、视频、3D 模型等的外部资源链接,支持链下展示。

四、ERC-1155标准

概念介绍

ERC-1155 是以太坊提出的一种 多代币标准(Multi-Token Standard),可同时支持 同质化代币(如 ERC-20)非同质化代币(如 ERC-721)。由 Enjin 团队提出,目标是解决 ERC-20 与 ERC-721 不能复用、成本高的问题。

ERC-1155 特点:

  • 一个合约中可管理多个 Token 类型(FT/NFT 混合)。

  • 提供 批量转账 能力,节省 Gas。

  • 所有代币由 id 唯一标识,ID 可以代表某种资产类(如 NFT 系列、游戏货币等)。

  • 事件和操作统一,链上监听更高效。

常用于游戏资产系统、收藏平台等复合资产场景。

示例代码

以下是一个简化的 ERC-1155 智能合约示例,使用 OpenZeppelin 库:

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

import "@openzeppelin/contracts/token/ERC1155/ERC1155.sol";
import "@openzeppelin/contracts/access/Ownable.sol";

contract MyMultiToken is ERC1155, Ownable {
    uint256 public constant GOLD = 1;
    uint256 public constant SWORD = 2;

    constructor() ERC1155("https://api.example.com/metadata/{id}.json") {
        _mint(msg.sender, GOLD, 1000, "");
        _mint(msg.sender, SWORD, 10, "");
    }

    function mint(address to, uint256 id, uint256 amount) external onlyOwner {
        _mint(to, id, amount, "");
    }

    function mintBatch(address to, uint256[] memory ids, uint256[] memory amounts) external onlyOwner {
        _mintBatch(to, ids, amounts, "");
    }
}

示例说明:

  • 合约中定义了两种代币类型:GOLD 为 FT(可替代),SWORD 为 NFT(或半 NFT)。

  • 使用 _mintBatch 支持批量铸造多个不同代币。

  • 元数据 URI 支持 id 替换,可与 OpenSea 等平台集成。

讲解说明

  • id 是唯一标识某种资产的关键,比如 1 表示 GOLD,2 表示 SWORD。

  • _mint()_mintBatch() 用于单个或多个资产铸造。

  • balanceOf(account, id) 查询用户持有的某类代币数量。

  • safeTransferFrom()safeBatchTransferFrom() 实现单个与批量转账。

  • 可通过 IPFS 或中心化服务生成 metadata,匹配不同 id 展示不同 NFT 图像或属性。


ERC-1155 相较 ERC-721 主要优势是节省 Gas、便于大批量 NFT 管理,适合游戏、系列收藏品、门票系统等场景。如果你需要进一步集成 OpenSea 的交易逻辑或使用 URI 扩展,可以继续深入补充。

五、代币发行设计

概念介绍

代币发行(Token Issuance)是通过部署符合 ERC-20 标准的智能合约,在以太坊等链上生成 可替代的代币(Fungible Token)。这种代币常用于代币经济、支付手段、DAO 投票权等场景。

示例代码

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

import "@openzeppelin/contracts/token/ERC20/ERC20.sol";

contract MyToken is ERC20 {
    constructor() ERC20("MyToken", "MTK") {
        _mint(msg.sender, 1000000 * 10 ** decimals());
    }
}

讲解说明

  • 继承自 OpenZeppelin 的 ERC20 实现,构造函数中完成代币初始化。

  • _mint 表示初始铸造 100 万个代币。

  • transferapprovetransferFrom 实现标准转账与授权操作。

六、NFT 铸造与交易(ERC-721)

概念介绍

NFT 铸造(Minting)指将数字资产映射为链上唯一标识(tokenId)并记录在智能合约中,通常基于 ERC-721 标准。交易指 NFT 的所有权转移,可通过链上转账或市场合约(如 OpenSea)完成。

示例代码

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

import "@openzeppelin/contracts/token/ERC721/extensions/ERC721URIStorage.sol";

contract MyNFT is ERC721URIStorage {
    uint public tokenCounter;

    constructor() ERC721("MyNFT", "MNFT") {}

    function mintNFT(address to, string memory tokenURI) public returns (uint256) {
        uint256 newTokenId = tokenCounter;
        _safeMint(to, newTokenId);
        _setTokenURI(newTokenId, tokenURI);
        tokenCounter++;
        return newTokenId;
    }
}

讲解说明

  • 使用 ERC721URIStorage 便于设置每个 NFT 的元数据。

  • mintNFT 实现用户 NFT 铸造逻辑,支持传入链下元数据 URI。

  • 用户可使用 safeTransferFrom() 将 NFT 转让给他人。

七、合约交互接口设计(Web3.js / Ethers.js)

概念介绍

DApp 中的合约交互接口是前端调用区块链智能合约的桥梁,通常使用 Web3.jsEthers.js 进行合约函数调用、事件监听、签名交易等。合约 ABI(Application Binary Interface)是交互的核心数据结构。

示例代码(Ethers.js)

import { ethers } from "ethers";
import MyTokenABI from "./MyTokenABI.json";

const provider = new ethers.providers.Web3Provider(window.ethereum);
const signer = provider.getSigner();
const myToken = new ethers.Contract("0xYourContractAddress", MyTokenABI, signer);

// 查询余额
const balance = await myToken.balanceOf(await signer.getAddress());

// 转账
await myToken.transfer("0xRecipientAddress", ethers.utils.parseUnits("10", 18));

讲解说明

  • 使用 ethers.Contract 实例化合约对象,提供合约地址、ABI、签名者。

  • balanceOftransfer 对应合约中暴露的公共方法。

  • 所有交易可通过 signer.sendTransaction 发送,需用户钱包签名。


如果你还需要讲解 IPFS 存储、链上链下结合、MetaMask 钱包连接等 DApp 集成知识点,我也可以继续补充。

八、Hardhat

概念介绍

Hardhat 是一个以太坊智能合约开发环境和任务运行器,它允许开发者在本地编写、编译、测试、部署 Solidity 合约。它内置了本地链 Hardhat Network,并支持插件系统、脚本自动化以及调试工具。

常用于 DApp 开发生命周期中的:

  • 合约编写与编译(支持多个 Solidity 版本)

  • 测试自动化(使用 Mocha/Chai)

  • 部署脚本(脚本式与插件式)

  • 调试支持(console.log 调试 Solidity)

  • 与 MetaMask、前端集成


示例代码

1. 初始化项目

npm init -y
npm install --save-dev hardhat
npx hardhat

选择“创建一个基本项目”后,会生成目录结构:

contracts/       # Solidity 合约文件
scripts/         # 部署脚本
test/            # 测试脚本
hardhat.config.js

2. 编写合约(contracts/MyToken.sol)

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;

contract MyToken {
    string public name = "MyToken";
    uint256 public totalSupply = 1000;

    function mint(uint256 amount) public {
        totalSupply += amount;
    }
}

3. 编写测试(test/MyToken.js)

const { expect } = require("chai");

describe("MyToken", function () {
  it("Should deploy and return name and totalSupply", async function () {
    const Token = await ethers.getContractFactory("MyToken");
    const token = await Token.deploy();
    await token.deployed();

    expect(await token.name()).to.equal("MyToken");
    expect(await token.totalSupply()).to.equal(1000);
  });

  it("Should mint tokens", async function () {
    const Token = await ethers.getContractFactory("MyToken");
    const token = await Token.deploy();
    await token.deployed();

    await token.mint(100);
    expect(await token.totalSupply()).to.equal(1100);
  });
});

运行测试:

npx hardhat test

4. 编写部署脚本(scripts/deploy.js)

const hre = require("hardhat");

async function main() {
  const Token = await hre.ethers.getContractFactory("MyToken");
  const token = await Token.deploy();
  await token.deployed();
  console.log(`MyToken deployed to: ${token.address}`);
}

main().catch((error) => {
  console.error(error);
  process.exitCode = 1;
});

5. 运行部署脚本

npx hardhat run scripts/deploy.js --network localhost

启动本地节点:

npx hardhat node

讲解说明

  • 本地链模拟: npx hardhat node 启动的链自动预设 20 个测试账户和私钥,适合配合 MetaMask。

  • 测试支持: Mocha + Chai 提供结构化测试断言,ethers.js 与合约交互。

  • 部署灵活: 可通过 .js/.ts 脚本完成自定义部署流程,或使用 hardhat-deploy 插件进行分阶段部署。

  • 调试能力强: 支持 Solidity 中使用 console.log(仅在本地链中生效),便于开发调试。


总结

Hardhat 提供了一整套适合 Web3 初学者到资深开发者的完整工具链,简化了智能合约的开发、测试与部署流程,是目前应用最广泛的以太坊开发环境之一。

是否需要我帮你整理成简历技术描述形式?或者生成 Hardhat+Next.js 的全栈示例?

九、Foundry

概念介绍

Foundry 是一个基于 Rust 的以太坊智能合约开发工具链,集成了编译、测试、部署、调试和脚本执行等功能。它以速度快、轻量、功能丰富著称,是 Solidity 开发者的现代化开发利器。

Foundry 的核心组件包括:

  • forge:合约的编译、测试和部署工具

  • cast:与区块链交互的命令行工具

  • anvil:本地以太坊测试节点,类似 Hardhat Network 或 Ganache

Foundry 支持快速编译,内置高效的测试框架,支持 Solidity 和 Forge 脚本,方便本地链开发调试和主网部署。


示例代码

1. 安装 Foundry

curl -L https://foundry.paradigm.xyz | bash
foundryup

安装完成后,执行以下初始化项目:

forge init MyProject
cd MyProject

2. 编写合约(src/MyToken.sol)

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;

contract MyToken {
    string public name = "MyToken";
    uint256 public totalSupply = 1000;

    function mint(uint256 amount) public {
        totalSupply += amount;
    }
}

3. 编写测试(test/MyToken.t.sol)

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;

import "forge-std/Test.sol";
import "../src/MyToken.sol";

contract MyTokenTest is Test {
    MyToken token;

    function setUp() public {
        token = new MyToken();
    }

    function testInitialSupply() public {
        assertEq(token.totalSupply(), 1000);
        assertEq(token.name(), "MyToken");
    }

    function testMint() public {
        token.mint(500);
        assertEq(token.totalSupply(), 1500);
    }
}

4. 运行测试

forge test

运行结果将显示测试用例是否通过,速度非常快。


5. 启动本地节点(可选)

anvil

anvil 会启动一个本地以太坊测试节点,内置账户和私钥,方便链上交互测试。


6. 部署脚本示例(scripts/Deploy.s.sol)

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;

import "forge-std/Script.sol";
import "../src/MyToken.sol";

contract DeployScript is Script {
    function run() external {
        vm.startBroadcast();
        MyToken token = new MyToken();
        vm.stopBroadcast();
    }
}

运行部署脚本:

forge script scripts/Deploy.s.sol --broadcast --rpc-url <RPC_URL> --private-key <PRIVATE_KEY>

将合约部署到指定网络。


讲解说明

  • 项目初始化简单forge init 自动搭建项目骨架,集成依赖和配置。

  • 测试基于 Solidity:测试文件也是 Solidity,使用 forge-std 库的断言,写法自然且高效。

  • 本地链支持anvil 提供快速启动的本地链,方便调试合约和脚本。

  • 部署灵活:通过 Solidity 脚本(Script.sol)编写部署逻辑,配合命令行参数指定链上 RPC 和密钥,支持多网络部署。

  • 性能卓越:编译和测试速度快,内存占用小,适合大规模智能合约开发。


总结

Foundry 是现代以太坊开发者的利器,提供了高性能、强测试能力和灵活部署的全流程工具,特别适合对效率和可维护性有高要求的项目团队。

如果需要,我可以帮你把这部分内容整理成简历描述,或提供 Foundry 与 Hardhat 对比分析。


小结:Foundry vs Hardhat

对比点FoundryHardhat
测试语言SolidityJavaScript/TypeScript
执行效率极快(Rust 编写)中等(基于 Node.js)
易用性命令行为主,配置简洁插件生态丰富,图形化更强
CI 集成极佳(速度快、独立于 Node)好,但较重
本地链anvilHardhat Network


如果你希望我为你生成一个 Foundry 的 DApp 项目模板,或搭配 MetaMask 与前端交互示例,也可以继续告诉我!

十、合约漏洞(如重入、越权、溢出)与防护方式

概念介绍

智能合约作为自动执行的代码,一旦部署到区块链上,便不可更改,且涉及资产安全,因此合约漏洞可能导致资产被盗或合约异常。以下是几种常见漏洞及其危害:

  • 重入攻击(Reentrancy)
    攻击者利用合约调用外部合约时未正确更新状态,反复调用目标函数,导致资金被多次提取。

  • 越权访问(Authorization)
    非法用户绕过权限控制,执行合约中只有授权用户才能执行的操作,导致数据篡改或资产转移。

  • 整数溢出/下溢(Overflow/Underflow)
    Solidity 中数值计算超出数据类型最大或最小值,导致数值回绕,可能引发逻辑错误和资产损失。


代码示例

1. 重入攻击示例(不安全)

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

contract Vulnerable {
    mapping(address => uint) public balances;

    function deposit() external payable {
        balances[msg.sender] += msg.value;
    }

    function withdraw(uint _amount) external {
        require(balances[msg.sender] >= _amount, "Insufficient balance");
        (bool success, ) = msg.sender.call{value: _amount}("");
        require(success, "Transfer failed");
        balances[msg.sender] -= _amount;  // 状态更新在后,导致重入漏洞
    }
}

防护方式:使用“检查-效果-交互”模式,状态先更新,再调用外部合约

function withdraw(uint _amount) external {
    require(balances[msg.sender] >= _amount, "Insufficient balance");
    balances[msg.sender] -= _amount;  // 先更新状态
    (bool success, ) = msg.sender.call{value: _amount}("");
    require(success, "Transfer failed");
}

或者使用 ReentrancyGuard 修饰器(OpenZeppelin)

import "@openzeppelin/contracts/security/ReentrancyGuard.sol";

contract SafeContract is ReentrancyGuard {
    mapping(address => uint) public balances;

    function withdraw(uint _amount) external nonReentrant {
        require(balances[msg.sender] >= _amount, "Insufficient balance");
        balances[msg.sender] -= _amount;
        (bool success, ) = msg.sender.call{value: _amount}("");
        require(success, "Transfer failed");
    }
}

2. 越权访问漏洞示例

contract VulnerableAuth {
    address public owner;

    function setOwner(address _owner) external {
        owner = _owner; // 缺少权限校验,任意人可修改
    }
}

防护方式:加入访问控制修饰器

contract SafeAuth {
    address public owner;

    constructor() {
        owner = msg.sender;
    }

    modifier onlyOwner() {
        require(msg.sender == owner, "Not owner");
        _;
    }

    function setOwner(address _owner) external onlyOwner {
        owner = _owner;
    }
}

3. 整数溢出示例(Solidity 0.7 及以下版本)

contract Overflow {
    uint8 public count = 255;

    function increment() public {
        count += 1; // 溢出后回绕为0
    }
}
 

防护方式

  • Solidity 0.8 版本内置溢出检查,溢出会自动抛异常。

  • 旧版本使用 SafeMath 库。

import "@openzeppelin/contracts/utils/math/SafeMath.sol";

contract SafeOverflow {
    using SafeMath for uint8;
    uint8 public count = 255;

    function increment() public {
        count = count.add(1);  // 溢出会报错
    }
}

讲解说明

  1. 重入攻击 是历史上最著名的智能合约漏洞之一(DAO 事件),其核心在于合约调用外部地址时未及时更新状态,攻击者可借机多次调用提现函数。防御要点是先更新状态,后调用外部合约,或者使用重入锁(ReentrancyGuard)进行保护。

  2. 越权访问 是因权限控制缺失或错误实现导致的。常用防护是设置合约所有者(owner)并使用访问修饰器限制敏感操作。

  3. 整数溢出/下溢 在早期 Solidity 版本非常普遍,可能导致逻辑出错或资产异常。Solidity 0.8+ 版本默认检查溢出异常,建议使用该版本。旧版本使用第三方库 SafeMath 辅助。

掌握这些漏洞及防护措施,是智能合约安全开发的基础,有助于保障链上资产安全和业务逻辑正确。

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

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

相关文章

BCS 2025|百度副总裁陈洋:智能体在安全领域的应用实践

6月5日&#xff0c;2025全球数字经济大会数字安全主论坛暨北京网络安全大会在国家会议中心隆重开幕。百度副总裁陈洋受邀出席&#xff0c;并作《智能体在安全领域的应用实践》主题演讲&#xff0c;分享了在智能体在安全领域的突破性实践。他指出&#xff0c;百度通过将安全能力…

Ascend NPU上适配Step-Audio模型

1 概述 1.1 简述 Step-Audio 是业界首个集语音理解与生成控制一体化的产品级开源实时语音对话系统&#xff0c;支持多语言对话&#xff08;如 中文&#xff0c;英文&#xff0c;日语&#xff09;&#xff0c;语音情感&#xff08;如 开心&#xff0c;悲伤&#xff09;&#x…

【Java_EE】Spring MVC

目录 Spring Web MVC ​编辑注解 RestController RequestMapping RequestParam RequestParam RequestBody PathVariable RequestPart 参数传递 注意事项 ​编辑参数重命名 RequestParam ​编辑​编辑传递集合 RequestParam 传递JSON数据 ​编辑RequestBody ​…

ardupilot 开发环境eclipse 中import 缺少C++

目录 文章目录 目录摘要1.修复过程摘要 本节主要解决ardupilot 开发环境eclipse 中import 缺少C++,无法导入ardupilot代码,会引起查看不方便的问题。如下图所示 1.修复过程 0.安装ubuntu 软件中自带的eclipse 1.打开eclipse—Help—install new software 2.在 Work with中…

12.找到字符串中所有字母异位词

&#x1f9e0; 题目解析 题目描述&#xff1a; 给定两个字符串 s 和 p&#xff0c;找出 s 中所有 p 的字母异位词的起始索引。 返回的答案以数组形式表示。 字母异位词定义&#xff1a; 若两个字符串包含的字符种类和出现次数完全相同&#xff0c;顺序无所谓&#xff0c;则互为…

MySQL 8.0 OCP 英文题库解析(十三)

Oracle 为庆祝 MySQL 30 周年&#xff0c;截止到 2025.07.31 之前。所有人均可以免费考取原价245美元的MySQL OCP 认证。 从今天开始&#xff0c;将英文题库免费公布出来&#xff0c;并进行解析&#xff0c;帮助大家在一个月之内轻松通过OCP认证。 本期公布试题111~120 试题1…

C++ 求圆面积的程序(Program to find area of a circle)

给定半径r&#xff0c;求圆的面积。圆的面积应精确到小数点后5位。 例子&#xff1a; 输入&#xff1a;r 5 输出&#xff1a;78.53982 解释&#xff1a;由于面积 PI * r * r 3.14159265358979323846 * 5 * 5 78.53982&#xff0c;因为我们只保留小数点后 5 位数字。 输…

涂鸦T5AI手搓语音、emoji、otto机器人从入门到实战

“&#x1f916;手搓TuyaAI语音指令 &#x1f60d;秒变表情包大师&#xff0c;让萌系Otto机器人&#x1f525;玩出智能新花样&#xff01;开整&#xff01;” &#x1f916; Otto机器人 → 直接点明主体 手搓TuyaAI语音 → 强调 自主编程/自定义 语音控制&#xff08;TuyaAI…

《基于Apache Flink的流处理》笔记

思维导图 1-3 章 4-7章 8-11 章 参考资料 源码&#xff1a; https://github.com/streaming-with-flink 博客 https://flink.apache.org/bloghttps://www.ververica.com/blog 聚会及会议 https://flink-forward.orghttps://www.meetup.com/topics/apache-flink https://n…

EtherNet/IP转DeviceNet协议网关详解

一&#xff0c;设备主要功能 疆鸿智能JH-DVN-EIP本产品是自主研发的一款EtherNet/IP从站功能的通讯网关。该产品主要功能是连接DeviceNet总线和EtherNet/IP网络&#xff0c;本网关连接到EtherNet/IP总线中做为从站使用&#xff0c;连接到DeviceNet总线中做为从站使用。 在自动…

零基础设计模式——行为型模式 - 责任链模式

第四部分&#xff1a;行为型模式 - 责任链模式 (Chain of Responsibility Pattern) 欢迎来到行为型模式的学习&#xff01;行为型模式关注对象之间的职责分配、算法封装和对象间的交互。我们将学习的第一个行为型模式是责任链模式。 核心思想&#xff1a;使多个对象都有机会处…

NFT模式:数字资产确权与链游经济系统构建

NFT模式&#xff1a;数字资产确权与链游经济系统构建 ——从技术架构到可持续生态的范式革命 一、确权技术革新&#xff1a;构建可信数字资产基石 1. 区块链底层架构的进化 跨链互操作协议&#xff1a;基于LayerZero协议实现以太坊、Solana等公链资产互通&#xff0c;通过零知…

前端开发面试题总结-JavaScript篇(一)

文章目录 JavaScript高频问答一、作用域与闭包1.什么是闭包&#xff08;Closure&#xff09;&#xff1f;闭包有什么应用场景和潜在问题&#xff1f;2.解释 JavaScript 的作用域链&#xff08;Scope Chain&#xff09; 二、原型与继承3.原型链是什么&#xff1f;如何实现继承&a…

CMake 从 GitHub 下载第三方库并使用

有时我们希望直接使用 GitHub 上的开源库,而不想手动下载、编译和安装。 可以利用 CMake 提供的 FetchContent 模块来实现自动下载、构建和链接第三方库。 FetchContent 命令官方文档✅ 示例代码 我们将以 fmt 这个流行的格式化库为例,演示如何: 使用 FetchContent 从 GitH…

微信小程序云开发平台MySQL的连接方式

注&#xff1a;微信小程序云开发平台指的是腾讯云开发 先给结论&#xff1a;微信小程序云开发平台的MySQL&#xff0c;无法通过获取数据库连接信息的方式进行连接&#xff0c;连接只能通过云开发的SDK连接&#xff0c;具体要参考官方文档&#xff1a; 为什么&#xff1f; 因为…

NLP学习路线图(二十三):长短期记忆网络(LSTM)

在自然语言处理(NLP)领域,我们时刻面临着处理序列数据的核心挑战。无论是理解句子的结构、分析文本的情感,还是实现语言的翻译,都需要模型能够捕捉词语之间依时序产生的复杂依赖关系。传统的神经网络结构在处理这种序列依赖时显得力不从心,而循环神经网络(RNN) 曾被视为…

【OSG学习笔记】Day 16: 骨骼动画与蒙皮(osgAnimation)

骨骼动画基础 骨骼动画是 3D 计算机图形中常用的技术&#xff0c;它通过以下两个主要组件实现角色动画。 骨骼系统 (Skeleton)&#xff1a;由层级结构的骨头组成&#xff0c;类似于人体骨骼蒙皮 (Mesh Skinning)&#xff1a;将模型网格顶点绑定到骨骼上&#xff0c;使骨骼移动…

自然语言处理——Transformer

自然语言处理——Transformer 自注意力机制多头注意力机制Transformer 虽然循环神经网络可以对具有序列特性的数据非常有效&#xff0c;它能挖掘数据中的时序信息以及语义信息&#xff0c;但是它有一个很大的缺陷——很难并行化。 我们可以考虑用CNN来替代RNN&#xff0c;但是…

让AI看见世界:MCP协议与服务器的工作原理

让AI看见世界&#xff1a;MCP协议与服务器的工作原理 MCP&#xff08;Model Context Protocol&#xff09;是一种创新的通信协议&#xff0c;旨在让大型语言模型能够安全、高效地与外部资源进行交互。在AI技术快速发展的今天&#xff0c;MCP正成为连接AI与现实世界的重要桥梁。…

c#开发AI模型对话

AI模型 前面已经介绍了一般AI模型本地部署&#xff0c;直接调用现成的模型数据。这里主要讲述讲接口集成到我们自己的程序中使用方式。 微软提供了ML.NET来开发和使用AI模型&#xff0c;但是目前国内可能使用不多&#xff0c;至少实践例子很少看见。开发训练模型就不介绍了&am…