Node.js 后端 + 简易运维岗---面试全套指南(2)

框架 & 业务实战

1)Express / Koa / NestJS 对比

Express

  • 特点:封装完整、自带路由、中间件、内置很多功能
  • 优点:生态最成熟、文档多、上手快
  • 缺点:中间件是顺序执行,不支持洋葱模型;异步异常需要手动处理

Koa

  • 特点:更小、更简洁,基于 async/await
  • 优点:
    • 支持洋葱模型
    • 异常处理统一
    • 无捆绑,自由组合
  • 缺点:需要自己装中间件(路由、跨域、静态服务等)

NestJS

  • 特点:企业级、TypeScript、依赖注入、模块化
  • 优点:结构规范、适合大型项目、微服务友好
  • 缺点:重、学习成本高

2)Koa 洋葱模型原理

核心一句话

请求先进去一层层穿过中间件,响应再原路一层层回来

执行顺序

  1. 中间件 1 进入 → next ()
  2. 中间件 2 进入 → next ()
  3. 中间件 3 进入 → 业务逻辑
  4. 中间件 3 返回
  5. 中间件 2 返回
  6. 中间件 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(物联网、小消息)
  • 考察点

  • 有没有用过生产者 / 消费者
  • 消息确认机制
  • 重复消费问题(幂等)
  • 消息丢失怎么处理
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值