SSH 面试

来源:互联网 发布:华为人工智能芯片手机 编辑:程序博客网 时间:2024/03/28 19:55

  

30. Spring面试:什么是Spring, 它有什么特点

  Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)容器框架

  

  ◆轻量——从大小与开销两方面而言Spring都是轻量的。完整的Spring框架可以在一个大小只有1MB多的JAR文件里发布。并 且Spring所需的处理开销也是微不足道的。此外,Spring是非侵入式的:典型地,Spring应用中的对象不依赖于Spring的特定类。

  

  ◆控制反转——Spring通过一种称作控制反转(IoC)的技术促进了松耦 合。当应用了IoC,一个对象依赖的其它对象会通过被动的方式传递进来,而不是这个对象自己创建或者查找依赖对象。你可以认为IoCJNDI相反——不 是对象从容器中查找依赖,而是容器在对象初始化时不等对象请求就主动将依赖传递给它。

  ◆面向切面——Spring提供了面向切面编程的丰富支持,允许通过分离应用的 业务逻辑与系统级服务(例如审计(auditing)和事务()管理)进行内聚性的开发。应用对象只实现它们应该做的——完成业务逻辑——仅此而已。它们 并不负责(甚至是意识)其它的系统级关注点,例如日志或事务支持。

  ◆容器——Spring包含并管理应用对象的配置和生命周期,在这个意义上它是 一种容器,你可以配置你的每个bean如何被创建——基于一个可配置原型(prototype),你的bean可以创建一个单独的实例或者每次需要时都生 成一个新的实例——以及它们是如何相互关联的。然而,Spring不应该被混同于传统的重量级的EJB容器,它们经常是庞大与笨重的,难以使用。

  ◆框架——Spring可以将简单的组件配置、组合成为复杂的应用。在Spring中,应用对象被声明式地组合,典型地是在一个XML文件里。Spring也提供了很多基础功能(事务管理、持久化框架集成等等),将应用逻辑的开发留给了你。

  

  

 

1spring 的优点? 
1.
降低了组件之间的耦合性 ,实现了软件各层之间的解耦 
2.
可以使用容易提供的众多服务,如事务管理,消息服务等 
3.
容器提供单例模式支持 
4.
容器提供了AOP技术,利用它很容易实现如权限拦截,运行期监控等功能 
5.
容器提供了众多的辅助类,能加快应用的开发 
6.spring
对于主流的应用框架提供了集成支持,如hibernateJPAStruts 
7.spring
属于低侵入式设计,代码的污染极低 
8.
独立于各种应用服务器 
9.spring
DI机制降低了业务对象替换的复杂性 
10.Spring
的高度开放性,并不强制应用完全依赖于Spring,开发者可以自由选择spring的部分或全部 

***2、什么是DI机制? 
依赖注入(Dependecy Injection)和控制反转(Inversion of Control)是同一个概念,具体的讲:当某个角色 
需要另外一个角色协助的时候,在传统的程序设计过程中,通常由调用者来创建被调用者的实例。但在spring 
创建被调用者的工作不再由调用者来完成,因此称为控制反转。创建被调用者的工作由spring来完成,然后注入调用者 
因此也称为依赖注入。 
spring
以动态灵活的方式来管理对象 注入的两种方式,设置注入和构造注入 
设置注入的优点:直观,自然 
构造注入的优点:可以在构造器中决定依赖关系的顺序。

***4. 简述你对IoCInversion of Control)的理解

一个类需要用到某个接口的方法,我们需要将类A和接口B的实现关联起来,最简单的方法是类A中创建一个对于接口B的实现C的实例,但这种方法显然两者的依赖(Dependency)太大了。而IoC的方法是只在类A中定义好用于关联接口B的实现的方法,将类A,接口B和接口B的实现C放入IoC的 容器(Container)中,通过一定的配置由容器(Container)来实现类A与接口B的实现C的关联。

***14. 解释一下Dependency injection(DI,依赖注入)IOC(Inversion of control,控制反转)?

参考答案:依赖注入DI是一个程序设计模式和架构模型, 一些时候也称作控制反转,尽管在技术上来讲,依赖注入是一个IOC的特殊实现,依赖注入是指一个对象应用另外一个对象来提供一个特殊的能力,例如:把一个数据库连接已参数的形式传到一个对象的结构方法里面而不是在那个对象内部自行创建一个连接。控制反转和依赖注入的基本思想就是把类的依赖从类内部转化到外部以减少依赖

应用控制反转,对象在被创建的时候,由一个调控系统内所有对象的外界实体,将其所依赖的对象的引用,传递给它。也可以说,依赖被注入到对象中。所以,控制反转是,关于一个对象如何获取他所依赖的对象的引用,这个责任的反转。

 

****3. 描述一下Spring中实现DIDependency Injection)的几种方式

方式一:接口注入,在实际中得到了普遍应用,即使在IOC的概念尚未确立时,这样的方法也已经频繁出现在我们的代码中。

方式二:Type2 IoC: Setter injection对象创建之后,将被依赖对象通过set方法设置进去

方式三:Type3 IoC: Constructor injection对象创建时,被依赖对象以构造方法参数的方式注入

Spring的方式

***4、什么是AOP (Aspect --Oriented Programming)
面向切面编程(AOP)完善spring的依赖注入(DI),面向切面编程在spring中主要表现为两个方面 
1.
面向切面编程提供声明式事务管理 
2.spring
支持用户自定义的切面 

面向切面编程(aop)是对面向对象编程(oop)的补充, 
面向对象编程将程序分解成各个层次的对象,面向切面编程将程序运行过程分解成各个切面。 
AOP
从程序运行角度考虑程序的结构,提取业务处理过程的切面,oop是静态的抽象,aop是动态的抽象, 
是对应用执行过程中的步骤进行抽象,,从而获得步骤之间的逻辑划分

aop框架具有的两个特征: 
1.各个步骤之间的良好隔离性 
2.
源代码无关性

 

 

 ***四、介绍一下Spring的事务管理:

事务就是对一系列的数据库操作(比如插入多条数据)进行统一的提交或回滚操作,如果插入成功,那么一起成功,如果中间有一条出现异常,那么回滚之前的所有操作。

这样可以防止出现脏数据,防止数据库数据出现问题。

开发中为了避免这种情况一般都会进行事务管理。Spring中也有自己的事务管理机制,一般是使用TransactionMananger进行管理,可以通过Spring的注入来完成此功能。

spring提供了几个关于事务处理的类:

TransactionDefinition //事务属性定义

TranscationStatus //代表了当前的事务,可以提交,回滚。

PlatformTransactionManager这个是spring提供的用于管理事务的基础接口,其下有一个实现的抽象类AbstractPlatformTransactionManager,我们使用的事务管理类例如DataSourceTransactionManager等都是这个类的子类。

 

31. aop中的关键名词有些那些,相互关系是什么?

  拦截器: 代理

  装备(advice)

  目标对象

  关切点:条件

  连接点:方法、属性

  

  

32. SpringApplicationContext的作用是什么?

  beanFactory

  国际化(getMesage)

  资源管理:可以直接读取一个文件的内容(getResource)

  加入web框架中(加入一个servlet或监听器)

  事件处理

  

33. spring中的核心类有那些,各有什么作用?

  BeanFactory:产生一个新的实例,可以实现单例模式

  BeanWrapper:提供统一的getset方法

  ApplicationContext:提供框架的实现,包括BeanFactory的所有功能

  

34. spring中的核心类有那些,各有什么作用?

  BeanFactory:产生一个新的实例,可以实现单例模式

  BeanWrapper:提供统一的getset方法

  ApplicationContext:提供框架的实现,包括BeanFactory的所有功能

 

---------SSH----------SSH-----------SSH--------

1、请你谈谈SSH整合

  SSH

  Struts(表示层)+Spring(业务层)+Hibernate(持久层

  Struts

  Struts是一个表示层框架,主要作用是界面展示,接收请求,分发请求。

  在MVC框架中,Struts属于VC层次,负责界面表现,负责MVC关系的分发。(View:沿用JSPHTTPFormTagResourse ControllerActionServletstruts-config.xmlAction

  Hibernate

  Hibernate是一个持久层框架,它只负责与关系数据库的操作。(它在关系型数据库和Java对象之间做了一个自动映射,使得程序员可以以非常简单的方式实现对数据库的操作)

  Spring

  Spring是一个业务层框架,是一个整合的框架,能够很好地黏合表示层与持久层。

 

2、集成SSH框架

系统从职责上分为四层:表示层、业务逻辑层、数据持久层和域模块层。其中使用Struts作为系统的整体基础架构,负责MVC的分离,在 Struts框架的模型部分,利用Hibernate框架对持久层提供支持,业务层用Spring支持。

系统的基本业务流程是 在表示层中,首先通过JSP页面实现交互界面,负责传送请求(Request)和接收响应(Response),然后Struts根据配置文件 (struts-config.xml)ActionServlet接收到的Request委派给相应的Action处理。在业务层中,管理服务组件的 Spring IoC容器负责向Action提供业务模型(Model)组件和该组件的协作对象数据处理(DAO)组件完成业务逻辑,并提供事务处理、缓冲池等容器组件 以提升系统性能和保证数据的完整性。而在持久层中,则依赖于Hibernate的对象化映射和数据库交互,处理DAO组件请求的数据,并返回处理结果。

采用上述开发模型,不仅实现了视图、控制器与模型的彻底分离,而且还实现了业务逻辑层与持久层的分离。这样无论前端如何变化,模型层只需很少的改动,并 且数据库的变化也不会对前端有所影响,大大提高了系统的可复用性。而且由于不同层之间耦合度小,有利于团队成员并行工作,大大提高了开发效率。

原创粉丝点击