面试题整理----设计模式and spring、springMVC

1.说一下你熟悉的设计模式?

根据自身情况而定---下面列出一些类型的设计模式一共参考

创建型:Abstract Factory(抽象工厂模式),Builder(建造者模式),Factory Method(工厂方法模式),Prototype(原始模型模式),Singleton(单例模式);
结构型:Facade(门面模式),Adapter(适配器模式),Bridge(桥梁模式),Composite(合成模式),Decorator(装饰模式),Flyweight(享元模式),Proxy(代理模式);
行为型:Command(命令模式),Interpreter(解释器模式),Visitor(访问者模式),Iterator(迭代模式),Mediator(调停者模式),Memento(备忘录模式),Observer(观察者模式),State(状态模式),Strategy(策略模式),Template Method(模板方法模式), Chain Of Responsibility(责任链模式)。

2.简单工厂和抽象工厂有什么区别?

  一、创建对象方式不同

  “简单工厂模式”使用fw模式建立对象;“抽象工厂模式”则使用迭代模式创建对象。

  二、定义变量不同

  “简单工厂模式”,使用参数或者配置文件等事先定义好的变量,然后利用分支判断初始化具体产品类并返回。“抽象工厂模式则”不符合“开发-封闭”原则,每次增加产品,都需要修改类方法。

  三、接口数量不同

  “简单工厂模式”只有一个接口。抽象工厂模式理论上具有无限个接口。

3.为什么要使用 spring?

它的IOC、DI、AOP可以使编码变得更加简单快捷。并且在整合其他框架时也很方便

----以下摘自  总有刁民想害Me  的博客---

1.简介 
  ◆目的:解决企业应用开发的复杂性
  ◆功能:使用基本的JavaBean代替EJB,并提供了更多的企业应用功能
  ◆范围:任何Java应用
  简单来说,Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架。
  2.轻量  从大小与开销两方面而言Spring都是轻量的。完整的Spring框架可以在一个大小只有1MB多的JAR文件里发布。并且Spring所需的处理开销也是微不足道的。此外,Spring是非侵入式的:典型地,Spring应用中的对象不依赖于Spring的特定类。
  3.控制反转  Spring通过一种称作控制反转(IoC)的技术促进了松耦合。当应用了IoC,一个对象依赖的其它对象会通过被动的方式传递进来,而不是这个对象自己创建或者查找依赖对象。你可以认为IoC与JNDI相反——不是对象从容器中查找依赖,而是容器在对象初始化时不等对象请求就主动将依赖传递给它。
  4.面向切面  Spring提供了面向切面编程的丰富支持,允许通过分离应用的业务逻辑与系统级服务(例如审计(auditing)和事务(transaction)管理)进行内聚性的开发。应用对象只实现它们应该做的——完成业务逻辑——仅此而已。它们并不负责(甚至是意识)其它的系统级关注点,例如日志或事务支持。
  5.容器  Spring包含并管理应用对象的配置和生命周期,在这个意义上它是一种容器,你可以配置你的每个bean如何被创建——基于一个可配置原型(prototype),你的bean可以创建一个单独的实例或者每次需要时都生成一个新的实例——以及它们是如何相互关联的。然而,Spring不应该被混同于传统的重量级的EJB容器,它们经常是庞大与笨重的,难以使用。
  6.框架  Spring可以将简单的组件配置、组合成为复杂的应用。在Spring中,应用对象被声明式地组合,典型地是在一个XML文件里。Spring也提供了很多基础功能(事务管理、持久化框架集成等等),将应用逻辑的开发留给了你。
  所有Spring的这些特征使你能够编写更干净、更可管理、并且更易于测试的代码。它们也为Spring中的各种模块提供了基础支持。

4.解释一下什么是 aop?

AOP面向切面编程,是面向对象开发的一种补充,它允许开发人员在不改变原来模型的以满足新的需求,例如,开发人员可以在不改变原来业务逻辑模型的基础进行动态的增加日志,安全或异常处理功能。

------补充  什么是面向对象---一切事物皆对象。将现实的事物抽象出来,把现实生活的事物以及关系,抽象成类,通过继承,实现,组合的方式把万事万物都给容纳了。实现了对现实世界的抽象和数学建模。------(参考自这个链接)贴个链接 ----  https://www.jianshu.com/p/7a5b0043b035

5.解释一下什么是 ioc?

IOC(Inverse of Contro)控制反转,有时候也被称为DI依赖注入,它是一种降低对象耦合关系的一种设计思想。

6.spring 有哪些主要模块?

Spring有七大功能模块,分别是Spring Core,AOP,ORM,DAO,MVC,WEB,Context。
1,Spring Core
Core模块是Spring的核心类库,Spring的所有功能都依赖于该类库,Core主要实现IOC功能,Sprign的所有功能都是借助IOC实现的。
2,AOP
AOP模块是Spring的AOP库,提供了AOP(拦截器)机制,并提供常用的拦截器,供用户自定义和配置。
3,ORM
Spring 的ORM模块提供对常用的ORM框架的管理和辅助支持,Spring支持常用的Hibernate,ibtas,jdao等框架的支持,Spring本身并不对ORM进行实现,仅对常见的ORM框架进行封装,并对其进行管理
4,DAO模块
Spring 提供对JDBC的支持,对JDBC进行封装,允许JDBC使用Spring资源,并能统一管理JDBC事物,并不对JDBC进行实现。(执行sql语句)
5,WEB模块
WEB模块提供对常见框架如Struts1,WEBWORK(Struts 2),JSF的支持,Spring能够管理这些框架,将Spring的资源注入给框架,也能在这些框架的前后插入拦截器。
6,Context模块
Context模块提供框架式的Bean访问方式,其他程序可以通过Context访问Spring的Bean资源,相当于资源注入。
7,MVC模块
WEB MVC模块为Spring提供了一套轻量级的MVC实现,在Spring的开发中,我们既可以用Struts也可以用Spring自己的MVC框架,相对于Struts,Spring自己的MVC框架更加简洁和方便。

7.spring 常用的注入方式有哪些?

构造方法注入 ,setter注入,注解注入

8.spring 中的 bean 是线程安全的吗?

Spring中的Bean默认是单例模式的,框架并没有对bean进行多线程的封装处理
实际上大部分时间Bean是无状态的(比如Dao) 所以说在某种程度上来说Bean其实是安全的
但是如果Bean是有状态的 那就需要开发人员自己来进行线程安全的保证,最简单的办法就是改变bean的作用域 把 "singleton"改为’‘protopyte’ 这样每次请求Bean就相当于是 new Bean() 这样就可以保证线程的安全了

10.spring 支持几种 bean 的作用域?

singleton:SpringIOC容器只会创建该Bean的唯一实例;

prototype:每次请求都创建一个实例;

request:每次HTTP请求都会产生一个新的bean。需要注意的是,该作用域仅在基于Web的Spring ApplicationContext情形下有效,以下的session和global Session也是如此;

Session:每次会话创建一个实例;

global session:全局HttpSession中,容器会返回该bean的同一个实例

11.spring 自动装配 bean 有哪些方式?

1、自动化装配

Spring从两个角度来实现自动化装配:

组件扫描(ComponentScan):自动发现应用上下文中所创建的bean

自动装配(Autowired):自动满足bean之间的依赖

2、显示bean装配

12.spring 事务实现方式有哪些?

第一种方式:每个Bean都有一个代理

 第二种方式:所有Bean共享一个代理基类

第三种方式:使用拦截器

第四种方式:使用tx标签配置的拦截器

第五种方式:全注解

----更详细的请自行百度或学习-----

13.说一下 spring 的事务隔离?

三类7种  一类存在事务,二类不存在事务,三类嵌套事务  具体常量值可自行百度

14.说一下 spring mvc 运行流程?

1、 用户向服务器发送请求,请求被 Spring 前端控制 Servelt DispatcherServlet 捕获(捕)

2DispatcherServlet对请求  URL进行解析,得到请求资源标识符(URI)。然后根据该  URI调用 HandlerMapping获得该Handler配置的所有相关的对象(包括  Handler对象以及   Handler对象对应的拦截器),最后以 HandlerExecutionChain对象的形式返回;(查找   handler)

3、 DispatcherServlet  根据获得的 Handler,选择一个合适的  HandlerAdapter。  提取Request 中的模型数据,填充 Handler 入参,开始执行 Handler(Controller), Handler执行完成后,向 DispatcherServlet 返回一个 ModelAndView 对象(执行  handler)

4、DispatcherServlet  根据返回的 ModelAndView,选择一个适合的 ViewResolver(必须是已经注册到 Spring 容器中的 ViewResolver) (选择  ViewResolver)

5、通过 ViewResolver 结合 Model 和 View,来渲染视图,DispatcherServlet 将渲染结果返回给客户端。(渲染返回)

15.spring mvc 有哪些组件?

 DispatcherServlet    控制器入口 负责分发请求
  HandlerMapping       负责根据请求 找到对应的控制器
  Controller           真正处理请求的控制器
  ModelAndView         封装数据信息和视图信息的
  ViewResolver         视图处理器 通过处理找到对应的页面

16.@RequestMapping 的作用是什么?

@RequestMapping 是一个注解,用来标识 http 请求地址与 Controller 类的方法之间的映射。

可作用于类和方法上,方法匹配的完整是路径是 Controller 类上 @RequestMapping 注解的 value 值加上方法上的 @RequestMapping 注解的 value 值。

17.@Autowired 的作用是什么?

@Autowired 是一个注解,它可以对类成员变量、方法及构造函数进行标注,让 spring 完成 bean 自动装配的工作。
@Autowired 默认是按照类去匹配,配合 @Qualifier 指定按照名称去装配 bean。

猜你喜欢

转载自www.cnblogs.com/xianghebuyi/p/11553242.html