NodeJS全栈WEB3面试题——P8项目实战类问题(偏全栈)
📦 8.1 请描述你做过的 Web3 项目,具体技术栈和你负责的模块?
我主导开发过一个基于 NFT 的数字纪念平台,用户可以上传照片并生成独特的纪念 NFT,结合 IPFS 和 ERC-721 实现永存上链。
🔧 技术栈:
-
前端:Next.js 13 App Router + TypeScript + wagmi + RainbowKit + Tailwind CSS
-
合约:Solidity 编写的 ERC-721 可铸造合约,支持链上 Metadata URI
-
后端:NestJS + PostgreSQL + Redis(用于缓存 NFT 状态)+ IPFS(Pinata)
-
交互:Ethers.js + Hardhat(部署与测试)+ Alchemy API
-
存储:IPFS(图片 + JSON)+ 数据库存储用户链下行为
🙋♂️ 我的职责:
-
负责智能合约开发和部署
-
实现前端钱包连接、签名验证和合约交互
-
搭建后端 API,处理铸造流程与数据库同步
-
集成 Web3 登录、权限控制、前端状态显示优化
🧑⚖️ 8.2 你如何处理 Web3 项目中的账户管理和权限控制?
在 Web3 项目中,我主张**“链上地址即身份”**的原则,辅以服务端签名认证进行权限控制:
🔐 签名验证(Web3 登录)流程:
-
用户发起登录 → 后端生成随机 nonce;
-
前端用钱包签名 nonce,返回签名;
-
后端用
ethers.utils.verifyMessage()
验证签名是否匹配; -
签名成功后,生成 JWT 或 session 令牌,结合角色控制权限。
🔏 权限控制策略:
-
合约中:
-
使用
Ownable
/AccessControl
控制合约管理权限; -
多签(Gnosis Safe)或 DAO 治理控制关键操作;
-
-
后端中:
-
将链上地址与用户角色映射到数据库;
-
基于 Role 权限进行 API 限制;
-
支持黑名单 / 白名单逻辑(如禁止 bot 铸造)。
-
🏛️ 8.3 如果你要开发一个 DAO 系统,会怎么设计?
我设计过一个面向社群治理的 DAO 系统原型,结构如下:
🏗️ 架构模块:
-
合约层(Solidity)
-
ERC-20 代币合约(治理权重)
-
提案合约(Proposal)
-
投票合约(Snapshot 或 OpenZeppelin Governor)
-
时间锁合约(执行延迟)
-
-
前端 DApp
-
发起提案、浏览提案列表、查看投票结果
-
使用 wagmi + viem + Ethers.js 操作合约
-
-
后端服务
-
NestJS 提供提案快照、用户映射、投票历史接口
-
PostgreSQL 记录提案与链上同步状态
-
定期轮询区块,获取事件,更新状态
-
-
用户参与
-
基于持仓进行权重投票(Quadratic Voting 支持)
-
结合 Snapshot 实现免 Gas 签名投票
-
🚨 安全注意:
-
防范提案注入恶意代码
-
使用多签确认执行
-
支持 Proposal 白名单提交者
🧭 8.4 如何解决 Web3 DApp 用户体验不佳的问题?
Web3 用户体验目前最大的问题集中在连接钱包、交易确认与链上延迟。我的改进策略包括:
✅ 交互优化:
-
使用 wagmi + RainbowKit,提高钱包连接稳定性
-
默认连接 MetaMask,但支持 WalletConnect、Coinbase 等扩展钱包
-
加入“连接状态”UI反馈(如连接中、未连接、错误等)
✅ 交易体验优化:
-
对交易发起 → 确认 → 成功全过程添加提示(Toast)
-
使用
waitForTransaction()
等待确认后再跳转或提示 -
显示当前 gas 价格和预估消耗
✅ 网络兼容性处理:
-
检查链 ID,不匹配时自动请求切换网络
-
提供“复制签名内容”功能,解决某些钱包不兼容问题
✅ 兜底方案:
-
提供“离线签名 + 后端广播”的选项
-
引导用户领取测试币或 gas 空投
🔁 8.5 如何做合约与数据库之间的数据同步?
链上数据同步是全栈开发的重点,我通常采用事件监听 + 区块轮询机制结合的方式:
📡 方法一:监听合约事件(推荐)
contract.on("Transfer", (from, to, tokenId, event) => {// 保存事件到数据库db.nft.create({ from, to, tokenId, txHash: event.transactionHash });
});
🧩 方法二:后端定时轮询区块
-
使用
getBlockNumber()
→getLogs()
查询特定事件日志 -
解决断连 / missed event 的问题
🔐 数据校验:
-
每次监听事件后,进行一次链上状态校验,防止数据库与链上状态不一致;
-
数据库设计成幂等操作,如转移记录不能重复写入。
🧠 工具辅助:
-
使用 Alchemy / Infura 的
webhook + API
提供更稳定的监听服务; -
若量大可引入 Kafka / Redis Stream 做事件流分发和延迟消费。
相关文章:
NodeJS全栈WEB3面试题——P8项目实战类问题(偏全栈)
📦 8.1 请描述你做过的 Web3 项目,具体技术栈和你负责的模块? 我主导开发过一个基于 NFT 的数字纪念平台,用户可以上传照片并生成独特的纪念 NFT,结合 IPFS 和 ERC-721 实现永存上链。 🔧 技术栈…...
小白的进阶之路系列之五----人工智能从初步到精通pytorch张量
张量 张量是一种特殊的数据结构,与数组和矩阵非常相似。在PyTorch中,我们使用张量来编码模型的输入和输出,以及模型的参数。 张量类似于NumPy的ndarray,除了张量可以在gpu或其他硬件加速器上运行。事实上,张量和NumPy数组通常可以共享相同的底层内存,从而消除了复制数据…...

设计模式——迭代器设计模式(行为型)
摘要 本文详细介绍了迭代器设计模式,这是一种行为型设计模式,用于顺序访问集合对象中的元素,同时隐藏集合的内部结构。文章首先定义了迭代器设计模式并阐述了其核心角色,包括迭代器接口、具体迭代器、容器接口和具体容器。接着&a…...

android-studio-2024.3.2.14如何用WIFI连接到手机(给数据线说 拜拜!)
原文:Android不用数据线就能调试真机的方法—给数据线说 拜拜!(adb远程调试) android-studio-2024.3.2.14是最新的版本,如何连接到手机,可用WIFI,可不用数据线,拜拜 第一步…...
[特殊字符] xbatis 一款好用 ORM 框架 1.8.8-M2 发布,节省 1/3 代码和时间的框架!!!
1.8.8-M2 更新内容: 1:优化默认值,对同一类减少重复调用2:优化分页,支持 limit (-1) 进行忽略分页3:优化 UpdateChain.set;支持.set (SysUser::getVersion, c -> c.plus (1))4:优化 @Fetch, 已增强,无法配置 groupby、forceUseIn(已去除)5:增强 @Fetch,支持中间…...

js 动画库、2048核心逻辑、面试题add[1][2][3]+4
1、js 动画库 web animation api (1)初始化代码 hmtl、css 部分 初始化全局背景黑色初始化黄色小球 js 部分 监听全局点击事件创建并添加元素 class"pointer" 的 div 标签 设置 left、top 位置监听动画结束事件,移除该元素 定位小…...

华为OD机试真题——书籍叠放(2025B卷:200分)Java/python/JavaScript/C/C++/GO最佳实现
2025 B卷 200分 题型 本专栏内全部题目均提供Java、python、JavaScript、C、C++、GO六种语言的最佳实现方式; 并且每种语言均涵盖详细的问题分析、解题思路、代码实现、代码详解、3个测试用例以及综合分析; 本文收录于专栏:《2025华为OD真题目录+全流程解析+备考攻略+经验分…...

PyTorch-Transforms的使用(二)
对图像进行处理 安装open cv ctrlP 看用法 ToTensor的使用 常见的Transforms 归一化的图片 两个长度为三的数组,分别表示三个通道的平均值和标准差 Resize() Compose() 合并执行功能,输入进去一个列表&a…...

Pytorch知识点2
Pytorch知识点 1、官方教程2、张量🧱 0、数组概念🧱 1. 创建张量📐 2. 张量形状与维度🔢 3. 张量数据类型➗ 4. 张量的数学与逻辑操作🔄 5. 张量的就地操作📦 6. 复制张量🚀 7. 将张量移动到加速…...
Java详解LeetCode 热题 100(23):LeetCode 206. 反转链表(Reverse Linked List)详解
文章目录 1. 题目描述1.1 链表节点定义 2. 理解题目2.1 反转前后对比2.2 核心思路 3. 解法一:迭代法(三指针法)3.1 算法思路3.2 详细图解3.3 Java代码实现3.4 代码执行过程演示3.5 执行结果示例3.6 优化版本(简化代码)…...
StarRocks部署方案详解:从单机到分布式集群
#### 一、引言 StarRocks(原名DorisDB)是一款高性能的MPP(大规模并行处理)分析型数据库,支持实时查询、高并发和复杂分析场景。其基于列式存储和向量化执行引擎的设计,使其在大数据OLAP领域表现优异。本文…...

AWS API Gateway 配置WAF(中国区)
问题 需要给AWS API Gateway配置WAF。 AWS WAF设置 打开AWS WAF首页,开始创建和配置WAF,如下图: 设置web acl名称,然后开始添加aws相关资源,如下图: 选择资源类型,但是,我这里出…...

【前端面经】百度一面
写在前面:面经只是记录博主遇到的题目。每题的答案在编写文档的时候已经有问过deepseek,它只是一种比较普世的答案,要学得深入还是靠自己 Q: <html><style>.a {background-color: red;width: 200px;height: 100px;}…...
嵌入式学习笔记 - freeRTOS 动态创建任务跟静态创建任务的区别,以及内存回收问题
FreeRTOS动态创建任务和静态创建任务各有优缺点,选择哪种方式取决于具体的应用场景和需求。 一 动态创建任务 优点: 灵活性高:动态任务在运行时通过pvPortMalloc()动态分配内存,系统自动管理栈和任务控制块…...

[免费]微信小程序网上花店系统(SpringBoot后端+Vue管理端)【论文+源码+SQL脚本】
大家好,我是java1234_小锋老师,看到一个不错的微信小程序网上花店系统(SpringBoot后端Vue管理端)【论文源码SQL脚本】,分享下哈。 项目视频演示 【免费】微信小程序网上花店系统(SpringBoot后端Vue管理端) Java毕业设计_哔哩哔哩_bilibili 项…...
如何给老旧 iOS App 添加安全保护?用 Ipa Guard 对 IPA 文件混淆加固实录
在大多数安全讨论中,我们习惯关注新项目的安全性,从代码结构、API 设计、用户认证机制出发,构建完善的防护体系。但现实是,很多开发者都在维护一些年久失修的老项目——技术架构老旧、团队成员流失、源码混乱甚至缺失。 我最近接…...
C#语音录制:使用NAudio库实现语音录制功能详解
C#语音录制:使用NAudio库实现语音录制功能详解 在音频处理领域,C# 凭借其强大的生态系统和丰富的类库,为开发者提供了便捷的开发工具。NAudio 库就是其中一款用于音频处理的优秀开源库,它支持多种音频格式和音频设备操作。今天&a…...
[蓝桥杯]缩位求和
缩位求和 题目描述 在电子计算机普及以前,人们经常用一个粗略的方法来验算四则运算是否正确。 比如:248153720248153720 把乘数和被乘数分别逐位求和,如果是多位数再逐位求和,直到是 1 位数,得 24814>14524814…...
MySQ-8.42 MGR 组复制部署及详解
目录 1 MGR要求 2 操作系统信息和软件版本 3 集群架构图 4 MySQL MGR 主库部署步骤 1 MGR要求 InnoDB 存储引擎 表上必须存在主键或唯一非空索引 MGR可允许的最大节点9个 2 操作系统信息和软件版本 rootu24-mysql-mgr-42:~# cat /etc/issue Ubuntu 24.04.2 LTS \n \l mysql…...

css使用scoped之后样式失效问题
项目中的vue代码原本用的style标签来写css,现在想改成<style langscss scoped>,但是改完之后发现样式不对: 原来是: 将style改成scoped之后变成了:检查发现是之前定义的一些变量无法被识别,导致这些样…...

【NLP】将 LangChain 与模型上下文协议 (MCP) 结合使用
🔎大家好,我是Sonhhxg_柒,希望你看完之后,能对你有所帮助,不足请指正!共同学习交流🔎 📝个人主页-Sonhhxg_柒的博客_CSDN博客 📃 🎁欢迎各位→点赞…...

使用NMEA Tools生成GPS轨迹图
前言 在现代科技快速发展的时代,GPS定位技术已经广泛应用于各种领域,如导航、物流、运动追踪等。为了获取和分析GPS数据,我们常常需要使用一些专业的工具。本文将详细介绍如何使用一款名为“NMEA Tools”的APK应用,结合GPSVisual…...

1. pytorch手写数字预测
1. pytorch手写数字预测 1.背景2.准备数据集2.定义模型3.dataloader和训练4.训练模型5.测试模型6.保存模型 1.背景 因为自身的研究方向是多模态目标跟踪,突然对其他的视觉方向产生了兴趣,所以心血来潮的回到最经典的视觉任务手写数字预测上来࿰…...
vs中添加三方库的流程
在Visual Studio(VS)中添加第三方库(如OpenCV、PCL等)的流程可以分为以下几个步骤:安装库、配置项目、编写代码。以下是详细的步骤说明: 1. 安装第三方库 首先,需要下载并安装所需的第三方库。…...
JAVASE面相对象进阶之static
JavaSE 面向对象进阶之 static 一、static 的核心作用 static 是 Java 中用于修饰成员(属性/方法)的关键字,作用是让成员与类直接关联,而非依赖对象存在。 二、static 修饰属性(静态变量) 特点…...
深入解析 Redis Cluster 架构与实现(一)
#作者:stackofumbrella 文章目录 Redis Cluster特点Redis Cluster与其它集群模式的区别集群目标性能hash tagsMutli-key操作Cluster Bus安全写入(write safety)集群节点的属性集群拓扑节点间handshake重定向与reshardingMOVED重定向ASK重定向…...
(12)java+ selenium->元素定位大法之By_link_text
1.简介 本章节介绍元素定位中的link_text,顾名思义是通过链接定位的(官方说法:超链接文本定位)。什么是link_text呢,就是我们在任何一个网页上都可以看到有一个或者多个链接,上面有一个文字描述,点击这个文字,就可以跳转到其他页面。这个就是link_Text。 注意:link_t…...
数据库MySQL集群MGR
一、MGR原理 一、基本定义 MGR(MySQL Group Replication) 是 MySQL 官方推出的一种高可用、高可靠的数据库集群解决方案,基于分布式系统理论(如 Paxos 协议变种)实现,主要用于构建强一致性的主从复制集群…...
Ubuntu22.04 安装 ROS2 Humble
ROS2 Documentation: Humble Ubuntu 22.04 对应的 ROS 2 版本是 ROS 2 Humble Hawksbill (LTS)。 1.设置系统区域 确保区域设置支持UTF-8 sudo apt update && sudo apt install locales sudo locale-gen en_US en_US.UTF-8 sudo update-locale LC_ALLen_US.UTF-8 L…...
Spring Boot,注解,@RestController
RestController 是 Spring MVC 中用于创建 RESTful Web 服务的核心注解。 RestController 核心知识点 REST 作用: RestController 是一个方便的组合注解,它结合了 Controller 和 ResponseBody 两个注解。 Controller: 将类标记为一个控制器,使其能够处理…...