SpringBootDay1|面试题

目录

一、springboot框架

1、什么是springboot

2、Spring Boot的主要优点

3、springboot核心注解

4、定义banner(springboot的logo)

5、springboot配置文件

6、springboot 整合 jdbc

二、面试题

1)springmvc的作用

​编辑

2)springmvc的核心组件

3)springmvc的内部执行流程

4)@RequestBody注解的作用

5)mvc架构模式

6)properties和yml配置文件的区别


一、springboot框架

spring(IOC、DI、AOP)
springmvc(mvc架构 属于mvc架构的控制层 ) ----> 使用了spring思想
mybatis (jdbc封装,连接数据库 增删改查)
SSM(spring+springmvc+mybatis) 一堆配置文件

spring.xml---->mybatis.xml---->sqlMapper.xml
springmvc.xml
web.xml
自己配置tomca

1、什么是springboot

其设计目的是用来简化Spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。
Spring Boot 以约定大于配置的核心思想,默认帮我们进行了很多设置,多数 Spring Boot 应用只需要很少的 Spring 配置。同时它集成了大量常用的第三方库配置(例如 Redis、MongoDB、Jpa、RabbitMQ、Quartz 等等),Spring Boot 应用中这些第三方库几乎可以零配置的开箱即用。

2、Spring Boot的主要优点

  • Create stand-alone Spring applications

     创建独立Spring应用

  • Embed Tomcat, Jetty or Undertow directly (no need to deploy WAR files)

     内嵌web服务器

  • Provide opinionated 'starter' dependencies to simplify your build configuration

     自动starter依赖,简化构建配置

  • Automatically configure Spring and 3rd party libraries whenever possible

     自动配置Spring以及第三方功能

  • Provide production-ready features such as metrics, health checks, and externalized configuration

     提供生产级别的监控、健康检查及外部化配置

  • Absolutely no code generation and no requirement for XML configuration

     无代码生成、无需编写XML

  • SpringBoot是整合Spring技术栈的一站式框架,SpringBoot是简化Spring技术栈的快速开发脚手架;

3、springboot核心注解

@SpringBootApplication
是springboot项目的核心注解
是一个组合注解
底层包含很多子注解
@Target({ElementType.TYPE}) 当前注解使用的位置(类上,方法上,参数上)
@Retention(RetentionPolicy.RUNTIME) 保留策略 决定注解的生命周期 编译前 运行前 运行期间
@Documented 文档注解
@Inherited 表示当前注解可以被继承
@SpringBootConfiguration 创建IOC容器
@Configuration 创建IOC容器
@EnableAutoConfiguration springboot自动装配注解(最核心注解)
@AutoConfigurationPackage
@Import({AutoConfigurationImportSelector.class})
@ComponentScan 定义组件扫描的包(默认扫描当前项目启动类所在的包及其子包)

✅ @SpringBootApplication 注解详解

属性/子注解说明
作用是 Spring Boot 项目的核心注解,用于标记项目的启动类(主类),启用自动配置、组件扫描等功能。
使用位置通常标注在启动类上(即包含 main 方法的类)
是否组合注解是,是一个由多个注解组成的“合成注解”

🧩 组成 @SpringBootApplication 的核心子注解

子注解功能说明
@SpringBootConfiguration创建IOC容器表示该类是一个配置类,底层继承自 @Configuration,可以定义 Bean
@Configuration创建IOC容器告诉 Spring 容器这是一个 Java 配置类,相当于 XML 配置文件的作用
@EnableAutoConfigurationSpring Boot 自动装配的核心注解,会根据 classpath 中的依赖自动配置 Bean
@AutoConfigurationPackage将主类所在包及其子包中的 Bean 自动注册到 Spring 容器中(内部通过 @Import 实现)
@ComponentScan自动扫描并注册 Bean,默认扫描当前主类所在的包及其子包
@Import({AutoConfigurationImportSelector.class})导入自动配置类的选择器,决定了哪些自动配置类需要被加载

🔍 元注解(Meta-Annotations)

元注解含义
@Target({ElementType.TYPE})表示该注解只能用于 类级别 上(不能用在方法或参数上)
@Retention(RetentionPolicy.RUNTIME)表示该注解在运行时依然有效,可以通过反射读取
@Documented表示该注解会被包含在 Javadoc 中
@Inherited表示该注解可以被子类继承
package com.hl.springboot1;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
/*
@SpringBootApplication
是springboot项目的核心注解
是一个组合注解
底层包含很多子注解
@Target({ElementType.TYPE}) 当前注解使用的位置(类上,方法上,参数上)
@Retention(RetentionPolicy.RUNTIME) 保留策略 决定注解的生命周期 编译前 运行前 运行期间
@Documented 文档注解
@Inherited 表示当前注解可以被继承
@SpringBootConfiguration 创建IOC容器
@Configuration 创建IOC容器
@EnableAutoConfiguration springboot自动装配注解(最核心注解)
@AutoConfigurationPackage
@Import({AutoConfigurationImportSelector.class})
@ComponentScan 定义组件扫描的包(默认扫描当前项目启动类所在的包及其子包)
*/
@SpringBootApplication
public class Springboot1Application {
public static void main(String[] args) {
SpringApplication.run(Springboot1Application.class, args);
}
}

4、定义banner(springboot的logo)

关于动物的ascii艺术字,自定义Spring Boot 动物 banner下载,各种有意思的banner、ascii图案,还有中文文字banner,作为Spring Boot和终端命令行banner会让项目更有意思。-bootschool.net

5、springboot配置文件

.properties配置文件

key=value

.yml配置文件

使用 : 空格 回车 tab键 进行缩

有多个配置文件,向激活特定配置文件,实现多个环境的切换
application-dev.yml
application-test.yml
application.yml

spring:profiles:active: dev

6、springboot 整合 jdbc

1)引入jar包

<!--mysql-->
<dependency>
<groupId>com.mysql</groupId>
<artifactId>mysql-connector-j</artifactId>
</dependency>
<!--springboot整合jdbc的jar包-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependenc

2)添加mysql连接的配置

application-dev.yml

spring:datasource:driver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://localhost:3306/yan9username: rootpassword: 123456

3)补全包结构,搭建web层和dao层(省略service)

javaBean类

@Data
@NoArgsConstructor
@AllArgsConstructor
public class Dept {
private int deptId;
private String deptName;
private String loc;
}

web层

@RestController
@RequestMapping("/dept")
public class DeptController {
//调用dao层
@Autowired
private DeptDao deptDao;
@RequestMapping("/save")
public int save(Dept dept) {
return deptDao.save(dept);
}
}

dao层

public interface DeptDao {
public int save(Dept dept);
}
@Repository
public class DeptDaoImpl implements DeptDao{
@Autowired
private JdbcTemplate jdbcTemplate;
@Override
public int save(Dept dept) {
//调用jdbcTemplate封装好的方法执行新增
String sql = "insert into dept(dept_name,loc) values(?,?)";
//update 执行增删改
int num = jdbcTemplate.update(sql,dept.getDeptName(),dept.getLoc());
return num;
}
}

4)测试

二、面试题

1)springmvc的作用

Spring MVC 是 Spring 框架中的一个核心模块,专门用于构建 基于 Java 的 Web 应用程序。它遵循 MVC(Model-View-Controller)设计模式,将应用程序分为模型(Model)、视图(View)和控制器(Controller)三层,从而实现代码的解耦和高效协作。

  • springmvc实现的功能

  1. springmvc接收请求
  2. springmvc接收数据
  3. 返回数据给前端
  4. 页面跳转(携带数据)
  • Spring MVC 的核心作用

(1) 处理 HTTP 请求和响应

  • 作用:接收客户端(浏览器、移动端等)的 HTTP 请求,解析参数,并返回数据(如 JSON、HTML)。

  • 关键组件

    • DispatcherServlet:前端控制器,统一分发请求到对应的 Controller。

    • @Controller / @RestController:处理具体业务逻辑的控制器。

 (2) 实现 MVC 分层架构

层级职责Spring MVC 对应实现
Model封装业务数据和状态(如数据库查询结果)实体类(Entity)、DTO、Service 层返回的对象
View渲染数据(如生成 HTML、JSON、XML)JSP、Thymeleaf、FreeMarker 或直接返回 JSON(前后端分离)
Controller接收请求,调用业务逻辑,返回模型和视图@Controller 或 @RestController 类中的方法

(3) 提供灵活的请求映射和参数绑定

  • URL 路由:通过 @RequestMapping@GetMapping 等注解将请求映射到方法。

  • 参数解析

    • @RequestParam:获取 URL 查询参数。

    • @PathVariable:获取 RESTful 风格的路径参数。

    • @RequestBody:解析 JSON/XML 请求体。

    • @ModelAttribute:绑定表单数据到对象。

(4) 支持多种视图技术

  • 服务端渲染:JSP、Thymeleaf、FreeMarker。

  • 前后端分离:直接返回 JSON/XML(通过 @ResponseBody 或 @RestController)。

(5) 提供拦截器和全局异常处理

  • 拦截器(Interceptor):在请求处理前后插入逻辑(如权限校验、日志记录)。

  • 全局异常处理:通过 @ControllerAdvice 统一捕获异常,返回友好错误信息。

(6) 集成其他 Spring 功能

  • 依赖注入(DI):通过 @Autowired 管理组件依赖。

  • 事务管理:结合 @Transactional 实现数据库事务控制。

  • AOP:实现日志、权限等横切关注点。

Spring MVC 的工作流程

  1. 用户发起请求 → 请求到达 DispatcherServlet前端控制器)。

  2. DispatcherServlet 查询处理器映射HandlerMapping)→ 找到对应的 Controller 方法。

  3. 调用 Controller → 执行业务逻辑(可能调用 Service 和 Repository 层)。

  4. 返回模型和视图

    • 如果返回 String(如 "success"),ViewResolver 会解析为具体的视图(如 success.jsp)。

    • 如果返回 @ResponseBody 或 @RestController,直接序列化为 JSON/XML。

  5. 渲染响应 → 返回给客户端。

2)springmvc的核心组件

1、DispatcherServlet 前端控制器
2、HandlerMapping 处理器映射器
3、HandlerAdapter 处理器适配器
4、Handler 处理器
5、ViewResolver 视图解析器组件

3)springmvc的内部执行流程

1、浏览器发起请求: http://localhost:8080/user/getById?id=1
2、浏览器解析地址:http://     localhost    8080
3、定位到硬件服务器 ip 和 软件服务器 8080(tomcat应用)
4、通过8080----->部署的项目
5、前端控制器接收请求 解析url路径得到资源路径 /user/getById
6、前端控制器 通过调用 处理器映射器,查询 handler是否存在
7、如果路径存在,返回路径的执行链给前端控制器。如果不存在,返回404。
执行链包含了目标方法前的一系列过滤器和拦截器 目标方法路径 及后置的过滤器和拦截器。
8、前端控制器 调用处理器适配器 请求执行handler(目标方法)
9、处理器适配器封装参数到目标方法的参数中(解析httpServletRequest ,调用
request.getParameter方法)
10、执行目标handler(目标方法) 目标handler响应结果给处理器适配器(数据和视图名)
11、处理器是配置返回modelandview给前端控制器
12、前端控制器,请求视图解析器, 拼接前缀路径和后缀路径,得到完整的视图名
13、前端控制器,将model中的数据,在指定的视图页面上进行渲染
14、响应结果给前端。

4)@RequestBody注解的作用

@RequestBody 是 Spring MVC 中用于 处理 HTTP 请求体数据 的核心注解,主要作用是将请求体中的内容(如 JSON、XML)自动绑定到 Java 对象

核心作用:将 HTTP 请求体(JSON/XML)自动反序列化为 Java 对象。

5)mvc架构模式

MVC 架构 model 业务层、view 视图层、controller控制层
view 视图层:用户交互 html、css、js、vue、小程序
controller 控制层: 接收前端请求、接收前端数据、返回数据给前端 spring webmvc (web包)
model 业务层: 业务操作 service、dao、pojo

6)properties和yml配置文件的区别

.properties配置文件

key=value

.yml配置文件

使用 : 空格 回车 tab键 进行缩

有多个配置文件,向激活特定配置文件,实现多个环境的切换
application-dev.yml
application-test.yml
application.yml

spring:profiles:active: dev

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

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

相关文章

jQuery Ajax中dataType 和 content-type 参数的作用详解

jQuery Ajax中dataType与contentType参数解析 一、核心概念对比 参数作用对象数据类型默认值dataType响应数据预期接收的数据格式jQuery自动判断&#xff08;根据响应头MIME类型&#xff09;contentType请求数据发送数据的编码格式application/x-www-form-urlencoded 二、da…

几款常用的虚拟串口模拟器

几款常用的虚拟串口模拟器&#xff08;Virtual Serial Port Emulator&#xff09;&#xff0c;适用于 Windows 系统&#xff0c;可用于开发和调试串口通信应用&#xff1a; 1. com0com (开源免费) 特点&#xff1a; 完全开源免费&#xff0c;无功能限制。 可创建多个虚拟串口…

LLM笔记(六)线性代数

公式速查表 1. 向量与矩阵&#xff1a;表示、转换与知识存储的基础 向量表示 (Vectors): 语义的载体 在LLM中&#xff0c;向量 x ∈ R d \mathbf{x}\in\mathbb{R}^d x∈Rd 是信息的基本单元&#xff0c;承载着丰富的语义信息&#xff1a; 词嵌入向量 (Word Embeddings)&am…

[特殊字符] Word2Vec:将词映射到高维空间,它到底能解决什么问题?

一、在 Word2Vec 之前,我们怎么处理语言? 在 Word2Vec 出现之前,自然语言处理更多是“工程方法”,例如字符串匹配、关键词提取、正则规则...。但这些表示通常缺乏语义,词与词之间看不出任何联系以及非常浅显。当然,技术没有好坏,只有适合的场景。例如: 关键词匹配非常…

栈和队列的模拟实现

栈和队列的模拟实现 容器适配器priority_queue(优先级队列&#xff09;priority_queue的使用priority_queue的模拟实现&#xff1a; 仿函数什么叫仿函数&#xff1f;需要自己实现仿函数的情况&#xff1a; 栈的模拟实现队列的模拟实现deque&#xff08;vector和list的缝合怪&am…

idea本地debug断点小技巧

idea本地debug断点小技巧 简单的设置断点条件 断点后&#xff0c;右键这个断点&#xff0c;可以在 condition 中填写能得出布尔的表达式 a 1 你如果写如下&#xff0c;表示先给他赋值&#xff0c;然后断住 a 2; true 断点后设置某个变量的值 在 debug 区域可以设置变量…

Oracle中如何解决FREE BUFFER WAITS

基于性能上的考虑&#xff0c;服务器进程在扫描LRU主列的同时&#xff0c;会将脏块移至LRU-W列&#xff0c;如果发现没有足够可用&#xff08;可替换&#xff09;的BUFFER CACHE&#xff0c;进程并不会无止尽地扫描整条LRU主列&#xff0c;而是在扫描到某个阀值&#xff08;该阀…

Git命令使用全攻略:从创建分支到合并的完整流程

Git命令使用全攻略&#xff1a;从创建分支到合并的完整流程 引言一、初始化项目与基础配置1.1 克隆远程仓库1.2 查看当前分支状态 二、创建与管理分支2.1 从main分支创建新功能分支2.2 查看分支列表2.3 提交代码到新分支2.4 推送分支到GitHub 三、版本发布与标签管理3.1 创建轻…

MATLAB跳动的爱心

520&#xff0c;一个会动的心~~~ function particleHeart2 % author : slandarer% 所需匿名函数 col1Func(n) repmat([255,158,196]./255,[n,1])repmat([-39,-81,-56]./255,[n,1]).*rand([n,1]); col2Func(n) repmat([118,156,216]./255,[n,1])repmat([137,99,39].*.1./255,[n,…

Go的单测gomock及覆盖率命令

安装gomock&#xff1a; go get github.com/golang/mock/gomockgo get github.com/golang/mock/mockgen 使用 mockgen 生成 mock 代码: 参考 mockgen -sourceservice/user.go -destinationservice /mocks/mock_user_service.go -packagemocks go test -coverprofilecoverage.ou…

vue添加loading后修复页面渲染问题

问题&#xff1a;想要通过选择流程&#xff08;1&#xff09;后加载出角色信息&#xff08;2&#xff09; 选择后无法展示经过排查&#xff0c;再调用接口给角色数组赋值后&#xff0c;页面在接口调用完之前就已经渲染完成。接口是采用的异步加载解决&#xff1a;loadingRoles…

Python入门手册:Python简介,什么是Python

在当今数字化时代&#xff0c;编程语言犹如一把把神奇的钥匙&#xff0c;能够开启通往技术世界的大门。而Python&#xff0c;无疑是其中最闪耀的一颗明星。今天&#xff0c;就让我们一起走进Python的世界&#xff0c;从它的起源、应用领域以及优缺点三个方面&#xff0c;来全面…

用PyTorch在超大规模下训练深度学习模型:并行策略全解析

我猜咱们每个人肯定都累坏了&#xff0c;天天追着 LLM 研究社区跑&#xff0c;感觉每天都冒出个新的最牛模型&#xff0c;把之前的基准都给打破了呢。要是你好奇为啥创新速度能这么快&#xff0c;那主要就是研究人员能够在超大规模下训练和验证模型啦&#xff0c;这全靠并行计算…

提示工程(Prompt Engineering)应用技巧

Prompt&#xff08;提示&#xff09;就是用户与大模型交互输入的代称。即我们给大模型的输入称为 Prompt&#xff0c;而大模型返回的输出一般称为 Completion。 Prompt 需要清晰明确地表达需求&#xff0c;提供充足上下文&#xff0c;使语言模型能够准确理解我们的意图。更长、…

[原创](现代Delphi 12指南):[macOS 64bit App开发]: 如何获取目录大小?

[作者] 常用网名: 猪头三 出生日期: 1981.XX.XX 企鹅交流: 643439947 个人网站: 80x86汇编小站 编程生涯: 2001年~至今[共24年] 职业生涯: 22年 开发语言: C/C++、80x86ASM、Object Pascal、Objective-C、C#、R、Python、PHP、Perl、 开发工具: Visual Studio、Delphi、XCode、…

Unity入门学习(四)3D数学(4)之四元数Quaternion

目录 一、什么是四元数 二、和欧拉角的关联以及为什么会出现四元数 三、四元数的基本组成 Unity中的表示&#xff1a; 四、四元数Quaternion这个类中具有的属性和方法 常用属性 核心方法 五、四元数之间的计算 1. 叉乘&#xff08;组合旋转&#xff09; 2. 点积&#…

活体检测接口全面评测:2025年活体检测选择指南

一、活体检测&#xff1a;数字化时代的身份验证基石 活体检测是一种通过分析人体生物特征动态变化来验证身份真实性的技术&#xff0c;其核心在于区分真实人体与伪造样本&#xff08;如照片、视频、3D 面具等&#xff09;。技术原理主要基于以下维度&#xff1a; 多模态数据采…

物联网工程毕业设计课题实践指南

1. 智能家居控制系统 1.1 基于ZigBee的智能家居控制 实践过程 硬件选型主控:CC2530/CC2531传感器:温湿度、光照、人体红外执行器:继电器、电机、LED灯系统架构 A[传感器层] --> B[ZigBee网络] B --> C[网关] C --> D[云平台] D --> E[手机APP] 开…

电网中窃电分析:概念、算法与应用

一、引言 在现代电力系统中&#xff0c;窃电行为是一个严重影响电网经济运行和供电秩序的问题。窃电不仅导致供电企业的经济损失&#xff0c;破坏了电力市场的公平性&#xff0c;还可能对电网的安全稳定运行构成威胁&#xff0c;甚至引发安全事故。随着科技的不断进步&#xff…

一洽小程序接入说明

接入说明 文档以微信小程序作为示例介绍&#xff0c;其他小程序接入操作与此类似 1、添加校验文件 开发者使用微信小程序提供的 webview 组件可以实现打开一洽的H5对话 小程序的“域名配置”中添加一洽的对话域名地址&#xff0c;需要获取校验文件提供给一洽放在域名根目录下…