框架 & 业务实战
1)Express / Koa / NestJS 对比
Express
- 特点:封装完整、自带路由、中间件、内置很多功能
- 优点:生态最成熟、文档多、上手快
- 缺点:中间件是顺序执行,不支持洋葱模型;异步异常需要手动处理
Koa
- 特点:更小、更简洁,基于 async/await
- 优点:
- 支持洋葱模型
- 异常处理统一
- 无捆绑,自由组合
- 缺点:需要自己装中间件(路由、跨域、静态服务等)
NestJS
- 特点:企业级、TypeScript、依赖注入、模块化
- 优点:结构规范、适合大型项目、微服务友好
- 缺点:重、学习成本高
2)Koa 洋葱模型原理
核心一句话
请求先进去一层层穿过中间件,响应再原路一层层回来。
执行顺序
- 中间件 1 进入 → next ()
- 中间件 2 进入 → next ()
- 中间件 3 进入 → 业务逻辑
- 中间件 3 返回
- 中间件 2 返回
- 中间件 1 返回
app.use(async (ctx, next) => { console.log(1) await next() console.log(4) }) app.use(async (ctx, next) => { console.log(2) await next() console.log(3) })输出:1 → 2 → 3 → 4
3)数据库实操(MySQL / MongoDB / Redis)
(1)Redis 三大问题:穿透 / 击穿 / 雪崩
① 缓存穿透
- 现象:查不存在的数据,缓存没有,直接查 DB
- 危害:大量请求压垮 DB
- 解决:
- 缓存空值
- 布隆过滤器
- 参数校验拦截非法查询
② 缓存击穿
- 现象:某个热点 key 过期,大量请求同时打 DB
- 解决:
- 互斥锁(分布式锁)
- 热点 key 永不过期
- 异步更新缓存
③ 缓存雪崩
- 现象:大量 key 同一时间过期 或 Redis 宕机
- 解决:
- 过期时间加随机值
- 集群、高可用
- 限流 + 降级
- 互斥锁
(2)MySQL 基础能力
必须会:
- 分页:
limit offset, size- 简单聚合:
count、sum、group by、order by- 事务:
begin、commit、rollback- 索引:where 字段、联合索引最左匹配
合格后端必须能手写。
4)接口设计 RESTful & 统一格式
RESTful 规范落地
- 使用 HTTP 方法表示行为:
- GET:查询
- POST:新增
- PUT:全量修改
- PATCH:部分修改
- DELETE:删除
- URL 使用名词复数:
/users、/users/123- 状态码规范:
- 200 成功
- 201 创建成功
- 400 参数错误
- 401 未登录
- 403 无权限
- 404 不存在
- 500 服务器错误
5)中间件 & 消息队列(异步解耦)
消息队列作用
- 异步:不阻塞主流程
- 解耦:模块不直接依赖
- 削峰:防止流量洪峰压垮服务
常见场景
- 发送短信 / 邮件
- 生成报表
- 日志上报
- 订单状态变更通知
- 数据同步
常用 MQ
- RabbitMQ / RocketMQ / Kafka
- 简单场景:MQTT(物联网、小消息)
考察点
- 有没有用过生产者 / 消费者
- 消息确认机制
- 重复消费问题(幂等)
- 消息丢失怎么处理
500

被折叠的 条评论
为什么被折叠?



