1 Star 0 Fork 31

np / Ebooks

forked from Java精选 / Ebooks 
加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
Spring 中级面试题汇总附答案,2021年 Spring 面试题及答案大全.md 8.03 KB
一键复制 编辑 原始数据 按行查看 历史

Spring 中级面试题汇总附答案,2021年 Spring 面试题及答案大全

全部面试题答案,更新日期:12月30日,直接下载吧!

下载链接:高清500+份面试题资料及电子书,累计 10000+ 页大厂面试题 PDF

Spring

题1:Spring 中如何定义 Bean 的范围?

在Spring中定义一个时,我们也可以为bean声明一个范围。它可以通过bean定义中的scope属性定义。

例如,当Spring每次需要生成一个新的bean实例时,bean的scope属性就是原型。另一方面,当每次需要Spring都必须返回相同的bean实例时,bean的scope属性必须设置为singleton。

注:bean的scope属性有prototype,singleton,request, session几个属性

题2:什么是 Spring 配置文件?

Spring配置文件是一个XML文件。此文件包含类信息,并描述了这些类是如何配置和相互引入的。

题3:Spring Native 和 JVM 有什么区别?

Spring Native提供了使用GraalVM 本机图像编译器将Spring应用程序编译为本机可执行文件的支持。

与Java虚拟机相比,本机映像可以为许多类型的工作负载提供更便宜,更可持续的托管。这些包括微服务,功能工作负载,非常适合容器和Kubernetes。

使用本机映像具有关键优势,例如即时启动,即时峰值性能和减少的内存消耗。

GraalVM本机项目希望随着时间的推移会改善一些缺点和折衷方案。构建本机映像是一个繁重的过程,比常规应用程序要慢。预热后,本机映像具有较少的运行时优化。最后,它比具有某些不同行为的JVM还不成熟。

常规JVM和此本机映像平台之间的主要区别是:

  • 在构建时将未使用的零件删除。

  • 反射,资源和动态代理需要配置。

  • 类路径在构建时是固定的。

  • 没有类延迟加载:可执行文件中附带的所有内容都将在启动时加载到内存中。

  • 一些代码将在构建时运行。

  • 围绕Java应用程序的某些方面存在一些局限性,这些局限性未得到完全支持。

注:Spring Native的基础是Graalvm,一个由oracle开发维护的多语言编译/运行时平台. 它的官方说法是高性能JDK发行版,目前已支持到7种语言,包括不仅限于java、ruby、node等。

题4:Spring Native 有什么优缺点?

Spring Native优点

1)立即启动,一般启动时间小于100ms;

2)更低的内存消耗;

3)独立部署,不再需要JVM;

4)同样的峰值性能要比JVM消耗的内存小。

Spring Native缺点

1)构建时间长;

2)只支持新的Springboot版本(Spring Native 0.9.0 supports Spring Boot 2.4.3, Spring Native 0.9.1 will support Spring Boot 2.4.4, etc.)

题5:Spring Native 框架是什么?

Spring团队发布Spring Native Beta版。

通过Spring Native,Spring应用将有机会以GraalVM原生镜像的方式运行。

为了更好地支持原生运行,Spring Native提供了Maven和Gradle插件,并且提供了优化原生配置的注解。

题6:Spring 中 ApplicationContext 通常的实现是什么?

FileSystemXmlApplicationContext

此容器从一个XML文件中加载beans的定义,XML Bean 配置文件的全路径名必须提供给它的构造函数。

ClassPathXmlApplicationContext

此容器也从一个XML文件中加载beans的定义,这里,你需要正确设置classpath因为这个容器将在classpath里找bean配置。

WebXmlApplicationContext

此容器加载一个XML文件,此文件定义了一个WEB应用的所有bean。

题7:Spring AOP 和 AspectJ AOP 有什么区别?

AOP实现的关键在于代理模式,AOP代理主要分为静态代理和动态代理。静态代理的代表为AspectJ;动态代理则以Spring AOP为代表。

1)AspectJ是静态代理的增强,所谓静态代理,就是AOP框架会在编译阶段生成AOP代理类,因此也称为编译时增强,他会在编译阶段将AspectJ(切面)织入到Java字节码中,运行的时候就是增强之后的AOP对象。

2)Spring AOP使用的动态代理,所谓的动态代理就是说AOP框架不会去修改字节码,而是每次运行时在内存中临时为方法生成一个AOP对象,这个AOP对象包含了目标对象的全部方法,并且在特定的切点做了增强处理,并回调原对象的方法。

题8:JDK 动态代理和 CGLIB 动态代理有什么区别?

Spring AOP中的动态代理主要有两种方式,JDK动态代理和CGLIB动态代理:

1、JDK动态代理只提供接口的代理,不支持类的代理。核心InvocationHandler接口和Proxy类,InvocationHandler 通过invoke()方法反射来调用目标类中的代码,动态地将横切逻辑和业务编织在一起;接着,Proxy利用 InvocationHandler动态创建一个符合某一接口的的实例, 生成目标类的代理对象。

2、如果代理类没有实现InvocationHandler 接口,那么Spring AOP会选择使用CGLIB来动态代理目标类。CGLIB(Code Generation Library),是一个代码生成的类库,可以在运行时动态的生成指定类的一个子类对象,并覆盖其中特定方法并添加增强代码,从而实现AOP。CGLIB是通过继承的方式做的动态代理,因此如果某个类被标记为final,那么它是无法使用CGLIB做动态代理的。

静态代理与动态代理区别在于生成AOP代理对象的时机不同,相对来说AspectJ的静态代理方式具有更好的性能,但是AspectJ需要特定的编译器进行处理,而Spring AOP则无需特定的编译器处理。

InvocationHandler中的

invoke(Object proxy,Method method,Object[] args);

proxy是最终生成的代理实例;method是被代理目标实例的某个具体方法;args是被代理目标实例某个方法的具体入参,在方法反射调用时使用。

题9:Spring 框架中事务管理有哪些优点?

Spring框架事务管理为不同的事务API,如JTA、JDBC、Hibernate、JPA和JDO,提供一个不变的编程模式。

Spring框架为编程式事务管理提供了一套简单的API而不是一些复杂的事务API。

Spring框架支持声明式事务管理。

Spring框架和Spring各种数据访问抽象层很好得集成。

题10:Spring 中什么是目标对象?

被一个或者多个切面所通知的对象。它通常是一个代理对象。也指被通知(advised)对象。

大厂面试题

大厂面试题

大厂面试题

Java
1
https://gitee.com/huangdx.net/ebooks.git
git@gitee.com:huangdx.net/ebooks.git
huangdx.net
ebooks
Ebooks
master

搜索帮助