面试汇总——JavaEE——Spring/SpringMVC/Mybatis

文章目录

JavaEE

spring(一)

spring框架

请谈一谈Spring中自动装配的方式有哪些?

byName:通过Bean对象的id进行查找

byType:通过Bean的class类型进行查找

Constructor:通过构造器的参数进行装配

no:不进行自动装配,手动装配来实现

autodetect:如果有默认的构造器则使用Constructor,如果没有则使用byType

补充

Bean的生命周期:

  • 实现BeanNameAware接口没有使用Bean的后置处理器

    1. 给属性赋值(set())

    2. 此时实现了BeanNameAware,会将Bean的id通过BeanNameAware自带的setName(),传入

    3. 初始化bean

    4. 调用bean的方法(即此时的测试方法)

    5. 销毁bean

      在Xml中配置

      • init-method:指定初始化的方法
      • destroy-method:指定销毁的方法
  • 实现BeanNameAware接口使用Bean的后置处理器

    1. 给属性赋值(set())
    2. 此时实现了BeanNameAware,会将Bean的id通过BeanNameAware自带的setName(),传入
    3. 调用前置处理器,输出name属性的值【作为测试要求】
    4. 初始化bean
    5. 调用后置处理器,修改了name属性的值
    6. 因为修改了属性的值,因此再次调用set(),给属性赋值
    7. 调用bean的方法(即此时的测试方法)
    8. 销毁bean
请问Spring中Bean的作用域有哪些?

prototype:原型模式

  • 在创建容器的时候不会去创建bean,只用每次getBean()时才会创建一个新的bean

singleton:单例模式,只会创建一个对象,每次都是从此对象中进行获取

  • 在创建容器的时候就会创建一个bean,每次getBean(),只是从容器中直接获取

在weApplicationbContext才会有的

  • request:在每次的Http请求都会创建一个新的request
  • session:在同一个Http Session中会使用同一个session,但当关闭此会话,就会创建新的session
  • application:在整个ServletContext中使用一个application
请说明一下Spring中BeanFactory和ApplicationContext的区别是什么?

BeanFactory是spring容器原始的factory,当我们去获取bean的时候并不会创建对象,只有使用了getBean()才会创建对象,不支持web,aop等spring插件;ApplicationContext实现了BeanFactory接口,并且当获取bean的时候就可以创建对象,而且还支持许多插件,因此几乎所有场合都可以用ApplicationContext来实现

控制反转

请问什么是IoC和DI?并且简要说明一下DI是如何实现的?

IOC是控制反转,将创建一个对象的主动性变为被动的

DI依赖注入,可以理解为是控制反转的一种表现,因为IOC主要实现创建对象权的反转,此时就需要将所用的对象,或者所需的对象的属性通过依赖注入传给所用的对象

spring

请说明一下springIOC原理是什么?如果你要实现IOC需要怎么做?请简单描述一下实现步骤?

将对象的创建权由主动变为被动接收

请简单说明一下依赖注入的方式有哪几种?以及这些方法如何使用?

set方法

<bean id="address" class="com.wjq.pojo.Address">
    <property name="address" value="sh"/>
</bean>

构造器方法

<bean id="user" class="com.wjq.pojo.User">
    <constructor-arg index="0" value="aaa"/>
    <!--<constructor-arg type="java.lang.String" value="bbb"/>   
	<constructor-arg name="name" value="ccc"/>-->
</bean>

p命名空间

c命名空间

<!--    通过p命名空间实现   p=property-->
    <bean id="user" class="com.wjq.pojo.User" p:name="www" p:age="20"/>
<!--    通过c命名空间,需要有参构造器 c=construct-args-->
    <bean id="user1" class="com.wjq.pojo.User" c:name="qqq" c:age="10"/>
</beans>
请说明一下@Controller和@RestController的区别是什么?
  • Controller会经过视图解析器
  • RestController(ResponseBody+Controller)不会经过视图解析器,将返回的json字符串显示到指定页面上
请问在以前的学习中有使用过Spring里面的注解吗?如果有请谈一下autowired 和resource区别是什么?
  • autowired
    • 是根据通过byType进行自动装配的
    • 设置其required属性,来保证对象是否可以为null,true是不能为null,false是可以为null
    • 如果还想根据name进行装配可以配合使用Qualifier()
  • resource
    • 先根据byName再根据byType进行自动装配的
    • 其内有两个属性,如果指定了name,则按照byName,如果指定了type,则根据byType,如果没有指定则是先根据byName再根据byType进行自动装配的
    • 是属于Java的而不属于Spring
请介绍一下bean的生命周期

Bean的生命周期:

  • 实现BeanNameAware接口没有使用Bean的后置处理器

    1. 给属性赋值(set())

    2. 此时实现了BeanNameAware,会将Bean的id通过BeanNameAware自带的setName(),传入

    3. 初始化bean

    4. 调用bean的方法(即此时的测试方法)

    5. 销毁bean

      在Xml中配置

      • init-method:指定初始化的方法
      • destroy-method:指定销毁的方法
  • 实现BeanNameAware接口使用Bean的后置处理器

    1. 给属性赋值(set())
    2. 此时实现了BeanNameAware,会将Bean的id通过BeanNameAware自带的setName(),传入
    3. 调用前置处理器,输出name属性的值【作为测试要求】
    4. 初始化bean
    5. 调用后置处理器,修改了name属性的值
    6. 因为修改了属性的值,因此再次调用set(),给属性赋值
    7. 调用bean的方法(即此时的测试方法)
    8. 销毁bean

spring(二)

spring

请简要说明一下IOC和AOP是什么?
  • IOC:控制反转

    • 将对象的创建的权力由主动创建变为被动注入
      • set()注入
    • 构造器注入
      • 注解注入
    • 同时也降低了代码之间的耦合度,因为对象的创建可以由IOC容器来创建
  • AOP:面向切面

    • 面向切面的编程,对于像一些事务,安全等我们可以通过织入的方式将其插入到所要用的地方,降低程序之间的耦合度,提高代码的重用性
请简单谈一下spring框架的优点都有哪些?

可以让程序员更加专注于业务逻辑的代码,不用再编写一些繁琐的底层代码,同时将程序的耦合度降低,可以实现代码的复用

  1. Spring是一个开源的免费的框架(容器)

  2. Spring是一个轻量级的非入侵式的框架

  3. 控制反转(IOC),面向切面编程(AOP)

  4. 支持事务处理,对框架的整合处理

    总结:Spring就是一个轻量级的控制反转(IOC)和面向切面编程(AOP)的框架

请简单介绍一下spring?

spring是一个轻量级的IOC和AOP的容器,可以实现

  • 核心容器:核心容器提供 Spring 框架的基本功能。核心容器的主要组件是 BeanFactory,它是工厂模式的实现。BeanFactory 使用控制反转(IOC) 模式将应用程序的配置和依赖性规范与实际的应用程序代码分开。
  • Spring 上下文:Spring 上下文是一个配置文件,向 Spring 框架提供上下文信息。Spring 上下文包括企业服务,例如 JNDI、EJB、电子邮件、国际化、校验和调度功能。
  • Spring AOP:通过配置管理特性,Spring AOP 模块直接将面向方面的编程功能集成到了 Spring 框架中。所以,可以很容易地使 Spring 框架管理的任何对象支持 AOP。Spring AOP 模块为基于 Spring 的应用程序中的对象提供了事务管理服务。通过使用 Spring AOP,不用依赖 EJB 组件,就可以将声明性事务管理集成到应用程序中。
  • Spring DAO:JDBC DAO 抽象层提供了有意义的异常层次结构,可用该结构来管理异常处理和不同数据库供应商抛出的错误消息。异常层次结构简化了错误处理,并且极大地降低了需要编写的异常代码数量(例如打开和关闭连接)。Spring DAO 的面向 JDBC 的异常遵从通用的 DAO 异常层次结构。
  • Spring ORM:Spring 框架插入了若干个 ORM 框架,从而提供了 ORM 的对象关系工具,其中包括 JDO、Hibernate 和 iBatis SQL Map。所有这些都遵从 Spring 的通用事务和 DAO 异常层次结构。
  • Spring Web 模块:Web 上下文模块建立在应用程序上下文模块之上,为基于 Web 的应用程序提供了上下文。所以,Spring 框架支持与 Jakarta Struts 的集成。Web 模块还简化了处理多部分请求以及将请求参数绑定到域对象的工作。
  • Spring MVC 框架:MVC 框架是一个全功能的构建 Web 应用程序的 MVC 实现。通过策略接口,MVC 框架变成为高度可配置的,MVC 容纳了大量视图技术,其中包括 JSP、Velocity、Tiles、iText 和 POI。

事物管理

请问Spring支持的事务管理类型有哪些?以及你在项目中会使用哪种方式?

编程式事务和声明式事务

声明式事务

事务

  • 事务具备的四种特性:ACID

    1. 原子性:事务的执行要么全部成功,要么全部失败,不会存在中间状态
    2. 一致性:数据库在事务执行前后都处于一致状态,如果事务执行成功,那么所有的变化都是成功后的状态,如果失败,那么所有的变化都是回滚后的
    3. 隔离性:在并发状态下,每个事务对数据的操作都是互不影响的
    4. 持久性:如果事务操作成功,那么即使数据库崩了,但是对数据是不会有影响的
  • 事务的传播

    1. required:如果当前事务存在,执行;不存在,创建新的事务(spring默认)
    2. supports:支持当前事务存在;不存在,以非法事务方法执行
    3. mandatory:使用当前事务;不存在,抛出异常
    4. required_new:当前事务存在,挂起,创建新的事务
    5. not_supported:以非法事务方法执行,当前事务存在,挂起
    6. never:以非法事务方法执行,当前事务存在,抛出异常
    7. nested:如果当前事务存在,则嵌套在当前事务内执行;不存在,按照required执行
  • 脏读:在一个事务中对某一数据进行修改后但并未提交,此时另外一个事务也来访问,此时读到的数据是未提交之间的脏数据

  • 不可重复读:在一个事务中在对某一数据修改之前读在修改之后又读,此时前后两次获得的数据是不一样的

  • 幻读:没有说必须在同一事务中,在插入数据的过程中,前后两次查询的数据结果是不一样的

  • 事务的隔离

    • DEFAULT:spring使用的默认隔离级别

    • READ UNCOMMITED:未提交之前可以读取数据,会造成脏读,不可重复读,幻读

    • READ COMMITED:提交以后读取数据,防止脏读

    • REPEATABLE READ:可以防止脏读和不可重复读

    • SERIALIZABLE:可以防止脏读,不可重复读以及幻读

      Mysql默认REPEATABLE READ;oracle默认READ COMMITED

AOP

你如何理解AOP中的连接点(Joinpoint)、切点(Pointcut)、增强(Advice)、引介(Introduction)、织入(Weaving)、切面(Aspect)这些概念?
  • 连接点(Joinpoint)
    • 拥有边界性质的特定点,特定点可以理解为方法调用的前后
  • 切点(Pointcut)
    • 是一个方法或者类,即要在哪个方法或者类周围实现我们要增强,切点插入的地方就是程序的连接点
  • 增强(Advice)
    • 方法,即我们所要实现的添加,可以在方法或者类的前后
  • 引介(Introduction)
    • 一种特殊的增强
  • 织入(Weaving)
    • 横向切入,将切面代码插入到目标对象说
  • 切面(Aspect)
    • 是切点和通知结合在一起,即要实现横向切入的类
请问aop的应用场景有哪些?

事务、缓存、日志

动态代理

请问AOP的原理是什么?

将要添加的通知通过横向织入的方法增加到我们要实现的类或者方法的前后,其底层实现还是通过动态代理实现的,将原代码通过代理,将将横切关注点,包装在原代码上,实现我们的增强

AOP分为静态代理和动态代理,AspectJ是静态代理的增强;Spring AOP中的动态代理主要有两种方式,JDK动态代理和CGLIB动态代理

框架

请说明一下Spring框架为企业级开发带来的好处有哪些?
  • IOC:通过对IOC的应用可以解决手动创建对象的实现,将对象的创建权由主动创建转变为注入
  • AOP:可以实现横向切入,即不用改动原来的代码,增加自己想要的通知
  • 非侵入式框架:即不需要继承框架中的类,降低了耦合度
请问Struts拦截器和Spring AOP有什么区别?

struts2 拦截器采用xwork2的interceptor

spring AOP的拦截器是基于IOC的,而IOC底层是由动态代理与cglib实现的

请问持久层设计要考虑的问题有哪些?请谈一下你用过的持久层框架都有哪些?

数据库的正确连接;对应的pojo的编写;数据库表的设计不要过多,否则会影响效率;注意数据库连接时的开销

Mybatis

SQL

请问MyBatis中的动态SQL是什么意思?

可以根据条件动态的生成需要的sql语句,因为在面临复杂的sql语句时,进行拼接会容易出错

Mybatis

请说明一下MyBatis中命名空间(namespace)的作用是什么?

命名空间就相当于平时写jdbc时这个类实现了哪个父类的什么接口,即实现的dao(mapper)接口,spring会自动帮我们绑定这个接口;也可以有效的防止命名的冲突

MVC

设计模式

请谈一下Spring MVC的工作原理是怎样的?

在springMVC中有两个重要的类处理器映射和处理适配器

  1. 首先DispatcherServlet会拦截所有的servlet请求
  2. 处理器映射会根据url找到处理器handler,再找到controller,返回给DispatcherServlet
  3. 处理适配器会执行controller,得到视图模型(ModelAndView),将视图模型返回给DispatcherServlet
  4. DispatcherServlet用视图解析器(ViewResolver)进行解析,生成对应的视图,传给DispatcherServlet
  5. 视图进行渲染返回给用户浏览器,最后呈现给用户

spring

请简述一下SpringMVC的运行机制?以及运行机制的流程是什么?

在springMVC中有两个重要的类处理器映射和处理适配器

  1. 首先DispatcherServlet会拦截所有的servlet请求
  2. 处理器映射会根据url找到处理器handler,再找到controller,返回给DispatcherServlet
  3. 处理适配器会执行controller,得到视图模型(ModelAndView),将视图模型返回给DispatcherServlet
  4. DispatcherServlet用视图解析器(ViewResolver)进行解析,生成对应的视图,传给DispatcherServlet
  5. 视图进行渲染返回给用户浏览器,最后呈现给用户
请说明一下springmvc和spring-boot区别是什么?

springMVC是基于spring的一个web框架,spring-boot是将spring中反射繁琐的配置文件变为自动配置,降低了项目搭建的复杂度

spring MVC

请说明一下Spring MVC注解的优点是什么?
  • 可以简化复杂的xml编写,提高编写的效率,将等多注意放在业务逻辑的处理上
  • 其次xml只有在运行期间才会发现错误,可以提前检测安全

各种框架对比与项目优化

框架

请简单介绍一下你了解的Java领域中的Web Service框架都有哪些?

Java领域的Web Service框架很多,包括Axis2(Axis的升级版本)、Jersey(RESTful的Web Service框架)、CXF(XFire的延续版本)、Hessian、Turmeric、JBoss SOA等,其中绝大多数都是开源框架。

请简述一下Mybatis和Hibernate的区别是什么?
  • mybatis无法做到数据库无关性,如果需要实现支持多种数据库的软件则需要自定义多套sql映射文件,工作量大
  • Hibernate对象/关系映射能力强,数据库无关性好

原文地址:https://blog.csdn.net/weixin_45734378/article/details/116398377

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


开发过程中是不可避免地会出现各种异常情况的,例如网络连接异常、数据格式异常、空指针异常等等。异常的出现可能导致程序的运行出现问题,甚至直接导致程序崩溃。因此,在开发过程中,合理处理异常、避免异常产生、以及对异常进行有效的调试是非常重要的。 对于异常的处理,一般分为两种方式: 编程式异常处理:是指在代
说明:使用注解方式实现AOP切面。 什么是AOP? 面向切面编程,利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。 通俗描述:不通过修改源代码方式,在主干功能里面添加新功能。 AOP底层使用动态代理。 AOP术语 连接点
Spring MVC中的拦截器是一种可以在请求处理过程中对请求进行拦截和处理的机制。 拦截器可以用于执行一些公共的操作,例如日志记录、权限验证、数据转换等。在Spring MVC中,可以通过实现HandlerInterceptor接口来创建自定义的拦截器,并通过配置来指定拦截器的应用范围和顺序。 S
在 JavaWeb 中,共享域指的是在 Servlet 中存储数据,以便在同一 Web 应用程序的多个组件中进行共享和访问。常见的共享域有四种:ServletContext、HttpSession、HttpServletRequest、PageContext。 ServletContext 共享域:
文件上传 说明: 使用maven构建web工程。 使用Thymeleaf技术进行服务器页面渲染。 使用ResponseEntity实现下载文件的功能。 @Controller public class FileDownloadAndUpload { @GetMapping(&quot;/file/d
创建初始化类,替换web.xml 在Servlet3.0环境中,Web容器(Tomcat)会在类路径中查找实现javax.servlet.ServletContainerInitializer接口的类,如果找到的话就用它来配置Servlet容器。 Spring提供了这个接口的实现,名为SpringS
在 Web 应用的三层架构中,确保在表述层(Presentation Layer)对数据进行检查和校验是非常重要的。正确的数据校验可以确保业务逻辑层(Business Logic Layer)基于有效和合法的数据进行处理,同时将错误的数据隔离在业务逻辑层之外。这有助于提高系统的健壮性、安全性和可维护
什么是事务? 事务(Transaction)是数据库操作最基本单元,逻辑上一组操作,要么都成功,要么都失败,如果操作之间有一个失败所有操作都失败 。 事务四个特性(ACID) 原子性 一组操作要么都成功,要么都失败。 一致性 一组数据从事务1合法状态转为事务2的另一种合法状态,就是一致。 隔离性 事
什么是JdbcTemplate? Spring 框架对 JDBC 进行封装,使用 JdbcTemplate 方便实现对数据库操作。 准备工作 引入jdbcTemplate的相关依赖: 案例实操 创建jdbc.properties文件,配置数据库信息 jdbc.driver=com.mysql.cj.
SpringMVC1.MVC架构MVC是模型(Model)、视图(View)、控制器(Controller)的简写,是一种软件设计规范是将业务逻辑、数据、显示分离的方法来写代码MVC主要作用是:降低了视图和业务逻辑之间的双向耦合MVC是一个架构模型,不是一种设计模式。1.model(模型)数据模型,提供要展示的数据,因此包
SpringMVC学习笔记1.SpringMVC应用1.1SpringMVC简介​SpringMVC全名叫SpringWebMVC,是⼀种基于Java的实现MVC设计模型的请求驱动类型的轻量级Web框架,属于SpringFrameWork的后续产品。​MVC全名是ModelViewController,是模型(model)-视图(view)-控制器(co
11.1数据回显基本用法数据回显就是当用户数据提交失败时,自动填充好已经输入的数据。一般来说,如果使用Ajax来做数据提交,基本上是没有数据回显这个需求的,但是如果是通过表单做数据提交,那么数据回显就非常有必要了。11.1.1简单数据类型简单数据类型,实际上框架在这里没有
一、SpringMVC简介1、SpringMVC中重要组件DispatcherServlet:前端控制器,接收所有请求(如果配置/不包含jsp)HandlerMapping:解析请求格式的.判断希望要执行哪个具体的方法.HandlerAdapter:负责调用具体的方法.ViewResovler:视图解析器.解析结果,准备跳转到具体的物
1.它们主要负责的模块Spring主要应用于业务逻辑层。SpringMVC主要应用于表现层。MyBatis主要应用于持久层。2.它们的核心Spring有三大核心,分别是IOC(控制反转),DI(依赖注入)和AOP(面向切面编程)。SpringMVC的核心是DispatcherServlet(前端控制器)。MyBatis的核心是ORM(对
3.注解开发Springmvc1.使用注解开发要注意开启注解支持,2.注解简化了,处理映射器和处理适配器,只用去管视图解析器即可案例代码:1.web.xml,基本不变可以直接拿去用<!--调用DispatcherServlet--><servlet><servlet-name>springmvc</servlet-name>
拦截器概述SpringMVC的处理器拦截器类似于Servlet开发中的过滤器Filter,用于对处理器进行预处理和后处理。开发者可以自己定义一些拦截器来实现特定的功能。**过滤器与拦截器的区别:**拦截器是AOP思想的具体应用。过滤器servlet规范中的一部分,任何javaweb工程都可以使用
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:context="http://www.springframework.org/schema/context"xmlns:mvc="http://www.springframework.org/schema/mvc"xmlns:xsi="
学习内容:1、SSH&SSM2、Spring3、Struts2&SpringMVC4、Hibernate&MyBatis学习产出:1.SSH和SSM都是有Spring框架的,他们两个差不多。2.Spring分为四个模块,持久层,表示层,检测层,还有核心层,核心层分为2个关键核心功能。分别为,控制反转(IOC),依赖注入(DI),和面向切面编程
一、SpringMVC项目无法引入js,css的问题具体原因是css和js等被SpringMVC拦截了:解决方案:在spring-mvc.xml中配置<mvc:default-servlet-handler/><?xmlversion="1.0"encoding="UTF-8"?><beansxmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
开发环境:Eclipse/MyEclipse、Tomcat8、Jdk1.8数据库:MySQL前端:JavaScript、jQuery、bootstrap4、particles.js后端:maven、SpringMVC、MyBatis、ajax、mysql读写分离、mybatis分页适用于:课程设计,毕业设计,学习等等系统介绍