JVM 你了解哪些?

JVM 是 Java 程序的运行环境,负责加载和执行 .class 字节码、管理内存以及垃圾回收,所以 Java 才能跨平台运行。核心包括类加载机制、运行时内存区域、执行引擎和 GC;其中堆存放大部分对象,栈保存方法调用和局部变量,JIT 会把热点代码编译成机器码提升性能。


RPC 底层原理是什么?

RPC 就是把远程调用封装成像本地方法调用一样。客户端通过动态代理把方法名和参数组装成请求,序列化后经网络发送;服务端反序列化并调用目标方法,再把结果序列化返回。实际项目通常还会配合注册中心、负载均衡、超时和重试等机制。


Nacos 的 namespace 是干什么的?

Nacos 的 namespace 用于隔离配置和服务实例,最常见的用途是隔离开发、测试和生产环境。不同 namespace 下同名的配置和服务默认互不可见,客户端需要用对应的 namespace ID 才能访问。更细的配置分类一般使用 Group 和 Data ID。


Java 锁的底层原理是什么?

Java 锁本质上是保证多线程访问共享资源时的互斥、可见性和有序性。synchronized 基于对象监视器 Monitor,竞争失败的线程会等待锁;ReentrantLock 等显式锁通常基于 AQS,使用 CAS 修改同步状态,失败线程进入等待队列。JVM 还会通过轻量级锁和自旋等方式减少线程阻塞的开销。


synchronized 和 Lock 有什么区别?

synchronized 是 JVM 内置锁,写法简单,退出同步块时会自动释放,适合大多数同步场景。Lock 需要手动在 finally 中调用 unlock(),但它支持 tryLock()、可中断获取锁、超时等待和多个 Condition。没有特殊需求时优先用 synchronized,需要这些高级能力时再用 ReentrantLock。


什么是 CAP?

CAP 指分布式系统在发生网络分区时,一致性 C、可用性 A 和分区容错性 P 不能同时完全满足。实际系统通常必须保证 P,然后在分区时选择偏向 CP 或 AP:CP 宁可暂时拒绝请求也要保证数据一致,AP 优先响应,但可能返回旧数据,之后再达到最终一致。


RabbitMQ 有几种消息路由类型?

RabbitMQ 常见的 Exchange 路由类型有 4 种:direct、fanout、topic 和 headers。direct 是精确匹配路由键,fanout 是广播,topic 支持通配符匹配,headers 按消息头匹配。实际最常用的是前三种,尤其是 direct 和 topic。


简单说一下 OpenFeign

OpenFeign 是 Spring Cloud 中声明式的 HTTP 客户端,用接口和注解定义远程调用,运行时由框架生成代理对象发起 HTTP 请求。它减少了手写 HTTP 调用代码,并能结合服务发现和负载均衡调用目标服务。使用时要注意它本质仍是远程调用,应配置超时、处理异常,并避免对非幂等写操作盲目重试。