易点云-Java一面面经
《面试题目》
- 实习经历里头包括项目,你可以详细说一说,比如做过哪些内容?
- 你在新版 OpenAPI 升级中封装了核心接口,降低 40% 对接成本,具体做了哪些封装优化?
- 封装优化后,老接口是怎么修改的?遇到过哪些兼容性问题?怎么解决的?
- 关键字+向量语义的混合检索引擎,具体实践逻辑是什么?
- RAG 检索底座是如何为大模型智能排错提供上下文的?(实现方式)
- 浅拷贝和深拷贝的区别?
- 什么是反射?反射有哪些应用场景?
- 常见的 IO 模型有哪些?
- 你对线程池的了解?如何创建?工作流程是怎样的?
- 线程池的工作流程(追问)?
- 线程池的参数如何考虑和设置?
- 讲讲 JVM 的内存结构模型、垃圾回收算法、垃圾回收过程?
- 实习或工作中有没有遇到过 GC 频繁的问题?如何快速排查和解决?
- MySQL 的隔离级别有哪些?
- 这些隔离级别分别解决了哪些问题?
- 一条查询语句在 MySQL 中的完整执行流程是怎样的?
- 哪些情况会导致索引失效?
- 了解 Elasticsearch 吗?它适合什么场景?有哪些特点?
- 如果把 MySQL 数据同步到 ES(如订单模糊查询),如何保证数据一致性?
- Redis 有哪些使用场景?
- 了解哪些消息队列?它们的使用场景和优势分别是什么?
《参考解析》
- 线程池参数设置:通常根据任务类型区分。CPU 密集型设为 CPU 核数 + 1;IO 密集型建议设为 2*CPU 核数 + 核心数,或通过压测确定最优值。
- GC 频繁排查:使用 jstat 查看 GC 情况,通过 jmap dump 堆内存,利用 MAT 或 VisualVM 分析存活对象,重点排查是否存在大对象、内存泄漏或循环引用。
- MySQL 索引失效:常见的有:使用 select *、对索引列进行运算或函数操作、隐式类型转换、使用 OR 连接非索引列、违背最左前缀原则、like 以 % 开头等。
- MySQL 同步到 ES 一致性:最常用的方式是监听 MySQL 的 Binlog(如使用 Canal),通过消息队列(Kafka/RocketMQ)异步写入 ES。这种方式解耦且能保证最终一致性。
- RAG 检索逻辑:将非结构化文档切片、向量化存入向量数据库。查询时将问题转化为向量,与向量库进行相似度匹配,检索出相关上下文,作为 prompt 的一部分输入大模型。