得物Java开发一面面经
《面试题目》
- Apache Tika 的底层原理,为什么可以实现多源异构文件的读取?
- Tomcat 最大工作线程数一般设置为多少?为什么要这样设置?
- 线程池的核心参数如何设置?队列该如何选型?
- 包装类转 int 时会出现什么问题?
- RAG 项目中,专业术语映射表无法覆盖生僻词时怎么办?
- 大模型上下文该如何设计?
- 上下文压缩过度导致模型出现幻觉,该如何解决?
- 如果专业术语连 AI 也无法理解,应该怎么处理?
《参考解析》
- Tomcat 最大工作线程数:默认 200,实际要结合 CPU 核数、单次请求平均处理时间和期望 QPS 来估算(线程数 ≈ QPS × 平均响应时间),并结合压测结果微调,避免线程过多导致上下文切换开销、或线程过少导致请求排队超时。
- 包装类转 int 的坑:如果包装类对象为 null,自动拆箱时会抛 NullPointerException;此外 Integer 缓存池(-128~127)范围外的对象用 == 比较会出现”看似相等实际不等”的问题,需要用 equals 或提前判空。
- RAG 专业术语映射表覆盖不全:可以引入同义词/近义词扩展(基于向量相似度做术语归一化),或在检索阶段用大模型做查询改写(Query Rewriting)把生僻说法归一到标准术语再走向量检索;长期方案是把未命中的术语记录下来,人工/半自动补充词典。
- 上下文压缩导致幻觉:本质是关键信息在摘要压缩中丢失。可以采用分层记忆(原文分片保留 + 摘要仅做索引)、对关键实体(人名、编号、金额等)做结构化抽取单独保留,避免完全依赖自然语言摘要,在压缩比和信息保真度之间找平衡。