web3技术岗面试题

行为面试

你为什么想进入 Web3 行业

描述一个你在远程协作中遇到的挑战,你是怎么解决的

描述一次你自主发现并解决一个问题的经历

你对我们的项目/协议了解多少?你觉得我们目前最大的挑战是什么

社区运营

如果让你从零搭建一个 Discord 社区,你会怎么设计频道结构?

思路:分层设计——① Welcome & Rules(新人引导 + 规则)② General(日常讨论)③ Announcements(官方公告,只读)④ Support(技术/产品支持)⑤ Governance(提案讨论)⑥ Language channels(多语言)⑦ Contributors / Builders(贡献者专属)。加分:说明 Bot 配置(验证、自动回复、Role 分配)和 Token Gate 策略

你管理的社区突然出现大量 FUD(恐慌言论),比如有人说"项目方跑路了",你怎么处理?

思路:① 不要删帖或禁言——这会加剧恐慌 ② 快速联系核心团队确认事实 ③ 在 Announcement 频道发布官方声明——承认问题(如果存在)+ 说明正在采取的行动 + 给出明确的时间线 ④ 在 General 频道积极回应用户疑问,用事实和数据回应而非情绪 ⑤ 事后复盘,优化危机响应 SOP。

你会用什么指标来衡量社区的健康度

思路:不要只说 “人数”——人数是虚荣指标。核心指标:① DAU / MAU(日活/月活比)② 消息量和互动率(每天有多少人在发言,而不只是潜水)③ 新成员 7 日留存率 ④ Support ticket 响应时间和解决率 ⑤ 活动参与率(AMA 参加人数 / 总人数)⑥ 社区情绪指标(正面/负面讨论比例)

如何设计一个社区大使(Ambassador)计划?

思路:① 明确目标——大使帮你做什么?(内容创作、本地社区运营、翻译、活动组织)② 准入标准——不是谁都能当大使(设置申请流程、考察活跃度和输出质量)③ 激励设计——Token 奖励、NFT 徽章、项目内部资源(早期信息、与团队直接沟通的机会)④ 考核机制——月度/季度 KPI ⑤ 退出机制——不活跃的大使会被替换。

技术岗通用

出现在所有技术岗位的面试中,合约开发、前端、后端、安全审计,考察对区块链技术的基础理解。

请解释一笔以太坊交易从用户发起到最终确认的完整生命周期

思路:用户签名 → 广播到 Mempool → 验证者/矿工选择并打包 → 区块提议 → 共识确认 → 状态更新。加分项:提到 EIP-1559 的 Base Fee + Priority Fee 机制、区块确认数与最终性的关系。

PoW 和 PoS 的核心区别是什么?以太坊为什么要从 PoW 转向 PoS

思路:安全模型不同(算力 vs 质押资本)、能耗差异、中心化风险差异。以太坊转 PoS(The Merge)的动机:降低能耗 99.95%、为分片/Rollup 路线图做准备、降低参与门槛。

什么是区块链的不可能三角?你认为目前最好的解决方案是什么

思路:去中心化、安全性、可扩展性三者不可兼得。当前主流解决思路:模块化区块链(执行层 + DA 层 + 共识层分离)和 Rollup 路线图。

Optimistic Rollup 和 ZK Rollup 各自的优缺点是什么

思路:OP Rollup 用欺诈证明(7 天挑战期、兼容性好、证明成本低),ZK Rollup 用有效性证明(即时最终性、安全性更强、但电路开发复杂)。提到 EVM 兼容性差异(OP 更成熟,ZK 正在追赶)。

请解释 EVM 的账户模型。EOA 和合约账户有什么区别

思路:EOA 有私钥、能发起交易但没有代码;合约账户有代码、有存储但没有私钥。提到账户抽象(ERC-4337)如何模糊两者边界。

跨链桥有哪些常见的安全风险?举一个真实的跨链桥攻击案例

思路:验证者/多签密钥泄露、消息伪造、重放攻击。经典案例:Ronin Bridge(6.25 亿美元,验证者密钥被盗)、Wormhole(3.2 亿美元,签名验证绕过)。

什么是 MEV?它对普通用户有什么影响

思路:Maximal Extractable Value,验证者/搜索者通过交易排序获取的额外价值。对用户的影响:三明治攻击导致更差的成交价、Gas 战争推高手续费。缓解方案:Flashbots、OFA、加密 Mempool。

后端/DevOps


后端

如何设计一个可靠的链上事件监听服务?需要处理哪些边缘情况

思路:使用 eth_getLogs 或 WebSocket 订阅事件。边缘情况:① 链重组(Reorg)——已确认的事件可能被撤销 ② 节点断连——需要记录已处理的 block number 并支持断点续传 ③ 大量事件的批处理——使用分页查询 ④ 不同链的确认数要求不同。

请解释 TheGraph 的 Subgraph 是什么,以及何时应该用 Subgraph vs 自建索引

思路:Subgraph 是声明式的链上数据索引方案(定义 schema + event handler → 自动索引 → GraphQL 查询)。优点:快速上手、托管服务。缺点:复杂查询受限、性能不可控。当需要自定义聚合逻辑、跨链数据或高性能时,用自建索引(Ponder / 自建 ETL)。参考 24.2。


DevOps

以太坊的 Full Node 和 Archive Node 有什么区别?什么业务场景需要 Archive Node

思路:Full Node 只保留当前状态 + 最近的区块数据,Archive Node 保留所有历史状态。Archive 所需磁盘空间远大于 Full(TB 级)。需要 Archive 的场景:历史数据查询、链上分析、调试历史交易、Dune/TheGraph 等数据服务。

链升级(硬分叉)时,节点运维需要做什么

思路:① 提前关注升级公告和时间线 ② 在测试网上验证新版本兼容性 ③ 在硬分叉前升级客户端版本 ④ 监控升级后的节点状态(同步进度、Peer 连接、出块情况)⑤ 准备回滚方案。

智能合约

面试通常包含Solidity 编码 + 安全知识 + DeFi 原理三个维度。


Solidity

Solidity 中 storagememorycalldata 的区别是什么?什么时候用哪个

思路:storage 持久化到链上(最贵)、memory 临时存在于函数执行期间、calldata 只读且只用于 external 函数参数(最便宜)。Gas 优化时优先用 calldata 和 memory

什么是重入攻击(Reentrancy)?如何防御

思路:攻击者在外部调用中递归回调目标合约,在状态更新前反复提取资金。经典案例:The DAO Hack。防御:Checks-Effects-Interactions 模式、ReentrancyGuard(OpenZeppelin)、使用 transfer/send 限制 Gas。

解释 delegatecall 的工作原理。它有什么安全风险

思路:delegatecall 在调用者的上下文(storage、msg.sender、msg.value)中执行目标合约的代码。用于代理模式(Proxy Pattern)。风险:存储布局冲突、恶意实现合约。

ERC-20 的 approve + transferFrom 模式有什么问题?ERC-2612(Permit)是如何改进的

思路:approve 需要一笔额外交易(额外 Gas)、无限授权(Infinite Approval)的安全风险。Permit 使用链下签名(EIP-712)来授权,一笔交易完成授权+转账。

请解释代理模式(Proxy Pattern)的工作原理。Transparent Proxy 和 UUPS 有什么区别

思路:Proxy 将调用 delegatecall 到 Implementation 合约,实现可升级性。Transparent Proxy 由 ProxyAdmin 管理升级,admin 调用走 Proxy 逻辑,用户调用走 Implementation;UUPS 的升级逻辑放在 Implementation 中,更省 Gas。


DeFi

请解释 Uniswap V2 的 AMM 核心公式 x×y=k。当用户用 Token A 换 Token B 时,价格是如何计算的?

思路:恒定乘积公式。swap 后新的 reserve 满足 (x+Δx)(y-Δy)=k。实际输出 Δy = yΔx/(x+Δx)。加分:讨论滑点、手续费(0.3%)对 k 的影响

什么是闪电贷(Flash Loan)?它的原子性是如何保证的?

思路:在一笔交易内借款+使用+还款,如果未还款则整笔交易 revert。原子性由 EVM 的交易回滚机制保证。常见用途:套利、清算、自我清算。常见攻击向量:价格操纵。

如何在 Solidity 中安全地处理除法和精度问题?

思路:Solidity 没有浮点数,必须用整数模拟。常见做法:乘以精度因子(如 1e18)再除。注意先乘后除避免精度丢失。使用 OpenZeppelin 的 Math 库。提到 rounding 方向对借贷协议安全性的影响。


Gas优化

列举 3–5 种常见的 Gas 优化技巧。

思路:① 使用 calldata 替代 memory ② 变量打包(Struct Packing,将多个小变量放入同一个 32 字节 slot)③ 使用 unchecked 块跳过溢出检查(在安全场景下)④ 避免重复读取 storage(缓存到 memory)⑤ 使用 events 替代 storage 存储历史数据 ⑥ 使用 immutable/constant。

Live Coding

先说思路再写代码、先写接口再写实现、随手写注释、主动提及安全考虑

  • 写一个简化版的 ERC-20 合约——考察基础 Solidity 能力
  • 实现一个简单的多签钱包——考察 access control 和状态管理
  • 写一个荷兰拍卖合约——考察时间逻辑和价格计算
  • 给你一段有漏洞的合约,修复它——考察安全意识
  • 用 Foundry 为这个合约写测试——考察测试能力

系统设计

  • 设计一个 NFT 市场的后端架构——索引、搜索、缓存、链上/链下数据分离
  • 设计一个链上数据监控告警系统——事件监听、异常检测、通知
  • 设计一个支持多链的钱包服务——密钥管理、链抽象、安全性
  • 设计一个高可用的 RPC 节点集群——负载均衡、故障转移、监控

前端开发

分为传统前端能力 + Web3 交互层知识两部分。

用户在 DApp 中点击Swap按钮后,从前端到链上确认,完整的数据流是什么

思路:用户点击 → 前端构建交易参数 → 调用钱包 SDK(wagmi/ethers)发起签名请求 → 钱包弹出确认 → 用户签名 → 交易广播到 RPC 节点 → 进入 Mempool → 被打包进区块 → 前端监听交易 hash → 等待区块确认 → 更新 UI 状态。关键:处理 pending / confirmed / failed 三种状态。

你如何实现 DApp 的多链支持?用户切换链时需要处理什么

思路:使用 wagmi 的 chain 配置支持多链。切换链时需要:① 调用 wallet_switchEthereumChain ② 更新 RPC Provider ③ 刷新当前链的余额/合约数据 ④ 处理用户拒绝切链的情况 ⑤ 如果目标链未添加,调用 wallet_addEthereumChain。

DApp 前端如何优化首屏加载性能

思路:① Code splitting(动态加载钱包 SDK)② 使用 SSR/SSG(Next.js)预渲染非链上内容 ③ 懒加载链上数据(TanStack Query + suspense)④ 避免在首屏加载时就连接钱包 ⑤ 使用 Skeleton UI 占位

什么是 Token Approval?为什么它是一个安全风险?前端应该如何处理

思路:用户在使用 DeFi 前需要 approve 合约操作自己的 Token。无限 approve(type(uint256).max)是常见做法但有安全风险。前端最佳实践:默认推荐有限授权(exact amount)、显示当前授权额度、提供 revoke 入口。提到 Permit2 作为更安全的替代方案。

如何在前端实时显示链上数据(如 Token 价格、池子深度)

思路:① 轮询 RPC(最简单但效率低)② 使用 WebSocket 订阅事件(eth_subscribe)③ 使用 TheGraph Subgraph 查询索引数据 ④ 使用 TanStack Query 管理缓存和过期策略 ⑤ 考虑使用 Alchemy / QuickNode 的增强 API 获取聚合数据

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计