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高的代码段。
-
优化代码,减少不必要的计算和同步操作。
-
如果是多线程应用,检查线程池配置是否合理。