1、Redis 持久化方案你了解吗?
redis持久有两种形式,RDB,AOF俩种,RDB是一种快照的方式来存储的,这也是redis的默认的持久化方式,每隔一段对数据进行一次存储,默认是15S。
AOF是即时性的持久化方式,这种方式对数据的保存完整性比较高,但是性能比较差。而RDB存在的问题主要是服务器宕机或者断电,就会造成数据丢失,我们可以适当的把存储间隔缩短一些。
2、什么是Dubbo?
1. Dubbo的理解
工作在soa面向服务分布式框架中的服务管理中间件。Dubbo是一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案。
它最大的特点是按照分层的方式来架构,使用这种方式可以使各个层之间解耦合(或者最大限度地松耦合)。从服务模型的角度来看,Dubbo采用的是一种非常简单的模型,要么是提供方提供服务,要么是消费方消费服务,所以基于这一点可以抽象出服务提供方(Provider)和服务消费方(Consumer)两个角色。关于注册中心、协议支持、服务监控等内容。
Dubbo使用的是缺省协议, 采用长连接和nio异步通信, 适合小数据量大并发的服务调用,以及服务消费者机器数远大于服务提供者机器数的情况。
反之, Dubbo缺省协议不适合传送大数据量的服务,比如传文件,传视频等,除非请求量很低。
2. Dubbo的调用流程
1. 服务提供方启动时,向注册中心注册服务地址;
2. 服务消费者启动时, 向注册中心订阅地址;
3. 服务地址变更时, 注册中心向服务消费方, 变更时推送服务地址列表;
4. 服务消费方随机调用一个服务地址, 如果失败, 重试另一个地址;
5. dubbo后台定时采集服务调用次数和调用时间等信息。
3、Dubbo和Springcloud有什么区别?
-
SpringCloud和Dubbo都是主流的微服务架构.
-
SpringCloud是Spring体系下的微服务解决方案.
-
Dubbo是阿里旗下的后来交给Apache维护的一款分布式微服务治理框架.
-
-
技术方面对比
-
SpringCloud功能远远超过Dubbo, Dubbo只实现了服务治理(注册和发现). 但是SpringCloud提供了很多功能, 有21个子项目
-
Dubbo可以使用Zookeeper作为注册中心, 实现服务的注册和发现, SpringCloud不仅可以使用Eureka作为注册中心, 也可以使用Zookeeper作为注册中心.
-
Dubbo没有实现网关功能, 只能通过第三方技术去整合. 但是SpringCloud有zuul路由网关, 对请求进行负载均衡和分发. 提供熔断器, 而且和git能完美集成.
-
-
性能方面对比
-
由于Dubbo底层是使用Netty这样的NIO框架,是基于TCP协议传输的,配合以Hession序列化完成RPC。
-
而SpringCloud是基于Http协议+Rest接口调用远程过程的,相对来说,Http请求会有更大的报文,占的带宽也会更多。
-
使用Dubbo时, 需要给每个实体类实现序列化接口, 将实体类转化为二进制进行RPC通信调用.而使用SpringCloud时, 实体类就不需要进行序列化.
-
4、mybatis中的#{}和${}有什么区别?
#{}是预编译处理,${}是字符串替换。
Mybatis在处理#{}时,会将sql中的#{}替换为?号,调用PreparedStatement的set方法来赋值;
Mybatis在处理${}时,就是把${}替换成变量的值。
使用#{}可以有效的防止SQL注入,提高系统安全性。
一般能用#的就别用$
5、说一下ArrayList的自动扩容机制?
ArrayList底层是采用数组来进行数据的存储,第一次扩容时数组大小为10,之后加入的数据元素大于10的话,就会自动扩容为原先的1.5倍大小,并复制好数据元素,每一次扩容都是创建一个新的数组,将数据元素存到新的数组里。
6、什么是自动拆装箱?
自动装箱: 就是将基本数据类型自动转换成对应的包装类。
自动拆箱:就是将包装类自动转换成对应的基本数据类型。
7、final 在 java 中有什么作用?
final 修饰的类叫最终类,该类不能被继承;
final 修饰的方法不能被重写;
final 修饰的变量叫常量,必须赋值才能使用,并且只能赋值一次。
8、讲一下MySQL数据库事务的隔离级别?
Read Uncommitted(读取未提交内容)
在该隔离级别,所有事务都可以看到其他未提交事务的执行结果。本隔离级别很少用于实际应用,因为它的性能也不比其他级别好多少。读取未提交的数据,也被称之为脏读(Dirty Read)。
Read Committed(读取提交内容)
这是大多数数据库系统的默认隔离级别(但不是MySQL默认的)。它可以避免脏读问题,一个事务只能看见其它事务已经提交的修改。这种隔离级别,会有不可重复读(Nonrepeatable Read)问题,即一次事务中的两次相同查询拿到了不同的结果。
Repeatable Read(可重读)
这是MySQL的默认事务隔离级别,它能避免脏读及不可重复读问题。但还是会有幻读 (Phantom Read)现象。幻读指当用户读取某一范围的数据行时,另一个事务又在该范围内插入了新行。MySQL 提供了间隙锁可以避免幻读,例如
select * from 表 where id >= 10 这时其它事务无法插入id >=10以上的新行。
Serializable(可串行化)
这是最高的隔离级别,它利用了共享锁解决幻读,即两个事务可以同时读数据,而不能一个读、一个写,或者两个都去写数据。但性能太低。
9、讲一下MySQL数据库事务的特性?
原子性:事务内的多条 sql 作为一个整体执行,要么全部成功,有一条失败之前成功的也要回滚;
一致性:事务的执行使得数据库从一种正确状态转换成另一种正确状态;
隔离性:多个事务并发执行时,事务之间数据更改的可见性,隔离级别越高,事务内数据的一致性越高;
持久性:事务正确提交后,即使出现了其它故障(如断电等)也应当有机制保证提交后的数据永久保存。
10、讲一下MySQL数据库什么是左连接?
(左外连接)以左表为基准进行查询,左表数据会全部显示出来,右表 如果和左表匹配 的数据则显示相应字段的数据,如果不匹配,则显示为 NULL。