服务端2月18日 22:58
Koa 和 Express 有什么区别?洋葱模型原理是什么?Koa 和 Express 最大的区别是中间件模型:Express 是线性顺序执行,Koa 是洋葱模型——请求先进后出,每个中间件可以同时在请求阶段和响应阶段插入逻辑。
具体来说,Express 中间件按注册顺序依次执行,`next()` 调用后控制权交给下一个中间件,走完就结束了,不会再回来。Koa 通过 `async/await` 让 `await next()` 之后的代码在下游中间件执行完后继续运行,天然支持后置处理(比如统一加耗时日志、响应包装)。
其他关键区别:
- **体量**:Express 自带路由、静态文件服务等;Koa 核心只有约 550 行代码,路由等全靠第三...服务端2月19日 13:20
Jest 中 test.skip 和 test.only 有什么区别?Jest 用 .skip 排除测试,用 .only 聚焦测试——两种思路,作用对象都可以是单个 test 或整个 describe。
**跳过(skip)**:标记的测试不执行,但会在报告中显示为 skipped。
```javascript
test.skip('暂时不跑', () => { ... }); // 等价于 xtest / xit
describe.skip('整组跳过', () => { ... }); // 等价于 xdescribe
```
**聚焦(only)**:只执行标记的测试/套件,其余全部跳过。
```javascript
test.only('只...服务端2月19日 13:16
Jest 如何测试异步代码?4 种方式与常见坑Jest 测试异步代码有四种方式,按推荐优先级排列:async/await、resolves/rejects 匹配器、返回 Promise、done 回调。核心原则只有一个——**让 Jest 知道测试什么时候算完**。
最常用的是 async/await,直接在 test 函数加 `async`,用 `await` 等待异步结果:
```javascript
test('fetches user', async () => {
const user = await getUser(1);
expect(user.name).toBe('Alice');
});
```
如...服务端2月21日 01:01
什么是以太坊跨链技术?请解释跨链桥和资产转移机制跨链技术是连接不同区块链、实现资产与数据互操作的核心基础设施。面试中这道题考察的是对跨链原理的系统性理解,下面从核心机制、桥接模型、安全风险三个层面逐步拆解。
## 跨链解决什么问题
每条区块链都是独立的封闭系统,资产和状态无法直接跨链访问。跨链技术打破这种孤岛效应,让用户能在不同链之间转移资产、传递消息、调用合约。典型场景包括:将以太坊上的ETH转移到Polygon上使用DeFi协议、在Arbitrum和Optimism之间迁移流动性、通过中继链实现Cosmos生态与以太坊的消息互通。
## 跨链桥的核心模型
跨链桥是跨链资产转移最常用的实现方式。根据资产在两条链上的处理方式,...服务端2月19日 13:17
Jest 测试怎么运行和调试?常用命令有哪些?## 核心命令一览
运行测试最常用的几个命令:
```bash
# 运行所有测试
npx jest
# 运行指定文件
npx jest path/to/test.spec.js
# 运行匹配名称的用例
npx jest --testNamePattern="should add"
# 监听模式,文件变动自动重跑
npx jest --watch
# 只跑上次失败的用例
npx jest --onlyFailures
# 只跑和改动文件相关的用例
npx jest --onlyChanged
```
`--watch` 是日常开发最高频的选项,保存即跑,不用手动重复执行。`...服务端2月20日 23:55
Hardhat、Foundry、Truffle 有什么区别?以太坊开发框架怎么选?以太坊开发工具链的核心是三个框架:Hardhat、Foundry 和 Truffle。Truffle 已于 2023 年被 ConsenSys 停止维护,新项目不要再用。现在的选择基本就是 Hardhat 和 Foundry 二选一,或者混合使用。
Hardhat 基于 JavaScript/TypeScript,插件生态最丰富,适合全栈 DApp 开发——你的测试脚本可以方便地调用前端库、操作 DOM、集成 CI/CD。Foundry 用 Rust 写的,测试直接用 Solidity,编译和跑测试比 Hardhat 快 10 倍以上,内置 fuzz 测试和 invariant 测试,...服务端2月21日 01:03
以太坊改进提案 EIP 是什么?EIP-1559、ERC-20、ERC-721 有何区别?EIP(Ethereum Improvement Proposal)是以太坊社区提出新功能、标准和流程改进的正式机制,类似于比特币的 BIP。任何人都能提交,但只有经过社区讨论、技术审查和共识达成后才会被纳入协议。
EIP 分三类:**标准跟踪型**(影响协议或应用层,如 EIP-1559、ERC-20)、**元 EIP**(修改 EIP 流程本身)、**信息性 EIP**(指南性质,不涉及功能变更)。标准跟踪型下设 Core、Networking、Interface、ERC 四个子类型——其中 ERC(Ethereum Request for Comment)专指应用层标准,所以 E...服务端2月21日 00:55
以太坊交易的结构、生命周期和费用机制是怎样的?以太坊交易是从一个账户向另一个账户发起的状态变更请求。核心结构包含 nonce、to、value、data、gasLimit 等字段;生命周期经历创建→签名→广播→入池→打包→确认六个阶段;费用由 EIP-1559 的 Base Fee + Priority Fee 构成,Base Fee 会被销毁,Priority Fee 归验证者。
一笔交易本质上是对以太坊全局状态的修改指令。发起者用自己的私钥签名授权,网络验证者执行后将状态变更写入区块。理解交易机制的关键在于搞清楚三个问题:交易长什么样、怎么从发出去到最终确认、手续费怎么算。
## 追问
### EIP-1559 之前和之后...服务端2月20日 23:49
以太坊智能合约怎么开发?从写代码到上链部署的完整流程以太坊智能合约是部署在区块链上的自执行程序——条件满足就自动运行,没有人能中途拦住。开发流程分七步:选语言 → 搭环境 → 写合约 → 编译 → 测试 → 部署 → 验证,每一步都踩过坑才知道为什么这么排。
**选语言**:Solidity 是绝对主流,语法像 JavaScript,生态最完善。Vyper 适合对安全性要求极高的场景(Python 风格,刻意去掉继承和重载),Yul 是底层优化用的,日常开发基本不会直接写。
**搭环境**:三选一——Hardhat(JS/TS 开发者首选,插件生态好)、Foundry(Solidity 原生测试,编译速度快 10 倍以上,新项目越来越...服务端2月20日 23:53
以太坊 Layer 2 扩容方案有哪些?Rollups 与状态通道原理对比以太坊 Layer 2 是在主网(L1)之上构建的扩容层,核心思路是把大量交易的执行和计算挪到链下,只把最终结果提交回 L1,从而继承 L1 的安全性,同时把吞吐量提升 100 倍以上、Gas 费砍掉 90%-99%。
主流 L2 方案按安全性从高到低排列:Rollups(继承 L1 安全)> Plasma(部分继承)> 状态通道(特定场景安全)> 侧链(独立安全)。
**Rollups** 是目前绝对主流。它把上百笔交易在链下执行,压缩后打包提交到 L1。关键区分在验证方式:
- **Optimistic Rollup**(Arbitrum、Optimism):先假设交易都合法,...