潍柴动力 后端开发面试:Redis 持久化、MongoDB 文档与异步回滚
- 时间
- 2026-09
- 来源
- 牛客网
《面试题目》
技术问题
- 本科阶段学的跟编程相关的课程有哪些?
- 项目以 Spring Boot 为主是吧?有接触过微服务的相关框架吗?
- Postman 测试的时候,需要登录的接口有测试过吗?你是怎么测试的?
- 后端连的数据库是哪个数据库?
- MongoDB 内存的文档结构是固定的,还是往一个索引文档里面存数据时格式也会变?
- 进行文档解析的时候,主要就是解析 Word、PDF 这种文档吗?
- Redis 异常停机,怎么保证数据依然不会丢失?
- 当前用了 Redis 很多特性,对 Redis 版本有要求吗?
- 异步消息有没有做过一些处理,比如异常回滚之类的?
非技术问题
- 信息了解渠道
- 在潍坊工作的意愿
- 考公考编的意愿
- 有没有女朋友
《参考解析》
-
「Redis 异常停机怎么不丢数据」要分层答,并主动给出代价:第一层是持久化机制的选择——RDB 是定时快照,恢复快但两次快照之间宕机会丢一段数据;AOF 记录写命令,
appendfsync always基本不丢但每条写都要落盘、吞吐会明显下降,everysec是默认折中,最坏丢一秒数据,no交给操作系统(最危险)。第二层是文件安全,AOF 的no-appendfsync-on-rewrite、重写期间的缓冲、以及磁盘写失败后的策略都会影响丢不丢。第三层是架构:主从复制加哨兵做故障切换、或 Redis Cluster 做分片,感知与切换窗口内仍可能丢少量数据。最后一定要落到业务兜底——真正要求不丢的场景不该只指望 Redis,要用数据库事务、消息队列的确认与重试、幂等键来保证最终一致。能说出「先确认这个数据能不能接受丢,再决定 fsync 策略」,这题就答到工程层面了。 -
Redis 版本要求这题考的是你有没有意识到特性与版本绑定:不同版本提供的能力不一样——5.0 的 Stream 与更好的内存回收、6.0 的多线程 IO 与 ACL、7.0 的分片 Pub/Sub 与 Function。更实际的是客户端与模块:客户端(Jedis/Lettuce/Redisson)对命令和集群协议的支持有版本下限,RedisJSON、Bloom、Search 这类能力要靠模块或 Redis Stack,同一套代码在低版本上会直接报未知命令。工程上的做法是:把版本写进部署清单和
docker-compose/ 镜像 tag 里锁死,不依赖「运维装的那个版本」;避免用太新或已废弃的命令,升级前用测试环境跑一遍回归。 -
MongoDB 的文档结构:默认不固定,但工程上要固定:集合本身不强制 schema,同一个集合里不同文档的字段和类型可以不同,这是它相对 MySQL 最大的区别,也是「往索引文档里存数据格式会变」的原因。但生产上通常会给集合加校验——MongoDB 原生支持 JSON Schema validator,用 ODM(如 Mongoose)时还能在应用层定义结构。要补两句代价:字段不固定会让查询与聚合难写、索引命中的前提是字段路径稳定、后期改结构没有迁移工具兜底;所以项目里一般约定「同一集合的字段集合固定,新增字段向后兼容」,并按访问模式决定嵌套还是引用。
-
Postman 测带登录态的接口:核心是把鉴权做成可复用的变量:先在登录接口的 Tests 脚本里把响应中的 token 写进环境变量(
pm.environment.set),再在集合或环境上配 Authorization 为 Bearer Token 并引用该变量,后续所有接口自动带上;token 会过期,可以在集合前置脚本里做刷新,或用 Pre-request Script 判断过期时间后重登。除了鉴权,还要测到——未带 token、过期 token、他人 token 访问自己的资源(水平越权)、普通用户调管理接口(垂直越权)、参数边界与类型错误、幂等(同一请求重放是否重复下单)。登录接口本身还要覆盖:密码错误次数限制、验证码、账号锁定、并发登录。 -
异步消息的异常回滚要想清楚「跨系统的失败怎么办」:本地事务能回滚,消息已经发出去就回不来了,所以要选一种一致性方案:本地消息表(业务写入与消息记录同库同事务,再由投递器扫表发送并重试)、事务消息 / 半消息(先发半消息,本地事务成功再提交可见)、或最大努力通知加强力对账。消费端必须做幂等(业务唯一键或消息去重表),失败要有重试策略与死信队列、人工兜底入口,并监控积压量。面试时举个自己的例子最好:什么场景、失败后怎么补偿、怎么验证没重复扣款。
-
文档解析与业务流程题,答法是把链路讲全:解析 Word、PDF、扫描件、图片各自的技术路线不同——原生 PDF 可以直接抽文本层(pdfminer、PDFBox),扫描 PDF 与图片必须先 OCR(PaddleOCR、Tesseract),Word 要用 POI 或 docx 解析拿结构化段落与表格,还要处理页眉页脚、水印、多栏排版这些噪声。链路是:文件上传与类型/大小校验 → 格式识别与分流 → 解析成结构化中间态 → 清洗与字段抽取 → 落库(关系型字段进 MySQL,长文本或不定结构进 MongoDB)→ 异步任务与进度回显。岗位相关的软性问题也有准备:被问「本科相关课程」「接触过微服务吗」,照实说并给出替代证据(自学项目、实习里用过的注册中心或网关),不要硬吹;被问地域意愿、考公考编、家庭情况这类问题,态度明确、口径一致,别在同一场面试里前后矛盾。