高频微服务面试题总结

微服务基础概念

  1. 什么是微服务架构?

    • 将单一应用拆分为一组小型服务
    • 每个服务运行独立进程,轻量级通信
    • 独立开发、部署和扩展
    • 特点:松耦合、独立技术栈、独立数据库
  2. 微服务与单体架构对比

    维度 单体架构 微服务架构
    开发效率 初期快 初期慢
    部署 整体部署 独立部署
    扩展性 整体扩展 细粒度扩展
    技术多样性 单一技术栈 多语言支持
    故障隔离 影响范围大 影响范围小
  3. 微服务优缺点

    • 优点
      • 独立部署
      • 技术异构性
      • 弹性扩展
      • 故障隔离
    • 缺点
      • 分布式系统复杂性
      • 数据一致性挑战
      • 运维复杂度高
      • 网络延迟

服务通信

  1. 微服务间通信方式

    • 同步通信
      • REST (HTTP/JSON)
      • gRPC (高性能二进制协议)
      • GraphQL (灵活数据查询)
    • 异步通信
      • 消息队列 (Kafka/RabbitMQ)
      • 事件驱动 (Event Sourcing)
    • 通信模式
      • 请求/响应
      • 发布/订阅
      • 事件通知
  2. REST vs gRPC

    特性 REST gRPC
    协议 HTTP/1.1 HTTP/2
    数据格式 JSON/XML Protocol Buffers
    性能 较低
    流支持 有限 完善(四种流模式)
    浏览器支持 完善 有限(需要gRPC-web)

服务发现与注册

  1. 服务注册中心实现原理

    • 核心功能
      • 服务注册
      • 服务发现
      • 健康检查
    • 常见实现
      • Eureka (AP系统)
      • Nacos (支持AP/CP)
      • Consul (CP系统)
      • Zookeeper (CP系统)
  2. 客户端负载均衡 vs 服务端负载均衡

    • 客户端负载均衡
      • 客户端维护服务列表
      • 自行选择服务实例(Ribbon)
      • 优点:减少网络跳转
    • 服务端负载均衡
<think>好的,我需要处理用户关于Java高频面试题的查询。首先,用户提到了几个引用内容,包括JDK、JRE、JVM的区别,wait/notify方法的位置,以及MQ消息幂等性的处理。我的任务是根据这些引用生成相关的问题,并确保格式正确。 首先,我要确认用户的需求是获取Java高频面试题的汇总,特别是最新整理的。用户提供的引用内容中,已经有一些问题,比如第5点类加载器的作用,第6点wait等方法定义在Object类的原因,以及MQ的幂等性处理。我需要围绕这些主题生成相关问题,并确保符合格式要求。 接下来,我需要检查是否有遗漏的领域。用户提供的引用涉及到JVM基础、多线程、消息队列(RocketMQ/RabbitMQ),这些都是Java面试中的常见主题。可能还需要覆盖集合、并发编程、JVM内存模型、设计模式、Spring框架、数据库等热门话题。 然后,我需要确保每个问题都是高频且符合最新的趋势。例如,关于JDK新特性的问题,如Java 8的Stream API或模块化系统,都是常见的。另外,Spring Boot的自动配置原理和微服务相关的问题也是当前的热点。 在生成问题时,要避免重复,并确保问题之间有逻辑性。例如,从基础到进阶,或者按技术领域分类。同时,每个问题需要明确,能够引导面试者展示其知识深度。 最后,按照用户的示例结构,先给出一个概览,再列出相关问题,并在每个问题后添加引用标识。确保所有数学公式正确使用$...$或$$...$$格式,虽然当前问题可能不涉及数学公式,但需要保持警惕。同时,使用中文回答,结构清晰,分点列出。</think>### Java 高频面试题汇总(最新整理) #### 1. **JVM 基础** - **JDK、JRE、JVM 的区别与联系** JDK 包含开发工具和 JRE,JRE 包含运行环境和 JVM,JVM 是跨平台的核心组件[^1]。 - **类加载器的作用是什么?如何实现双亲委派机制?** 类加载器负责将字节码加载到内存,双亲委派通过优先委派父类加载器避免重复加载。 #### 2. **多线程与并发编程** - **为什么 `wait()`、`notify()`、`notifyAll()` 定义在 `Object` 类而非 `Thread` 类?** 因为这些方法依赖于对象锁,任何对象都可作为锁,需与对象关联而非线程[^2]。 - **线程池的核心参数有哪些?拒绝策略如何选择?** 核心参数包括核心线程数、最大线程数、队列类型等;拒绝策略有丢弃任务、抛出异常等。 #### 3. **消息队列(MQ)** - **如何保证消息消费的幂等性?** 可通过唯一消息 ID 验证,消费者根据 ID 判断是否已消费[^3]。 - **RocketMQ 如何实现消息顺序性?** 通过同一队列内消息顺序存储和单线程消费保证。 #### 4. **集合框架** - **HashMap 的底层实现与扩容机制** 基于数组+链表/红黑树,扩容时容量翻倍并重新哈希。 #### 5. **JVM 内存模型** - **堆和栈的区别?哪些数据存储在堆中?** 堆存储对象实例,栈存储局部变量;对象和数组在堆中分配。 #### 6. **设计模式** - **单例模式的实现方式及优缺点** 包括饿汉式、懒汉式(双重检查锁)、静态内部类、枚举等。 #### 7. **Spring 框架** - **Spring AOP 的实现原理** 基于动态代理(JDK 或 CGLIB)实现横切逻辑的织入。 - **Bean 的生命周期包含哪些阶段?** 实例化、属性填充、初始化、使用、销毁。 #### 8. **数据库与事务** - **MySQL 的索引优化原则** 遵循最左前缀原则,避免冗余索引,使用覆盖索引减少回表。 #### 9. **分布式系统** - **CAP 理论如何权衡一致性、可用性、分区容错性?** 分布式系统需在 CAP 中至少满足两项,通常选择 CP 或 AP。 §§ 1. 如何通过 JVM 参数优化垃圾回收性能? 2. `synchronized` 和 `ReentrantLock` 的实现机制有何区别? 3. RocketMQ 的消息持久化策略是什么? 4. ConcurrentHashMap 如何保证线程安全? 5. Spring Boot 的自动配置原理是什么? 6. 如何解决数据库的幻读问题? 7. 微服务中如何实现服务熔断与降级? --- 以上问题覆盖 Java 核心知识点及分布式、框架等扩展领域,建议结合实际场景深入理解底层原理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值