Java面试准备-Nginx、MQ、ZK

简介: Java面试准备-Nginx、MQ、ZK

简述Nginx、优点和缺点


Nginx是一个Web服务器和反向代理服务器,可以实现负载均衡。

优点:响应快

高扩展、跨平台

高可靠、用于反向代理

低内存消耗,这个Nginx支持高并发的基础


为什么要使用MQ


解耦、异步、削峰

解耦:一个系统或者说一个模块,调用了多个系统或者模块,互相之间很复杂,维护起来比较麻烦。但是这个接口不需要同步接口的,比如通知等,这个时候采用异步化进行解耦

异步:某些操作,比如非事务操作,这个时候可以采用异步的方式

削峰:减少高峰期对服务器的压力。


MQ有什么缺点


系统可用性降低,从某种情况来说,因为依赖中间件越多,出问题的概率就越大。

系统复杂度提高:怎么保证消息不会重复消费,保证消息没有丢失

一致性问题:可以采用事务消息。

https://blog.csdn.net/QGhurt/article/details/114630705


简单描述 Zookeeper


ZK主要的特点:维护、协调、管理、监控。


ZK有哪些应用场景


数据发布与订阅:发布和订阅所谓的配置管理,顾名思义就是将数据发布到ZK节点上,供订阅者动态获取数据,实现配置信息的集中式管理。

ZK采用的是推拉结合的方式

推:服务端会推给注册了监控节点客户端Wathcer事件

拉:客户端获取通知后,然后主动到服务端拉取最新的数据

命名服务:是通过指定的名字来获取资源或者服务地址,利用ZK创建一个全局路径,这个路径可以作为一个名字。

在分布式环境下,通常需要对应用、服务统一命名,便于识别不同服务

可将服务名以及地址写入ZK,客户端通过ZK进行获取

配置管理:程序分布式部署在不同的机器上面,可以将程序的配置信息放在ZK的node节点下,当配置发送改变时,可以通过swatch机制通知给相应的客户端。

集群管理:分布式中,实时掌握每个节点的状态是必要的,可以根据实时状态节点做出调整,

分布式锁:


说说Zookeeper的工作原理


ZK的核心原理是原子广播,这个机制保证了各个Server之间的同步,实现这个机制的协议叫做Zab协议。

Zab协议分别有两种模式:恢复模式(选主)、广播模式(同步)


请描述下ZK的通知机制是什么


ZK允许客户端向服务端的某个node节点注册是一个Watcher监听,当服务端的一些事件出发了这个Watcher事件过后,服务端会向客户端发送一条分布式通知消息,客户端根据消息内容做出改变


ZK对节点watcher监听是永久的吗


不是,是一次性的,无论是服务端还是客户端,一旦一个watcher被触发,ZK都会将相应的节点存储删除,这样设计有效减轻了服务器的压力,不然对太频繁的节点,服务端会不断发送通知,无论是网络还是服务器压力都会非常之大。


ZK中的角色有哪些


Leader:事务请求的唯一处理和调度者,保证集群消息处理顺序性,集群内部各服务之间的调度者。

Follower:处理客户端非事务请求,事务请求转发给Leader,参与选举投票。参与过半写成功 策略。

Observer:处理客户端非事务请求,事务请求转发给Leader,不参与投票


ZK岩机如何处理


ZK本身也是集群,推荐配置计数个数的服务器,因为岩机需要选举Leader,需要过半操作,所以不用偶数服务器个数。

如果是Follower岩机了,这个时候不影响对外使用,用户无感知。


CAP理论


一致性(C):所有节点保持数据一直

可用性(A):服务一直处于可用状态

分区容错性(P):某节点或者网络故障时候,仍然能够对外提供满足一致性或可用性的服务。

相关实践学习
消息队列RocketMQ版:基础消息收发功能体验
本实验场景介绍消息队列RocketMQ版的基础消息收发功能,涵盖实例创建、Topic、Group资源创建以及消息收发体验等基础功能模块。
消息队列 MNS 入门课程
1、消息队列MNS简介 本节课介绍消息队列的MNS的基础概念 2、消息队列MNS特性 本节课介绍消息队列的MNS的主要特性 3、MNS的最佳实践及场景应用 本节课介绍消息队列的MNS的最佳实践及场景应用案例 4、手把手系列:消息队列MNS实操讲 本节课介绍消息队列的MNS的实际操作演示 5、动手实验:基于MNS,0基础轻松构建 Web Client 本节课带您一起基于MNS,0基础轻松构建 Web Client
相关文章
|
2月前
|
监控 Java 应用服务中间件
高级java面试---spring.factories文件的解析源码API机制
【11月更文挑战第20天】Spring Boot是一个用于快速构建基于Spring框架的应用程序的开源框架。它通过自动配置、起步依赖和内嵌服务器等特性,极大地简化了Spring应用的开发和部署过程。本文将深入探讨Spring Boot的背景历史、业务场景、功能点以及底层原理,并通过Java代码手写模拟Spring Boot的启动过程,特别是spring.factories文件的解析源码API机制。
87 2
|
2月前
|
Java 程序员
Java社招面试题:& 和 && 的区别,HR的套路险些让我翻车!
小米,29岁程序员,分享了一次面试经历,详细解析了Java中&和&&的区别及应用场景,展示了扎实的基础知识和良好的应变能力,最终成功获得Offer。
84 14
|
2月前
|
存储 缓存 算法
面试官:单核 CPU 支持 Java 多线程吗?为什么?被问懵了!
本文介绍了多线程环境下的几个关键概念,包括时间片、超线程、上下文切换及其影响因素,以及线程调度的两种方式——抢占式调度和协同式调度。文章还讨论了减少上下文切换次数以提高多线程程序效率的方法,如无锁并发编程、使用CAS算法等,并提出了合理的线程数量配置策略,以平衡CPU利用率和线程切换开销。
面试官:单核 CPU 支持 Java 多线程吗?为什么?被问懵了!
|
2月前
|
消息中间件 大数据 Kafka
大厂面试高频:Kafka、RocketMQ、RabbitMQ 的优劣势比较
本文深入探讨了消息队列的核心概念、应用场景及Kafka、RocketMQ、RabbitMQ的优劣势比较,大厂面试高频,必知必会,建议收藏。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
大厂面试高频:Kafka、RocketMQ、RabbitMQ 的优劣势比较
|
2月前
|
存储 算法 Java
大厂面试高频:什么是自旋锁?Java 实现自旋锁的原理?
本文详解自旋锁的概念、优缺点、使用场景及Java实现。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
大厂面试高频:什么是自旋锁?Java 实现自旋锁的原理?
|
2月前
|
Java 编译器 程序员
Java面试高频题:用最优解法算出2乘以8!
本文探讨了面试中一个看似简单的数学问题——如何高效计算2×8。从直接使用乘法、位运算优化、编译器优化、加法实现到大整数场景下的处理,全面解析了不同方法的原理和适用场景,帮助读者深入理解计算效率优化的重要性。
37 6
|
2月前
|
存储 缓存 Java
大厂面试必看!Java基本数据类型和包装类的那些坑
本文介绍了Java中的基本数据类型和包装类,包括整数类型、浮点数类型、字符类型和布尔类型。详细讲解了每种类型的特性和应用场景,并探讨了包装类的引入原因、装箱与拆箱机制以及缓存机制。最后总结了面试中常见的相关考点,帮助读者更好地理解和应对面试中的问题。
78 4
|
消息中间件 存储 Java
Java Mq和Native Mq之间的关系
Java Mq和Native Mq之间的关系
134 0
|
11天前
|
Java
Java—多线程实现生产消费者
本文介绍了多线程实现生产消费者模式的三个版本。Version1包含四个类:`Producer`(生产者)、`Consumer`(消费者)、`Resource`(公共资源)和`TestMain`(测试类)。通过`synchronized`和`wait/notify`机制控制线程同步,但存在多个生产者或消费者时可能出现多次生产和消费的问题。 Version2将`if`改为`while`,解决了多次生产和消费的问题,但仍可能因`notify()`随机唤醒线程而导致死锁。因此,引入了`notifyAll()`来唤醒所有等待线程,但这会带来性能问题。
Java—多线程实现生产消费者
|
13天前
|
安全 Java Kotlin
Java多线程——synchronized、volatile 保障可见性
Java多线程中,`synchronized` 和 `volatile` 关键字用于保障可见性。`synchronized` 保证原子性、可见性和有序性,通过锁机制确保线程安全;`volatile` 仅保证可见性和有序性,不保证原子性。代码示例展示了如何使用 `synchronized` 和 `volatile` 解决主线程无法感知子线程修改共享变量的问题。总结:`volatile` 确保不同线程对共享变量操作的可见性,使一个线程修改后,其他线程能立即看到最新值。