当前位置: 首页 > news >正文

黑马Java面试笔记之框架篇(Spring、SpringMvc、Springboot)

一. 单例bean

Spring框架中的单例bean是线程安全的吗?

         Spring框架中的bean是单例的,可以在注解@Scope()进行设置

 

  •  singleton:bean在每一个Spring IOC容器中只有一个实例。
  • prototype:一个bean的定义可以有多个实例

总结

二. AOP

        AOP称为面向切面编程,用于将那些与业务无关,但却对多个对象产生影响的公共行为和逻辑,抽取并封装为一个可重用的模块,这个模块被命名为“切面”(Aspect),减少系统中的重复代码,降低了模块间的耦合度,同时提高了系统的可维护性。

        以下详细说明一下AOP的使用场景

2.1 记录操作日志

        当用户请求时,需要记录请求中的请求方式、访问地址等信息,

代码分析如下:

2.2 Spring中的事务是如何实现的

Spring支持编程式事务管理和声明式事务管理两种方式。

  • 编程式事务控制:需使用TransactionTemplate来进行实现,对业务代码有侵入性,项目中很少使用
  • 声明式事务管理:声明式事务管理建立在AOP之上的。其本质是通过AOP功能,对方法前后进行拦截,将事务处理的功能编织到拦截的方法中,也就是在目标方法开始之前加入一个事务,在执行完目标方法之后根据执行情况提交或者回滚事务。

         在业务逻辑之前开启事务,在业务逻辑执行之后提交事务,如果出现异常,则进行回滚,要在方法前面加上注解@Transactional

总结

三. 事务失效

有三种事务失效的场景

  • 异常捕获处理
  • 抛出检查异常
  • 非public方法

3.1 异常捕获处理

        事务通知只有捉到了目标抛出的异常,才能进行后续的回滚处理,如果目标自己处理掉异常,事务通知无法知悉

        解决方法是在catch块中添加throw new RuntimeException(e)抛出

3.2 抛出检查异常

原因是Spring默认只会回滚非检查异常

解决方法是配置rollbackFor属性@Transactional(rollbackFor=Exception.class)

3.3 非public方法导致的事务失效

总结

Spring中事务失效的场景有以下几种:

1.异常捕获处理,自己处理了异常,没有抛出,解决方法是手动抛出

2.抛出检查异常,配置rollbackFor属性为Exception

3.非public方法导致的事务失效,改为public

四. Spring的bean的生命周期

4.1 BeanDefinition

        Spring容器在进行实例化时,会将xml配置的<bean>的信息封装成一个BeanDefinition对象,Spring根据BeanDefinition来创建Bean对象,里面有很多的属性用来描述Bean

总结

五. Spring循环引用

循环引用可能出现死循环现象

5.1 三级缓存解决循环依赖

一级缓存作用:限制bean在beanFactory中只存一份,即实现singleton scope,解决不了循环依赖

二级缓存

三级缓存

5.2 构造方法出现了循环依赖怎么解决

总结

六. SpringMvc执行流程

SpringMvc的执行流程是这个框架最核心的内容

  • 视图阶段(老旧JSP等)
  • 前后端分离阶段(接口开发、异步)

6.1 视图阶段(JSP)

 

 6.2 前后端分离阶段(接口开发、异步)

 总结

 

 七. SpringBoot自动配置原理

  • @SpringBootConfiguration:该注解与@Configuration注解作用相同,用来声明当前也是一个配置类
  • @ComponentScan:组件扫描,默认扫描当前引导类所在包及其子包
  • @EnableAutoConfiguration:SpringBoot实现自动化配置的核心注解。

@EnableAutoConfiguration注解分析如下

 总结

 

 八. Spring框架常见注解(Spring、SpringBoot、SpringMvc)

8.1 Spring的常见注解

Spring的常见注解有哪些?

回答参照下表:

8.2 SpringBoot的常见注解

SpringBoot的常见注解有哪些?

回答参照下表:

8.3 SpringMvc的常见注解

SpringMvc的常见注解有哪些?

回答参照下表:

八. Mybatis执行流程

Mybatis执行流程

首先要定义核心配置文件mybatis-config.xml,作用一是加载环境配置,二是加载映射文件

操作数据库

总结

Mybatis执行流程是?

九. Mybatis延迟加载

Mybatis是否支持延迟加载?

9.1 什么是延迟加载

9.1 延迟加载的原理

  1. 使用CGLIB创建目标对象的代理对象
  2. 当调用目标方法user.getOrderList()时,进入拦截器invoke方法,发下user.getOrderList()是null值,执行sql查询order列表
  3. 把order查询上来,然后调用user.setOrderList(List<Order> orderList),接着完成user.getOrderList()方法的调用

总结

十. Mybatis一级二级缓存

Mybatis的一级,二级缓存用过吗?

10.1 一级缓存

        基于PerpetualCache的HashMap本地缓存,其存储作用域为Session,当Session进行flush或close之后,该Session中的所有Cache就将清空,默认打开一级缓存

10.2 二级缓存

        基于namespace和mapper的作用域起作用的,不是依赖于SQL session,默认也是采用PerpetualCache,HashMap存储

二级缓存默认是关闭的

开启方式,两步走:

1. 全局配置文件

2.映射文件

使用<cache/>标签让当前mapper生效二级缓存

 注意事项:

总结

相关文章:

  • 【机器学习基础】机器学习入门核心:Jaccard相似度 (Jaccard Index) 和 Pearson相似度 (Pearson Correlation)
  • rsync服务的搭建
  • Python 验证码识别(使用pytesseract库)
  • 参数高效的提示调优实现了通用且校准的神经文本检索器
  • 网页自动化部署(webhook方法)
  • 【Go-补充】Sync包
  • STM32G4 电机外设篇(三) TIM1 发波 和 ADC COMP DAC级联
  • 【Go语言生态】
  • 结合源码分析Redis的内存回收和内存淘汰机制,LRU和LFU是如何进行计算的?
  • Spring Boot,注解,@ComponentScan
  • Mybtais框架各配置文件主要内容详解(一)
  • 【xmb】】内部文档148344599
  • Azure 机器学习初学者指南
  • PCIe—TS1/TS2 之Polling.Active(一)
  • MVVM、MVC的区别、什么是MVVM
  • VScode编译调试debug,gpu的cuda程序,Nsight
  • Amazon GameLift实战指南:低成本构建高并发全球游戏服务器架构
  • 【模拟电子电路-学习链接】
  • 杨校老师竞赛课之GESP一级C++[2024-12]真题及题解
  • latex 三线表-算法对比表
  • 寄生虫网站怎么做/自动优化app
  • 武汉网站设计招聘/佛山网络推广平台
  • 如何自己做网站及优化/黄冈网站建设收费
  • 做网站的主要任务/百度竞价排名模式
  • 做公益的网站有哪些/网络推广电话
  • 公司网站开发费用大概多少/百度软件下载