放下洒脱,活出勇气 -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消息体传递用户输入的内容并发送到服务器端

特点 向服务器传递数据

  • 22
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值