放下洒脱,活出勇气 -java面试我来了-(数据库和Spring篇)

2024-05-06 00:20

本文主要是介绍放下洒脱,活出勇气 -java面试我来了-(数据库和Spring篇),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

事先说明

老师要求我们记面试题-基础篇开始背-五一作业😂😂😂😂

基础重要呀~~~~~复习是必须得-~~~~fighting😁😁 

如果有大佬--请不要太在意细节-我的水平有限

开始我们的复习之路----🚀🚀🚀🚀🚀

目录

事先说明

数据库

数据库和数据库管理系统是什么

什么是数据库约束,列举常见的约束

MySQL中外键约束有哪些级联动作 详细说明

数据中常见的聚合函数

解释一下MySQL中的分页查询以及用法

什么是SQL语句注入攻击?如何防范?

请简要介绍JDBC,并说明它的作用

JDBC中的四大对象分别是哪些,它们的分别的作用是什么

请简要介绍数据库连接池,以及它的作用和优点

​编辑

Spring

简述 Ioc以及主要实现方式

请简要说明Spring bean的生命周期

@Autowired和@Resource注解的区别

MVC的设计理念

 Spring MVC常用注解有哪些?有什么作用

Spring MVC 的处理流程

Spring 常用注解由哪些? 都有什么用

什么是全局异常处理器?在Spring中使用什么注解实现

MyBatis中#{}和${}的区别

MyBatis如何防止SQL语句注入

JDBC与Mybatis的区别,JDBC为什么效率比MyBatis快

什么是Knife4j(可能会问)

Knife4j常用注解有哪些?

说明@Slf4j注解的作用,以及日志级别说明?

Spring Validation 常用注解有哪些 

如何在Spring MVC 中进行表单提交时的参数校验?

HTTP 请求结构



数据库

难度等级 简单

数据库和数据库管理系统是什么

要点: 数据的集合 管理数据的系统

数据库: 是管理数据的仓库,根据某种数据模型进行组织,并存放到计算机存储设备的数据集合

数据库管理系统  :是位于操作系统和用户之间的专门进行数据库管理的软件系统 常见有 Oracle, MySQL, SQL server, MongoDB

难度 一般

什么是数据库约束,列举常见的约束

要点 :限制数据

定义 : 保证数据完整性 一致性 有效性的规则 可以限制无效数据进入数据库中,从数据库层面上提供了"安检"

约束:  非空约束 NOT NULL 要求字段的值不为空  唯一约束 unique 要求字段的值必须唯一

主键约束: 要求字段作为主键 非空 唯一 默认约束 默认情况下一般 使用行自增  AUTO_INCREMENT

MySQL中外键约束有哪些级联动作 详细说明

第一种级联动作 RESTRICT 默认的级联动作 ,当主表删除数据时,如果从表中有相关的数据则不允许删除,当组别更新字段的值时,从表中有相关的数据则不被允许更新

 记忆 主表变从表阻止(RESTRICT)

第二种级联动作 CASCADE 级联删除级更新,当主表删除数据时,如果从表中有相关联的数据则从表中的数据会一起删除,当主表更新主键字段值时,如果从表中有相关联的数据则外键字段值也会随之更新

记忆  主表变从表一起变(CASCADE)

第三种级联动作 SET NULL 设置为空值,当主表删除数据时,从表中相关联的外键字段值会设置为NULL,当主表更新字段值时,从表中相关联数据的外键字段值也会设置为Null

记忆  主表变从表变空值(SET NULL)

数据中常见的聚合函数

要点:计算数据集合的统计值的函数

聚合函数 :用于计算数据集合的统计值的函数

见名知意 

模版 计算数据集合中的XXXXX

COUNT计算数据集合中的记录数
SUM计算数据集合中的某个字段值的总和
AVG计算数据集合中的某个字段值的平均值
MAX计算数据集合中的某个字段值的最大值
MIN计算数据集合中的某个字段值的最小值

解释一下MySQL中的分页查询以及用法

要点: 查询结果集分页显示  Limit m n

定义: MySQL中的分页查询是指在查询一张表的时候,将查询结果分为多页,将按照指定的每页数量和页码返回查询结果

运用场景: 查询结果比较多的时候,减轻服务器的负担和提高查询效率

计算公式 Limit m n

m 为查询结果集的偏移量(跳过多少条), n 为每页返回的记录数

m 计算公式 (当前页码-1)*n

什么是SQL语句注入攻击?如何防范?

要点: 数据合法性过滤不严

SQL语句注入:     是对用户输入的数据合法性过滤不严或者没进行校验,攻击者可以在web应用程序中将原本的SQL语句末尾添加一些恒成立的语句,在管理员不知情的情况下,访问器数据库的数据,给原本的服务端增加了查询压力,容易造成用户数据丢失以及外泄.

防范措施:执行查询语句前做好SQL语句注入检查,使用JDBC中的preparedStatement预编译SQL语句来避免SQL语句注入

请简要介绍JDBC,并说明它的作用

要点: API接口 面向对象的方式 

JDBC是java语言中的访问数据库中的标准API,它提供了一组接口和类,使得java应用程序可以与各种关系型数据库进行通信,JDBC的主要作用是简化数据库编程,使得java程序员可以面向对象的方式来操作数据库,实现数据查询,更新 ,删除等操作

JDBC中的四大对象分别是哪些,它们的分别的作用是什么

要点 Connection 连接 Statement 状态  PreparedStatement 预编译 ResultSet 结果集

Connection表示与数据库的物理连接,并提供了数据库的方法
Statement用于执行静态SQL语句并返回结果
PreparedStatement用于执行预编译SQL语句并返回结果
ResultSet用于执行SQL查询后返回的结果集

请简要介绍数据库连接池,以及它的作用和优点

要点: 备用连接 提高性能  

数据库连接池是一种资源池,它负责管理多个数据库连接,并在需要时为应用程序提供连接,它的作用是为应用程序提供高效的数据库连接,避免因频繁建立和关闭数据库连接而导致的性能问题,连接池通常采用预创建的连接方式,即在应用程序启动时就创建一定数量的数据连接,并将其保存在连接池中,当应用程序启需要连接数据库时,直接从连接池中获取连接对象即可,使用完毕将连接返回给连接池而不是关闭连接.

优点:提高了应用程序的性能,可扩展性,和灵活性,但需要占用一定的资源

Spring

难度 简单

简述 Ioc以及主要实现方式

要点 框架或者容器管理对象之间的依赖关系 依赖注入 

Ioc 控制反转 是一种软件设计思想,由应用程序代码通过它将对象创建,管理,依赖注入等控制权交给框架或者容器实现 ,Ioc的核心思想在于让框架或者容器管理对象之间的依赖关系,而不是应用程序代码来控制这张依赖关系.

实现方式 主要由依赖注入 依赖注入是将对象的依赖关系通过构造函数,Setter方法或者成员变量等方式注入到对象中,使得这些对象在被创建是能够直接获得它们所需的依赖

请简要说明Spring bean的生命周期

要点 实例化阶段 属性赋值阶段 初始化阶段 使用阶段 销毁阶段

实例化阶段(bean对象被创建)可以通过构造方法完成
属性赋值可以同个set方法完成
初始化阶段在属性注入完成后,容器会对bean进行一些初始化操作
使用阶段初始化阶段完成后 bean就可以被容器使用了
销毁阶段

容器在关闭后会对所有的bean进行销毁操作,释放资源

@Autowired和@Resource注解的区别

要点 使用位置 按什么匹配装配

共同点:可以自动装配spring bean的注解 

@Autowired@Resource
默认按照类型匹配装配bean默认按照名称匹配装配bean
Spring Framwork的注解JAVA的注解
使用required属性来指定是否必须装配bean没有其属性
通过@Qualifier注解来指定要装配的bean名称或ID没有其功能
可以放置在构造方法 Setter方法,字段,方法上Setter方法 和字段

MVC的设计理念

要点  M (model) V(view) C(controller)

MVC设计理念 是一种使用MVC设计创建Web应用程序的模式

M(model)表示应用程序核心,处理应用程序数据
V(view)显示数据
C(controller)处理输入与交互流程

 Spring MVC常用注解有哪些?有什么作用

@ResponseBody添加在方法上,添加在类上响应正文(用于显示在web前端)
@RestController添加类上

为组合注解 是 @ResponseBody和@Controller 

响应正文的控制器

@RequestMapping添加类上,添加方法上用于配置请求路径

@GetMapping

添加在方法上用于限制请求方式为GET的@RequestMapping
@PostMapping添加在方法上用于限制请求方式为POST的@RequestMapping
@DeleteMapping添加在方法上用于限制请求方式为DELETE的@RequestMapping
@PutMapping添加在方法上用于限制请求方式为PUT的@RequestMapping
@PathVariable添加在请求参数上用于标记词参数的值来自于URL的占位符
@RequestBody添加在请求参数上用于标记词参数必须是对象格式的参数(接受前端传来的数据)
@ExceptionHandler添加在方法上用于标记词方法是处理异常的方法 
@ControllerAdvice添加在类上用于标记此类中的特定方法将作用于每次处理请求的过程中
@RestControllerAdvice添加在类上组合注解 @Controller和@Response的注解

Spring MVC 的处理流程

要点 看下面流程图

 客户端发送请求到前端控制器DispatcherServlet

 DispatcherServlet收到请求后,调用处理器映射器HandlerMapping

HandlerMapping根据请求URL找到具体的Controller

Controller处理请求,并返回ModelAndView 其中的View只是视图名 ,并不指定具体的视图组件

DispatcherServlet通过ViewResolver(视图解析器)确定负责显示数据的具体View

DispatcherServlet对View进行渲染视图(即将Model填充至视图组件中),并将完善的视图响应到客户端

原图 

亿图图示icon-default.png?t=N7T8https://www.edrawmax.cn/online/share.html?code=4173096c07ce11ef9109ebf0f0121b46

Spring 常用注解由哪些? 都有什么用

要点 : 特别常用 Component Controller Autowired Value

注意答题顺序 这边可以从添加位置说起  类-属性

@ComponentScan添加在配置类上组件扫描,配置包内扫描其配置包和子孙包
@Component添加在类上标记此类是组件类
@Controller添加在类上标记此类是控制器组件类
@Service添加在类上标记此类是业务逻辑组件类
@Repository添加在类上标记此类是数据访问组件类
@Configuration添加在类上标记该类是配置类
@Autowired

添加在属性上,构造方法,

Setter方法上

Spring自动装配(属性,构造方法,Setter方法)
@Qualifier添加在属性上,方法参数上配合自动装配,指定装配的Spring Bean的名称
@Scope添加在组件类上指定作用域
@Value添加在属性上,被Spring调用的方法参数上读取Environment的属性值
@Resource添加在属性上使得Spring自动装配属性的值

什么是全局异常处理器?在Spring中使用什么注解实现

要点  全局处理机制 @ControllerAdvice 类上 @ExceptionHandler方法上

全局异常处理群殴是一种处理异常的机制,它可以用于统一处理应用程序的未处理异常,

全局异常处理器可以捕获并处理应用程序中的所有异常,避免类音为异常未处理而导致程序崩溃或者异常信息暴露给程序用户

在Spring框架中,使用@ControllerAdvice注解 配合@ExceptionHandler注解实现

MyBatis中#{}和${}的区别

要点 #{}预编译处理 ${}直接传参

MyBatis中的#{}和${}都是用来替换SQL语句中的参数 

#{}预编译处理 将传入的参数替换成占位符(?),对参数进行类型安全检查.防止SQL语句注入攻击.

${}只是将传入的参数替换到SQL语句中,不会对参数处理,存在SQL语句注入风险

底层   #{}是PreparedStatement的setxxx方法设置的,可以防止SQL注入攻击

          ${} 的参数值是直接拼接到SQL语句中,容易受到SQL语句注入风险

MyBatis如何防止SQL语句注入

要点 使用#{} SQL预编译

使用#{} SQL语句预编译处理,能够防止SQL语句注入,

而使用${}直接SQL语句拼接,存在SQL语句注入的风险,必须使用正则表达式对${}的参数值进行检查

JDBC与Mybatis的区别,JDBC为什么效率比MyBatis快

要点  MyBatis 采用反射映射 代码简洁      JDBC  java数据库API  代码繁琐

JDBC是java提供的数据库API,JDBC主要问题在于:编译工作量相对繁琐,模块化的代码太多

MyBatis是基于JDBC实现的,能够通过反射将JDBC与java对象映射,基本不用写JDBC代码

由于采用了反射进行映射,所有性能比JDBC慢

什么是Knife4j(可能会问)

要点 文档生成工具 

Knife4j是基于SpringBoot构建的一个文档生成工具 它可以为开发者我们应用生成API文档,目的可以是更加方便的基于API文档进行测试,生成的文档还可以导出,然后给前端开发团队,前端开发团队可以基于API接口写具体的调用

Knife4j常用注解有哪些?

要点 主要是方便了解参数的用意 制作Api文档

@Api添加在控制器类上修改原本控制器的名称
@ApiOperation添加在控制器类上修改原本配置方法的名称
@ApiModelProperty添加在POJO类上的属性标明某个属性的说明 (Value名称 required 是否必要 example 举例)
@ApiImplicitParam添加在控制器类中的处理请求方法标明配置非封装的参数的说明
@ApiImplcitParams添加在控制器类中的处理请求方法标明多个非封装的参数的说明
@ApiIgnore添加在处理请求的方法的参数用于表示Api文档框架应该忽略次参数

说明@Slf4j注解的作用,以及日志级别说明?

要点 生成一个日志对象 TRACE DBUG INFO WARN ERROR

@Slf4j注解可以在类上中生成一个日志对象,用于记录程序运行过程中的信息,使用日志注解的好处是 可以让我们不用手动创建日志对象,降低代码复杂度,提高开发效率

日志级别

TRACE最低日志级别 非常详细的日志信息 调试时使用
DEBUG

调试级别日志信息 输出有用的调试信息

用于判断应用程序是否按预期工作

INFO

默认级别日志信息 了解应用程序的进程 

通常记录应用程序的启动和关闭以及重要事件

WARN警告级别日志信息 不影响应用程序进行,需要待观察
ERROR

错误级别日志信息 应用程序假死或者无法运行情况

需要查明并立即解决

Spring Validation 常用注解有哪些 

要点 自己看着答

@NotNull验证对象是否为null
@NotEmpty验证字符串类型是否为空,不包括空格,tab键
@NotBlank验证字符串类型是否为空,包括空格,tab键
@Min验证数字是否大于等于指定的最小值
@Max验证数字是否小于等于指定的最大值
@Size验证字符串,集合,或者数组是否在指定范围内

如何在Spring MVC 中进行表单提交时的参数校验?

 要点 :使用注解@Valida进行校验 在Controller中的方法参数前加@Valida

HTTP 请求结构

 要点 : 一个HTTP 请求报文包括 :请求行 请求头部 空行 请求数据

GET和POST的区别

GET方式是通过请求行传递用户所输入的内容,其内容会全部显示的浏览器的地址栏中

特点 获取服务器中的数据

POST方式通过HTTP消息体传递用户输入的内容并发送到服务器端

特点 向服务器传递数据

这篇关于放下洒脱,活出勇气 -java面试我来了-(数据库和Spring篇)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/963050

相关文章

SpringBoot使用Apache Tika检测敏感信息

《SpringBoot使用ApacheTika检测敏感信息》ApacheTika是一个功能强大的内容分析工具,它能够从多种文件格式中提取文本、元数据以及其他结构化信息,下面我们来看看如何使用Ap... 目录Tika 主要特性1. 多格式支持2. 自动文件类型检测3. 文本和元数据提取4. 支持 OCR(光学

Java内存泄漏问题的排查、优化与最佳实践

《Java内存泄漏问题的排查、优化与最佳实践》在Java开发中,内存泄漏是一个常见且令人头疼的问题,内存泄漏指的是程序在运行过程中,已经不再使用的对象没有被及时释放,从而导致内存占用不断增加,最终... 目录引言1. 什么是内存泄漏?常见的内存泄漏情况2. 如何排查 Java 中的内存泄漏?2.1 使用 J

JAVA系统中Spring Boot应用程序的配置文件application.yml使用详解

《JAVA系统中SpringBoot应用程序的配置文件application.yml使用详解》:本文主要介绍JAVA系统中SpringBoot应用程序的配置文件application.yml的... 目录文件路径文件内容解释1. Server 配置2. Spring 配置3. Logging 配置4. Ma

Java 字符数组转字符串的常用方法

《Java字符数组转字符串的常用方法》文章总结了在Java中将字符数组转换为字符串的几种常用方法,包括使用String构造函数、String.valueOf()方法、StringBuilder以及A... 目录1. 使用String构造函数1.1 基本转换方法1.2 注意事项2. 使用String.valu

IDEA如何切换数据库版本mysql5或mysql8

《IDEA如何切换数据库版本mysql5或mysql8》本文介绍了如何将IntelliJIDEA从MySQL5切换到MySQL8的详细步骤,包括下载MySQL8、安装、配置、停止旧服务、启动新服务以及... 目录问题描述解决方案第一步第二步第三步第四步第五步总结问题描述最近想开发一个新应用,想使用mysq

java脚本使用不同版本jdk的说明介绍

《java脚本使用不同版本jdk的说明介绍》本文介绍了在Java中执行JavaScript脚本的几种方式,包括使用ScriptEngine、Nashorn和GraalVM,ScriptEngine适用... 目录Java脚本使用不同版本jdk的说明1.使用ScriptEngine执行javascript2.

Spring MVC如何设置响应

《SpringMVC如何设置响应》本文介绍了如何在Spring框架中设置响应,并通过不同的注解返回静态页面、HTML片段和JSON数据,此外,还讲解了如何设置响应的状态码和Header... 目录1. 返回静态页面1.1 Spring 默认扫描路径1.2 @RestController2. 返回 html2

Spring常见错误之Web嵌套对象校验失效解决办法

《Spring常见错误之Web嵌套对象校验失效解决办法》:本文主要介绍Spring常见错误之Web嵌套对象校验失效解决的相关资料,通过在Phone对象上添加@Valid注解,问题得以解决,需要的朋... 目录问题复现案例解析问题修正总结  问题复现当开发一个学籍管理系统时,我们会提供了一个 API 接口去

Java操作ElasticSearch的实例详解

《Java操作ElasticSearch的实例详解》Elasticsearch是一个分布式的搜索和分析引擎,广泛用于全文搜索、日志分析等场景,本文将介绍如何在Java应用中使用Elastics... 目录简介环境准备1. 安装 Elasticsearch2. 添加依赖连接 Elasticsearch1. 创

Spring核心思想之浅谈IoC容器与依赖倒置(DI)

《Spring核心思想之浅谈IoC容器与依赖倒置(DI)》文章介绍了Spring的IoC和DI机制,以及MyBatis的动态代理,通过注解和反射,Spring能够自动管理对象的创建和依赖注入,而MyB... 目录一、控制反转 IoC二、依赖倒置 DI1. 详细概念2. Spring 中 DI 的实现原理三、