JAVA面试题20

201. mycat 分片规则

分片规则(rule)

前面讲了数据切分,一个大表被分成若干个分片表,就需要一定的规则,这样按照某种业务规则把数据分到某个分片的规则就是分片规则,数据切分选择合适的分片规则非常重要,将极大的避免后续数据处理的难度。

mycat 大概支持十几种分片规则,我们使用的分片规则主要是 2 个:

1、自动分片:

一共三个分片节点,会自动根据主键 ID 进行分片,0-500W,501-1000W,1000-1500W 会自动对数据进行分片存储;

但是这个分片规则有个缺点,就是超过 1500W 的数据无法处理;

2、一致性哈希

计算主键 ID 的哈希值,根据哈希值进行平均的分片(理论上的平均,不保证绝对平均)。

(1) 在 schema.xml 中配置 table 的分片规则

(2) 在 rule 定义分片规则<xxx-murmur>,并设置主键 ID

(3) 根据 rule.xml 中对分片规则的配置选项进行设置

(4) 重启 mycat 后,table 按照一致性哈希分片规则进行分片

7.4.Spring Boot

7.4.1. 什么是 spring boot

springboot 就是 spring 推出的脚手架工程,目的在于提高开发效率。

特性的话我理解就三个吧,

1、依赖管理:其实就是通过启动器将项目的依赖和版本进行管理,通过 maven 的依赖进行自动的依赖集成和版本管理;

2、约定大于配置:同样通过自动配置,引入依赖后,加载默认配置文件,如果要自定义的话可以通过 java 类实现, 也可以在全局配置文件(application.properties,application.yml)中定义;

3、springboot 自带 tomcat 容器,项目打包为 jar,发布项目直接 java -jar 命令即可发布,生产环境一般使用 k8s+docker 进行项目的部署,通过容器能够很好地实现服务的资源利用,通过 k8s 实现容器集群管理。

7.4.2. springboot @SpringBootApplicaiton 注解作用

@SpringBootApplication

根据查看源码,在@SpringBootApplicaiton 的元注解中,实际上是继承了三个注解

@Configuration:表示将该类作用 springboot 配置文件类。

@EnableAutoConfiguration:表示程序启动时,自动加载 springboot 默认的配置。

@ComponentScan:表示程序启动是,自动扫描当前包及子包下所有类。

7.4.3. springboot 项目启动发生了什么

1、执行启动类中的 main 方法;

2、扫描所有的配置类,进行 spirng Ioc 容器的装载;

3、加载依赖树,根据 spring-stater-autoconfigure 进行自动配置,加载默认配置参数;

4、打包成 jar 包,通过内部 tomcat 容器,发布项目

7.5.Spring Cloud

7.5.1. 什么是微服务架构

微服务架构的系统是一个分布式的系统,按业务进行划分为独立的服务单元,解决单体系统的不足,同时也满足越 来越复杂的业务需求。

微服务,更加强调的是独立、自治、灵活。一般都会采用基于 Http Rest 风格服务。

7.5.2. 什么是 spring cloud

SpringCloud 是 Spring 旗下的项目之一,Spring 最擅长的就是集成,把世界上最好的框架拿过来,集成到自己的项目中。

SpringCloud 也是一样,它将现在非常流行的一些技术整合到一起,实现了诸如:配置管理,服务发现,智能路由,负载均衡,熔断器,控制总线,集群状态等等功能.为微服务架构的实现提供技术支持。

7.5.3. spring cloud 常用组件

- Eureka:注册中心

- Zuul:服务网关

- Ribbon:负载均衡

- Feign:服务调用(服务伪装,向 controller 一样功过 service-name 调用服务)

- Hystix:熔断器

7.5.4. spring cloud zookeeper 有什么区别

zookeeper 强调的是 CAP 原则的 CP 原则,更加注重一致性,如果注册中心无法保证一致性,则服务提供者服务消费者,可能无法实现服务器的调用及通信,但是 spring cloud 更加强调的是 AP 原则,注重的是服务的可用性,所以针对服务的发布及调用来说,体验更好,服务更加稳定。

7.5.5. SOA 架构和微服务架构的区别

SOA,英文翻译过来是面向服务。微服务,似乎也是服务,都是对系统进行拆分。因此两者非常容易混淆,但其实缺有一些差别:

1、SOA 架构是面向服务和接口开发,框架进行水平分割,服务层与 web 层需要通过 RPC 框架进行通讯;

2、微服务架构,则是根据业务进行纵向分割,每个微服务通过 Http 协议对外暴露 Rest 接口,更加的灵活和自治;

微服务框架SpringCloud

  1. 请说一下你们项目中使用到的springcloud中所用的组件?

Eureka 注册中心

Ribbon 本地负载均衡

Fegin 服务调用

RestTemplent 服务调用

Hystrix 熔断降级

Zuul 网关

链路追踪

配置中心

什么是SpringCloud

         SpringCloud是微服务的一种解决方案,依赖SpringBoot实现。包含注册中心(eureka)、客户端负载均衡(Ribbon)、网关(zull)、分布式锁、分布式会话等。

为什么要使用SpringCloud

         SpringCloud是一套非常完整的微服务解决方案,俗称“微服务全家桶”,几乎内置了微服务所使用的各种技术,可以不必集成第三方依赖。

SpringCloud服务注册发现原理

         每个SpringCloud服务器启动后向注册中心注册本服务器信息,如服务别名、服务器IP、端口号等,其他服务进行请求时先根据服务别名从注册中心获取到目标服务器IP和端口号,并将获取到的信息缓存到本地,然后通过本地使用HttpClient等技术进行远程调用。

SpringCloud 支持那些注册中心

         Eureka、Consul、Zookeeper

Eureka如何实现高可用

         启动多台Eureka服务器,然后作为SpringCloud服务互相注册,客户端从Eureka集群获取信息时,按照注册的Eureka顺序对第一个Eureka进行访问。

@LoadBalanced注解的作用

         开启客户端负载均衡。

Nginx与Ribbon的区别

         Nginx是反向代理同时可以实现负载均衡,nginx拦截客户端请求采用负载均衡策略根据upstream配置进行转发,相当于请求通过nginx服务器进行转发。Ribbon是客户端负载均衡,从注册中心读取目标服务器信息,然后客户端采用轮询策略对服务直接访问,全程在客户端操作。

Ribbon底层实现原理

         Ribbon使用discoveryClient从注册中心读取目标服务信息,对同一接口请求进行计数,使用%取余算法获取目标服务集群索引,返回获取到的目标服务信息。

SpringCloud有几种调用接口方式

         使用Feign和RestTemplate

这是最后一篇,剩下面试题,将会具体细分为各个功能模块

更多面试题,请打开主页分栏 java面试 进行查看,谢谢

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值