一、JVM底层原理:从内存模型到性能调优
1.1 内存模型与垃圾回收机制
JVM内存模型是面试高频考点,需重点掌握堆(Heap)、方法区(Method Area)、栈(Stack)和元空间(Metaspace)的划分。例如,对象分配优先在Eden区完成,若空间不足则触发Minor GC;大对象直接进入老年代,通过-XX:PretenureSizeThreshold参数控制阈值。
垃圾回收算法方面,需对比标记-清除(Mark-Sweep)、复制(Copying)和标记-整理(Mark-Compact)的优缺点。例如,Serial GC适合单核CPU,而G1 GC通过分区(Region)实现可预测的停顿时间,适合大内存场景。面试中常问:
问题:如何选择合适的GC算法?
回答:根据应用场景,如低延迟需求选ZGC/Shenandoah,高吞吐量选Parallel GC,平衡型选G1。
1.2 类加载机制与双亲委派模型
类加载过程分为加载(Loading)、验证(Verification)、准备(Preparation)、解析(Resolution)和初始化(Initialization)五个阶段。双亲委派模型通过父加载器优先机制避免类冲突,但可通过自定义ClassLoader破坏(如Tomcat的WebAppClassLoader)。面试中常问:
问题:如何实现热部署?
回答:通过自定义类加载器隔离类版本,结合URLClassLoader.loadClass()动态加载新类。
二、Spring Boot核心机制:从自动配置到AOP
2.1 自动配置原理
Spring Boot通过spring-boot-autoconfigure模块实现自动配置,核心是@EnableAutoConfiguration注解和META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports文件。例如,当检测到DataSource类时,自动配置DataSourceAutoConfiguration。面试中常问:
问题:如何排除特定自动配置?
回答:使用@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})或配置spring.autoconfigure.exclude。
2.2 AOP与事务管理
AOP通过动态代理(JDK/CGLIB)实现横切关注点,如日志、事务。事务传播行为(Propagation)和隔离级别(Isolation)是重点。例如,@Transactional(propagation = Propagation.REQUIRED, isolation = Isolation.READ_COMMITTED)表示在现有事务中执行,隔离级别为读已提交。面试中常问:
问题:事务失效的常见原因?
回答:自调用(代理失效)、非public方法、异常未捕获(需抛出RuntimeException)。
三、微服务架构:从Spring Cloud到分布式事务
3.1 服务注册与发现
Eureka、Nacos和Consul是主流注册中心。Nacos支持AP(可用性优先)和CP(一致性优先)模式切换,适合不同场景。面试中常问:
问题:如何实现服务降级?
回答:通过Hystrix或Sentinel的熔断机制,结合@HystrixCommand(fallbackMethod = "fallbackMethod")。
3.2 分布式事务解决方案
Seata、TCC和本地消息表是常见方案。Seata通过AT模式(自动生成回滚日志)简化开发,但需数据库支持全局锁。面试中常问:
问题:如何保证最终一致性?
回答:结合消息队列(如RocketMQ)和事务消息,确保操作顺序执行。
四、RAG技术:从检索增强到Agent实践
4.1 RAG核心流程
RAG(Retrieval-Augmented Generation)通过检索外部知识增强LLM输出,流程包括:
- 文档切分:使用
LangChain的TextSplitter按章节或段落分割。 - 向量嵌入:通过
SentenceTransformers将文本转为向量。 - 相似度检索:使用
FAISS或Milvus快速查找Top-K相似片段。 - 上下文注入:将检索结果拼接到Prompt中。
面试中常问:
问题:如何优化RAG的准确率?
回答:通过多轮检索(Re-ranking)、混合检索(关键词+向量)和Prompt工程(如"结合以下背景信息回答:")。
4.2 Agent设计模式
Agent需具备规划(Plan)、执行(Act)和反思(Reflect)能力。例如,使用ReAct框架通过工具调用(如search_api)和思维链(Chain-of-Thought)逐步解决问题。面试中常问:
问题:如何设计一个旅游规划Agent?
回答:
```python
from langchain.agents import Tool, AgentExecutor
from langchain.utilities import WikipediaAPIWrapper
tools = [
Tool(
name=”Search”,
func=WikipediaAPIWrapper().run,
description=”搜索景点信息”
)
]
agent = AgentExecutor.from_agent_and_tools(
agent=…, # 预训练Agent
tools=tools
)
agent.run(“规划北京三日游,包含故宫和长城”)
```
五、面试实战建议
- 项目经验提炼:用STAR法则(情境、任务、行动、结果)描述技术方案,如“通过G1 GC将系统停顿时间从200ms降至50ms”。
- 代码手写准备:重点练习单例模式(双重检查锁)、线程池配置(
ThreadPoolExecutor参数)和SQL优化(索引设计)。 - 系统设计思维:从高可用(熔断、限流)、可扩展(分库分表)和安全性(鉴权、加密)角度展开。
互联网大厂Java/Agent面试注重技术深度与系统思维,通过掌握JVM调优、Spring Boot机制、微服务治理和RAG技术,结合实战项目经验,可显著提升通过率。建议读者持续关注开源社区(如Spring Cloud Alibaba、LangChain)的最新动态,保持技术敏感度。