事先说明
老师要求我们记面试题-基础篇开始背-五一作业😂😂😂😂
基础重要呀~~~~~复习是必须得-~~~~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填充至视图组件中),并将完善的视图响应到客户端
原图
亿图图示https://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消息体传递用户输入的内容并发送到服务器端
特点 向服务器传递数据