JavaEE进阶总结

目录

一.Springboot和SpringCloud

1. 什么是 spring boot?

2.为什么要用 spring boot?

3.spring boot 核心配置文件是什么?

4.spring boot 配置文件有哪几种类型?它们有什么区别?

5.spring boot 有哪些方式可以实现热部署?

6.jpa 和 hibernate 有什么区别?

7.什么是 spring cloud?

8.spring cloud 断路器的作用是什么?

9.spring cloud 的核心组件有哪些?

10.SpringBoot的核心注解是哪个?它主要由哪几个注解组成的?

11.SpringBoot需要独立的容器运行吗?

12.Spring Boot 的配置文件有哪几种格式?它们有什么区别?

二.RabbitMQ

1.rabbitmq 的使用场景有哪些?

2.rabbitmq 有哪些重要的角色?

3.rabbitmq 有哪些重要的组件?

4.rabbitmq 中 vhost 的作用是什么?

5.rabbitmq 的消息是怎么发送的?

6.rabbitmq 怎么保证消息的稳定性?

7.rabbitmq 怎么避免消息丢失?

8.要保证消息持久化成功的条件有哪些?

9.rabbitmq 持久化有什么缺点?

10.rabbitmq 有几种广播类型?

11.rabbitmq 怎么实现延迟消息队列?

12.rabbitmq 集群有什么用?

13.rabbitmq 节点的类型有哪些?

14.rabbitmq 集群搭建需要注意哪些问题?

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

16.rabbitmq 集群中唯一一个磁盘节点崩溃了会发生什么情况?

17.rabbitmq 对集群节点停止顺序有要求吗?

18.rabbitMQ工作模式?

三.Kafka

1.kafka 可以脱离 zookeeper 单独使用吗?为什么?

2.kafka 有几种数据保留的策略?

3.kafka 同时设置了 7 天和 10G 清除数据,到第五天的时候消息达到了 10G,这个时候 kafka 将如何处理?

4.什么情况会导致 kafka 运行变慢?

5.使用 kafka 集群需要注意什么?

四.Zookeeper

1.zookeeper 是什么?

2.zookeeper 都有哪些功能?

3.zookeeper 有几种部署模式?

4.zookeeper 怎么保证主从节点的状态同步

5.集群中为什么要有主节点?

6.集群中有 3 台服务器,其中一个节点宕机,这个时候 zookeeper 还可以使用吗?

7.说一下 zookeeper 的通知机制?

五.Redis

1.redis 是什么?都有哪些使用场景?

2. redis 有哪些功能?

3.redis 和 memecache 有什么区别?

4.redis 为什么是单线程的?

5.什么是缓存穿透?怎么解决?

6.redis 支持的数据类型有哪些?

7.redis 支持的 java 客户端都有哪些?

8. jedis 和 redisson 有哪些区别?

9.怎么保证缓存和数据库数据的一致性?

10.redis 持久化有几种方式?

11.redis 怎么实现分布式锁?

12.redis 分布式锁有什么缺陷?

13.redis 如何做内存优化?

14. redis 淘汰策略有哪些?

15.redis 常见的性能问题有哪些?该如何解决?

16.Redis中的数据持久化策略?

17.Redis为什么要分片?

六.Dubbo

1.Dubbo是什么?

2.Dubbo能做什么?

3.你们公司的double注册中心用的什么?

七.ActiveMQ

1.介绍一下ActiveMQ

2.ActiveMQ 消息发送失败的解决方案,如何保证消息一定 发送成功?

3. 使用 ActiveMQ 的好处?

4.ActiveMQ 项目使用场景

5.ActiveMQ 可以发送的消息类型有哪些?

6.ActiveMQ 心跳机制?

7.ActiveMQ 发送消息方式?

8.MQ用过哪些?了解哪些?

八.数据库部分

1.数据库数据如何备份(数据备份策略)?

2.数据库压力大时,怎么实现高可用?

3.数据库优化策略?

4.什么是Mycat?

九.Ngnix

1.了解Ngnix吗?

2.Nginx 的四个主要组成部分了解吗?

3.Nginx 的特点?

4.介绍一下 Nginx 反向代理

5.说下 nginx 负载均衡?

6.如何配置Nginx?

7.Nginx 使用方法?

十.elasticsearch和solr

1.简述elasticsearch?

2.简述solr?

3.Lucene是什么?

4.elasticsearch与solr在用法上的区别?

5.elasticsearch与solr的比较?

十一.补充部分

1.Ribbon 和 Feign 的区别?

2.什么是服务熔断(Hystrix)?

3.工作中遇到的问题?

4.消息堆积怎么处理?

5.了解MongoDB吗?

6.Jedis和RedisTemplate有什么区别?

7.TCP三次握手和四次挥手的流程?

8.feign与dubbo的区别?

9.说下分布式锁?

10.分布式锁的实现方式有哪些?


一.Springboot和SpringCloud

1. 什么是 spring boot?

  • 在Spring框架这个大家族中,产生了很多衍生框架,比如 Spring、SpringMvc框架等,Spring的核心内容在于控制反转(IOC)和依赖注入(DI),所谓控制反转并非是一种技术,而是一种思想,在操作方面是指在spring配置文件中创建,依赖注入即为由spring容器为应用程序的某个对象提供资源,比如 引用对象、常量数据等。

  • SpringBoot是一个框架,一种全新的编程规范,他的产生简化了框架的使用,所谓简化是指简化了Spring众多框架中所需的大量且繁琐的配置文件,所以 SpringBoot是一个服务于框架的框架,服务范围是简化配置文件。

2.为什么要用 spring boot?

  • Spring Boot使编码变简单

  • Spring Boot使配置变简单

  • Spring Boot使部署变简单

  • Spring Boot使监控变简单

3.spring boot 核心配置文件是什么?

  • Spring Boot提供了两种常用的配置文件:

    • properties文件

    • yml文件

4.spring boot 配置文件有哪几种类型?它们有什么区别?

  • Spring Boot提供了两种常用的配置文件,分别是properties文件和yml文件。相对于properties文件而言,yml文件更年轻,也有很多的坑。可谓成也萧何败萧何,yml通过空格来确定层级关系,使配置文件结构跟清晰,但也会因为微不足道的空格而破坏了层级关系。

5.spring boot 有哪些方式可以实现热部署?

  • SpringBoot热部署实现有两种方式:

    • 1.使用spring loaded

      1. 使用spring-boot-devtools在项目的pom文件中添加对应依赖(常用)

6.jpa 和 hibernate 有什么区别?

  • JPA Java Persistence API,是Java EE 5的标准ORM接口,也是ejb3规范的一部分。 Hibernate,当今很流行的ORM框架,是JPA的一个实现,但是其功能是JPA的超集。 JPA和Hibernate之间的关系,可以简单的理解为JPA是标准接口,Hibernate是实现。那么Hibernate是如何实现与JPA的这种关系的呢。Hibernate主要是通过三个组件来实现的,及hibernate-annotation、hibernate-entitymanager和hibernate-core。 ibernate-annotation是Hibernate支持annotation方式配置的基础,它包括了标准的JPA annotation以及Hibernate自身特殊功能的annotation。 hibernate-core是Hibernate的核心实现,提供了Hibernate所有的核心功能。 hibernate-entitymanager实现了标准的JPA,可以把它看成hibernate-core和JPA之间的适配器,它并不直接提供ORM的功能,而是对hibernate-core进行封装,使得Hibernate符合JPA的规范。

7.什么是 spring cloud?

  • 从字面理解,Spring Cloud 就是致力于分布式系统、云服务的框架。Spring Cloud 是整个 Spring 家族中新的成员,是最近云服务火爆的必然产物。 使用 Spring Cloud 开发人员可以开箱即用的实现这些模式的服务和应用程序。这些服务可以任何环境下运行,包括分布式环境,也包括开发人员自己的笔记本电脑以及各种托管平台。

8.spring cloud 断路器的作用是什么?

  • 在Spring Cloud中使用了Hystrix 来实现断路器的功能,断路器可以防止一个应用程序多次试图执行一个操作,即很可能失败,允许它继续而不等待故障恢复或者浪费 CPU 周期,而它确定该故障是持久的。断路器模式也使应用程序能够检测故障是否已经解决,如果问题似乎已经得到纠正,应用程序可以尝试调用操作。

  • 断路器增加了稳定性和灵活性,以一个系统,提供稳定性,而系统从故障中恢复,并尽量减少此故障的对性能的影响。它可以帮助快速地拒绝对一个操作,即很可能失败,而不是等待操作超时(或者不返回)的请求,以保持系统的响应时间。如果断路器提高每次改变状态的时间的事件,该信息可以被用来监测由断路器保护系统的部件的健康状况,或以提醒管理员当断路器跳闸,以在打开状态。

9.spring cloud 的核心组件有哪些?

  • 1.服务发现——Netflix Eureka

    • 一个RESTful服务,用来定位运行在AWS地区(Region)中的中间层服务。由两个组件组成:Eureka服务器和Eureka客户端。Eureka服务器用作服务注册服务器。Eureka客户端是一个java客户端,用来简化与服务器的交互、作为轮询负载均衡器,并提供服务的故障切换支持。Netflix在其生产环境中使用的是另外的客户端,它提供基于流量、资源利用率以及出错状态的加权负载均衡。

  • 2.客服端负载均衡——Netflix Ribbon

    • Ribbon,主要提供客户侧的软件负载均衡算法。Ribbon客户端组件提供一系列完善的配置选项,比如连接超时、重试、重试算法等。Ribbon内置可插拔、可定制的负载均衡组件。

  • 3.断路器——Netflix Hystrix

    • 断路器可以防止一个应用程序多次试图执行一个操作,即很可能失败,允许它继续而不等待故障恢复或者浪费 CPU 周期,而它确定该故障是持久的。断路器模式也使应用程序能够检测故障是否已经解决。如果问题似乎已经得到纠正,应用程序可以尝试调用操作。

  • 4.服务网关——Netflix Zuul

    • 类似nginx,反向代理的功能,不过netflix自己增加了一些配合其他组件的特性。

  • 5.分布式配置——Spring Cloud Config

    • 这个还是静态的,得配合Spring Cloud Bus实现动态的配置更新。

10.SpringBoot的核心注解是哪个?它主要由哪几个注解组成的?

  • 启动类上面的注解是@SpringBootApplication,它是 Spring Boot 的核心注解,主要组合包含了以下 3 个注解:

    • @SpringBootConfiguration:组合了 @Configuration 注解,实现配置文件的功能。

    • @EnableAutoConfiguration:打开自动配置的功能,也可以关闭某个自动配置的选项,如关闭数据源自动配置功能: @SpringBootApplication(exclude = { DataSourceAutoConfiguration.class })。

    • @ComponentScan:Spring组件扫描。

11.SpringBoot需要独立的容器运行吗?

  • 可以不需要,内置了 Tomcat/ Jetty 等容器。

12.Spring Boot 的配置文件有哪几种格式?它们有什么区别?

  • properties 和 .yml,它们的区别主要是书写格式不同。

  • 另外.yml 格式不支持 @PropertySource 注解导入配置。

二.RabbitMQ

1.rabbitmq 的使用场景有哪些?

  • 1.跨系统的异步通信,所有需要异步交互的地方都可以使用消息队列。就像我们除了打电话(同步)以外,还需要发短信,发电子邮件(异步)的通讯方式。

    1. 多个应用之间的耦合,由于消息是平台无关和语言无关的,而且语义上也不再是函数调用,因此更适合作为多个应用之间的松耦合的接口。基于消息队列的耦合,不需要发送方和接收方同时在线。在企业应用集成(EAI)中,文件传输,共享数据库,消息队列,远程过程调用都可以作为集成的方法。

  • 3.应用内的同步变异步,比如订单处理,就可以由前端应用将订单信息放到队列,后端应用从队列里依次获得消息处理,高峰时的大量订单可以积压在队列里慢慢处理掉。由于同步通常意味着阻塞,而大量线程的阻塞会降低计算机的性能。

  • 4.消息驱动的架构(EDA),系统分解为消息队列,和消息制造者和消息消费者,一个处理流程可以根据需要拆成多个阶段(Stage),阶段之间用队列连接起来,前一个阶段处理的结果放入队列,后一个阶段从队列中获取消息继续处理。

  • 5.应用需要更灵活的耦合方式,如发布订阅,比如可以指定路由规则。

  • 6.跨局域网,甚至跨城市的通讯(CDN行业),比如北京机房与广州机房的应用程序的通信。

2.rabbitmq 有哪些重要的角色?

  • RabbitMQ 中重要的角色有:生产者、消费者和代理:

    • 生产者:消息的创建者,负责创建和推送数据到消息服务器;

    • 消费者:消息的接收方,用于处理数据和确认消息;

    • 代理:就是 RabbitMQ 本身,用于扮演“快递”的角色,本身不生产消息,只是扮演“快递”的角色。

3.rabbitmq 有哪些重要的组件?

  • 1.ConnectionFactory(连接管理器):应用程序与Rabbit之间建立连接的管理器,程序代码中使用。

  • 2.Channel(信道):消息推送使用的通道。

  • 3.Exchange(交换器):用于接受、分配消息。

  • 4.Queue(队列):用于存储生产者的消息。

  • 5.RoutingKey(路由键):用于把生成者的数据分配到交换器上。

  • 6.BindingKey(绑定键):用于把交换器的消息绑定到队列上。

4.rabbitmq 中 vhost 的作用是什么?

  • vhost 可以理解为虚拟 broker ,即 mini-RabbitMQ server。其内部均含有独立的 queue、exchange 和 binding 等,但最最重要的是,其拥有独立的权限系统,可以做到 vhost 范围的用户控制。当然,从 RabbitMQ 的全局角度,vhost 可以作为不同权限隔离的手段(一个典型的例子就是不同的应用可以跑在不同的 vhost 中)。

5.rabbitmq 的消息是怎么发送的?

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

6.rabbitmq 怎么保证消息的稳定性?

  • 提供了事务的功能。通过将 channel 设置为 confirm(确认)模式。

7.rabbitmq 怎么避免消息丢失?

  • 1.消息持久化

  • 2.ACK确认机制

  • 3.设置集群镜像模式

  • 4.消息补偿机制

8.要保证消息持久化成功的条件有哪些?

  • 1.声明队列必须设置持久化 durable 设置为 true.

  • 2.消息推送投递模式必须设置持久化,deliveryMode 设置为 2(持久)。

  • 3.消息已经到达持久化交换器。

  • 4.消息已经到达持久化队列。

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

9.rabbitmq 持久化有什么缺点?

  • 持久化的缺地就是降低了服务器的吞吐量,因为使用的是磁盘而非内存存储,从而降低了吞吐量。可尽量使用 ssd 硬盘来缓解吞吐量的问题。

10.rabbitmq 有几种广播类型?

  • 三种广播模式:

    • 1.fanout: 所有bind到此exchange的queue都可以接收消息(纯广播,绑定到RabbitMQ的接受者都能收到消息);

    • 2.direct: 通过routingKey和exchange决定的那个唯一的queue可以接收消息;

    • 3.topic:所有符合routingKey(此时可以是一个表达式)的routingKey所bind的queue可以接收消息;

11.rabbitmq 怎么实现延迟消息队列?

  • 通过消息过期后进入死信交换器,再由交换器转发到延迟消费队列,实现延迟功能;

  • 使用 RabbitMQ-delayed-message-exchange 插件实现延迟功能。

12.rabbitmq 集群有什么用?

  • 集群主要有以下两个用途:

    • 1.高可用:某个服务器出现问题,整个 RabbitMQ 还可以继续使用;

    • 2.高容量:集群可以承载更多的消息量。

13.rabbitmq 节点的类型有哪些?

  • 磁盘节点:消息会存储到磁盘。

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

14.rabbitmq 集群搭建需要注意哪些问题?

  • 1.各节点之间使用“–link”连接,此属性不能忽略。

  • 2.各节点使用的 erlang cookie 值必须相同,此值相当于“秘钥”的功能,用于各节点的认证。

  • 3.整个集群中必须包含一个磁盘节点。

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

  • 不是,原因有以下两个:

    • 1.存储空间的考虑:如果每个节点都拥有所有队列的完全拷贝,这样新增节点不但没有新增存储空间,反而增加了更多的冗余数据;

    • 2.性能的考虑:如果每条消息都需要完整拷贝到每一个集群节点,那新增节点并没有提升处理消息的能力,最多是保持和单节点相同的性能甚至是更糟。

16.rabbitmq 集群中唯一一个磁盘节点崩溃了会发生什么情况?

  • 如果唯一磁盘的磁盘节点崩溃了,不能进行以下操作:

    • 不能创建队列

    • 不能创建交换器

    • 不能创建绑定

    • 不能添加用户

    • 不能更改权限

    • 不能添加和删除集群节点

  • 唯一磁盘节点崩溃了,集群是可以保持运行的,但你不能更改任何东西。

17.rabbitmq 对集群节点停止顺序有要求吗?

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

18.rabbitMQ工作模式?

  • 1.Work模式:一个生产者,多个消费者,每个消费者获取到的消息唯一。

  • 2.订阅模式:一个生产者发送的消息会被多个消费者获取。

  • 3.路由模式:

    • (1)发送消息到交换机并且要指定路由key

    • (2)消费者将队列绑定到交换机时需要指定路由key

  • 4.通配符模式:将路由键和某模式进行匹配,此时队列需要绑定在一个模式上,“#”匹配一个词或多个词,“*”只匹配一个词。

  • 5.RPC模式:在RabbitMQ中RPC的实现也是很简单高效的,现在我们的客户端、服务端都是消息发布者与消息接收者。

三.Kafka

1.kafka 可以脱离 zookeeper 单独使用吗?为什么?

  • kafka 不能脱离 zookeeper 单独使用,因为 kafka 使用 zookeeper 管理和协调 kafka 的节点服务器。

2.kafka 有几种数据保留的策略?

  • kafka 有两种数据保存策略:按照过期时间保留和按照存储的消息大小保留。

3.kafka 同时设置了 7 天和 10G 清除数据,到第五天的时候消息达到了 10G,这个时候 kafka 将如何处理?

  • 这个时候 kafka 会执行数据清除工作,时间和大小不论那个满足条件,都会清空数据。

4.什么情况会导致 kafka 运行变慢?

  • 1.cpu 性能瓶颈

  • 2.磁盘读写瓶颈

  • 3.网络瓶颈

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

xinyi_java

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值