
Java 后端与 RAG 面试高频要点文章目录Java 后端与 RAG 面试高频要点Java 基础MySQL 数据库Redis 与分布式锁AI 应用与 RAG算法题两数之和小结Java 基础最有挑战的需求怎么讲可以用 STAR 结构S 情境什么项目、什么业务。T 任务遇到了什么难点。A 行动你做了什么优化。R 结果性能提升、错误率下降、响应时间降低。示例在做旅游行程规划系统时用户查询行程时接口响应较慢。我通过日志定位到数据库查询和外部数据拉取耗时较高于是增加了缓存、优化了查询字段并把串行调用改成并行处理。优化后接口响应时间明显下降用户体验更好。浅拷贝和深拷贝类型特点实现方式浅拷贝引用类型共享同一块内存Object.clone()深拷贝引用类型也创建新对象重写 clone、序列化、JSON 转换浅拷贝后修改引用类型字段会影响原对象深拷贝后新旧对象完全独立。JVM 运行时数据区线程私有程序计数器、虚拟机栈、本地方法栈。线程共享堆、方法区。JDK 8 之后方法区主要由元空间实现使用本地内存。堆是对象主要存放区域也是 GC 的重点区域。ThreadLocal 原理与内存泄漏每个线程内部有一个ThreadLocalMap。Key 是ThreadLocalValue 是存储的数据。Key 是弱引用Value 是强引用。如果线程不销毁比如线程池复用线程Value 可能无法回收造成内存泄漏。解决方式使用完后在finally中调用remove()。数组和链表区别数组内存连续随机访问快增删慢。链表内存不连续随机访问慢增删快。数组适合读多写少链表适合频繁插入删除。Java 中ArrayList基于数组LinkedList基于双向链表。HashMap 原理及 1.7 和 1.8 区别JDK 1.7数组 链表。JDK 1.8数组 链表 红黑树。1.7 使用头插法1.8 使用尾插法。1.8 在链表长度较长且数组长度达到阈值时会转成红黑树提升查询性能。HashMap 不是线程安全的高并发场景可以使用ConcurrentHashMap。重载和重写重载同一个类中方法名相同参数列表不同。重写子类重写父类方法方法名和参数列表相同。重载是编译时多态重写是运行时多态。异常处理体系Throwable分为Error和Exception。Error通常是 JVM 级别错误比如 OOM。Exception分为运行时异常和受检异常。运行时异常不强制捕获受检异常必须处理或抛出。synchronized 和 ReentrantLock对比点synchronizedReentrantLock类型关键字JDK 类释放锁自动释放需要手动释放灵活性较低支持超时、可中断、公平锁底层MonitorAQS CAS一般情况下优先使用synchronized需要更灵活控制锁时使用ReentrantLock。MySQL 数据库ACID 如何实现原子性Undo Log事务失败可以回滚。一致性由原子性、隔离性、持久性共同保证。隔离性MVCC 和锁机制。持久性Redo Log崩溃后可以恢复数据。索引失效常见场景不满足最左前缀原则。对索引列做运算或使用函数。字符串查询不加引号发生隐式类型转换。使用LIKE %xxx。使用OR且部分字段没有索引。使用NOT IN、!等可能导致索引失效。SQL 慢查询怎么排查开启慢查询日志定位慢 SQL。使用EXPLAIN分析执行计划。关注type、key、rows、Extra。优化方式包括增加索引、改写 SQL、减少返回字段、优化分页。什么时候分库分表单表数据量过大比如千万级。单表体积过大影响查询和维护。单库压力过高QPS 难以支撑。分库分表方式垂直拆分按业务或字段拆分。水平拆分按某个字段哈希或范围拆分。需要注意分布式 ID、跨库查询、数据迁移等问题。索引为什么用 B 树B 树非叶子节点只存索引树更矮IO 次数更少。叶子节点通过链表连接适合范围查询。Hash 索引不支持范围查询和排序。红黑树树高较高不适合磁盘存储场景。Redis 与分布式锁Redis 持久化方式RDB定时快照恢复快但可能丢失最近数据。AOF记录写命令数据更安全但文件较大。混合持久化结合 RDB 和 AOF 的优点恢复速度和数据安全性更好。AI 应用与 RAG让 AI 生成 SQL 怎么优化在提示词中提供表结构、字段含义和关联关系。给出几个正确示例帮助模型理解。明确数据库类型比如 MySQL、PostgreSQL。限制输出格式只返回 SQL。如果生成错误可以把报错信息、原始问题、表结构再返回给模型让它自我修正。如何评估 AI 应用效果可以从几个方面看检索结果是否相关。生成答案是否准确。是否出现幻觉。响应速度是否可接受。用户点赞、点踩或继续追问情况。RAG 基本流程加载数据。文本切块。生成向量。存入向量库。用户提问。检索相关文档。拼接提示词。大模型生成答案。文本切块怎么做可以按固定长度切分。相邻块保留一定重叠避免语义断裂。也可以按段落、标题、文档结构切分。切块太大会引入噪声太小会丢失上下文。效果不好怎么排查先看检索到的文档是否相关。如果不相关可能是切块不合理、向量模型不合适、检索数量不足。如果文档相关但答案不好可能是提示词不清晰或模型总结能力不足。可以分别打印检索结果和生成结果定位问题环节。关键词匹配能否匹配“天气”和“气温”传统关键词匹配很难匹配因为两者字面不同。向量检索可以捕捉语义相似度所以“天气”和“气温”在向量空间中会比较接近。更好的做法是使用向量检索和关键词检索结合。Embedding 模型怎么选中文场景可以优先选择 BGE 系列模型中文语义理解效果较好。多语言场景可以考虑 OpenAI 的 embedding 模型或 E5 系列。选择时还要考虑维度、速度、成本和使用场景。切块大小怎么定一般可以在几百个 Token 左右调整。具体大小要结合 Embedding 模型限制、大模型上下文窗口、文档类型和业务场景来定。可以通过实验比较不同切块大小下的检索效果和回答质量。算法题两数之和题目给定一个数组和一个目标值找出两个数使它们的和等于目标值返回它们的下标。思路使用 HashMap 保存已经遍历过的数字和下标。遍历时计算target - 当前数如果这个值已经在 Map 中说明找到了答案。publicint[]twoSum(int[]nums,inttarget){MapInteger,IntegermapnewHashMap();for(inti0;inums.length;i){intcomplementtarget-nums[i];if(map.containsKey(complement)){returnnewint[]{map.get(complement),i};}map.put(nums[i],i);}thrownewIllegalArgumentException(No two sum solution);}时间复杂度是 O(n)空间复杂度是 O(n)。小结这份整理覆盖了 Java 后端基础和 RAG 应用常见面试题。面试时不必死记硬背更重要的是能把知识点和自己的项目经历结合起来说清楚“为什么用”“怎么用”“遇到过什么问题”“怎么解决”。需要我帮你把这份内容再压缩成一篇 1500 字以内的精简版吗