万丈金数服务端开发一面

万丈金数 · 服务端开发工程师 · 一面 · 广州 · 2026-06

《面试题目》

项目拷打

  1. 介绍项目背景
  2. 项目中最有挑战的地方在哪里?
  3. 权限校验为什么用 Sa-Token 不用 Spring Security?
  4. 项目中 WebSocket 的应用场景?

数据库 5. 数据库涉及的范式?1NF、2NF、3NF、BCNF 分别是什么? 6. 范式主要解决的是什么问题? 7. 项目中是如何基于范式去设计数据库的? 8. MySQL 索引的结构?为什么用 B+ 树? 9. 遇到慢查询怎么去做调试? 10. 一定要用索引吗?什么时候不适合用索引? 11. 批量插入(如一万条数据)时,索引如何构建才能快速插入?

Spring 与 Java 12. 创建一个类经历了哪些步骤? 13. IoC 有什么作用?不用 IoC 会有什么麻烦? 14. IoC 是基于 Java 的哪个特性? 15. 反射是在 JVM 哪个过程实现的?

Redis 16. Redis 缓存的机制在你项目里是怎么做的? 17. 缓存设计有几种算法?(如 LRU 等)

计算机网络 18. 计算机网络五层分别是什么? 19. WebSocket 和 HTTP 是在哪一层? 20. 两台电脑主机要通信怎么通信? 21. 操作系统进程间怎么通信?

微服务与 RPC 22. 有没有做过微服务? 23. RPC 有了解吗?与 HTTP 协议层面有什么不同?

算法 24. 手写二分查找,分析时间和空间复杂度

AI 工具 25. 平时怎么使用 AI 开发,有什么经验?


《参考解析》

  1. 数据库范式:1NF(字段原子性,不可再分);2NF(消除部分函数依赖,非主键字段完全依赖主键);3NF(消除传递函数依赖,非主键字段不依赖其他非主键字段);BCNF(更严格的3NF,消除主属性对非主键的依赖)。范式核心解决数据冗余和更新异常问题,但实际设计中常为查询性能做反范式(冗余字段)。

  2. 批量插入优化:批量插入前先删除或禁用非唯一索引,插完后重建;使用 INSERT INTO ... VALUES (),(),() 批量语法(单次事务);关闭 autocommit,手动控制事务。InnoDB 还可提前排序主键使插入按 B+ 树顺序进行,减少页分裂。

  3. IoC 与反射:IoC(控制反转)将对象创建和依赖管理交给容器,避免手动 new 导致的高耦合。Spring IoC 底层依赖 Java 反射(Class.forName()newInstance()),反射在 JVM 的类加载阶段完成类元信息加载,在**运行时(Execution)**阶段动态调用方法/字段。

  4. 进程间通信(IPC):管道(匿名管道/命名管道FIFO)、消息队列、共享内存、信号(Signal)、信号量、Socket。共享内存速度最快(不用内核拷贝),Socket 是分布式跨机通信的唯一方式。

  5. RPC vs HTTP:HTTP 是应用层协议,语义丰富但头部开销大;RPC 更关注跨语言、跨机器的过程调用,底层可走 HTTP/2(gRPC)或私有二进制协议(如 Dubbo),序列化用 Protobuf/Thrift 比 JSON 更紧凑高效,适合高频内部服务调用。