Markdown Note
3.21模拟面试
最近更新:2026/03/24
1、SQL调优的经验
跳跃扫描机制的优化;深分页中覆盖索引的使用
2、介绍一下RAG
RAG构建: 数据收集: 数据切割:chunking 切割策略(固定长度、自然段、滑动窗口(前后重复)、语义切割) Embedding向量化: 存入向量数据库:
RAG检索: 对问题做向量化: 相似度检索: 排序与过滤:排序过滤策略(相似度排序、去重、长度限制(top-K 文档片段)、问答相关度排序、标签过滤) 生成增强回答:
3、RAG实现会话记忆的压缩存储
1、历史对话切片化 2、Embedding向量化:并根据用户id和时间戳为每条向量数据打标签 3、用户提问时,根据向量数据库检索记忆片段拼接或摘要后作为上下文一起发给LLM 共享数据库,根据用户标签进行筛选 对话记忆优先存储在Redis中,一段时间后,对其进行摘要压缩后再存入向量数据库 提问的上下文包括Redis里的最近数据以及向量数据库里的摘要数据
4、介绍一下项目的会话记忆存储,怎么保证缓存一致性、高可用,为什么引入Caffeine
1、我用Langchain4j开发了一款agent,其中每个用户可能会同时开启多个对话,为了保证并发性,必须实例多个对应的AiServices,所以我打算将其存储在Caffeine中,并设置合理的过期时间。
Key 设计:建议用 userId:conversationId,Value 存放Value 可以直接存放 AiService 实例。
基于写入时间(expireAfterWrite):适合固定寿命的对话,例如 30 分钟无操作就销毁实例。
使用 maximumSize 或 maximumWeight,避免因并发用户过多导致 JVM OOM。
2、为什么引入Caffeine,Caffeine相当于本地缓存的plus版,比Redis轻量,但是有合理的过期和定时清除策略,最大容量限制 3、Redis存储最近的几轮对话
5、HTTPS与HTTP的不同,如何实现
TLS四次握手
6、线程池异步化,为什么,之前不是异步化的嘛
7、为什么要用Redis ZSet,之前是怎么实现的,为什么要改
之前是MySQL结合索引。 目前由于引入评价算法,其score会实时变化,如果还是用索引就会导致频繁修改索引树,增大开销。Zset开销更小
8、bitmap的使用
9、令牌桶限流,令牌桶到底怎么实现的(多字段用Redis hash)
RRateLimiter https://chatgpt.com/s/t_69c2378e35c08191874a3a10823ff760
10、介绍一下这个低代码平台
11、前端如何实时展示生成的前端界面的。
nginx挂载