米哈游二面复盘

1. Nacos配置更新的工作流程

Nacos配置更新的工作流程主要包括以下几个步骤:

  • 客户端请求Nacos服务端获取配置信息。

  • Nacos服务端响应客户端请求,提供配置内容。

  • 客户端监听Nacos服务端的配置变更事件。

  • 当配置发生变更时,Nacos服务端主动推送新的配置信息到客户端。

  • 客户端收到新的配置信息后,使用新的配置进行业务逻辑的更新。

自:

首先客户端请求,等待服务端响应后,客户端继续监听推送,获取配置信息后更新。

2. RabbitMQ的消息如何实现路由?

RabbitMQ的消息实现路由主要是通过交换器(Exchange)和绑定(Binding)来完成的:

  • 消息生产者将消息发送到交换器。

  • 交换器根据消息的Routing Key和自身的类型(Direct、Fanout、Topic等)决定如何路由消息。

  • 消息被路由到一个或多个队列中,与队列绑定的消费者可以接收到消息。

自:

生产者将信息发送到交换器后,交换器根据key和类型决定如何路由信息(按自学习和转发帧来答),消息被路由到若干队列中(队列对应着绑定的消费者)
 

3. 如何保证RabbitMQ的消息可靠传输

为了保证RabbitMQ的消息可靠传输,可以采用以下措施:

  • 使用持久化(Persistence)机制,确保消息在服务器本地文件系统中保存。

  • 开启消息确认(Message Acknowledgment)机制,确保消息被消费者正确接收后再从队列中删除。

  • 使用事务(Transaction)或发送方确认(Publisher Confirms)来保证消息的发送可靠性。

自:

开启持久化,开启信息确认机制,幂等性,开启事务(往可靠传输答)
 

4. 请说下Netty中Reactor模式的理解

Reactor模式是一种处理并发的高效方式,在Netty中它指的是:

  • 主线程(Boss线程)负责接收客户端的连接请求。

  • 工作线程(Worker线程)负责处理读写操作。

  • 通过非阻塞IO和事件驱动的机制,提高应用程序的响应性能和并发能力。

自:

处理高并发,从线程的角度答

5. HashMap中的hash方法为什么要右移16位异或

HashMap中的hash方法采用右移16位异或的方式是为了减少哈希碰撞,通过混合原始哈希码的高位和低位,使得哈希值更加分散,从而提高HashMap的性能。

自:

减少hash碰撞,更大程度地分散哈希值,提高性能
 

6. DCL单例模式设计为什么需要volatile修饰实例对象

DCL(Double-Checked Locking)单例模式中需要使用volatile关键字修饰实例对象是为了防止指令重排,确保在多线程环境中对单例对象的创建是安全的。

自:

防止指令重排,确保多线程环境对单例对象的安全性
 

7. 说一下你对行锁、临键锁、间隙锁的理解

  • 行锁:锁定数据表中的某一行,用于避免多线程同时操作同一行数据。

  • 临键锁:在行锁的基础上,对当前行和前一行的数据加锁,防止幻读。

  • 间隙锁:锁定一个数据范围,用于防止在锁定范围内插入新的数据行。

自:

锁某一行,多线程事务一致性
在行锁基础上对当前行和前一行加锁,防止幻读
在一个数据范围内防止插入新的数据行
 

8. 生产环境服务器变慢,如何诊断处理?

诊断生产环境服务器变慢的方法包括:

  • 监控系统资源使用情况,如CPU、内存、磁盘IO、网络等。

  • 检查应用日志,定位可能的异常或慢查询。

  • 分析数据库性能,优化查询和索引。

  • 使用性能分析工具,如JProfiler、VisualVM等,找出性能瓶颈。

自:

任务管理器(cpu内存磁盘网络gpu等)
日志(举例子)
数据库➕索引
测试(性能分析)

9. HashMap啥时候扩容,为什么扩容?

HashMap在元素数量达到容量和负载因子的乘积时进行扩容。扩容是为了保证HashMap的性能,当元素太多导致哈希冲突增加时,通过扩容可以减少冲突,保持操作的高效性。

自:

数量大于 容量*负载因子时,减少哈希冲突,保证性能
 

10. 为什么高并发下数据写入不推荐关系数据库?

高并发下数据写入不推荐使用关系数据库的原因包括:

  • 关系数据库的锁定机制在高并发环境下会成为瓶颈。

  • 写入压力大时,事务提交会成为瓶颈。

  • 关系数据库的写入性能通常不如NoSQL数据库,尤其是在水平扩展方面有限。

自:

锁定机制影响性能(从机制的角度)
写入压力(从事务的角度)
 

11. 如何确保你的消息只被消费一次?

确保消息只被消费一次的常见方法包括:

  • 使用消息队列提供的消息确认机制,确保消息在被消费后标记为已处理。

  • 在消费者端实现幂等性,即使消息被多次消费,也不会产生副作用。

  • 利用消息队列的排序保证和消费策略,避免重复消费。

自:

消息确认幂等性排序,消费策略
 

12. 如何设计在生产环境下做全链路压测的平台

设计全链路压测平台的方法包括:

  • 采集和监控整个链路的性能指标,包括响应时间、吞吐量、错误率等。

  • 设计模拟高负载的压测工具,能够模拟真实用户的请求行为。

  • 实现结果收集和分析机制,能够实时反馈压测结果。

  • 提供可视化界面,方便用户配置压测场景和查看结果。

自:

没听过,开始乱答(扯计算机系统结构的知识)
性能指标(响应时间,吞吐量巴拉巴拉),压测工具(扯脚本,扯apipost),可视化(从便捷性考虑)

13. [线上问题排查] MQ消息队列消息堆积问题排查和解决思路

排查和解决消息队列消息堆积问题:

  • 监控队列长度,发现堆积情况。

  • 分析生产者发送消息的速率和消费者处理消息的速率。

  • 检查消费者是否有故障或处理延迟。

  • 增加消费者数量或者优化消费者处理逻辑。

  • 如果消息可丢弃,考虑清理部分无用的消息。

14. [线上问题排查] 如果JVM出现频繁FullGC该如何

处理JVM频繁FullGC问题:

  • 监控JVM内存使用情况,确定内存泄漏点。

  • 分析GC日志,找出GC频繁的原因。

  • 调整JVM参数,如堆大小、垃圾回收器类型等。

  • 优化应用代码,减少内存占用和对象创建。

15. [线上问题排查] JVM OOM问题如何排查和解决

排查和解决JVM OOM问题:

  • 使用堆分析工具(如MAT)分析堆转储文件,找出内存泄漏的源头。

  • 检查是否有大对象占用过多内存。

  • 调整JVM堆大小,确保有足够的内存空间。

  • 优化应用代码,避免内存泄漏。

16. [线上问题排查] CPU使用率较高排查和解决思路

排查和解决CPU使用率较高的问题:

  • 使用性能分析工具监控CPU使用情况,找出占用高的线程或进程。

  • 分析线程栈,确定占用CPU高的代码段。

  • 优化代码,减少不必要的计算和同步操作。

  • 如果是多线程应用,检查线程池配置是否合理。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值