学不会退出IT界,21年度“Java中间件面试真题&高频知识点汇总”

(4)OBSERVING:观察者状态。表明当前服务器角色是 Observer。

15. 数据同步

=========

学不会退出IT界!21年度“Java中间件面试真题&高频知识点汇总”

16. zookeeper 是如何保证事务的顺序一致性的?

==============================

学不会退出IT界!21年度“Java中间件面试真题&高频知识点汇总”

17. 分布式集群中为什么会有 Master?

========================

在分布式环境中,有些业务逻辑只需要集群中的某一台机器进行执行,其他的机器可以共享这个结果,这样可以大大减少重复计算,提高性能,于是就需要进行leader 选举。

18. zk 节点宕机如何处理?

=================

学不会退出IT界!21年度“Java中间件面试真题&高频知识点汇总”

19. zookeeper 负载均衡和 nginx 负载均衡区别

=================================

zk 的负载均衡是可以调控,nginx 只是能调权重,其他需要可控的都需要自己写插件;但是 nginx 的吞吐量比 zk 大很多,应该说按业务选择用哪种方式。

20. Zookeeper 有哪几种几种部署模式?

==========================

部署模式:单机模式、伪集群模式、集群模式

21. 集群最少要几台机器,集群规则是怎样的?

========================

集群规则为 2N+1 台,N>0,即 3 台

22. 集群支持动态添加机器吗?

=================

学不会退出IT界!21年度“Java中间件面试真题&高频知识点汇总”

23. Zookeeper 对节点的 watch 监听通知是永久的吗?为什么不是永久的?

=============================================

学不会退出IT界!21年度“Java中间件面试真题&高频知识点汇总”

24. Zookeeper 的 java 客户端都有哪些?

==============================

java 客户端:zk 自带的 zkclient 及 Apache 开源的 Curator。

25. chubby 是什么,和 zookeeper 比你怎么看?

==================================

chubby 是 google 的,完全实现 paxos 算法,不开源。zookeeper 是 chubby的开源实现,使用 zab协议,paxos 算法的变种。

26. 说几个 zookeeper 常用的命令。

=========================

常用命令:ls get set create delete 等。

27. ZAB 和 Paxos 算法的联系与区别?

==========================

学不会退出IT界!21年度“Java中间件面试真题&高频知识点汇总”

28. Zookeeper 的典型应用场景

======================

Zookeeper 是一个典型的发布/订阅模式的分布式数据管理与协调框架,开发人员可以使用它来进行分布式数据的发布和订阅。

通过对 Zookeeper 中丰富的数据节点进行交叉使用,配合 Watcher 事件通知机制,可以非常方便的构建一系列分布式应用中年都会涉及的核心功能,如:

  • (1)数据发布/订阅

  • (2)负载均衡

  • (3)命名服务

  • (4)分布式协调/通知

  • (5)集群管理(6)Master 选举

  • (7)分布式锁

  • (8)分布式队列

数据发布/订阅

=======

介绍

数据发布/订阅系统,即所谓的配置中心,顾名思义就是发布者发布数据供订阅者进行数据订阅。

目的

动态获取数据(配置信息)

实现数据(配置信息)的集中式管理和数据的动态更新

设计模式

Push 模式

Pull 模式

数据(配置信息)特性

(1)数据量通常比较小

(2)数据内容在运行时会发生动态更新

(3)集群中各机器共享,配置一致

如:机器列表信息、运行时开关配置、数据库配置信息等

基于 Zookeeper 的实现方式

· 数据存储:将数据(配置信息)存储到 Zookeeper 上的一个数据节点

· 数据获取:应用在启动初始化节点从 Zookeeper 数据节点读取数据,并在该节点上注册一个数据变更

Watcher

· 数据变更:当变更数据时,更新 Zookeeper 对应节点数据,Zookeeper会将数据变更通知发到各客户

端,客户端接到通知后重新读取变更后的数据即可。

负载均衡

====

zk 的命名服务

命名服务是指通过指定的名字来获取资源或者服务的地址,利用 zk 创建一个全局的路径,这个路径就可以作为一个名字,指向集群中的集群,提供的服务的地址,或者一个远程的对象等等。

分布式通知和协调

========

对于系统调度来说:操作人员发送通知实际是通过控制台改变某个节点的状态,然后 zk 将这些变化发送给注册了这个节点的 watcher 的所有客户端。对于执行情况汇报:每个工作进程都在某个目录下创建一个临时节点。并携带工作的进度数据,这样汇总的进程可以监控目录子节点的变化获得工作进度的实时的全局情况。

zk 的命名服务(文件系统)

==============

命名服务是指通过指定的名字来获取资源或者服务的地址,利用 zk 创建一个全局的路径,即是唯一的路径,这个路径就可以作为一个名字,指向集群中的集群,提供的服务的地址,或者一个远程的对象等等。

zk 的配置管理(文件系统、通知机制)程序分布式的部署在不同的机器上,将程序的配置信息放在 zk 的 znode 下,当有配置发生改变时,也

就是 znode 发生变化时,可以通过改变 zk 中某个目录节点的内容,利用 watcher 通知给各个客户端,从而更改配置。

Zookeeper 集群管理(文件系统、通知机制)

=========================

所谓集群管理无在乎两点:是否有机器退出和加入、选举 master。对于第一点,所有机器约定在父目录下创建临时目录节点,然后监听父目录节点的子节点变化消息。一旦有机器挂掉,该机器与 zookeeper 的连接断开,其所创建的临时目录节点被删除,所有其他机器都收到通知:某个兄弟目录被删除,于是,所有人都知道:它上船了。新机器加入也是类似,所有机器收到通知:新兄弟目录加入,highcount 又有了,对于第二点,我们稍微改变一下,所有机器创建临时顺序编号目录节点,每次选取编号最小的机器作为 master 就好。

Zookeeper 分布式锁(文件系统、通知机制)

=========================

有了 zookeeper 的一致性文件系统,锁的问题变得容易。锁服务可以分为两类,一个是保持独占,另一个是控制时序。对于第一类,我们将 zookeeper 上的一个 znode 看作是一把锁,通过 createznode的方式来实现。所

有客户端都去创建 /distribute_lock 节点,最终成功创建的那个客户端也即拥有了这把锁。用完删除掉自己创建的 distribute_lock 节点就释放出锁。对于第二类, /distribute_lock 已经预先存在,所有客户端在它下面创建临时顺序编号目录节点,和选master 一样,编号最小的获得锁,用完删除,依次方便。Zookeeper 队列管理(文件系统、通知机制)

两种类型的队列:

(1)同步队列,当一个队列的成员都聚齐时,这个队列才可用,否则一直等待所有成员到达。

(2)队列按照 FIFO 方式进行入队和出队操作。

第一类,在约定目录下创建临时目录节点,监听节点数目是否是我们要求的数目。

第二类,和分布式锁服务中的控制时序场景基本原理一致,入列有编号,出列按编号。在特定的目录下

创建 PERSISTENT_SEQUENTIAL 节点,创建成功时Watcher 通知等待的队列,队列删除序列号最小的节点用以消费。此场景下Zookeeper 的 znode 用于消息存储,znode 存储的数据就是消息队列中的消息内容,SEQUENTIAL 序列号就是消息的编号,按序取出即可。由于创建的节点是持久化的,所以不必担心队列消息的丢失问题。

RabbitMQ

========

1. 什么是MQ

=========

MQ就是消息队列。是软件和软件进行通信的中间件产品

2. MQ的优点

=========

  • 异步处理 - 相比于传统的串行、并行方式,提高了系统吞吐量。

  • 应用解耦 - 系统间通过消息通信,不用关心其他系统的处理。

  • 流量削锋 - 可以通过消息队列长度控制请求量;可以缓解短时间内的高并发请求。

  • 日志处理 - 解决大量日志传输。

  • 消息通讯 - 消息队列一般都内置了高效的通信机制,因此也可以用在纯的消息通讯。比如实

  • 现点对点消息队列,或者聊天室等。

3. 解耦、异步、削峰是什么?。

=================

  • 解耦 :A 系统发送数据到 BCD 三个系统,通过接口调用发送。如果 E 系统也要这个数据呢?那如果 C 系统现在不需要了呢?A 系统负责人几乎崩溃…A 系统跟其它各种乱七八糟的系统严重耦合,A 系统产生一条比较关键的数据,很多系统都需要 A 系统将这个数据发送过来。如果使用 MQ,A系统产生一条数据,发送到 MQ 里面去,哪个系统需要数据自己去 MQ 里面消费。如果新系统需 要数据,直接从 MQ 里消费即可;如果某个系统不需要这条数据了,就取消对 MQ 消息的消费即可。这样下来,A 系统压根儿不需要去考虑要给谁发送数据,不需要维护这个代码,也不需要考虑 人家是否调用成功、失败超时等情况。就是一个系统或者一个模块,调用了多个系统或者模块,互相之间的调用很复杂,维护起来很麻烦。但是其实这个调用是不需要直接同步调用接口的,如果用 MQ 给它异步化解耦。

  • 异步 :A 系统接收一个请求,需要在自己本地写库,还需要在 BCD 三个系统写库,自己本地写库 要 3ms,BCD 三个系统分别写库要 300ms、450ms、200ms。最终请求总延时是 3 + 300 + 450 + 200 = 953ms,接近 1s,用户感觉搞个什么东西,慢死了慢死了。用户通过浏览器发起请求。 如果使用 MQ,那么 A 系统连续发送 3 条消息到 MQ 队列中,假如耗时 5ms,A 系统从接受一个 请求到返回响应给用户,总时长是 3 + 5 = 8ms。

  • 削峰 :减少高峰时期对服务器压力

4. 消息队列有什么缺点

=============

学不会退出IT界!21年度“Java中间件面试真题&高频知识点汇总”

5. 你们公司生产环境用的是什么消息中间件?

=======================

  • 这个首先你可以说下你们公司选用的是什么消息中间件,比如用的是RabbitMQ,然后可以初步给一些你对不同MQ中间件技术的选型分析。

  • 举个例子:比如说ActiveMQ是老牌的消息中间件,国内很多公司过去运用的还是非常广泛的,功能很强大。

  • 但是问题在于没法确认ActiveMQ可以支撑互联网公司的高并发、高负载以及高吞吐的复杂场景,在国内互联网公司落地较少。而且使用较多的是一些传统企业,用ActiveMQ做异步调用和系统解耦。

  • 然后你可以说说RabbitMQ,他的好处在于可以支撑高并发、高吞吐、性能很高,同时有非常完善便捷的后台管理界面可以使用。

  • 另外,他还支持集群化、高可用部署架构、消息高可靠支持,功能较为完善。

  • 而且经过调研,国内各大互联网公司落地大规模RabbitMQ集群支撑自身业务的case较多,国内各种中小型互联网公司使用RabbitMQ的实践也比较多。

  • 除此之外,RabbitMQ的开源社区很活跃,较高频率的迭代版本,来修复发现的bug以及进行各种优化,因此综合考虑过后,公司采取了RabbitMQ。

  • 但是RabbitMQ也有一点缺陷,就是他自身是基于erlang语言开发的,所以导致较为难以分析里面的源码,也较难进行深层次的源码定制和改造,毕竟需要较为扎实的erlang语言功底才可以。

  • 然后可以聊聊RocketMQ,是阿里开源的,经过阿里的生产环境的超高并发、高吞吐的考验,性能卓越,同时还支持分布式事务等特殊场景。

  • 而且RocketMQ是基于Java语言开发的,适合深入阅读源码,有需要可以站在源码层面解决线上生产问题,包括源码的二次开发和改造。

  • 另外就是Kafka。Kafka提供的消息中间件的功能明显较少一些,相对上述几款MQ中间件要少很多。

  • 但是Kafka的优势在于专为超高吞吐量的实时日志采集、实时数据同步、实时数据计算等场景来设计。

  • 因此Kafka在大数据领域中配合实时计算技术(比如Spark Streaming、Storm、Flink)使用的较多。但是在传统的MQ中间件使用场景中较少采用。

6. Kafka、ActiveMQ、RabbitMQ、RocketMQ 有什么优缺点?

============================================

学不会退出IT界!21年度“Java中间件面试真题&高频知识点汇总”

学不会退出IT界!21年度“Java中间件面试真题&高频知识点汇总”

7. MQ 有哪些常见问题?如何解决这些问题?

========================

学不会退出IT界!21年度“Java中间件面试真题&高频知识点汇总”

学不会退出IT界!21年度“Java中间件面试真题&高频知识点汇总”

8. 什么是RabbitMQ?

================

RabbitMQ是一款开源的,Erlang编写的,消息中间件; 最大的特点就是消费并不需要确保提供方 存在,实现了服务之间的高度解耦 可以用它来:解耦、异步、削峰。

9. rabbitmq 的使用场景

==================

(1)服务间异步通信

(2)顺序消费

(3)定时任务

(4)请求削峰

10. RabbitMQ基本概念

=================

学不会退出IT界!21年度“Java中间件面试真题&高频知识点汇总”

11. RabbitMQ的工作模式

==================

学不会退出IT界!21年度“Java中间件面试真题&高频知识点汇总”

学不会退出IT界!21年度“Java中间件面试真题&高频知识点汇总”

学不会退出IT界!21年度“Java中间件面试真题&高频知识点汇总”

学不会退出IT界!21年度“Java中间件面试真题&高频知识点汇总”

12. 如何保证RabbitMQ消息的顺序性?

========================

  • 拆分多个 queue(消息队列),每个 queue(消息队列) 一个 consumer(消费者),就是多一些 queue(消息队列)而已,确实是麻烦点;

  • 或者就一个 queue (消息队列)但是对应一个 consumer(消费者),然后这个 consumer(消费者)内部用内存队列做排队,然后分发给底层不同的 worker 来处理。

13. 消息如何分发?

============

  • 若该队列至少有一个消费者订阅,消息将以循环(round-robin)的方式发送给消费者。每条消息只会分发给一个订阅的消费者(前提是消费者能够正常处理消息并进行确认)。通过路由可实现多消费的功能

14. 消息怎么路由?

============

学不会退出IT界!21年度“Java中间件面试真题&高频知识点汇总”

15. 消息基于什么传输?

==============

学不会退出IT界!21年度“Java中间件面试真题&高频知识点汇总”

16. 如何保证消息不被重复消费?或者说,如何保证消息消费时的幂等性?

====================================

学不会退出IT界!21年度“Java中间件面试真题&高频知识点汇总”

17. 如何确保消息正确地发送至 RabbitMQ? 如何确保消息接收方消费了消息?

===========================================

学不会退出IT界!21年度“Java中间件面试真题&高频知识点汇总”

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

=========================

学不会退出IT界!21年度“Java中间件面试真题&高频知识点汇总”

学不会退出IT界!21年度“Java中间件面试真题&高频知识点汇总”

19. 为什么不应该对所有的 message 都使用持久化机制?

=================================

学不会退出IT界!21年度“Java中间件面试真题&高频知识点汇总”

20. 如何保证高可用的?RabbitMQ 的集群

==========================

学不会退出IT界!21年度“Java中间件面试真题&高频知识点汇总”

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
img
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以添加V获取:vip1024b (备注Java)
img

架构学习资料

准备两个月,面试五分钟,Java中高级岗面试为何越来越难?

准备两个月,面试五分钟,Java中高级岗面试为何越来越难?

准备两个月,面试五分钟,Java中高级岗面试为何越来越难?

准备两个月,面试五分钟,Java中高级岗面试为何越来越难?

准备两个月,面试五分钟,Java中高级岗面试为何越来越难?

由于篇幅限制小编,pdf文档的详解资料太全面,细节内容实在太多啦,所以只把部分知识点截图出来粗略的介绍,每个小节点里面都有更细化的内容!

一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
img

盖了95%以上Java开发知识点,真正体系化!**

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以添加V获取:vip1024b (备注Java)
[外链图片转存中…(img-2qa9nwzj-1712985338452)]

架构学习资料

[外链图片转存中…(img-Rl6aK2N6-1712985338452)]

[外链图片转存中…(img-e8daK19V-1712985338452)]

[外链图片转存中…(img-zuVCF9uk-1712985338453)]

[外链图片转存中…(img-ewXHck5Y-1712985338453)]

[外链图片转存中…(img-2fifC9rd-1712985338453)]

由于篇幅限制小编,pdf文档的详解资料太全面,细节内容实在太多啦,所以只把部分知识点截图出来粗略的介绍,每个小节点里面都有更细化的内容!

一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
[外链图片转存中…(img-KqIgrTRt-1712985338453)]

  • 25
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值