快手杭州电商大模型应用Java一面面经
面试题目
一、 项目
- 简单介绍一下这个系统的知识库问答架构,从文档入库到最后回答的完整链路是怎样的?
- 向量检索用的是什么索引类型?
- 在召回之后有没有做重排(Rerank)之类的操作?
- 你知识库的准确率和召回率是怎么评估的?
- Spring AI Alibaba 的 Function Calling 是怎么实现的?模型如何决定调用哪个工具?
- 如果工具调用失败了,你们设计了什么处理机制?
- Execute Plan 模式具体是怎么实现的?
- 平时哪种模型用的比较多?
- 平时编码时会用哪些模型?
- 在选择向量数据库时,有没有看过其他的(如 ES、Milvus 以外的选择)?它们之间的区别你大概有概念吗?
- 在写 Prompt的时候,你有哪些实践经验或设计原则?
- Graph Rag / Agentic Rag了解过吗?
- 在秒杀下单中,Lua 脚本具体做了什么?为什么要用 Lua,而不是分开执行多条指令?
- 这个项目你自己做过压测吗?
- 对系统能扛住的流量(QPS)有没有具体的概念?
- 对于什么时候该上缓存、什么时候该上本地缓存,你大概的概念是什么?
二、 Java 基础
- 线程池的核心参数有哪些?
- 线程池内部的具体工作流程是怎样的?
- 核心线程数和最大线程数一般怎么确定/计算?
三、 场景题
- 你觉得目前 RAG 最大的瓶颈是什么?
- 假设要给电商平台搭建一个百万/千万级的商品知识库问答系统,你会怎么设计?
- 针对商品信息(如价格、描述)可能被商家动态更新的情况,你的知识库设计需要考虑什么?
四、手撕 二叉树的层序遍历
参考解析
- RAG链路与瓶颈:链路通常为:文档切片 -> Embedding向量化 -> 存入向量库 -> 召回 -> Rerank精排 -> LLM生成。瓶颈在于向量检索的语义丢失和长文本上下文理解能力限制。
- Function Calling实现:模型输出特定的JSON结构(包含函数名与参数),框架解析该JSON并反射调用本地Java方法。失败处理通常涉及重试机制(Retry)或向模型反馈错误信息进行自愈。
- Lua脚本秒杀:Lua保证了多条Redis指令的原子性,防止在并发执行时出现超卖。比事务(Multi/Exec)性能更高,因为减少了网络往返。
- 线程池参数:corePoolSize, maximumPoolSize, keepAliveTime, unit, workQueue, threadFactory, handler。确定方式:IO密集型=2*CPU核数,计算密集型=CPU核数+1。
- 大规模知识库设计:需采用分布式向量库(Milvus/Elasticsearch),并引入KV缓存存储元数据,使用异步队列(MQ)监听商品变动事件,通过增量更新策略实时同步向量库。