放下洒脱,活出勇气 -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

相关文章

JVM 的类初始化机制

前言 当你在 Java 程序中new对象时,有没有考虑过 JVM 是如何把静态的字节码(byte code)转化为运行时对象的呢,这个问题看似简单,但清楚的同学相信也不会太多,这篇文章首先介绍 JVM 类初始化的机制,然后给出几个易出错的实例来分析,帮助大家更好理解这个知识点。 JVM 将字节码转化为运行时对象分为三个阶段,分别是:loading 、Linking、initialization

Spring Security 基于表达式的权限控制

前言 spring security 3.0已经可以使用spring el表达式来控制授权,允许在表达式中使用复杂的布尔逻辑来控制访问的权限。 常见的表达式 Spring Security可用表达式对象的基类是SecurityExpressionRoot。 表达式描述hasRole([role])用户拥有制定的角色时返回true (Spring security默认会带有ROLE_前缀),去

浅析Spring Security认证过程

类图 为了方便理解Spring Security认证流程,特意画了如下的类图,包含相关的核心认证类 概述 核心验证器 AuthenticationManager 该对象提供了认证方法的入口,接收一个Authentiaton对象作为参数; public interface AuthenticationManager {Authentication authenticate(Authenti

Spring Security--Architecture Overview

1 核心组件 这一节主要介绍一些在Spring Security中常见且核心的Java类,它们之间的依赖,构建起了整个框架。想要理解整个架构,最起码得对这些类眼熟。 1.1 SecurityContextHolder SecurityContextHolder用于存储安全上下文(security context)的信息。当前操作的用户是谁,该用户是否已经被认证,他拥有哪些角色权限…这些都被保

Spring Security基于数据库验证流程详解

Spring Security 校验流程图 相关解释说明(认真看哦) AbstractAuthenticationProcessingFilter 抽象类 /*** 调用 #requiresAuthentication(HttpServletRequest, HttpServletResponse) 决定是否需要进行验证操作。* 如果需要验证,则会调用 #attemptAuthentica

Spring Security 从入门到进阶系列教程

Spring Security 入门系列 《保护 Web 应用的安全》 《Spring-Security-入门(一):登录与退出》 《Spring-Security-入门(二):基于数据库验证》 《Spring-Security-入门(三):密码加密》 《Spring-Security-入门(四):自定义-Filter》 《Spring-Security-入门(五):在 Sprin

Java架构师知识体认识

源码分析 常用设计模式 Proxy代理模式Factory工厂模式Singleton单例模式Delegate委派模式Strategy策略模式Prototype原型模式Template模板模式 Spring5 beans 接口实例化代理Bean操作 Context Ioc容器设计原理及高级特性Aop设计原理Factorybean与Beanfactory Transaction 声明式事物

Java进阶13讲__第12讲_1/2

多线程、线程池 1.  线程概念 1.1  什么是线程 1.2  线程的好处 2.   创建线程的三种方式 注意事项 2.1  继承Thread类 2.1.1 认识  2.1.2  编码实现  package cn.hdc.oop10.Thread;import org.slf4j.Logger;import org.slf4j.LoggerFactory

字节面试 | 如何测试RocketMQ、RocketMQ?

字节面试:RocketMQ是怎么测试的呢? 答: 首先保证消息的消费正确、设计逆向用例,在验证消息内容为空等情况时的消费正确性; 推送大批量MQ,通过Admin控制台查看MQ消费的情况,是否出现消费假死、TPS是否正常等等问题。(上述都是临场发挥,但是RocketMQ真正的测试点,还真的需要探讨) 01 先了解RocketMQ 作为测试也是要简单了解RocketMQ。简单来说,就是一个分

MySQL数据库宕机,启动不起来,教你一招搞定!

作者介绍:老苏,10余年DBA工作运维经验,擅长Oracle、MySQL、PG、Mongodb数据库运维(如安装迁移,性能优化、故障应急处理等)公众号:老苏畅谈运维欢迎关注本人公众号,更多精彩与您分享。 MySQL数据库宕机,数据页损坏问题,启动不起来,该如何排查和解决,本文将为你说明具体的排查过程。 查看MySQL error日志 查看 MySQL error日志,排查哪个表(表空间