springboot做网站_面试中必须掌握的15道《Spring Boot 高频面试题》

news/2024/5/17 0:37:19/文章来源:https://blog.csdn.net/weixin_39673601/article/details/112382702

做 Java 开发,没有人敢小觑 Spring Boot 的重要性,现在出去面试,无论多小的公司 or 项目,都要跟你扯一扯 Spring Boot,扯一扯微服务,不会?没用过? Sorry ,我们不合适!

今天就给大家整理了 15 道高频 Spring Boot 面试题,希望能够帮助到刚刚走出校门的小伙伴以及准备寻找新的工作机会的小伙伴。

一、什么是 Spring Boot ?

e47d772e6cfbc818084e71303558d896.png

传统的 SSM/SSH 框架组合配置繁琐臃肿,不同项目有很多重复、模板化的配置,严重降低了 Java 工程师的开发效率,而 Spring Boot 可以轻松创建基于 Spring 的、可以独立运行的、生产级的应用程序。通过对 Spring 家族和一些第三方库提供一系列自动化配置的 Starter,来使得开发快速搭建一个基于 Spring 的应用程序。

Spring Boot 让日益臃肿的 Java 代码又重回简洁。在配合 Spring Cloud 使用时,还可以发挥更大的威力。

二、Spring Boot 有哪些特点 ?

576eee842510d9610d45bd35cfcbedac.png

Spring Boot 主要有如下特点:

(一)、为 Spring 开发提供一个更快、更广泛的入门体验。

(二)、开箱即用,远离繁琐的配置。

(三)、提供了一系列大型项目通用的非业务性功能,例如:内嵌服务器、安全管理、运行数据监控、运行状况检查和外部化配置等。

(四)、绝对没有代码生成,也不需要XML配置。

三、Spring Boot 中的 starter 到底是什么 ?

首先,这个 Starter 并非什么新的技术点,基本上还是基于 Spring 已有功能来实现的。首先它提供了一个自动化配置类,一般命名为 XXXAutoConfiguration ,在这个配置类中通过条件注解来决定一个配置是否生效(条件注解就是 Spring 中原本就有的),然后它还会提供一系列的默认配置,也允许开发者根据实际情况自定义相关配置,然后通过类型安全的属性注入将这些配置属性注入进来,新注入的属性会代替掉默认属性。正因为如此,很多第三方框架,我们只需要引入依赖就可以直接使用了。

当然,开发者也可以自定义 Starter,自定义 Starter 可以参考:徒手撸一个 Spring Boot 中的 Starter ,解密自动化配置黑魔法!。

四、spring-boot-starter-parent 有什么用 ?

d9c9efd0cca8296a6e64f54b39f0250e.png

我们都知道,新创建一个 Spring Boot 项目,默认都是有 parent 的,这个 parent 就是 spring-boot-starter-parent ,spring-boot-starter-parent 主要有如下作用:

(一)、定义了 Java 编译版本为 1.8 。

(二)、使用 UTF-8 格式编码。

(三)、继承自 spring-boot-dependencies,这个里边定义了依赖的版本,也正是因为继承了这个依赖,所以我们在写依赖时才不需要写版本号。

(四)、执行打包操作的配置。

(五)、自动化的资源过滤。

(六)、自动化的插件配置。

(七)、针对 application.properties 和 application.yml 的资源过滤,包括通过 profile 定义的不同环境的配置文件,例如 application-dev.properties 和 application-dev.yml。

关于这个问题,读者可以参考:你真的理解 Spring Boot 项目中的 parent 吗?

五、YAML 配置的优势在哪里 ?

4d016d72099199361c35598a137722bf.png

YAML 现在可以算是非常流行的一种配置文件格式了,无论是前端还是后端,都可以见到 YAML 配置。那么 YAML 配置和传统的 properties 配置相比到底有哪些优势呢?

(一)、配置有序,在一些特殊的场景下,配置有序很关键

(二)、支持数组,数组中的元素可以是基本数据类型也可以是对象

(三)、简洁

相比 properties 配置文件,YAML 还有一个缺点,就是不支持 @PropertySource 注解导入自定义的 YAML 配置。

关于 YAML 配置,要是大家还不熟悉,可以参考: Spring Boot 中的 yaml 配置简介

六、Spring Boot 中如何解决跨域问题 ?

8d8853467150d89d2c37e7426b439c32.png

跨域可以在前端通过 JSONP 来解决,但是 JSONP 只可以发送 GET 请求,无法发送其他类型的请求,在 RESTful 风格的应用中,就显得非常鸡肋,因此我们推荐在后端通过 (CORS,Cross-origin resource sharing) 来解决跨域问题。这种解决方案并非 Spring Boot 特有的,在传统的 SSM 框架中,就可以通过 CORS 来解决跨域问题,只不过之前我们是在 XML 文件中配置 CORS ,现在则是通过 @CrossOrigin 注解来解决跨域问题。关于 CORS ,小伙伴们可以参考:Spring Boot 中通过 CORS 解决跨域问题

七、比较一下 Spring Security 和 Shiro 各自的优缺点 ?

ff6008f4fbb2e5de191b8779e5cf346d.png

由于 Spring Boot 官方提供了大量的非常方便的开箱即用的 Starter ,包括 Spring Security 的 Starter ,使得在 Spring Boot 中使用 Spring Security 变得更加容易,甚至只需要添加一个依赖就可以保护所有的接口,所以,如果是 Spring Boot 项目,一般选择 Spring Security 。当然这只是一个建议的组合,单纯从技术上来说,无论怎么组合,都是没有问题的。Shiro 和 Spring Security 相比,主要有如下一些特点:

(一)、Spring Security 是一个重量级的安全管理框架;Shiro 则是一个轻量级的安全管理框架

(二)、Spring Security 概念复杂,配置繁琐;Shiro 概念简单、配置简单

(三)、Spring Security 功能强大;Shiro 功能简单

八、微服务中如何实现 session 共享 ?

00d3d51422f1d9d3e0813fd1631ed639.png

在微服务中,一个完整的项目被拆分成多个不相同的独立的服务,各个服务独立部署在不同的服务器上,各自的 session 被从物理空间上隔离开了,但是经常,我们需要在不同微服务之间共享 session ,常见的方案就是 Spring Session + Redis 来实现 session 共享。将所有微服务的 session 统一保存在 Redis 上,当各个微服务对 session 有相关的读写操作时,都去操作 Redis 上的 session 。这样就实现了 session 共享,Spring Session 基于 Spring 中的代理过滤器实现,使得 session 的同步操作对开发人员而言是透明的,非常简便。 session 共享大家可以参考:Spring Boot 一个依赖搞定 session 共享,没有比这更简单的方案了!

九、Spring Boot 如何实现热部署 ?

64a8769b3c9d6ad35f35403d594cafc1.png

Spring Boot 实现热部署其实很容易,引入 devtools 依赖即可,这样当编译文件发生变化时,Spring Boot 就会自动重启。在 Eclipse 中,用户按下保存按键,就会自动编译进而重启 Spring Boot,IDEA 中由于是自动保存的,自动保存时并未编译,所以需要开发者按下 Ctrl+F9 进行编译,编译完成后,项目就自动重启了。

如果仅仅只是页面模板发生变化,Java 类并未发生变化,此时可以不用重启 Spring Boot,使用 LiveReload 插件就可以轻松实现热部署。

十、Spring Boot 中如何实现定时任务 ?

6f044940473524b2213d191664ab0ae3.png

定时任务也是一个常见的需求,Spring Boot 中对于定时任务的支持主要还是来自 Spring 框架。

在 Spring Boot 中使用定时任务主要有两种不同的方式,一个就是使用 Spring 中的 @Scheduled 注解,另一个则是使用第三方框架 Quartz。

使用 Spring 中的 @Scheduled 的方式主要通过 @Scheduled 注解来实现。

使用 Quartz ,则按照 Quartz 的方式,定义 Job 和 Trigger 即可。

关于定时任务这一块,大家可以参考:Spring Boot 中实现定时任务的两种方式!

十一、前后端分离,如何维护接口文档 ?

e2dc3cf359fc8845ea0f73fe788f8cc4.png

前后端分离开发日益流行,大部分情况下,我们都是通过 Spring Boot 做前后端分离开发,前后端分离一定会有接口文档,不然会前后端会深深陷入到扯皮中。一个比较笨的方法就是使用 word 或者 md 来维护接口文档,但是效率太低,接口一变,所有人手上的文档都得变。在 Spring Boot 中,这个问题常见的解决方案是 Swagger ,使用 Swagger 我们可以快速生成一个接口文档网站,接口一旦发生变化,文档就会自动更新,所有开发工程师访问这一个在线网站就可以获取到最新的接口文档,非常方便。关于 Swagger 的用法,大家可以参考:SpringBoot整合Swagger2,再也不用维护接口文档了!

十二、什么是 Spring Data ?

65576e1a609d3a1bfab6b9f7482dc658.png

Spring Data 是 Spring 的一个子项目。用于简化数据库访问,支持NoSQL 和 关系数据存储。其主要目标是使数据库的访问变得方便快捷。Spring Data 具有如下特点:

(一)、SpringData 项目支持 NoSQL 存储:

(二)、MongoDB (文档数据库)

(三)、Neo4j(图形数据库)

(四)、Redis(键/值存储)

(五)、Hbase(列族数据库)

SpringData 项目所支持的关系数据存储技术:

(一)、JDBC

(二)、JPA

Spring Data Jpa 致力于减少数据访问层 (DAO) 的开发量. 开发者唯一要做的,就是声明持久层的接口,其他都交给 Spring Data JPA 来帮你完成!Spring Data JPA 通过规范方法的名字,根据符合规范的名字来确定方法需要实现什么样的逻辑。

十三、Spring Boot 是否可以使用 XML 配置 ?

13aaa29ddf0e2b7cbe1b68661422a65c.png

Spring Boot 推荐使用 Java 配置而非 XML 配置,但是 Spring Boot 中也可以使用 XML 配置,通过 @ImportResource 注解可以引入一个 XML 配置。

十四、Spring Boot 打成的 jar 和普通的 jar 有什么区别 ?

cea518c2c5b664296a40a4602a01c4a9.png

Spring Boot 项目最终打包成的 jar 是可执行 jar ,这种 jar 可以直接通过 java -jar xxx.jar 命令来运行,这种 jar 不可以作为普通的 jar 被其他项目依赖,即使依赖了也无法使用其中的类。

Spring Boot 的 jar 无法被其他项目依赖,主要还是他和普通 jar 的结构不同。普通的 jar 包,解压后直接就是包名,包里就是我们的代码,而 Spring Boot 打包成的可执行 jar 解压后,在 BOOT-INFclasses 目录下才是我们的代码,因此无法被直接引用。如果非要引用,可以在 pom.xml 文件中增加配置,将 Spring Boot 项目打包成两个 jar ,一个可执行,一个可引用。

十五、bootstrap.properties 和 application.properties 有何区别 ?

单纯做 Spring Boot 开发,可能不太容易遇到 bootstrap.properties 配置文件,但是在结合 Spring Cloud 时,这个配置就会经常遇到了,特别是在需要加载一些远程配置文件的时侯。

bootstrap.properties 在 application.properties 之前加载,配置在应用程序上下文的引导阶段生效。一般来说我们在 Spring Cloud Config 或者 Nacos 中会用到它。bootstrap.properties 被 Spring ApplicationContext 的父类加载,这个类先于加载 application.properties 的 ApplicatonContext 启动。

当然,前面叙述中的 properties 也可以修改为 yaml 。

好了,本文就说到这里,欢迎小伙伴留言说说你曾经遇到过的 Spring Boot 面试题!

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

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

相关文章

服务器架设了网站还能架设游戏吗,可以在云服务器里架设游戏吗

可以在云服务器里架设游戏吗 内容精选换一换标签是弹性云服务器的标识。为弹性云服务器添加标签,可以方便用户识别和管理拥有的弹性云服务器资源。您可以在创建弹性云服务器时添加标签,也可以在弹性云服务器创建完成后,在云服务器的详情页添加…

javaweb-41:网站注册发送邮件实现

发送带图片及附件的邮件 核心代码: package com.gongyi;import com.sun.mail.util.MailSSLSocketFactory;import javax.activation.DataHandler; import javax.activation.FileDataSource; import javax.mail.*; import javax.mail.internet.InternetAddress; imp…

0基础做网站

1.vscode下载 https://az764295.vo.msecnd.net/stable/784b0177c56c607789f9638da7b6bf3230d47a8c/VSCodeUserSetup-x64-1.71.0.exe 2. vscode安装 3.安装完毕 安装插件 ctrlshiftx 安装liveserver 4. 下载git文件路径 打开终端 altt altN mkdir website 回车 cd website…

《Flash建站技术》系列6-LoadVars数据提交与表单处理

1.LoadVars vs getURL send()getURL有很多的限制,LoadVars则弥补了这一点Flash时间轴脚本:System.useCodepagetrue;signBtn.onReleasefunction(){var formVars:LoadVarsnew LoadVars();formVars.userNamesignForm.userName.text;formVars.userPasssignForm.userPass…

网站架构演变过程-------从传统项目到分布式项目再到微服务

网站架构演变过程 传统项目(单点应用)----》分布式架构 (以项目进行拆分)----》SOA架构(面向服务架构)----》微服务架构 传统项目的架构: 传统项目框架其实就是SSH或SSM,属于单点应用&#x…

推荐12个优秀的 HTML5 网站设计案例欣赏

HTML5 有用很多新特性,网页设计师和开发人员可以使用这些特性制作出更加优秀的网站。这篇文章收集了12个HTML5网站设计案例,让大家感受一下HTML5网站的魅力,一起欣赏。 The Wired Mind Nike Better World Ben The Bodyguard Quentind Analog …

图解大型网站技术架构演变过程!

1、大型网站的特点 高并发,大流量:PV量巨大。即页面浏览量;用户每1次对网站中的每个网页访问均被记录1次。用户对同一页面的多次访问,访问量累计。 高可用:7*24小时不间断服务。 海量数据:需要储存、管理…

用tomcat部署和花生壳内网映射进行远程访问自己电脑上的网站

第一步&#xff1a;将编写好的html页面放在tomcat安装目录Tomcat 6.0\webapps\下[新建个目录如&#xff1a;myhtml]里面。 第二步&#xff1a;在tomcat安装目录[Tomcat 6.0\conf\]下用记事本/其他文本软件打开server.xml文件&#xff0c; 文件末尾</Host>前添加 <Cont…

Python爬虫(三)Beautiful Soup 实战,爬取前程无忧网站

Beautiful Soup介绍 Beautiful Soup提供一些简单的、python式的函数用来处理导航、搜索、修改分析树等功能。Beautiful Soup自动将输入文档转换为Unicode编码&#xff0c;输出文档转换为utf-8编码。Beautiful Soup已成为和lxml、html5lib一样出色的python解释器&#xff0c;为…

ASP.NET MVC5 网站开发实践 - 概述

原文地址为&#xff1a; ASP.NET MVC5 网站开发实践 - 概述前段时间一直在用MVC4写个网站开发的demo&#xff0c;由于刚开始学所有的代码都写在一个项目中&#xff0c;越写越混乱&#xff0c;到后来有些代码自己都理不清了。1月26日晚上在群里跟怒放 他们讨论这个问题&#xff…

SQL学习总结以及学习网站

在寒假期间&#xff0c;也趁着大学最后一段美好的学习时间&#xff0c;来了解MSSQL&#xff0c;Oracle&#xff0c;MySQL等热门的的数据库开发语言&#xff0c;感觉很美妙&#xff08;目前的基础操作部分&#xff0c;挺容易上手的&#xff09; 首先在开始接触SQL Server 时&am…

拜访Go语言中文网站长

大家好&#xff0c;我是飞哥&#xff01;过去的这一年多里&#xff0c;我除了工作以外的主要精力大都放在写公众号里的技术文上了。 不过随着公众号的进步&#xff0c;越来越意识到不应该只顾低头写文章&#xff0c;而是应该抬头看看优秀的人都在做啥。说来也巧&#xff0c;互联…

ASP.NET MVC5 网站开发实践(二) Member区域 - 用户部分(2)用户登录、注销

原文地址为&#xff1a; ASP.NET MVC5 网站开发实践(二) Member区域 - 用户部分&#xff08;2&#xff09;用户登录、注销上次实现了用户注册&#xff0c;这次来实现用户登录&#xff0c;用到IAuthenticationManager的SignOut、SignIn方法和基于声明的标识。最后修改用户注册代…

学用MVC4做网站一:用户登陆1.2

原文地址为&#xff1a; 学用MVC4做网站一:用户登陆1.2一用户 1.1用户注册 1.2用户登陆 首先在Models里添加用户登陆模型类UserLogin&#xff0c;该类只要用用户名&#xff0c;密码和验证码三个字段。 /// <summary>/// 用户登陆模型/// </summary>public class…

提升你网站水平的 jQuery 插件推荐

原文地址为&#xff1a; 提升你网站水平的 jQuery 插件推荐jQuery是一个优秀JavaScript库&#xff0c;它简化了HTML文档遍历&#xff0c;事件处理&#xff0c;动画和Ajax交互。 jQuery的确改变了很多人写JavaScript的方式。如今&#xff0c;有很多现成的jQuery插件可供选择&…

使用C#实现网站用户登录

原文地址为&#xff1a; 使用C#实现网站用户登录我们在写灌水机器人、抓资源机器人和Web网游辅助工具的时候第一步要实现的就是用户登录。那么怎么用C#来模拟一个用户的登录拉&#xff1f;要实现用户的登录&#xff0c;那么首先就必须要了解一般网站中是怎么判断用户是否登录的…

轻量服务器如何退款_wordpress程序搭建网站教程,新手小白如何搭建个人博客?...

导读&#xff1a;最近很多同学在问wordpress搭建教程因为很多的人都不会操作&#xff0c;只有学习过老课程的同学才知道&#xff0c;那么我就出一个详细的教程。(文/王听风)一.购买服务器这里我就以阿里云为列子&#xff1a;1.打开网址(https://www.aliyun.com/product/ecs)云服…

python面试题网站有哪些_扣丁学堂解析Python爬虫工程师面试题汇总

扣丁学堂解析Python爬虫工程师面试题汇总 2018-08-20 11:24:39 1664浏览 今天&#xff0c;扣丁学堂的小编来给大家总结一下Python爬虫的面试技巧&#xff0c;希望给参加Python培训的同学一点儿帮助。1、对__if__name__main的理解陈述 __name__是当前模块名&#xff0c;当模块被…

火狐(Firefox)如何移除add security exception添加的网站

如图&#xff0c;我浏览某些网站时弹出来如下框&#xff0c;为了浏览网页&#xff0c;我点了add exception—confirm security exception。现在我想移除&#xff0c;该如何操作&#xff1f; About Me ..................................................................…

web应用程序和web网站_使用推荐引擎个性化您的Web应用程序

web应用程序和web网站为了在快速发展的全球行业中保持相关性&#xff0c;技术专业人员必须跟踪IT的重大趋势&#xff0c;并找到方法将重要的趋势纳入其公司的技术产品组合中。 这样的趋势之一就是使用推荐引擎来驱动用户探索您的网站或企业的其他产品。 这些引擎根据各种模式向…