Java面试:2021.05.24

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。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值