Java_中间件(46)


Tomcat


1、Tomcat是什么
  • Tomcat 服务器Apache的一个免费开源的轻量级 Web 应用服务器,在中小型系统和并发访问用户不大的场合下被普遍使用;
  • Tomcat自定义了WebAppClassLoader类加载器。打破了双亲委派的机制,即如果收到类加载的请求,会尝试自己去加载,如果找不到再交给父加载器去加载;
2、Tomcat的基本架构是什么

Tomcat中只有一个Server,一个Server可以有多个Service,一个Service可以有多个Connector和一个Container;

  • Server掌管着整个Tomcat的生死大权;

  • Service 是对外提供服务的;

  • Connector用于接受请求并将请求封装成Request和Response来具体处理;

  • Container用于封装和管理Servlet,以及具体处理request请求;

3、Tomcat请求的处理流程
  • 首先是请求发送给本机8080,被在那里监听HTTP/Connector获得;
  • Connector将该请求发给它本身所在的 Service所在的Engine来处理,并等待Engine来回应;
  • Engine匹配对应的Host和Context,并将请求交给对应的Servlet;
  • 构造HttpServletRequest对象和HttpServletResponse对象作为参数,调用Servlet的doGet()方法和doPost()方法;
  • Context把执行完后的HttpServletResponse对象返回给Host,再返回给Engine,Connector;
  • Connector把HttpServletResponse对象返回给浏览器的Browser;

Zookeeper


4、ZooKeeper 是什么?Zookeeper的用途,使用场景
  • 是一个分布式的,开放源码的分布式应用程序协调服务,是 google chubby 的开源实现。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。
5、zookeeper 都有哪些功能

集群管理:监控节点存活状态、运行请求等;
主节点选举:主节点挂掉了之后可以从备用的节点开始新一轮选主;
分布式锁:zookeeper 提供两种锁:独占锁、共享锁。独占锁即一次只能有一个线程使用资源,共享锁即可以有多线线程同时读同一个资源,如果要使用写锁也只能有一个线程使用;
命名服务:在分布式系统中,通过使用命名服务,客户端应用能够根据指定名字来获取资源或服务的地址,提供者等信息。

6、zookeeper 有几种部署模式
  • 单机部署:一台集群上运行;
  • 集群部署:多台集群运行;
  • 伪集群部署:一台集群启动多个 zookeeper 实例运行。
7、zookeeper 怎么保证主从节点的状态同步(zookeeper原理)
  • zookeeper 的核心是原子广播,这个机制保证了各个 server 之间的同步。实现这个机制的协议叫做 zab 协议。 zab 协议有两种模式,分别是恢复模式(选主)和广播模式(同步)。当服务启动或者在领导者崩溃后,zab 就进入了恢复模式,当领导者被选举出来,且大多数 server 完成了和 leader 的状态同步以后,恢复模式就结束了。
8、集群中为什么要有主节点
  • 在分布式环境中,有些业务逻辑只需要集群中的某一台机器进行执行,其他的机器可以共享这个结果,这样可以大大减少重复计算,提高性能,所以就需要主节点。
9、说一下 zookeeper 的通知机制

客户端端会对某个 znode 建立一个 watcher 事件,当该 znode 发生变化时,这些客户端会收到 zookeeper 的通知,然后客户端可以根据 znode 变化来做出业务上的改变。

10、zk 节点宕机如何处理
  • Zookeeper 本身也是集群,推荐配置不少于 3 个服务器。Zookeeper 自身也要保证当一个节点宕机时,其他节点会继续提供服务。

  • 如果是一个 Follower 宕机,还有 2 台服务器提供访问,因为 Zookeeper 上的数据是有多个副本的,数据并不会丢失;如果是一个 Leader 宕机,Zookeeper 会选举出新的 Leader。

  • ZK 集群的机制是只要超过半数的节点正常,集群就能正常提供服务。只有在 ZK节点挂得太多,只剩一半或不到一半节点能工作,集群才失效。

11、集群中有 3 台服务器,其中一个节点宕机,这个时候 zookeeper 还可以使用吗?
  • 可以继续使用,单数服务器只要没超过一半的服务器宕机就可以继续使用。

Dubbo


12、Dubbo 是什么

Dubbo 是一款高性能、轻量级的开源 RPC 框架,提供服务自动注册、自动发现等高效服务治理方案, 可以和 Spring 框架无缝集成。

13、Dubbo 的使用场景有哪些
  • 远程方法调用:就像调用本地方法一样调用远程方法,只需简单配置,没有任何API侵入;

  • 负载均衡及容错机制:可在内网替代 F5 等硬件负载均衡器,降低成本,减少单点;

  • 服务自动注册与发现:不再需要写死服务提供方地址,注册中心基于接口名查询服务提供者的IP地址,并且能够平滑添加或删除服务提供者;

14、Dubbo 和 Spring Cloud 有什么哪些区别
  • Dubbo的关注点主要在于服务的调用,流量分发、流量监控和熔断等服务治理。

  • Spring Cloud 考虑的是微服务治理的方方面面,另外由于依托了 Spring、Spring Boot 的优势,意在Spring Cloud 是打造一个分布式的生态。

  • Dubbo 底层是使用 Netty 这样的 NIO 框架,是基于 TCP 协议传输的;

  • Spring Cloud 是基于 Http 协议 Restful 接口调用远程过程的通信,相对来说 Http 请求会有更大的报文和带宽。但是 Restful 相比 RPC 更为灵活;

15、Dubbo提供了哪些负载均衡策略

Dubbo内置了4种负载均衡策略

  • RandomLoadBalance:随机负载均衡(默认);

  • RoundRobinLoadBalance:轮询负载均衡;

  • LeastActiveLoadBalance:最少活跃调用数,相同活跃数的随机。每收到一个请求,活跃数加1,完成请求后则将活跃数减1。活跃调用数越小,表明该服务提供者效率越高;

  • ConsistentHashLoadBalance:一致性哈希负载均衡。相同参数的请求总是落在同一台机器上;

16、Dubbo的集群容错方案有哪些
  • Failover Cluster:失败自动切换,当出现失败,重试其它服务器(默认);

  • Cluster:快速失败,只发起一次调用,失败立即报错;

  • Failsafe Cluster:失败安全,出现异常时,直接忽略;

  • Failback Cluster:失败自动恢复,后台记录失败请求,定时重发;

  • Forking Cluster:并行调用多个服务器,只要一个成功即返回;


kafka


17、kafka 可以脱离 zookeeper 单独使用吗?为什么?
  • kafka 不能脱离 zookeeper 单独使用,因为 kafka 使用 zookeeper 管理和协调 kafka 的节点服务器。
18、 kafka 有几种数据保留的策略?
  • kafka 有两种数据保存策略:按照过期时间保留和按照存储的消息大小保留。
19、 kafka 同时设置了 7 天和 10G 清除数据,到第五天的时候消息达到了 10G,这个时候 kafka 将如何处理
  • 这个时候 kafka 会执行数据清除工作,时间和大小不论那个满足条件,都会清空数据。
20、什么情况会导致 kafka 运行变慢?
  • cpu 性能瓶颈;
  • 磁盘读写瓶颈;
  • 网络瓶颈;
21、使用 kafka 集群需要注意什么?
  • 集群的数量不是越多越好,最好不要超过 7 个,因为节点越多,消息复制需要的时间就越长,整个群组的吞吐量就越低;
  • 集群数量最好是单数,因为超过一半故障集群就不能用了,设置为单数容错率更高;

RabbitMQ


22、什么是RabbitMQ

RabbitMQ是一款开源的,Erlang编写的,基于AMQP协议的消息中间件

23、为什么使用MQ?MQ的优点(使用场景)
  • 异步处理 - 相比于传统的串行、并行方式,提高了系统的吞吐量。

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

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

  • 消息通讯 - 消息队列一般都内置了高效的通信机制,因此也可以用在纯消息通讯上。比如实现点对点消息队列,或者聊天室等。

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

24、rabbitmq 有哪些重要的角色
  • 生产者:消息的创建者,负责创建和推送数据到消息服务器;
  • 消费者:消息的接收方,用于处理数据和确认消息;
  • 代理:就是 RabbitMQ 本身,用于扮演“快递”的角色,本身不生产消息,只是扮演“快递”的角色。
25、rabbitmq 有哪些重要的组件
  • ConnectionFactory(连接管理器):应用程序与Rabbit之间建立连接的管理器,程序代码中使用。
  • Channel(信道):消息推送使用的通道。
  • Exchange(交换器):用于接受、分配消息。
  • Queue(队列):用于存储生产者的消息。
  • RoutingKey(路由键):用于把生成者的数据分配到交换器上。
  • BindingKey(绑定键):用于把交换器的消息绑定到队列上。
26、rabbitmq 的消息是怎么发送的

首先客户端必须连接到 RabbitMQ 服务器才能发布和消费消息,客户端和 rabbit server 之间会创建一个 tcp 连接,一旦 tcp 打开并通过了认证,你的客户端和 RabbitMQ 就创建了一条 amqp 信道(channel),信道是创建在“真实” tcp 上的虚拟连接,amqp 命令都是通过信道发送出去的,每个信道都会有一个唯一的 id,不论是发布消息,订阅队列都是通过这个信道完成的。

27、rabbitmq 怎么保证消息的稳定性(保证RabbitMQ消息的可靠传输)
  • 提供了事务的功能;
  • 通过将 channel 设置为 confirm(确认)模式;
28、rabbitmq 怎么避免消息丢失
  • 消息持久化;
  • ACK确认机制;
  • 消息补偿机制;
29、要保证消息持久化成功的条件有哪些
  • 声明队列必须设置持久化 durable 设置为 true;
  • 消息推送投递模式必须设置持久化,deliveryMode 设置为 2(持久),设置以后,即使 rabbitMQ挂了,重启后也能恢复数据;
  • 消息已经到达持久化交换器。
  • 消息已经到达持久化队列。

以上四个条件都满足才能保证消息持久化成功。

30、rabbitmq 持久化有什么缺点
  • 持久化的缺地就是降低了服务器的吞吐量,因为使用的是磁盘而非内存存储,从而降低了吞吐量。可尽量使用 ssd 硬盘来缓解吞吐量的问题。
31、rabbitmq 有几种广播类型
  • fanout: 所有bind到此exchange的queue都可以接收消息;
  • direct: 通过routingKey和exchange决定的那个唯一的queue可以接收消息;
  • topic:所有符合routingKey的routingKey所bind的queue可以接收消息;
32、rabbitmq 怎么实现延迟消息队列
  • 通过消息过期后进入死信交换器,再由交换器转发到延迟消费队列,实现延迟功能;
  • 使用 RabbitMQ-delayed-message-exchange 插件实现延迟功能;
33、rabbitmq 集群有什么用(保证高可用)

高可用:某个服务器出现问题,整个 RabbitMQ 还可以继续使用;
高容量:集群可以承载更多的消息量。

34、rabbitmq 节点的类型有哪些?

磁盘节点:消息会存储到磁盘。
内存节点:消息都存储在内存中,重启服务器消息丢失,性能高于磁盘类型。

35、rabbitmq 集群搭建需要注意哪些问题?

各节点之间使用“–link”连接,此属性不能忽略。
各节点使用的 erlang cookie 值必须相同,此值相当于“秘钥”的功能,用于各节点的认证。
整个集群中必须包含一个磁盘节点。

36、rabbitmq 每个节点是其他节点的完整拷贝吗?为什么?

不是,原因有以下两个:

存储空间的考虑:如果每个节点都拥有所有队列的完全拷贝,这样新增节点不但没有新增存储空间,反而增加了更多的冗余数据;
性能的考虑:如果每条消息都需要完整拷贝到每一个集群节点,那新增节点并没有提升处理消息的能力,最多是保持和单节点相同的性能甚至是更糟。

37、rabbitmq 对集群节点停止顺序有要求吗?

RabbitMQ 对集群的停止的顺序是有要求的,应该先关闭内存节点,最后再关闭磁盘节点。如果顺序恰好相反的话,可能会造成消息的丢失。

38、你们公司生产环境用的是什么消息中间件(优缺点)
  • ActiveMQ没法支撑互联网公司的高并发、高负载以及高吞吐的复杂场景,现在在国内互联网公司落地较少;

  • RabbitMQ可以支撑高并发、高吞吐量、性能很高,同时有非常完善便捷的后台管理界面可以使用,开源社区很活跃,较高频率的版本迭代,但是 erlang 语言难以深入;

  • RocketMQ,是阿里开源并基于Java语言开发的,经过阿里生产环境的超高并发、高吞吐的考验,性能卓越,同时还支持分布式事务等特殊场景;

  • Kafka提供的消息中间件的功能明显较少一些,Kafka的优势在于专为超高吞吐量的场景。因此Kafka在大数据领域中配合实时计算技术使用的较多;

39、MQ 有哪些常见问题?如何解决这些问题?
  • 消息的顺序问题:保证生产者 - MQServer - 消费者是一对一对一的关系;

  • 消息的重复问题:保证每条消息都有唯一编号和添加一张日志表来记录已经处理成功的消息的 ID,如果新到的消息 ID 已经在日志表中,那么就不再处理这条消息;

40、RabbitMQ 常见工作模式和应用场景
  • 简单模式
    原理:一个生产者,一个消费者。
    验证码。

  • 工作模式
    原理:一个生产者,多个消费者,一条消息只能被一个消费者消费;
    红包。

  • 发布订阅模式
    原理:一个生产者,多个消费者,每个订阅的消费者都可以收到相同的消息
    群聊天,广播。

  • 路由模式
    原理:生产者将消息发送给交换机,消息携带具体的routingkey。交换机类型是direct,交换机匹配与之绑定的队列的routingkey,分发到不同的队列上;

  • 主题模式
    原理:路由模式的一种,交换机类型是topic,路由功能添加了模糊匹配。星号(*)代表1个单词,#号(#)代表一个或多个单词;


Shiro


42、权限管理
  • 用户可以访问而且只能访问自己被授权的资源;
42、什么是粗颗粒度和细颗粒度
  • 对资源类型的管理称为粗颗粒度权限管理,即只控制到菜单、按钮、方法;

  • 对资源实例的控制称为细颗粒度权限管理,即控制到数据级别的权限,比如:用户只允许修改本部门的员工信息;

43、什么是Shiro
  • Apache Shiro 是一个功能强大,使用简单的Java安全框架,它为开发人员提供一个直观而全面的认证,授权,加密及会话管理的解决方案。
44、Shiro能做什么
  • 验证用户身份

  • 用户访问权限控制

  • 在非 web 或 EJB 容器的环境下可以任意使用Session API

  • 可以响应认证、访问控制,或者 Session 生命周期中发生的事件;

45、Shiro基本功能
  • Authentication(认证):身份认证/登录,验证用户是不是拥有相应的身份。

  • Authorization(授权):授权,即权限验证,验证某个已认证的用户是否拥有某个权限

  • Session Management(会话管理):会话管理,即用户登录后就是一次会话,在没有退出之前,它的所有信息都在会话中

  • Cryptography(加密):加密,保护数据的安全性,如密码加密存储到数据库,而不是明文存储。

46、Shiro和Spring Security比较

shiro和spring security都是安全框架,都具有认证授权,加密等功能,主要区别如下:

  • Shiro 的配置和使用比较简单,Spring Security 上手复杂些;

  • Spring Security 有更好的社区支持,功能比 Shiro 更加丰富;

  • Shiro 依赖性低,不需要任何框架和容器,可以独立运行。Spring Security 依赖Spring容器,与Spring整合更加方便;


OAuth2 协议


47、什么是第三方登录
  • 网站登录时,允许使用第三方网站的身份来进行登录,这称为“第三方登录”。比如知乎和慕课网等,可以使用微信,QQ,或微博来进行登录。一个网站想接入第三方登录,需要用到OAuth2这个协议。
48、什么是OAuth2
  • OAuth2是一个关于授权的开放网络标准,用来授权第三方应用,获取用户的数据。其最终的目的是为了给第三方应用颁发一个有时效性的令牌access_token,第三方应用根据这个access_token就可以去获取用户的相关资源。现在大家用的基本是2.0的版本。

Netty


49、Netty 是什么

Netty是一个异步事件驱动的网络应用程序框架,用于快速开发高性能通信的服务器和客户端;


WebSocket


50、为什么需要 WebSocket
  • HTTP 协议有一个缺陷:通信只能由客户端发起,服务器不能主动联系客户端;
51、什么是WebSocket
  • WebSocket 协议在2008年诞生,2011年成为国际标准。WebSocket是HTML5的一个新协议;
  • WebSocket最大的特点就是实现全双工通信:客户端能够实时推送消息给服务端,服务端也能够实时推送消息给客户端,属于服务器推送技术的一种;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值