几道有关spring boot 的面试题

面试题1:什么是Spring Boot?它有哪些主要特点?

答:Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。使用Spring Boot可以非常快速地开发出生产级别的Spring框架应用程序。

Spring Boot的主要优点包括:

  • 创建独立的Spring应用程序
  • 内嵌Tomcat,Jetty或Undertow直接运行
  • 提供opinionated ‘starter’依赖项简化构建配置
  • 自动配置Spring以及第三方库
  • 提供生产级别的监控、健康检查和外部化配置
  • 无代码生成、无需编写XML

面试题2:Spring Boot Starter是什么?你使用过哪些Spring Boot Starter?

答:Spring Boot Starter是一组方便使用的依赖关系描述符,可以包含在Spring Boot应用程序中。这些依赖关系描述符可以一站式添加所需的所有Spring和相关技术,而无需查找示例代码并将其拷贝到项目中。

一些常用的Spring Boot Starter包括:

  • spring-boot-starter-web - 用于构建Web应用程序,使用Tomcat作为默认嵌入式容器
  • spring-boot-starter-data-jpa - 用于使用Spring Data JPA与关系型数据库交互
  • spring-boot-starter-security - 用于使用Spring Security添加安全性功能
  • spring-boot-starter-test - 用于使用Junit、Hamcrest和Mockito进行测试
  • spring-boot-starter-actuator - 用于添加生产级监控和度量的功能

我在项目中使用过spring-boot-starter-web、spring-boot-starter-data-jpa、spring-boot-starter-security等。

面试题3:如何在Spring Boot应用程序中实现全局异常处理?

答:在Spring Boot中有几种方式可以实现全局异常处理:

  1. 通过@ControllerAdvice注解定义一个全局异常处理类,该类可以包含一些用@ExceptionHandler注解的方法来处理特定异常。

  2. 实现Spring的HandlerExceptionResolver接口,并将自定义异常处理器添加到应用程序上下文。

  3. @RestControllerAdvice注解可以用于创建一个全局异常处理组件,该组件适用于所有使用@RequestMapping注解的控制器。

下面是一个使用@RestControllerAdvice的示例:

@RestControllerAdvice
public class GlobalExceptionHandler {@ExceptionHandler(value = Exception.class)public ResponseEntity<ErrorInfo> defaultErrorHandler(Exception e) {// 处理异常,返回ErrorInfo}@ExceptionHandler(value = {NullPointerException.class, IndexOutOfBoundsException.class})public ResponseEntity<ErrorInfo> specialErrorHandler(Exception e) {  // 处理特定异常}
}

面试题4:如何在Spring Boot中实现定时任务?

答:Spring Boot提供几种不同的方式来实现定时任务:

  1. 使用Spring的@Scheduled注解,可以将其添加到任何Spring管理的Bean的方法上。

  2. 使用@EnableScheduling注解启用计划任务,然后添加@Scheduled注解。

  3. 实现Spring TaskExecutor接口的自定义线程池,进行更细粒度的执行控制。

  4. 使用Spring Boot提供的集成Quartz Scheduler,进行基于Cron表达式的计划任务。

下面是一个使用@Scheduled注解的简单示例:

@Component
public class ScheduledTasks {@Scheduled(fixedRate = 1000)public void scheduleTask() {// 定时任务逻辑}
}

面试题5:如何实现异步调用在Spring Boot应用程序中?

答:Spring Boot提供以下几种方式来实现异步调用:

  1. 使用@Async注解,可以在任何Spring Bean方法上使用,该方法将异步执行。

  2. 使用@EnableAsync注解启用异步调用功能,配合@Async注解使用。

  3. 实现Java的Callable接口,在其中封装异步执行逻辑,然后提交给Spring的TaskExecutor。

  4. 使用Spring的@AsyncResult注解返回一个异步执行的结果。

  5. 使用DeferredResult封装异步执行的结果。

下面是一个使@Async注解的示例:

@Service
public class AsyncService {@Asyncpublic void asyncMethod() {// 执行异步逻辑} 
}

调用方:

@Autowired
private AsyncService service;service.asyncMethod(); // 此方法会异步执行

面试题6:Spring Boot Actuator是什么?它有哪些主要功能?

答:Spring Boot Actuator是Spring Boot提供的一个子项目,提供了一系列用于监控和管理Spring Boot应用程序的REST端点。使用Actuator可以实时查看应用程序运行时的内部状态和统计信息。

Actuator主要功能包括:

  • 应用程序健康检查 - 提供应用程序健康状态、磁盘空间、数据库连接等信息。

  • 指标监控 - 运行时指标如内存用量、HTTP请求计数等。

  • 外部化配置 - 查看和更新应用配置信息。

  • 审计 - 审计应用访问日志,错误日志等。

  • 异步方法监控 - 监控异步方法的执行信息。

  • 集成Graphite,Zipkin等外部监控系统。

要使用Actuator,需要在项目中添加spring-boot-starter-actuator依赖。

面试题7:如何在Spring Boot中实现缓存?

答:Spring Boot提供了多种缓存实现,可以通过starter依赖项轻松集成:

  1. 使用spring-boot-starter-cache集成Spring Cache,通过@EnableCaching和@Cacheable等注解实现缓存。

  2. 使用spring-boot-starter-data-redis集成Redis,通过Spring Data Redis和Lettuce客户端作为缓存提供者。

  3. 使用spring-boot-starter-data-couchbase集成Couchbase作为缓存。

  4. 使用spring-boot-starter-hazelcast集成Hazelcast作为分布式缓存实现。

  5. 使用spring-boot-starter-jcache集成JSR-107(JCache)标准的缓存提供者。

下面是一个使用Spring Cache的示例:

@Service
@CacheConfig(cacheNames="books") 
public class BookService {@Cacheablepublic Book getBook(ISBN isbn) {// 缓存逻辑}
}

面试题8:如何在Spring Boot中集成Swagger来实现API文档?

答:可以通过以下步骤集成Swagger生成Spring Boot应用API文档:

  1. 添加Swagger依赖springfox-swagger2、springfox-swagger-ui。

  2. 创建Swagger配置类,使用@EnableSwagger2注解启用Swagger。

  3. 使用Swagger注解如@Api、@ApiOperation等注解Controller类和方法。

  4. 访问/swagger-ui.html查看自动生成的API文档。

  5. 可以通过Swagger配置自定义文档信息,如标题、描述、版本等。

下面是一个示例配置类:

@Configuration
@EnableSwagger2
public class SwaggerConfig {@Beanpublic Docket api() {return new Docket(DocumentationType.SWAGGER_2).select().apis(RequestHandlerSelectors.any()).paths(PathSelectors.any()).build();}
}

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

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

相关文章

13.3 【Linux】主机的细部权限规划:ACL 的使用

13.3.1 什么是 ACL 与如何支持启动 ACL ACL 是 Access Control List 的缩写&#xff0c;主要的目的是在提供传统的 owner,group,others 的read,write,execute 权限之外的细部权限设置。ACL 可以针对单一使用者&#xff0c;单一文件或目录来进行 r,w,x 的权限规范&#xff0c;对…

使用rknn-toolkit2把YOLOV5部署到OK3588上

使用rknn-toolkit2把YOLOV5部署到OK3588上 虚拟环境搭建软件包安装在PC机上运行yolov5目标检测 虚拟环境搭建 首先在PC的ubuntu系统安装虚拟环境&#xff1a; 我的服务器是ubuntu18.04版本&#xff0c;所以安装python3.6 conda create -n ok3588 python3.6 需要键盘输入y&…

蓝桥杯专题-真题版含答案-【垒骰子_动态规划】【抽签】【平方怪圈】【凑算式】

点击跳转专栏>Unity3D特效百例点击跳转专栏>案例项目实战源码点击跳转专栏>游戏脚本-辅助自动化点击跳转专栏>Android控件全解手册点击跳转专栏>Scratch编程案例点击跳转>软考全系列点击跳转>蓝桥系列 &#x1f449;关于作者 专注于Android/Unity和各种游…

上传了ipa但iTunes Connect没有构建版本问题

转载&#xff1a;上传了ipa但iTunes Connect没有构建版本问题 目录 一、首先登录iTunes Connect 后台 查看ipa构建情况 二、错误反馈邮件示例及说明 证书类型不正确 Invalid App Store Icon 三、修改相关错误后重新打包版本号的修改 xcode打包导出ipa 第一步&#xff1…

三层交换基础实验

要求: 1.IP地址基于192.168.1.0/24划分 2.使用OSPF 3.使用DHCP 4.全网可达 1.配置二层交换 SW 3 <Huawei>system-view [Huawei]sysname SW3 [SW3]interface GigabitEthernet 0/0/2 [SW3-GigabitEthernet0/0/2]port link-type access [SW3-GigabitEthernet0/0/2]por…

虚拟机VMware,linux,centos,如何将项目部署到服务器上面

vmware 是安装虚拟机的软件&#xff0c;centos是系统&#xff0c;linux是系统内核 将本地项目上线到服务器上面&#xff0c;如何实现呢&#xff1f; 准备好服务器&#xff0c;可以选择阿里云服务器 首先需要搭建环境&#xff0c;运行的主要环境是jdktomcatmysql; 通过远程连接…

jQueryAPI

文章目录 1.jQuery 选择器1.1 jQuery 基础选择器1.2 jQuery 层级选择器1.3 隐式迭代1.4 jQuery 筛选选择器1.5 jQuery 筛选方法1.6 jQuery 里面的排他思想1.7 链式编程 2.jQuery 样式操作2.1 操作 css 方法2.2 设置类样式方法2.3 类操作与className区别 3.jQuery 效果3.1 显示隐…

【C++ OJ练习】9.最小栈

1.题目链接 力扣 2.解题思路 利用两个栈实现 3.代码 class MinStack { public:MinStack() {//两个栈来实现}void push(int val) {_st.push(val);if (_minst.empty() || _minst.top() > val){_minst.push(val);}}void pop() {if (_st.top() _minst.top())_minst.pop();…

Visual modflow Flex地下水数值模拟及参数优化、抽水实验设计与处理、复杂的饱和/非饱和地下水流分析

主要围绕目前应用较为广泛的Visual Modflow Flex 系列版本开展&#xff0c;结合具体应用场景&#xff0c;实例讲解软件的全流程应用过程&#xff0c;包括数据处理分析、数值模型构建以及模拟结果的输出等。通过建模篇、优化篇、真实案例篇、复杂应用篇为内容主线&#xff0c;全…

登录和注册表单的11个HTML最佳实践

原文&#xff1a;11 HTML best practices for login & sign-up forms 原作者&#xff1a;Andrey Sitnik 翻译已获原文作者许可&#xff0c;禁止转载和商用 大多数网站都有登录或注册表单;它们是业务转换的关键部分。然而&#xff0c;即使是流行的站点也没有实现本文中提到的…

ubuntu 18.04 磁盘太满无法进入系统

安装了一个压缩包&#xff0c;装了一半提示磁盘空间少导致安装失败。我也没在意&#xff0c;退出虚拟机打算扩展硬盘。等我在虚拟机设置中完成扩展操作&#xff0c;准备进入虚拟机内部进行操作时&#xff0c;发现登录不进去了 shift 登入GUN GRUB设置项的问题 网上都是在开机…

Yarn与Zookeeper学习

YARN学习 1.YARN是什么&#xff1f; yarn 分配运行资源 mapReduce的运行平台 2.YARN运行过程&#xff1a; 客户端与ResourceManager交互&#xff0c;生成临时配置文件(Application)ResourceManager根据Application信息生成Task然后生成MapReduceApplicationMaster(简称AM)AM…

如何解决创建vue项目后没有webpack.config.js(vue.config.js)文件

◼️ webpack.config.js文件没有的原因 Vue 项目中 vue.config.js 文件就等同于 webpack 的 webpack.config.js。 vue-cli3 之后创建的时候并不会自动创建 vue.config.js&#xff0c;因为这个是个可选项&#xff0c;所以一般都是需要修改 webpack 的时候才会自己创建一个 vue…

“5G+工业互联网”20个典型应用场景

目录 1、工业研发设计&#xff08;2个应用场景&#xff09; 1&#xff09;协同研发设计 2&#xff09;生产单元模拟 2、生产运行&#xff08;5个应用场景&#xff09; 1&#xff09;远程设备操控 2&#xff09;设备协同作业 3&#xff09;精准动态作业 4&#xff09;柔…

dbus-send和dbus-monitor命令详解

1. 概述 D-Bus 是 Linux 上的一种进程间通信方式&#xff0c;内部使用 socket 技术实现。是 freedesktop.org 专案的一部分&#xff0c;其设计目的是使Linux桌面环境&#xff08;如GNOME与KDE等&#xff09;提供的服务标准化。 应用程序可以在总线上注册 D-Bus 服务&#xff…

信号——进程间最古老的通信方式之一

文章目录 信号信号的5种默认处理动作查看core文件中的错误信息常见函数killraiseabortalarmsetitime 信号 SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAPSIGABRT 7) SIGBUS 8) SIGFPE 9) SIGKILL 10) SIGUSR1SIGSEGV 12) SIGUSR2 13) SIGPIPE 14) SIGALRM 15) SIGTERMSIGS…

R语言 PCA筛选变量

#PCA-筛选变量 X <- data[,2:415] pca <- prcomp(X, center TRUE, scale. TRUE) # 进行主成分分析 summary(pca) # 查看各个主成分的解释方差比例 library(factoextra) #碎石图依赖-fviz fviz_eig(pca,addlabelsT) #碎石图 X_selected <- pca$x[,1:20] # 选择前n个主…

饮用水、地下水除砷的方法——砷吸附树脂

砷&#xff08;As&#xff09;为非人体必需元素&#xff0c;既不溶解于水又不溶解于酸&#xff0c;在自然界有三价无机态 As(III)、五价无机态 As(V)以及有机砷MMA(甲基胂酸)、DMA(二甲基胂酸)、TMA(三甲基胂酸)等。 砷在水体中主要以三价和五价的无机酸形式存在&#xff0c;三…

CDN、P2P、PCDN的区别是什么

本篇文章为大家介绍一下与网络加速有关的几个重要概念&#xff0c;一起了解一下CDN,P2P和PCDN究竟是什么吧&#xff01; 1. CDN CDN即Content Delivery Network&#xff0c;中文全称为内容分发网络。 如果内容离用户远&#xff0c;用户可能无法获得及时的响应&#xff0c;那…

读kafka生产端源码,窥kafka设计之道(下)

背景 在上一篇文章《读kafka生产端源码&#xff0c;窥kafka设计之道&#xff08;上&#xff09;》 留下了kafka设计上比较优秀的一个点&#xff1b;内存的循环使用。本篇文章准备盘盘它。 好奇 为什么 kafka减少发送消息时向JVM频繁申请内存&#xff0c;就可以降低JVM GC的执…