Spring框架面试前的40个问题


在Spring框架使J2EE(Java 2平台企业版)的开发更容易,用于创建可测试的,高性能的,可重用的代码。由于其模块化和依赖注入特性,Spring通常用于信息技术和金融领域。

对于希望在MIT,Accenture或Visa等公司工作的开发人员来说,金融技术是一个令人兴奋且不断发展的领域,他们更喜欢Spring而不是Java EE。这些公司正在寻找像您一样具有Spring Framework经验的开发人员来帮助数字化他们的企业需求。

但是,您如何知道是否准备好接受面试呢?您如何准备?

今天,我们将仔细阅读有关40个Spring面试问题的学习指南,以确保您准备好应对Spring Framework面试。

这是我们今天要介绍的内容:

什么是Spring框架? 从Spring Framework访谈中可以期待什么 Spring框架的前40个问题 总结以及接下来要学习的内容

春季徽标

什么是Spring框架? Spring Framework是一个开放源代码应用程序框架,并且是用Java编写的Inversion of Control容器。它旨在通过自动处理底层功能来简化应用程序设计。这使开发人员可以专注于业务逻辑。Spring还具有许多扩展模块,可以很好地适应框架的功能。

尽管Spring没有强加特定的编程模型,但是它作为Java Java Enterprise Models模型(EJB)的补充在Java社区中获得了广泛的普及。这部分是由于Spring独特的功能选择,例如控制反转和面向方面的编程(AOP),这些功能非常适合使用bean。

该框架的速度,安全性和易于构建的交易系统使其特别适合企业和金融应用程序。与Java EE或其他基于Java的框架相比,Spring框架具有许多优势,例如:

Spring使您能够使用POJO开发企业级应用程序,因此您不需要其他EJB容器产品。

Spring为本地事务和全局事务提供了一致的,可伸缩的事务管理界面。

Spring以模块化的方式组织。它的Web框架是一个轻量级的Web MVC框架。

Spring充分利用了现有技术,例如ORM框架,JEE和JDK计时器。

在Spring中测试应用程序很容易。

Spring提供了出色的API,因此可以轻松处理特定于技术的异常。

从Spring Framework访谈中可以期待什么 寻求Spring Framework专业知识的大多数公司都是金融公司,例如银行和投资公司。春季申请人的一些顶级雇主包括花旗银行,eBay,Visa和JP Morgan。

这些公司对使用Spring来保护和优化其会计和销售堆栈感兴趣。因此,大多数面试问题都会测试您对这些功能的知识,例如依赖项注入,面向方面的编程和MVC。

还有一些一般性问题,以确保您完全了解Spring的各个部分,例如命名Web应用程序开发或数据库连接中使用的模块。

最后,您肯定会被问到关于为什么使用Spring及其带来的好处的总体问题。

为了帮助您做好准备,我们收集了40个面试重点问题,以使您对这些类别的知识有所了解。

让我们开始吧!

Spring框架的前40个问题:

1. Spring有什么好处?

  • Lightweight:Spring在资源使用方面是轻量级的,基本的Spring Framework仅消耗2MB的存储空间。
  • Scalable: Spring的事务管理界面可以扩展为使用JTA模块将单个数据库上的本地事务扩展为全局事务
  • Exception Handling:得益于用于处理每个模块中异常的大量API资源,异常处理非常容易。
  • Layered Architecture:这使您可以使用程序中需要的部分,而将其余部分丢弃。
  • POJO Enabled:普通的Java对象编程可让您进行持续的可测试性和集成。
  • Open-source:所有人免费,没有供应商锁定。
  • Inversion of control (IOC):通过允许对象将其依存关系提供给其他对象而不是依存对象,从而通过IOC实现松散耦合。
  • Aspect-oriented (AOP): Spring支持面向方面的编程,这是一种将应用程序业务逻辑与系统服务分开的范例。

2. Spring的配置文件是什么? Spring的配置文件是一个XML包含项目的类信息的文件。它们描述了每个类的配置,如何将它们引入其他类以及整个程序的依赖关系。

3. Spring框架有哪些不同的模块? 总共大约有20个模块,分为核心容器,数据访问/集成,Web,AOP(面向方面​​的编程),检测和测试等层。

核心容器: Spring框架的核心包含4个模块。

  • Spring Core
  • SSpring Bean
  • SSpEL (Spring Expression Language)
  • SSpring Context

  • 数据访问/集成:支持与5个模块的数据库交互。

  • JDBC (Java DataBase Connectivity)

  • JORM (Object Relational Mapping)
  • JOXM (Object XML Mappers)
  • JJMS (Java Messaging Service)
  • JTransaction

Web:添加了对使用4个模块创建Web应用程序的支持。

  • Web
  • Web– MVC
  • Web –Socket
  • Web – Portlet

Aspect-Oriented Programming:该层使您可以使用“建议”和“切入点”功能解耦代码。

Instrumentation:这一层增加了对类工具和类加载器实现的支持。

Test:添加了对使用Junit和TestNG进行测试的支持。

Miscellaneous:在这些层类别之外还存在2个模块。

`Aspects`:允许Spring与Aspect集成。

`Messaging`:添加了对STOMP(一种注释编程模型)的支持,并允许您从WebSocket客户端路由STOMP消息。

4. Spring应用程序有哪些不同的组件? Spring应用程序包含5个组件:

Interface:定义程序功能。 Bean class:包含属性,用于访问Bean的setter和getter方法以及特定的函数等。 Spring面向方面的编程(AOP):包括横切关注点功能,面向对象的编程中不支持此功能。 Bean配置文件:包含类的信息,如何配置它们以及定义它们之间的关系。 User program:在整个程序中调用函数

5.什么是依赖注入? 依赖注入(DI)是定义如何连接多个类的概念。这是控制反转的一个例子。使用依赖注入时,您不需要在代码中显式连接服务和组件。

而是在XML配置文件中描述每个组件所需的服务,并允许IOC容器自动连接它们。

injectiondependencylarge.png

6.什么是Spring IoC容器? IoC容器创建,配置和连接对象,同时还管理对象的生命周期。容器从用户给定的配置元数据中获取有关这些区域的指令。

7. IoC的类型是什么? BeanFactory Container:此工厂类包含一个预包装的bean集合,这些bean在被客户端调用时实例化。这是支持DI的最基本的容器。

ApplicationContext Container:在BeanFactory容器之上构建,此容器提供了其他针对企业的功能。例如,ApplicationContextContainer授予解析文本消息和发布应用程序事件的功能。

8.什么是面向方面的编程(AOP)? AOP是一种编程技术,它允许程序员对行为进行模块化,该行为用于面向对象编程中的典型职责划分。核心AOP结构方面是适用于整个类的行为。从各个bean的各个方面提取这些行为,可以轻松地重用它们。

9.什么是Spring beans? Bean是在传递给IOC容器时从配置元数据创建的对象。它们构成了所有Spring程序的基础。IOC容器实例化,配置,连接和管理每个bean。

10. ApplicationContext的常见实现是什么? 三种最受欢迎​​的容器是:

FileSystemXmlApplicationContext:使构造函数从XML配置文件加载Bean定义。必须使用完整的文件路径指向。 ClassPathXmlApplicationContext:此容器与以上操作相同,但不需要完整的文件路径。相反,您设置CLASSPATH属性并允许容器在XMLat处找到CLASSPATH。 WebXmlApplicationContext:从XML文件将所有bean定义加载到Web应用程序。

11. BeanFactory和ApplicationContext有什么区别? BeanFactory是一个基本的,节省空间的容器,功能有限。它最适合用于简单任务或使用资源不足的计算机。

ApplicationContext是具有扩展接口和其他功能(如AOP)的高级,密集型容器。当您需要比BeanFactory更多的功能并且在计算机上有足够的资源时,最好使用此容器。

12.如何在Spring应用程序中添加bean? 我们必须注释一个方法:@Beanannotation。当JavaConfig遇到此方法时,它将执行该方法并将返回值注册为BeanFactory中的Bean。

package io.educative;
  public class User {
     private String name;
     private String address;
     public String getName() {
        return name;
     }
     public void setName(String name) {
        this.name = name;
     }
     public String getAddress() {
        return address;
     }
     public void setAddress(String address) {
        this.address = address;
     }
  }

13. Spring支持哪些bean作用域? Spring支持bean的五个作用域:

Singleton:将bean定义的范围限制为每个Spring IoC容器一个实例 Prototype:作用域单个bean以启用任意数量的实例。 Request::将bean定义的作用域限定为ApplicationContext中的单个HTTP请求 Session:将bean定义的作用域限定为ApplicationContext中的HTTP会话 Global-session:将bean定义的作用域限定为全局HTTP

14. Bean生命周期的步骤是什么?

lifecycle.png

Bean生命周期有七个步骤:

  1. Instantiate:Bean由Spring容器使用XML配置文件中的Bean定义进行实例化。
  2. Populate properties: SpringXML使用依赖项注入从文件中填充所有定义的属性。
  3. Set Bean Name: Spring将Bean的标识符传递给setBeanName()方法(如果Bean使用BeanNameAware接口)。
  4. Set Bean factory:如果将Bean配置为使用接口,则Spring将传递beanfactory给setBeanFactory()方法BeanFactoryAware。
  5. Pre Initialization: SpringBeanPostProcessors使用该postProcessorBeforeInitialization()方法调用与bean关联的任何对象。
  6. Initialization:然后将Bean初始化。init-method遵循中指定的任何特殊初始化过程。
  7. Post Initialization:postProcessAfterInitialization()调用所有定义的方法。现在,bean已完成。作业完成后,DisposableBean将使用来删除实现的Bean destroy()。

15.在spring解释bean。 内部bean用作另一个bean的属性。可以在配置XML文件中的<property>constructor-arg>元素下定义内部bean 。所有内部bean的作用域始终为,prototype并且没有标识符。

16.什么是bean自动接线? 这是一种Spring功能,它允许Spring容器通过查看BeanFactory来自动设置协作bean之间的依赖关系。可以设置自动装配以使用bean的名称或类型甚至是类构造函数来定义这些关系。

17.如何在Spring中注入Java Collection? 可以通过四种不同的方式注入Java集合:

<list>:可帮助您连接一组值(如列表),同时允许重复。

<set>:帮助您连接一组值,同时避免重复。

<map>:允许您注入任何数据类型的键/值对的集合。

<props>:允许您注入键值类型为的键值对集合String。

18.什么是Joinpoint? Joinpoint表示程序中执行操作的任何点。Joinpoint的示例包括在处理异常或执行方法时。使用AOP时,仅方法执行是Joinpoint。

19.Spring的建议是什么? 建议是在给定的连接点处执行的操作。在方法执行完成之前,AOP使用Advice作为拦截器。

20. Spring框架的建议类型是什么? Before:这些是在连接点方法之前执行的建议。它们使用@Before注释标记进行标记。 After returning:它们在联接点的方法完成执行而没有问题之后执行。它们使用@AfterReturning注释标记进行标记。 After throwing:仅当joinpoint方法以抛出异常结束时执行。它们使用@AfterThrowing注释标记进行标记。 After:它们在联接点方法之后执行,无论它如何完成。它们使用@After注释标记进行标记。 Around:它们在连接点之前和之后执行,并使用@Around注释标记进行标记。

21.什么是Weaving? 在Spring中进行Weaving是将元素链接到其他应用程序类型或对象以创建建议对象的过程。这是在运行时完成的。

22.描述Spring DAO支持。 数据访问对象(DAO)支持是一组工具,使使用Hibernate和JDO之类的数据访问技术更容易且具有更高的一致性。它还可以自动捕获特定于技术的错误。这些都使DAO易于使用,并允许您在持久性技术之间进行切换而不会出错。

23.什么是JDBC?Spring JDBC API中存在哪些类? JDBC代表Java数据库连接。它是Java中的应用程序编程接口,用于定义程序如何访问数据库。JDBC API包含:

JdbcTemplate NamedParameterJdbcTemplate SimpleJdbcCall SimpleJdbcInsert SimpleJdbcTemplate

24.什么是Spring Model-View-Controller(MVC)框架? Spring MVC框架提供了模型视图控制器架构和用于开发松耦合Web应用程序的预制组件。使用MVC,您可以分离程序的不同方面,例如业务,输入和UI逻辑,同时彼此之间仍然保持松散耦合。这使您的Web应用程序具有更大的灵活性。

  1. Spring MVC框架有哪些部分? MVC的3个主要部分是:

DispatcherServlet: MVC的这一部分管理所有HTTP请求以及与程序交互的响应。所述DispatcherServlet第一从配置文件接收相关的处理程序映射,然后通过关闭请求到控制器。这DispatcherServlet是Spring Web MVC框架中最重要的部分。 WebApplicationContext:这是普通ApplicationContext的扩展,具有Web应用程序所需的其他功能。它可以唯一地解析主题,并自动确定与之关联的servlet。 Controllers::这些是内的Bean DispatcherServlet,充当用户输入和应用程序响应之间的过滤器。控制器接受用户输入,决定是否应将其转换为View或Model,最后将转换后的输入返回给View Resolver进行检查。

26. DispatcherServlet的不同部分是什么?

  • Handler Mapping:定义处理程序和请求对象之间的映射的接口。可用于创建自定义映射策略。
  • Controller:通过按输入请求的期望结果对它们进行排序,确定应用对用户输入的响应。输入可以立即通过View返回,也可以转换为Model,然后再传递给View-Resolver。
  • View-Resolver:通过在视图名称和实际视图之间进行映射,从控制器获取并渲染模型。

27.如何在Spring中打开注释接线? 要允许注释接线,请<context:annotation-config/>在您的XML配置文件中包括:

<beans
    //...
    xmlns:context="http://www.springframework.org/schema/context"
    //...
    http://www.springframework.org/schema/context
    http://www.springframework.org/schema/context/spring-context-2.5.xsd">
    //...

    <context:annotation-config /> //annotation wiring enabled here
    //...
</beans>

28.什么是Spring Boot? Spring Boot是用于创建微服务的开源Java框架。这是一个在Spring之上构建的项目,旨在简化部署Java应用程序的任务。它的两个主要组件是Spring框架和嵌入式HTTP服务器。Spring Boot用于:

  • 简化开发就绪的Spring应用程序的开发过程
  • 避免XML在Spring中进行配置
  • 通过减少所需的导入语句的数量来减少开发时间
  • 提供周到的开发方法

这些通常用于使Spring应用程序快速运行。

boot.png

29.什么是反应式编程? 响应式编程是一种编程范例,它依赖于在事件上触发的已编程动作,而不是基于代码的时间顺序。响应式程序可以有效利用计算机资源,并且只需几个线程即可很好地扩展。它的非顺序形式使您可以避免堆栈阻塞并保持响应速度。

reactive.png

30.什么是Spring Webflux? Webflux是一种反应式Web框架,可以替代MVC。Webflux提供了更好的可伸缩性并防止了堆栈阻塞。

31. WebClient和Webtestclient有什么区别?WebClient是从Web无框架,使得它更容易建立反应和无阻塞的Web应用程序的组件。

Webtestclient是一个版本的客户端与所有相同的功能,但是从现场的环境断开。测试客户端不需要HTTP服务器实时环境即可工作,这使其成为新应用程序的良好测试环境。它可以通过HTTP连接连接到任何服务器,也可以直接与WebFlux同步以应用模拟HTTP请求并生成响应对象。

32. Spring Boot可以在同一应用程序中允许Spring MVC或Spring WebFlux吗? 引导程序可在同一应用程序中同时允许两者,但一次只能应用一个。WebFlux是一个非阻塞框架,而MVC是一个阻塞框架,使它们无法兼容。

33. Spring 5可以与Jdk9模块化集成吗? 是的,Spring 5可以与Jdk9集成。您可以按照以下方法进行操作:

  1. 创建一个新的班级
package com.hello;
public class HelloWorld {
    public String sayHello(){
        return "HelloWorld";
    }
}
  1. 创建一个新模块
module com.hello {
    export com.hello;
}
  1. 创建一个新的Java项目
module com.hello.client {
    requires com.hello;
}
  1. 测试新模块
public class HelloWorldClient {
    public static void main(String[] args){
        HelloWorld helloWorld = new HelloWorld();
        log.info(helloWorld.sayHello());
    }
}

34. Spring中的代理是什么? 代理是在将建议应用于目标对象之后创建的对象。代理用于执行元编程操作,例如拦截对象调用或更改对象的属性。

35.目标对象和代理对象什么时候相同? 这是一个“陷阱”问题,用于测试您是否知道不同的对象类型如何交互。处理客户端对象时,目标和代理对象是相同的。

36.如何将配置元数据提供给Spring容器? 基于XML的配置:这种类型的配置将程序的所有Bean定义和依赖项存储在XML文件中。通过提供完整的文件路径来导入这些文件,例如下面的第1行。

<bean id="bean1" class="io.Educative.firstSpring.Bean1">
 <property name="name" value="Educative"></property>
</bean>

基于注释的配置:您可以改为在Bean中的类,方法或字段上创建注释,以将其放置在组件类中。

<beans>
<context:annotation-config/>
<!-- bean definitions go here -->
</beans>

基于Java的配置:这种类型的配置使您可以跳过<bean>语法,而使用@Bean标记来实现相同的目的。您还可以使用@Configuration标记创建配置类,从而允许您通过调用其他@Bean类来在bean之间创建依赖关系。

@Configuration
public class BeanConfig
{ 
@Bean
public Bean1 myBean() 
{ return new Bean1(); }
}

37. Spring DAO类可能引发哪些异常?

  • DataAccessResourceFailureException
  • CleanUpFailureDataAccessException
  • InvalidDataAccessApiUsageException
  • InvalidDataAccessResourceUsageException
  • UncategorizedDataAccessException
  • DataIntegrityViolationException
  • DeadLockLoserDatAccessException
  • OptimisticLockingFailureEexception
  • IncorrectUpdateSemanticsDataAccessException
  • TypeMismatchDataAccessException
  • ObjectRetrievalFailureException
  • DataRetrievalFailureException

38.使用Spring可以通过什么方式访问Hibernate?

Hibernate ORM是Java的对象关系映射框架。它与Spring一起使用,以将面向对象的域模型映射到关系数据库。可以通过以下两种方式在Spring中访问Hibernate:

  1. 首先,扩展HibernateDAOSupport然后应用AOP拦截器节点
  2. 将控制反转与休眠模板和回调结构一起使用

39.指出Spring AOP中关注点和横切关注点之间的区别吗

一个问题是我们试图在应用程序的特定模块中实现的目标功能。

横切关注点是在整个应用程序中使用的关注点,而不仅仅是在特定模块中使用。

数据记录是横切关注点的一个很好的例子,因为无论它位于哪个模块中,记录都是有用和期望的。

40. Spring提供哪些事务管理类型?

声明式事务管理:此类型使用注释或XML配置来管理事务,以将事务管理与程序的业务代码分开。尽管易于维护,但这种样式的功能受到更多限制。

程序化交易管理:此类型使用专门制作的程序来管理交易。这些程序的自定义允许更灵活的管理,但是在过程中引入了更多的错误空间。

总结以及接下来要学习的内容

恭喜您完成了这40个Spring Framework面试问题。与任何面试一样,Spring面试的成功取决于您的准备,进行各种面试问题的练习,Spring项目的经验以及对行为面试技巧的熟悉。

即使您第一次没有收到报价,经验和曝光也可以帮助您在重新申请时脱颖而出。最重要的是要保持信心和信任,您应该得到这份工作!您可以探索一些将Spring知识付诸实践的项目:

  • Agile Express
  • Spring PetClinc
  • Tudu Lists
  • Spring Rich Client
  • Java Small Business Platform

祝你好运,学习愉快!


原文链接:http://codingdict.com