云鲸智能平台开发一面面经
《面试题目》
- 介绍项目一中 LangChain4j 的作用,它如何对接 DeepSeek 等大模型。
- 项目里提到流式输出和首字响应降低 60%,这个指标是如何统计的。
- 实现流式输出时是否遇到数据分段错乱、推送延迟等问题,具体怎么解决。
- 用户量和会话数据快速增长后,MySQL 的存储与查询性能如何优化。
- 向量数据库的检索效率如何保证,索引和召回策略怎么设计。
- 项目二的异步处理链路里,如何保证订单数据一致性。
- Lua 脚本在一致性保障中具体做了什么,为什么能保证原子性。
- 进程和线程的区别是什么。
- Java 内存区域中堆和栈有什么区别。
- 局部变量通常存放在堆里还是栈里。
- MySQL 慢查询应该如何排查和优化。
《参考解析》
- LangChain4j 的作用:它通常负责封装模型调用、提示词模板、记忆、工具调用、流式响应和 RAG 编排。对接 DeepSeek 时,核心是配置兼容 OpenAI 风格的 client、模型名、API Key、超时和流式回调,再把业务上下文转换成统一的 message 或 prompt。
- 流式输出指标统计:首字响应一般从请求进入服务端或发起模型请求开始计时,到前端收到第一个有效 token 为止。要区分首 token 延迟、总生成耗时、网络传输耗时,并在服务端日志、网关 trace 和前端埋点中统一 requestId 才能闭环。
- 流式分段错乱处理:SSE/WebSocket 推送时要给 chunk 增加序号或按连接内顺序串行发送;客户端只追加有效增量,遇到半包和 JSON 边界问题时用缓冲区拼接;服务端还要处理断连、重试和超时取消。
- MySQL 增长后的优化:先用慢查询日志和 EXPLAIN 定位瓶颈,再做联合索引、覆盖索引、冷热数据拆分、归档、分页方式优化。会话类数据还可以按用户或时间分区,并把大文本、向量或附件放到更适合的存储中。
- 订单一致性:高并发扣减和状态流转可以用 Redis Lua 保证库存校验与扣减原子执行,数据库侧使用唯一约束、事务和幂等表兜底。异步链路要配合消息重试、状态机和补偿任务,避免只依赖单点成功回调。