java面试框架篇(Spring常见问题、SpringBoot、SpringMVC、mybatis经典问题、SpringCloud组件)

2024-05-28 1672阅读

温馨提示:这篇文章已超过372天没有更新,请注意相关的内容是否还可用!

文章目录

  • 面试专题-java框架篇
    • 1. spring常见问题
      • 1.1. spring是什么?
      • 1.2. 谈谈你对AOP的理解
      • 1.3. 谈谈你对IOC的理解
      • 1.4. Spring Boot、 Spring MVC和Spring有什么区别
      • 1.5. spring bean 生命周期
      • 1.6. spring事务传播机制有哪些?
      • 1.7. 循环依赖
      • 1.8. spring框架中使用了哪些设计模式
      • 2. SpringBoot
      • 3. SpringMVC
      • 4. mybatis经典问题
      • 3. springCloud组件
          • 3.1. springCloud-gateway
          • 3.2. springCloud-OpenFeign
          • 3.3. springCloud-alibaba-nacos
          • 3.4. springCloud-sentinel(了解)
          • 3.5. springCloud-sleuth(了解)

            面试专题-java框架篇

            1. spring常见问题

            1.1. spring是什么?

            在不同的语境中,Spring 所代表的含义是不同的。下面我们就分别从“广义”和“狭义”两个角度,对 Spring 进行介绍。

            广义的 Spring:Spring 技术栈

            广义上的 Spring 泛指以 Spring Framework 为核心的 Spring 技术栈。

            经过十多年的发展,Spring 已经不再是一个单纯的应用框架,而是逐渐发展成为一个由多个不同子项目(模块)组成的成熟技术,例如 Spring Framework、Spring MVC、SpringBoot、Spring Cloud、Spring Data、Spring Security 等,其中 Spring Framework 是其他子项目的基础。

            这些子项目涵盖了从企业级应用开发到云计算等各方面的内容,能够帮助开发人员解决软件发展过程中不断产生的各种实际问题,给开发人员带来了更好的开发体验。

            狭义的 Spring:Spring Framework

            狭义的 Spring 特指 Spring Framework,通常我们将它称为 Spring 框架。

            Spring 框架是一个分层的、面向切面的 Java 应用程序的一站式轻量级解决方案,它是 Spring 技术栈的核心和基础,是为了解决企业级应用开发的复杂性而创建的。

            Spring 有两个最核心模块: IoC 和 AOP。

            IoC:Inverse of Control 的简写,译为“控制反转”,指把创建对象过程交给 Spring 进行管理。

            AOP:Aspect Oriented Programming 的简写,译为“面向切面编程”。AOP 用来封装多个类的公共行为,将那些与业务无关,却为业务模块所共同调用的逻辑封装起来,减少系统的重复代码,降低模块间的耦合度。另外,AOP 还解决一些系统层面上的问题,比如日志、事务、权限等。

            1.2. 谈谈你对AOP的理解

            全称:面向切面编程

            系统是由许多不同的组件所组成的,每一个组件各负责一块特定功能。除了实现自身核心功能之外,这些组件还经常承担着额外的职责。例如分布式锁、日志、事务管理和安全等其他的核心服务经常融入到自身具有核心业务逻辑的组件中去。这些系统服务经常被称为横切关注点,因为它们会跨越系统的多个组件。

            当我们需要为分散的对象引入公共行为的时候,OOP则显得无能为力。也就是说,OOP允许你定义从上到下的关系,但并不适合定义从左到右的关系。例如日志功能 分布式锁等功能。

            分布式锁、日志代码往往水平地散布在所有对象层次中,而与它所散布到的对象的核心功能毫无关系。

            在OOP设计中,它导致了大量代码的重复,而不利于各个模块的重用。

            AOP:将程序中的交叉业务逻辑(比如安全,日志,事务等),封装成一个切面,然后注入到目标对象(具体业务逻辑)中去。AOP可以对某个对象或某些对象的功能进行增强,比如对象中的方法进行增强,可以在执行某个方法之前额外的做一些事情,在某个方法执行之后额外的做一些事情

            1.3. 谈谈你对IOC的理解

            IoC 是 Inversion of Control 的简写,译为“控制反转”,它不是一门技术,而是一种设计思想,是一个重要的面向对象编程法则,能够指导我们如何设计出松耦合、更优良的程序。

            Spring 通过 IoC 容器来管理所有 Java 对象的实例化和初始化,控制对象与对象之间的依赖关系。我们将由 IoC 容器管理的 Java 对象称为 Spring Bean,它与使用关键字 new 创建的 Java 对象没有任何区别。

            IoC 容器是 Spring 框架中最重要的核心组件之一,它贯穿了 Spring 从诞生到成长的整个过程

            1.4. Spring Boot、 Spring MVC和Spring有什么区别

            spring是一个IOC容器,用来管理Bean,使用依赖注入实现控制反转,可以很方便的整合各种框架,提供AOP机制弥补OOP的代码重复问题、更方便将不同类不同方法中的共同处理抽取成切面、自动注入给方法执行,比如日志、异常等

            springmvc是spring对web框架的一个解决方案,提供了一个总的前端控制器Servlet,用来接收请求,然后定义了一套路由策略(url到handle的映射)及适配执行handle,将handle结果使用视图解析技术生成视图展现给前端

            springboot是spring提供的一个快速开发工具包,让程序员能更方便、更快速的开发spring+springmvc应用,简化了配置(约定大于配置),整合了一系列的解决方案(starter机制)、redis.mongodb.es,可以开箱即用

            1.5. spring bean 生命周期

            java面试框架篇(Spring常见问题、SpringBoot、SpringMVC、mybatis经典问题、SpringCloud组件)

            bean对象创建(调用无参构造器)

            给bean对象设置属性

            bean的后置处理器(初始化之前)

            bean对象初始化(需在配置bean时指定初始化方法)

            bean的后置处理器(初始化之后)

            bean对象就绪可以使用

            bean对象销毁(需在配置bean时指定销毁方法)

            IOC容器关闭

            1.6. spring事务传播机制有哪些?

            事务的传播行为一般发生在事务嵌套的场景中。如:有一个事务的方法里面调用了另外一个有事务的方法。这时会产生事务边界控制问题。即两个方式是各自作为事务提交还是内层事务合并到外层事务一起提交。

            传播机制含义
            REQUIRED如果当前不存在事务,就新建一个事务。如果存在事务,就加入到当前事务
            SUPPORTS支持当前事务,如果没有事务的话以非事务方式执行
            MANDATORY支持当前事务,如果没有事务抛出异常
            REQUIRES_NEW创建一个新的事务并挂起当前事务
            NOT_SUPPORTED以非事务方式执行,如果当前存在事务则将当前事务挂起
            NEVER以非事务方式进行,如果存在事务则抛出异常
            NESTED如果当前存在事务,则在嵌套事务内执行。如果当前没有事务,则进行与REQUIRED类似的操作

            1.7. 循环依赖

            请解释一下spring中的三级缓存三级缓存分别是什么?

            三个Map有什么异同?

            什么是循环依赖?请你谈谈?

            看过spring源码吗?

            如何检测是否存在循环依赖?

            实际开发中见过循环依赖的异常吗?

            多例的情况下,循环依赖问题为什么无法解决?什么是循环依赖?

            java面试框架篇(Spring常见问题、SpringBoot、SpringMVC、mybatis经典问题、SpringCloud组件)

            两种注入方式对循环依赖的影响?

            官方解释https://docs.spring.io/spring-framework/docs/current/reference/html/core.html#beans-dependency-resolution循环依赖如果主要使用构造函数注入,则有可能创建无法解析的循环依赖场景(circular dependency scenario)。例如:类A通过构造函数注入需要类B的实例,类B通过构造函数注入需要类A的实例。如果为类A和类B配置bean以相互注入,Spring IoC容器将在运行时检测此循环引用,并抛出BeanCurrentlyInCreationException。一种可能的解决方案是编辑某些类的源代码,由setter而不是构造函数进行配置。或者,避免构造函数注入,只使用setter注入。换句话说,虽然不推荐,可以使用setter注入来配置循环依赖项(circular dependencies)。与典型情况(没有循环依赖)不同,bean A和bean B之间的循环依赖迫使一个bean在完全初始化之前注入另一个bean(典型的鸡和蛋场景)

            相关概念

            ​ 实例化:堆内存中申请空间java面试框架篇(Spring常见问题、SpringBoot、SpringMVC、mybatis经典问题、SpringCloud组件)

            初始化:对象属性赋值java面试框架篇(Spring常见问题、SpringBoot、SpringMVC、mybatis经典问题、SpringCloud组件)

            三级缓存名称对象名含义

            一级缓存singletonObjects存放已经经历了完整生命周期的Bean对象

            二级缓存earlySingletonObjects存放早期暴露出来的Bean对象,Bean的生命周期未结束(属性还未填充完)

            三级缓存singletonFactories存放可以生成Bean的工厂四个关键方法

            java面试框架篇(Spring常见问题、SpringBoot、SpringMVC、mybatis经典问题、SpringCloud组件)

            package org.springframework.beans.factory.support;
            ...
            public class DefaultSingletonBeanRegistry extends SimpleAliasRegistry implements SingletonBeanRegistry {
                ...
                /** 
                单例对象的缓存:bean名称—bean实例,即:所谓的单例池。
                表示已经经历了完整生命周期的Bean对象
                第一级缓存
                */
                private final Map singletonObjects = new ConcurrentHashMap(256);
                /**
                早期的单例对象的高速缓存: bean名称—bean实例。
                表示 Bean的生命周期还没走完(Bean的属性还未填充)就把这个 Bean存入该缓存中也就是实例化但未初始化	   的 bean放入该缓存里第二级缓存
                */
                private final Map earlySingletonObjects = new HashMap(16);
                /**
                单例工厂的高速缓存:bean名称—ObjectFactory
                表示存放生成 bean的工厂
                第三级缓存
                */
                private final Map
VPS购买请点击我

免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们,邮箱:ciyunidc@ciyunshuju.com。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!

目录[+]