快手杭州电商大模型应用Java一面面经

快手 · 大模型应用开发工程师 · 一面 · 杭州 · 2026-03

《面试题目》

一、 项目

  1. 简单介绍一下这个系统的知识库问答架构,从文档入库到最后回答的完整链路是怎样的?
  2. 向量检索用的是什么索引类型?
  3. 在召回之后有没有做重排(Rerank)之类的操作?
  4. 你知识库的准确率和召回率是怎么评估的?
  5. Spring AI Alibaba 的 Function Calling 是怎么实现的?模型如何决定调用哪个工具?
  6. 如果工具调用失败了,你们设计了什么处理机制?
  7. Execute Plan 模式具体是怎么实现的?
  8. 平时哪种模型用的比较多?
  9. 平时编码时会用哪些模型?
  10. 在选择向量数据库时,有没有看过其他的(如 ES、Milvus 以外的选择)?它们之间的区别你大概有概念吗?
  11. 在写 Prompt的时候,你有哪些实践经验或设计原则?
  12. Graph Rag / Agentic Rag了解过吗
  13. 在秒杀下单中,Lua 脚本具体做了什么?为什么要用 Lua,而不是分开执行多条指令?
  14. 这个项目你自己做过压测吗?
  15. 对系统能扛住的流量(QPS)有没有具体的概念?
  16. 对于什么时候该上缓存、什么时候该上本地缓存,你大概的概念是什么

二、 Java 基础

  1. 线程池的核心参数有哪些?
  2. 线程池内部的具体工作流程是怎样的?
  3. 核心线程数和最大线程数一般怎么确定/计算?

三、 场景题

  1. 你觉得目前 RAG(检索增强生成)最大的瓶颈是什么?
  2. 假设要给电商平台搭建一个百万/千万级的商品知识库问答系统,你会怎么设计?
  3. 针对商品信息(如价格、描述)可能被商家动态更新的情况,你的知识库设计需要考虑什么?

四、手撕

  1. 二叉树的层序遍历

《参考解析》

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更新任务,并在向量数据库中进行更新或重建索引,确保检索时效性。