2019年Spring全家桶真题总结解析,会被问到的都在这里了!

Spring

一、什么是Spring框架?Spring框架有哪些主要模块? Spring框架是一个为Java应用程序的开发提供了综合、普遍的基础性支持的Java平台。前端

Spring帮助开发者解决了开发中基础性的问题,使得开发人员能够专一于应用程序的开发。java

Spring框架自己亦是按照设计模式精心打造,这使得咱们能够在开发环境中安心的集成Spring框架,没必要担忧Spring是如何在后台进行工做的。web

Spring框架至今已集成了20多个模块。这些模块主要被分以下图所示的核心容器、数据访问/集成,、Web、AOP(面向切面编程)、工具、消息和测试模块。spring

二、使用Spring框架能带来哪些好处? 下面列举了一些使用Spring框架带来的主要好处:数据库

  • Dependency Injection(DI方法使得构造器和JavaBean properties文件中的依赖关系一目了然。编程

  • 与EJB容器相比较,IoC容器更加趋向于轻量级。这样一来IoC容器在有限的内存和CPU资源的状况下进行应用程序的开发和发布就变得十分有利。json

  • Spring并无闭门造车,Spring利用了已有的技术好比ORM框架、logging框架、J2EE、Quartz和JDK Timer,以及其余视图技术。后端

  • Spring框架是按照模块的形式来组织的。由包和类的编号就能够看出其所属的模块,开发者仅仅须要选用他们须要的模块便可。设计模式

  • 要测试一项用Spring开发的应用程序十分简单,由于测试相关的环境代码都已经囊括在框架中了。更加简单的是,利用JavaBean形式的POJO类,能够很方便的利用依赖注入来写入测试数据。tomcat

  • Spring的Web框架亦是一个精心设计的Web MVC框架,为开发者们在web框架的选择上提供了一个除了主流框架好比Struts、过分设计的、不流行web框架的之外的有力选项。

  • Spring提供了一个便捷的事务管理接口,适用于小型的本地事物处理(好比在单DB的环境下)和复杂的共同事物处理(好比利用JTA的复杂DB环境)。

三、什么是控制反转(IOC)?什么是依赖注入? 控制反转是应用于软件工程领域中的,在运行时被装配器对象来绑定耦合对象的一种编程技巧,对象之间耦合关系在编译时一般是未知的。在传统的编程方式中,业 务逻辑的流程是由应用程序中的早已被设定好关联关系的对象来决定的。在使用控制反转的状况下,业务逻辑的流程是由对象关系图来决定的,该对象关系图由装配 器负责实例化,这种实现方式还能够将对象之间的关联关系的定义抽象化。而绑定的过程是经过“依赖注入”实现的。

控制反转是一种以给予应用程序中目标组件更多控制为目的设计范式,并在咱们的实际工做中起到了有效的做用。

依赖注入是在编译阶段还没有知所需的功能是来自哪一个的类的状况下,将其余对象所依赖的功能对象实例化的模式。这就须要一种机制用来激活相应的组件以提供特定的功能,因此依赖注入是控制反转的基础。不然若是在组件不受框架控制的状况下,框架又怎么知道要建立哪一个组件?

在Java中依然注入有如下三种实现方式:

  1. 构造器注入
  2. Setter方法注入
  3. 接口注入

四、请解释下Spring框架中的IoC? Spring中的org.springframework.beans 包和org.springframework.context包构成了Spring框架IoC容器的基础。

BeanFactory 接口提供了一个先进的配置机制,使得任何类型的对象的配置成为可能。ApplicationContex接口对BeanFactory(是一个子接口)进行了扩展,在BeanFactory的基础上添加了其余功能,好比与Spring的AOP更容易集成,也提供了处理message resource的机制(用于国际化)、事件传播以及应用层的特别配置,好比针对Web应用的WebApplicationContext。

org.springframework.beans.factory.BeanFactory 是Spring IoC容器的具体实现,用来包装和管理前面提到的各类bean。BeanFactory接口是Spring IoC 容器的核心接口。

IOC:把对象的建立、初始化、销毁交给spring来管理,而不是由开发者控制,实现控制反转。

五、BeanFactory和ApplicationContext有什么区别? BeanFactory 能够理解为含有bean集合的工厂类。BeanFactory 包含了种bean的定义,以便在接收到客户端请求时将对应的bean实例化。

BeanFactory还能在实例化对象的时生成协做类之间的关系。此举将bean自身与bean客户端的配置中解放出来。BeanFactory还包含 了bean生命周期的控制,调用客户端的初始化方法(initialization methods)和销毁方法(destruction methods)。

从表面上看,application context如同bean factory同样具备bean定义、bean关联关系的设置,根据请求分发bean的功能。但applicationcontext在此基础上还提供了其余的功能。

  1. 提供了支持国际化的文本消息

2. 统一的资源文件读取方式

3. 已在监听器中注册的bean的事件

如下是三种较常见的 ApplicationContext 实现方式:

一、ClassPathXmlApplicationContext:从classpath的XML配置文件中读取上下文,并生成上下文定义。应用程序上下文从程序环境变量中

ApplicationContext context = new 
ClassPathXmlApplicationContext(“bean.xml”);    
复制代码

二、FileSystemXmlApplicationContext :由文件系统中的XML配置文件读取上下文。

ApplicationContext context = new 
FileSystemXmlApplicationContext(“bean.xml”);
复制代码

三、XmlWebApplicationContext:由Web应用的XML文件读取上下文。

四、AnnotationConfigApplicationContext(基于Java配置启动容器)

六、Spring有几种配置方式?  将Spring配置到应用开发中有如下三种方式:

  1. 基于XML的配置
  2. 基于注解的配置
  3. 基于Java的配置

七、如何用基于XML配置的方式配置Spring? 在Spring框架中,依赖和服务须要在专门的配置文件来实现,我经常使用的XML格式的配置文件。这些配置文件的格式一般用开头,而后一系列的bean定义和专门的应用配置选项组成。

SpringXML配置的主要目的时候是使全部的Spring组件均可以用xml文件的形式来进行配置。这意味着不会出现其余的Spring配置类型(好比声明的方式或基于Java Class的配置方式)

Spring的XML配置方式是使用被Spring命名空间的所支持的一系列的XML标签来实现的。Spring有如下主要的命名空间:context、beans、jdbc、tx、aop、mvc和aso。 如:

<beans>    
    <!-- JSON Support -->    
    <bean name="viewResolver" class="org.springframework.web.servlet.view.BeanNameViewResolver"/>    
    <bean name="jsonTemplate" class="org.springframework.web.servlet.view.json.MappingJackson2JsonView"/>    
    <bean id="restTemplate" class="org.springframework.web.client.RestTemplate"/>    
</beans> 
复制代码

下面这个web.xml仅仅配置了DispatcherServlet,这件最简单的配置便能知足应用程序配置运行时组件的需求。

<web-app>    
    <display-name>Archetype Created Web Application</display-name>    
    <servlet>    
        <servlet-name>spring</servlet-name>    
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>    
        <load-on-startup>1</load-on-startup>    
    </servlet>    
    <servlet-mapping>    
        <servlet-name>spring</servlet-name>    
        <url-pattern>/</url-pattern>    
    </servlet-mapping>    
</web-app>  
复制代码

八、如何用基于Java配置的方式配置Spring?  Spring对Java配置的支持是由@Configuration注解和@Bean注解来实现的。由@Bean注解的方法将会实例化、配置和初始化一个 新对象,这个对象将由Spring的IoC容器来管理。@Bean声明所起到的做用与 元素相似。被 @Configuration所注解的类则表示这个类的主要目的是做为bean定义的资源。被@Configuration声明的类能够经过在同一个类的 内部调用@bean方法来设置嵌入bean的依赖关系。 最简单的@Configuration 声明类请参考下面的代码:

@Configuration    
public class AppConfig{    
    @Bean    
    public MyService myService() {    
        return new MyServiceImpl();    
    }    
}  
复制代码

对于上面的@Beans配置文件相同的XML配置文件以下:

<beans>    
    <bean id="myService" class="com.somnus.services.MyServiceImpl"/>    
</beans>
复制代码

上述配置方式的实例化方式以下:利用AnnotationConfigApplicationContext 类进行实例化

public static void main(String[] args) {    
    ApplicationContext ctx = new AnnotationConfigApplicationContext(AppConfig.class);    
    MyService myService = ctx.getBean(MyService.class);    
    myService.doStuff();    
} 
 
要使用组件组建扫描,仅需用@Configuration进行注解便可:
@Configuration    
@ComponentScan(basePackages = "com.somnus")    
public class AppConfig  {    
    ...    
}  
复制代码

在上面的例子中,com.acme包首先会被扫到,而后再容器内查找被@Component 声明的类,找到后将这些类按照Sring bean定义进行注册。

若是你要在你的web应用开发中选用上述的配置的方式的话,须要用AnnotationConfigWebApplicationContext 类来读 取配置文件,能够用来配置Spring的Servlet监听器ContextLoaderListener或者Spring MVC的DispatcherServlet。

<web-app>    
    <!-- Configure ContextLoaderListener to use AnnotationConfigWebApplicationContext    
        instead of the default XmlWebApplicationContext -->    
    <context-param>    
        <param-name>contextClass</param-name>    
        <param-value>    
            org.springframework.web.context.support.AnnotationConfigWebApplicationContext    
        </param-value>    
    </context-param>    
     
    <!-- Configuration locations must consist of one or more comma- or space-delimited    
        fully-qualified @Configuration classes. Fully-qualified packages may also be    
        specified for component-scanning -->    
    <context-param>    
        <param-name>contextConfigLocation</param-name>    
        <param-value>com.howtodoinjava.AppConfig</param-value>    
    </context-param>    
     
    <!-- Bootstrap the root application context as usual using ContextLoaderListener -->    
    <listener>    
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>    
    </listener>    
     
    <!-- Declare a Spring MVC DispatcherServlet as usual -->    
    <servlet>    
        <servlet-name>dispatcher</servlet-name>    
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>    
        <!-- Configure DispatcherServlet to use AnnotationConfigWebApplicationContext    
            instead of the default XmlWebApplicationContext -->    
        <init-param>    
            <param-name>contextClass</param-name>    
            <param-value>    
                org.springframework.web.context.support.AnnotationConfigWebApplicationContext    
            </param-value>    
        </init-param>    
        <!-- Again, config locations must consist of one or more comma- or space-delimited    
            and fully-qualified @Configuration classes -->    
        <init-param>    
            <param-name>contextConfigLocation</param-name>    
            <param-value>com.howtodoinjava.web.MvcConfig</param-value>    
        </init-param>    
    </servlet>    
     
    <!-- map all requests for /app/* to the dispatcher servlet -->    
    <servlet-mapping>    
        <servlet-name>dispatcher</servlet-name>    
        <url-pattern>/app/*</url-pattern>    
    </servlet-mapping>    
</web-app    
复制代码

九、怎样用注解的方式配置Spring?

十、请解释Spring Bean的生命周期?

十一、Spring Bean的做用域之间有什么区别?

十二、什么是Spring inner beans?

1三、Spring框架中的单例Beans是线程安全的么?

1四、请举例说明如何在Spring中注入一个Java Collection?

1五、如何向Spring Bean中注入一个Java.util.Properties?

1六、请解释Spring Bean的自动装配?

1七、请解释自动装配模式的区别?

1八、如何开启基于注解的自动装配?

1九、请举例解释@Required注解?

20、请举例解释@Autowired注解?

2一、请举例说明@Qualifier注解?

2二、构造方法注入和设值注入有什么区别?

2三、Spring框架中有哪些不一样类型的事件?

2四、FileSystemResource和ClassPathResource有何区别?

2五、Spring 框架中都用到了哪些设计模式?

Spring Cloud

一、什么是Spring Cloud? Spring cloud流应用程序启动器是基于Spring Boot的Spring集成应用程序,提供与外部系统的集成。 Spring cloud Task,一个生命周期短暂的微服务框架,用于快速构建执行有限数据处理的应用程序。

二、使用Spring Cloud有什么优点? 使用Spring Boot开发分布式微服务时,咱们面临如下问题

  • 与分布式系统相关的复杂性-这种开销包括网络问题,延迟开销,带宽问题,安全问题。
  • 服务发现-服务发现工具管理群集中的流程和服务如何查找和互相交谈。它涉及一个服务目录,在该目录中注册服务,而后可以查找并链接到该目录中的服务。
  • 冗余-分布式系统中的冗余问题。
  • 负载平衡 --负载平衡改善跨多个计算资源的工做负荷,诸如计算机,计算机集群,网络链路,中央处理单元,或磁盘驱动器的分布。
  • 性能-问题 因为各类运营开销致使的性能问题。
  • 部署复杂性-Devops技能的要求。

三、服务注册和发现是什么意思?Spring Cloud如何实现? 当咱们开始一个项目时,咱们一般在属性文件中进行全部的配置。随着愈来愈多的服务开发和部署,添加和修改这些属性变得更加复杂。有些服务可能会降低,而某些位置可能会发生变化。手动更改属性可能会产生问题。 Eureka服务注册和发现能够在这种状况下提供帮助。因为全部服务都在Eureka服务器上注册并经过调用Eureka服务器完成查找,所以无需处理服务地点的任何更改和处理。

四、负载平衡的意义什么? 在计算中,负载平衡能够改善跨计算机,计算机集群,网络连接,中央处理单元或磁盘驱动器等多种计算资源的工做负载分布。负载平衡旨在优化资源使用,最大化吞吐量,最小化响应时间并避免任何单一资源的过载。使用多个组件进行负载平衡而不是单个组件可能会经过冗余来提升可靠性和可用性。负载平衡一般涉及专用软件或硬件,例如多层交换机或域名系统服务器进程。

五、什么是Hystrix?它如何实现容错? Hystrix是一个延迟和容错库,旨在隔离远程系统,服务和第三方库的访问点,当出现故障是不可避免的故障时,中止级联故障并在复杂的分布式系统中实现弹性。

一般对于使用微服务架构开发的系统,涉及到许多微服务。这些微服务彼此协做。

思考如下微服务

假设若是上图中的微服务9失败了,那么使用传统方法咱们将传播一个异常。但这仍然会致使整个系统崩溃。

随着微服务数量的增长,这个问题变得更加复杂。微服务的数量能够高达1000.这是hystrix出现的地方 咱们将使用Hystrix在这种状况下的Fallback方法功能。咱们有两个服务employee-consumer使用由employee-consumer公开的服务。

简化图以下所示

如今假设因为某种缘由,employee-producer公开的服务会抛出异常。咱们在这种状况下使用Hystrix定义了一个回退方法。这种后备方法应该具备与公开服务相同的返回类型。若是暴露服务中出现异常,则回退方法将返回一些值。

六、什么是Hystrix断路器?咱们须要它吗?

七、什么是Netflix Feign?它的优势是什么?

八、什么是Spring Cloud Bus?咱们须要它吗?

SpringMVC

一、什么是SpringMvc? SpringMvc是spring的一个模块,基于MVC的一个框架,无需中间整合层来整合。

二、Spring MVC的优势: 1)它是基于组件技术的.所有的应用对象,不管控制器和视图,仍是业务对象之类的都是 java组件.而且和Spring提供的其余基础结构紧密集成.

2)不依赖于Servlet API(目标虽是如此,可是在实现的时候确实是依赖于Servlet的)

3)能够任意使用各类视图技术,而不只仅局限于JSP

4)支持各类请求资源的映射策略

5)它应是易于扩展的

三、SpringMVC工做原理?  1)客户端发送请求到DispatcherServlet

2)DispatcherServlet查询handlerMapping找处处理请求的Controller

3)Controller调用业务逻辑后,返回ModelAndView

4)DispatcherServlet查询ModelAndView,找到指定视图

5)视图将结果返回到客户端

四、SpringMVC流程?  1)用户发送请求至前端控制器DispatcherServlet。

2)DispatcherServlet收到请求调用HandlerMapping处理器映射器。

3)处理器映射器找到具体的处理器(能够根据xml配置、注解进行查找),生成处理器对象及处理器拦截器(若是有则生成)一并返回给DispatcherServlet。

4)DispatcherServlet调用HandlerAdapter处理器适配器。

5)HandlerAdapter通过适配调用具体的处理器(Controller,也叫后端控制器)。

6)Controller执行完成返回ModelAndView。

7)HandlerAdapter将controller执行结果ModelAndView返回给DispatcherServlet。

8)DispatcherServlet将ModelAndView传给ViewReslover视图解析器。

9)ViewReslover解析后返回具体View。

10)DispatcherServlet根据View进行渲染视图(即将模型数据填充至视图中)。

11)DispatcherServlet响应用户。

五、SpringMvc的控制器是否是单例模式,若是是,有什么问题,怎么解决? 是单例模式,因此在多线程访问的时候有线程安全问题,不要用同步,会影响性能的,解决方案是在控制器里面不能写字段。

六、若是你也用过struts2.简单介绍下springMVC和struts2的区别有哪些? 1)springmvc的入口是一个servlet即前端控制器,而struts2入口是一个filter过虑器。

2)springmvc是基于方法开发(一个url对应一个方法),请求参数传递到方法的形参,能够设计为单例或多例(建议单例),struts2是基于类开发,传递参数是经过类的属性,只能设计为多例。

3)Struts采用值栈存储请求和响应的数据,经过OGNL存取数据,springmvc经过参数解析器是将request请求内容解析,并给方法形参赋值,将数据和视图封装成ModelAndView对象,最后又将ModelAndView中的模型数据经过reques域传输到页面。Jsp视图解析器默认使用jstl。

七、SpingMvc中的控制器的注解通常用那个,有没有别的注解能够替代? 通常用@Conntroller注解,表示是表现层,不能用用别的注解代替。

八、 @RequestMapping注解用在类上面有什么做用? 是一个用来处理请求地址映射的注解,可用于类或方法上。用于类上,表示类中的全部响应请求的方法都是以该地址做为父路径。

九、怎么样把某个请求映射到特定的方法上面? 直接在方法上面加上注解@RequestMapping,而且在这个注解里面写上要拦截的路径

十、若是在拦截请求中,我想拦截get方式提交的方法,怎么配置? 能够在@RequestMapping注解里面加上method=RequestMethod.GET

十一、怎么样在方法里面获得Request,或者Session?

十二、我想在拦截的方法里面获得从前台传入的参数,怎么获得?

1三、若是前台有不少个参数传入,而且这些参数都是一个对象的,那么怎么样快速获得这个对象?

1四、SpringMvc中函数的返回值是什么?

1五、SpringMVC怎么样设定重定向和转发的?

1六、SpringMvc用什么对象从后台向前台传递数据的?

1七、SpringMvc中有个类把视图和数据都合并的一块儿的,叫什么?

1八、怎么样把ModelMap里面的数据放入Session里面?

1九、SpringMvc怎么和AJAX相互调用的?

20、当一个方法向AJAX返回特殊对象,譬如Object,List等,须要作什么处理?

2一、SpringMvc里面拦截器是怎么写的

2二、讲下SpringMvc的执行流程

Spring Boot

一、什么是Spring Boot? 多年来,随着新功能的增长,spring变得愈来愈复杂。只需访问https://spring.io/projects页面,咱们就会看到能够在咱们的应用程序中使用的全部Spring项目的不一样功能。若是必须启动一个新的Spring项目,咱们必须添加构建路径或添加Maven依赖关系,配置应用程序服务器,添加spring配置。所以,开始一个新的spring项目须要不少努力,由于咱们如今必须从头开始作全部事情。

Spring Boot是解决这个问题的方法。Spring Boot已经创建在现有spring框架之上。使用spring启动,咱们避免了以前咱们必须作的全部样板代码和配置。所以,Spring Boot能够帮助咱们以最少的工做量,更加健壮地使用现有的Spring功能。

二、Spring Boot有哪些优势?

  • 减小开发,测试时间和努力。
  • 使用JavaConfig有助于避免使用XML。
  • 避免大量的Maven导入和各类版本冲突。
  • 提供意见发展方法。
  • 经过提供默认值快速开始开发。
  • 没有单独的Web服务器须要。这意味着你再也不须要启动Tomcat,Glassfish或其余任何东西。
  • 须要更少的配置 由于没有web.xml文件。只需添加用@ Configuration注释的类,而后添加用@Bean注释的方法,Spring将自动加载对象并像之前同样对其进行管理。您甚至能够将@Autowired添加到bean方法中,以使Spring自动装入须要的依赖关系中。
  • 基于环境的配置 使用这些属性,您能够将您正在使用的环境传递到应用程序:-Dspring.profiles.active = {enviornment}。在加载主应用程序属性文件后,Spring将在(application{environment} .properties)中加载后续的应用程序属性文件。

三、什么是JavaConfig? Spring JavaConfig是Spring社区的产品,它提供了配置Spring IoC容器的纯Java方法。所以它有助于避免使用XML配置。使用JavaConfig的优势在于:

面向对象的配置。因为配置被定义为JavaConfig中的类,所以用户能够充分利用Java中的面向对象功能。一个配置类能够继承另外一个,重写它的@Bean方法等。

减小或消除XML配置。基于依赖注入原则的外化配置的好处已被证实。可是,许多开发人员不但愿在XML和Java之间来回切换。JavaConfig为开发人员提供了一种纯Java方法来配置与XML配置概念类似的Spring容器。从技术角度来说,只使用JavaConfig配置类来配置容器是可行的,但实际上不少人认为将JavaConfig与XML混合匹配是理想的。

类型安全和重构友好。JavaConfig提供了一种类型安全的方法来配置Spring容器。因为Java 5.0对泛型的支持,如今能够按类型而不是按名称检索bean,不须要任何强制转换或基于字符串的查找。

四、如何从新加载Spring Boot上的更改,而无需从新启动服务器? 这可使用DEV工具来实现。经过这种依赖关系,您能够节省任何更改,嵌入式tomcat将从新启动。Spring Boot有一个开发工具(DevTools)模块,它有助于提升开发人员的生产力。Java开发人员面临的一个主要挑战是将文件更改自动部署到服务器并自动重启服务器。开发人员能够从新加载Spring Boot上的更改,而无需从新启动服务器。这将消除每次手动部署更改的须要。Spring Boot在发布它的第一个版本时没有这个功能。这是开发人员最须要的功能。DevTools模块彻底知足开发人员的需求。该模块将在生产环境中被禁用。它还提供H2数据库控制台以更好地测试应用程序。

五、Spring Boot中的监视器是什么? Spring boot actuator是spring启动框架中的重要功能之一。Spring boot监视器可帮助您访问生产环境中正在运行的应用程序的当前状态。有几个指标必须在生产环境中进行检查和监控。即便一些外部应用程序可能正在使用这些服务来向相关人员触发警报消息。监视器模块公开了一组可直接做为HTTP URL访问的REST端点来检查状态。

六、如何在Spring Boot中禁用Actuator端点安全性? 默认状况下,全部敏感的HTTP端点都是安全的,只有具备ACTUATOR角色的用户才能访问它们。安全性是使用标准的HttpServletRequest.isUserInRole方法实施的。 咱们可使用:management.security.enabled = false 来禁用安全性。只有在执行机构端点在防火墙后访问时,才建议禁用安全性。

七、如何在自定义端口上运行Spring Boot应用程序? 为了在自定义端口上运行Spring Boot应用程序,您能够在application.properties中指定端口。

八、什么是YAML? YAML是一种人类可读的数据序列化语言。它一般用于配置文件。

与属性文件相比,若是咱们想要在配置文件中添加复杂的属性,YAML文件就更加结构化,并且更少混淆。能够看出YAML具备分层配置数据。

九、如何实现Spring Boot应用程序的安全性? 为了实现Spring Boot的安全性,咱们使用 spring-boot-starter-security依赖项,而且必须添加安全配置。它只须要不多的代码。配置类将必须扩展WebSecurityConfigurerAdapter并覆盖其方法。

十、如何集成Spring Boot和ActiveMQ? 对于集成Spring Boot和ActiveMQ,咱们使用

spring-boot-starter-activemq 依赖关系。 它只须要不多的配置,而且不须要样板代码。

十一、如何使用Spring Boot实现分页和排序?

十二、什么是Swagger?你用Spring Boot实现了它吗?

1三、什么是Spring Profiles?

1四、什么是Spring Batch?

1五、什么是FreeMarker模板?

1六、如何使用Spring Boot实现异常处理?

1七、您使用了哪些starter maven依赖项?

1八、什么是CSRF攻击?

1九、什么是WebSockets?

20、什么是AOP?

2一、什么是Apache Kafka?

2二、咱们如何监视全部Spring Boot微服务?

相关文章
相关标签/搜索