阿里云CIO线一面
《面试题目》
📍面试公司:阿里云
- 🕐面试时间:5.14
- 💻面试岗位:JAVA研发
❓面试问题:
- 抛开 AI 部分,讲讲整个服务架构是什么样的?包括前端怎么用、后端怎么用、前后端怎么交互?
- Redis 是存短期内容吗?是用于做缓存还是其他用途?
- 了解 Spring Boot 的整个启动原理吗?Spring Boot 打的包结构是怎么样的?服务是怎么启动的?
- 整个项目的代码是自己写的,还是主要由 AI 全部自动生成的?
- 没有 AI 之前,你自己有没有单独搞过纯手搭的项目?
- 两个 AI agent 的主要分工是什么?介绍一下对话 agent 和运维 agent 的核心能力?
- 有没有做多轮循环的控制?如果 agent 一直循环调用工具会怎么处理?
- RAG 的 TOKEN 调优省了 50%,是生成 TOKEN 还是输入 TOKEN?怎么计算的这个数值?做了哪些具体的调优工作?
- 上下文压缩有什么策略?如何避免过滤掉有用信息、留下噪音数据?
- 对于长期有效的信息,会做什么特殊处理把它留存下来吗?
- 平均检索度 80% 以上,有没有自己构建评估集?评估集是怎么处理的?处理了多少数据?
- AI agent 用的哪个大模型来做的?
- 觉得 Claude 好在哪里(从模型本身和 agent 设计两个方面)?对它的 agent 整个运行原理了解吗?
- 从你的角度看,大模型本身重要,还是整个 agent 的架构设计更重要?
- 本地生活服务平台的主要内容有哪些?开发过程中有没有碰到在线问题调试、节点故障之类的问题?
- 假设线上发现内存不停地缓慢增长,不确定是哪行代码出的问题,你会怎么排查?有办法定位到具体代码吗?
- JVM 里面主要的组件有哪些?JVM 的体系了解吗?能讲一下 JVM 的内存模型吗?
- 本地方法栈主要是用于什么用途的?
- 方法区空间出现预警了,最大的可能是什么原因?有办法回收方法区的垃圾吗?运行时怎么处理方法区空间不足的问题?
- 了解 classloader(类加载器)吗?通过 classloader 有办法处理动态类加载过多的问题吗?
- 了解 Tomcat 吗?看过整个设计吗?
《参考解析》
-
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(嵌套事务)等。
-
JVM与GC:JVM内存模型:堆(对象分配,GC管理)、方法区(类信息、常量池)、虚拟机栈(栈帧/局部变量/操作数栈)、本地方法栈、程序计数器。GC算法:标记-清除(内存碎片)、标记-整理(无碎片,但移动对象)、复制(新生代)。G1按Region划分堆,预测停顿时间。
-
RAG与大模型:RAG(检索增强生成)流程:文档切片→向量化(Embedding)→存向量数据库→检索时将query向量化→TopK语义检索→将相关文档拼入prompt→LLM生成。优化:混合检索(语义+关键词)、重排序Rerank、查询改写、上下文压缩。评估:召回率(relevant docs retrieved/total relevant)、精确率、Answer相关性。