快手杭州电商大模型应用Java一面面经
《面试题目》
一、 项目
- 简单介绍一下这个系统的知识库问答架构,从文档入库到最后回答的完整链路是怎样的?
- 向量检索用的是什么索引类型?
- 在召回之后有没有做重排(Rerank)之类的操作?
- 你知识库的准确率和召回率是怎么评估的?
- Spring AI Alibaba 的 Function Calling 是怎么实现的?模型如何决定调用哪个工具?
- 如果工具调用失败了,你们设计了什么处理机制?
- Execute Plan 模式具体是怎么实现的?
- 平时哪种模型用的比较多?
- 平时编码时会用哪些模型?
- 在选择向量数据库时,有没有看过其他的(如 ES、Milvus 以外的选择)?它们之间的区别你大概有概念吗?
- 在写 Prompt的时候,你有哪些实践经验或设计原则?
- Graph Rag / Agentic Rag了解过吗
- 在秒杀下单中,Lua 脚本具体做了什么?为什么要用 Lua,而不是分开执行多条指令?
- 这个项目你自己做过压测吗?
- 对系统能扛住的流量(QPS)有没有具体的概念?
- 对于什么时候该上缓存、什么时候该上本地缓存,你大概的概念是什么
二、 Java 基础
- 线程池的核心参数有哪些?
- 线程池内部的具体工作流程是怎样的?
- 核心线程数和最大线程数一般怎么确定/计算?
三、 场景题
- 你觉得目前 RAG(检索增强生成)最大的瓶颈是什么?
- 假设要给电商平台搭建一个百万/千万级的商品知识库问答系统,你会怎么设计?
- 针对商品信息(如价格、描述)可能被商家动态更新的情况,你的知识库设计需要考虑什么?
四、手撕
- 二叉树的层序遍历
《参考解析》
1. 线程池工作流程: 首先尝试核心线程处理;若核心满则进入队列;若队列满则扩容至最大线程数;若仍超限则执行拒绝策略。设计时核心数通常依据CPU密集(CPU核数+1)或IO密集(2*CPU核数)计算。
2. 为什么用 Lua 脚本: Lua脚本将多条Redis命令封装为原子操作,执行期间不会被其他指令打断,有效解决分布式高并发场景下的竞态条件,同时减少了网络往返(RTT),提升性能。
3. RAG 准确率与评估: 通常使用 RAGAS 或 TruLens 等框架,通过 Context Precision、Context Recall、Faithfulness 等指标进行量化评估。核心在于优化分块(Chunking)策略、引入重排模型(Rerank)及优化Prompt上下文注入。
4. 商品知识库动态更新设计: 需引入增量更新机制(CDC机制),当数据库中商品信息变更时,通过消息队列异步触发Embedding更新任务,并在向量数据库中进行更新或重建索引,确保检索时效性。