记某个大厂面经

121 阅读4分钟

1.rocketMQ的事务消息原理是怎样的?half消息存在哪里?

image.png

  1. 应用模块遇到要发送事务消息的场景时,先发送prepare消息给MQ。
  2. prepare消息发送成功后,应用模块执行数据库事务(本地事务)。
  3. 根据数据库事务执行的结果,再返回Commit或Rollback给MQ。
  4. 如果是Commit,MQ把消息下发给Consumer端,如果是Rollback,直接删掉prepare消息。
  5. 第3步的执行结果如果没响应,或是超时的,启动定时任务回查事务状态(最多重试15次,超过了默认丢弃此消息),处理结果同第4步。
  6. MQ消费的成功机制由MQ自己保证。

事务消息有专门的一个队列RMQ_SYS_TRANS_HALF_TOPIC,所有的prepare消息都先往这里放,当消息收到Commit请求后,就把消息再塞到真实的Topic队列里,供Consumer消费,同时向RMQ_SYS_TRANS_OP_HALF_TOPIC塞一条消息。简易流程图如下: 事务消息有专门的一个队列RMQ_SYS_TRANS_HALF_TOPIC,所有的prepare消息都先往这里放,当消息收到Commit请求后,就把消息再塞到真实的Topic队列里,供Consumer消费,同时向RMQ_SYS_TRANS_OP_HALF_TOPIC塞一条消息。简易流程图如下:

image.png

2.hashMap的实现原理?

3.rocketMQ的顺序消息是怎样的?

4.JVM内存结构

image.png 1.程序计数器:行号指示器 2.虚拟机栈:局部变量表、操作数栈、动态链接、方法出口 3.本地方法栈:本地native方法 4.方法区:类信息、常量、静态变量 5.堆:对象

对象怎么分配的? 对象分配.png

5.负载均衡策略有哪些

1、随机策略——RandomRule

2、轮询策略——RoundRobinRule 注:Ribbon默认策略

3、重试策略——RetryRule

4、最低并发策略——BestAvailableRule

5、可用过滤策略——AvailabilityFilteringRule 过滤掉那些因为一直连接失败的被标记为circuit tripped的后端server,并过滤掉那些高并发的的后端server(active connections 超过配置的阈值) 性能仅次于最低并发策略。

6、响应时间加权策略——WeightedResponseTimeRule
每隔30秒计算一次服务器响应时间,以响应时间作为权重,响应时间越短的服务器被选中的概率越大。

7、区域权衡策略——ZoneAvoidanceRule

6.你还知道哪些RPC框架?TCP还是HTTP?

7.Nacos原理是怎样的?

8.Redis集群之间是如何通信的?采用的是什么协议?

redis cluster节点间采取gossip协议进行通信。

9.Redis在项目中的用途是怎么样的?

缓存/分布式锁

10.线程池的原理是怎样实现的?

  • corePoolSize: 核心线程数量
  • maximumPoolSize: 最大的线程数量
  • workQueue:多余任务等待队列
  • keepAliveTime:非核心线程空闲时间
  • threadFactory: 创建线程的工厂
  • handler:线程池拒绝策略

image.png 线程池原理关键技术:锁(lock,cas)、阻塞队列、hashSet(资源池)

11.IO模型熟悉吗?netty是怎样的?

12.如何解决项目中的慢查询问题?

13.你项目中的监听mysql binlog是怎么实现的?(cannel)

14.ThreadLocal是怎么样的?

ThreadLocal提供了「线程局部变量」,一个线程局部变量在多个线程中,分别有独立的值(副本)。 ThreadLocalMap key:ThreadLocal, value:共享变量

15.AQS你熟悉吗?都有哪些实现呢?state变量是如何控制的?

16.你项目中用到了哪些设计模式?

策略、责任链等

17.rocketMQ是怎么保证消息可靠性的?刷盘是同步还是异步?

1.生产者重试机制 2.broker一主多从,同步刷盘 3,消费者重试机制,死信队列

18.场景分析:如果做一个用户积分兑换怎样设计?

19.阻塞队列有哪些?

1. ArrayBlockingQueue

由数组结构组成的有界阻塞队列

2 LinkedBlockingQueue

由链表结构组成的有界阻塞队列 大小默认值是 Integer.MAX_VALUE
LinkedBlockingQueue 实现了读写分离,可以实现数据的读和写互不影响,这在高并发的场景下,对于效率的提高无疑是非常巨大的

3 SynchronousQueue

一个没有缓冲的无界队列

4)PriorityBlockingQueue

支持优先级排序的无界队列
默认大小为 11

5)DelayQueue 带有延迟时间的无界阻塞队列