【面试高高手】—— SpringBoot(11题)

news2024/11/17 6:43:16

文章目录

    • 1.什么是SpringBoot?
    • 2.为什么需要Spring Boot?
    • 3.SpringBoot的特征?
    • 4.SpringBoot的两个策略是什么?
    • 5.说一下SpringBoot的自动装配流程?
    • 6.说下什么是 Bean?
    • 7.什么是 CSRF 攻击?如何避免?
    • 8. Spring Boot 的配置文件有哪几种格式?它们有什么区别?
    • 9.Spring Boot 可以兼容老 Spring 项目吗?
    • 10.你如何理解 Spring Boot 配置加载顺序?
    • 11.Spring Boot支持哪些嵌入式Web容器?

1.什么是SpringBoot?

Spring Boot是一个用于简化Spring应用程序开发的开源框架。它基于Spring框架,提供了一种更快速、便捷、自动化的方式来构建和部署Spring应用程序。Spring Boot的目标是降低Spring应用程序开发的复杂性,提高生产力,并默认提供一组常见的配置,以减少样板代码。

2.为什么需要Spring Boot?

  • 简化配置: 默认配置和自动配置,减少了繁琐的XML配置文件和代码设置的需求,使开发更加简单和高效。
  • 快速开发: 开箱即用的模板和组件,可以快速启动新项目,同时还提供了内置的Web服务器,无需手动配置即可运行应用程序。
  • 集成性: 集成了众多常用的库和框架,使得与各种数据存储、消息队列、安全性和云服务的集成变得更加容易。
  • 微服务支持: Spring Boot为构建微服务架构提供了良好的支持,使开发者可以轻松创建、部署和管理分布式应用程序。
  • 自动化任务: Spring Boot支持定时任务、批处理处理等自动化任务,使开发者能够更轻松地处理后台处理和调度。
  • 生态系统: 拥有庞大的生态系统和活跃的社区支持,可以获取大量的扩展模块和文档资源。
  • 开放性: 开发者选择他们最喜欢的开发工具,并支持多种构建工具,如Maven和Gradle。

3.SpringBoot的特征?

  • 自动配置(Auto-Configuration): Spring Boot通过自动配置尝试根据项目的依赖和类路径上的资源来配置Spring应用程序。这意味着开发者无需手动配置大量的Spring配置文件,Spring Boot会根据环境和依赖自动配置应用程序。
  • 起步依赖(Starter Dependencies): Spring Boot提供了一组预定义的"起步依赖",这些依赖包含了特定类型的功能和库,可以根据需要添加到项目中。起步依赖简化了依赖管理,使构建Spring应用程序更加方便。
  • 内嵌Tomcat或Jetty等Servlet容器;
  • 生产就绪(Production-Ready): Spring Boot提供了一组功能,如健康检查、指标监控、远程配置等,帮助将应用程序变成生产就绪的状态。Spring Boot Actuator模块提供了这些功能。
  • 外部化配置: Spring Boot支持将应用程序的配置从代码中分离出来,可以通过属性文件、YAML文件、环境变量等方式进行配置。这使得应用程序更易于配置和管理。
  • 无需代码生成和XML配置: Spring Boot采用基于Java的配置方式,减少了XML配置文件的使用。同时,它通过约定和默认配置来简化开发,无需生成大量样板代码。
  • 生态系统: Spring Boot拥有强大的生态系统,包括大量的插件和扩展,用于集成各种数据库、消息队列、安全性等功能。

4.SpringBoot的两个策略是什么?

(1)开箱即用
Outofbox,是指在开发过程中,通过在MAVEN项⽬的pom⽂件中添加相关依赖包,然后使⽤对应注解来代替繁琐的XML配置⽂件以管理对象的⽣命周期。这个特点使得开发⼈员摆脱了复杂的配置⼯作以及依赖的管理⼯作,更加专注于业务逻辑。
(2)约定优于配置
Convention over confifiguration,是⼀种由SpringBoot本身来配置⽬标结构,由开发者在结构中添加信息的软件设计范式。这⼀特点虽降低了部分灵活性,增加了BUG定位的复杂性,但减少了开发⼈员需要做出决定的数量,同时减少了⼤量的XML配置,并且可以将代码编译、测试和打包等⼯作⾃动化。

5.说一下SpringBoot的自动装配流程?

  • 说到Springboot自动装配流程那就离不开,Springboot的核心注解 @SpringbootApplication,这是个复合注解。有以下的注解组成:
    @EnbaleAutoConfiguration自动装配注解,Springboot能够轻松的继承其它第三方框架就是靠这个注解。比如你自己写了一个JDBC的框架想要集成进来,就需要这个注解。
    @ComponentScan注解,主要的工作是扫描被@Service、@Controller等注解备注的类或者是方法。扫描之后会通知Springboot框架生成一个对象。依赖注入的bean就是靠这个注解扫描的。
  • 上面提到了@EnbaleAutoConfiguration注解,这也是个复合注解。有以下注解组成:
    @Import注解导入的是一个Java类EnbaleAutoConfigurationImportSelector.class。导入配置。
    EnbaleAutoConfigurationImportSelector,这是个自动配置导入选择器,它的作用就按照约定来配置选择器,这个规定就是在META-INF 下的Spring.factories中,根据自己的需求去选择。这就是Springboot的一个特点–约定大于配置。
  • EnbaleAutoConfigurationImportSelector继承了AutoConfigurationImportSelector类,类里面有个方法:
    selectImports方法,这个方法里面调用了
List<String> configurations = this.getCandidateConfigurations(annotationMetadata, attributes);
  • getCandidateConfigurations方法中调用了loadFactoryNames方法这个方法里面就详细说明了从哪获取到的需要加载的配置项。源码如下:
public static List<String> loadFactoryNames(Class<?> factoryClass, ClassLoader classLoader) {
    String factoryClassName = factoryClass.getName();
    try {
        Enumeration<URL> urls = classLoader != null ? classLoader.getResources("META-INF/spring.factories") : ClassLoader.getSystemResources("META-INF/spring.factories");
        ArrayList result = new ArrayList();
        while(urls.hasMoreElements()) {
            URL url = (URL)urls.nextElement();
            Properties properties = PropertiesLoaderUtils.loadProperties(new UrlResource(url));
            String factoryClassNames = properties.getProperty(factoryClassName);
            result.addAll(Arrays.asList(StringUtils.commaDelimitedListToStringArray(factoryClassNames)));
        }
        return result;
    } catch (IOException var8) {
        throw new IllegalArgumentException("Unable to load [" + factoryClass.getName() + "] factories from location [" + "META-INF/spring.factories" + "]", var8);
    }
}

SpringBoot1.5版本以后自动装配图解:
在这里插入图片描述
SpringBoot1.5之前:
在这里插入图片描述

6.说下什么是 Bean?

Bean 只是普通的 Java 对象。在 Spring Boot 上下文中,它们被视为 Java 对象 + 在应用程序启动时自动初始化并由 Spring IOC 容器管理的对象。我们有“@Bean”注解来实现这一点。

7.什么是 CSRF 攻击?如何避免?

在CSRF攻击中,攻击者试图利用用户的身份进行非授权的操作,通过欺骗用户在登录状态下执行恶意操作,而无需其明确的授权。

  • 使用CSRF令牌:为每个用户会话生成一个随机的CSRF令牌,并将其嵌入到表单中或包含在请求头中。服务器在接收请求时验证CSRF令牌是否与用户会话匹配,如果不匹配则拒绝请求。
  • 检查Referer头:服务器可以检查请求的Referer头部,确保请求来源于合法的网站。但这不是完全可靠的方法,因为有些浏览器可能不会发送Referer头,或者攻击者可以伪造Referer头。
  • 同源策略(Same-Origin Policy):Web浏览器实施了同源策略,限制了跨域请求。因此,确保敏感操作只能从特定域或子域进行访问,以减少跨站点请求伪造的风险。

8. Spring Boot 的配置文件有哪几种格式?它们有什么区别?

主要有.properties.yml格式,它们的区别主要是书写格式不同。另外,.yml 格式不支持 @PropertySource 注解导入配置。

9.Spring Boot 可以兼容老 Spring 项目吗?

可以兼容,使用 @ImportResource 注解导入老 Spring 项目配置文件。

10.你如何理解 Spring Boot 配置加载顺序?

Spring Boot配置加载顺序优先级是:propertiese文件、YAML文件、系统环境变量、命令行参数。

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

Tomcat、Jetty、Undertow。

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

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

相关文章

python ToastNotifier TypeError got Nonetype

这个错误没什么影响&#xff0c;只是在通知结束后会抛出 如果你实在不爽&#xff0c;办法如下&#xff1a; 找到"<你的python安装路径>\Lib\site-packages\win10toast"&#xff0c;里面应该有__main__.py和__init__.py两个文件&#xff0c;打开__init__.py 找到…

人工智能(AI)在产生新创意方面有多出色?

传统智慧一直不太擅长此道。发现新的创业机会、为未满足的需求提供解决方案&#xff0c;以及为新公司命名都是非结构化的任务&#xff0c;似乎不适合由算法来完成。然而&#xff0c;人工智能的最新进展——特别是像ChatGPT这样的大语言模型的出现——正在挑战这种假定。 我们教…

【ES6知识】Promise 对象

文章目录 1.1 概述1.2 静态方法1.3 实例方法1.4 Promise 拒绝事件 1.1 概述 Promise 对象用于表示一个异步操作的最终完成&#xff08;或失败&#xff09;及其结果值。是异步编程的一种解决方案&#xff08;可以解决回调地狱问题&#xff09;。 一个 Promise 对象代表一个在这…

Python实用技术——爬虫(二):爬虫需要使用的库

一&#xff0c;Requests库 1&#xff0c;主要使用方法&#xff1a; 1&#xff09;get&#xff08;&#xff09;方法&#xff1a; 这个Response对象中包含爬虫返回的内容。 除了request方法是基础方法外&#xff0c;其他都是通过调用request方法来实现的。 所以&#xff0c;我…

[React] React高阶组件(HOC)

文章目录 1.Hoc介绍2.几种包装强化组件的方式2.1 mixin模式2.2 extends继承模式2.3 HOC模式2.4 自定义hooks模式 3.高阶组件产生初衷4.高阶组件使用和编写结构4.1 装饰器模式和函数包裹模式4.2 嵌套HOC 5.两种不同的高阶组件5.1 正向的属性代理5.2 反向的继承 6.如何编写高阶组…

使用 Express 设置 GraphQL

使用 Express 设置 GraphQL 在本文中&#xff0c;我们将探讨如何在 Node.js 中设置 Express.js 和 GraphQL。另外&#xff0c;本文还将分享一些基本技巧&#xff0c;以确保我们的服务器已准备好投入实际使用&#xff01; 什么是 GraphQL GraphQL 是 API 的查询语言&#xff…

网络爬虫——urllib(1)

前言&#x1f36d; ❤️❤️❤️网络爬虫专栏更新中&#xff0c;各位大佬觉得写得不错&#xff0c;支持一下&#xff0c;感谢了&#xff01;❤️❤️❤️ 前篇简单介绍了什么是网络爬虫及相关概念&#xff0c;这篇开始讲解爬虫中的第一个库——urllib。 urllib&#x1f36d; …

Windows安装CMake详细教程(附学习资料)

CMake是一个跨平台的开源构建工具&#xff0c;用于自动化管理C项目的构建过程。本教程旨在向初学者介绍如何在Windows操作系统上安装CMake&#xff0c;并提供详细的步骤指导&#xff0c;帮助您顺利开始使用这个强大的工具。 学习资料在文末~ 步骤1&#xff1a;下载CMake安装程…

SW利用点光源来校核

先要建立坐标系&#xff0c;然后查这个坐标系的绝对坐标 然后删除其他光源&#xff0c;把环境光源降低最小 最后添加点光源&#xff0c;位置在之前查的坐标点

在Windbg中设置断点追踪打开软件远程调试开关的模块

目录 1、Windbg动态调试 2、在Windbg中设置断点 2.1、在函数入口处设置断点 2.2、在函数内部某一行上设置断点 3、设置断点跟踪对打开远程调试开关接口的调用 3.1、编写演示代码 3.2、在Windbg中设置调用SetRemoteDebugOn接口的断点进行跟踪 4、最后 VC常用功能开发汇总…

线上Vue项目访问其他服务器接口(宝塔平台配置解决)

前端本地解决跨域问题非常简单&#xff0c;配置代理即可&#xff0c;线上需要配置nginx&#xff0c;宝塔给我们更简单的配置方式&#xff1a;反向代理。 登录进宝塔页面&#xff0c;选择网站&#xff0c;点击网站名&#xff0c;选择反向代理 点击添加反向代理 注意&#xff…

基于Springboot实现餐厅点餐系统演示【项目源码+论文说明】分享

基于Springboot实现餐厅点餐系统演示 摘要 21世纪的今天&#xff0c;随着社会的不断发展与进步&#xff0c;人们对于信息科学化的认识&#xff0c;已由低层次向高层次发展&#xff0c;由原来的感性认识向理性认识提高&#xff0c;管理工作的重要性已逐渐被人们所认识&#xff…

resources(static与templates)

static "static"目录用于存放静态资源文件&#xff0c;例如HTML、CSS、JavaScript、图像等。 springboot整合了springmvc的拦截功能。拦截了所有的请求。默认放行的资源是&#xff1a;resources/static/ 目录下所有静态资源。&#xff08;不走controller控制器就能…

【开发篇】十一、SpringBoot缓存底层实现技术的切换为Ehcache、Redis、Memcached

文章目录 0、补充&#xff1a;数据淘汰策略1、切换为Ehcache2、切换为Redis3、切换为memcached--安装与启停4、切换为memcached--整合 SpringBoot提供了缓存的统一整合接口&#xff0c;方便缓存技术的开发与管理&#xff1a; GenericJCacheEhcacheHazelcastInfinispanCouchbase…

《视觉 SLAM 十四讲》V2 ——第3讲

关于本笔记的说明&#xff1a; 最好跟着 原书 整理个人笔记&#xff0c;他人笔记仅适合参考部分内容。 ———————— B站链接 高翔博客链接 百度网盘链接&#xff1a;https://pan.baidu.com/s/1VsrueNrdqmzTvh-IlFBr9Q 提取码&#xff1a;vfhe github源码链接V2 《视觉…

OpenCV读取图像时按照BGR的顺序HWC排列,PyTorch按照RGB的顺序CHW排列

OpenCV读取RGB图像 在OpenCV中&#xff0c;读取的图片默认是HWC格式&#xff0c;即按照高度、宽度和通道数的顺序排列图像尺寸的格式。我们看最后一个维度是C&#xff0c;因此最小颗粒度是C。 例如&#xff0c;一张形状为2562563的RGB图像&#xff0c;在OpenCV中读取后的格式…

阿里云服务器方升架构、自研硬件、AliFlash技术创新

阿里云服务器技术创新&#xff1a;服务器方升架构及自研硬件、自研存储硬件AliFlash和阿里云异构计算加速平台&#xff0c;阿里云百科分享阿里云服务器有哪些技术创新&#xff1a; 目录 服务器技术创新 服务器方升架构及自研硬件 自研存储硬件AliFlash 阿里云异构计算加速…

进入k8s下mysql docker容器,设置慢查询开关

服务器账号信息&#xff1a;wps/kingsoft 进入mysql容器&#xff1a; kc exec -ti -n kube-public mysql-0 -- bash 访问数据库&#xff1a; mysql -h10.13.83.171 -uhuangweiheng -phuangweiheng_password; 数据库超管&#xff1a;root/wpsepmysql sudo service mysql r…

QQ农场怀旧版搭建(附带搭建完成示例)

QQ农场搭建 示例均在宝塔面板搭建搭建完成网站,欢迎━(&#xff40;∀)ノ亻!大家种种菜 http://farm.dreamlove.top/如果不出意外应该会一直续费下去,毕竟linux服务器便宜很多~ 所需依赖 mysql 5.5 php 5.4 nginx 1.22下载农场文件并安装好了依赖 下载地址1:https://cloudr…

Cloudera Manager-6.2.0安装文档

环境准备 安装包地址 链接&#xff1a;https://pan.baidu.com/s/1QrLsXynmopqoZhDkoIAihg 提取码&#xff1a;kaoi 虚拟机建议配置 至少3台节点&#xff0c;server节点安装cloudera server服务和mysql服务 server节点 ​ 内存&#xff1a;3GB以上 ​ 存储&#xff1a;4…