面试题汇总(三大框架)

面试题汇总(三大框架)
面试题汇总(三大框架)

中博软件学院——面试参考资料-5

一、Spring依赖注入的3种实现方式是什么?

依赖注入的3种实现方式分别是:接口注入(interface injection)、Set注入(setter injection)和构造注入(constructor injection)。接口注入指的就是在接口中定义要注入的信息,并通过接口完成注入。其具体步骤包括(1)编写一个接口,各种数据的注入将通过这个接口进行。(2)任何想要使用数据的类都必须实现这个接口。Set注入指的就是在接受注入的类中定义一个Set方法,并在参数中定义需要注入的元素。构造注入指的就是在接受注入的类中定义一个构造方法,并在参数中定义需要注入的元素。

二、SSH 框架配置流程是什么?

1.创建java web项目:添加struts包:freemarker,ognl,struts2-core,

struts2-spring-plugin,xwork-core,commons-fileupload、commons-io、commons-lang等;

添加spring包:spring-aop、spring-aspects、spring-beans、spring-context、spring-core、spring-jdbc、spring-orm、spring-web等;添加hibernate包:hibernate-core等;添加其他包:ojdbc等

2.配置struts(1)配置struts核心过滤器。打开web.xml,配置struts核心过滤器和

过滤器映射。(2)建立Action,继承ActionSupport类。

(3)配置action。在struts.xml文件中,添加对Action的配置。包含等元素的配置(4)新建视图页面

3.配置hibernate:(1)建立数据库与数据表(2)创建持久层实体类及映射文件(3)

编写数据访问类,集成HibernateDaoSupport父类

4.配置spring:(1)配置applicationContext.xml文件,配置spring会话工厂bean,

数据访问bean ,业务bean和action bean等。(2)引入aop和tx命名空间,配置声明式事务(3)配置web.xml,添加Spring监听器和context-param初始化参数,告知监听器applicationContext.xml的位置。

三、Struts的运行机制是什么

1、客户端初始化一个指向Servlet容器(例如Tomcat)的请求;

2、这个请求经过一系列的过滤器(Filter)(这些过滤器中有一个叫做

ActionContextCleanUp的可选过滤器,这个过滤器对于Struts2和其他框架的集成很有帮助,例如:SiteMesh Plugin);

3、接着StrutsPrepareAndExecuteFilter被调用,StrutsPrepareAndExecuteFilter询问

ActionMapper来决定这个请求是否需要调用某个Action

4、如果ActionMapper决定需要调用某个Action,StrutsPrepareAndExecuteFilter把请求

的处理交给ActionProxy;

5、ActionProxy通过Configuration Manager询问框架的配置文件,找到需要调用的Action

类;

6、ActionProxy创建一个ActionInvocation的实例。

7、ActionInvocation实例使用命名模式来调用,在调用Action的过程前后,涉及到相关

拦截器(Intercepter)的调用。

8、一旦Action执行完毕,ActionInvocation负责根据struts.xml中的配置找到对应的返

回结果。返回结果通常是(但不总是,也可能是另外的一个Action链)一个需要被表

示的JSP或者FreeMarker的模版。在表示的过程中可以使用Struts2 框架中继承的标签。

在这个过程中需要涉及到ActionMapper。

四、说说IOC和AOP的概念以及在Spring中是如何应用的

1.控制反转(Inversion of Control,英文缩写为IoC)是一个重要的面向对象编程的

法则来削减计算机程序的耦合问题,也是轻量级的Spring框架的核心。控制反转一般分为两种类型,依赖注入(Dependency Injection,简称DI)和依赖查找(Dependency Lookup)。依赖注入应用比较广泛。2.AOP为Aspect Oriented Programming的缩写,意为:面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。AOP是OOP的延续。利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。

3.IOC是典型的工厂模式,而AOP则是典型的代理模式的体现。spring的IoC容器是

spring的核心,spring AOP是spring框架的重要组成部分4.在spring中ioc最典型的应用就是整合并管理各个组件,如整合ssh时,spring可以管理datasource,sessionfactory,dao,service,action等bean,这些传统开发方式中均是由硬编码的方式实现;而aop则在spring中表现为各种通知,spring提供了诸如MethodBeforeAdvice,AfterReturningAdvice,AfterThrowingAdvice等API,并在spring提供的声明式事务中也提供了相应的tx命名空间,利用aop简化事务配置

五、Struts中mvc中分别使用的什么技术?

1.在Action的实现方面,而Struts2中可以是一个POJO。Struts2支持通过拦截器堆栈为

每一个Action创建不同的生命周期,其中拦截器在AOP(Aspect-Oriented Programming)中用于在某个方法或字段被访问之前或之后加入某些操作

2.线程模型方面,Struts2的Action是一个请求对应一个实例(每次请求时都新new出

一个对象),没有线程安全方面的问题。

3.Servlet依赖方面,Struts2中的Action不再依赖于Servlet API,有利于测试,并且实现

TDD。

4.封装请求参数,Struts2可以选择使用POJO类来封装请求的参数,或者直接使用Action

的属性。

5.表达式语言方面,Struts2整合了OGNL(Object Graph NavigationLanguage)。

6.绑定值到视图技术,Struts2使用“ValueStack”技术。

7.类型转换,Struts2中使用OGNL进行转换,可以更方便的使用。

8.Struts2支持重写validate方法或者使用XWork的验证框架。同时也很好的使用了Java

的国际化机制

六、Spring是怎么实现事务处理的?

Spring 提供两种事务处理方式,一种是编程式事务处理;一种是声明式事务处理。

其中编程式事务处理使用TransactionTemplate进行事务处理(Spring进行commit和rollback)。而Spring 的声明式事务处理,可以说是Spring AOP的一种实现。因为事务处理是所谓方面(Aspect )的一个子集。因此默认情况下,事务处理是利用Java动态代理机制实现的,这样就必须先定义一个接口,然后再编写实现;而对于没有接口的Javabean ,则通过CGLIB 实现。这部分是SpringAOP 部分的内容。其实就是在执行某个业务方法之前添加了tx.beginTran()事务开启,若没有异常,业务方法执行完毕后添加了https://www.360docs.net/doc/f212629307.html,mitTran()事务提交。若有异常抛出,则添加了tx.rollbackTran();事务回滚。

使用Spring?AOP进行事务控制需要具备一定的规则,若是开发人员的业务Service或者说业务Service中的业务方法命名不按照事前定义好的规则进行命名的话,AOP是拦截不到的。

七、谈谈Hibernate的缓存机制

Hibernate的缓存包括Session的缓存和SessionFactory的缓存,其中SessionFactory 的缓存又可以分为两类:内置缓存和外置缓存。Session的缓存是内置的,不能被卸载,也被称为Hibernate的第一级缓存。SessionFactory的内置缓存和Session的缓存在实现方式上比较相似,前者是SessionFactory对象的一些集合属性包含的数据,后者是指Session的一些集合属性包含的数据。SessionFactory的内置缓存中存放了映射元数据和预定义SQL语句,映射元数据是映射文件中数据的拷贝,而预定义SQL语句是在Hibernate初始化阶段根据映射元数据推导出来,SessionFactory的内置缓存是只读的,应用程序不能修改缓存中的映射元数据和预定义SQL语句,因此SessionFactory不需要进行内置缓存与映射文件的同步。SessionFactory的外置缓存是一个可配置的插件。在默认情况下,SessionFactory不会启用这个插件。外置缓存的数据是数据库数据的拷贝,外置缓存的介质可以是内存或者硬盘。SessionFactory的外置缓存也被称为Hibernate的第二级缓存。

八、MyBatis和Hibernate有什么区别

1)MyBATIS非常简单易学,Hibernate相对较复杂,门槛较高。2) 二者都是比较优

秀的开源产品。但Hibernate现在已经是主流O/R Mapping框架,从文档的丰富性,产品的完善性,版本的开发速度都要强于MyBatis。3) 当系统属于二次开发,无法对数据库结构做到控制和修改,那MyBatis的灵活性将比Hibernate更适合。4) 系统数据处理量巨大,性能要求极为苛刻,在这种情况下MyBatis会有更好的可控性和表现。因为MyBatis比Hibernate更容易进行sql的优化。5) MyBatis 可以进行细粒度的优化,减少与数据库的交互,对于性能的提升是非常重要。6) MyBatis需要手写sql语句,也可以生成一部分,Hibernate则基本上可以自动生成,偶尔会写一些Hql。如果涉及到数据库字段的修改,Hibernate修改的地方很少。7) 开发方面:开发效率上,两者差不多;可维护性方面,MyBatis更好一些。8) 运行效率:在不考虑cache的情况下,MyBatis 应该会比hibernate快一些或者很多(根据实际情况会有所不同)。9) 对不同数据库类型的支持。MyBatis对不同数据库类型的支持不够好,如果你要开发的系统是要在对中数据间移植,那可能用hibernate比较好。10)对缺省的cache支持。MyBatis对缺省的cache支持不够好,但是hibernate的cache支持其实也不是很好,而且很复杂。尤其是对于大并发量的应用。

九、Hashmap和Hashtable的区别

1 HashMap不是线程安全的,hastmap是将键映射到值的对象,其中键和值都是对

象,并且不能包含重复键,但可以包含重复值。HashMap允许null key和null value,而hashtable不允许。2 .HashTable是线程安全的一个Collection。HashMap是Hashtable 的轻量级实现(非线程安全的实现),他们都完成了Map接口,主要区别在于HashMap 允许空(null)键值(key),由于非线程安全,效率上可能高于Hashtable。HashMap 允许将null作为一个entry的key或者value,而Hashtable不允许。HashMap把Hashtable 的contains方法去掉了,改成containsvalue和containsKey。Hashtable继承自Dictionary 类,而HashMap是Java1.2引进的Map interface的一个实现。最大的不同是,Hashtable

的方法是Synchronize的,而HashMap不是,在多个线程访问Hashtable时,不需要自己为它的方法实现同步,而HashMap 就必须为之提供外同步。Hashtable和HashMap 采用的hash/rehash算法都大概一样,所以性能不会有很大的差异

十、JDBC与Hibernate的优缺点比较

JDBC与Hibernate在性能上相比,JDBC灵活性有优势。而Hibernate在易学性,易用性上有些优势。当用到很多复杂的多表联查和复杂的数据库操作时,JDBC有优势。

相同点:

◆两者都是JA V A的数据库操作中间件。

◆两者对于数据库进行直接操作的对象都不是线程安全的,都需要及时关闭。

◆两者都可以对数据库的更新操作进行显式的事务处理。

不同点:

◆使用的SQL语言不同:JDBC使用的是基于关系型数据库的标准SQL语言,Hibernate

使用的是HQL(Hibernate query language)语言

◆操作的对象不同:JDBC操作的是数据,将数据通过SQL语句直接传送到数据库中

执行,Hibernate操作的是持久化对象,由底层持久化对象的数据更新到数据库中。

◆数据状态不同:JDBC操作的数据是“瞬时”的,变量的值无法与数据库中的值保持一

致,而Hibernate操作的数据是可持久的,即持久化对象的数据属性的值是可以跟数据库中的值保持一致的。

相关主题
相关文档
最新文档