武汉微派网络服务端开发工程师一面面经
面试题目
实习拷打
- 在实习主要做了哪些工作?
- 有没有记忆比较深的方案设计案例,讲讲你是怎么设计的?
- 你说的库存这块,其实就是乐观锁的概念,对吧?当初这么设计是考虑性能优化吗?
- 你提到的优惠券规则引擎是什么?
- 注册发券逻辑从同步改成异步后,怎么保证券的成功发放?
八股 6. 讲一下 Java 里 Map 的实现,主要是 HashMap 的底层结构? 7. HashMap 的扩容流程是怎样的?最新版本里对 rehash 过程有什么优化吗? 8. 讲一下 JVM 内存模型,内存里有哪几个部分? 9. 类加载的过程是怎样的?有几个步骤? 10. Java 是怎么进行垃圾回收的? 11. MySQL 索引的结构是什么? 12. 索引失效的场景有哪些? 13. MySQL 事务是怎么实现的? 14. MySQL 实现可重复读、读已提交隔离级别是怎么做到的? 15. 你提到了 Read View,它的作用是什么?读提交和可重复读下 Read View 的创建时机有什么区别? 16. MVCC 在 InnoDB 里是怎么实现的?Read View 是怎么找到有效版本的? 17. Redis 的基础数据类型有哪些? 18. Redis 的 ZSET 是如何实现通过 member 快速查找分数的?(底层数据结构) 19. RabbitMQ 怎么实现消息不丢失和不重复消费?
AI相关 20. 开发中有没有使用 AI 相关工具?除了开发还做过什么? 21. 你提到的 Skill 和 MCP 用起来的区别是什么?
项目拷打 22. 你做的自然语言转 SQL 的 MCP 服务,实现流程是怎样的? 23. 大模型生成的 SQL 直接执行吗?会不会出现一些索引问题,导致查询量很大? 24. 这个项目是什么时候做的?现在重新设计有哪些优化方向?
手撕 25. LeetCode 88: 合并两个有序数组。
参考解析
- HashMap 扩容与优化:扩容为 2 倍,采用头插法(JDK7)或尾插法(JDK8+)。JDK8+ 优化点在于使用高低位扩容,避免了老版本中 rehash 重新计算 hash 值的过程,直接利用位运算判断节点位置。
- MVCC 与 Read View:Read View 是事务可见性视图。读提交(RC)下,每次执行 SQL 语句时生成;可重复读(RR)下,事务第一次读取时生成。通过 trx_id 与版本链比对实现可见性控制。
- Redis ZSET:底层通过
ziplist(或listpack) 和skiplist+dict实现。skiplist保证范围查询效率,dict(哈希表) 则用于通过 member 在 O(1) 时间内获取分数值。 - RabbitMQ 可靠性:使用 confirm 机制确保消息投递到 Broker;使用持久化确保不丢数据;消费者端关闭自动应答,处理完成后手动 ACK;幂等性通过 Redis 记录消息 ID 判重实现。
- LeetCode 88 (合并有序数组):使用双指针法,从数组末尾开始比较,将较大的元素填充到 a 数组的末尾,这样可以避免覆盖 a 数组中未比较的元素,空间复杂度 O(1)。