JVM 你了解哪些?
JVM 是 Java 程序的运行环境,负责加载和执行 .class 字节码、管理内存以及垃圾回收,所以 Java 才能跨平台运行。核心包括类加载机制、运行时内存区域、执行引擎和 GC;其中堆存放大部分对象,栈保存方法调用和局部变量,JIT 会把热点代码编译成机器码提升性能。
Java 锁的底层原理是什么?
Java 锁本质上是保证多线程访问共享资源时的互斥、可见性和有序性。synchronized 基于对象监视器 Monitor,竞争失败的线程会等待锁;ReentrantLock 等显式锁通常基于 AQS,使用 CAS 修改同步状态,失败线程进入等待队列。JVM 还会通过轻量级锁和自旋等方式减少线程阻塞的开销。
synchronized 和 Lock 有什么区别?
synchronized 是 JVM 内置锁,写法简单,退出同步块时会自动释放,适合大多数同步场景。Lock 需要手动在 finally 中调用 unlock(),但它支持 tryLock()、可中断获取锁、超时等待和多个 Condition。没有特殊需求时优先用 synchronized,需要这些高级能力时再用 ReentrantLock。
volatile的作用
volatile 保证可见性、禁止指令重排,不保证原子性,不能解决线程安全问题。
线程池有哪些常用参数、队列和拒绝策略?
线程池的 7 个核心参数是:核心线程数、最大线程数、空闲线程存活时间、时间单位、任务队列、线程工厂和拒绝策略。常用队列有 ArrayBlockingQueue(有界)、LinkedBlockingQueue(可指定容量)和 SynchronousQueue(不存储任务)。
当线程池无法接收新任务时,常用的 4 种拒绝策略是:AbortPolicy 抛异常、CallerRunsPolicy 由提交任务的线程执行、DiscardPolicy 直接丢弃、DiscardOldestPolicy 丢弃队列中最早的任务后重试。
MySQL 有哪些事务隔离级别?默认级别是什么?
4 个级别:读未提交、读已提交、可重复读、串行化。InnoDB 默认是可重复读(Repeatable Read),通过 MVCC 和临键锁减少幻读。
Spring 事务的传播机制和隔离级别有哪些?
传播机制决定方法调用时如何使用事务:REQUIRED(默认,有则加入,没有则新建)、REQUIRES_NEW(总是新建,挂起当前事务)、NESTED(有事务时创建嵌套事务)、SUPPORTS(有则加入,没有则非事务执行)、NOT_SUPPORTED(非事务执行,挂起当前事务)、MANDATORY(必须有事务)和 NEVER(不能有事务)。
隔离级别有 DEFAULT、读未提交、读已提交、可重复读和串行化。默认的 DEFAULT 使用数据库自身的隔离级别,比如 MySQL InnoDB 默认是可重复读。
Spring MVC 的原理是什么?
Spring MVC 的核心是 DispatcherServlet(前端控制器)。请求先到 DispatcherServlet,再通过 HandlerMapping 找到对应的 Controller;HandlerAdapter 调用 Controller 并返回 ModelAndView;随后 ViewResolver 解析视图,最后将模型数据渲染为页面或响应数据返回客户端。

Spring AOP 的原理是什么?
Spring AOP 基于动态代理,在目标方法前后织入日志、事务、权限等增强逻辑。目标类有接口时用 JDK 动态代理,没有接口时用 CGLIB;类内部自调用不会经过代理,AOP 不生效。
Spring IoC 有哪些依赖注入方式?
常见有三种:构造器注入、Setter 注入、字段注入。构造器注入适合必需依赖,也便于测试;Setter 注入适合可选依赖;字段注入写法简单,但不便于测试和保证依赖完整。
@Autowired 和 @Resource 有什么区别?
@Autowired 是 Spring 注解,默认按类型注入;有多个同类型 Bean 时配合 @Qualifier 指定。@Resource 默认按名称注入,找不到再按类型匹配,可通过 name 指定 Bean。
微服务的核心组件有哪些?Spring Cloud 常用组件是什么?
核心能力有注册发现、配置管理、网关、远程调用、负载均衡、熔断降级和链路追踪。常用组件是 Nacos、Gateway、OpenFeign、LoadBalancer、Sentinel/Resilience4j 和 Micrometer/Zipkin;项目中常见 Nacos + Gateway + OpenFeign 的组合。
Nacos 的 namespace 是干什么的?
Nacos 的 namespace 用于隔离配置和服务实例,最常见的用途是隔离开发、测试和生产环境。不同 namespace 下同名的配置和服务默认互不可见,客户端需要用对应的 namespace ID 才能访问。更细的配置分类一般使用 Group 和 Data ID。
简单说一下 OpenFeign
OpenFeign 是 Spring Cloud 中声明式的 HTTP 客户端,用接口和注解定义远程调用,运行时由框架生成代理对象发起 HTTP 请求。它减少了手写 HTTP 调用代码,并能结合服务发现和负载均衡调用目标服务。使用时要注意它本质仍是远程调用,应配置超时、处理异常,并避免对非幂等写操作盲目重试。
RPC 底层原理是什么?
RPC 就是把远程调用封装成像本地方法调用一样。客户端通过动态代理把方法名和参数组装成请求,序列化后经网络发送;服务端反序列化并调用目标方法,再把结果序列化返回。实际项目通常还会配合注册中心、负载均衡、超时和重试等机制。
Seata 有哪些事务模式?有什么区别?
Seata 常见模式有 AT、TCC、SAGA 和 XA。AT 是 Seata 默认模式,通过自动生成回滚日志实现最终一致性,开发成本最低;TCC 需要业务实现提交和回滚,控制力强但开发成本高;SAGA 把长事务拆为多个本地事务,通过补偿操作回滚,适合长流程;XA 依赖数据库的两阶段提交,强一致性更好,但性能和资源占用较高。
什么是 CAP?
CAP 指分布式系统在发生网络分区时,一致性 C、可用性 A 和分区容错性 P 不能同时完全满足。实际系统通常必须保证 P,然后在分区时选择偏向 CP 或 AP:CP 宁可暂时拒绝请求也要保证数据一致,AP 优先响应,但可能返回旧数据,之后再达到最终一致。
RabbitMQ 有几种消息路由类型?
RabbitMQ 常见的 Exchange 路由类型有 4 种:direct、fanout、topic 和 headers。direct 是精确匹配路由键,fanout 是广播,topic 支持通配符匹配,headers 按消息头匹配。实际最常用的是前三种,尤其是 direct 和 topic。
Redis 有哪些备份策略?
Redis 主要有 RDB 和 AOF 两种持久化方式。RDB 按时间点生成快照,文件小、恢复快,但可能丢失最近一段时间的数据;AOF 记录写命令,数据更完整,但文件较大、恢复较慢。生产环境通常使用 RDB+AOF,并将备份文件定期复制到其他机器或对象存储;主从复制主要用于高可用,不能完全替代独立备份。
Vue 2 和 Vue 3 有什么区别?生命周期有哪些?
区别可以概括为:Vue 2 用 Options API 和 Object.defineProperty,Vue 3 用 Composition API 和 Proxy,Vue 3 的性能、TypeScript 支持和代码复用更好。
生命周期按顺序是:创建、挂载、更新、销毁。Vue 2 常用钩子为 beforeCreate、created、beforeMount、mounted、beforeUpdate、updated、beforeDestroy、destroyed;Vue 3 用 setup 代替前两个创建钩子,销毁阶段改为 onBeforeUnmount、onUnmounted。