每日速记10道java面试题23-Spring篇+Springboot篇

其他资料

每日速记10道java面试题01-CSDN博客

每日速记10道java面试题02-CSDN博客

每日速记10道java面试题03-CSDN博客

每日速记10道java面试题04-CSDN博客

每日速记10道java面试题05-CSDN博客

每日速记10道java面试题06-CSDN博客

每日速记10道java面试题07-CSDN博客

每日速记10道java面试题08-CSDN博客

每日速记10道java面试题09-CSDN博客

每日速记10道java面试题10-CSDN博客

每日速记10道java面试题11-CSDN博客

每日速记10道java面试题12-CSDN博客

每日速记10道java面试题13-CSDN博客

每日速记10道java面试题14-CSDN博客

每日速记10道java面试题15-CSDN博客

每日速记10道java面试题16-CSDN博客

每日速记10道java面试题17-CSDN博客

每日速记10道java面试题18-CSDN博客

每日速记10道java面试题19-CSDN博客

每日速记10道java面试题20-CSDN博客

每日速记10道java面试题21-CSDN博客

每日速记10道java面试题22-CSDN博客

目录

1.Spring和Spring MVC的区别是什么?

2.Spring WebFlux 是什么?它与 Spring MVC 有何不同?

3.介绍一下Spring MVC的核心组件?

4.说一说Springboot的启动流程

5.为什么使用springboot

 6.SpringBoot是如何实现自动装配的?

7.Spring Boot 打成的 jar 和普通的 jar 有什么区别 ?

8.在 Spring Boot 中你是怎么使用拦截器的?

9.SpringBoot(Spring)中为什么不推荐使用 @Autowired ?

 10.怎么理解SpringBoot中的约定大于配置?


1.Spring和Spring MVC的区别是什么?

Spring 是基础,Spring MVC 构建于 Spring 核心之上,利用其提供的容器管理、依赖注入、AOP 等功能来实现 Web 层的处理。

Spring MVC 通过前端控制器(DispatcherServlet)拦截所有的请求,并将请求分发给合适的控制器进行处理:
1.DispatcherServlet 拦截请求。
2. HandlerMapping 根据请求 URL 查找对应的控制器。
3.Controller 处理业务逻辑,并返回数据。
4.ViewResolver 决定渲染哪个视图模板。
5.将响应返回给客户端。
 

2.Spring WebFlux 是什么?它与 Spring MVC 有何不同?

Spring WebFlux:

  • 异步非阻塞框架:Spring WebFlux 是 Spring5引入的响应式 Web 框架,旨在支持异步非阻塞编程模型。
  • 基于 Reactor: Webflux基于 Reactor 库,支持响应式流(Reactive Streams)规范,使用 Mono 和 Flux 来表示单个和多个异步序列。
  • 适用于高并发:WebFlux 适用于需要处理大量并发请求的场景,如实时数据流和高负载应用。

Spring MVC:

  • 同步阻塞框架:Spring MVC 是一个基于 Servlet 的传统 Web 框架,使用同步阻塞模型处理请求
  • 基于 Servlet APl:Spring MVC 使用标准的 Servlet API,通常每个请求对应一个线程。
  • 广泛应用:Spring MVC 适用于大多数 Web 应用,特别是传统的 CRUD 操作和企业应用。

适用场景:

  • Spring MVc:适用于 I/O操作较少、请求数相对较少的应用。
  • Spring WebFlux:适用于I/O操作频繁、高并发、低延迟的应用。 

3.介绍一下Spring MVC的核心组件?

 1.DispatcherServlet:Spring MVC 的前端控制器,所有请求都会先由它接收并分发到相应的处理器。它是整个 Spring MVC 流程的入口,也是处理请求的调度中心。
2.HandlerMapping:根据请求 URL查找对应的处理器(Controller)。 HandlerMapping 用于将客户端的请求映射到具体的控制器方法。
3.Controller (控制器):负责处理用户请求的核心组件。Controller 接收请求后,调用业务逻辑处理,返回数据给前端
4.ModelAndView:Controller 返回的对象,包含模型数据和视图信息,表示返回给用户的页面或 AP! 响应。
5.ViewResolver:用于解析视图名称并找到实际的视图(如JSP、Thymeleaf等),然后将处理结果渲染为 HTML 或其他格式,发送给客户端。
6. Handlerinterceptor(拦截器):在请求处理的各个阶段拦截 HTTP 请求和响应,可以在控制器执行前后添加自定义逻辑,如日志记录、权限检查等。
7.HandlerAdapter:负责执行找到的处理器(Controller),将请求交给处理器进行业务逻辑的处理。

核心工作流程:

1.DispatcherServlet 接收请求并调用 HandlerMapping 查找对应的控制器
2.HandlerAdapter 调用具体的 Controller 方法处理请求.。
3.Controller 返回 ModelAndView,包括视图名和模型数据。
4.ViewResolver 解析视图并渲染结果。
5.最终,DispatcherServlet 将处理结果返回给客户端
 


4.说一说Springboot的启动流程

1.从main方法启动,调用SpringApplication.run()方法
2.先会创建SpringApplication对象,创建的时候会推断应用类型(判断是servlet应用,还是reactive应用,或者不是web应用)设置启动监听器
3.创建完SpringApplication之后,调用该对象的run方法,通过ConfigurableEnvironment准备环境,这一步会读取配置文件,例application.preperties
4.创建应用上下文,这一步会注册所有配置类和自动配置类
5.刷新应用上下文,这一步会进行bean的创建和初始化,包括开发者自定义的bean以及自动注入的bean
6.对于web应用,刷新应用上下文的最后,会自动启动嵌入式web服务器
7.服务器启动完成会发送应用已启动的事件
8.接着调用实现了CommandLineRunner或者ApplicationRunner接囗的bean,执行一些初始化逻辑9.发送ApplicationReadyEvent,应用启动完成

核心步骤如下:

1.SpringApplication.run(:这是启动的入口,它会创建 Spring 应用上下文,并执行自动配置。
2.创建应用上下文:为 Web 应用创建 AnnotationConfigServletWebServerApplicationContext 上下文.
3.启动内嵌 Web 服务器:在 refreshContext() 阶段启动内嵌的 Web 服务器(如 Tomcat)。
4.自动配置:通过 @EnableAutoConfiguration 自动配置各种组件,如 DispatcherServlet。
5.请求处理:内嵌的 DispatcherServlet 负责处理 HTTP 请求。

5.为什么使用springboot

  1. 简化开发:Spring Boot通过提供一系列的开箱即用的组件和自动配置,开发人员可以更专注于业务逻辑的实现,而不需要花费过多时间在繁琐的配置上。
  2. 快速启动:springboot可通过内嵌的Tomcat等容器快速启动应用程序,无需额外的部署步骤,方便快捷。
  3. 自动化配置:Spring Boot通过自动配置功能,根据项目中的依赖关系和约定俗成的规则来配置应用程序,减少了配置的复杂性,简化开发。

 6.SpringBoot是如何实现自动装配的?

自动配置是通过@EnableAutoConfiguration注解实现的,这个注解会通过@import注解导入AtuoConfigurationlmportSelector类,这个类会扫描META-INF/Spring.factories文件,这个文件里面定义了所有的自动配置类,这些配置类上可能存在条件注解spring boot启动的时候根据这些注解,加载这些自动配置类。
1.自定义自动配置类步骤
定义一个类使用configuration注解修饰;定义META-INF/Spring-factories文件,向EnableAutoConfiguration中注入这个类
2.禁用特定的自动配置
application.properties配置文件中,使用spring.autoconfigure.exclude指定要禁用的自动配置类main启动类上,使用@SpringBootApplication的exclue属性进行排除

7.Spring Boot 打成的 jar 和普通的 jar 有什么区别 ?

spring boot的jar除了包含源代码以及依赖之外,还包含运行所需要的环境,例如Tomcat服务器和运行代码所需要的依赖,能独立运行。
普通的jar只有源代码和依赖,不能直接独立运行。怎么打包?使用maven插件,运行mvn clean package命令

8.在 Spring Boot 中你是怎么使用拦截器的?

1.实现Handlerlnterceptor接口,并且实现preHandle,postHandle,afterCompletion方法
2.实现WebMvcConfigurer接口,并且实现addInterceptors方法,注入上面自定义的拦截器
常用于:权限校验,日志记录等

preHandle:在请求到达控制器之前,进行拦截处理。常用与权限校验
postHandle:在请求经过控制器处理,还没有进行染视图之前。可以对响应进行修改afterCompletion:在视图完成渲染之后。可以用于进行一些清理操作。

多个拦截器调用顺序:preHandle会根据拦截器定义的顺序,依次进行调用。postHandle和afterCompletion会按照定义的顺序逆序进行调用。

Filter和Interceptor区别:Filter优先级比Interceptor高

9.SpringBoot(Spring)中为什么不推荐使用 @Autowired ?
 

详情请看我的另一篇文章:@Autowired与构造器注入区别,为什么spring推荐使用构造注入而不是Autowired?_构造器注入和autowired区别-CSDN博客

 10.怎么理解SpringBoot中的约定大于配置?
 

  1. 自动化配置:Spring Boot 提供了大量的自动化配置,通过分析项目的依赖和环境,自动配置应用程序的行为。例如,Spring Boot 可以根据项目中引入的数据库依赖自动配置数据源。
  2. 默认配置:Spring Boot 在没有明确配置的情况下,会使用合理的默认值来初始化应用程序。
  3. 约定优于配置:Spring Boot 遵循了约定优于配置的设计哲学,即通过约定好的方式来提供默认行为,减少开发者需要做出的决策。它是一种设计理念,通过减少配置和提供合理的默认值,让开发者快速构建部署一个程序,简化开发和降低维护成本。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/888966.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

4K高清壁纸网站推荐

1. Awesome Wallpapers 官网: https://4kwallpapers.com/ 主题: 创意、摄影、人物、动漫、绘画、视觉 分辨率: 4K Awesome Wallpapers 提供了丰富的高质量图片,分为通用、动漫、人物三大类,可以按屏幕比例和分辨率检索,满足你对壁纸的各种…

小迪笔记 第四十五天 sql 注入进阶 :二次注入,堆叠注入,数据读取(load_file)加外带

二次注入 概念:就是我们注入的语句(刚注入时 不会产生影响)但是我们的恶意代码会进入数据库 他在被二次利用的时候就会进行执行 这个就是二次注入 这个的典型案例就是账号密码的修改 : 大家应该也知道 账号注册一般是禁止你使…

双向链表容器

C中的list是一个双向链表容器&#xff0c;用于存储一系列的元素。它提供了在任意位置插入和删除元素的能力&#xff0c;同时还支持随机访问。 在C中&#xff0c;list是由标准模板库&#xff08;STL&#xff09;提供的容器之一。它位于<list>头文件中&#xff0c;并且通过…

正则表达式去除文本中括号()<>[]里的内容

一行文本中包含有各种括号&#xff0c;如()、<>、[]&#xff0c;我们希望把括号及括号内的内容0去除&#xff0c;可以通过正则表达式来实现。 匹配() pattern r\([^)]*\) # 匹配()匹配一个左括号(&#xff0c;然后匹配0个或多个不是右括号的任意字符[^)]*&#xff0c…

单击后移动至标记

单击后移动至标记 点击生成的表单之后&#xff0c;会在地图上自动的移动到改运动锻炼的位置 如何实现 实现这个我们肯定需要点击事件&#xff0c;但是我们需要去选取一个监听的类&#xff0c;我们使用事件委托的方式来创建这个点击事件&#xff1b; 实际代码 创建点击事件 …

C# 中的异常处理:构建健壮和可靠的程序

C#中的异常处理&#xff08;Exception Handling&#xff09;。异常处理是编程中非常重要的一部分&#xff0c;它允许开发者优雅地处理程序运行时可能出现的错误或意外情况。通过有效的异常处理&#xff0c;可以使应用程序更加健壮、可靠&#xff0c;并提供更好的用户体验。以下…

C# 中?. 和 ??

在 C# 中&#xff0c;?. 和 ?? 是两个不同的操作符&#xff0c;它们用于处理可能为 null 的对象。让我们分别解释这两个操作符以及它们的组合使用&#xff1a; 1. 可空类型 (?) 在 C# 中&#xff0c;? 用于定义可空值类型&#xff08;Nullable Value Types&#xff09…

[C++]继承

继承 概念使用方法继承方式子类的构造与析构 继承的成员继承成员在子类对象里的存放顺序成员变量普通成员变量静态成员变量 成员函数普通成员函数重定义&#xff08;隐藏&#xff09; 静态成员函数友元函数 单继承与多继承概念赋值转换&#xff08;切片&#xff09;多继承带来的…

机器人构建详解:售前售后服务客服机器人与广告生成机器人的微调数据处理方法

引言 大模型&#xff08;如BERT、GPT等&#xff09;在自然语言处理任务中展现了强大的能力&#xff0c;但为了使其更贴合特定应用场景&#xff0c;通常需要进行微调。本文将详细讲解如何为售前售后服务的客服机器人和广告生成机器人准备高质量的微调数据&#xff0c;并通过具体…

8.解决跨域问题的三种方案

开启域名&#xff0c;单点登录后&#xff0c;就使用最上面的接口了

全解:Redis RDB持久化和AOF持久化

&#x1f9d1; 博主简介&#xff1a;CSDN博客专家&#xff0c;历代文学网&#xff08;PC端可以访问&#xff1a;https://literature.sinhy.com/#/literature?__c1000&#xff0c;移动端可微信小程序搜索“历代文学”&#xff09;总架构师&#xff0c;15年工作经验&#xff0c;…

QILSTE H6-C210LB/5M高亮蓝光LED灯珠 发光二极管LED

在电子照明领域&#xff0c;H6-C210LB/5M&#xff0c;这款高亮蓝光LED&#xff0c;以其精确的参数和卓越的性能&#xff0c;脱颖而出。本文将通过增加文本的复杂性和长短句的交替使用&#xff0c;深入探讨这款LED的技术参数&#xff0c;以增强文章的困惑性和突发性。 **H6-C21…

使用 ASP.NET Core HttpLoggingMiddleware 记录 http 请求/响应

我们发布了一个应用程序&#xff0c;该应用程序运行在一个相当隐蔽的 WAF 后面。他们向我们保证&#xff0c;他们的产品不会以任何方式干扰我们的应用程序。这是错误的。他们删除了我们几乎所有的“自定义”标头。为了“证明”这一点&#xff0c;我构建了一个中间件&#xff0c…

回调机制详解

一、什么是回调&#xff1a; 回调是一种双向的调用模式&#xff0c;程序模块之间通过这样的接口调用完成通信联系&#xff0c;回调的核心就是回调方将本身即this传递给调用方&#xff0c;这样调用方就可以在调用完毕之后再告诉回调方它想要知道的信息。 回调函数用于层间协作&…

CUDA 计时功能,记录GPU程序/函数耗时,cudaEventCreate,cudaEventRecord,cudaEventElapsedTime

为了测试GPU函数的耗时&#xff0c;可以使用 CUDA 提供的计时功能&#xff1a;cudaEventCreate, cudaEventRecord, 和 cudaEventElapsedTime。这些函数可以帮助你测量某个 CUDA 操作&#xff08;如设置设备&#xff09;所花费的时间。 一、记录耗时案例 以下是一个示例程序&a…

ISO45001职业健康安全管理体系认证流程

前期准备 领导决策&#xff1a;企业高层领导需认识到实施 ISO 45001 体系的重要性和必要性&#xff0c;做出认证决策&#xff0c;并承诺提供必要的资源支持。成立工作小组&#xff1a;由企业各相关部门人员组成工作小组&#xff0c;明确各成员的职责和分工&#xff0c;确保工作…

异步操作,promise、axios

一、异步操作&#xff08;异步编程&#xff09;、同步操作 异步操作是指在编程中&#xff0c;某个任务的执行不会立即完成&#xff0c;同时不会阻塞后续代码的执行。在异步操作中&#xff0c;程序可以继续运行&#xff0c;并在异步任务完成时得到通知并处理结果。这与同步操作…

Ansible的yum和saltstack的哪个功能相似

Ansible的yum和saltstack的哪个功能相似 在 Ansible 和 SaltStack 中&#xff0c;Ansible 的 yum 模块 和 SaltStack 的 pkg 模块 功能相似。它们都用于管理软件包&#xff0c;支持安装、升级、删除和查询等操作。 Ansible 的 yum 模块 用途&#xff1a; 专门用于基于 Red Hat …

JVM 面试题相关总结

&#x1f9d1; 博主简介&#xff1a;CSDN博客专家&#xff0c;历代文学网&#xff08;PC端可以访问&#xff1a;https://literature.sinhy.com/#/literature?__c1000&#xff0c;移动端可微信小程序搜索“历代文学”&#xff09;总架构师&#xff0c;15年工作经验&#xff0c;…

【Django】在view中调用channel来主动进行websocket通信

前提&#xff1a;consumer中已经写好了建立连接的代码&#xff0c;并且能够成功把连接加入到通道层的组内 可以参考我的另一个博客&#xff1a; LuckySheet协同编辑后端示例(DjangoChannel,Websocket通信)_lucksheet 协同编辑-CSDN博客 我是懒得去折腾luckysheet的源码&…