万丈金数服务端开发一面
《面试题目》
项目拷打
- 介绍项目背景
- 项目中最有挑战的地方在哪里?
- 权限校验为什么用 Sa-Token 不用 Spring Security?
- 项目中 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 开发,有什么经验?
《参考解析》
-
数据库范式:1NF(字段原子性,不可再分);2NF(消除部分函数依赖,非主键字段完全依赖主键);3NF(消除传递函数依赖,非主键字段不依赖其他非主键字段);BCNF(更严格的3NF,消除主属性对非主键的依赖)。范式核心解决数据冗余和更新异常问题,但实际设计中常为查询性能做反范式(冗余字段)。
-
批量插入优化:批量插入前先删除或禁用非唯一索引,插完后重建;使用
INSERT INTO ... VALUES (),(),()批量语法(单次事务);关闭autocommit,手动控制事务。InnoDB 还可提前排序主键使插入按 B+ 树顺序进行,减少页分裂。 -
IoC 与反射:IoC(控制反转)将对象创建和依赖管理交给容器,避免手动 new 导致的高耦合。Spring IoC 底层依赖 Java 反射(
Class.forName()→newInstance()),反射在 JVM 的类加载阶段完成类元信息加载,在**运行时(Execution)**阶段动态调用方法/字段。 -
进程间通信(IPC):管道(匿名管道/命名管道FIFO)、消息队列、共享内存、信号(Signal)、信号量、Socket。共享内存速度最快(不用内核拷贝),Socket 是分布式跨机通信的唯一方式。
-
RPC vs HTTP:HTTP 是应用层协议,语义丰富但头部开销大;RPC 更关注跨语言、跨机器的过程调用,底层可走 HTTP/2(gRPC)或私有二进制协议(如 Dubbo),序列化用 Protobuf/Thrift 比 JSON 更紧凑高效,适合高频内部服务调用。