一面没有录音所以没有整理,但是二面对比明显更难了,其实这场二面我挂得并不意外。
面试官没有问任何偏门八股,上来就从我简历里的项目问起,一路从个人负责的模块 → 多线程 → MQ → 消息可靠性 → 电商发货设计,最后再补了一道经典 DP。
问题都很"基础",但每一步都在逼我回答:你是真的理解系统,还是只是用过?
好的,我帮你按面试流程把面试官问过的所有问题系统性地总结一遍,方便你复盘和针对性补强。
一、自我背景与项目经历
-
请你先做一下自我介绍
-
你现在主要负责的内部业务系统是做什么的?
-
从你负责的模块里,选一个相对复杂的模块,详细讲一下:
- 业务背景
- 你负责的内容
- 遇到的困难
- 技术方案和设计思路
二、考勤模块深入追问
- 该业务模块的业务逻辑是什么?
- 这个模块在早期遇到过什么性能问题?
- 你是如何做性能优化的?为什么想到用多线程?
- 整个模块(或子系统)的整体架构是什么?
- 技术特点有哪些?
三、系统架构 & 微服务设计
-
从部署架构看,你们是:
- 单体?
- 大单体?
- 微服务?
-
如果是微服务:
- 拆了哪些服务?
- 各个服务的职责是什么?
-
为什么要这样拆服务?
-
该业务模块为什么没有单独拆成一个服务?
-
你觉得把这个模块放在当前服务中是否合理?
-
你如何判断一个模块:
- 是否足够独立?
- 是否需要拆服务、独立部署?
四、异步、定时任务、线程池
- 在该模块中是否涉及:
- 定时任务?
- 异步处理?
- 定时任务是怎么做的?
- 异步是怎么实现的?
- 线程池是如何配置和使用的?
- 使用线程池的具体业务场景是什么?
五、线程池 vs MQ 对比(重点)
- 为什么不用 MQ,而是用线程池做异步?
- 你们项目里有没有用 MQ?
- 线程池的优点是什么?
- MQ 的优点是什么?
- 什么场景适合线程池?
- 什么场景适合 MQ?
- MQ 相比线程池还能提供哪些能力?
- 线程池有什么不足?
六、消息可靠性 & 系统设计题(重点)
业务场景题:电商发货
- 用户支付完成 → 生产者发送 MQ → 消费者发货
- 设计目标:
- 每个订单一定会发货
- 不能重复发货
- 你会如何设计这个系统?
- 如何保证幂等?
- 如何保证消息一定被消费?
- 还需要考虑哪些异常情况?
七、存储系统认知
- 除了 MySQL 和 Redis,你还了解哪些存储组件?
- 哪些是了解但没在实际项目中用过的?
- 什么时候用 MySQL?
- 什么时候用 Redis?
- Redis 会不会丢数据?
- 为什么 Redis 会丢数据?
- RDB 的丢数据原理是什么?
- AOF 的三种策略是什么?
- MySQL 会不会丢数据?
- 为什么 MySQL 相对更可靠?
- Redo Log 的作用是什么?
- MySQL 在极端情况下有没有可能丢数据?
八、AI 项目与 AI 编程能力
- 你做的 XX项目 是什么背景?
- 是个人项目还是业务项目?
- 你会不会用 AI 工具写代码?
- 在开发的哪些阶段会用 AI?
- 使用 AI 有哪些注意点?
- 常用哪些 AI 工具?
- 各个 AI 工具你觉得有什么差异?
- AI 写完代码后你会直接用吗?
- 你会如何校验 AI 生成的代码?
九、笔试算法题,现场屏幕共享做给面试官看
拿糖问题
- 给定一个数组代表盒子里的糖数量,规则:拿了第 i 个盒子,不能拿 i-1 和 i+1,目标:拿到最多的糖
- 你有什么解题思路?
- 你打算用什么算法(贪心 / DP)?
十、反问环节
- 你有什么问题想问我?
- 这个岗位是做什么的?
- 团队和业务方向是什么?
总体评价
这轮面试重点考察的是:
- 架构理解深度(而不是"我用过什么")
- 异步 & MQ 的系统性理解
- 分布式系统的可靠性设计
- 基础算法思维(DP 经典题)
- 表达结构是否清晰