职场面试题总结(44)---SpringBean的作用域、接口和抽象类的区别、Rest和RPC对比

108 阅读2分钟

1、SpringBean的作用域

singleton:单例模式 当spring创建applicationContext容器的时候,spring会欲初始化所有的该作用域实例,加上lazy-init就可以避免预处理。

prototype:原型模式 每次通过getBean获取该bean就会新产生一个实例,创建后spring将不再对其管理。

request:请求模式 每次请求都新产生一个实例,和prototype不同就是创建后,接下来的管理,spring依然在监听。

session:会话模式 每次会话都新产生一个实例,和prototype不同就是创建后,接下来的管理,spring依然在监听。

global session:全局模式 全局的web域,与servlet中的application类似。

2、接口和抽象类的区别

不同之处:

抽象类:

(1)抽象类中可以定义构造器。

(2)可以有抽象方法和具体方法。

(3)接口中的成员全都是public的。

(4)抽象类中可以定义成员变量。

(5)有抽象方法的类必须被声明为抽象类,而抽象类未必要有抽象方法。

(6)抽象类中可以包含静态方法。

(7)一个类只能继承一个抽象类。

接口:

(1)接口中不能定义构造器。

(2)方法全部默认都是抽象方法,接口中的变量默认也必须是public static final。

(3)抽象类中的成员可以是private、默认、protected、public。

(4)接口中定义的成员变量实际上都是常量。

(5)接口中不能有静态方法。

(6)一个类可以实现多个接口。

相同之处:

(1)不能够实例化。

(2)可以将抽象类和接口类型作为引用类型。

(3)一个类如果继承了某个抽象类或者实现了某个接口都需要对其中的抽象方法全部进行实现,否则该类仍然需要被声明为抽象类。

3.Rest和RPC对比

RPC最主要的缺陷就是服务提供方和调用方式之间依赖太强,我们需要为每一个微服务进行接口的定义,并通过持续继承发布,需要严格的版本控制才不会出现服务提供和调用之间因为版本不同而产生的冲突。

REST是轻量级的接口,服务的提供和调用不存在代码之间的耦合,只是通过一个约定进行规范,但也有可能出现文档和接口不一致而导致的服务集成问题,但可以通过swagger工具整合,是代码和文档一体化解决,所以REST在分布式环境下比RPC更加灵活。