面试常见的一点点问题

Updated on with 0 views and 0 comments

面试常见的一点点问题

问题

Mybatis ResultMap、延迟加载、关联查询 嵌套结果查询、分表查询

映射文件 --- 名称任意(通常和表关联)、保存位置在类路径下(可以在其他任意位置)

resultType 和 resultMap 属性加标签 -- 重点
1)在实现 select 查询时使用 resultType 或者 resultMap
2)区别:
A、resultType 只有属性;resultMap 有属性和标签
B、当实体类属性名和表中字段名称相同时使用resultType;
当实体类属性名和表中字段名称不相同时使用resultMap(使用mysql的字段别名也可以)
C、实现多表关联查询的时候使用resultMap,不能使用resultType。
3)resultType 可以设置的类型有哪些?
A、实体类类型
B、一般类型:Integer、String、Date……
C、Map 类型
4)resultMap (标签)可以设置类型有
A、实体类类型
B、复合实体类类型

resultMap属性和标签 -- 重点
关联查询第一套方案
嵌套结果查询 -- 连接查询

  1. 多表关联查询时,resultMap的使用 -- 要把数据映射封装到实体类/复合实体类对象中(否则使用
    Map key-value即可)
  2. 多表关联查询,结果使用 map 封装,如何处理?
    1)查询用户信息,关联详细信息
    2)resultType 写map 用List Map 接收 即可
  3. 关联查询一对一查询(实体类和复合类封装数据)
    1)查询用户信息,关联详细信息
  1. resultMap 标签 id result 标签 写 查询表的实体使用 association 标签 中 id、result 标签写连接
    的表实体
    3)SQL语句是连接查询语句(包括内外连接)
    4)查询用户详细信息属于哪个用户
    A、实体主方 添加 关联实体
  1. 关联查询 实现 一对多关联查询
    1)查询用户信息,管理多收件地址
  2. 多对多的关联查询
    1)查询用户信息,关联用户购买商品
    2)通过 实体类设计 collection association标签嵌套关系 实现连接查询

关联查询第二套方案

  1. 一对一、一对多、多对多关联查询,换一种方式嵌套查询、分表查询方式。
  2. 一对一的分表查询实现
    1)查询用户信息,关联查询详细信息
    2)配置文件变化 语句变化为单表查询
    一对一查询嵌套 association 标签中添加 column 属性(本方字段id值)和 select 属性(本方的字
    段值送到对方的具体位置,实际上就是对方的某个方法处)相当于左外连接查询
    特点:
    SQL语句变化连接查询变为单表查询
    在 association中没有下级标签 多了两个属性 column 和 select 对方需要配置相应xml内容
  3. 一对多实现
    1)查询用户信息 以及具备的地址信息
    2)association替换为collection javaType替换为ofType即可
  4. 多对多实现
    1)查询用户 关联购买商品有哪些
    延迟加载
  5. 介绍
    延迟策略、懒加载、延迟查询,是和查询有关。是指在实现查询的时候把查询语句,从框架向数据
    库的发送时间延后。在后续程序中如果需要使用相关的数据了,此时才向数据发送SQL查询语句。
  6. 在 mybatis 中延延迟策略的实现只有一种情况,关联查询时,查询对方数据可能会被延迟。
  7. 在 mybatis 中实现延迟策略时,只有分表方案才能实现延迟。(所以分表方式常用!)
  8. 演示
    1)局部:使用get展示看效果
    一对一、一对多的配置 association、collection 标签中 加入属性 fetchType 值为lazy 不用不发数
    据,中间可以隔一段时间,用了才发送。
    2)全局:核心配置文件加入全局配置settings标签(properties下typeAliases上)
    name为 lazyLoadingEnabled、
    aggressiveLazyLoading(极其懒加载)
    value为true
    3)目的:为了减少向数据库发送 SQL 的次数、从而降低数据库的压力,起到提高整体性能好处

SpringAOP 思想实现事务管理

aop 思想实现事务管理-- 重点

  1. 什么是事务?
    是一个完整的数据库增删改查的执行单元,可能由多条 SQL 语句组成。
  2. 事务的特性?
    原子性(atomicity)、一致性(consistency)、隔离性(isolation)、持久性(durability) --
    ACID
    1)原子性:要成功都成功(commit)、要失败都失败(rollback)
    2)一致性:事务在执行前后,数据保持不变
    3)隔离性:事务和事务之间彼此互不影响
    4)持久性:事务在执行前后,对数据的影响是持久的
  3. 数据异常
    脏读数据、不可重复读数据、幻读数据
    1)脏读:读未提交
    2)不可重复读:多次读数据不同
    3)幻读:插入或者更改造成读取不同
  4. 数据异常的处理
    事务隔离级别:读未提交、读已提交、可重复读、串行化/序列化
  5. 事务的传播性 -- spring实现事务管理时提出的概念
    比如:在 service 层的某个方法中存在多个 dao 层方法的调用,service.save()
    {dao.insert();dao.select();dao.update()},那么传播性就是事务由第一个 insert 方法传播到第二个
    select() 再传播到第三个 update 方法;反过来就是把多个方法纳入一个事务管理单元。
    保证同一个连接对象(连接对象绑定到线程中ThreadLocal)
  6. spring 中如何实现事务管理?
    1)需求:银行中的转账功能的实现
    2)实现:
    A、创建表、实体类
    B、造持久层功能方法
    C、造业务层功能
    D、相关配置以及事务管理的类
    ThreadLocal<> 将连接对象绑定到线程中
    queryRunner.query传递链接对象参数,保证事务传播一致性
  7. spring 框架中提供的事务管理的方式的实现
    1)纯配置
    2)配置和注解
    @Transactional
    3)纯注解
    @EnableTransactionManagement
    开启事务管理等同于上面标签

Spring MVC 执行流程

image-20210715095652702

  1. 用户发送请求至前端控制器 DispatcherServlet
  2. DispatcherServlet 收到请求调用 HandlerMapping 处理器映射器
  3. 处理器映射器找到具体的处理器(可以根据xml配置、注解进行查找),生成处理器对象及处理器拦截器(如果有则生成)一并返回给 DispatcherServlet
  4. DispatcherServlet 调用 HandlerAdapter 处理器适配器
  5. HandlerAdapter 经过适配调用具体的处理器(Controller,也叫后端控制器)
  6. Controller 执行完成返回 ModelAndView
  7. HandlerAdapter 将 Controller 执行结果 ModelAndView 返回给 DispatcherServlet
  8. DispatcherServlet 将 ModelAndView 传给 ViewResolver 视图解析器
  9. ViewResolver 解析后返回具体 View
  10. DispatcherServlet 根据 View 进行渲染视图(即将模型填充至视图中)。DispatcherServlet 响应用户

Redis 介绍

Redis 是一个开源(BSD许可)的,内存中的数据结构存储系统,它可以用作数据库、缓存和消息
中间件。

  1. 基于内存存储的、以key = value结构存储数据、开源的、可以用于实现数据库、缓存、消息中间件
    的系统(从数据库角度,类似mysql,但是没有表结构,是键值对)
  2. 数据结构,以哪些结构存储数据?基本结构:字符串结构、列表结构、集合结构、有序集合结构
  3. 有事务管理、可以实现数据复制、可以实现数据的持久化、可以实现 LUA 的脚本操作
  4. Redis 有高可用、高性能特点:采用集群保证高可用和高性能,在实现集群的时候设置了哨兵的功
    能。
    Tomcat 的并发(同时访问一条连接) 200条 超过300宕机,需要使用集群。(搭建多个服务器,
    每个都相同 用户随机访问)
    分布式:不同功能分不同的模块,加上集群,一堆相同的登录、相同的评论等等等。一堆相同的是
    一个小集群,小集群与小集群是分布式。
    哨兵:用来监测集群的某个服务有没有宕机,是否正常工作,存在主服务。
    端口:6379

Spring Boot 的 两种配置文件

SpringBoot 配置文件

  1. 配置文件作用规范
    properties 预定义、自定义的键值对
    ymal/yml
  2. yml 文件书写格式
    key:空格value 如 name: zhangfei
    并列关系,左侧对齐
    有上下级关系的缩进几个
    设置数组属性用 - 、或 []
    双引号则 有转义字符的功能
    单引号 为字符串拼接

标题:面试常见的一点点问题
作者:HB2Ocean
地址:http://future-hb.top:8080/articles/2021/08/29/1630240468659.html