腾讯S3后台开发一面凉经
面试题目
- 请做一下自我介绍
- Java 和 Go 语言有哪些区别?
- 面向对象的三大特性分别是什么,各自怎么理解?
- 面向对象的思想具体指什么?
- 介绍一下你做的Agent项目。
- 这个智能体项目的技术栈和实现方式是什么?
- 该智能体项目解决了什么问题,有什么业务价值?
- 如何控制 Agent 的权限,避免越权操作?
- 怎么防止 Agent 做出不合理的操作?
- RAG(检索增强生成)是什么,原理是什么?
- 你项目中用的向量数据库是什么?
- 使用 RAG 相比微调有什么好处?
- 你的会话记忆功能是怎么设计实现的?
- 目前的会话记忆方案有什么问题或可以优化的点?
- 对 MCP(模型上下文协议)有了解吗?
- 介绍一下责任链模式在你项目中的应用。
- 什么是幂等性,你项目中是怎么实现幂等的?
- 你项目中的缓存方案是怎样的?
- 什么是缓存击穿、缓存穿透?
- 布隆过滤器的原理是什么,有什么特点?
- 算法题:实现短网址与长网址互相转换的算法思路与代码。
参考解析
- Java vs Go: Java是基于虚拟机的强面向对象语言,有成熟的GC和生态;Go是编译型语言,内置并发模型(Goroutine/Channel),无类继承机制,更偏向组合。
- RAG vs 微调: RAG通过检索外部知识库获取实时信息,具备可解释性强、成本低、易于更新的特点;微调则是改变模型参数以适应特定风格或领域,但难以处理动态数据且成本高。
- 缓存击穿/穿透: 击穿指热点Key过期导致瞬时请求压垮DB;穿透指查询不存在的数据导致请求直接打到DB。解决方案包括设置热点Key永不过期、互斥锁、布隆过滤器等。
- 幂等性: 指多次请求产生的结果与单次请求一致。实现常用方案:全局唯一ID(如Snowflake)、数据库唯一约束、Redis状态机记录请求状态。
- 布隆过滤器: 利用位数组和多个Hash函数判断元素是否存在。特点是空间效率极高,存在一定的误判率(判为存在可能不存在,但判为不存在一定不存在)。