
这份清单适合后端、区块链开发、智能合约工程师、以及系统架构类岗位。
分为五个部分来梳理:
- 基础区块链原理
- 交易所系统设计
- 智能合约 / Web3 开发
- 性能与安全
- 常见开放性思考题
🧱 第一部分:基础区块链原理
一、区块链基础概念
1️⃣ 什么是区块链?
区块链是一种去中心化、不可篡改的分布式账本技术,通过加密哈希和共识机制在分布式节点间保持数据一致。
2️⃣ 区块由哪些部分组成?
区块 = 区块头(Header)+ 区块体(Body)。
- Header:包含前一区块哈希、时间戳、Merkle Root、Nonce、难度等
- Body:交易列表
3️⃣ 什么是 Merkle Tree?
一种哈希树结构,用于快速验证交易是否存在于区块中。 作用: 提高验证效率,只需 O(log n) 的哈希路径。
4️⃣ 区块链如何防止数据篡改?
每个区块包含前一区块哈希,任何篡改都会破坏整条链。 加上共识机制和多节点存储,形成防篡改系统。
5️⃣ 什么是哈希函数?常见算法有哪些?
哈希函数能将任意长度输入映射为固定长度输出。 常见:SHA-256(比特币)、Keccak-256(以太坊)。
6️⃣ 哈希碰撞是什么意思?
不同输入产生相同哈希输出。好的哈希算法应几乎不可能产生碰撞。
7️⃣ 区块链和数据库的区别?
| 特性 | 区块链 | 传统数据库 |
| 数据控制 | 去中心化 | 中心化 |
| 可篡改性 | 不可篡改 | 可编辑 |
| 共识机制 | 有 | 无 |
| 写入速度 | 慢 | 快 |
8️⃣ 什么是共识机制?
用于在去中心化网络中就交易顺序达成一致的算法。
9️⃣ 常见共识算法有哪些?
- PoW(工作量证明)
- PoS(权益证明)
- DPoS(委托权益证明)
- PBFT(实用拜占庭容错)
- PoA(权威证明)
10️⃣ 什么是拜占庭将军问题?
多个节点中存在恶意参与者,如何保证消息一致性。 PBFT 共识是该问题的解决方案之一。
二、交易与账户机制
11️⃣ UTXO 模型是什么?
每笔交易的输入必须消耗前一笔交易的输出。 用于比特币,简单安全但不便于智能合约。
12️⃣ 账户模型是什么?
每个账户有余额和状态(如 Ethereum),适合智能合约。
13️⃣ 区块链交易的生命周期?
交易创建 → 签名 → 广播 → 打包 → 确认 → 最终性。
14️⃣ 什么是 Nonce?
每笔交易的序号,用来防止重放攻击。
15️⃣ 为什么交易需要签名?
保证交易发起者身份真实、不可抵赖、防篡改。
16️⃣ 什么是数字签名?
利用非对称加密的私钥生成签名,公钥可验证。 算法:ECDSA、Ed25519。
17️⃣ 为什么要用椭圆曲线加密(ECC)?
提供更高安全性与更短密钥长度。
18️⃣ 什么是公钥、私钥、地址?
私钥 → 公钥(椭圆曲线乘法) → 地址(Keccak 哈希)。
19️⃣ 助记词是什么?
私钥的可读形式(BIP-39 标准)。 通过种子生成确定性钱包(HD Wallet)。
20️⃣ 什么是 Gas?
执行交易或合约的计算费用。 以太坊采用 Gas 机制防止资源滥用。
三、区块链网络与节点
21️⃣ 节点类型有哪些?
- 全节点(Full Node)
- 轻节点(Light Node)
- 挖矿节点(Miner Node)
- 存档节点(Archive Node)
22️⃣ 区块链节点如何同步?
使用 P2P 网络,区块按高度传播;节点验证签名与哈希后写入本地账本。
23️⃣ 什么是创世区块(Genesis Block)?
链的第一个区块,硬编码在协议中,不含前区块哈希。
24️⃣ 什么是区块高度?
区块在链中的位置编号。创世区块高度为 0。
25️⃣ 什么是最终性(Finality)?
指交易一旦被确认后不可逆。 PoW 中为概率最终性,PoS 中可实现确定性最终性。
26️⃣ 交易确认数(Confirmations)是什么意思?
当前区块高度 – 交易所在区块高度。通常越多越安全。
27️⃣ 为什么 PoW 能防止双花?
篡改区块需要重新计算哈希难度,成本极高。
28️⃣ 什么是 51% 攻击?
攻击者控制超过半数算力,可重组区块、双花交易。 防御:提高难度、延迟确认。
29️⃣ 什么是矿工费?
用户支付给打包交易的节点或验证者的费用。
30️⃣ 什么是区块奖励?
新区块生成时系统奖励矿工的代币。
四、Layer1、Layer2 与跨链
31️⃣ 什么是 Layer1?
基础主链,如 Bitcoin、Ethereum。
32️⃣ 什么是 Layer2?
主链之外的扩展层,用于提高 TPS、降低费用。 例:Optimism、Arbitrum(Rollup 技术)。
33️⃣ Rollup 是什么?
将多笔交易打包后在主链上提交一个摘要。
- Optimistic Rollup:假设正确
- ZK Rollup:使用零知识证明验证正确性。
34️⃣ 什么是跨链?
不同链之间的资产和数据交互。 实现:多签桥、轻客户端验证、MPC 中继。
35️⃣ 什么是跨链桥的安全风险?
主要风险在桥的验证机制(多签私钥泄露、Relay 篡改)。
36️⃣ 什么是 Oracle(预言机)?
将链下数据安全引入区块链的服务。 常见:Chainlink、Band Protocol。
37️⃣ Oracle 为什么重要?
智能合约无法直接访问链下数据。Oracle 提供外部数据可信输入。
38️⃣ 什么是多签钱包?
交易需多个私钥签名后执行(M-of-N 模式)。 提高安全性。
39️⃣ 什么是 MPC 钱包?
使用多方计算生成签名,无需集中私钥存储。 优点:无单点泄露风险。
40️⃣ 什么是账户抽象(Account Abstraction)?
将账户与签名逻辑解耦,使智能合约账户具备自定义验证规则。 EIP-4337 实现该机制。
五、安全与性能机制
41️⃣ 什么是双重花费(Double Spending)?
同一笔资产被重复使用。 区块链通过共识和确认机制防止。
42️⃣ 什么是重放攻击?
旧交易在不同链上重复提交。 防御:链 ID、Nonce、签名域分隔(EIP-155)。
43️⃣ 什么是随机数问题?
区块链是确定性系统,链上随机数容易被预测。 解决:VRF(可验证随机函数)或 Oracle 随机数。
44️⃣ 为什么区块链速度慢?
去中心化共识导致同步开销大;每笔交易都需广播并验证。
45️⃣ 区块链的 TPS 如何提高?
分片(Sharding)、Rollup、并行执行(如 Solana Runtime)。
46️⃣ 区块链的扩容“三难问题”?
同时实现去中心化、安全性、扩展性三者极难兼得。 任何系统只能在三者中权衡。
47️⃣ 为什么需要节点激励?
无激励机制节点不会自发维护网络。激励通常为区块奖励 + 手续费。
48️⃣ 什么是链重组(Reorg)?
当出现分叉时,节点选择更长的链作为主链,短链交易会被回滚。
49️⃣ 什么是状态树(State Trie)?
以太坊使用 Merkle Patricia Trie 保存账户状态,实现快速验证。
50️⃣ 什么是链下存储与链上存储的区别?
| 项目 | 链上 | 链下 |
| 存储位置 | 区块链内部 | 外部系统(IPFS、Arweave) |
| 成本 | 高 | 低 |
| 可验证性 | 高 | 需校验哈希 |
⚙️ 第二部分 · 交易所系统设计(CEX + DEX)
一、交易所总体架构(CEX)
1️⃣ CEX 的核心模块有哪些?
用户系统、KYC 模块、撮合引擎、订单系统、资产账本、钱包系统、风控系统、行情系统、API 网关、清结算模块。
2️⃣ 撮合引擎的核心逻辑是什么?
按「价格优先、时间优先」匹配买卖订单。 常用数据结构:价格优先队列(红黑树、SkipList)。
3️⃣ 撮合引擎的性能如何提升?
单线程模型(防止锁竞争),内存撮合(in-memory order book),批量撮合提交异步落盘。
4️⃣ 如何保证撮合结果一致性?
使用顺序消息队列(Kafka / NATS),每个交易对单独分区处理,保证 FIFO 顺序。
5️⃣ 撮合与账本如何保持原子性?
采用事件溯源(event sourcing)模式:撮合产生事件 → 账本异步更新 → 一致性由日志保证。
6️⃣ 交易所的订单生命周期?
下单 → 撮合 → 成交 / 撤单 → 结算 → 更新余额 → 推送用户与行情。
7️⃣ 限价单、市场单、止盈止损单的区别?
- 限价单:按设定价格成交
- 市价单:按市场最优价立即成交
- 止盈止损单:触发条件后转为限价或市价单。
8️⃣ 订单簿结构如何实现?
通常为两棵平衡树:买单(降序)和卖单(升序)。每个价格节点下挂时间链表。
9️⃣ 撮合系统如何保证幂等性?
每笔订单都有唯一 ID,使用事务日志校验;重复请求直接忽略。
🔟 撮合引擎如何处理高并发?
按交易对分区,异步队列串行处理。可多进程并行不同交易对。
二、资产账本与结算系统
11️⃣ 交易所资产账本如何设计?
三层结构:
- 可用余额(available)
- 冻结余额(frozen)
- 总余额(total) 每笔操作都需可追溯(事务日志)。
12️⃣ 撮合后如何更新账本?
成交事件触发余额变更:
- 买方:扣除资金,增加资产
- 卖方:扣除资产,增加资金。
13️⃣ 如何防止资产不一致?
使用双账本模型(交易账本 + 冻结账本),定期做 reconciliation(对账)。
14️⃣ 交易所如何防止余额负数?
订单前置检查余额,风控层锁定资金后才入队撮合。
15️⃣ 清结算流程是什么?
按交易对统计成交 → 批量计算用户盈亏 → 更新账本 → 生成日报。
16️⃣ 如何防止重复结算?
使用事务号 + 幂等操作日志。
17️⃣ 用户资产冻结机制是什么?
下单前冻结可用资金;撤单或成交后释放或更新。
18️⃣ 撮合失败或撤单后如何回滚?
日志式账本设计,可按事务反向操作(undo event)。
19️⃣ 如何实现交易快照?
定期生成订单簿和账户状态快照,支持灾备恢复。
20️⃣ 如何防止撮合结果丢失?
持久化消息队列(Kafka)或日志备份(append-only log)确保恢复一致性。
三、钱包与资金系统
21️⃣ 钱包系统架构?
冷钱包(离线存储)+ 热钱包(在线交易)+ 归集系统(定时归集资产)。
22️⃣ 冷钱包与热钱包的区别?
冷:安全高但慢;热:快但易受攻击。 大部分资金存冷钱包,小部分在热钱包。
23️⃣ 提币流程?
提币申请 → 风控审核 → 签名 → 广播链上 → 确认到账。
24️⃣ 如何防止提币风险?
多签审批、白名单、KYT 地址风控、异常提币报警。
25️⃣ 如何做多链钱包支持?
抽象链适配层,对接不同 RPC、签名标准、Gas 模型。
26️⃣ 什么是冷热分离机制?
定时将热钱包多余资产归集至冷钱包。
27️⃣ 钱包签名如何实现?
使用 HSM(硬件安全模块)或 MPC(多方计算)生成签名。
28️⃣ 钱包私钥泄露如何应急?
立即冻结提币、迁移新地址、链上公告、追踪资金流。
29️⃣ 钱包系统与账本如何同步?
提币和充值均需链上监听 + 数据库入账对齐。
30️⃣ 区块确认数与充值到账关系?
一般要求 N 个确认后入账(BTC 6 次、ETH 12 次)。
四、行情系统与API设计
31️⃣ 行情系统数据来源?
撮合成交事件、订单簿深度快照、外部市场聚合源(如 Binance API)。
32️⃣ 如何实现实时行情推送?
使用 WebSocket + Redis Pub/Sub 实时推送。
33️⃣ K线数据如何生成?
通过撮合日志聚合成交数据(按 1m、5m、1h)生成蜡烛图。
34️⃣ 如何保证行情与成交一致?
所有行情数据应来源于撮合引擎的成交日志(单一数据源)。
35️⃣ 行情服务如何做缓存?
Redis、Kafka Stream 维护最新深度快照。
36️⃣ 如何防止行情延迟?
分层推送架构:撮合引擎→推送网关→用户客户端。
37️⃣ REST API 与 WebSocket 区别?
REST 适合请求响应;WebSocket 适合实时订阅。常同时提供。
38️⃣ API 如何限流防刷?
基于 Token Bucket / Leaky Bucket + 用户身份(IP / API Key)维度限流。
39️⃣ API 鉴权方式有哪些?
API Key + Secret + Timestamp 签名验证。 部分支持 JWT 或 OAuth2。
40️⃣ 如何防止订单重复提交?
客户端生成
clientOrderId,后端去重。
五、去中心化交易所(DEX)
41️⃣ DEX 的核心组成?
智能合约(AMM / 限价撮合)+ 前端 + 钱包 + Oracle。
42️⃣ 什么是 AMM(自动做市商)?
算法自动定价模型,不依赖订单簿。 典型公式:x * y = k(Uniswap V2)。
43️⃣ 如何计算交易价格?
Δx * Δy = k 新价格 = y / x 滑点 ∝ 交易量 / 池深度。
44️⃣ 如何防止价格操纵?
使用 TWAP(时间加权价格)或 Chainlink Oracle。
45️⃣ 流动性提供者(LP)的收益来源?
手续费分红 + 流动性挖矿奖励。
46️⃣ LP Token 是什么?
流动性提供者的份额凭证,可赎回资金或参与挖矿。
47️⃣ 什么是 Impermanent Loss(无常损失)?
LP 资产在池内相对持有单币种时的价值损失。 原因:价格波动导致资产比例变化。
48️⃣ 什么是闪电贷?
一种在同一笔交易内借款并归还的机制。 用于套利或攻击。 防御:验证价格来源、时间锁。
49️⃣ 什么是聚合交易(Aggregator)?
汇聚多个 DEX 流动性来源(1inch、Matcha),为用户找到最优路径。
50️⃣ DEX 与 CEX 的核心区别?
| 维度 | CEX | DEX |
| 资产托管 | 平台托管 | 用户自托管 |
| 撮合方式 | 链下撮合 | 链上合约 |
| 性能 | 高 | 较低 |
| 风险 | 平台风险 | 合约风险 |
💡 第三部分 · 智能合约 / Web3 开发
一、Solidity 基础与语言机制
1️⃣ Solidity 中 storage、memory、calldata 的区别?
storage:永久存储在链上(状态变量)。memory:函数执行时的临时内存。calldata:只读的外部函数参数存储区域,节省 Gas。
2️⃣ payable 修饰符的作用是什么?
表示该函数/地址可以接收以太币。没有
payable的函数即使发送 ETH 也会报错。
3️⃣ fallback() 和 receive() 函数的区别?
receive():当仅发送 ETH 且无 calldata 时调用。fallback():当调用未知函数或有 calldata 时调用。
4️⃣ 什么是 delegatecall?与 call 有何区别?
call: 在目标合约上下文执行。delegatecall: 在当前合约上下文执行目标逻辑。 常用于合约升级(代理合约模式)。
5️⃣ Solidity 中的继承与重写规则?
支持多继承,采用 C3 线性化解析。
override与virtual必须成对使用以明确继承层级。
6️⃣ 什么是重入攻击(Reentrancy Attack)?如何防御?
攻击者在外部调用中再次调用原合约函数。 防御:
- 修改状态前转账(Checks-Effects-Interactions)。
- 使用
ReentrancyGuard。
7️⃣ Solidity 中事件(event)的作用?
事件存储在交易日志中,用于链上链下通信,前端可通过 Web3 监听。
8️⃣ require、assert、revert 的区别?
require:用于输入验证,会退还剩余 Gas。assert:用于内部错误检查,会消耗全部 Gas。revert:手动触发异常。
9️⃣ 什么是 ABI 编码?
ABI(Application Binary Interface)定义了函数和参数如何被编码传输。 所有链上交互都遵循 ABI 编码规则。
🔟 什么是函数选择器(Function Selector)?
取函数签名
keccak256("funcName(type1,type2,...)")的前4字节。 用于标识调用哪个函数。
二、EVM 与合约架构原理
11️⃣ EVM 是如何执行智能合约的?
合约字节码通过栈机(stack machine)运行,按 OPCODE 指令逐步执行。
12️⃣ 什么是 Gas?
EVM 的执行成本度量单位,每个操作有固定 Gas 消耗,用以防止滥用。
13️⃣ 为什么会出现 out-of-gas 错误?
调用函数时 Gas 不足导致执行中断,状态回滚。
14️⃣ 以太坊存储成本为什么高?
因为链上存储是全节点永久维护的,需要经济激励防止滥用。
15️⃣ EVM 中的 msg.sender 与 tx.origin 区别?
msg.sender:当前直接调用者(合约或外部账户)。tx.origin:最初发起交易的外部账户。 不安全用法:使用tx.origin进行授权校验可能被钓鱼攻击。
16️⃣ 如何实现合约的自毁?
使用
selfdestruct(address)指令,将余额发送并删除代码。 注意:EIP-6049 建议避免使用。
17️⃣ 合约地址是如何生成的?
keccak256(rlp(sender, nonce))前 20 字节生成。
18️⃣ 什么是 CREATE2?
用盐值(salt)+ 字节码生成确定性地址。 用于合约预部署、元交易。
19️⃣ 什么是 Proxy 合约?
代理模式,用
delegatecall将逻辑委托给实现合约,可实现合约升级。
20️⃣ 可升级合约的实现方式有哪些?
- Proxy 模式(Transparent / UUPS / Beacon)。
- Diamond Pattern(EIP-2535)。
三、智能合约设计模式
21️⃣ Ownable 模式的用途?
限制管理操作,仅 owner 可执行。常用库:
OpenZeppelin Ownable。
22️⃣ Role-Based Access Control (RBAC) 是什么?
多角色权限系统,如
DEFAULT_ADMIN_ROLE、MINTER_ROLE。
23️⃣ Pausable 模式用途?
用于在紧急情况下暂停关键功能。
24️⃣ Pull over Push 模式是什么?
推荐用户主动提取资金而不是被动发送,以防止重入攻击。
25️⃣ Circuit Breaker(断路器)模式?
遇到异常情况暂停合约操作,防止扩大损失。
26️⃣ Upgrade Proxy 与 Transparent Proxy 区别?
- Transparent:逻辑和管理分离,防止管理员误调用逻辑。
- UUPS:逻辑合约内自升级,更节省 Gas。
27️⃣ EIP-1822 的 UUPS 模式是什么?
“Universal Upgradeable Proxy Standard”,仅在逻辑合约内定义升级函数。
28️⃣ 如何实现白名单 / 黑名单机制?
使用
mapping(address => bool)存储状态 +modifier检查。
29️⃣ 如何实现限速(Rate Limit)机制?
记录上次调用时间戳 + 最小间隔检查。
30️⃣ 什么是多签(MultiSig)机制?
多个签名者需共同批准交易,提升安全性。
四、Web3.js / ethers.js 实践
31️⃣ 如何连接 MetaMask?
使用
window.ethereum.request({ method: 'eth_requestAccounts' })。
32️⃣ 如何发起链上交易?
构造交易对象
{ to, value, data },调用signer.sendTransaction(tx)。
33️⃣ 如何使用 ethers.js 调用智能合约函数?
const contract = new ethers.Contract(addr, abi, signer);
await contract.transfer(to, amount);
34️⃣ 如何监听链上事件?
contract.on("Transfer", (from, to, value) => { ... })
35️⃣ 如何用私钥离线签名?
const wallet = new ethers.Wallet(privateKey);
const signedTx = await wallet.signTransaction(tx);
36️⃣ 如何验证签名?
使用
ethers.utils.verifyMessage(message, signature)验证签名者。
37️⃣ 如何获取账户余额?
provider.getBalance(address)
38️⃣ 如何获取 ERC20 代币余额?
contract.balanceOf(address)
39️⃣ 如何估算 Gas?
provider.estimateGas(tx)
40️⃣ 什么是 EIP-1559 交易?
新的费用模型,包含
maxFeePerGas与maxPriorityFeePerGas。
五、安全与防御机制
41️⃣ 常见合约漏洞类型?
重入、整数溢出、权限滥用、随机数伪造、逻辑缺陷、闪电贷。
42️⃣ 什么是签名重放攻击?
重复使用旧签名在新交易中,需使用 nonce 防止。
43️⃣ 什么是闪电贷攻击?
攻击者借巨额资金瞬间操控价格再归还。防御:价格校验 + 延时机制。
44️⃣ 什么是 Oracle Manipulation?
篡改预言机价格源。防御:多源喂价 + 去中心化预言机。
45️⃣ 如何防止整数溢出?
使用 Solidity ^0.8 自动溢出检查,或 SafeMath(旧版本)。
46️⃣ 什么是 Front-running 攻击?
交易被矿工或机器人抢跑执行。防御:commit-reveal 机制。
47️⃣ 合约审计的重点有哪些?
权限控制、资金流动、事件记录、边界条件、异常回滚。
48️⃣ 如何安全地管理私钥?
使用 HSM、MPC 或硬件钱包。不要明文存储。
49️⃣ 如何避免钓鱼合约?
核对合约地址来源、校验 bytecode、使用官方验证源。
50️⃣ 如何进行链上安全监控?
部署 Watchdog 系统监听异常事件(大额转账、余额异常、权限变更)。
🔐 第四部分 · 安全、性能与架构
一、系统架构与高可用性设计
1️⃣ 交易所的系统架构一般包括哪些核心模块?
用户服务、撮合引擎、订单系统、资产账本、钱包系统、风控、行情、清结算、API 网关、监控系统。
2️⃣ 撮合系统为什么通常采用单线程?
撮合要求严格顺序与原子性,单线程可避免锁竞争与并发不一致问题。
3️⃣ 撮合引擎如何做高可用?
双活/主备部署、实时状态同步(内存快照 + 日志重放)、心跳检测 + 自动切换。
4️⃣ 如何保证账本数据不丢失?
所有变更写入事务日志(append-only log),落盘并双写到备库。
5️⃣ 如何设计高性能行情系统?
撮合引擎产生日志 → Kafka → Redis Stream → WebSocket 推送,使用内存缓存减少磁盘 IO。
6️⃣ 行情延迟控制在多少算优秀?
一般小于 50ms(撮合到推送),顶级交易所甚至 <10ms。
7️⃣ 如何优化交易撮合延迟?
- 内存订单簿
- 无锁队列
- 零拷贝序列化(FlatBuffers、Cap’n Proto)
- CPU 亲和绑定
8️⃣ 如何防止系统单点故障?
服务无状态化 + Kubernetes / Consul 动态注册 + 自动恢复机制。
9️⃣ 交易所核心服务适合使用微服务架构吗?
撮合与账本通常单体或限域服务,外围系统微服务化以提高可扩展性。
🔟 如何实现系统水平扩展?
交易对分区(sharding by symbol),每个交易对独立撮合实例。
二、性能优化与并发控制
11️⃣ 撮合系统的吞吐瓶颈一般在哪?
磁盘 I/O、锁竞争、网络延迟、消息队列顺序处理。
12️⃣ 如何优化数据库性能?
- 分库分表
- 只存必要数据(冷数据归档)
- 使用 Redis 作为缓存层
- 异步写入日志系统
13️⃣ Redis 在交易系统中的作用?
缓存深度行情、订单簿、用户会话;用于限流、排行榜、Session 管理。
14️⃣ Kafka 在交易系统中的作用?
异步事件流(成交、撮合、结算、推送),解耦系统。
15️⃣ 如何处理高并发下的账户一致性?
通过“事件驱动账本”+“事务序列号”实现可重放、幂等。
16️⃣ 如何防止重复下单?
客户端生成唯一
clientOrderId,服务端检查去重。
17️⃣ 什么是幂等操作?
同一请求执行多次,结果一致。通过请求 ID 或哈希校验保证。
18️⃣ 撮合日志为什么必须顺序写?
顺序写可保证一致性并提升性能,减少随机 I/O。
19️⃣ 如何设计订单撤销机制?
撤单事件加入队列,与下单同通道处理,保持顺序一致。
20️⃣ 如何防止死锁?
串行撮合、严格资源锁顺序、使用内存结构替代数据库锁。
三、安全机制与风控设计
21️⃣ 交易所常见的安全攻击有哪些?
SQL 注入、CSRF、XSS、DDoS、钓鱼、API 滥用、内部越权、智能合约漏洞。
22️⃣ 如何防御 DDoS 攻击?
- CDN + WAF(Web Application Firewall)
- API 限流(Token Bucket)
- 异常流量黑名单。
23️⃣ API 防刷机制有哪些?
- 用户维度限速
- IP 限流
- 签名验证 + 时间戳有效期(防重放)。
24️⃣ 如何防止订单被篡改?
所有请求签名(HMAC-SHA256)并使用 HTTPS 传输。
25️⃣ 用户登录安全如何设计?
双因素认证(2FA)、设备指纹识别、异常登录拦截。
26️⃣ 如何防止内部滥用权限?
RBAC 权限分层,操作日志全链路审计,关键操作多签审批。
27️⃣ 钱包系统的最大安全风险是什么?
私钥泄露。
28️⃣ 如何安全地存储私钥?
使用 HSM(硬件安全模块)或 MPC(多方安全计算)替代明文存储。
29️⃣ 冷钱包与热钱包的安全边界?
冷钱包离线保存(隔离网络);热钱包仅保存必要资金。
30️⃣ 提币风控规则如何设计?
异常行为检测(大额、频繁、IP 异常、KYT 地址黑名单)。
四、智能合约与链上安全
31️⃣ 智能合约最常见漏洞?
重入攻击、整数溢出、未检查返回值、delegatecall 滥用、权限错误。
32️⃣ 什么是闪电贷攻击?
利用短时巨额资金操纵价格或清算逻辑。防御:验证价格、使用 TWAP。
33️⃣ 如何防止重入攻击?
修改状态后再外部调用,或使用
ReentrancyGuard。
34️⃣ 什么是 Oracle Manipulation?
攻击者操纵预言机喂价源。防御:多源数据 + 时间加权平均。
35️⃣ 什么是前置攻击(Front-running)?
矿工或机器人抢先执行有利交易。防御:commit-reveal、闪电保护机制。
36️⃣ 什么是签名重放攻击?
重复使用旧签名。防御:签名中加入 nonce + 链 ID。
37️⃣ 多签机制的安全意义?
避免单点私钥风险,多人共同签名后执行关键操作。
38️⃣ 合约如何审计?
代码扫描(Slither、Mythril)、人工逻辑审查、形式化验证。
39️⃣ 交易所如何检测钓鱼合约?
对地址进行白名单验证,或通过合约字节码指纹匹配。
40️⃣ 如何隔离不同用户资产风险?
每用户独立子账户账本或链上独立地址,防止串扰。
五、监控、告警与灾备
41️⃣ 如何设计交易系统监控?
收集指标(延迟、吞吐、错误率、资产一致性),Prometheus + Grafana 实时展示。
42️⃣ 日志系统应记录哪些关键内容?
用户操作、撮合事件、资金变更、风控报警、系统异常。
43️⃣ 如何检测资产异常?
账本余额与链上钱包余额比对(Reconciliation)。
44️⃣ 如何实现异常提币检测?
异常金额 / 地址模式分析 + 行为学习模型(机器学习风控)。
45️⃣ 如何防止日志伪造?
日志签名哈希链(hash chaining)或远程只读存储。
46️⃣ 系统灾备策略有哪些?
多机房部署、异地容灾、数据库异步复制、快照恢复。
47️⃣ 如何处理撮合引擎宕机恢复?
使用快照 + 事务日志重放(event replay)恢复订单簿。
48️⃣ 数据库故障如何自动切换?
主从复制 + 高可用组件(MHA / Orchestrator / Etcd 选举)。
49️⃣ 如何测试交易系统稳定性?
压测(JMeter、Locust)、混沌工程(Chaos Mesh)测试容错。
50️⃣ 如何监控链上与链下数据一致性?
定期对账:链上余额、账本余额、撮合成交记录多维比对。
💡 第五部分:Web3 交易所常见开放性思考题
一、系统设计类
1️⃣ 你如何从零设计一个中心化交易所(CEX)?
思路:核心组件(撮合引擎、订单系统、账本、钱包、清结算、风控、行情、API、监控) → 高可用架构(微服务 + Kafka + Redis) → 数据一致性。 面试官关注:你能否理解整个交易生命周期的技术闭环。
2️⃣ 如果撮合引擎要支持每秒 10 万笔订单,你怎么设计?
思路:单线程撮合 + 多交易对分片 + 内存结构 + Zero-Copy 通信 + 日志顺序写。 关注点:高性能与一致性兼顾。
3️⃣ 你如何在 CEX 架构中实现可水平扩展的账本系统?
思路:基于事件日志(Event Sourcing)设计,可通过账户分片或交易对分区。 关注点:一致性与性能平衡。
4️⃣ 交易撮合与资产变更之间如何确保原子性?
思路:使用“撮合日志”作为唯一信源,账本异步消费并重放日志,保证幂等性。
5️⃣ 如果 Redis 崩溃导致缓存失效,你如何防止资产数据错乱?
思路:账本数据来自持久化数据库;Redis 仅做缓存。冷启动时重建缓存。
6️⃣ 如果行情系统突然延迟 1 秒,会发生什么?
思路:行情延迟 → 价格判断失真 → 风控与清算受影响。 防御:多数据源、延迟监控、缓冲隔离。
7️⃣ 如何用微服务拆解交易所系统?
思路:用户/账户、撮合、资产、风控、钱包、行情、监控等独立服务,通过 Kafka 通信。
8️⃣ 如果你设计一个 DEX,如何处理撮合与结算?
思路:链下撮合 + 链上结算(Rollup 模式);或全链上 AMM 模型(Uniswap)。 关注:性能与信任权衡。
9️⃣ 如果 CEX 要接入链上资产,你如何实现充值与提币?
思路:链监听节点 + 热钱包监控 → 确认后写到账本;提币通过签名与风控审批。
🔟 如何保证撮合引擎重启后数据一致?
思路:快照 + 日志重放。保证状态恢复到崩溃前状态。
二、安全与风控类
11️⃣ 如果用户资金丢失,最可能的技术原因有哪些?
思路:热钱包被攻破、私钥泄露、内部越权、账本 bug、数据库回滚。 关注:安全治理体系。
12️⃣ 钱包系统的安全边界在哪里?
思路:冷钱包(离线)、热钱包(在线限额)、签名系统、HSM 或 MPC。
13️⃣ 如何防止内部人员窃取用户资产?
思路:多签 + 分权审批 + 操作审计 + 零信任架构。
14️⃣ 如果交易所遭遇 DDoS 攻击,你会如何应对?
思路:CDN + WAF + 限流 + 流量清洗 + 服务降级。
15️⃣ 你如何检测恶意交易或刷量?
思路:交易模式识别 + 频率分析 + IP / 设备 / 账户交叉检测。
16️⃣ 如何防止智能合约重入攻击?
思路:状态更新在前、外部调用在后;或使用
ReentrancyGuard。
17️⃣ 钱包私钥管理用 HSM 还是 MPC?为什么?
思路:
- HSM:成熟、硬件隔离、安全性高但成本大;
- MPC:可扩展、云化安全、高性能但较新。 关注:权衡分析能力。
18️⃣ 如果黑客在合约中埋后门,如何检测?
思路:代码审计 + 字节码 diff + ABI 验证 + 静态扫描。
19️⃣ 如何防止提币 API 被滥用?
思路:签名验证 + 双因素认证 + 限额 + 延时提现 + KYT 检查。
20️⃣ 如果区块链出现分叉,对交易所有什么影响?
思路:充值重复入账、提现丢失、对账不一致;需确认区块稳定性。
三、架构扩展与创新类
21️⃣ 如何让 CEX 支持多链资产?
思路:多链监听模块 + 通用接口层(Adapter Pattern)。
22️⃣ 如果交易量增长 10 倍,你如何扩展系统?
思路:水平扩展撮合节点、缓存分层、微服务拆分、分布式队列解耦。
23️⃣ 撮合系统与风控系统如何解耦?
思路:异步消息流(Kafka)、独立风控服务、延迟容忍设计。
24️⃣ 如果清算系统延迟,会造成什么后果?
思路:资产不一致、风控失效、用户余额显示错误。
25️⃣ 如何设计跨链 DEX 的资产安全模型?
思路:锁定资产 + 链间证明(轻客户端 / 中继器 / ZKP)。
26️⃣ 如何实现交易数据的不可篡改?
思路:Merkle Tree + 定期上链哈希 + 审计日志签名。
27️⃣ 如何保障系统在高频交易下仍保持一致性?
思路:单线程撮合、事件序列化、消息顺序保证。
28️⃣ 如果要实现去中心化撮合,你会怎么设计?
思路:链下订单簿 + 链上撮合验证(zkRollup / Validium)。
29️⃣ 如果让你设计一个“混合交易所”(Hybrid Exchange),你会怎么做?
思路:链下撮合、链上清算;结合 CEX 性能与 DEX 透明度。
30️⃣ 未来 Web3 交易所的核心竞争力是什么?
思路:安全、透明、性能、合规、流动性、跨链互操作、用户信任。
Hi, this is a comment.
To get started with moderating, editing, and deleting comments, please visit the Comments screen in the dashboard.
Commenter avatars come from Gravatar.