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 怎么实现事务一致性?
Spring 通过 @Transactional 和 AOP 代理实现本地事务一致性:方法执行前由事务管理器开启事务,正常执行完就提交;发生异常则回滚。默认只对 RuntimeException 和 Error 回滚,受检异常需要通过 rollbackFor 指定;同类内部直接调用不会经过代理,事务也不会生效。
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 常用数据类型有哪些?
最常用的 5 种是:String(缓存、计数器)、Hash(对象属性)、List(消息队列、列表)、Set(去重、共同关注)和 ZSet(带分数排序,如排行榜)。此外还有 Bitmap、HyperLogLog、Geo 和 Stream 等特殊类型。
Redis 有哪些备份策略?
Redis 主要有 RDB 和 AOF 两种持久化方式。RDB 按时间点生成快照,文件小、恢复快,但可能丢失最近一段时间的数据;AOF 记录写命令,数据更完整,但文件较大、恢复较慢。生产环境通常使用 RDB+AOF,并将备份文件定期复制到其他机器或对象存储;主从复制主要用于高可用,不能完全替代独立备份。
Linux 常用命令有哪些?
常用命令包括:ls 查看目录、cd 切换目录、pwd 查看当前路径、cp 复制、mv 移动或重命名、rm 删除、cat/less 查看文件、grep 搜索文本、find 查找文件、ps -ef 查看进程、top 查看系统资源、kill 结束进程、tail -f 实时查看日志、chmod 修改权限、df -h 查看磁盘空间、free -h 查看内存。
Docker 常用命令有哪些?
docker images 查看镜像,docker pull 拉取镜像,docker build 构建镜像;docker ps 查看容器,docker run 创建并启动容器,docker start/stop/restart 管理容器,docker logs -f 查看日志,docker exec -it <容器> sh 进入容器,docker rm 删除容器,docker rmi 删除镜像;docker compose up -d 启动 Compose 服务。
Nginx 常用命令有哪些?
nginx -t 检查配置,nginx -s reload 平滑重载配置,nginx -s stop 停止服务,nginx -s quit 优雅退出;使用 systemd 时常用 systemctl start|stop|restart|reload nginx 管理服务。日志通常通过 tail -f /var/log/nginx/access.log 或 error.log 查看。
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。
v-if 和 v-show 有什么区别?
v-if 根据条件创建或销毁元素,切换开销较大,适合条件很少变化的场景;v-show 始终渲染元素,通过 CSS 的 display 控制显示和隐藏,切换开销较小,适合频繁切换的场景。