郑州某小厂 Java后端一面
《面试题目》
- 虽然面的是Java后端,但是Agent方面的内容问的更多,而且我发现小厂貌似都挺喜欢问claude code、openclaw的源码和设计思路这方面的内容
- 先简单自我介绍一下。
- 我看你做的有埋点,那你这个埋点怎么做的?是前端埋的还是后端埋的?
- 上报是怎么实现的?
- 你考虑过这种方案可能会带来一些耦合性吧?你刚才说要在一些特定点上进行埋点,会不会造成一些耦合性的问题呢?
- 你们这个项目是单体的吗?你刚提到的没有办法承受那么大的流量,那你觉得这个流量多少会崩呢?
- 埋点这些事件也是通过消息队列发的吗?还是怎么发的?
- 后期的分析呢,分析也在这个项目里面吗?
- 分析出来的产物是什么?是自然语言吗?还是一些什么?
- 推荐这个链路是怎么做的?你是向量推荐吗?还是怎么推荐?
- 如果说我是用户,我这个知识点的题都做完了,你还给我推都是这个知识点的错题,那这个你们怎么做的,就是知识点之间的题目的切换对不对?
- 我看你做过RAG是吧?那你都接触过几种RAG?
- 你接触过几种RAG的架构?
- 你觉得刚才说的那三种RAG各适合什么场景?
- 大模型的聪明程度会影响哪种RAG的效果呢?
- 在Graph RAG(知识图谱)中,在做多跳查询的时候,它使用到大模型的能力了吗?
- 在生成这个图查询语句的时候,有没有大模型能力?
- 你这里面提到上下文压缩,你是怎么做的?
- 人在回路(Human in the loop)怎么实现?
- 你有做过RAG的评测吗?
- 讲讲RAG评测的思路吧。
- 你有评测结果之后,后面的优化一系列步骤是什么?
- 你提到了Harness Engineering,介绍一下在你这个项目中的实践吧。
- 我看你之前还做过Java是吗?那你项目做的是Java还是Python?
- 有了解过DDD架构(领域驱动设计)吗?你有写过吗?
- 你再介绍一下你对DDD的了解吧,宽泛一点。
- DDD领域里面聚合根、值对象、实体这些对象,它们的作用是什么?
- 设计模式有了解过吗?Spring框架用到了什么设计模式?
- Redis的分布式锁的实现原理是什么?为什么能实现可重入性?锁续期怎么做的?
- 你在做AI开发的时候开发过MCP的Server吗?
- 你本地的MCP服务有鉴权吗?那个鉴权是怎么做的?
- 你平时部署的话,CI/CD应该有吧?你有搭建过这套流程吗?
- 你平时做AI开发的时候都用一些什么IDE呢?
- Claude Code它的源码泄露了,你对它了解多吗?它里面的一些具体实现,比如它的记忆是怎么实现的,它有多少种记忆?
- 最近还有一些比较好玩的Agent,比如OpenClaw或者Harmes,这些你玩过吗?
- 你有接触过这种视觉模型吗?
《参考解析》
-
Redis核心:Redis常用数据结构:String/Hash/List/Set/ZSet。持久化:RDB(定期快照,恢复快,数据可能丢失)和AOF(追加日志,数据安全,文件大)。缓存穿透用布隆过滤器;缓存雪崩加随机过期时间+多级缓存;缓存击穿用互斥锁或逻辑过期。分布式锁用SET key value NX PX + Lua脚本保证原子释放。
-
Spring框架:Spring IoC容器管理Bean生命周期,核心是依赖注入(DI)。AOP面向切面编程通过动态代理(JDK/CGLIB)实现横切关注点(日志/事务/权限)。Spring事务传播行为:REQUIRED(加入现有或新建)、REQUIRES_NEW(挂起当前,新建)、NESTED(嵌套事务)等。
-
消息队列:消息队列解决异步解耦、流量削峰。消息可靠性:生产者confirm确认;Broker持久化;消费者手动ACK。幂等性:消费端通过唯一ID+Redis或DB乐观锁实现。顺序消息:同一业务Key路由到同一分区/Queue,单线程消费。消息积压:扩消费者+增加分区+临时跳过非关键消息。
-
RAG与大模型:RAG(检索增强生成)流程:文档切片→向量化(Embedding)→存向量数据库→检索时将query向量化→TopK语义检索→将相关文档拼入prompt→LLM生成。优化:混合检索(语义+关键词)、重排序Rerank、查询改写、上下文压缩。评估:召回率(relevant docs retrieved/total relevant)、精确率、Answer相关性。