儿童节问女朋友要礼物-她反手给我一套Spring框架面试真题!

简介: 儿童节问女朋友要礼物-她反手给我一套Spring框架面试真题!

image.png

第6天,打卡《Sping框架面试真题篇》

秋招将至,坚持每日学习、打卡、秋招Offer满满哦!

题目会持续更新,且保证有质量,期待你的参与,一起打卡,一起进步!

image.png

一: 你可以简单描述下SpringMvc的执行流程吗

image.png

1、前端控制器(DispatchServlet)接收到客户端发送的请求


 2、收到请求后它会转发给处理器映射器(HandlerMapping),请求获取Handler。


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


 4、前端控制器请求返回的处理器对象转发给处理器适配器(HandlerAdapter)


 5、处理器适配器通过适配处理调用具体的处理器(Handler)既执行实际的后端逻辑处理代码,生成结果。


 6、处理器适配器将Handler执行的结果ModelAndView返回给前端控制器


 7、前端控制器将返回的ModelAndView转发给ViewResolver解析成View,并将View对象返回给前端控制器。


 8、前端控制器接收到View对象然后转发给视图(一个接口,用于渲染视图)进行数据渲染。


 9、前端控制器将处理结果响应给客户端



二: 说说你使用SpringMVC时常用到的注解以及作用

1、Controller/Service/Repository/Component: 用于标识当前类属于控制层/业务层/数据层/泛指组件(通用),被标记的类会被Spring容器进行管理。


 2、RequestMapping: 请求地址映射,客户端请求映射路径可以到控制层,可以作用在或者方法中,当在类范围使用时,表示类中所有请求的父路径,当使用在某个方法时,表示当前方法的请求路径


 3、RequestBody: 用于标记请求参数,被标记的参数会自动将请求的参数映射到符合条件的接受参数实体中


 4、ResponseBody: 将反馈结果使用框架中对应的JSON框架转换成json字符串,可以使用在类或者方法中,当使用在类时,表示将类中所有的方法的反馈结果都转换成对应的JSON字符串,使用在方法时,表示将该方法的反馈结果转换成JSON字符串


 5、RequestParam: 获取URL中携带的请求参数既URL中“?”后携带的参数,c传递参数的格式是:key=value


 6、PathVariable: 用于获取URL中路径的参数值,参数名由RequestMapping注解请求路径时指定,常用语restful风格的api中,传递参数格式:直接在url后添加需要传递的值即可 如:/api/demo/1


 7、Autowired: 自动装配,Spring发现@Autowired注解时,将自动在代码上下文中找到和其匹配(默认是类型匹配)的Bean,并自动注入到相应的地方去。当Spring找不到bean时会抛出异常,将@Autowired注解的required属性设置为false 不会抛出异常,会显示null


 8、Resource: 类型填充,默认通过name属性去匹配bean,当找不到时再按type去匹配,当指定了name或者type则根据指定的类型去匹配bean,任何一个不匹配都报错


 9、RestController: 实际上就是等于 Controller + ResponseBody的作用



三: Spring Framework、Springboot和Springmvc有什么区别

一 详细:


 1、Spring就是一个框架家族,它是为了解决企业应用开发的复杂性而创建的,由它衍生出了spring security、spring jpa、spring Cloud等产品,但是,这些产品的基础还是基于Spring框架中的IOC和AOP,IOC提高了依赖注入的容器,降低了对象间的耦合性,AOP提供了面向切面的编程,提高了代码的复用性,然后在两者的基础上实现了其他延伸产品的高级功能。


 2、SpringMVC: 它提供了一种轻度耦合的方式来开发web应用。属于Sping家族中的一个模块,是一个web框架,通过前端控制器、处理器映射器、处理器适配器、视图解析器等使得开发web应用变得更容易。


 3、SpringBoot: 它属于Spring家族中的一个子项目,是为了解决使用Spring项目开发时需要进行大量配置的问题,它并不是用于替换Spring框架的解决方案,而是依赖于Spring框架,集成了许多常用的第三方框架,遵循了"约定大于配置"的原则,让开发者则能够对主流的技术开箱即用,提升开发效率。



二: 总结


 1、Spring实际上是一个框架家族,Spring Framework属于其中的一个子模块,基于IOC和AOP实现组件解耦


 2、SpringBoot可以看做是一个整合工具,可以方便快速使用


 3、SpringMVC是以Spring为基础,拓展出来的一个MVC包,提供了一种轻度耦合的方式来开发web应用。



四: 说说Spring Framework的一个体系结构和对应jar包的作用

image.png

一: Data Access模块相关jar包


 1、Spring-JDBC: jdbc支持包

 2、Spring-tx: 支持事务控制

 3、Spring-orm: 对象映射关系,继承orm框架

 4、Spring-oxm: 支持对象xml映射

 5、Spring-jms: 支持对象消息服务



二: Web模块相关jar包


 1、Spring-web: 基础的web功能

 2、Spring-webmvc: 支持webmvc实现

 3、Spring-webmvc-porlet: 基于porlet的mvc实现

 4、Spring-structs: 集成structs,但spring4不再推荐

 5、Spring-websocket: websocker支持(spring4),为web应用程序提高高效的通信工具。

 6、Spring-mssaging: 支持构建消息的应用程序(Spring4支持)



三: AOP模块相关的jar包


 1、Spring-AOP: 支持面向切面编程

 2、Spring-Aspect: 集成Aspect,支持使用Aspect实现面向切面编程

 3、Spring-instrument: 提供一些类级的工具支持以及classloader的实现



四: Core Container模块相关的jar包


 1、Spring-core: 提供依赖注入DI和控制反转IOC的支持

 2、Spring-beans: Bean工厂和bean的装配支持

 3、Spring-context: Spring的上下文支持

 4、Spring-Expression: 支持Spring表达式语言



五: Test模块相关的jar包


 1、Spring-test: 提供junit和Mock测试功能

 2、Spring-context-support: Spring的额外包支持如邮件服务



五: @Autowire和@Resource注解有什么区别

1、@Autowired默认按类型装配,默认情况下必须要求依赖对象必须存在,如果要允许null值,可以设置它的required属性为false。


 2、@Resource默认按名称装配,当找不到与名称匹配的bean时才按照类型进行装配。名称可以通过name属性指定,如果没有指定name属性,当注解写在字段上时,默认取字段名,当注解写在setter方法上时,默认取属性名进行装配。


 3、@Autowire和@Qualifier配合使用效果和@Resource一样


 4、@Autowired是Spring的注解,@Resource是J2EE的注解,Spring属于第三方的,J2EE是Java自己的东西,因此,建议使用@Resource注解,以减少代码和Spring之间的耦合。



六: @Resource装配顺序


1、如果同时指定name和type,则从容器中查找唯一匹配的bean装配,找不到则抛出异常


 2、如果指定name属性,则从容器中查找名称匹配的bean装配,找不到则抛出异常


 3、如果指定type属性,则从容器中查找类型唯一匹配的bean装配,找不到或者找到多个抛出 异常。


 4、如果都不指定,则自动按照byName方式装配,如果没有匹配,则回退一个原始类型进行匹配,如果匹配则自动装配。



七: PathVariable、RequestParam、Param注解的区别


1、@RequestParam注解作用: 获取URL中携带的请求参数既URL中“?”后携带的参数,c传递参数的格式是:key=value


 2、@PathVariable注解作用: 用于获取URL中路径的参数值,参数名由RequestMapping注解请求路径时指定,常用语restful风格的api中,传递参数格式:直接在url后添加需要传递的值即可


 3、Param注解作用: 属于Mybatis框架中的注解,主要是用于绑定参数,可以指定对应的参数名称,然后可以在mapper.xml文件中使用绑定的名称来调用参数的属性。



八: Spring中事务的传播属性有哪些

一:定义


 用于描述系统中存在多个事务,且事务之间存在嵌套调用(如A、B方法都开启了事务,但是在A方法中调用了B方法)时事务如何传播,它的传播行为是作用嵌套的方法中,如方法B嵌套中A中,传播行为则是作用在B方法中表示B事务的一些特性是有A决定的


 事务传播行为是Spring框架独有的事务增强特性,他不属于的事务实际提供方数据库行为。


二: 种类


 PROPAGATION_REQUIRED:如果当前没有事务,就新建一个事务,如果已经存在一个事务中,加入到这个事务中。


 PROPAGATION_REQUIRES_NEW:总是主动开启事务;如果存在外层事务,就将外层事务挂起


 PROPAGATION_SUPPORTS:如果不存在外层事务,就不开启事务;否则使用外层事务


 PROPAGATION_NOT_SUPPORTED:总是不开启事务;如果存在外层事务,就将外层事务挂起


 PROPAGATION_MANDATORY:如果不存在外层事务,就抛出异常;否则使用外层事务


 PROPAGATION_NESTED:如果当前存在事务,则在嵌套事务内执行。如果当前没有事务,则执行与PROPAGATION_REQUIRED类似的操作。


 PROPAGATION_NEVER:总是不开启事务;如果存在外层事务,则抛出异常



九: 注入容器的注解有哪些

1、Controller :用于标注表现层的组件


 2、Service: 用于标注业务逻辑层的组件


 3、Repository: 用于标注持久层的组件


 4、Component: 可以使用在任意层级,表示通用的组件


 5、Configuration: 表示是配置信息组件


 6、Bean: 表示实体对象组件



十: 使用Springboot的优缺点


一: 优点


(1)能够快速创建基于 Spring 的应用程序、提高开发和部署效率。


(2)内置了tomcat、jetty等HTTP服务器,项目可以独立运行。


(3)提供了许多starter包,让 Maven 的配置变得简单。


(4)对主流框架无配置集成。


(5)提供了程序的运行时健康检查、监控等功能。


(6)可以完全不使用 XML 配置文件,采用注解配置。


(7)与云计算天然集成



二: 缺点


 1、它只是Spring框架家族中的一个子项目,主要是用来提高开发和部署效率,提高生产力的,并没有如服务发现和服务注册功能,也没有配套的安全管控方案。


 2、将传统的或者现有Spring Framework项目转为SpringBoot应用是比较困难和麻烦的,它更适用于全新的Spring项目。



九: 总结和下篇预告


  六一儿童节、先祝大家儿童节快乐、希望大家能够早日遇到和你一起度过儿童节的人,如果看完文章能够给你带来一些欢乐、一些收获、那就是我送给你儿童节最好的礼物。


  下篇的面试题目主要是关于数据库Explain关键字解析,带你解读执行计划的真正含义。


  欢迎大家关注,如果觉得文章对你有帮助,不要忘记一键三连哦,你的支持是我创作更加优质文章的动力,希望大家都能够早日拿到心仪的Offer,有任何面试问题可以私信我,欢迎大家投稿面试题目哦!


相关文章
|
8天前
|
监控 Java 应用服务中间件
高级java面试---spring.factories文件的解析源码API机制
【11月更文挑战第20天】Spring Boot是一个用于快速构建基于Spring框架的应用程序的开源框架。它通过自动配置、起步依赖和内嵌服务器等特性,极大地简化了Spring应用的开发和部署过程。本文将深入探讨Spring Boot的背景历史、业务场景、功能点以及底层原理,并通过Java代码手写模拟Spring Boot的启动过程,特别是spring.factories文件的解析源码API机制。
28 2
|
24天前
|
数据采集 监控 前端开发
二级公立医院绩效考核系统源码,B/S架构,前后端分别基于Spring Boot和Avue框架
医院绩效管理系统通过与HIS系统的无缝对接,实现数据网络化采集、评价结果透明化管理及奖金分配自动化生成。系统涵盖科室和个人绩效考核、医疗质量考核、数据采集、绩效工资核算、收支核算、工作量统计、单项奖惩等功能,提升绩效评估的全面性、准确性和公正性。技术栈采用B/S架构,前后端分别基于Spring Boot和Avue框架。
|
1月前
|
Java API 数据库
构建RESTful API已经成为现代Web开发的标准做法之一。Spring Boot框架因其简洁的配置、快速的启动特性及丰富的功能集而备受开发者青睐。
【10月更文挑战第11天】本文介绍如何使用Spring Boot构建在线图书管理系统的RESTful API。通过创建Spring Boot项目,定义`Book`实体类、`BookRepository`接口和`BookService`服务类,最后实现`BookController`控制器来处理HTTP请求,展示了从基础环境搭建到API测试的完整过程。
46 4
|
1月前
|
JavaScript 安全 Java
如何使用 Spring Boot 和 Ant Design Pro Vue 实现动态路由和菜单功能,快速搭建前后端分离的应用框架
本文介绍了如何使用 Spring Boot 和 Ant Design Pro Vue 实现动态路由和菜单功能,快速搭建前后端分离的应用框架。首先,确保开发环境已安装必要的工具,然后创建并配置 Spring Boot 项目,包括添加依赖和配置 Spring Security。接着,创建后端 API 和前端项目,配置动态路由和菜单。最后,运行项目并分享实践心得,包括版本兼容性、安全性、性能调优等方面。
152 1
|
1月前
|
Java API 数据库
Spring Boot框架因其简洁的配置、快速的启动特性及丰富的功能集而备受开发者青睐
本文通过在线图书管理系统案例,详细介绍如何使用Spring Boot构建RESTful API。从项目基础环境搭建、实体类与数据访问层定义,到业务逻辑实现和控制器编写,逐步展示了Spring Boot的简洁配置和强大功能。最后,通过Postman测试API,并介绍了如何添加安全性和异常处理,确保API的稳定性和安全性。
38 0
|
28天前
|
前端开发 Java 数据库连接
Spring 框架:Java 开发者的春天
Spring 框架是一个功能强大的开源框架,主要用于简化 Java 企业级应用的开发,由被称为“Spring 之父”的 Rod Johnson 于 2002 年提出并创立,并由Pivotal团队维护。
43 1
Spring 框架:Java 开发者的春天
|
20天前
|
JavaScript 安全 Java
如何使用 Spring Boot 和 Ant Design Pro Vue 构建一个前后端分离的应用框架,实现动态路由和菜单功能
本文介绍了如何使用 Spring Boot 和 Ant Design Pro Vue 构建一个前后端分离的应用框架,实现动态路由和菜单功能。首先,确保开发环境已安装必要的工具,然后创建并配置 Spring Boot 项目,包括添加依赖和配置 Spring Security。接着,创建后端 API 和前端项目,配置动态路由和菜单。最后,运行项目并分享实践心得,帮助开发者提高开发效率和应用的可维护性。
38 2
|
19天前
|
消息中间件 NoSQL Java
springboot整合常用中间件框架案例
该项目是Spring Boot集成整合案例,涵盖多种中间件的使用示例,每个案例项目使用最小依赖,便于直接应用到自己的项目中。包括MyBatis、Redis、MongoDB、MQ、ES等的整合示例。
78 1
|
28天前
|
Java 数据库连接 开发者
Spring 框架:Java 开发者的春天
【10月更文挑战第27天】Spring 框架由 Rod Johnson 在 2002 年创建,旨在解决 Java 企业级开发中的复杂性问题。它通过控制反转(IOC)和面向切面的编程(AOP)等核心机制,提供了轻量级的容器和丰富的功能,支持 Web 开发、数据访问等领域,显著提高了开发效率和应用的可维护性。Spring 拥有强大的社区支持和丰富的生态系统,是 Java 开发不可或缺的工具。
|
1月前
|
人工智能 Java API
阿里云开源 AI 应用开发框架:Spring AI Alibaba
近期,阿里云重磅发布了首款面向 Java 开发者的开源 AI 应用开发框架:Spring AI Alibaba(项目 Github 仓库地址:alibaba/spring-ai-alibaba),Spring AI Alibaba 项目基于 Spring AI 构建,是阿里云通义系列模型及服务在 Java AI 应用开发领域的最佳实践,提供高层次的 AI API 抽象与云原生基础设施集成方案,帮助开发者快速构建 AI 应用。本文将详细介绍 Spring AI Alibaba 的核心特性,并通过「智能机票助手」的示例直观的展示 Spring AI Alibaba 开发 AI 应用的便利性。示例源
下一篇
无影云桌面