关于Spring、SpringMVC、SpringBoot、Mybatis、MybatisPlus等框架面试题

发布时间:2024年01月07日

Spring框架:

什么是Spring框架?

Spring是一个开源的轻量级Java框架,用于构建企业级Java应用程序。它提供了基础设施、容器、数据访问、事务管理、AOP等功能,简化了Java开发。

Spring的核心模块有哪些?

核心模块包括IOC容器、AOP、数据访问、事务管理、模型-视图-控制器(MVC)等

解释一下依赖注入(Dependency Injection)和控制反转(Inversion of Control)是什么?

依赖注入是将对象所需的依赖关系通过外部注入,而控制反转是由框架负责创建和管理对象。Spring通过IoC容器实现控制反转,实现了依赖注入。

Spring中的Bean是什么?有哪些作用域?

Bean是由Spring IoC容器管理的对象。作用域包括单例(singleton,默认)、原型(prototype)、会话(session)、请求(request)等。

AOP(面向切面编程)是什么,Spring中是如何实现的?

AOP是面向切面编程,用于处理横切关注点。Spring中通过代理和切面实现AOP,可以使用注解或XML配置切面和通知。

Spring中的事务管理是怎么实现的?

Spring事务管理通过声明式事务和编程式事务两种方式实现。可以使用@Transactional注解声明事务,或者使用TransactionTemplate编程式管理事务。

Spring中的注解有哪些,它们的作用是什么?

一些常见注解包括@Component(通用组件)、@Service(服务层)、@Controller(控制器层),@Autowired用于自动注入依赖,@Transactional用于声明事务等。

SpringMVC框架:

SpringMVC是什么?有什么优点?

SpringMVC是Spring框架的一个模块,用于构建基于MVC模式的Web应用程序。它提供了简洁的开发模式、灵活的配置和良好的扩展性,支持RESTful风格。

MVC模式是什么?SpringMVC是如何实现的?

MVC模式是一种将应用程序分为模型(Model)、视图(View)、控制器(Controller)三层的设计模式。SpringMVC通过前端控制器(DispatcherServlet)和处理器映射器等组件实现MVC模式,将请求映射到相应的控制器进行处理。

SpringMVC中的控制器是什么?如何创建一个控制器?

控制器负责处理用户请求,并返回相应的视图或数据。可以通过在类上使用@Controller注解或继承AbstractController类来创建控制器。

解释一下DispatcherServlet的作用。

DispatcherServlet是SpringMVC的前端控制器,负责接收所有请求并将它们分发给相应的控制器。它还处理视图解析、异常处理等任务。

SpringMVC的请求处理流程是什么?

请求首先由DispatcherServlet接收,然后由处理器映射器查找匹配的控制器,控制器处理请求并返回ModelAndView,最后由视图解析器解析视图并返回给客户端。

@RequestMapping注解的作用是什么?

@RequestMapping注解用于映射请求路径和HTTP方法到具体的控制器方法。它可以设置多种属性,包括路径、请求方法、参数等。

SpringMVC中如何传递数据给前端页面?

可以通过ModelAndView中的Model对象传递数据,也可以使用@ModelAttribute注解将数据绑定到方法参数上。在页面中可以使用JSTL或Thymeleaf等标签展示数据。

SpringBoot框架:

什么是Spring Boot?有哪些特点?

Spring Boot是一个用于简化和加速Spring应用程序开发的框架。它提供了约定大于配置的开发模式,内嵌了常用的开发工具,简化了配置,使得开发者可以更专注于业务逻辑。(主要回答出来约定大于配置这个关键点)

Spring Boot的主要优势是什么?

主要优势包括简化配置、内嵌Web服务器、自动配置、约定大于配置、强大的开发工具、与Spring Cloud的良好集成等。

Spring Boot中的自动配置是怎么实现的?

Spring Boot使用条件化配置(@Conditional注解)和类路径扫描,根据项目的依赖和配置情况,自动配置相关的Beans,减少了手动配置的工作。

如何在Spring Boot中配置数据源?

application.propertiesapplication.yml中配置数据源的相关属性,如spring.datasource.urlspring.datasource.usernamespring.datasource.password

Spring Boot中的启动类是什么?它的作用是什么?

启动类是带有main方法的类,使用@SpringBootApplication注解标记。它的作用是启动应用程序,初始化Spring容器,并执行相应的初始化操作。

Spring Boot中的热部署是如何实现的?

Spring Boot通过使用Spring Boot DevTools提供的热部署功能,可以在开发环境中实现应用程序的快速重新加载。

Spring Boot中如何处理异常?

可以通过@ControllerAdvice@ExceptionHandler注解定义全局异常处理器。同时,Spring Boot提供了默认的错误处理机制,可以自定义错误页面。

Mybatis框架:

什么是MyBatis?

MyBatis是一个开源的Java持久层框架,用于将数据库操作和Java程序中的对象映射起来,简化数据库操作。

MyBatis和Hibernate的区别是什么?

MyBatis是基于SQL语句的,提供了灵活的SQL控制权,而Hibernate是基于HQL(Hibernate Query Language)的,更注重对象的关系映射。

MyBatis的工作原理是什么?

MyBatis将Java对象与数据库表进行映射,通过XML或注解配置SQL语句,并提供SqlSessionFactory创建SqlSession,执行SQL语句与数据库交互。

如何在MyBatis中执行动态SQL?

可以使用MyBatis的<if><choose><when>等标签,或者使用动态SQL注解构建动态SQL。

MyBatis中的一级缓存和二级缓存有何区别?

一级缓存是SqlSession级别的缓存,而二级缓存是Mapper级别的缓存,可以跨SqlSession共享。

如何在MyBatis中进行批量插入?

使用insertList等批量插入方法,或者使用foreach标签构建批量插入的SQL。

解释一下MyBatis的映射文件中的resultMap是什么?

resultMap定义了如何将数据库查询结果映射到Java对象,包括字段与属性的对应关系、关联关系等。

MybatisPlus框架:

什么是MyBatis-Plus?有什么优势?

MyBatis-Plus是基于MyBatis的增强工具,提供了便捷的增删改查操作,简化了MyBatis的使用。优势包括强大的CRUD操作、代码生成器、Lambda表达式查询等。

MyBatis-Plus中的Wrapper是用来做什么的?

Wrapper是用于构建条件查询的对象,可以用于动态拼接SQL条件,实现灵活的查询。

如何在MyBatis-Plus中进行条件查询?

可以使用QueryWrapperUpdateWrapper等Wrapper对象,通过链式调用方法构建查询条件。

MyBatis-Plus的代码生成器有什么作用?

代码生成器可以根据数据库表结构自动生成对应的实体类、Mapper接口、Service接口、Controller等代码,提高开发效率。

在MyBatis-Plus中如何实现分页查询?

可以使用Page对象进行分页查询,MyBatis-Plus会自动处理分页查询的SQL。

MyBatis-Plus中的乐观锁是怎么实现的?

MyBatis-Plus提供了@Version注解用于标识乐观锁字段,在更新时会自动处理版本号的增加。

如何在MyBatis-Plus中配置多数据源?

可以通过@DS注解切换数据源,同时在配置文件中配置多个数据源的相关信息。

附加面试题:

SpringMVC的工作流程:

  1. 客户端发送请求: 当客户端(通常是浏览器)发送HTTP请求到服务器时,请求首先由Servlet容器(如Tomcat)接收。

  2. DispatcherServlet接收请求: 在Spring MVC中,DispatcherServlet是前端控制器。它是一个Servlet,接收所有的请求并负责协调整个请求处理流程。

  3. HandlerMapping确定处理器: DispatcherServlet通过HandlerMapping(处理器映射器)来确定请求的处理器(Controller)。HandlerMapping将请求映射到相应的Controller类和方法。

  4. Controller处理请求: 一旦找到了适当的Controller,DispatcherServlet将请求传递给该Controller。Controller负责处理请求,执行业务逻辑,并返回一个ModelAndView对象。

  5. ModelAndView: Controller返回的ModelAndView包含了处理结果的数据以及视图名称。Model表示业务数据,View表示视图名称。

  6. ViewResolver解析视图: DispatcherServlet使用ViewResolver(视图解析器)将视图名称解析为实际的View对象。ViewResolver根据视图名称找到对应的视图实现,例如JSP页面、Thymeleaf模板等。

  7. 视图渲染: 一旦找到了实际的View对象,DispatcherServlet将Model中的数据传递给View,并触发视图的渲染过程。视图负责将Model中的数据渲染成最终的响应内容。

  8. 响应返回: 渲染完成后,视图返回最终的响应给DispatcherServlet,然后DispatcherServlet将响应发送回客户端。

这个整个过程形成了一个MVC(Model-View-Controller)架构模式,其中DispatcherServlet充当了前端控制器,负责协调请求的处理流程。通过HandlerMapping、Controller、ViewResolver等组件的协作,Spring MVC能够灵活、可配置地处理各种请求,并将业务逻辑和视图分离,使代码更加模块化和易于维护。

?

Servlet的生命周期:Servlet的生命周期包括加载、初始化、请求处理和销毁

Servlet的生命周期是指从创建到销毁的整个过程,包括以下三个阶段:

加载与实例化:

  • 在Web应用程序启动时,Servlet容器会加载并实例化Servlet类。
  • 通过调用Servlet的构造方法来创建Servlet实例。
  • 这个阶段只会发生一次,在Servlet第一次被请求时。

初始化:

  • 在Servlet实例创建后,容器会调用其init(ServletConfig config)方法进行初始化。
  • init方法中,可以进行一些初始化的操作,如读取配置文件、建立数据库连接等。
  • 这个阶段只会发生一次,通常在Servlet加载后立即执行。

请求处理与销毁:?

  • 当有新的HTTP请求到达时,容器调用Servlet的service(ServletRequest request, ServletResponse response)方法处理请求。
  • service方法中,根据请求类型(GET、POST等),会分发到对应的doGetdoPost等方法进行具体的业务处理。

销毁:?

  • Servlet容器在Web应用程序卸载或容器关闭时调用Servlet的destroy方法。
  • destroy方法中,可以进行一些清理工作,如关闭数据库连接等。

总体而言,Servlet的生命周期是由Servlet容器负责管理的,开发者可以通过重写initservicedestroy等方法,实现自定义的初始化和清理逻辑,以及对HTTP请求的处理。?

文章来源:https://blog.csdn.net/zuiailianwenjing/article/details/135418132
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。