Java开发之框架(spring、springmvc、springboot、mybatis)【面试篇 完结版】

这篇具有很好参考价值的文章主要介绍了Java开发之框架(spring、springmvc、springboot、mybatis)【面试篇 完结版】。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

本文主要记录spring的单例bean、切面编程AOP、spring事务、循环依赖、常见注解等


提示:以下是本篇文章正文内容,下面案例可供参考

一、框架知识分布

mybatis面试题,Java面试宝典,java,spring,spring boot,springMVC,面试
mybatis面试题,Java面试宝典,java,spring,spring boot,springMVC,面试

二、Spring

1. spring-单例bean

① 问题引入

mybatis面试题,Java面试宝典,java,spring,spring boot,springMVC,面试
Spring框架中的bean是单例的
mybatis面试题,Java面试宝典,java,spring,spring boot,springMVC,面试
singleton :bean在每个Spring IOC容器中只有一个实例。
prototype:一个bean的定义可以有多个实例。

② 单例bean是线程安全的吗

count是可修改的成员变量需要考虑线程安全
userService是无法修改的成员变量不需要考虑线程安全
mybatis面试题,Java面试宝典,java,spring,spring boot,springMVC,面试

③ 问题总结

mybatis面试题,Java面试宝典,java,spring,spring boot,springMVC,面试

④ 实战面试

mybatis面试题,Java面试宝典,java,spring,spring boot,springMVC,面试

2. spring-AOP

① 问题引入

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

常见的AOP使用场景:
1.记录操作日志(每一个service记录操作)
2.缓存处理(业务加缓存,写在AOP的切面拦截需要添加缓存的业务方法)
3.Spring中内置的事务处理

② AOP记录操作日志

获取请求的用户名、请求方式、访问地址、模块名称、登录ip、操作时间,记录到数据库的日志表中,如下图所示:
mybatis面试题,Java面试宝典,java,spring,spring boot,springMVC,面试
后台有四个请求接口,需要记录操作日志,使用AOP提供的环绕通知做一个切面,相当于一个通过的代码,遇到请求的时候就可以执行这段代码。
mybatis面试题,Java面试宝典,java,spring,spring boot,springMVC,面试
代码解释:https://zhuanlan.zhihu.com/p/596205936?utm_id=0

③ Spring事务如何实现的

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

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

④ 问题总结

mybatis面试题,Java面试宝典,java,spring,spring boot,springMVC,面试

3. Spring-事务失效的场景

① 问题引入

mybatis面试题,Java面试宝典,java,spring,spring boot,springMVC,面试
对spring框架的深入理解、复杂业务的编码经验

  1. 异常捕获处理
  2. 抛出检查异常
  3. 非public方法

② 情况一:异常捕获处理

转账的代码中出现一个异常,由于这个异常会被try-catch捕获却没有抛出,所以可能导致事务失效(如果异常没有被捕获,就会发生事务回滚)
mybatis面试题,Java面试宝典,java,spring,spring boot,springMVC,面试
原因分析: 事务通知只有捉到了目标抛出的异常,才能进行后续的回滚处理,如果目标自己处理掉异常,事务通知无法知悉
解决方法: 在catch块添加throw new RuntimeException(e)抛出
mybatis面试题,Java面试宝典,java,spring,spring boot,springMVC,面试

③ 情况二:抛出检查异常

系统找不到指定文件,抛出一个检查异常
mybatis面试题,Java面试宝典,java,spring,spring boot,springMVC,面试
原因分析: Spring 默认只会回滚非检查异常
解决方法: 配置rollbackFor属性Transactional(rollbackFor=Exception.class),一旦出现异常都会被事务控制
mybatis面试题,Java面试宝典,java,spring,spring boot,springMVC,面试

④ 非public方法导致事务失效

方法没有用public
mybatis面试题,Java面试宝典,java,spring,spring boot,springMVC,面试
原因分析: Spring为方法创建代理、添加事务通知、前提条件都是该方法是public的
解决方法: 方法改为public

⑤ 问题总结

mybatis面试题,Java面试宝典,java,spring,spring boot,springMVC,面试

4. Spring-bean的生命周期(难)

① 问题引入

mybatis面试题,Java面试宝典,java,spring,spring boot,springMVC,面试
Spring容器是如何管理和创建bean实例
方便调试和解决问题

② BeanDefinition(Bean的定义信息)

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

③ 问题总结

mybatis面试题,Java面试宝典,java,spring,spring boot,springMVC,面试

5. Spring-bean的循环依赖

① 问题引入

mybatis面试题,Java面试宝典,java,spring,spring boot,springMVC,面试
在创建A对象的同时需要使用的B对象,在创建B对象的同时需要使用到A对象

mybatis面试题,Java面试宝典,java,spring,spring boot,springMVC,面试
mybatis面试题,Java面试宝典,java,spring,spring boot,springMVC,面试

② Spring的循环依赖

mybatis面试题,Java面试宝典,java,spring,spring boot,springMVC,面试

Spring解决循环依赖是通过三级缓存,对应的三级缓存如下所示:
mybatis面试题,Java面试宝典,java,spring,spring boot,springMVC,面试
如果要想打破循环依赖,就需要一个中间人的参与,这个中间人就是二级缓存。
一级和二级缓存可以解决一般对象的循环依赖
mybatis面试题,Java面试宝典,java,spring,spring boot,springMVC,面试
代理对象需要用到三级缓存
mybatis面试题,Java面试宝典,java,spring,spring boot,springMVC,面试
构造方法注入产生的循环依赖问题,使用延迟加载解决问题
mybatis面试题,Java面试宝典,java,spring,spring boot,springMVC,面试

③ 问题总结

mybatis面试题,Java面试宝典,java,spring,spring boot,springMVC,面试
mybatis面试题,Java面试宝典,java,spring,spring boot,springMVC,面试

三、SpringMVC

1. SpringMVC-执行流程

① 问题引入

mybatis面试题,Java面试宝典,java,spring,spring boot,springMVC,面试
Springmvc的执行流程是这个框架最核心的内容

  1. 视图阶段(老旧JSP等)
  2. 前后端分离阶段(接口开发,异步)

② 视图阶段(JSP)

重要的组件:前端控制器、处理器映射器、处理器适配器、视图解析器
mybatis面试题,Java面试宝典,java,spring,spring boot,springMVC,面试

③ 前后端分离阶段(接口开发,异步)

mybatis面试题,Java面试宝典,java,spring,spring boot,springMVC,面试

④ 问题总结

mybatis面试题,Java面试宝典,java,spring,spring boot,springMVC,面试

mybatis面试题,Java面试宝典,java,spring,spring boot,springMVC,面试

四、SpringBoot

1. springboot-自动配置

① 问题引入

mybatis面试题,Java面试宝典,java,spring,spring boot,springMVC,面试
自动配置主要依赖于@SpringBootApplication注解,其中还包含了三个注解
mybatis面试题,Java面试宝典,java,spring,spring boot,springMVC,面试
@SpringBootConfiguration:该注解与@Configuration注解作用相同,用来声明当前也是
个配置类。
@ComponentScan:组件扫描,默认扫描当前引导类所在包及其子包。
@EnableAutoConfiguration: SpringBoot实现自动化配置的核心注解。

② 问题总结

mybatis面试题,Java面试宝典,java,spring,spring boot,springMVC,面试

五、Spring-框架中常见的注解

mybatis面试题,Java面试宝典,java,spring,spring boot,springMVC,面试

1. spring常见的注解

mybatis面试题,Java面试宝典,java,spring,spring boot,springMVC,面试

2. springMVC常见注解

mybatis面试题,Java面试宝典,java,spring,spring boot,springMVC,面试

3.springboot常见注解

mybatis面试题,Java面试宝典,java,spring,spring boot,springMVC,面试

六、Mybatis

1. Mybatis-执行流程

① 问题引入

mybatis面试题,Java面试宝典,java,spring,spring boot,springMVC,面试

  1. 理解了各个组件的关系
  2. Sql的执行过程(参数映射、sql解析、执行和结果处理)

② Mybatis执行流程

mybatis面试题,Java面试宝典,java,spring,spring boot,springMVC,面试

2. Mybatis支持延迟加载

① 问题引入

mybatis面试题,Java面试宝典,java,spring,spring boot,springMVC,面试

② 立即加载

查询用户信息的同时也可以查询到相关订单信息

UserMapper:
mybatis面试题,Java面试宝典,java,spring,spring boot,springMVC,面试

OrderMapper:
mybatis面试题,Java面试宝典,java,spring,spring boot,springMVC,面试

UserTest.java 打印输出用户信息
mybatis面试题,Java面试宝典,java,spring,spring boot,springMVC,面试

执行结果:
mybatis面试题,Java面试宝典,java,spring,spring boot,springMVC,面试

③ 延迟加载

fetchType="lazy" 开启局部延迟加载

UserMapper:
mybatis面试题,Java面试宝典,java,spring,spring boot,springMVC,面试

UserTest.java 打印输出用户信息
mybatis面试题,Java面试宝典,java,spring,spring boot,springMVC,面试

执行结果:先调用查询用户信息,然后因为调用了getOrderList(),所以还执行了查找对应订单的sql
mybatis面试题,Java面试宝典,java,spring,spring boot,springMVC,面试

在配置文件中开启全局延迟加载

mybatis面试题,Java面试宝典,java,spring,spring boot,springMVC,面试

延迟加载的原理

  1. 使用CGLIB创建目标对象的代理对象
  2. 调用目标方法user.getOrderList)时,进入拦截器invoke方法,发现user.getOrderList()是null值,执行sql查询order列表3.把order查询上来,然后调用user.setOrderList(List orderList),接着完成user.getOrderList()方法的调用
    mybatis面试题,Java面试宝典,java,spring,spring boot,springMVC,面试

④ 问题总结

mybatis面试题,Java面试宝典,java,spring,spring boot,springMVC,面试

3. Mybatis-一级二级缓存

① 问题引入

mybatis面试题,Java面试宝典,java,spring,spring boot,springMVC,面试

● 本地缓存:基于PerpetualCache,本质是一个HashMap
● 一级缓存:作用域是session级别
● 二级缓存:作用域是namespacemapper的作用域,不依赖于session

mybatis面试题,Java面试宝典,java,spring,spring boot,springMVC,面试

② 一级缓存

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

mybatis面试题,Java面试宝典,java,spring,spring boot,springMVC,面试
因为这两个都是查询的同一个id的用户信息,所以第二次查询的时候直接在缓存中取,而不需要再次执行SQL语句
mybatis面试题,Java面试宝典,java,spring,spring boot,springMVC,面试

③ 二级缓存

二级缓存是基于namespace和mapper的作用域起作用的,不是依赖于SQL session,默认也是采用PerpetualCache,HashMap存储(默认关闭)
mybatis面试题,Java面试宝典,java,spring,spring boot,springMVC,面试

mybatis面试题,Java面试宝典,java,spring,spring boot,springMVC,面试

开启二级缓存的两个步骤:

  1. 全局配置文件
    mybatis面试题,Java面试宝典,java,spring,spring boot,springMVC,面试

  2. 映射文件:使用<cache/>标签让当前mapper生效二级缓存
    mybatis面试题,Java面试宝典,java,spring,spring boot,springMVC,面试

  3. 执行结果:只调用了一次SQL
    mybatis面试题,Java面试宝典,java,spring,spring boot,springMVC,面试

注意事项:

  1. 对于缓存数据更新机制,当某一个作用域(一级缓存Session/二级缓存Namespaces)的进行了新增、修改、删除操作后,默认该作用域下所有select中的缓存将被clear
  2. 二级缓存需要缓存的数据实现Serializable接口
  3. 只有会话提交或者关闭以后,一级缓存中的数据才会转移到二级缓存中、

④ 问题总结

mybatis面试题,Java面试宝典,java,spring,spring boot,springMVC,面试

引用说明

https://www.bilibili.com/video/BV1yT411H7YK?p=35&vd_source=98092b0aee05ae7c890b09fe07f13df4文章来源地址https://www.toymoban.com/news/detail-733662.html

到了这里,关于Java开发之框架(spring、springmvc、springboot、mybatis)【面试篇 完结版】的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • SSM(Spring+SpringMVC+MyBatis)框架集成

    进行SSM(Spring+SpringMVC+MyBatis)集成的主要原因是为了提高开发效率和代码可维护性。SSM是一套非常流行的Java Web开发框架,它集成了Spring框架、SpringMVC框架和MyBatis框架,各自发挥优势,形成了一个完整的开发框架。 首先,使用Spring框架可以实现组件的解耦和依赖注入,通过配

    2024年02月08日
    浏览(60)
  • 13万字学会Spring+SpringMVC+Mybatis框架

    目录 Spring介绍 Spring是什么 Spring发展历程 Spring优势 Spring的体系结构   Spring快速入门 Spring程序开发步骤 idea中快速入门  Spring配置文件 Bean标签基本配置 Bean标签范围配置  无参构造创建时机 Bean生命周期配置  Bean实例化三种方式    Bean的依赖注入分析 依赖注入概念 将User

    2023年04月08日
    浏览(30)
  • IDEA版SSM入门到实战(Maven+MyBatis+Spring+SpringMVC) -Spring搭建框架步骤

    第一章 初识Spring 1.1 Spring简介 Spring是一个为简化企业级开发而生的 开源框架 。 Spring是一个 IOC(DI) 和 AOP 容器框架。 IOC全称:Inversion of Control【控制反转】 将对象【万物皆对象】控制权交个Spring DI全称:(Dependency Injection):依赖注入 AOP全称:Aspect-Oriented Programming,面向切面编

    2024年02月04日
    浏览(48)
  • SSM框架的学习与应用(Spring + Spring MVC + MyBatis)-Java EE企业级应用开发学习记录(第五天)MyBatis的注解开发

    ​ 昨天我们深入学习了 MyBatis多表之间的关联映射,了解掌握了一对一关联映射,一对多关联映射,嵌套查询方式以及嵌套结果方式,掌握了缓存机制的一级缓存,二级缓存等概念,也使用了代码进行复现理解 。但是都是基于XML配置文件的方式来实现的,现在我们要学习一下

    2024年02月11日
    浏览(64)
  • Spring框架常见注解(Spring、Springboot、Springmvc)

    注解 说明 @Component、@Controller、@Service、@Repository 使用在类上用于实例化Bean @Autowired 使用在字段上用于根据类型依赖注入 @Qualifier 结合@Autowired一起使用用于根据名称进行依赖注入 @Scope 标注Bean的作用范围 @Configuration 指定当前类是一个 Spring 配置类,当创建容器时会从该类上

    2024年02月15日
    浏览(52)
  • (第六天)初识Spring框架-SSM框架的学习与应用(Spring + Spring MVC + MyBatis)-Java EE企业级应用开发学习记录

    ​ 昨天我们已经把Mybatis框架的基本知识全部学完,内容有Mybatis是一个半自动化的持久层ORM框架,深入学习编写动态SQL,Mybatis的关联映射,一对一、一对多、多对多、Mybatis的缓存机制,一二级缓存的开启和设置,缓存命中率、如何使用idea链接数据库自动生成pojo类等。我们学

    2024年02月10日
    浏览(67)
  • 【Spring+SpringMVC+Mybatis】SSM框架的整合、思想、工作原理和优缺点的略微讲解

    🚀欢迎来到本文🚀 🍉个人简介:陈童学哦,目前学习C/C++、算法、Python、Java等方向,一个正在慢慢前行的普通人。 🏀系列专栏:陈童学的日记 💡其他专栏:C++STL,感兴趣的小伙伴可以看看。 🎁希望各位→点赞👍 + 收藏⭐️ + 留言📝 ​ ⛱️万物从心起,心动则万物动🏄

    2024年02月10日
    浏览(49)
  • SSM框架的学习与应用(Spring + Spring MVC + MyBatis)-Java EE企业级应用开发学习记录(第一天)Mybatis的学习

    一、当前的主流框架介绍(这就是后期我会发出来的框架学习) Spring框架 ​ Spring是一个开源框架,是为了解决企业应用程序开发复杂性而创建的 ,其主要优势之一就是分层架构。 Spring提供了更完善的开发环境,可以为POJO(Plain Ordinary Java Object,普通Java对象 )对象提供企业级

    2024年02月12日
    浏览(58)
  • SSM框架的学习与应用(Spring + Spring MVC + MyBatis)-Java EE企业级应用开发学习记录(第二天)Mybatis的深入学习

    上一篇我们的项目搭建好了,也写了简答的Junit测试类进行测试,可以正确映射到数据库中。 那么这篇文章来深入学习一下以下几个点: 了解 MyBatis的核心对象SqlSessionFactoryBuilder 以及它的作用 掌握MyBatis核心配置文件以及元素的使用 。 掌握MyBatis映射文件及其元素的使用 。

    2024年02月11日
    浏览(68)
  • Spring+SpringMVC+MyBatis整合项目开发(配有项目,已开源)

    🍰 个人主页:__Aurora__ 🍞 如果文章有什么需要改进的地方还请各位大佬斧正。 🍉如果我的文章对你有帮助➡️ 关注🙏🏻 点赞👍 收藏⭐️ 🔥最近在学SSM框架,本文是根据b站【黑马程序员 ssm框架 2021 版】整理。 🔥视频链接:https://www.bilibili.com/video/BV1WZ4y1P7Bp?spm_id_from=3

    2023年04月08日
    浏览(53)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包