抑郁症健康,内容丰富有趣,生活中的好帮手!
抑郁症健康 > Spring面试题及答案(Spring面试题大全带答案)

Spring面试题及答案(Spring面试题大全带答案)

时间:2019-02-05 12:19:25

相关推荐

最近梳理最新 Spring 面试题 全家桶【附答案解析】,包含了 Java基础、Spring、SpringMVC、Redis、SpringCloud、设计模式、等多个类型。

今天这篇是关于 Spring 全家桶面试题,总结了 110 道经典问题。

这套Spring面试题大全,希望对大家有帮助哈~

博主已将以下这些面试题整理成了一个Java面试手册,是PDF版的

1、区分 BeanFactory 和 ApplicationContext。

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

这可以使用DEV工具来实现。通过这种依赖关系,您可以节省任何更改,嵌入式tomcat将重新启动。

SpringBoot有一个开发工具(DevTools)模块,它有助于提高开发人员的生产力。Java开发人员面临的一个主要挑战是将文件更改自动部署到服务器并自动重启服务器。

开发人员可以重新加载SpringBoot上的更改,而无需重新启动服务器。这将消除每次手动部署更改的需要。SpringBoot在它的第一个版本时没有这个功能。

这是开发人员最需要的功能。DevTools模块完全满足开发人员的需求。该模块将在生产环境中被禁用。它还提供H2数据库控制台以更好地测试应用程序。

3、spring JDBC API 中存在哪些类?

1、JdbcTemplate

2、SimpleJdbcTemplate

3、NamedParameterJdbcTemplate

4、SimpleJdbcInsert

5、SimpleJdbcCall

4、spring cloud 和dubbo区别?

1、服务调用方式 dubbo是RPC springcloud Rest Api

2、注册中心,dubbo 是zookeeper springcloud是eureka,也可以是zookeeper

3、服务网关,dubbo本身没有实现,只能通过其他第三方技术整合,springcloud有Zuul路由网关,作为路由服务器,进行消费者的请求分发,springcloud支持断路器,与git完美集成配置文件支持版本控制,事物总线实现配置文件的更新与服务自动装配等等一系列的微服务架构要素。

5、spring boot初始化环境变量流程?

1、调用prepareEnvironment方法去设置环境变量

2、接下来有三个方法getOrCreateEnvironmentconfigureEnvironmentenvironmentPrepared

3、getOrCreateEnvironment去初始化系统环境变量

4、configureEnvironment去初始化命令行参数

5、environmentPrepared当广播到来的时候调用onApplicationEnvironmentPreparedEvent方法去使用postProcessEnvironment方法load ymlproperties变量

6、服务网关的作用

1、简化客户端调用复杂度,统一处理外部请求。

2、数据裁剪以及聚合,根据不同的接口需求,对数据加工后对外。

3、多渠道支持,针对不同的客户端提供不同的网关支持。

4、遗留系统的微服务化改造,可以作为新老系统的中转组件。

5、统一处理调用过程中的安全、权限问题。

7、SpringBoot 支持哪些日志框架?推荐和默认的日志框架是哪个?

SpringBoot 支持 Java Util Logging, Log4j2, Lockback 作为日志框架,如果你使用 Starters 启动器,SpringBoot 将使用 Logback 作为默认日志框架。

8、如何配置SpringBoot应用程序日志记录?

SpringBoot附带了对Log4J2,Java Util Logging和Logback的支持。它通常预先配置为控制台输出。可以通过仅在application.properties文件中指定logging.level来配置它们。

logging.level.spring.framework=Debug

9、Ribbon和Feign调用服务的区别

1、调用方式同:Ribbon需要我们自己构建Http请求,模拟Http请求然后通过RestTemplate发给其他服务,步骤相当繁琐

2、而Feign则是在Ribbon的基础上进行了一次改进,采用接口的形式,将我们需要调用的服务方法定义成抽象方法保存在本地就可以了,不需要自己构建Http请求了,直接调用接口就行了,不过要注意,调用方法要和本地抽象方法的签名完全一致。

10、什么是 Swagger?你用 SpringBoot 实现了它吗?

Swagger 广泛用于可视化 API,使用 Swagger UI 为前端开发人员提供在线沙箱。Swagger 是用于生成 RESTful Web 服务的可视化表示的工具,规范和完整框架实现。它使文档能够以与服务器相同的速度更新。当通过 Swagger 正确定义时,消费者可以使用最少量的实现逻辑来理解远程服务并与其进行交互。因此,Swagger消除了调用服务时的猜测。

11、什么是REST / RESTful以及它的用途是什么?

Representational State Transfer(REST)/ RESTful Web服务是一种帮助计算机系统通过Internet进行通信的架构风格。这使得微服务更容易理解和实现。

微服务可以使用或不使用RESTful API实现,但使用RESTful API构建松散耦合的微服务总是更容易。

12、如何在SpringBoot中禁用Actuator端点安全性?

默认情况下,所有敏感的HTTP端点都是安全的,只有具有ACTUATOR角色的用户才能访问它们。安全性是使用标准的HttpServletRequest.isUserInRole方法实施的。 我们可以使用

来禁用安全性。只有在执行机构端点在防火墙后访问时,才建议禁用安全性。

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

使用了下面的一些依赖项:

spring-boot-starter-activemq

spring-boot-starter-security

这有助于增加更少的依赖关系,并减少版本的冲突。

14、什么是 AOP 引入?

引入允许我们在已存在的类中增加新的方法和属性。

15、我们如何监视所有 SpringBoot 微服务?

SpringBoot 提供监视器端点以监控各个微服务的度量。这些端点对于获取有关应用程序的信息(如它们是否已启动)以及它们的组件(如数据库等)是否正常运行很有帮助。但是,使用监视器的一个主要缺点或困难是,我们必须单独打开应用程序的知识点以了解其状态或健康状况。想象一下涉及 50 个应用程序的微服务,管理员将不得不击中所有 50 个应用程序的执行终端。

16、如何使用 SpringBoot 部署到不同的服务器?

你需要做下面两个步骤:

在一个项目中生成一个 war 文件。

将它部署到你最喜欢的服务器(websphere 或者 Weblogic 或者 Tomcat and so on)。

**第一步:**这本入门指南应该有所帮助:

https://spring.io/guides/gs/convert-jar-to-war/

**第二步:**取决于你的服务器。

17、SpringBoot 自动配置原理是什么?

注解 @EnableAutoConfiguration, @Configuration,@ConditionalOnClass就是自动配置的核心,

@EnableAutoConfiguration 给容器导入META-INF/spring.factories 里定义的自动配置类。

筛选有效的自动配置类。

每一个自动配置类结合对应的 xxxProperties.java 读取配置文件进行自动配置功能

18、SpringBoot 的配置文件有哪几种格式?它们有什么区别?

.properties 和 .yml,它们的区别主要是书写格式不同。

properties

app.user.name = javastack

yml

app: user: name: javastack

19、Zookeeper如何 保证CP

当向注册中⼼查询服务列表时,我们可以容忍注册中⼼返回的是⼏分钟以前的注册信息,但不能接受服务直接down掉不可⽤。也就是说,服务注册功能对可⽤性的要求要⾼于⼀致性。但是zk会出现这样⼀种情况,当master节点因为⽹络故障与其他节点失去联系时,剩余节点会重新进⾏leader选举。问题在于,选举leader的时间太⻓,30 ~ 120s, 且选举期间整个zk集群都是不可⽤的,这就导致在选举期间注册服务瘫痪。在云部署的环境下,因⽹络问题使得zk集群失去master节点是较⼤概率会发⽣的事,虽然服务能够最终恢复,但是漫⻓的选举时间导致的注册⻓期不可⽤是不能容忍的。

20、SpringCloud主要项目

Spring Cloud的子项目,大致可分成两类,一类是对现有成熟框架"SpringBoot化"的封装和抽象,也是数量最多的项目;第二类是开发了一部分分布式系统的基础设施的实现,如Spring Cloud Stream扮演的就是Kafka, ActiveMQ这样的角色。

21、如何在 spring 中启动注解装配?

默认情况下,Spring 容器中未打开注解装配。因此,要使用基于注解装配,我们必须通过配置<context:annotation-config/>元素在 Spring 配置文件中启用它。

22、dubbo服务注册与发现原理

调⽤关系说明:

1、服务容器负责启动,加载,运⾏服务提供者。

2、服务提供者在启动时,向注册中⼼注册⾃⼰提供的服务。

3、服务消费者在启动时,向注册中⼼订阅⾃⼰所需的服务。

24、注册中⼼返回服务提供者地址列表给消费者,如果有变更,注册中⼼将基于⻓连接推送变更数据给消费者。

25、服务消费者,从提供者地址列表中,基于软负载均衡算法,选⼀台提供者进⾏调⽤,如果调⽤失败,再选另⼀台调⽤。

26、服务消费者和提供者,在内存中累计调⽤次数和调⽤时间,定时每分钟发送⼀次统计数据到监控中⼼。

3、列举 spring 支持的事务管理类型

Spring 支持两种类型的事务管理:

1、程序化事务管理:在此过程中,在编程的帮助下管理事务。它为您提供极大的灵活性,但维护起来非常困难。

2、声明式事务管理:在此,事务管理与业务代码分离。仅使用注解或基于 XML 的配置来管理事务。

24、如何解决POST请求中文乱码问题,GET的又如何处理呢?

解决post请求乱码问题:

在web.xml中配置一个CharacterEncodingFilter过滤器,设置成utf-8;

<filter> <filter-name>CharacterEncodingFilter</filter-name> <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> <init-param> <param-name>encoding</param-name> <param-value>utf-8</param-value> </init-param> </filter> <filter-mapping> <filter-name>CharacterEncodingFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>

get请求中文参数出现乱码解决方法有两个:

修改tomcat配置文件添加编码与工程编码一致,如下:

<ConnectorURIEncoding="utf-8" connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443"/>

另外一种方法对参数进行重新编码:

String userName = new String(request.getParamter(“userName”).getBytes(“ISO8859-1”),“utf-8”)

ISO8859-1是tomcat默认编码,需要将tomcat编码后的内容按utf-8编码。

25、@PathVariable和@RequestParam的区别

请求路径上有个id的变量值,可以通过@PathVariable来获取@RequestMapping(value= “/page/{id}”, method = RequestMethod.GET)

@RequestParam用来获得静态的URL请求入参 spring注解时action里用到。

26、SpringBoot多数据源拆分的思路

先在properties配置文件中配置两个数据源,创建分包mapper,使用@ConfigurationProperties读取properties中的配置,使用@MapperScan注册到对应的mapper包中

27、分布式配置中心有那些框架?

Apollo、zookeeper、springcloud config。

28、Spring支持的事务管理类型

Spring支持两种类型的事务管理:

1、编程式事务管理:这意味你通过编程的方式管理事务,给你带来极大的灵活性,但是难维护。

2、声明式事务管理:这意味着你可以将业务代码和事务管理分离,你只需用注解和XML配置来管理事务。

29、为什么我们需要 spring-boot-maven-plugin?

spring-boot-maven-plugin 提供了一些像 jar 一样打包或者运行应用程序的命令。

spring-boot:run 运行你的 SpringBooty 应用程序。

spring-boot:repackage 重新打包你的 jar 包或者是 war 包使其可执行

spring-boot:start 和 spring-boot:stop 管理 SpringBoot 应用程序的生命周期(也可以说是为了集成测试)。

spring-boot:build-info 生成执行器可以使用的构造信息。

30、常用网关框架有那些?

Nginx、Zuul、Gateway

31、SpringBoot 的配置文件有哪几种格式?它们有什么区别?

.properties 和 .yml,它们的区别主要是书写格式不同。

1、properties

app.user.name = javastack

2、yml

app: user: name: javastack

另外,.yml 格式不支持@PropertySource注解导入配置。

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

使用DEV工具来实现。 通过这种依赖关系,可以节省任何更改,嵌入式 tomcat将重新启动。 使用SpringBoot有一个开发工具Dev Tools模块,可以重新加载 SpringBoot上的更改,而无需重新启动服务器。消除每次手动部署更改的需要。 SpringBoot在发布它的第一个版本时没有这个功能。该模块将在生产环境中被禁用。它还提供H2数据库控制台以更好地测试应用程序。

33、创建一个 SpringBoot Project 的最简单的方法是什么?

Spring Initializr是启动 SpringBoot Projects 的一个很好的工具。

我们需要做一下几步:

1、登录 Spring Initializr,按照以下方式进行选择:

2、选择 com.in28minutes.SpringBoot 为组

3、选择 studet-services 为组件

4、选择下面的依赖项

Web

Actuator

DevTools

5、点击生 GenerateProject

6、将项目导入 Eclipse。文件 - 导入 - 现有的 Maven 项目

34、SpringBoot 2、X 有什么新特性?与 1、X 有什么区别?

1、配置变更

2、JDK 版本升级

3、第三方类库升级

4、响应式 Spring 编程支持

5、HTTP/2 支持

6、配置属性绑定

7、更多改进与加强

35、为什么要选择微服务架构?

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

1、微服务可以轻松适应其他框架或技术。

2、单个进程的失败不会影响整个系统。

3、为大企业和小型团队提供支持。

4、可以在相对较短的时间内独立部署。

36、什么是 CSRF 攻击?

CSRF 代表跨站请求伪造。这是一种攻击,迫使最终用户在当前通过身份验证的Web 应用程序上执行不需要的操作。CSRF 攻击专门针对状态改变请求,而不是数据窃取,因为攻击者无法查看对伪造请求的响应。

37、什么是SpringBoot?

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

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

38、SpringBoot 的核心注解是哪个?它主要由哪几个注解组成的?

启动类上面的注解是@SpringBootApplication,它也是 SpringBoot 的核心注解,主要组合包含了以下 3 个注解:

@SpringBootConfiguration:组合了@Configuration注解,实现配置文件的功能。

@EnableAutoConfiguration:打开自动配置的功能,也可以关闭某个自动配置的选项,如关闭数据源自动配置功能:

@SpringBootApplication(exclude= { DataSourceAutoConfiguration.class })。

@ComponentScan:Spring组件扫描。

39、为什么我们需要微服务容器?

要管理基于微服务的应用程序,容器是最简单的选择。它帮助用户单独部署和开发。您还可以使用Docker将微服务封装到容器的镜像中。没有任何额外的依赖或工作,微服务可以使用这些元素。

40、微服务之间是如何独⽴通讯的

1、Dubbo 使⽤的是 RPC 通信,⼆进制传输,占⽤带宽⼩;

2、Spring Cloud 使⽤的是 HTTP RESTFul ⽅式。

更多 Spring 70 面试题

01、什么是不同类型的微服务测试?

02、Nginx与Ribbon的区别

03、什么是 Hystrix 断路器?我们需要它吗?

04、SpringBoot 的核心注解是哪个?它主要由哪几个注解组成的?

05、什么是 AOP什么是目标对象?

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

07、如何在自定义端口上运行 SpringBoot应用程序?

08、SpringBoot 有哪些优点?

09、SpringBoot常用的starter有哪些?

10、如何实现 SpringBoot 应用程序的安全性?

11、SpringBoot运行项目的几种方式?

12、IOC的优点是什么?

13、在Spring MVC应用程序中使用WebMvcTest注释有什么用处?

14、什么是Spring Cloud?

15、eureka服务注册与发现原理

16、、SpringBoot 配置文件的加载顺序

07、什么是 spring 装配

18、为什么要用SpringBoot

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

20、什么是微服务架构中的DRY?

21、SpringBoot 的配置文件有哪几种格式?它们有什么区别?

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

23、创建一个 SpringBoot Project 的最简单的方法是什么?

24、SpringBoot 2、X 有什么新特性?与 1、X 有什么区别?

25、为什么要选择微服务架构?

26、什么是 CSRF 攻击?

27、什么是SpringBoot?

28、SpringBoot 的核心注解是哪个?它主要由哪几个注解组成的?

29、、为什么我们需要微服务容器?

30、微服务之间是如何独⽴通讯的

31、什么是REST / RESTful以及它的用途是什么?

32、如何在SpringBoot中禁用Actuator端点安全性?

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

34、什么是 AOP 引入?

35、我们如何监视所有 SpringBoot 微服务?

36、如何使用 SpringBoot 部署到不同的服务器?

37、、SpringBoot 自动配置原理是什么?

08、SpringBoot 的配置文件有哪几种格式?它们有什么区别?

39、Zookeeper如何 保证CP

40、SpringCloud主要项目

41、为什么我们不建议在实际的应用程序中使用 Spring Data Rest?

42、Ribbon是什么?

43、如何禁用特定的自动配置类?

44、自动装配有哪些方式?

45、spring 支持集中 bean scope?

46、SpringBoot 的核心注解是哪个?它主要由哪几个注解组成的?

47、什么是 Spring Framework?

48、如何不通过任何配置来选择 Hibernate 作为 JPA 的默认实现?

49、Spring由哪些模块组成?

50、什么是双因素身份验证?

51、Spring Cloud 是什么

02、微服务限流 http限流:我们使⽤nginx的limitzone来完成:

53、微服务架构如何运作?

54、REST 和RPC对比

55、解释基于XML Schema方式的切面实现。

56、区分构造函数注入和 setter 注入。

57、SpringBoot 实现热部署有哪几种方式?

59、、什么是代理?

60、SpringBoot支持什么前端模板,

60、什么是客户证书?

61、什么是 Spring 配置文件?

62、保护 SpringBoot 应用有哪些方法?

63、@RestController和@Controller的区别

64、如何启用/禁用执行器?

65、@LoadBalanced注解的作用

66、SpringBoot 的核心配置文件有哪几个?它们的区别是什么?

67、spring boot 核心的两个配置文件:

68、为什么需要域驱动设计(DDD)?

69、解释对象/关系映射集成模块。

70、如何在 SpringBoot中禁用 Actuator端点安全性?

这套Spring面试题大全,希望对大家有帮助哈~

博主已将以下这些面试题整理成了一个Java面试手册,是PDF版的

如果觉得《Spring面试题及答案(Spring面试题大全带答案)》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。