基于 Solana Playground (pg模式)发行自定义参数的代币
文章目录
- 要做的事
- 1、水龙头(devnet 环境)
- 2、Solana Playground
- 2.1、选择环境
- 3、基于 Solana Playground (pg模式)发行自定义参数的代币
- 3.1、账户体系
- 3.2、代码
- 4、浏览器& Phantom钱包 展示代币图片
- 4.1、 浏览器和钱包展示的图片来自特定 uri 返回的 json 中的特定字段。
- 4.2、需要怎么做?
- 5、更多 api 接口
要做的事
Solana 支持简单发币,这种情况无法自定义代币名称、图片,也没有拓展字段。
使用合约 TOKEN_2022_PROGRAM 可以直接实现这个功能。
1、水龙头(devnet 环境)
免费领取 solana
https://faucet.solana.com/
- Mainnet - https://api.mainnet-beta.solana.com
- Devnet - https://api.devnet.solana.com
- Testnet - https://api.testnet.solana.com
2、Solana Playground
https://beta.solpg.io/
2.1、选择环境
选择 devnet
3、基于 Solana Playground (pg模式)发行自定义参数的代币
3.1、账户体系
需要注意的是,Solana 的账户体系在发币过程需要三个账号。
你的登录账号(用于付费)-代币账号-关联账号(用于承接发行的额度)
https://solana.com/docs/core/tokens
下面代码选择的是:
3.2、代码
直接粘贴到 https://beta.solpg.io/660cea45cffcf4b13384d012 覆盖即可运行
import * as web3 from "@solana/web3.js";
import * as token from "@solana/spl-token";import {Connection,Keypair,SystemProgram,Transaction,clusterApiUrl,sendAndConfirmTransaction,
} from "@solana/web3.js";
import {ExtensionType,TOKEN_2022_PROGRAM_ID,createInitializeMintInstruction,getMintLen,createInitializeMetadataPointerInstruction,getMint,getMetadataPointerState,getTokenMetadata,TYPE_SIZE,LENGTH_SIZE,createMintToInstruction,
} from "@solana/spl-token";
import {createInitializeInstruction,createUpdateFieldInstruction,createRemoveKeyInstruction,pack,TokenMetadata,
} from "@solana/spl-token-metadata";// Playground wallet
const payer = pg.wallet.keypair;// Connection to devnet cluster
const connection = new Connection(clusterApiUrl("devnet"), "confirmed");// Transaction to send
let transaction: Transaction;
// Transaction signature returned from sent transaction
let transactionSignature: string;// Generate new keypair for Mint Account
const mintKeypair = Keypair.generate();
// Address for Mint Account
const mint = mintKeypair.publicKey;
// Decimals for Mint Account
const decimals = 2;
// Authority that can mint new tokens
const mintAuthority = pg.wallet.publicKey;
// Authority that can update token metadata
const updateAuthority = pg.wallet.publicKey;// Metadata to store in Mint Account
const metaData: TokenMetadata = {updateAuthority: updateAuthority,mint: mint,name: "TestDemoJJJ",symbol: "TestDemo JJJ",//uri: "https://profile-avatar.csdnimg.cn/b521ddb316d54ee0811a45941c53b042_bestcxx.jpg!1",uri: "https://raw.githubusercontent.com/solana-developers/opos-asset/main/assets/DeveloperPortal/metadata.json",additionalMetadata: [["namea", "aaa"],["ccc", "ddd"],],
};// Size of MetadataExtension 2 bytes for type, 2 bytes for length
const metadataExtension = TYPE_SIZE + LENGTH_SIZE;
// Size of metadata
const metadataLen = pack(metaData).length;// Size of Mint Account with extension
const mintLen = getMintLen([ExtensionType.MetadataPointer]);// Minimum lamports required for Mint Account
const lamports = await connection.getMinimumBalanceForRentExemption(mintLen + metadataExtension + metadataLen
);// Instruction to invoke System Program to create new account
const createAccountInstruction = SystemProgram.createAccount({fromPubkey: payer.publicKey, // Account that will transfer lamports to created accountnewAccountPubkey: mint, // Address of the account to createspace: mintLen, // Amount of bytes to allocate to the created accountlamports, // Amount of lamports transferred to created accountprogramId: TOKEN_2022_PROGRAM_ID, // Program assigned as owner of created account
});// Instruction to initialize the MetadataPointer Extension
const initializeMetadataPointerInstruction =createInitializeMetadataPointerInstruction(mint, // Mint Account addressupdateAuthority, // Authority that can set the metadata addressmint, // Account address that holds the metadataTOKEN_2022_PROGRAM_ID);// Instruction to initialize Mint Account data
const initializeMintInstruction = createInitializeMintInstruction(mint, // Mint Account Addressdecimals, // Decimals of MintmintAuthority, // Designated Mint Authoritynull, // Optional Freeze AuthorityTOKEN_2022_PROGRAM_ID // Token Extension Program ID
);// Instruction to initialize Metadata Account data
const initializeMetadataInstruction = createInitializeInstruction({programId: TOKEN_2022_PROGRAM_ID, // Token Extension Program as Metadata Programmetadata: mint, // Account address that holds the metadataupdateAuthority: updateAuthority, // Authority that can update the metadatamint: mint, // Mint Account addressmintAuthority: mintAuthority, // Designated Mint Authorityname: metaData.name,symbol: metaData.symbol,uri: metaData.uri,
});// Instruction to update metadata, adding custom field
const updateFieldInstruction = createUpdateFieldInstruction({programId: TOKEN_2022_PROGRAM_ID, // Token Extension Program as Metadata Programmetadata: mint, // Account address that holds the metadataupdateAuthority: updateAuthority, // Authority that can update the metadatafield: metaData.additionalMetadata[0][0], // keyvalue: metaData.additionalMetadata[0][1], // value
});const updateFieldInstruction1 = createUpdateFieldInstruction({programId: TOKEN_2022_PROGRAM_ID, // Token Extension Program as Metadata Programmetadata: mint, // Account address that holds the metadataupdateAuthority: updateAuthority, // Authority that can update the metadatafield: metaData.additionalMetadata[1][0], // keyvalue: metaData.additionalMetadata[1][1], // value
});// Add instructions to new transaction
transaction = new Transaction().add(createAccountInstruction,initializeMetadataPointerInstruction,initializeMintInstruction,initializeMetadataInstruction,updateFieldInstruction,updateFieldInstruction1
);// Send transaction
transactionSignature = await sendAndConfirmTransaction(connection,transaction,[payer, mintKeypair] // Signers
);console.log("\nCreate Mint Account:",`https://solana.fm/tx/${transactionSignature}?cluster=devnet-solana`
);// Retrieve mint information
const mintInfo = await getMint(connection,mint,"confirmed",TOKEN_2022_PROGRAM_ID
);// Retrieve and log the metadata pointer state
const metadataPointer = getMetadataPointerState(mintInfo);
console.log("\nMetadata Pointer:", JSON.stringify(metadataPointer, null, 2));// Retrieve and log the metadata state
const metadata = await getTokenMetadata(connection,mint // Mint Account address
);
console.log("\nMetadata:", JSON.stringify(metadata, null, 2));// // Instruction to remove a key from the metadata
// const removeKeyInstruction = createRemoveKeyInstruction({
// programId: TOKEN_2022_PROGRAM_ID, // Token Extension Program as Metadata Program
// metadata: mint, // Address of the metadata
// updateAuthority: updateAuthority, // Authority that can update the metadata
// key: metaData.additionalMetadata[0][0], // Key to remove from the metadata
// idempotent: true, // If the idempotent flag is set to true, then the instruction will not error if the key does not exist
// });// Add instruction to new transaction
//transaction = new Transaction().add(removeKeyInstruction);// Send transaction
// transactionSignature = await sendAndConfirmTransaction(
// connection,
// transaction,
// [payer]
// );// console.log(
// "\nRemove Additional Metadata Field:",
// `https://solana.fm/tx/${transactionSignature}?cluster=devnet-solana`
// );//Retrieve and log the metadata state
const updatedMetadata = await getTokenMetadata(connection,mint // Mint Account address
);
console.log("\nUpdated Metadata:", JSON.stringify(updatedMetadata, null, 2));console.log("\nMint Account:",`https://solana.fm/address/${mint}?cluster=devnet-solana`
);//todo-begin
try {// const transaction = await buildCreateAssociatedTokenAccountTransaction(// payer.publicKey,// mint// );const associatedTokenAddress = await token.getAssociatedTokenAddress(mint,payer.publicKey,false,TOKEN_2022_PROGRAM_ID // 使用SPL Token 2022的程序ID);console.log("build associatedTokenAddress:",associatedTokenAddress.toBase58());const transaction = new web3.Transaction().add(token.createAssociatedTokenAccountInstruction(payer.publicKey,associatedTokenAddress,payer.publicKey,mint,TOKEN_2022_PROGRAM_ID // 使用SPL Token 2022的程序ID));// 指定交易的最近区块哈希transaction.recentBlockhash = (await connection.getLatestBlockhash()).blockhash;// 添加签署者transaction.feePayer = payer.publicKey;// 签名交易transaction.sign(payer);// 发送并确认交易const transactionSignature = await connection.sendRawTransaction(transaction.serialize());await connection.confirmTransaction(transactionSignature);console.log("buildCreateAssociatedTokenAccountTransaction Transaction successful with signature:",transactionSignature);console.log("\nbuildCreateAssociatedTokenAccountTransaction:",`https://solana.fm/tx/${transactionSignature}?cluster=devnet-solana`);//todo-end//todo-beginconst instruction = createMintToInstruction(mint,associatedTokenAddress, // 改为使用关联代币账户地址mintAuthority, // mint authority 要确保这已被正确设置为 `mint` 的授权者1000000000,[],TOKEN_2022_PROGRAM_ID);var transaction2 = new Transaction().add(instruction);// 指定交易的最近区块哈希transaction2.recentBlockhash = (await connection.getLatestBlockhash()).blockhash;// 添加签署者transaction2.feePayer = payer.publicKey;// 签名交易transaction2.sign(payer);// 发送并确认交易var transactionSignature2 = await connection.sendRawTransaction(transaction2.serialize());await connection.confirmTransaction(transactionSignature2);console.log("mintTo Transaction successful with signature:",transactionSignature2);console.log("\nmintTo:",`https://solana.fm/tx/${transactionSignature2}?cluster=devnet-solana`);//todo-end
} catch (error) {console.error("Error creating associated token account:", error);
}// function
async function buildCreateAssociatedTokenAccountTransaction(payer: web3.PublicKey,mint: web3.PublicKey
): Promise<web3.Transaction> {const associatedTokenAddress = await token.getAssociatedTokenAddress(mint,payer,false,TOKEN_2022_PROGRAM_ID // 使用SPL Token 2022的程序ID);const transaction = new web3.Transaction().add(token.createAssociatedTokenAccountInstruction(payer,associatedTokenAddress,payer,mint,TOKEN_2022_PROGRAM_ID // 使用SPL Token 2022的程序ID));return transaction;
}
4、浏览器& Phantom钱包 展示代币图片
4.1、 浏览器和钱包展示的图片来自特定 uri 返回的 json 中的特定字段。
-
Phantom 钱包(谷歌浏览器安装插件):
-
浏览器
https://explorer.solana.com/address/Fg6t4x38NuxN**********zdhs?cluster=devnet
4.2、需要怎么做?
需要提供一个可以公开访问的 url,返回固定信息的 json
比如 :https://raw.githubusercontent.com/solana-developers/opos-asset/main/assets/DeveloperPortal/metadata.json
{"name": "OPOS","symbol": "OPOS","description": "Only Possible On Solana","image": "https://raw.githubusercontent.com/solana-developers/opos-asset/main/assets/DeveloperPortal/image.png","attributes": [{"trait_type": "Item","value": "Developer Portal"}]}
应用方法是,把这个 url 传入到创建代币的入参uri 中
// Metadata to store in Mint Account
const metaData: TokenMetadata = {updateAuthority: updateAuthority,mint: mint,name: "TestDemoJJJ",symbol: "TestDemo JJJ",//uri: "https://profile-avatar.csdnimg.cn/b521ddb316d54ee0811a45941c53b042_bestcxx.jpg!1",uri: "https://raw.githubusercontent.com/solana-developers/opos-asset/main/assets/DeveloperPortal/metadata.json",additionalMetadata: [["namea", "aaa"],["ccc", "ddd"],],
};
5、更多 api 接口
https://solana.com/zh/docs/rpc/http/gettokenaccountsbyowner#code-sample
https://solana.com/zh/docs/rpc/http/getsupply
相关文章:
基于 Solana Playground (pg模式)发行自定义参数的代币
文章目录 要做的事1、水龙头(devnet 环境)2、Solana Playground2.1、选择环境 3、基于 Solana Playground (pg模式)发行自定义参数的代币3.1、账户体系3.2、代码 4、浏览器& Phantom钱包 展示代币图片4.1、 浏览器和钱包展示的…...
代码随想录算法训练营第七十天 | 拓扑排序精讲,Dijkstra(朴素版)精讲,Dijkstra(堆优化版)精讲
拓扑排序精讲 题目讲解:代码随想录 重点: 给出一个有向图,把这个有向图转成线性的排序就叫拓扑排序。拓扑排序也是图论中判断有向无环图的常用方法。拓扑排序的过程,其实就两步: 找到入度为0的节点,加入结…...
基于 Python Django 的西西家居全屋定制系统(源码+部署+文档)
博主介绍:✌程序员徐师兄、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专栏推荐订阅👇…...
excel填充十六进制
excel填充十六进制 A10x000020x000130x000240x000350x000460x000570x000680x000790x0008100x0009110x000A120x000B130x000C140x000D150x000E160x000F 在A1表格中,输入:“0x”&DEC2HEX(ROW()-1,4) 然后进行下拉即可生成如表格显示十六进制...
scrapy 教程
Scrapy Tutorial In this tutorial, we’ll assume that Scrapy is already installed on your system. If that’s not the case, see Installation guide. We are going to scrape quotes.toscrape.com, a website that lists quotes from famous authors. This tutorial …...
IDE和IDEA详解和具体差异
1. IDE(集成开发环境)概述 1.1 什么是 IDE? IDE(Integrated Development Environment,集成开发环境)是一种为开发者提供全面编程工具的软件应用程序。它将代码编辑、编译、调试、版本控制等功能集成在一个统一的界面中,旨在提高开发效率,减少开发者在不同工具之间切换…...
使用MPTCP+BBR进行数据传输,让网络又快又稳
1.前言 在前文《链路聚合技术——多路径传输Multipath TCP(MPTCP)快速实践》中我们使用mptcpize run命令实现了两个节点间通信使用MPTCP协议进行传输,并实现了传输速率的聚合。 实际应用中更推荐原生支持mptcp的应用,在MPTCP官网中可以看到如TCPDump、…...
【网络】网络基础知识(协议、mac、ip、套接字)
文章目录 1. 计算机网络的背景2. 认识网络协议2.1 协议分层2.2 OS与网络的关系 3. 网络传输基本流程3.1 局域网通信流程3.2 跨网络通信流程 4. Socket 编程预备4.1 理解源IP地址和目的IP地址4.2 端口号与Socket4.3传输层的典型代表4.4 网络字节序 5. socket 编程接口5.1 介绍5.…...
Unity【Colliders碰撞器】和【Rigibody刚体】的应用——小球反弹效果
目录 Collider 2D 定义: 类型: Rigidbody 2D 定义: 属性和行为: 运动控制: 碰撞检测: 结合使用 实用检测 延伸拓展 1、在Unity中优化Collider 2D和Rigidbody 2D的性能 2、Unity中Collider 2D…...
游戏引擎学习第75天
仓库:https://gitee.com/mrxiao_com/2d_game_2 Blackboard: 处理楼梯通行 为了实现楼梯的平滑过渡和角色的移动控制,需要对楼梯区域的碰撞与玩家的运动方式进行优化。具体的处理方式和遇到的问题如下: 楼梯区域的过渡: 在三维空间中&#x…...
ModelScope ms-swift:轻量级模型微调框架
ModelScope ms-swift:轻量级模型微调框架 介绍支持的模型支持的技术使用方法为什么选择ms-swift?结论 介绍 ModelScope ms-swift是ModelScope社区提供的一个官方框架,用于大型语言模型(LLMs)和多模态大型模型…...
管理加密SQLite数据库的软件工具研究
使用软件工具管理加密的 SQLite 数据库是一个常见需求,尤其是当需要保护敏感数据时。以下是实现此目标的步骤和相关工具推荐: 1. 选择支持加密的 SQLite 版本 SQLite 默认并不支持加密功能。你需要使用以下方法之一来启用加密: SQLite Encry…...
react 封装一个类函数使用方法
1.编写ProductCount函数 class ProductCount {public static getProductCount(count: number): string {if (count < 10) {return 当前数量: 0${count};}return 当前数量: ${count};} }export default ProductCount;2.在代码文件中导入 ProductCount 类。 import ProductC…...
Windows 11 上通过 WSL (Windows Subsystem for Linux) 安装 MySQL 8
在 Windows 11 上通过 WSL (Windows Subsystem for Linux) 安装 MySQL 8 的步骤如下: ✅ 1. 检查 WSL 的安装 首先确保已经安装并启用了 WSL 2。 🔧 检查 WSL 版本 打开 PowerShell,执行以下命令: wsl --list --verbose确保 W…...
解决 IntelliJ IDEA 中 Tomcat 日志乱码问题的详细指南
目录 前言1. 分析问题原因2. 解决方案 2.1 修改 IntelliJ IDEA 的 JVM 选项2.2 配置 Tomcat 实例的 VM 选项 2.2.1 设置 Tomcat 的 VM 选项2.2.2 添加环境变量 3. 进一步优化 3.1 修改 Tomcat 的 logging.properties3.2 修改操作系统默认编码 3.2.1 Windows 系统3.2.2 Linux …...
jenkins入门4 --window执行execute shell
1、启动关闭jenkins 在Windows环境下,如果你需要关闭Jenkins服务,可以通过以下几种方式: 1、使用Windows服务管理器: 打开“运行”对话框(Win R),输入services.msc,然后回车。 在服…...
51c嵌入式~单片机~合集4
我自己的原文哦~ https://blog.51cto.com/whaosoft/12868932 一、时钟失效之后,STM32还能运行? 问题: 该问题由某客户提出,发生在 STM32F103VDT6 器件上。据其工程师讲述:在其产品的设计中,STM32 的 H…...
OKHttp调用第三方接口,响应转string报错okhttp3.internal.http.RealResponseBody@4a3d0218
原因分析 通过OkHttp请求网络,结果请求下来的数据一直无法解析并且报错,因解析时String res response.body().toString() 将toString改为string即可!...
杰发科技——使用ATCLinkTool解除读保护
0. 原因 在jlink供电电压不稳定的情况下,概率性出现读保护问题,量产时候可以通过离线烧录工具避免。代码中开了读保护,但是没有通过can/uart/lin/gpio控制等方式进行关闭,导致无法关闭读保护。杰发所有芯片都可以用本方式解除读保…...
SQL 幂运算 — POW() and POWER()函数用法详解
POW() and POWER()函数用法详解 POW() 和 POWER() —计算幂运算(即一个数的指定次方)的函数。 这两个函数是等价的,功能完全相同,只是名字不同。 POW(base, exponent); POWER(base, exponent); base:底数。exponen…...
【Shell脚本】Docker构建Java项目,并自动停止原镜像容器,发布新版本
本文简述 经常使用docker部署SpringBoot 项目,因为自己的服务器小且项目简单,因此没有使用自动化部署。每次将jar包传到服务器后,需要手动构建,然后停止原有容器,并使用新的镜像启动,介于AI时代越来越懒的…...
【ArcGIS Pro二次开发实例教程】(2):BSM字段赋值
一、简介 一般的数据库要素或表格都有一个BSM字段,用来标识唯一值。 此工具要实现的功能是:按一定的规律(前缀中间的填充数字OBJECT码)来给BSM赋值。 主要技术要点包括: 1、ProWindow的创建,Label,Comb…...
VSCode函数调用关系图插件开发(d3-graphviz)
文章目录 1、如何在VSCode插件webview中用d3-graphviz绘图2、VSCode插件使用离线d3.min.js、d3-graphviz3、使用 `@hpcc-js/wasm` 包在 Node.js 环境直接转换dot为svg1、如何在VSCode插件webview中用d3-graphviz绘图 我来帮你创建一个 VS Code 插件示例,实现右键菜单触发 Web…...
OCR图片中文字识别(Tess4j)
文章目录 Tess4J下载 tessdataJava 使用Tess4j 的 demo Tess4J Tess4J 是 Tesseract OCR 引擎的 Java 封装库,它让 Java 项目更轻松地实现 OCR(光学字符识别)功能。 下载 tessdata 下载地址:https://github.com/tesseract-ocr/…...
leetcode 面试经典 150 题:同构字符串
链接同构字符串题序号205题型字符串解法哈希表难度简单熟练度✅✅✅✅ 题目 给定两个字符串 s 和 t ,判断它们是否是同构的。 如果 s 中的字符可以按某种映射关系替换得到 t ,那么这两个字符串是同构的。 每个出现的字符都应当映射到另一个字符&#…...
算法-泰波那契
力扣题目链接:1137. 第 N 个泰波那契数 - 力扣(LeetCode) 泰波那契序列 Tn 定义如下: T0 0, T1 1, T2 1, 且在 n > 0 的条件下 Tn3 Tn Tn1 Tn2 给你整数 n,请返回第 n 个泰波那契数 Tn 的值。 示例 1&…...
Mac修改文件权限
查看文件权限 ll -all 修改读写权限 sudo chmod -R arwx /usr/local/mysql-5.7.30-macos10.14-x86_64/data/a_test 修改用户分组 sudo chown -R _mysql:wheel /usr/local/mysql-5.7.30-macos10.14-x86_64/data/b_test...
如何安装和配置PHP开发环境?
要安装和配置PHP开发环境,可以按照以下步骤进行: 一、下载和安装PHP 1:下载PHP: 访问PHP官方网站(PHP: Downloads),选择适合您操作系统的版本进行下载。 2:解压并安装PHP&#x…...
深入探讨 Android 中的 AlarmManager:定时任务调度及优化实践
引言 在 Android 开发中,AlarmManager 是一个非常重要的系统服务,用于设置定时任务或者周期性任务。无论是设置一个闹钟,还是定时进行数据同步,AlarmManager 都是不可或缺的工具之一。然而,随着 Android 系统的不断演…...
【Vim Masterclass 笔记07】S05L19:Vim 剪切、复制、粘贴操作同步练习
文章目录 S05L19 Vim 剪切、复制、粘贴操作同步练习(Exercise 05 - Cut, Copy and Paste)1 训练目标2 操作指令2.1 打开 dyp.txt 文件2.2 交换文件的头两行2.3 将文件首行 put 到文件其他为止2.4 练习在光标位置的上方粘贴文本行2.5 通过交换字符顺序更正…...
【前端下拉框】获取国家国旗
一、先看效果 二、代码实现(含国旗) <!DOCTYPE html> <html lang"zh"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><…...
Elasticsearch 操作文档对数据的增删改查操作 索引库文档 操作数据 CRUD
介绍 在 Elasticsearch 中,文档的增、删、改、查操作是核心的基本功能。Elasticsearch 使用 RESTful API 提供这些操作,通常通过 HTTP 请求与 Elasticsearch 集群进行交互。 索引库 {"mappings": {"properties": {"title&qu…...
【动手学电机驱动】STM32-MBD(2)将 Simulink 模型部署到 STM32G431 开发板
STM32-MBD(1)安装 STM32 硬件支持包 STM32-MBD(2)Simulink 模型部署入门 STM32-MBD(3)Simulink 状态机模型部署 【动手学电机驱动】STM32-MBD(2)Simulink 模型部署入门 1. 软硬件条件…...
小试牛刀-SpringBoot集成SOL链
目录 一、什么是solanaj? 二、Pom依赖 三、主要类 3.1 RpcClient 3.2 PublicKey 3.3 Transaction 3.4 TransactionInstruction 四、示例代码 Welcome to Code Blocks blog 本篇文章主要介绍了 [小试牛刀-SpringBoot集成SOL链] ❤博主广交技术好友,喜欢文章的…...
数据结构大作业——家谱管理系统(超详细!完整代码!)
目录 设计思路: 一、项目背景 二、功能分析 查询功能流程图: 管理功能流程图: 三、设计 四、实现 代码实现: 头文件 结构体 函数声明及定义 创建家谱树头结点 绘制家谱树(打印) 建立右兄弟…...
【计算机网络】课程 实验二 交换机基本配置和VLAN 间路由实现
实验二 交换机基本配置和VLAN 间路由实现 一、实验目的 1.了解交换机的管理方式。 2.掌握通过Console接口对交换机进行配置的方法。 3.掌握交换机命令行各种模式的区别,能够使用各种帮助信息以及命令进行基本的配置。 4&…...
最新MySQL面试题(2025超详细版)
2025最新超详细MySQL面试题 文章目录 2025最新超详细MySQL面试题[toc]一、 SQL 和基本操作1. SQL的执行顺序2. 如何优化MySQL查询3. 常用的聚合函数4. 数据库事务5. 事务的四大特性(ACID)6. 视图7. MySQL中使用LIMIT子句进行分页8. MySQL中使用变量和用户定义的函数9. MySQL中的…...
Unity-Mirror网络框架-从入门到精通之AdditiveScenes 示例
文章目录 前言Additive Levels和Additive ScenesAdditive Levels场景介绍Portal传送门FadeInOut特效 Additive Scenes示例介绍ZoneHandlerSceneMassage 最后 前言 在现代游戏开发中,网络功能日益成为提升游戏体验的关键组成部分。Mirror是一个用于Unity的开源网络框…...
java 转义 反斜杠 Unexpected internal error near index 1
代码: String str"a\\c"; //出现异常,Unexpected internal error near index 1 //System.out.println(str.replaceAll("\\", "c"));//以下三种都正确 System.out.println(str.replace(\\, c)); System.out.println(str.r…...
html内容过长,实现向上循环滑动效果
以下是几种实现 HTML 内容过长时向上循环滑动的常见方法,你可以根据具体需求和项目场景来选择合适的实现方式: 一、使用 CSS3 animation 实现简单的向上循环滑动(适用于简单的文本等内容滑动场景) 原理 通过 CSS3 的 keyframes…...
RAG(Retrieval-Augmented Generation,检索增强生成)流程
目录 一、知识文档的准备二、OCR转换三、分词处理四、创建向量数据库五、初始化语言聊天模型1.prompt2.检索链3.对话 完整代码 知识文档的准备:首先需要准备知识文档,这些文档可以是多种格式,如Word、TXT、PDF等。使用文档加载器或多模态模型…...
数据库系统概论期末复习
期末考试题型: 选择题 20题 20分 判断题 10题 10分 简答题 4题 20分 SQL语句: (select delete update)30分 设计题:ER图 和关系模式 ER转关系模式,注意主码,外码的标注 15分 应用题:…...
B树与B+树:数据库索引的秘密武器
想象一下,你正在构建一个超级大的图书馆,里面摆满了各种各样的书籍。B树和B树就像是两种不同的图书分类和摆放方式,它们都能帮助你快速找到想要的书籍,但各有特点。 B树就像是一个传统的图书馆摆放方式: 1. 书籍摆放&…...
数据结构-栈与队列笔记
普通的双端队列 验证图书取出顺序 class Solution {/*** 验证书籍的借阅顺序是否合法。* * param putIn 表示放入书架的书籍序列。* param takeOut 表示从书架取出的书籍序列。* return 如果书籍的借阅顺序合法,返回 true;否则返回 false。*/public boo…...
Netty中用了哪些设计模式?
大家好,我是锋哥。今天分享关于【Netty中用了哪些设计模式?】面试题。希望对大家有帮助; Netty中用了哪些设计模式? 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 Netty 是一个高性能的网络通信框架,广泛…...
设计模式与游戏完美开发(3)
更多内容可以浏览本人博客:https://azureblog.cn/ 😊 该文章主体内容来自《设计模式与游戏完美开发》—蔡升达 第二篇 基础系统 第五章 获取游戏服务的唯一对象——单例模式(Singleton) 游戏实现中的唯一对象 在游戏开发过程中…...
人工智能的发展领域之GPU加速计算的应用概述、架构介绍与教学过程
文章目录 一、架构介绍GPU算力平台概述优势与特点 二、注册与登录账号注册流程GPU服务器类型配置选择指南内存和存储容量网络带宽CPU配置 三、创建实例实例创建步骤镜像选择与设置 四、连接实例SSH连接方法远程桌面配置 一、架构介绍 GPU算力平台概述 一个专注于GPU加速计算的…...
【51单片机零基础-chapter5:模块化编程】
模块化编程 将以往main中泛型的代码,放在与main平级的c文件中,在h中引用. 简化main函数 将原来main中的delay抽出 然后将delay放入单独c文件,并单独开一个delay头文件,里面放置函数的声明,相当于收纳delay的c文件里面写的函数的接口. 注意,单个c文件所有用到的变量需要在该文…...
彻底学会Gradle插件版本和Gradle版本及对应关系
看完这篇,保你彻底学会Gradle插件版本和Gradle版本及对应关系,超详细超全的对应关系表 需要知道Gradle插件版本和Gradle版本的对应关系,其实就是需要知道Gradle插件版本对应所需的gradle最低版本,详细对应关系如下表格࿰…...
容器技术思想 Docker K8S
容器技术介绍 以Docker为代表的容器技术解决了程序部署运行方面的问题。在容器技术出现前,程序直接部署在物理服务器上,依赖管理复杂,包括各类运行依赖,且易变,多程序混合部署时还可能产生依赖冲突,给程序…...