面试题java

面试题

1、java基础

1、jvm jre jdk是什么?

jvm:java虚拟机
jre:java运行时环境
jdk:java运行工具包

2、java三大特性

封装:将类的信息隐藏,提供公有的get,set方法进行访问
继承:发生在父类和子类之间。子类继承父类的属性和重写方法。子类可以有自己特性的属性和方法
多态:父类引用指向子类对象

3、java的8大数据类型

浮点型:float double
字符型:char
数字型:int long byte short
布尔型:boolean

4、float f = 3.4;是否正确

不正确。因为没有强制转换
float f = 3.4f
或者float f = (float)3.4正确

5、short s1= 1;s1= s1+1;有错吗?short s1 = 1 ; s1 += 1 有错吗?

前者有错。因为s1是short类型没有做强制类型转换。
后者对的。s1+=1做了隐式转换

6、&、| 与&& 、||的区别

前者是逻辑与和或
后者是短路与和或
前者运算不会短路。后者会

7、Math.round(11.5)等于多少?Math.round(-11.5)等于多少?

Math.round是+0.5后向下取整
所以Math.round(11.5) = 12
Math.round(-11.5) = -11

8、hascode与equal

两个对象hascode相等。equal不一定相等,
但是如果equal相等,则hascode一定相等
因此比较两个对象是否同一对象不是一上来就比较equal。造成浪费。
先比较hascode。如果两对象的hascode不相同。则一定不是同一对象
如果hascode相同,再比较equal。

9、string、stringBuilder、StringBuffer的区别

string是字符串常量。一旦被创建不允许被更改
stringBuffer和stringBuilder是字符串变量。可以更改。可以用append方法拼接
stringBuilder是线程不安全的stringBuffer线程安全

10、方法重载和重写的区别?

方法重写发生在子类和父类之间。子类重写父类的方法。方法名相同,返回值相同。参数相同。
子类方法抛出的异常不可大于父类方法。
方法重载发生在同一个类。有2个或2个以上方法名相同的方法。但是参数不同、返回值可以不同。方法体不同

11、java集合

位于java.util包。Collection是Set和List的父接口
List有
ArrayList:底层数组。查询较快。初始容量10.扩容1.5倍。当我们知道大概有多少容量时。定义数组时尽量定义ArrayList的长度。
LinkedList:底层链表。增删较快。查询较慢

Set:不可重复集合
HashSet:无序,不可重复
TreeSet:有序,不可重复

Map:
HashMap:线程不安全的map。初始容量16,负载因子0.75.扩容2
ConcurrentHashMap:线程安全的hashMap。在jdk1.8以前是segment段锁。在jdk1.8后取消了segment段锁。改成了数组+链表+红黑树模式

12、进程与线程的区别

一个进程至少有一个线程或者多个线程
一个线程属于一个进程

13、线程的生命周期

1、新建状态:new一个线程对象时
2、就绪状态:线程对象调用start方法时
3、运行状态:就绪状态的线程得到cpu的调度
4、阻塞状态:运行状态的线程由于某种原因放弃对cpu的资源使用
包含以下几种:
等待阻塞:运行中线程调用了wait()方法
同步阻塞:synchronize同步代码块线程阻塞
其他阻塞:运行中线程调用了join和sleep方法等
5、死亡状态:线程运行完毕或退出了run()方法

14、sleep yield wait join方法区别

sleep:运行状态的线程调用线程的sleep方法。使得线程进入阻塞状态。等待sleep时间结束、恢复到可运行状态
yield:线程礼让。当前线程调用yield方法。判断可运行池里是否有同级别或高级别的线程。如果有,把当前线程放到可运行池中。如果只有同级别的线程。当前线程可能继续执行。
如果都无,则什么都不做
wait:等待。跟同步代码块使用synchronize.并且配合notify和notifyAll一起使用
会释放锁资源
join:当前线程调用其他线程a的join方法。当前线程等待a线程执行完毕后。当前线程转为可运行状态

15、创建线程的三种方式

1、继承Thread类
创建Thread的子类的实例
重写Thread的run方法
调用子类的start方法

2、实现Runnable接口
创建实现Runnable接口的实现类
重写run方法
将实现类作为target,再创建Thread子类时放入它
子类调用start方法

3、实现callable接口

16、io流

类型分为:字节流和字符流
流向:输入流和输出流
字节流以8个二进制单位
字符流16个二进制单位
只要是处理纯文本可以用字符流,其他统统使用字节流

缓冲流:BufferedInputStream BufferedOutPutStream BufferedRead BufferedWrite
起着缓冲作用减少磁盘读写

17、什么是反射

java中对于任何一个实体类都能知道它的属性和方法。别的类都能调用这个类的属性和方法。这种动态的机制称为反射

18、创建对象的5种方式

new
Class类的newInstance
Constractor类的newInstance
clone
反序列化

19、Sychronized volatile lock的区别

Sychronized和lock的区别?
1、Sychronized是关键字。lock是一个类
2、Sychronized会造成线程阻塞,多线程情况下a线程执行。b线程会一直等待。lock不会,a线程执行,则b线程会尝试获取到锁资源。尝试一段时间就不会再尝试了。
3、Sychronized用于少量的同步代码块。lock用于大量的
4、Sychronized不能判断当前锁的状态。而lock是可以
5、Sychronized不用手动释放锁。a线程执行完毕以后。或者中途发生异常。则锁资源释放
lock必须在finally方法里调用unlock方法
6、Sychronized是非公平锁,不可中断。lock是公平锁可中断。

Sychronized和volatile区别?
1、volatile是变量在多线程之间的可见性。Sychronized是多线程资源访问的同步性
2、volatile只能用于修饰变量。Sychronized用于修饰同步代码块和方法
3、volatile不会造成线程阻塞。而Sychronized会
4、volatile是变量在多线程之间的可见性,但是不能保证原子性。而Sychronized可以保证可见性和原子性

公平锁和非公平锁的区别?
公平锁:线程获取尝试获取锁资源,会判断等待池里是否为空。如果为空,则当前线程就是等待池的第一个线程。如果不为空,则满足先进先出后进后出原则。
非公平锁:上来直接暴力获取锁资源,如果获取不到。则采用公平锁的方式

20、java的5种运行时异常

NullPointerException:空指针异常
NumberFormatException:数字类型转换异常
classCastException:类型转换异常
IndexOutofBoundException:数组下标越界
IllegalArgumentException:非法传递参数异常

21、final、finally、finalize区别

final是最终的。可用于修饰方法、成员变量、类。
修饰的类不可以被继承。修饰的成员变量不能发生更改。修饰的方法不能被重写

finally是try catch异常处理时出现。一般在try catch之后。放最后要执行的代码

finalize是java的方法。垃圾回收

##finally一定被执行吗?
1、当try执行之前就return了就不会执行finally
2、try执行时调用了System.exit(0)退出java虚拟机的方法

##finally语句是在try的return之后执行还是之前执行。
finally语句在try的return之后执行。并且如果finally块中有return则覆盖try的结果

2、数据库

1、数据库三大范式

第一范式:表中的每一列都是不可拆分的最小单元。
第二范式:在满足第一范式的基础上,表的每一列依赖于主键
第三范式:满足第二范式的基础上。表的每一列必须直接依赖于主键而不是间接依赖

2、数据库五大约束

主键约束:唯一,非空
外键约束
默认约束:指该列的默认值
非空约束:指该列不能为空
唯一约束:唯一,可以为空

3、分页

select * from 表 limit 0,5

5、数据库优化

1、sql优化
查询优化:不要使用select * ,在where 以及 orderby groupby的列需要加索引
where子句后面尽量不要进行非空判断
where子句后面尽量不要使用!= <>
in notin要慎用。在知道范围的情况下使用between
定义为数字类型的字段不要用字符串查询

2、索引优化
表超过百万行数据需要建立索引
在where orderby groupby的列需要建立索引
经常连表查询的字段。应建立索引
索引建立在小字段上。不要建立在大字段上

3、缓存
4、读写分离分库分表分区。活跃数据分离

6、索引

数据表中一列或者多列的排序
##索引优点:
1、加快查询速度
2、如果groupby以及orderby后字段有索引。会增加分组排序的速度
3、索引列保证行的唯一性。生成rowId
4、加快表与表之间的连接

##索引缺点
时间和空间成本的维护

##索引失效
like以%查询
索引列进行运算如果没有函数索引则索引失效

##什么样的列需要建立索引
经常在where子句后的列
在groupby以及orderby之后的列
连表查询关联的列

##什么样的列不需要建立索引
经常新增修改的列
数据重复且平均的列
表记录太少

##常见的索引
普通索引:普通的没有特殊限制的
唯一索引:唯一的
主键索引:主键自带
全文索引:myisam表特有
组合索引:多个列组成的索引

7、存储过程/存储函数

事先编译到数据库的sql语句的集合
##存储过程与存储函数的区别?
存储过程有返回值。存储函数没有
存储过程有in out类型。存储函数只有in类型

##优点
1、运行速度:复杂的逻辑,存储过程执行。会从内存中调用。所以速度会快
2、减少网络传输:存储过程在数据库服务器上执行的。

##缺点
1、可移植性差
2、不能缓存
3、不能集群
开发调试复杂

8、事务的四大特性

1、原子性
事务是不可分割的工作单元
事务要么一起提交,要么一起回滚

2、一致性
事务从一个一致性状态到另一个一致性状态
转账的双方减和加数目应当一致

3、隔离性
多个用户访问数据库时。数据库对每个用户应当有事务。防止数据错乱

4、持久性
事务一旦被提交。数据的更改是永久的

9、事务的传播机制

一般使用默认 require 默认当前事务。如果当前事务不存在,创建一个新的事务

10、myIsam和innodb的区别

myisam适用于非事务型表。有全文索引。查询较快
innodb适用于事务表。insert和update效率较高。但平时一般使用innodb表

1、存储文件
myisam有三个文件 .frm 表头 .myi 索引 .myd 数据文件
innodb只有一个文件。受限于操作系统大小。一般2gb

2、是否支持事务
myisam不支持事务
innodb支持

3、是否支持主键
myisam不支持
innodb支持

4、是否支持外键
myisam不支持
innodb支持

5、myisam支持表级锁。当增删改查操作时表自动加锁。当用户的insert语句满足并发请求时。在表的最后一行新增一条记录
innodb支持行级锁。用户的新增修改效率是很高的。但是也是where语句后可以有行锁。否则表级锁

6、myisam全文索引支持
innodb不支持

3、java web

1、servlet是什么

servlet是java servlet的简称。称为小服务程序或者服务连接器。用java编写的服务器端程序。主要功能都在于交互式地浏览和修改数据,生成动态web内容

2、servlet工作原理

首先客户发送个请求,servlet容器会创建特定于这个请求的servletRequest对象和ServletResponse对象。
然后调用调用servlet的service方法从ServletRequest对象获得客户请求信息。处理该请求。并通过ServletResponse
对象向客户返回响应信息

3、servlet生命周期

1、初始化阶段。调用init()方法
servlet容器创建一个servlet实例并且调用servlet的init()方法进行初始化。在servlet的整个生命周期内init()方法只能被调用一次
2、响应客户请求阶段调用的service()方法
客户发送个请求,servlet容器会创建特定于这个请求的servletRequest对象和ServletResponse对象。
然后调用调用servlet的service方法从ServletRequest对象获得客户请求信息。处理该请求。并通过ServletResponse
对象向客户返回响应信息
3、终止阶段 调用destroy()方法
当web应用被终止,或servlet容器终止运行,或servlet容器重新装载servlet新实例时,servlet容器会先调用servlet的destroy()方法,在destroy()方法中可以释放掉servlet所占用的资源

4、servlet什么时候创建

1、默认情况下,当web客户第一次请求访问某个servlet的时候,web容器将创建这个servlet实例。
2、当web.xml文件中如果servlet元素中指定了load-on-startup子元素时,servlet容器在启动web服务器时,将按照顺序创建并初始化servlet对象。

5、servlet和jsp的区别

1、jsp经编译后就变成了servlet
2、jsp本质就是servlet。jvm只能识别java的类,不能识别jsp的代码
3,web容器将jsp的代码编译成jvm能够识别的java类
4、jsp更擅长与表现页面展示。servlet更擅长与逻辑控制
5、jsp侧重于视图。servlet主要用于控制逻辑

6、session与cookie的区别

cookie:创建于服务器端,保存在浏览器端。cookie的生命周期可以通过cookie.setMaxAge(2000)来设置。如果没有设置setMaxage,则cookie的生命周期当浏览器关闭时就消亡。

1、存在的位置
cookie存在于客户端临时文件夹中
session存在于服务器内存中,一个session域对象为一个用户浏览器服务

2、安全性
cookie是以明文的方式存在客户端的。安全性低,可以通过一个加密算法进行加密后存放
session存放于服务器内存中,所以安全性好

3、网络传输量
cookie会传递消息给服务器。session本身存放于服务器。不会有传输量

4、生命周期(以30min为例)
cookie的生命周期是累计的,从创建时,就开始计时,30分钟后cookie生命周期结束
session生命周期是间隔的,从创建时,开始计时。如果在30分钟,没有访问session那么session的生命周期被销毁。
但是如果在30分钟内,比如第29分钟,访问过session,那么将重新计算session的生命周期

关机会造成session生命周期的结束。但是对cookie没有影响

7、转发与重定向的区别

1、转发只访问服务器一次。重定向访问服务器两次。
2、转发地址栏没有变化。重定向地址栏有变化
3、转发在服务器端完成的,重定向在客户端完成的
4、转发不会执行转发后的代码,重定向会执行重定向后的代码
5、转发必须是在同一台服务器下完成,重定向可以在不同的服务器下完成

8、jquery选择器

1、基本选择器
基本选择器是jquery最常用的选择器,也是最简单的选择器。它通过元素id,class和标签名查找dom元素
2、层级选择器
如果想通过dom元素之间的层级关系来获取特定元素,例如后代元素,子元素,相邻元素,兄弟元素。则需要使用层次选择器
3、过滤选择器
找到一堆页面元素,我们可以对这些元素加过滤条件。找到我们想要得到这些元素。然后进行过滤。通过特定的过滤规则来筛选出所需的dom元素。该选择器都以“:”开头
按照不同的过滤规则,过滤选择器可以分为基本过滤,内容过滤。可见性过滤。属性过滤。子元素过滤。和表单对象过滤属性过滤选择器

9、ajax

ajax全称为Asynchronous JavaScript and XML(异步javascript和xml),是一种创建交互式网页应用的网页开发技术

10、jdbc

1、jdbc是什么
jdbc是java database connectivity
数据库连接
是一种用于执行sql语句的java api,可以为多种关系数据库提供统一访问,它由一组用java语言编写的类和接口组成。jdbc提供了一种基准,使数据库开发人员能够编写数据库应用程序

2、jdbc连接步骤
1、使用jdbc编程需要连接数据库,注册驱动和数据库信息
2、操作connection,打开statement对象
3、通过statement对象执行sql,返回结果到resultset对象
4、使用resultset对象读取数据,然后通过代码转换为具体的实体对象
5、关闭数据库相关资源

3、jdbc缺点
工作量比较大,需要连接,然后处理jdbc底层事务。处理数据类型,还需要操作connection,statement对象和resultset对象去拿数据并关闭他们

4、jdbc优点
执行效率比hibernate和mybatis要快。像hibernate和mybatis框架都是对jdbc的封装

4、框架

1、mybatis的工作原理

1、加载mybatis全文配置文件(mapper映射文件等),解析配置文件。mybatis基于配置文件生成cofiguration,和一个个MapperdStatement(包括参数映射配置,动态sql语句,结果映射配置),其对应着select | update | delete | insert标签项

2、sqlSessionFactoryBuilder通过Configuration对象生成sqlSessionFactory,用来开启sqlSession

3、sqlSession对象完成和数据库交互
4、用户程序调用Mapper接口中的方法
5、sqlSession通过调用api的Statement ID找到对应的MapperedStatement对象
6、通过Executor将MapperedStatement对象进行解析。sql参数转化。动态sql拼接。生成jdbc Statement对象
7、jdbc执行sql
8、借助MapperdStatement中的结果映射关系。将返回结果化成HashMap、javaBean等存储结构并返回。

2、springmvc工作流程

1、用户发送请求至前端控制器DispatcherServlet
2、DispatcherServlet收到请求调用HandlerMapping处理器映射器
3、处理器映射器找到具体的处理器,生成处理器对象及处理器拦截器。一并返回给DispathcerServlet.
4、DispatcherServlet调用handlerAdapter处理器适配器
5、HandlerAdapter经过适配调用具体的处理器
6、Controller执行完成返回ModelAndView
7、HandlerAdapter将controller执行结果ModelAndView返回给DispatcherServlet。
8、DispatcherServlet将ModelAndView传给ViewReslover视图解析器
9、viewReslover解析后返回具体view
10、dispatcherServlet根据view进行视图渲染
11、dispatcherServlet响应用户

3、spring ioc和aop

ioc:控制反转,将类的创建和依赖关系写在配置文件里,由配置文件注入。实现了松耦合,底层使用了工厂模式、单例模式和反射机制

aop:面向切面编程:将安全,事务等程序逻辑相对独立的功能抽取出来,利用spring的配置文件将这些功能插进去,实现了按照切面编程,提高了复用性,底层使用了代理模式

5、spring常用注解

@Component 用于创建对象作用于类
@Controller 控制层注解
@Service 业务层注解
@Repository 持久层注解
@Bean 用于把当前方法的返回值作为bean对象存入spring的ioc容器中
@ComponentScan用于指定spring在初始化容器时要扫描的包
@Autowired:自动按照类型注入
@Scope:指定bean的作用范围

5、分布式/微服务

1、nginx是什么

是一个高性能的反向代理服务器,出色完成动静分离和负载均衡

2、nginx轮询方式

默认:轮询:nginx将请求平均分配给后端服务器。也可以指定weight权重

ip_hash:每一个ip分配到固定的服务器。解决了session共享问题

url_hash:每一个url分配一个服务器。将每个url当成一个资源。

最小连接数:遍历后端集群,找到连接数最小的后端。然后分配资源。如果有多个后端连接数都最小。采用加权轮询算法

3、集群如何做session共享

session保存到redis里。这样比cookie更安全。保存在内存中,读取速度更快

4、redis是什么

非关系型数据库。远程服务字典。用于缓存、验证码、消息队列、分布式锁等功能

5、redis有哪些数据类型

字符串型:用于缓存、短信验证码
散列
列表:消息队列
集合
有序集合:排行榜

6、redis持久化

有rdb和aof两种
rdb是redis默认的持久化方案。在一定的时间执行一定的写操作。将内存中的文件写到磁盘中。并且在指定的位置生成一个dump.rdb文件。redis服务器启动时读取dump.rdb文件恢复数据

rdb优点:适合大规模数据恢复
对数据完整性和一致性要求不高可以使用

rdb缺点:数据的完整性一致性不高
内存占用量大

aof:redis持久化默认不开启。是对rdb的优化。它会生成日志文件。将写操作追加进去

aof优点:数据的完整性和一致性高
aof缺点:aof生成文件大。数据恢复越来越慢

7、redis缓存处理流程

前端发出请求。后端去缓存中取数据。如果缓存中取不到,去数据库取。取到了更新缓存并返回数据。如果取不到。则返回为空

8、redis缓存穿透

缓存穿透是指:缓存和数据库都查不到数据,但是用户会访问一个id不存在的或乱写的id的数据。不停的访问数据库,导致数据库压力过大
解决方案:
1、对用户进行鉴权校验,对id进行基础校验
不存在的id直接返回不用查询
2、对于缓存和数据库都没有的数据,可以保存key-null
设置过期时间30秒(不能太长让正常数据无法使用)这样可以保证对同一个id下一直攻击问题

9、redis缓存雪崩

概念:缓存中数据过期时间到,大批量同一时间过期。导致大量查询数据库,从而数据库性能压力过大。甚至宕机。
解决办法:设置缓存数据过期时间随机
热点数据用不过期

10、缓存击穿

概念:缓存击穿和缓存雪崩差不多。也是缓存中数据无,数据库有(缓存时间到期),主要是高并发用户一直访问过期的数据,查询数据库。导致数据库压力过大
解决方法:互斥锁,热点数据永不过期

11、kafka是什么

kafka是消息队列

12、kafka的优点

1、解耦:独立拓展,保持kafka api接口一致性
2、可恢复性:某个组件发生异常,不影响整个系统的运行
比如电商系统的订单和库存系统。当订单系统创建订单时。库存系统发生故障。则订单系统无法创建订单。这种系统是高耦合不好的。
这时候引入消息队列。当我们订单系统创建订单后,将库存-1的信息放到消息队列。这时候无论库存系统是否宕机,订单系统都已经创建好订单。然后等待库存系统恢复正常。它会去读取消息队列的库存-1信息然后更新库存

3、流量削峰
4、异步通信:用户可以把消息放到消息队列中,什么时候想消费消息都可以

13、消息队列的两种模式

1、点对点
2、发布/订阅模式 kafka
生产者 producer
消费者 consumer
主题 topic

14、kafka的四个核心api

1、kafka producer api 一个程序将流式数据生产给一个或多个topic

2、kafka consumer api 一个程序允许订阅一个或多个topic用于消费数据

3、kafka streams api 一个程序是流处理器。对一个或多个topic生成输入流,或将一个或多个输出流输出到topic中去
在输入流或输出流之间转换

4、kafka connector api 可重用生产者和消费者

15、kafka什么时候重复消费?如何避免重复消费

消费者在消费消息时。突然进程被kill了或者宕机。这时候导致offset没有提交。导致重复消费

kafka自己能避免重复消费是因为kafka broker 存储的信息中都有offset。消费者通过offset来维护消费的数据

消费者消费了消息offset更新,可避免重复消费
当全部消息被消费了offset提交。可避免重复消费
消费者自动提交机制是5s,等待下一次broker拉取消息时提交

21、lucene是什么

aphache下一个开放源代码的全文搜索引擎。是完整的查询引擎、索引引擎和部分文本分析引擎

22、ElasticSearch是什么

基于lucene的搜索引擎。提供具有http web界面和无架构的json文档的全文搜索引擎

23、ElasticSearch倒排索引

正常情况下我们检索是遍历文章,然后找到关键词。
但是倒排索引是根据分词策略,产生关键词和文章之间的映射关系表。这种词+映射表就是倒排索引

24、ElasticSearch索引、类型、文档、字段是什么

相当于关系型数据库的库、表、行、列

25、springboot是什么

spring的子项目。是spring的组件一站式解决方案。简化配置、增加启动器、开发者快速上手

26、springboot有什么优点

敏捷开发
嵌入式tomcat jetty容器
无需部署war包
支持热部署
提供大量的starter简化maven配置
对主流开发框架的无配置集成

27、springboot与springmvc的区别

springboot就是一个大框架里面包含了许许多多的东西,其中spring就是最核心的内容之一。包含springmvc。springmvc只是spring处理web层请求的一个模块

28、springboot常用starter

spring-boot-starter-data-jpa
spring-boot-starter-data-mongodb
spring-boot-starter-amqp
spring-boot-starter-data-elasticsearch
spring-boot-starter-web

29、什么是微服务架构

微服务架构是一种架构模式,它提倡将单一应用程序划分成一组小的服务,服务之间相互协调。相互配合。每个服务运行在其独立的进程中,服务与服务间采用轻量级的通信机制互相协作(基于http协议的restful api)。每个服务都围绕着具体业务进行构建,并且能够被独立的部署到生产环境

30、微服务架构有什么优势和劣势

微服务架构的优点
1、每个服务都比较简单,只关注一个业务功能
2、微服务架构方式是松耦合的,可以提供更高的灵活性
3、微服务可通过最佳及最合适的不同的编程语言与工具进行开发
4、每个微服务可由不同团队独立开发,互不影响,加快推出市场的速度

微服务架构的缺点
运维工作量增添加,应用运维管理复杂
服务器内存占用量更高
事务处理麻烦

31、springcloud是什么

分布式微服务架构下的一站式解决方案
,俗称微服务全家桶

32、springcloud与springboot有什么区别

springboot可以离开springcloud独立使用开发项目,但是springcloud离不开springboot。属于依赖关系

springboot专注快速方便开发单个微服务个体。springcloud关注全局服务治理

33、eureka

eureka是Netflix开发的服务注册发现框架,本身是一个基于rest的服务。
eureka包含两个组件:eureka server和eureka client
eureka server提供服务注册,各个节点启动后,会在eureka server中进行注册,这样eureka server中的服务注册表中将会存储所有可用服务节点的信息,服务节点信息可以在界面中直观的看到。

eureka client是一个java客户端,用于简化与eureka server的交互,客户端同时也就是一个内置的,使用轮询负载算法的负载均衡器

34、spring cloud ribbon

是一个基于http和tcp的客户端负载均衡工具,它基于netflix ribbon实现。通过spring cloud的封装,可以让我们轻松的将面向服务的rest模板请求自动转换成客户端负载均衡服务调用。spring cloud ribbon虽然只是一个工具类框架,它不像服务注册中心,配置中心,api网关那样需要独立部署

35、spring cloud feign

feign是一种负载均衡的http客户端,使用feign调用api像调用本地方法一样

36、spirng cloud hystrix

hystrix是一个用于处理分布式系统的延迟和容错开源库,在分布式系统里,许多依赖不可避免的会调用失败,比如超时,异常等,hystrix能够保证在一个依赖出问题的情况下,不会导致整体服务失败,避免级联故障,以提高分布式系统的弹性

37、spring cloud config

分布式系统中,为了方便服务配置文件统一管理,实时更新,所以需要分布式配置中心组件。在spring cloud中,有分布式配置中心组件springCloud config,它支持从远程git仓库中读取配置文件并存放到本地git仓库。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值