当前位置: 首页 > article >正文

WEB3全栈开发——面试专业技能点P4数据库

一、mysql2 原生驱动及其连接机制

概念介绍

mysql2 是 Node.js 环境中广泛使用的 MySQL 客户端库,基于 mysql 库改进而来,具有更好的性能、Promise 支持、流式查询、二进制数据处理能力等。

主要特点:

  • 支持 Promise / async-await(对现代项目更友好)

  • 提供 Prepared Statement(预处理语句)支持,防止 SQL 注入

  • 支持 连接池(Pool)机制,提升并发性能和复用率

  • 兼容 ORM 工具(如 Sequelize)也可用于原生 SQL 操作


代码示例

1. 基础连接

import mysql from 'mysql2';// 创建连接
const connection = mysql.createConnection({host: 'localhost',user: 'root',password: 'your_password',database: 'your_database',
});// 执行查询
connection.query('SELECT * FROM users', (err, results) => {if (err) throw err;console.log(results);
});// 关闭连接
connection.end();

2. 使用 Promise 封装(推荐)

import mysql from 'mysql2/promise';async function main() {const connection = await mysql.createConnection({host: 'localhost',user: 'root',password: 'your_password',database: 'your_database',});const [rows] = await connection.execute('SELECT * FROM users WHERE id = ?', [1]);console.log(rows);await connection.end();
}main();

3. 创建连接池

import mysql from 'mysql2/promise';const pool = mysql.createPool({host: 'localhost',user: 'root',password: 'your_password',database: 'your_database',waitForConnections: true,connectionLimit: 10,queueLimit: 0,
});export default pool;

使用:

const [rows] = await pool.execute('SELECT * FROM users');

讲解说明

  1. 连接方式:
    mysql2 支持传统回调和 Promise 接口,推荐使用 mysql2/promise 提供的 createConnection()createPool(),便于与 async/await 编程风格融合。

  2. 连接机制:

    • 单次连接:适合执行短暂任务,连接后立即关闭

    • 连接池(Pool):创建若干可复用连接,自动分配,提高系统性能和稳定性,避免频繁创建/销毁连接的开销

  3. 连接复用:
    连接池通过 connectionLimit 限制并发数,通过复用连接提升吞吐效率,是 Web3 + API 项目中常用的 MySQL 接入方式。

  4. 与 Web3 应用结合:
    在 Web3 项目中,常使用 mysql2 存储链下数据(如用户账户信息、链上事件索引、NFT 交易记录等),与合约数据联动提供更完整的数据视图。

二、Sequelize ORM 工具的使用

概念介绍

Sequelize 是一个基于 Promise 的 Node.js ORM 框架,支持多种 SQL 数据库(如 MySQL、PostgreSQL、SQLite、MariaDB 等)。它可以帮助开发者使用 JavaScript/TypeScript 以对象的方式操作数据库,减少手写 SQL 的负担,同时提升项目可维护性和安全性。

主要特性:

  • 支持模型定义、关联(关系建模)、事务、原始查询等

  • 支持数据迁移与同步(schema migration/sync)

  • 支持 TypeScript 的类型定义

  • 常用于链下数据库建模(如用户、合约事件、NFT 记录)


示例代码(基于 TypeScript + MySQL)

1. 安装依赖

npm install sequelize mysql2

2. 初始化 Sequelize 实例

// db.ts
import { Sequelize } from 'sequelize';const sequelize = new Sequelize('your_database', 'root', 'password', {host: 'localhost',dialect: 'mysql',
});export default sequelize;

3. 定义模型(Model)

// models/User.ts
import { DataTypes, Model } from 'sequelize';
import sequelize from '../db';class User extends Model {public id!: number;public username!: string;public ethAddress!: string;
}User.init({id: {type: DataTypes.INTEGER.UNSIGNED,autoIncrement: true,primaryKey: true,},username: {type: DataTypes.STRING,allowNull: false,},ethAddress: {type: DataTypes.STRING,allowNull: false,unique: true,},},{tableName: 'users',sequelize,}
);export default User;

4. 使用模型进行操作

// index.ts
import sequelize from './db';
import User from './models/User';async function main() {await sequelize.sync(); // 创建表结构(如不存在)const user = await User.create({username: 'alice',ethAddress: '0xAbC123...',});const found = await User.findOne({ where: { ethAddress: '0xAbC123...' } });console.log(found?.username);
}main();

讲解说明

  1. ORM 编程模型:
    Sequelize 把表结构映射为类(Model),通过 createfindOneupdate 等方法操作数据库,无需手写 SQL。

  2. 数据迁移与模型同步:
    sequelize.sync() 会根据模型定义自动创建或修改表结构,也可以用 CLI 工具进行版本控制的数据库迁移。

  3. 与 Web3 项目的结合:

    • 可用于存储 钱包地址、链上事件记录、NFT mint 记录、元数据等

    • 可结合 Web3.js / Ethers.js,作为链上与链下的桥梁

  4. 优势:

    • 减少重复代码

    • 避免 SQL 注入(通过绑定参数)

    • 统一数据结构与类型定义

三、TypeORM 工具的使用

概念介绍

TypeORM 是一款支持 TypeScript 的现代化 ORM 框架,适用于 Node.js 应用程序。它支持多种数据库(如 MySQL、PostgreSQL、SQLite、MongoDB 等),提供实体(Entity)映射、关系关联、迁移工具、查询构建器等功能。

在 Web3 全栈开发中,TypeORM 常用于 DApp 后端中存储链下数据,如用户钱包信息、合约事件索引、NFT 元数据等,是构建结构化链下存储的理想选择,尤其适合与 NestJS 框架集成。


示例代码(基于 NestJS + MySQL)

安装依赖
npm install @nestjs/typeorm typeorm mysql2
配置数据库模块
// app.module.ts
import { Module } from '@nestjs/common';
import { TypeOrmModule } from '@nestjs/typeorm';
import { User } from './user.entity';@Module({imports: [TypeOrmModule.forRoot({type: 'mysql',host: 'localhost',port: 3306,username: 'root',password: 'password',database: 'web3_db',entities: [User],synchronize: true, // 自动同步实体到表结构(开发用)}),TypeOrmModule.forFeature([User]),],
})
export class AppModule {}
定义实体(Entity)
// user.entity.ts
import { Entity, Column, PrimaryGeneratedColumn } from 'typeorm';@Entity()
export class User {@PrimaryGeneratedColumn()id: number;@Column()username: string;@Column({ unique: true })wallet: string;
}
使用服务进行数据库操作
// user.service.ts
import { Injectable } from '@nestjs/common';
import { InjectRepository } from '@nestjs/typeorm';
import { Repository } from 'typeorm';
import { User } from './user.entity';@Injectable()
export class UserService {constructor(@InjectRepository(User)private userRepo: Repository<User>,) {}async createUser(username: string, wallet: string) {const user = this.userRepo.create({ username, wallet });return await this.userRepo.save(user);}async findByWallet(wallet: string) {return await this.userRepo.findOneBy({ wallet });}
}

讲解说明

  • Entity 映射:将数据库表映射为 TypeScript 类,字段即为列,支持数据类型、主键、索引等定义。

  • Repository 模式:封装所有数据库操作,提供 .find().save().update() 等方法,便于解耦业务逻辑。

  • NestJS 集成:TypeORM 是 NestJS 默认推荐的 ORM,支持依赖注入和模块化设计,非常适合构建后端微服务。

四、MongoDB 的聚合管道

概念介绍

MongoDB 的 聚合管道(Aggregation Pipeline) 是一种功能强大的数据处理框架,用于对 MongoDB 集合中的文档进行批量处理、转换、统计和过滤。它通过一系列的阶段(stage),像流水线一样一步步处理数据,常用于实现复杂查询、报表生成、数据分析等场景。

在 Web3 应用中,聚合管道常用于处理链上事件落库后的分析查询,例如统计某个用户的 NFT 持有数、代币交易次数等。


示例代码

以下使用 Node.js 的官方 MongoDB 驱动实现聚合查询。

安装依赖

npm install mongodb

示例场景:统计每个用户持有的 NFT 数量

假设我们有如下 MongoDB 集合结构:

// collection: nfts
{"_id": ObjectId("..."),"owner": "0x1234...abcd","tokenId": 1,"collection": "CryptoCats"
}

使用聚合管道查询

// aggregate-example.ts
import { MongoClient } from 'mongodb';async function run() {const client = new MongoClient('mongodb://localhost:27017');await client.connect();const db = client.db('web3app');const nfts = db.collection('nfts');const result = await nfts.aggregate([{$group: {_id: '$owner',nftCount: { $sum: 1 }}},{$sort: { nftCount: -1 }}]).toArray();console.log(result);await client.close();
}run();

常见聚合管道阶段

阶段名作用说明
$match条件过滤(类似 SQL 的 WHERE)
$group分组聚合(类似 SQL 的 GROUP BY)
$sort排序(类似 SQL 的 ORDER BY)
$project投影(控制输出字段)
$lookup联表(类似 SQL 的 JOIN)
$limit限制返回条数
$skip跳过指定数量文档


讲解说明

  • 聚合管道支持多个阶段组合执行,适用于处理复杂业务逻辑。

  • 聚合性能远高于应用层处理,适合大数据量链上数据的离线处理与前端展示。

  • 可以嵌套 $lookup 实现链上数据与用户表等链下数据的联合展示。

五、MongoDB 的文档建模

概念介绍

MongoDB 是一种基于文档的 NoSQL 数据库,其核心是以 BSON 格式存储文档(类似 JSON)。文档建模(Schema Design) 指的是设计和组织数据库中数据结构的过程,以满足应用性能和业务需求。

MongoDB 的文档建模与传统关系型数据库的表结构设计不同,主要特点有:

  • 灵活的结构:文档可以包含嵌套文档和数组,方便表示复杂关系。

  • 数据去范式化:为了查询效率,常常将相关数据合并存储在同一文档内,减少关联查询。

  • 基于业务访问模式设计:设计模型时优先考虑应用的查询和更新场景,优化性能和扩展性。

文档建模常见设计策略:

  • 嵌套(Embedded Documents):将相关数据放在同一文档中,适合一对多、需要一起读取的数据。

  • 引用(References):存储关联文档的 ID,通过程序或 $lookup 进行关联查询,适合数据复用频繁或文档过大时。


示例代码

假设我们设计一个链上 NFT 平台的数据模型,有用户和他们的 NFT 集合。

1. 嵌套文档设计(用户和NFT放在同一文档内)

{"_id": "user_0xabc123","name": "Alice","wallet": "0xabc123...","nfts": [{"tokenId": 1,"collection": "CryptoCats","metadata": {"name": "Cat #1","rarity": "rare"}},{"tokenId": 2,"collection": "CryptoDogs","metadata": {"name": "Dog #2","rarity": "common"}}]
}

优点:读取用户和NFT一次完成,适合NFT数量较少且常一起访问的场景。

缺点:NFT数量爆炸时文档变大,可能超过文档大小限制(16MB)。


2. 引用设计(用户与NFT分开存储,通过ID关联)

用户文档:

{"_id": "user_0xabc123","name": "Alice","wallet": "0xabc123..."
}

NFT文档:

{"_id": "nft_1","ownerId": "user_0xabc123","tokenId": 1,"collection": "CryptoCats","metadata": {"name": "Cat #1","rarity": "rare"}
}

查询时通过 ownerId 字段关联。

优点:数据量大时结构更灵活,支持NFT单独更新。

缺点:读取时需要额外查询或使用 $lookup 关联,性能受访问模式影响。


实践讲解

  • 设计文档模型前,先分析业务场景,确认最常见的查询和写入操作。

  • 若业务对性能要求高且访问模式固定,倾向于嵌套文档,避免多次查询。

  • 若数据复用、增长快或复杂关联多,使用引用关系,配合索引和聚合管道优化查询。

  • 合理设计索引,避免文档过大影响性能。

  • 对于链上事件、日志等海量数据,建议拆分存储,按时间分区。

六、存储链上事件索引

概念介绍

链上事件(On-chain events)是智能合约在区块链上触发的日志,用于记录合约内部状态变化和交互信息。为了方便查询和分析,DApp 通常会将这些事件从区块链节点同步到数据库中,形成“链上事件索引”。

链上事件索引 是指通过监听区块链事件,将事件数据结构化存储在数据库(如 MongoDB、PostgreSQL)中,便于快速检索、统计和跨链查询。它是区块链数据和应用层交互的桥梁,提高了用户体验和数据处理效率。


示例代码

以下示例使用 Node.js 和 ethers.js 监听以太坊智能合约事件,并将事件存储到 MongoDB 中作为链上事件索引。

const { ethers } = require("ethers");
const { MongoClient } = require("mongodb");const provider = new ethers.providers.JsonRpcProvider("https://sepolia.infura.io/v3/YOUR_INFURA_PROJECT_ID");
const contractAddress = "0xYourContractAddress";
const abi = [  // 合约事件 ABI"event Transfer(address indexed from, address indexed to, uint256 value)"
];const client = new MongoClient("mongodb://localhost:27017");
const dbName = "blockchain";
const collectionName = "events";async function main() {await client.connect();console.log("Connected to MongoDB");const db = client.db(dbName);const eventsCollection = db.collection(collectionName);const contract = new ethers.Contract(contractAddress, abi, provider);contract.on("Transfer", async (from, to, value, event) => {console.log(`Transfer event: from=${from}, to=${to}, value=${value.toString()}`);// 存储事件到MongoDBawait eventsCollection.insertOne({txHash: event.transactionHash,blockNumber: event.blockNumber,from,to,value: value.toString(),timestamp: new Date() // 实际应用中可以通过区块时间戳获取更准确时间});});console.log("Listening for Transfer events...");
}main().catch(console.error);

讲解总结

  • 监听链上事件:通过 Web3 库(如 ethers.js 或 web3.js)连接以太坊节点,订阅智能合约事件。

  • 结构化存储:将事件信息包括交易哈希、区块号、事件参数及时间戳存入数据库,形成链上事件索引。

  • 快速查询:索引化存储方便 DApp 后端进行条件过滤、分页查询和统计分析。

  • 提升体验:链上事件索引使前端应用不必直接查询区块链,提升响应速度和用户体验。

  • 扩展性:结合聚合管道或全文检索技术,可支持复杂的数据分析和跨合约关联查询。

该方式是 Web3 应用中常见的数据同步和缓存技术基础。

七、DApp 结构化数据

概念介绍

DApp(去中心化应用)结构化数据是指将区块链上分散、非结构化的原始数据(如交易、事件、合约状态)经过处理、解析和组织后,存储为便于查询、展示和业务逻辑使用的有序数据结构。

结构化数据通常存放在传统数据库(如 MongoDB、PostgreSQL)或专门的数据索引层,用于:

  • 快速响应前端查询请求

  • 实现复杂的业务逻辑和数据分析

  • 支持链上链下数据结合的功能,如账户资产展示、NFT 元数据管理、交易历史统计等

通过结构化,DApp 能有效提升性能和用户体验,避免频繁访问区块链节点的高延迟。


示例代码

以下示例展示如何将链上 NFT 交易事件结构化存储,便于前端展示用户 NFT 资产。

const { ethers } = require("ethers");
const { MongoClient } = require("mongodb");const provider = new ethers.providers.JsonRpcProvider("https://sepolia.infura.io/v3/YOUR_INFURA_PROJECT_ID");
const contractAddress = "0xYourNFTContractAddress";
const abi = ["event Transfer(address indexed from, address indexed to, uint256 indexed tokenId)"
];const client = new MongoClient("mongodb://localhost:27017");
const dbName = "dapp";
const collectionName = "nft_ownership";async function main() {await client.connect();console.log("Connected to MongoDB");const db = client.db(dbName);const nftCollection = db.collection(collectionName);const contract = new ethers.Contract(contractAddress, abi, provider);contract.on("Transfer", async (from, to, tokenId, event) => {console.log(`NFT Transfer: from=${from}, to=${to}, tokenId=${tokenId.toString()}`);// 结构化更新持有者信息// 先移除 tokenId 旧持有者记录if (from !== ethers.constants.AddressZero) {await nftCollection.updateOne({ owner: from },{ $pull: { tokenIds: tokenId.toString() } });}// 添加 tokenId 到新持有者if (to !== ethers.constants.AddressZero) {await nftCollection.updateOne({ owner: to },{ $addToSet: { tokenIds: tokenId.toString() } },{ upsert: true });}});console.log("Listening for NFT Transfer events...");
}main().catch(console.error);

讲解总结

  • 监听事件:通过监听智能合约的 NFT Transfer 事件,获取资产所有权变更。

  • 结构化数据存储:将用户地址和对应持有的 NFT tokenId 列表存入数据库,方便快速查询用户资产。

  • 去中心化数据与传统数据库结合:链上数据通过事件同步到数据库,实现链上链下数据融合。

  • 支持业务逻辑:结构化数据支持 DApp 的资产展示、交易历史、收藏夹等功能模块。

  • 提升效率和用户体验:避免每次访问都请求区块链节点,减少延迟和资源消耗。

结构化数据设计是开发高性能、用户友好的 DApp 关键环节。

相关文章:

WEB3全栈开发——面试专业技能点P4数据库

一、mysql2 原生驱动及其连接机制 概念介绍 mysql2 是 Node.js 环境中广泛使用的 MySQL 客户端库&#xff0c;基于 mysql 库改进而来&#xff0c;具有更好的性能、Promise 支持、流式查询、二进制数据处理能力等。 主要特点&#xff1a; 支持 Promise / async-await&#xf…...

PH热榜 | 2025-06-08

1. Thiings 标语&#xff1a;一套超过1900个免费AI生成的3D图标集合 介绍&#xff1a;Thiings是一个不断扩展的免费AI生成3D图标库&#xff0c;目前已有超过1900个图标。你可以按照主题浏览&#xff0c;生成自己的图标&#xff0c;或者下载整个图标集。所有图标都可以在个人或…...

C++--string的模拟实现

一,引言 string的模拟实现是只对string对象中给的主要功能经行模拟实现&#xff0c;其目的是加强对string的底层了解&#xff0c;以便于在以后的学习或者工作中更加熟练的使用string。本文中的代码仅供参考并不唯一。 二,默认成员函数 string主要有三个成员变量&#xff0c;…...

JS红宝书笔记 - 3.3 变量

要定义变量&#xff0c;可以使用var操作符&#xff0c;后跟变量名 ES实现变量初始化&#xff0c;因此可以同时定义变量并设置它的值 使用var操作符定义的变量会成为包含它的函数的局部变量。 在函数内定义变量时省略var操作符&#xff0c;可以创建一个全局变量 如果需要定义…...

2025年低延迟业务DDoS防护全攻略:高可用架构与实战方案

一、延迟敏感行业面临的DDoS攻击新挑战 2025年&#xff0c;金融交易、实时竞技游戏、工业物联网等低延迟业务成为DDoS攻击的首要目标。攻击呈现三大特征&#xff1a; AI驱动的自适应攻击&#xff1a;攻击流量模拟真实用户行为&#xff0c;差异率低至0.5%&#xff0c;传统规则引…...

聚六亚甲基单胍盐酸盐市场深度解析:现状、挑战与机遇

根据 QYResearch 发布的市场报告显示&#xff0c;全球市场规模预计在 2031 年达到 9848 万美元&#xff0c;2025 - 2031 年期间年复合增长率&#xff08;CAGR&#xff09;为 3.7%。在竞争格局上&#xff0c;市场集中度较高&#xff0c;2024 年全球前十强厂商占据约 74.0% 的市场…...

【iOS】 Block再学习

iOS Block再学习 文章目录 iOS Block再学习前言Block的三种类型__ NSGlobalBlock____ NSMallocBlock____ NSStackBlock__小结 Block底层分析Block的结构捕获自由变量捕获全局(静态)变量捕获静态变量__block修饰符forwarding指针 Block的copy时机block作为函数返回值将block赋给…...

Mysql故障排插与环境优化

前置知识点 最上层是一些客户端和连接服务&#xff0c;包含本 sock 通信和大多数jiyukehuduan/服务端工具实现的TCP/IP通信。主要完成一些简介处理、授权认证、及相关的安全方案等。在该层上引入了线程池的概念&#xff0c;为通过安全认证接入的客户端提供线程。同样在该层上可…...

文件上传漏洞防御全攻略

要全面防范文件上传漏洞&#xff0c;需构建多层防御体系&#xff0c;结合技术验证、存储隔离与权限控制&#xff1a; &#x1f512; 一、基础防护层 前端校验&#xff08;仅辅助&#xff09; 通过JavaScript限制文件后缀名&#xff08;白名单&#xff09;和大小&#xff0c;提…...

STM32标准库-ADC数模转换器

文章目录 一、ADC1.1简介1. 2逐次逼近型ADC1.3ADC框图1.4ADC基本结构1.4.1 信号 “上车点”&#xff1a;输入模块&#xff08;GPIO、温度、V_REFINT&#xff09;1.4.2 信号 “调度站”&#xff1a;多路开关1.4.3 信号 “加工厂”&#xff1a;ADC 转换器&#xff08;规则组 注入…...

webpack面试题

面试题&#xff1a;webpack介绍和简单使用 一、webpack&#xff08;模块化打包工具&#xff09;1. webpack是把项目当作一个整体&#xff0c;通过给定的一个主文件&#xff0c;webpack将从这个主文件开始找到你项目当中的所有依赖文件&#xff0c;使用loaders来处理它们&#x…...

node.js的初步学习

那什么是node.js呢&#xff1f; 和JavaScript又是什么关系呢&#xff1f; node.js 提供了 JavaScript的运行环境。当JavaScript作为后端开发语言来说&#xff0c; 需要在node.js的环境上进行当JavaScript作为前端开发语言来说&#xff0c;需要在浏览器的环境上进行 Node.js 可…...

何谓AI编程【02】AI编程官网以优雅草星云智控为例建设实践-完善顶部-建立各项子页-调整排版-优雅草卓伊凡

何谓AI编程【02】AI编程官网以优雅草星云智控为例建设实践-完善顶部-建立各项子页-调整排版-优雅草卓伊凡 背景 我们以建设星云智控官网来做AI编程实践&#xff0c;很多人以为AI已经强大到不需要程序员了&#xff0c;其实不是&#xff0c;AI更加需要程序员&#xff0c;普通人…...

【若依】框架项目部署笔记

参考【SpringBoot】【Vue】项目部署_no main manifest attribute, in springboot-0.0.1-sn-CSDN博客 多一个redis安装 准备工作&#xff1a; 压缩包下载&#xff1a;http://download.redis.io/releases 1. 上传压缩包&#xff0c;并进入压缩包所在目录&#xff0c;解压到目标…...

深入浅出WebGL:在浏览器中解锁3D世界的魔法钥匙

WebGL&#xff1a;在浏览器中解锁3D世界的魔法钥匙 引言&#xff1a;网页的边界正在消失 在数字化浪潮的推动下&#xff0c;网页早已不再是静态信息的展示窗口。如今&#xff0c;我们可以在浏览器中体验逼真的3D游戏、交互式数据可视化、虚拟实验室&#xff0c;甚至沉浸式的V…...

2025年- H71-Lc179--39.组合总和(回溯,组合)--Java版

1.题目描述 2.思路 当前的元素可以重复使用。 &#xff08;1&#xff09;确定回溯算法函数的参数和返回值&#xff08;一般是void类型&#xff09; &#xff08;2&#xff09;因为是用递归实现的&#xff0c;所以我们要确定终止条件 &#xff08;3&#xff09;单层搜索逻辑 二…...

数据库正常,但后端收不到数据原因及解决

从代码和日志来看&#xff0c;后端SQL查询确实返回了数据&#xff0c;但最终user对象却为null。这表明查询结果没有正确映射到User对象上。 在前后端分离&#xff0c;并且ai辅助开发的时候&#xff0c;很容易出现前后端变量名不一致情况&#xff0c;还不报错&#xff0c;只是单…...

Java数组Arrays操作全攻略

Arrays类的概述 Java中的Arrays类位于java.util包中&#xff0c;提供了一系列静态方法用于操作数组&#xff08;如排序、搜索、填充、比较等&#xff09;。这些方法适用于基本类型数组和对象数组。 常用成员方法及代码示例 排序&#xff08;sort&#xff09; 对数组进行升序…...

链式法则中 复合函数的推导路径 多变量“信息传递路径”

非常好&#xff0c;我们将之前关于偏导数链式法则中不能“约掉”偏导符号的问题&#xff0c;统一使用 二重复合函数&#xff1a; z f ( u ( x , y ) , v ( x , y ) ) \boxed{z f(u(x,y),\ v(x,y))} zf(u(x,y), v(x,y))​ 来全面说明。我们会展示其全微分形式&#xff08;偏导…...

Python学习(8) ----- Python的类与对象

Python 中的类&#xff08;Class&#xff09;与对象&#xff08;Object&#xff09;是面向对象编程&#xff08;OOP&#xff09;的核心。我们可以通过“类是模板&#xff0c;对象是实例”来理解它们的关系。 &#x1f9f1; 一句话理解&#xff1a; 类就像“图纸”&#xff0c;对…...

ThreadLocal 源码

ThreadLocal 源码 此类提供线程局部变量。这些变量不同于它们的普通对应物&#xff0c;因为每个访问一个线程局部变量的线程&#xff08;通过其 get 或 set 方法&#xff09;都有自己独立初始化的变量副本。ThreadLocal 实例通常是类中的私有静态字段&#xff0c;这些类希望将…...

Python 高级应用10:在python 大型项目中 FastAPI 和 Django 的相互配合

无论是python&#xff0c;或者java 的大型项目中&#xff0c;都会涉及到 自身平台微服务之间的相互调用&#xff0c;以及和第三发平台的 接口对接&#xff0c;那在python 中是怎么实现的呢&#xff1f; 在 Python Web 开发中&#xff0c;FastAPI 和 Django 是两个重要但定位不…...

rm视觉学习1-自瞄部分

首先先感谢中南大学的开源&#xff0c;提供了很全面的思路&#xff0c;减少了很多基础性的开发研究 我看的阅读的是中南大学FYT战队开源视觉代码 链接&#xff1a;https://github.com/CSU-FYT-Vision/FYT2024_vision.git 1.框架&#xff1a; 代码框架结构&#xff1a;readme有…...

高分辨率图像合成归一化流扩展

大家读完觉得有帮助记得关注和点赞&#xff01;&#xff01;&#xff01; 1 摘要 我们提出了STARFlow&#xff0c;一种基于归一化流的可扩展生成模型&#xff0c;它在高分辨率图像合成方面取得了强大的性能。STARFlow的主要构建块是Transformer自回归流&#xff08;TARFlow&am…...

负载均衡器》》LVS、Nginx、HAproxy 区别

虚拟主机 先4&#xff0c;后7...

命令行关闭Windows防火墙

命令行关闭Windows防火墙 引言一、防火墙:被低估的"智能安检员"二、优先尝试!90%问题无需关闭防火墙方案1:程序白名单(解决软件误拦截)方案2:开放特定端口(解决网游/开发端口不通)三、命令行极速关闭方案方法一:PowerShell(推荐Win10/11)​方法二:CMD命令…...

算法—栈系列

一&#xff1a;删除字符串中的所有相邻重复项 class Solution { public:string removeDuplicates(string s) {stack<char> st;for(int i 0; i < s.size(); i){char target s[i];if(!st.empty() && target st.top())st.pop();elsest.push(s[i]);}string ret…...

leetcode73-矩阵置零

leetcode 73 思路 记录 0 元素的位置&#xff1a;遍历整个矩阵&#xff0c;找出所有值为 0 的元素&#xff0c;并将它们的坐标记录在数组zeroPosition中置零操作&#xff1a;遍历记录的所有 0 元素位置&#xff0c;将每个位置对应的行和列的所有元素置为 0 具体步骤 初始化…...

ArcPy扩展模块的使用(3)

管理工程项目 arcpy.mp模块允许用户管理布局、地图、报表、文件夹连接、视图等工程项目。例如&#xff0c;可以更新、修复或替换图层数据源&#xff0c;修改图层的符号系统&#xff0c;甚至自动在线执行共享要托管在组织中的工程项。 以下代码展示了如何更新图层的数据源&…...

向量几何的二元性:叉乘模长与内积投影的深层联系

在数学与物理的空间世界中&#xff0c;向量运算构成了理解几何结构的基石。叉乘&#xff08;外积&#xff09;与点积&#xff08;内积&#xff09;作为向量代数的两大支柱&#xff0c;表面上呈现出截然不同的几何意义与代数形式&#xff0c;却在深层次上揭示了向量间相互作用的…...