后端开发工程师一面面经
完整信息
本篇目录
- 做一下自我介绍。
- 实习时间大概可以多久?
- 你这个智能知识库 / 模拟面试平台,本来想做什么?
- 想解决什么样的问题?
- 这个系统你自己真的有使用过吗?
- 你简历上重点写了“多子问题 Collection 向量同步计算”,这个能展开讲讲吗?
- 它原来到底存在什么问题?
- 你是不是把数据提前 Embedding 之后存到向量数据库,再直接通过向量数据库检索?
- 除了性能问题之外,做 Embedding 前置和没有前置有什么差异?
- 从准确率、召回率来说会有什么区别?
- 一个问题可能命中很多知识块,如果 Top-K 比较小,召回内容不完整;Top-K 太大又容易比较模糊、引入很多无关信息,这种问题怎么解决?
- 你实际有没有遇到过这种问题?
- 面试官再次收窄问题:一个问题本身涉及多个 Chunk,但 Top-K 又不能设置特别大,在相关信息比较多、问题范围比较广时怎么处理?
- 这里面试官还明确反馈了一句:
“我觉得你这个答得有点远了。”
说明这一题他希望你直接回答“多 Chunk + Top-K 限制”本身,而不是扩展到整个 RAG 优化体系。 - 你前面提到通过结构化方式进行文本切分,比固定大小 + overlap 好。那么如果实际拿到的数据源结构并没有这么理想,怎么办?
- 如果真要采用你这套结构感知方案,非结构化数据应该怎么实现结构化处理?
- 举例:公司收到大量不同格式的简历,希望建成知识库,根据经验检索候选人,不同用户简历格式完全不同,这种场景你怎么处理?
- 如果分块 / 结构化很依赖大模型理解和关键词抽取,怎么保证模型处理结果足够稳定?
- 如果这个工作交给你来做,方案可以试,但怎么评估你的方案效果到底好不好?
- 怎么评估分块后的效果?
- RAG 虽然重点在检索,但生成阶段仍然可能产生幻觉,怎么控制生成阶段的幻觉?
- 你实际有没有遇到过这种幻觉问题?
- 你在自己的项目里是怎么处理的?
- 你刚才说了降低温度、Prompt 约束,还有什么方法?
- 你说强制模型标注引用来源,这个方式你实际遇到过问题吗?
- 实际效果好吗?
- 有没有看过业界 RAG 在幻觉控制方面的新方案 / 其他方案?
- RAG 已经发展了一段时间,有没有研究过别人现在怎么解决这个问题?
- 如果模型出现“虚空引用”——声称引用了某段 Context,但实际上那个 Context 根本不能支撑答案——这种方式是不是也控制得不够好?该怎么办?
- 如果 Chunk 切得太小,会丢失整体语义;切得太大,又会降低检索精度,这个问题你有没有遇到过? 这种 Chunk 粒度问题怎么处理?
- 你简历上写了向量化耗时降低,这个能展开讲讲吗?
- 面试官确认:你指的是提前 Embedding,然后存到向量数据库里吗?
- 你这里写 P50 降低 17.6%,P95 降低 48.6%,那么优化之后 P95 差距和P50大吗?
- 有没有观察过为什么 P50 和 P95 差距这么大?
- 平均值 / P50 不算特别高,但是 P95 / P99 比较高,原因是什么?
- 评测集阶段可以自己构造数据测试,但真正上线以后不可能每次人工看答案,上线以后怎么知道系统效果好不好?
- 有没有什么办法去看上线之后的检索效果?回答效果应该怎么评估?
- 如果暂时不考虑耗时,主要看“检索内容对不对、生成答案好不好”,应该怎么看这些质量?
- 现在已经有很多线上 RAG 系统,业界一般怎么做 RAG 效果评估?
- 你自己会怎么评估?
- 你的上下文膨胀问题是怎么解决的?
- 多轮对话越来越长,上下文一定会膨胀,你用了摘要,摘要具体怎么做?
- 摘要会不会损失很多关键细节?
- 如果摘要丢失了用户以前的重要信息,你的方案怎么补救?
- 讲一下 Redisson 锁的原理。
- 你项目里经常用 Redisson,为什么选择它?
- 它底层大概是什么原理?
- 两个线程竞争同一个 Key,线程 A 已经拿到锁,但 A 的 WatchDog 续期失败了怎么办?
- A 的锁到期释放后,线程 B 拿到了锁,但 A 不知道自己的锁已经失效,还继续执行业务,这种场景怎么处理?Redisson 本身有没有处理这种情况? (你打算怎么处理)
- MySQL 是如何实现事务的?
- 事务有哪些特点?
- 也就是 ACID 四个特性,MySQL 分别是怎么实现这些特性的?
- MySQL 有几个事务隔离级别?
- 每个事务隔离级别分别是什么?
- 不同隔离级别解决了什么问题?
- 是不是事务隔离级别越高越好?
- 为什么不是越高越好?
- Read Committed 和 Repeatable Read 之间应该怎么选?
- RC 和 RR 这两个隔离级别,哪个“更好”还是要看业务场景?
- 简单讲一下 MVCC 的实现原理。
- 讲一下 CAS 是什么逻辑 / 原理。
- CAS 有什么问题?
- 并发控制既可以用 CAS,也可以用 Semaphore / mutex 等锁,既然都能实现,实际应该怎么选?
- CAS 和互斥锁之间的选择依据是什么?
- 你说优惠券要求一致性更高,所以使用锁,但 CAS 不是同样也能保证强一致吗? CAS 和互斥锁之间,并不存在“一致性高低”的区别,对吧? 你说 CAS 适合“读多写少”,但 读操作本身涉及并发更新吗?
- 如果 CAS 更轻量,为什么还要保留 synchronized / mutex 这种阻塞锁?
- 什么时候应该用 CAS,什么时候应该使用互斥锁?
- 讲一下线程池的原理。
- 线程池接收任务以后,整体执行流程是什么?
- 线程池源码看过吗?
- 非核心线程最终会被回收,它具体是怎么回收的?
- 非核心线程的超时时间到底是怎么计时的?
- 为什么能够判断一个线程已经空闲到了 keepAliveTime?
- 核心线程已经满了以后,再向线程池提交任务,会发生什么?
- 队列满了以后呢?
- 如果非核心线程也满了,接下来怎么办?
- 平时学习这些类的时候,有没有看源码的习惯?
- 哪些源码你看过?
- ThreadLocal 源码看过吗?
- ThreadLocal 和 HashMap 都有类似 Map 的结构,它们的 put / get 实现有什么不同?
- ThreadLocalMap 和 HashMap 的底层实现有什么明显区别?
- 仅仅一个 Key 是弱引用,为什么会导致整个 Map 结构都不一样?
- 如果看源码只看 put / get,ThreadLocalMap 的 put/get 到底怎么实现?
- 算法题(电话号码的字母组合)
本篇目录
当前问题0183
- 01
做一下自我介绍。
- 02
实习时间大概可以多久?
- 03
你这个智能知识库 / 模拟面试平台,本来想做什么?
- 04
想解决什么样的问题?
- 05
这个系统你自己真的有使用过吗?
- 06
你简历上重点写了“多子问题 Collection 向量同步计算”,这个能展开讲讲吗?
- 07
它原来到底存在什么问题?
- 08
你是不是把数据提前 Embedding 之后存到向量数据库,再直接通过向量数据库检索?
- 09
除了性能问题之外,做 Embedding 前置和没有前置有什么差异?
- 10
从准确率、召回率来说会有什么区别?
- 11
一个问题可能命中很多知识块,如果 Top-K 比较小,召回内容不完整;Top-K 太大又容易比较模糊、引入很多无关信息,这种问题怎么解决?
- 12
你实际有没有遇到过这种问题?
- 13
面试官再次收窄问题:一个问题本身涉及多个 Chunk,但 Top-K 又不能设置特别大,在相关信息比较多、问题范围比较广时怎么处理?
- 14
你前面提到通过结构化方式进行文本切分,比固定大小 + overlap 好。那么如果实际拿到的数据源结构并没有这么理想,怎么办?
- 15
如果真要采用你这套结构感知方案,非结构化数据应该怎么实现结构化处理?
- 16
举例:公司收到大量不同格式的简历,希望建成知识库,根据经验检索候选人,不同用户简历格式完全不同,这种场景你怎么处理?
- 17
如果分块 / 结构化很依赖大模型理解和关键词抽取,怎么保证模型处理结果足够稳定?
- 18
如果这个工作交给你来做,方案可以试,但怎么评估你的方案效果到底好不好?
- 19
怎么评估分块后的效果?
- 20
RAG 虽然重点在检索,但生成阶段仍然可能产生幻觉,怎么控制生成阶段的幻觉?
- 21
你实际有没有遇到过这种幻觉问题?
- 22
你在自己的项目里是怎么处理的?
- 23
你刚才说了降低温度、Prompt 约束,还有什么方法?
- 24
你说强制模型标注引用来源,这个方式你实际遇到过问题吗?
- 25
实际效果好吗?
- 26
有没有看过业界 RAG 在幻觉控制方面的新方案 / 其他方案?
- 27
RAG 已经发展了一段时间,有没有研究过别人现在怎么解决这个问题?
- 28
如果模型出现“虚空引用”——声称引用了某段 Context,但实际上那个 Context 根本不能支撑答案——这种方式是不是也控制得不够好?该怎么办?
- 29
如果 Chunk 切得太小,会丢失整体语义;切得太大,又会降低检索精度,这个问题你有没有遇到过? 这种 Chunk 粒度问题怎么处理?
- 30
你简历上写了向量化耗时降低,这个能展开讲讲吗?
- 31
面试官确认:你指的是提前 Embedding,然后存到向量数据库里吗?
- 32
你这里写 P50 降低 17.6%,P95 降低 48.6%,那么优化之后 P95 差距和P50大吗?
- 33
有没有观察过为什么 P50 和 P95 差距这么大?
- 34
平均值 / P50 不算特别高,但是 P95 / P99 比较高,原因是什么?
- 35
评测集阶段可以自己构造数据测试,但真正上线以后不可能每次人工看答案,上线以后怎么知道系统效果好不好?
- 36
有没有什么办法去看上线之后的检索效果?回答效果应该怎么评估?
- 37
如果暂时不考虑耗时,主要看“检索内容对不对、生成答案好不好”,应该怎么看这些质量?
- 38
现在已经有很多线上 RAG 系统,业界一般怎么做 RAG 效果评估?
- 39
你自己会怎么评估?
- 40
你的上下文膨胀问题是怎么解决的?
- 41
多轮对话越来越长,上下文一定会膨胀,你用了摘要,摘要具体怎么做?
- 42
摘要会不会损失很多关键细节?
- 43
如果摘要丢失了用户以前的重要信息,你的方案怎么补救?
- 44
讲一下 Redisson 锁的原理。
- 45
你项目里经常用 Redisson,为什么选择它?
- 46
它底层大概是什么原理?
- 47
两个线程竞争同一个 Key,线程 A 已经拿到锁,但 A 的 WatchDog 续期失败了怎么办?
- 48
A 的锁到期释放后,线程 B 拿到了锁,但 A 不知道自己的锁已经失效,还继续执行业务,这种场景怎么处理?Redisson 本身有没有处理这种情况? (你打算怎么处理)
- 49
MySQL 是如何实现事务的?
- 50
事务有哪些特点?
- 51
也就是 ACID 四个特性,MySQL 分别是怎么实现这些特性的?
- 52
MySQL 有几个事务隔离级别?
- 53
每个事务隔离级别分别是什么?
- 54
不同隔离级别解决了什么问题?
- 55
是不是事务隔离级别越高越好?
- 56
为什么不是越高越好?
- 57
Read Committed 和 Repeatable Read 之间应该怎么选?
- 58
RC 和 RR 这两个隔离级别,哪个“更好”还是要看业务场景?
- 59
简单讲一下 MVCC 的实现原理。
- 60
讲一下 CAS 是什么逻辑 / 原理。
- 61
CAS 有什么问题?
- 62
并发控制既可以用 CAS,也可以用 Semaphore / mutex 等锁,既然都能实现,实际应该怎么选?
- 63
CAS 和互斥锁之间的选择依据是什么?
- 64
你说优惠券要求一致性更高,所以使用锁,但 CAS 不是同样也能保证强一致吗? CAS 和互斥锁之间,并不存在“一致性高低”的区别,对吧? 你说 CAS 适合“读多写少”,但 读操作本身涉及并发更新吗?
- 65
如果 CAS 更轻量,为什么还要保留 synchronized / mutex 这种阻塞锁?
- 66
什么时候应该用 CAS,什么时候应该使用互斥锁?
- 67
讲一下线程池的原理。
- 68
线程池接收任务以后,整体执行流程是什么?
- 69
线程池源码看过吗?
- 70
非核心线程最终会被回收,它具体是怎么回收的?
- 71
非核心线程的超时时间到底是怎么计时的?
- 72
为什么能够判断一个线程已经空闲到了 keepAliveTime?
- 73
核心线程已经满了以后,再向线程池提交任务,会发生什么?
- 74
队列满了以后呢?
- 75
如果非核心线程也满了,接下来怎么办?
- 76
平时学习这些类的时候,有没有看源码的习惯?
- 77
哪些源码你看过?
- 78
ThreadLocal 源码看过吗?
- 79
ThreadLocal 和 HashMap 都有类似 Map 的结构,它们的 put / get 实现有什么不同?
- 80
ThreadLocalMap 和 HashMap 的底层实现有什么明显区别?
- 81
仅仅一个 Key 是弱引用,为什么会导致整个 Map 结构都不一样?
- 82
如果看源码只看 put / get,ThreadLocalMap 的 put/get 到底怎么实现?
- 83
算法题(电话号码的字母组合)
