首页 > 编程知识 正文

spring面试题及答案(spring框架面试题)

时间:2023-05-03 17:10:50 阅读:86075 作者:4773

1. SpringMVC 的工作原理

1、用户向前端控制器(dispatcher servlet )发送请求。 2、前端控制器要求处理器映射中寻找处理器。 3、找到未来的处理器映射器(HandlerMappering ),返回前端控制器执行链) HandlerExecutionChain。 4、前端控制器(DispatcherServlet )调用处理器适配器(HandlerAdapter )执行处理器)。 5、处理器适配器执行处理器。 6、处理器执行结束后,向处理器适配器返回ModelAndView。 7、处理器适配器向前端控制器返回ModelAndView。 8、前端控制器委托视图分析器(ViewResolver )进行视图分析。 9、查看器向前控制器返回View。 10、前端控制器渲染视图。 11、前端控制器向用户应答结果。

2. springmvc常用注解

@Controller@Controller用于标记类,使用它标记的类是SpringMVC Controller对象。 @RequestMappingRequestMapping用于实现在类或方法中使用@RequestBody注释来接收http请求的json数据,并将json数据转换为java对象@ResponseBody注释实现将controller方法的返回对象转换为json响应。 在

3. 如何开启注解处理器和适配器?

项目中,通常通过在springmvc.xml中打开mvc:annotation-driven来启用注释处理器和适配器。

4. 如何解决get 和 post 乱码问题?

开机自检请求要解决乱码:请在web.xml上放置优雅的刺猬滤镜。 有两种方法可以解决utf-8.get请求的乱码: 针对get请求的中文参数乱码的解决方法有2个:

如果通过修改tomcat配置文件添加代码,则会与工程代码匹配。 另一种中方的方法是对参数进行重新编码。 字符串用户名=新字符串(请求. getparameter ).getbytes )“ISO8859-1”)、“utf-8”

5. 谈谈你对Spring 的理解

spring **控件反转(IOC ) **在传统的java开发模型中,如果需要对象,可以使用直接或间接的构造方法(如new或getInstance )创建对象。 另一方面,在spring开发模式下,spring容器使用工厂模式创建了所需的对象。 不需要自己制作。 直接调用spring提供的对象就可以了。 将原始new对象的这种方式转换为。 spring以反射方式创建对象,依赖于注入(DI );spring使用javaBean对象的set方式或参数化;面向剖面的编程(AOP )是面向对象的编程) 在切片指向编程中,切片指向编程的思想是将各个对象的相似侧面横向提取到一个切片中,对该切片进行权限控制、事物管理、日志记录等通用操作处理。 AOP的基础是动态代理,接口的话用JDK动态代理,类的话用CGLIB方式实现动态代理。

6. Spring 能帮我们做什么

a. Spring有助于基于配置文件创建和组装对象之间的依赖关系。 Spring基于配置文件创建和组装对象之间的依赖关系。 只需更改配置文件,b. Spring的分片指向编程就可以在无耦合的情况下实现日志记录、性能统计、安全控制。 Spring切片编程通常以更好的方式进行,具体取决于配置方法,不需要向现有代码中添加其他代码,现有代码侧重于业务逻辑。 c. Spring可以非常方便地管理数据库事务。 采用Spring,我们只是获取连接,执行SQL,其他事物的相关事情都交给Spring来管理。 d. Spring可以与第三方数据库访问框架(如Hibernate、JPA等)无缝集成,同时还提供了便于数据库访问的JDBC访问模板。 e. Spring可以与第三方Web框架(如Struts、JSF等)无缝集成,还提供了SpringMVC框架,便于构建Web层。 f. Spring很容易和Jav

aEE(如JavaMail、任务调度)整合,与更多技术整合(比如缓存框架)。

7. 请描述一下Spring 的事务

声明式事务管理的定义:用在 Spring 配置文件中声明式的处理事务来代替代码式的处理事务。这样的好处是,事务管理不侵入开发的组件,具体来说,业务逻辑对象就不会意识到正在事务管理之中,事实上也应该如此,因为事务管理是属于系统层面的服务,而不是业务逻辑的一部分,如果想要改变事务管理策划的话,也只需要在定义文件中重新配置即可,这样维护起来极其方便。

8.什么是事务的特性?事务的隔离级别?

事务的特性(ACID)原子性: 一个事务是最小的执行单元,不可以分割一致性: 事务指定的前后,数据要保持一致.持久性: 事务一旦提交或回滚,在数据库中持久的改变隔离性: 隔离性用来保证多个用户来操作数据库的同一份数据,不会受到相关干扰的特性.

并发问题》(1)脏读: 一个事务读到了另一个事务的还没有提交数据.》(2)不可重复读 一个事务中多次读到的数据不一致.一个事务读到了另一个事务修改后的数据.》(3)幻读(虚读): 一个事务读到了insert的数据.

8. BeanFactory 常用的实现类有哪些

Bean 工厂是工厂模式的一个实现,提供了控制反转功能,用来把应用的配置和依赖从正真的应用代码中分离。常用的 BeanFactory 实现有DefaultListableBeanFactory 、 XmlBeanFactory 、 ApplicationContext 等。XMLBeanFactory,最常用的就是org.springframework.beans.factory.xml.XmlBeanFactory ,它根据 XML 文件中的定义加载 beans。该容器从 XML 文件读取配置元数据并用它去创建一个完全配置的系统或应用。

9. 什么是Spring IOC 容器?

IOC 控制反转:Spring IOC 负责创建对象,管理对象。通过依赖注入(DI),装配对象,配置对象,并且管理这些对象的整个生命周期。

10. IOC 的优点是什么?

IOC 或 依赖注入把应用的代码量降到最低。它使应用容易测试,单元测试不再需要单例和 JNDI 查找机制。最小的代价和最小的侵入性使松散耦合得以实现。IOC 容器支持加载服务时的饿汉式初始化和懒加载。

11 ApplicationContext 的实现类有哪些?

FileSystemXmlApplicationContext :此容器从一个XML 文件中加载beans 的定义,XML Bean 配置文件的全路径名必须提供给它的构造函数。ClassPathXmlApplicationContext:此容器也从一个 XML 文件中加载 beans 的定义,这里,你需要正确设置classpath 因为这个容器将在 classpath 里找 bean 配置。WebXmlApplicationContext:此容器加载一个 XML 文件,此文件定义了一个WEB 应用的所有 bean。

12. 有哪些不同类型的 IOC(依赖注入)方式

Spring 提供了多种依赖注入的方式。

Set 注入构造器注入静态工厂的方法注入实例工厂的方法注入

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

Spring 框架中的单例bean 不是线程安全的Spring框架并没有对单例bean进行任何多线程的封装处理。关于单例bean的线程安全和并发问题需要开发者自行去搞定。

14. 什么是bean 的自动装配?

无须在 Spring 配置文件中描述javaBean 之间的依赖关系(如配置、)。IOC 容器会自动建立javabean 之间的关联关系。

15 Spring 的通知是什么?有哪几种类型?

通知是个在方法执行前或执行后要做的动作,实际上是程序执行时要通过 SpringAOP 框架触发的代码段。Spring 切面可以应用五种类型的通知:1) before:前置通知,在一个方法执行前被调用。2) after: 在方法执行之后调用的通知,无论方法执行是否成功。

3) after-returning: 仅当方法成功完成后执行的通知。4)after-throwing: 在方法抛出异常退出时执行的通知。5)around: 在方法执行之前和之后调用的通知。

16 什么是切点?什么是目标对象? 什么是代理?

切入点是一个或一组连接点,通知将在这些位置执行。可以通过表达式或匹配的方式指明切入点。被一个或者多个切面所通知的对象。它通常是一个代理对象。也指被通知(advised)对象代理是通知目标对象后创建的对象。从客户端的角度看,代理对象和目标对象是一样的。

17.Spring 的通知是什么?有哪几种类型

通知是个在方法执行前或执行后要做的动作,实际上是程序执行时要通过 SpringAOP 框架触发的代码段。Spring 切面可以应用五种类型的通知:1) before:前置通知,在一个方法执行前被调用。2) after: 在方法执行之后调用的通知,无论方法执行是否成功。3) after-returning: 仅当方法成功完成后执行的通知。4)after-throwing: 在方法抛出异常退出时执行的通知。5)around: 在方法执行之前和之后调用的通知。

18. 简单解释一下spring 的AOP

AOP(Aspect Oriented Programming),即面向切面编程,可以说是 OOP(Object Oriented Programming, 面向对象编程)的补充和完善。OOP 引入封装、继承、多态等概念来建立一种对象层次结构,用于模拟公共行为的一个集合。不过 OOP 允许开发者定义纵向的关系,但并不适合定义横向的关系,例如日志功能。日志代码往往横向地散布在所有对象层次中,而与它对应的对象的核心功能毫无关系对于其他类型的代码,如安全性、异常处理和透明的持续性也都是如此,这种散布在各处的无关的代码被称为横切(cross cutting),在 OOP 设计中,它导致了大量代码的重复,而不利于各个模块的重用。AOP 技术恰恰相反,它利用一种称为"横切"的技术,剖解开封装的对象内部,并将那些影响了多个类的公共行为封装到一个可重用模块,并将其命名为"Aspect",即切面。所谓"切面",简单说就是那些与业务无关,却为业务模块所共同调用的逻辑或责任封装起来,便于减少系统的重复代码,降低模块之间的耦合度,并有利于未来的可操作性和可维护性AOP 把软件系统分为两个部分:核心关注点和横切关注点。业务处理的主要流程是核心关注点, 与之关系不大的部分是横切关注点。横切关注点的一个特点是,他们经常发生在核心关注点的多处,而各处基本相似, 比如权限认证、日志、事物。AOP 的作用在于分离系统中的各种关注点,将核心关注点和横切关注点分离开来。AOP 核心就是切面,它将多个类的通用行为封装成可重用的模块,该模块含有一组 API 提供横切功能。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。