全网最全spring全家桶面试题分享,吃透直接拿下大厂offer【附赠16888的学习视频】

目录

 

前言

一、微服务 面试题

1.什么是Spring Cloud?

2.什么是Spring Boot?

3.如何覆盖Spring Boot项目的默认属性?

4.Actuator在Spring Boot中的作用

5.如何在Spring Boot应用程序中实现Spring安全性?

6.Spring Boot支持哪些嵌入式容器?

7.微服务的端到端测试意味着什么?

8.什么是Semantic监控?

9.如何设置服务发现?

10.为什么要选择微服务架构?

二、Spring cloud 面试题

1. 什么是 spring cloud?

2. spring cloud 断路器的作用是什么?

3. spring cloud 的核心组件有哪些?

4. SpringCloud和Dubbo 

5. SpringBoot和SpringCloud

6. 微服务之间是如何独立通讯的

7. 负载均衡的意义是什么?

8. springcloud如何实现服务的注册?

9. 什么是服务熔断?什么是服务降级

10. 微服务的优缺点分别是什么?说下你在项目开发中碰到的坑

三、Spring boot 面试题

1、什么是 Spring Boot?

2、Spring Boot 有哪些优点?

3、Spring 和 SpringBoot 有什么不同?

4、如何重新加载 Spring Boot 上的更改,而无需重新启动服务器?

5、Spring Boot 中的监视器是什么?

6、如何在 Spring Boot 中禁用 Actuator 端点安全性?

7、如何在自定义端口上运行 Spring Boot 应用程序?

8、怎么使用 Maven 来构建一个 SpringBoot 程序?

9、如何实现 Spring Boot 应用程序的安全性?

10、如何集成 Spring Boot 和 ActiveMQ?

四、Spring MVC 面试题

1 什么是 Spring MVC?

2 什么是 MVC 模型?

3 Spring MVC 的优点?

4 Spring MVC 和 struts2 的区别?

5 Spring MVC 的处理流程?

6 Spring MVC 十一个处理流程的详细解释?

7 Spring MVC 的组件?

8 Spring MVC 的重定向和转发?

9 Spring MVC 的异常处理 ?

10 Spring MVC 的控制器是不是单例模式?存在什么问题?怎么解决?

五、Spring AOP面试题

1. 说出Spring的通知类型有哪些?

2. 谈谈目标对象实现接口与目标对象不实现接口有什么区别?

3. 请描述JDK动态代理和CGLI代理的区别?

4. 简述ProxyFactoryBean的作用是什么?

5. 叙述Spring中的自动代理的原理?

5. 写出创建代理对象需指定的三要素是什么?

6. 写出代理的两种方式分别是什么?

7. 请简述:什么是AOP?

8. 简述AOP核心?

9. 请叙述AOP事务的含义?

六、Spring IOC

1. 下面关于spring描述错误的是:( )A Spring支持可插入的事务管理器,使事务划分更轻松,同时无需处理底层的问题。B Spring事务管理的通用抽象层还包括JTA策略和一个JDBC DataSource。C 与JTA或EJB CMT一样,Spring的事务支持依赖于Java EE环境。D Spring事务语义通过AOP应用于 POJO,通过XML或Java SE 5注释进行配置。

2. 下面选项哪个不是Spring中接口注入的方式?( )A 接口注入  B 构造子注入  C 设值注入  D 指针注入

3. 下列关于Spring特性中IoC描述错误的是:( )A IoC就是指程序之间的关系由程序代码直接操控。B 所谓“控制反转”,是指控制权由应用代码转到外部容器,控制权的转移,C IoC将控制创建的职责搬进了框架中;并把它从应用代码脱离开来D 当使用Spring的IoC容器时只需指出组件需要的对象,在运行时Spring的IoC容器会根据XML配置数据提供给它。

简答题:1. 请简述Spring的工作机制?

2. 请回答你为什么用Spring的工作机制?

3. 请简述Spring是什么?

4. 简述spring的组成?

5.简述Spring容器提供了哪些功能?

6. 在Spring中,bean的注入有几种方式,各是什么?

7. 请简述:Spring bean的作用域?

8. 请叙述设值注入的优点?

9. 请叙述构造注入的优点?

10. 说出bean工厂创建bean的三种方式?a11. 请写出bean的生命周期的方法?

12. 请简述你对IOC的理解?

13. 请回答:IoC最大的好处是什么?

14. 简述IoC的类型?

15. Spring中依赖注入与传统编程之间的差别是什么?

来自小编的福利


前言

关于Spring的发展起源要回溯到2002年,当时正是Java EE和EJB大行其道的时候,很多知名公司都是采用此技术方案进行项目开发。这时候有一个美国的小伙子认为 EJB 太过臃肿,并不是所有的项目都需要使用 EJB 这种大型框架,应该会有一种更好的方案来解决这个问题。

  他为了证明自己的想法是正确的,在2001年10月写了一本书《Expert One-on-One J2EE》,介绍了当时Java企业应用程序开发的情况,并指出了 Java EE 和 EJB 组件框架中存在的一些主要缺陷。在这本书中,他提出了一个基于普通 Java 类和依赖注入的更简单的解决方案。在书中,他展示了如何在不使用 EJB 的情况下构建高质量、可扩展的在线座位预留系统。为了构建应用程序,他编写了超过 30,000 行的基础结构代码,项目中的根包命名为 com.interface21,所以人们最初称这套开源框架为 interface21,这就是 Spring 的前身。

  这个小伙子是谁呢?他就是大名鼎鼎的 Rod Johnson(下图),Rod Johnson 在悉尼大学不仅获得了计算机学位,同时还获得了音乐学位,更令人吃惊的是在回到软件开发领域之前,他还获得了音乐学的博士学位,反正就是牛逼哄哄的人物。但是现在 Rod Johnson 已经离开了 Spring(2012 年 Rod Johnson 宣布他将要离开 Spring Source ),成为了一个天使投资人,同时也是多个公司的董事,早已走上人生巅峰。

  

  在这本书发布后,一对一的 J2EE 设计和开发一炮而红。这本书免费提供的大部分基础架构代码都是高度可重用的。2003 年 Rod Johnson 和同伴在此框架的基础上开发了一个全新的框架命名为 Spring,据 Rod Johnson 介绍 Spring 是传统 J2EE 新的开始,随后 Spring 发展进入快车道。

以下是Spring一些常见的面试题总结出来分享给到大家,当然在这里小编也祝愿各位Java开发程序员面试旗开得胜!

为大家分享一波大厂真题的面试资料,小编以及整理成文档,以及Java核心知识点整理的文档,需要 点我 免费领取 哦。

一、微服务 面试题

1.什么是Spring Cloud?

在微服务中,SpringCloud是一个提供与外部系统集成的系统。它是一个敏捷的框架,可以短平快构建应用程序。与有限数量的数据处理相关联,它在微服务体系结构中起着非常重要的作用。

以下为 Spring Cloud 的核心特性:

版本化/分布式配置。服务注册和发现。服务和服务之间的调用。路由。断路器和负载平衡。分布式消息传递。

2.什么是Spring Boot?

Spring boot是微服务面试问题的主要话题。

随着新功能的加入,Spring变得越来越复杂。无论何时启动新项目,都必须添加新的构建路径或Maven依赖项。简而言之,你需要从头开始做每件事。Spring Boot是一种帮助您避免所有代码配置的解决方案。

3.如何覆盖Spring Boot项目的默认属性?

这可以通过在application.properties文件中指定属性来完成。

例如,在Spring MVC应用程序中,您必须指定后缀和前缀。这可以通过在application.properties文件中输入下面提到的属性来完成。

对于后缀 - spring.mvc.view.suffix: .jsp 对于前缀 - spring.mvc.view.prefix: /WEB-INF/

4.Actuator在Spring Boot中的作用

它是最重要的功能之一,可帮助您访问在生产环境中运行的应用程序的当前状态。有多个指标可用于检查当前状态。它们还为RESTful Web服务提供端点,可以简单地用于检查不同的度量标准。

5.如何在Spring Boot应用程序中实现Spring安全性?

实施需要最少的配置。您需要做的就是spring-boot-starter-security在pom.xml文件中添加starter。您还需要创建一个Spring配置类,它将覆盖所需的方法,同时扩展 WebSecurityConfigurerAdapter 应用程序中的安全性。这是一些示例代码:

package com.gkatzioura.security.securityendpoints.config;import org.springframework.context.annotation.Configuration;import org.springframework.security.config.annotation.web.builders.HttpSecurity;import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;@Configurationpublic class SecurityConfig extends WebSecurityConfigurerAdapter {@Overrideprotected void configure(HttpSecurity http) throws Exception {http.authorizeRequests().antMatchers("/welcome").permitAll().anyRequest().authenticated().and().formLogin().permitAll().and().logout().permitAll();}}

6.Spring Boot支持哪些嵌入式容器?

无论何时创建Java应用程序,都可以通过两种方法进行部署:

使用外部的应用程序容器。

将容器嵌入jar文件中。

Spring Boot包含Jetty,Tomcat和Undertow服务器,所有服务器都是嵌入式的。

Jetty - 用于大量项目,Eclipse Jetty可以嵌入到框架,应用程序服务器,工具和集群中。

Tomcat - Apache Tomcat是一个开源JavaServer Pages实现,可以很好地与嵌入式系统配合使用。

Undertow - 一个灵活而突出的Web服务器,它使用小型单一处理程序来开发Web服务器。

7.微服务的端到端测试意味着什么?

端到端测试 验证工作流中的所有流程,以检查一切是否按预期工作。它还确保系统以统一的方式工作,从而满足业务需求。

8.什么是Semantic监控?

它结合了对整个应用程序的监控以及自动化测试。语义监控的主要好处是找出对您的业务更有利可图的因素。

从业务角度来看,语义监控以及服务层监控可以监控微服务。一旦检测到问题,它们就可以实现更快的隔离和 错误分类,从而减少修复所需的主要时间。它对服务层和事务层进行分类,以确定受可用性或性能不佳影响的事务。

9.如何设置服务发现?

有多种方法可以设置服务发现。我将选择我认为效率最高的那个,Netflix的Eureka。这是一个简单的程序,不会对应用程序造成太大影响。此外,它支持多种类型的Web应用程序。

Eureka配置包括两个步骤 - 客户端配置和服务器配置。

使用属性文件可以轻松完成客户端配置。在clas spath中,Eureka搜索一个eureka-client.properties文件。它还搜索由特定于环境的属性文件中的环境引起的覆盖。

对于服务器配置,您必须首先配置客户端。完成后,服务器启动一个客户端,该客户端用于查找其他服务器。。默认情况下,Eureka服务器使用客户端配置来查找对等服务器。

10.为什么要选择微服务架构?

这是一个非常常见的微服务面试问题,你应该准备好了!微服务架构提供了许多优点。这里有几个:

微服务可以轻松适应其他框架或技术。单个进程的失败不会影响整个系统。为大企业和小型团队提供支持。可以在相对较短的时间内独立部署。

以上微服务面试题以及整理成文档,需要 点我 免费领取 哦。

二、Spring cloud 面试题

1. 什么是 spring cloud?

spring cloud 是一系列框架的有序集合。它利用 spring boot 的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务发现注册、配置中心、消息总线、负载均衡、断路器、数据监控等,都可以用 spring boot 的开发风格做到一键启动和部署。

2. spring cloud 断路器的作用是什么?

在分布式架构中,断路器模式的作用也是类似的,当某个服务单元发生故障(类似用电器发生短路)之后,通过断路器的故障监控(类似熔断保险丝),向调用方返回一个错误响应,而不是长时间的等待。这样就不会使得线程因调用故障服务被长时间占用不释放,避免了故障在分布式系统中的蔓延。

3. spring cloud 的核心组件有哪些?

  • Eureka:服务注册于发现。

  • Feign:基于动态代理机制,根据注解和选择的机器,拼接请求 url 地址,发起请求。

  • Ribbon:实现负载均衡,从一个服务的多台机器中选择一台。

  • Hystrix:提供线程池,不同的服务走不同的线程池,实现了不同服务调用的隔离,避免了服务雪崩的问题。

  • Zuul:网关管理,由 Zuul 网关转发请求给对应的服务。

4. SpringCloud和Dubbo 

SpringCloud和Dubbo都是现在主流的微服务架构
SpringCloud是Apache旗下的Spring体系下的微服务解决方案
Dubbo是阿里系的分布式服务治理框架
从技术维度上,其实SpringCloud远远的超过Dubbo,Dubbo本身只是实现了服务治理,而SpringCloud现在以及有21个子项目以后还会更多
所以其实很多人都会说Dubbo和SpringCloud是不公平的
但是由于RPC以及注册中心元数据等原因,在技术选型的时候我们只能二者选其一,所以我们常常为用他俩来对比
服务的调用方式Dubbo使用的是RPC远程调用,而SpringCloud使用的是 Rest API,其实更符合微服务官方的定义
服务的注册中心来看,Dubbo使用了第三方的ZooKeeper作为其底层的注册中心,实现服务的注册和发现,SpringCloud使用Spring Cloud Netflix Eureka实现注册中心,当然SpringCloud也可以使用ZooKeeper实现,但一般我们不会这样做
服务网关,Dubbo并没有本身的实现,只能通过其他第三方技术的整合,而SpringCloud有Zuul路由网关,作为路由服务器,进行消费者的请求分发,SpringCloud还支持断路器,与git完美集成分布式配置文件支持版本控制,事务总线实现配置文件的更新与服务自动装配等等一系列的微服务架构要素

从技术选型上讲~

目前国内的分布式系统选型主要还是Dubbo毕竟国产,而且国内工程师的技术熟练程度高,并且Dubbo在其他维度上的缺陷可以由其他第三方框架进行集成进行弥补
而SpringCloud目前是国外比较流行,当然我觉得国内的市场也会慢慢的偏向SpringCloud,就连刘军作为Dubbo重启的负责人也发表过观点,Dubbo的发展方向是积极适应SpringCloud生态,并不是起冲突

Rest和RPC对比

其实如果仔细阅读过微服务提出者马丁福勒的论文的话可以发现其定义的服务间通信机制就是Http Rest
RPC最主要的缺陷就是服务提供方和调用方式之间依赖太强,我们需要为每一个微服务进行接口的定义,并通过持续继承发布,需要严格的版本控制才不会出现服务提供和调用之间因为版本不同而产生的冲突
而REST是轻量级的接口,服务的提供和调用不存在代码之间的耦合,只是通过一个约定进行规范,但也有可能出现文档和接口不一致而导致的服务集成问题,但可以通过swagger工具整合,是代码和文档一体化解决,所以REST在分布式环境下比RPC更加灵活
这也是为什么当当网的DubboX在对Dubbo的增强中增加了对REST的支持的原因

文档质量和社区活跃度

SpringCloud社区活跃度远高于Dubbo,毕竟由于梁飞团队的原因导致Dubbo停止更新迭代五年,而中小型公司无法承担技术开发的成本导致Dubbo社区严重低落,而SpringCloud异军突起,迅速占领了微服务的市场,背靠Spring混的风生水起
Dubbo经过多年的积累文档相当成熟,对于微服务的架构体系各个公司也有稳定的现状

5. SpringBoot和SpringCloud

SpringBoot是Spring推出用于解决传统框架配置文件冗余,装配组件繁杂的基于Maven的解决方案,旨在快速搭建单个微服务
而SpringCloud专注于解决各个微服务之间的协调与配置,服务之间的通信,熔断,负载均衡等
技术维度并相同,并且SpringCloud是依赖于SpringBoot的,而SpringBoot并不是依赖与SpringCloud,甚至还可以和Dubbo进行优秀的整合开发

总结:

  • SpringBoot专注于快速方便的开发单个个体的微服务

  • SpringCloud是关注全局的微服务协调整理治理框架,整合并管理各个微服务,为各个微服务之间提供,配置管理,服务发现,断路器,路由,事件总线等集成服务

  • SpringBoot不依赖于SpringCloud,SpringCloud依赖于SpringBoot,属于依赖关系

  • SpringBoot专注于快速,方便的开发单个的微服务个体,SpringCloud关注全局的服务治理框架

6. 微服务之间是如何独立通讯的

1.远程过程调用(Remote Procedure Invocation):

       也就是我们常说的服务的注册与发现

       直接通过远程过程调用来访问别的service。

       优点:

       简单,常见,因为没有中间件代理,系统更简单

       缺点:

       只支持请求/响应的模式,不支持别的,比如通知、请求/异步响应、发布/订阅、发布/异步响应

       降低了可用性,因为客户端和服务端在请求过程中必须都是可用的

2.消息:

       使用异步消息来做服务间通信。服务间通过消息管道来交换消息,从而通信。

       优点:

       把客户端和服务端解耦,更松耦合

       提高可用性,因为消息中间件缓存了消息,直到消费者可以消费

       支持很多通信机制比如通知、请求/异步响应、发布/订阅、发布/异步响应

       缺点:

       消息中间件有额外的复杂

7. 负载均衡的意义是什么?

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

8. springcloud如何实现服务的注册?

1.服务发布时,指定对应的服务名,将服务注册到 注册中心(eureka zookeeper)
2.注册中心加@EnableEurekaServer,服务用@EnableDiscoveryClient,然后用ribbon或feign进行服务直接的调用发现。

9. 什么是服务熔断?什么是服务降级

在复杂的分布式系统中,微服务之间的相互调用,有可能出现各种各样的原因导致服务的阻塞,在高并发场景下,服务的阻塞意味着线程的阻塞,导致当前线程不可用,服务器的线程全部阻塞,导致服务器崩溃,由于服务之间的调用关系是同步的,会对整个微服务系统造成服务雪崩

为了解决某个微服务的调用响应时间过长或者不可用进而占用越来越多的系统资源引起雪崩效应就需要进行服务熔断和服务降级处理。

所谓的服务熔断指的是某个服务故障或异常一起类似显示世界中的“保险丝"当某个异常条件被触发就直接熔断整个服务,而不是一直等到此服务超时。

服务熔断就是相当于我们电闸的保险丝,一旦发生服务雪崩的,就会熔断整个服务,通过维护一个自己的线程池,当线程达到阈值的时候就启动服务降级,如果其他请求继续访问就直接返回fallback的默认值

10. 微服务的优缺点分别是什么?说下你在项目开发中碰到的坑

优点

  • 每一个服务足够内聚,代码容易理解

  • 开发效率提高,一个服务只做一件事

  • 微服务能够被小团队单独开发

  • 微服务是松耦合的,是有功能意义的服务

  • 可以用不同的语言开发,面向接口编程

  • 易于与第三方集成

  • 微服务只是业务逻辑的代码,不会和HTML,CSS或者其他界面组合

        开发中,两种开发模式
                 前后端分离
                 全栈工程师

  • 可以灵活搭配,连接公共库/连接独立库

缺点

  • 分布式系统的负责性

  • 多服务运维难度,随着服务的增加,运维的压力也在增大

  • 系统部署依赖

  • 服务间通信成本

  • 数据一致性

  • 系统集成测试

  • 性能监控

以上Spring cloud 面试题以及整理成文档,需要 点我 免费领取 哦。

三、Spring boot 面试题

1、什么是 Spring Boot?

多年来,随着新功能的增加,spring 变得越来越复杂。访问spring官网页面,我们就会看到可以在我们的应用程序中使用的所有 Spring 项目的不同功能。如果必须启动一个新的 Spring 项目,我们必须添加构建路径或添加 Maven 依赖关系,配置应用程序服务器,添加 spring 配置。因此,开始一个新的 spring 项目需要很多努力,因为我们现在必须从头开始做所有事情。

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

2、Spring Boot 有哪些优点?

Spring Boot 的优点有:

1、减少开发,测试时间和努力。

2、使用 JavaConfig 有助于避免使用 XML。

3、避免大量的 Maven 导入和各种版本冲突。

4、提供意见发展方法。

5、通过提供默认值快速开始开发。

6、没有单独的 Web 服务器需要。这意味着你不再需要启动 Tomcat,Glassfish或其他任何东西。

7、需要更少的配置 因为没有 web.xml 文件。只需添加用@ Configuration 注释的类,然后添加用@Bean 注释的方法,Spring 将自动加载对象并像以前一样对其进行管理。您甚至可以将@Autowired 添加到 bean 方法中,以使 Spring 自动装入需要的依赖关系中。

8、基于环境的配置 使用这些属性,您可以将您正在使用的环境传递到应用程序:-Dspring.profiles.active = {enviornment}。在加载主应用程序属性文件后,Spring 将在(application{environment} .properties)中加载后续的应用程序属性文件。

3、Spring 和 SpringBoot 有什么不同?

Spring 框架提供多种特性使得 web 应用开发变得更简便,包括依赖注入、数据绑定、切面编程、数据存取等等。

随着时间推移,Spring 生态变得越来越复杂了,并且应用程序所必须的配置文件也令人觉得可怕。这就是 Spirng Boot 派上用场的地方了 – 它使得 Spring 的配置变得更轻而易举。

实际上,Spring 是 unopinionated(予以配置项多,倾向性弱) 的,Spring Boot 在平台和库的做法中更 opinionated ,使得我们更容易上手。

这里有两条 SpringBoot 带来的好处:

  • 根据 classpath 中的 artifacts 的自动化配置应用程序
  • 提供非功能性特性例如安全和健康检查给到生产环境中的应用程序

4、如何重新加载 Spring Boot 上的更改,而无需重新启动服务器?

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

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<optional>true</optional>

5、Spring Boot 中的监视器是什么?

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

6、如何在 Spring Boot 中禁用 Actuator 端点安全性?

默认情况下,所有敏感的 HTTP 端点都是安全的,只有具有 ACTUATOR 角色的用户才能访问它们。安全性是使用标准的 HttpServletRequest.isUserInRole 方法实施的。 我们可以使用来禁用安全性。只有在执行机构端点在防火墙后访问时,才建议禁用安全性。

7、如何在自定义端口上运行 Spring Boot 应用程序?

为了在自定义端口上运行 Spring Boot 应用程序,您可以在application.properties 中指定端口。server.port = 8090

8、怎么使用 Maven 来构建一个 SpringBoot 程序?

就像引入其他库一样,我们可以在 Maven 工程中加入 SpringBoot 依赖。然而,最好是从 spring-boot-starter-parent 项目中继承以及声明依赖到 Spring Boot starters。这样做可以使我们的项目可以重用 SpringBoot 的默认配置。

继承 spring-boot-starter-parent 项目依赖很简单 – 我们只需要在 pom.xml 中定义一个 parent 节点:

1 <parent>
2     <groupId>org.springframework.boot</groupId>
3     <artifactId>spring-boot-starter-parent</artifactId>
4     <version>2.1.1.RELEASE</version>
5 </parent>

我们可以在 Maven central 中找到 spring-boot-starter-parent 的最新版本。

使用 starter 父项目依赖很方便,但并非总是可行。例如,如果我们公司都要求项目继承标准 POM,我们就不能依赖 SpringBoot starter 了。

这种情况,我们可以通过对 POM 元素的依赖管理来处理:

 1 <dependencyManagement>
 2     <dependencies>
 3         <dependency>
 4             <groupId>org.springframework.boot</groupId>
 5             <artifactId>spring-boot-dependencies</artifactId>
 6             <version>2.1.1.RELEASE</version>
 7             <type>pom</type>
 8             <scope>import</scope>
 9         </dependency>
10     </dependencies>
11 </dependencyManagement>

最后,我们可以添加 SpringBoot starter 中一些依赖,然后我们就可以开始了。

9、如何实现 Spring Boot 应用程序的安全性?

为了实现 Spring Boot 的安全性,我们使用 spring-boot-starter-security 依赖项,并且必须添加安全配置。它只需要很少的代码。配置类将必须扩展WebSecurityConfigurerAdapter 并覆盖其方法。

10、如何集成 Spring Boot 和 ActiveMQ?

对于集成 Spring Boot 和 ActiveMQ,我们使用依赖关系。 它只需要很少的配置,并且不需要样板代码。 

以上Spring boot 面试题以及整理成文档,需要 点我 免费领取 哦。 

四、Spring MVC 面试题

1 什么是 Spring MVC?

Spring MVC 是一个基于 Java 的实现了 MVC 设计模式的请求驱动类型的轻量级 Web 框架,通过把 Model,View,Controller 分离,将 web 层进行职责解耦,把复杂的 web 应用分成逻辑清晰的几部分,简化开发,减少出错,方便组内开发人员之间的配合

2 什么是 MVC 模型?

用户的请求会到达 Servlet,然后根据请求调用相应的 Java Bean,并把所有的显示结果交给 JSP 去完成,这样的模式我们就称为 MVC 模式。

M 代表 模型(Model):数据,dao,bean

V 代表 视图(View):网页,JSP,用来展示模型中的数据

C 代表 控制器(controller):把不同的数据(Model),显示在不同的视图(View)上,Servlet 扮演的就是这样的角色

3 Spring MVC 的优点?

可以支持各种视图技术,而不仅仅局限于 JSP

与 Spring 框架集成(如 IoC 容器、AOP 等)

清晰的角色分配:前端控制器(dispatcherServlet),请求到处理器映射(handlerMapping),处理器适配器(HandlerAdapter),视图解析器(ViewResolver)

支持各种请求资源的映射策略

4 Spring MVC 和 struts2 的区别?

springmvc 的入口是一个 servlet 即前端控制器(DispatchServlet),而 struts2 入口是一个 filter 过虑器

(StrutsPrepareAndExecuteFilter)

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

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

5 Spring MVC 的处理流程?

用户发送请求至前端控制器 DispatcherServlet

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

处理器映射器根据请求 url 找到具体的处理器,生成处理器对象及处理器拦截器(如果有则生成)一并返回给 DispatcherServlet

DispatcherServlet 通过 HandlerAdapter 处理器适配器调用处理器

执行处理器(Controller,也叫后端控制器)

Controller 执行完成返回 ModelAndView

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

DispatcherServlet 将 ModelAndView 传给 ViewReslover 视图解析器

ViewReslover 解析后返回具体 View

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

DispatcherServlet 响应用户

6 Spring MVC 十一个处理流程的详细解释?

浏览器发送请求,请求具体发到谁呢?先发到前端控制器,也就是说所有的请求都给发到前端控制器,前端控制器是所有请求的入口,但前端控制器不能处理业务请求,它只是一个请求的转发

谁来处理业务请求呢?Handler 处理器来真正处理业务请求,那么问题来了,前端控制器如何来找到这个 Handler 处理器呢?处理器映射器记录的就是请求的 url 和处理的方法之间的映射关系,这个映射关系是怎么建立起来的呢?就是通过 @RequestMapping 这个注解来建立起来的,这个映射关系就相当于一个 Map(key-value 这种形式),key 就是请求的 url,value 就是处理的 Handler。现在,前端控制器拿到这个请求之后,要找到对应的 Handler,怎么找呢?就要找处理器映射器,问它请求谁来处理?

处理器映射器会根据你请求的 url 来找对应的处理器,找不到就会报错,如果找到之后,这时,它就会返回一个处理器执行链,这个处理器执行链里面除了有 Handler 之外,还有拦截器(这儿我们可以开发自己的拦截器),然后返回给前端控制器

前端控制器依然不能处理这个业务请求,它这时做的还有另外一件事情,因为返回 Handler,它也不知道这个 Handler 是什么类型,因为在 springmvc 中 Handler 除了可以是注解形式的之外,其实还可以是非注解形式的(非注解形式我们一般不用),前端控制器并不知道这个 Handler 到底是什么类型的,那就没办法执行它,那总得找个东西执行,这时它就会把这个事交给另外一个组件来处理,这个组件就叫处理器适配器,这个处理器适配器就是来适配不同类型的 Handler。它就会根据你不同类型的 Handler 来选择不同类型的适配器来执行它

假如当前 Handler 是注解形式的,那么它就会选择注解形式的处理器适配器来执行这个 Handler。Handler 就执行了,也就是说我们 Controller 类中的那个方法就执行了,方法执行之后,里面的业务就处理了

业务处理之后,最后返回一个 ModelAndView。处理器适配器拿到这个结果是没有用的,它的作用就是执行这个 Handler,把这个 Handler 执行完之后,它的事就做完了

做完之后,拿到这个返回结果,那么它会原封不动地把这个返回结果扔给前端控制器,这时处理器适配器的事就做完了

前端控制器拿到这个 ModelAndView,它还是没有办法处理,它还是不能返回 html,这时它要找到相应的 jsp,因为 ModelAndView 即包含模型又包含视图,这个视图指定我们要用谁来渲染这个数据。我们要渲染数据,这时它就要找一个视图解析器来解析这个视图,由于这个视图也有很多种(我们最常见的视图是 jsp,除了 jsp,其实还有其他的,比如说还可以是报表,还可以是 pdf,还可以是 freemaker 等),它会找不同的视图解析器来处理。因为现在我们最常用的视图是 jsp,所以它就找到 jsp 对应的视图解析器

找到这个视图解析器,它来把这个视图解析,解析完了之后它会返回一个 View 对象

最后我们再调用这个视图解析器的渲染视图这个过程,渲染视图这个过程其实就是对于我们的 jsp 来说,就是把这个数据渲染成 html

最终渲染成 html 之后,就响应给用户

7 Spring MVC 的组件?

DispatcherServlet:前端控制器。用户请求到达前端控制器,它就相当于 mvc 模式中的 c,DispatcherServlet 是整个流程控制的中心,由它调用其它组件处理用户的请求,DispatcherServlet 的存在降低了组件之间的耦合性

HandlerMapping:处理器映射器。HandlerMapping 负责根据用户请求找到 Handler 即处理器,springmvc 提供了不同的映射器实现不同的映射方式,例如:配置文件方式,实现接口方式,注解方式等

Handler:处理器。Handler 是继 DispatcherServlet 前端控制器的后端控制器,在 DispatcherServlet 的控制下 Handler 对具体的用户请求进行处理。由于 Handler 涉及到具体的用户业务请求,所以一般情况需要程序员根据业务需求开发 Handler

HandlAdapter:处理器适配器。通过 HandlerAdapter 对处理器进行执行,这是适配器模式的应用,通过扩展适配器可以对更多类型的处理器进行执行

ViewResolver:视图解析器。ViewResolver 负责将处理结果生成 View 视图,ViewResolver 首先根据逻辑视图名解析成物理视图名即具体的页面地址,再生成 View 视图对象,最后对 View 进行渲染将处理结果通过页面展示给用户

View:视图。SpringMVC 框架提供了很多的 View 视图类型的支持,包括:jstlView、freemarkerView、pdfView 等。我们最常用的视图就是 jsp。一般情况下需要通过页面标签或页面模版技术将模型数据通过页面展示给用户,需要由程序员根据业务需求开发具体的页面

其实,在 SpringMVC 的各个组件中,处理器映射器、处理器适配器、视图解析器称为 springmvc 的三大组件。

8 Spring MVC 的重定向和转发?

转发:在返回值前面加 forward:

重定向:在返回值前面加 redirect:

9 Spring MVC 的异常处理 ?

系统的 dao、service、controller 出现异常都通过 throws Exception 向上抛出,最后由 Spring MVC 前端控制器交由异常处理器进行异常处理,Spring MVC 提供全局异常处理器(一个系统只有一个异常处理器)进行统一异常处理

10 Spring MVC 的控制器是不是单例模式?存在什么问题?怎么解决?

是单例模式。所以在多线程访问的时候有线程安全问题。不要用同步,会影响性能的,解决方案是在控制器里面不能写字段

以上Spring MVC 面试题以及整理成文档,需要 点我 免费领取 哦。 

五、Spring AOP面试题

1. 说出Spring的通知类型有哪些?

2. 谈谈目标对象实现接口与目标对象不实现接口有什么区别?

3. 请描述JDK动态代理和CGLI代理的区别?

4. 简述ProxyFactoryBean的作用是什么?

5. 叙述Spring中的自动代理的原理?

5. 写出创建代理对象需指定的三要素是什么?

6. 写出代理的两种方式分别是什么?

7. 请简述:什么是AOP?

8. 简述AOP核心?

9. 请叙述AOP事务的含义?

以上Spring AOP 面试题以及整理成文档,需要 点我 免费领取 哦。 

六、Spring IOC

1. 下面关于spring描述错误的是:( )
A Spring支持可插入的事务管理器,使事务划分更轻松,同时无需处理底层的问题。
B Spring事务管理的通用抽象层还包括JTA策略和一个JDBC DataSource。
C 与JTA或EJB CMT一样,Spring的事务支持依赖于Java EE环境。
D Spring事务语义通过AOP应用于 POJO,通过XML或Java SE 5注释进行配置。

2. 下面选项哪个不是Spring中接口注入的方式?( )
A 接口注入  
B 构造子注入  
C 设值注入  
D 指针注入

3. 下列关于Spring特性中IoC描述错误的是:( )
A IoC就是指程序之间的关系由程序代码直接操控。
B 所谓“控制反转”,是指控制权由应用代码转到外部容器,控制权的转移,
C IoC将控制创建的职责搬进了框架中;并把它从应用代码脱离开来
D 当使用Spring的IoC容器时只需指出组件需要的对象,在运行时Spring的IoC容器会根据XML配置数据提供给它。

简答题:
1. 请简述Spring的工作机制?

2. 请回答你为什么用Spring的工作机制?

3. 请简述Spring是什么?

4. 简述spring的组成?

5.简述Spring容器提供了哪些功能?

6. 在Spring中,bean的注入有几种方式,各是什么?

7. 请简述:Spring bean的作用域?

8. 请叙述设值注入的优点?

9. 请叙述构造注入的优点?

10. 说出bean工厂创建bean的三种方式?
a
11. 请写出bean的生命周期的方法?

12. 请简述你对IOC的理解?

13. 请回答:IoC最大的好处是什么?

14. 简述IoC的类型?

15. Spring中依赖注入与传统编程之间的差别是什么?

以上Spring IOC 面试题以及整理成文档,需要 点我 免费领取 哦。 

文章到此就结束了

来自小编的福利

以上的面试题及答案已经整理成文档,需要领取的小伙伴可以 点我 免费领取 ,在这里小编为大家推荐一套spring全家桶的课程,小编看了还不错,推荐大家去看一看,在这里小编祝福想去大厂面试的同学,旗开得胜,offer拿到手抽筋。

花了16888买的全网最全spring全家桶课程分享,学完直接挑战阿里P7

猜你喜欢

转载自blog.csdn.net/SQY0809/article/details/109405696