-
隔离性 (isolation): 一个事务执行的过程中,不应该受到其他事务的干扰
-
持久性(durability) : 一个事物一旦提交,它对数据库的改变就是永久的
9、Spring事务七个传播特性(七种面试说一两个即可)
-
Propagation.REQUIRED (默认) 面试必须说出来这个。调用方已经存在事务,则加入到同一个事务中运行,否则,自启一个事务
-
Propagation.REQUIRES_NEW。无论何时自身都会开启新事务
-
Propagation.SUPPORTS。调用方存在事务,则加入到同一个事务中运行,若不存在事务,则以非事务的方式运行
-
Propagation.NOT_SUPPORTED。调用方存在事务,则会被挂起,直到被调用方运行完毕后,事务恢复。
-
Propagation.MANDATORY。调用方存在事务,则加入到同一个事务中运行,若不存在,则抛出异常
-
Propagation.NEVER。调用方存在事务,则抛出异常
-
Propagation.NESTED。若调用方存在事务,则运行一个嵌套事务,若调用方不存在事务,则以Propagation.REQUIRED的方式运行,即开启一个新的事务
10、简述Spring Bean的生命周期
实例化、初始化、使用、销毁。
关键词:BeanFactoryPostProcessor 、BeanPostProcessor 、init-method/destroy-method
[图片上传失败…(image-b401f-1611732924344)]
======================================================================================
1、Dubbo的容错机制有哪些?
Dubbo官网提出总共有六种容错策略
-
Failover Cluster模式:失败自动切换,当出现失败,重试其它服务器。(默认)
-
Failfast Cluster:快速失败,只发起一次调用,失败立即报错。通常用于非幂等性的写操作,比如新增记录。
-
Failsafe Cluster:失败安全,出现异常时,直接忽略。通常用于写入审计日志等操作。
-
Failback Cluster:失败自动恢复,后台记录失败请求,定时重发。通常用于消息通知操作。
-
Forking Cluster:并行调用多个服务器,只要一个成功即返回。通常用于实时性要求较高的读操作,但需要浪费更多服务资源。可通过forks=”2”来设置最大并行数。
-
Broadcast Cluster:广播调用所有提供者,逐个调用,任意一台报错则报错。(2.1.0开始支持)通常用于通知所有提供者更新缓存或日志等本地资源信息。
总结:在实际应用中查询语句容错策略建议使用默认Failover Cluster,而增删改建议使用Failfast Cluster或者使用Failover Cluster(retries=”0”)策略防止出现数据重复添加等等其它问题。建议在设计接口时候把查询接口方法单独做一个接口提供查询。
2、使用dubbo遇到过哪些问题?
增加提供服务版本号和消费服务版本号
这个具体来说不算是一个问题,而是一种问题的解决方案,在我们的实际工作中会面临各种环境资源短缺的问题,也是很实际的问题,刚开始我们还可以提供一个服务进行相关的开发和测试,但是当有多个环境多个版本,多个任务的时候就不满足我们的需求,这时候我们可以通过给提供方增加版本的方式来区分.这样能够剩下很多的物理资源,同时为今后更换接口定义发布在线时,可不停机发布,使用版本号.引用只会找相应版本的服务,例如:
====================================================================================
1.什么是Redis?
答:Remote Dictionary Server(Redis)是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。
它通常被称为数据结构服务器,因为值(value)可以是 字符串(String), 哈希(Map), 列表(list), 集合(sets) 和 有序集合(sorted sets)等类型。
2.Redis的特点什么是?
-
支持多种数据结构,如 string(字符串)、 list(双向链表)、dict(hash表)、set(集合)、zset(排序set)、hyperloglog(基数估算)
-
支持持久化操作,可以进行aof及rdb数据持久化到磁盘,从而进行数据备份或数据恢复等操作,较好的防止数据丢失的手段。
-
支持通过Replication进行数据复制,通过master-slave机制,可以实时进行数据的同步复制,支持多级复制和增量复制,master-slave机制是Redis进行HA的重要手段。
-
单进程请求,所有命令串行执行,并发情况下不需要考虑数据一致性问题。
3.Redis数据类型有哪些?
答:
-
String(字符串)
-
Hash(hash表)
-
List(链表)
-
Set(集合)
-
SortedSet(有序集合zset)
4. Redis的配置以及持久化方案有几种?
答:以下两种
-
RDB方式
-
AOF方式
========================================================================================
1. Zookeeper是什么框架
分布式的、开源的分布式应用程序协调服务,原本是Hadoop、HBase的一个重要组件。
应用场景:Zookeeper的功能很强大,应用场景很多,结合我实际工作中使用Dubbo框架的情况,Zookeeper主要是做注册中心用。
基于Dubbo框架开发的提供者、消费者都向Zookeeper注册自己的URL,消费者还能拿到并订阅提供者的注册URL,以便在后续程序的执行中去调用提供者。而提供者发生了变动,也会通过Zookeeper向订阅的消费者发送通知。
2. Zookeeper有哪几种节点类型
-
持久:创建之后一直存在,除非有删除操作,创建节点的客户端会话失效也不影响此节点。
-
持久顺序:跟持久一样,就是父节点在创建下一级子节点的时候,记录每个子节点创建的先后顺序,会给每个子节点名加上一个数字后缀。
-
临时:创建客户端会话失效(注意是会话失效,不是连接断了),节点也就没了。不能建子节点。
-
临时顺序:不用解释了吧。
3. Zookeeper对节点的watch监听通知是永久的吗?
不是。
官方声明:一个Watch事件是一个一次性的触发器,当被设置了Watch的数据发生了改变的时候,则服务器将这个改变发送给设置了Watch的客户端,以便通知它们。
为什么不是永久的,举个例子,如果服务端变动频繁,而监听的客户端很多情况下,每次变动都要通知到所有的客户端,这太消耗性能了。
一般是客户端执行getData(“/节点A”,true),如果节点A发生了变更或删除,客户端会得到它的watch事件,但是在之后节点A又发生了变更,而客户端又没有设置watch事件,就不再给客户端发送。
在实际应用中,很多情况下,我们的客户端不需要知道服务端的每一次变动,我只要最新的数据即可。
4. Zookeeper集群如果有3台机器,挂掉一台集群还能工作吗?挂掉两台呢?
记住一个原则:过半存活即可用。
集群支持动态添加机器吗?
其实就是水平扩容了,Zookeeper在这方面不太好。两种方式:
-
全部重启:关闭所有Zookeeper服务,修改配置之后启动。不影响之前客户端的会话。
-
逐个重启:顾名思义。这是比较常用的方式。
==================================================================================
1. 为什么要使用微服务跟踪?它解决了什么问题?
1. 微服务调用的现状?
-
微服务的现状:随着业务的发展,单体架构变为微服务架构,并且系统规模也变得越来越大,各微服务间的调用关系也变得越来越复杂。
-
多服务协同工作:在微服务的应用中,一个由客户端发起的请求在后端系统中会经过多个不同的微服务调用来协同产生最后的请求结果。
-
复杂的调用链条容易出错:在复杂的微服务架构系统中,几乎每一个前端请求都会形成一-个复杂的分布式服务调用链路,在每条链路中任何一个依赖服务出现延迟超时或者错误都有可能引起整个请求最后的失败。
2. 微服务跟踪解决了什么问题?