面灵AI→

潍柴动力 后端开发面试:Redis 持久化、MongoDB 文档与异步回滚

时间
2026-09
来源
牛客网

《面试题目》

技术问题

  1. 本科阶段学的跟编程相关的课程有哪些?
  2. 项目以 Spring Boot 为主是吧?有接触过微服务的相关框架吗?
  3. Postman 测试的时候,需要登录的接口有测试过吗?你是怎么测试的?
  4. 后端连的数据库是哪个数据库?
  5. MongoDB 内存的文档结构是固定的,还是往一个索引文档里面存数据时格式也会变?
  6. 进行文档解析的时候,主要就是解析 Word、PDF 这种文档吗?
  7. Redis 异常停机,怎么保证数据依然不会丢失?
  8. 当前用了 Redis 很多特性,对 Redis 版本有要求吗?
  9. 异步消息有没有做过一些处理,比如异常回滚之类的?

非技术问题

  1. 信息了解渠道
  2. 在潍坊工作的意愿
  3. 考公考编的意愿
  4. 有没有女朋友

《参考解析》

  1. 「Redis 异常停机怎么不丢数据」要分层答,并主动给出代价:第一层是持久化机制的选择——RDB 是定时快照,恢复快但两次快照之间宕机会丢一段数据;AOF 记录写命令,appendfsync always 基本不丢但每条写都要落盘、吞吐会明显下降,everysec 是默认折中,最坏丢一秒数据,no 交给操作系统(最危险)。第二层是文件安全,AOF 的 no-appendfsync-on-rewrite、重写期间的缓冲、以及磁盘写失败后的策略都会影响丢不丢。第三层是架构:主从复制加哨兵做故障切换、或 Redis Cluster 做分片,感知与切换窗口内仍可能丢少量数据。最后一定要落到业务兜底——真正要求不丢的场景不该只指望 Redis,要用数据库事务、消息队列的确认与重试、幂等键来保证最终一致。能说出「先确认这个数据能不能接受丢,再决定 fsync 策略」,这题就答到工程层面了。

  2. Redis 版本要求这题考的是你有没有意识到特性与版本绑定:不同版本提供的能力不一样——5.0 的 Stream 与更好的内存回收、6.0 的多线程 IO 与 ACL、7.0 的分片 Pub/Sub 与 Function。更实际的是客户端与模块:客户端(Jedis/Lettuce/Redisson)对命令和集群协议的支持有版本下限,RedisJSON、Bloom、Search 这类能力要靠模块或 Redis Stack,同一套代码在低版本上会直接报未知命令。工程上的做法是:把版本写进部署清单和 docker-compose / 镜像 tag 里锁死,不依赖「运维装的那个版本」;避免用太新或已废弃的命令,升级前用测试环境跑一遍回归。

  3. MongoDB 的文档结构:默认不固定,但工程上要固定:集合本身不强制 schema,同一个集合里不同文档的字段和类型可以不同,这是它相对 MySQL 最大的区别,也是「往索引文档里存数据格式会变」的原因。但生产上通常会给集合加校验——MongoDB 原生支持 JSON Schema validator,用 ODM(如 Mongoose)时还能在应用层定义结构。要补两句代价:字段不固定会让查询与聚合难写、索引命中的前提是字段路径稳定、后期改结构没有迁移工具兜底;所以项目里一般约定「同一集合的字段集合固定,新增字段向后兼容」,并按访问模式决定嵌套还是引用。

  4. Postman 测带登录态的接口:核心是把鉴权做成可复用的变量:先在登录接口的 Tests 脚本里把响应中的 token 写进环境变量(pm.environment.set),再在集合或环境上配 Authorization 为 Bearer Token 并引用该变量,后续所有接口自动带上;token 会过期,可以在集合前置脚本里做刷新,或用 Pre-request Script 判断过期时间后重登。除了鉴权,还要测到——未带 token、过期 token、他人 token 访问自己的资源(水平越权)、普通用户调管理接口(垂直越权)、参数边界与类型错误、幂等(同一请求重放是否重复下单)。登录接口本身还要覆盖:密码错误次数限制、验证码、账号锁定、并发登录。

  5. 异步消息的异常回滚要想清楚「跨系统的失败怎么办」:本地事务能回滚,消息已经发出去就回不来了,所以要选一种一致性方案:本地消息表(业务写入与消息记录同库同事务,再由投递器扫表发送并重试)、事务消息 / 半消息(先发半消息,本地事务成功再提交可见)、或最大努力通知加强力对账。消费端必须做幂等(业务唯一键或消息去重表),失败要有重试策略与死信队列、人工兜底入口,并监控积压量。面试时举个自己的例子最好:什么场景、失败后怎么补偿、怎么验证没重复扣款。

  6. 文档解析与业务流程题,答法是把链路讲全:解析 Word、PDF、扫描件、图片各自的技术路线不同——原生 PDF 可以直接抽文本层(pdfminer、PDFBox),扫描 PDF 与图片必须先 OCR(PaddleOCR、Tesseract),Word 要用 POI 或 docx 解析拿结构化段落与表格,还要处理页眉页脚、水印、多栏排版这些噪声。链路是:文件上传与类型/大小校验 → 格式识别与分流 → 解析成结构化中间态 → 清洗与字段抽取 → 落库(关系型字段进 MySQL,长文本或不定结构进 MongoDB)→ 异步任务与进度回显。岗位相关的软性问题也有准备:被问「本科相关课程」「接触过微服务吗」,照实说并给出替代证据(自学项目、实习里用过的注册中心或网关),不要硬吹;被问地域意愿、考公考编、家庭情况这类问题,态度明确、口径一致,别在同一场面试里前后矛盾。