《2022年面试题汇总 .pdf》由会员分享,可在线阅读,更多相关《2022年面试题汇总 .pdf(4页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、中博软件学院面试参考资料-5 一、 Spring 依赖注入的3 种实现方式是什么?依赖注入的3种实现方式分别是: 接口注入(interface injection ) 、 Set注入 (setter injection )和构造注入( constructor injection ) 。接口注入指的就是在接口中定义要注入的信息,并通过接口完成注入。其具体步骤包括(1)编写一个接口,各种数据的注入将通过这个接口进行。(2)任何想要使用数据的类都必须实现这个接口。Set 注入指的就是在接受注入的类中定义一个Set 方法,并在参数中定义需要注入的元素。构造注入指的就是在接受注入的类中定义一个构造方法,
2、并在参数中定义需要注入的元素。二、 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 等
3、;添加 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.配
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 )( 这 些 过
5、 滤 器 中 有 一 个 叫 做ActionContextCleanUp 的可选过滤器, 这个过滤器对于Struts2 和其他框架的集成很有帮助,例如: SiteMesh Plugin ) ;3、 接 着StrutsPrepareAndExecuteFilter被 调 用 , StrutsPrepareAndExecuteFilter询 问ActionMapper 来决定这个请求是否需要调用某个Action 4、如果ActionMapper 决定需要调用某个Action ,StrutsPrepareAndExecuteFilter 把请求的处理交给ActionProxy ;5、 ActionP
6、roxy 通过 Configuration Manager 询问框架的配置文件,找到需要调用的Action类;6、ActionProxy 创建一个ActionInvocation 的实例。7、ActionInvocation 实例使用命名模式来调用,在调用Action 的过程前后,涉及到相关拦截器( Intercepter)的调用。8、一旦Action 执行完毕, ActionInvocation负责根据struts.xml 中的配置找到对应的返回结果。返回结果通常是(但不总是,也可能是另外的一个Action 链)一个需要被表名师资料总结 - - -精品资料欢迎下载 - - - - - - -
7、 - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 4 页 - - - - - - - - - 示的 JSP或者 FreeMarker 的模版。在表示的过程中可以使用Struts2 框架中继承的标签。在这个过程中需要涉及到ActionMapper 。四、说说IOC 和 AOP 的概念以及在Spring 中是如何应用的1.控制反转( Inversion of Control ,英文缩写为IoC)是一个重要的面向对象编程的法则来削减计算机程序的耦合问题,也是轻量级的Spring 框架的核心。控制反转一般分为两种类型,依赖注入(Dependency
8、 Injection ,简称DI)和依赖查找(Dependency Lookup) 。依赖注入应用比较广泛。2.AOP 为 Aspect Oriented Programming的缩写,意为:面向切面编程, 通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。 AOP 是 OOP 的延续。利用AOP 可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。3.IOC 是典型的工厂模式,而AOP 则是典型的代理模式的体现。spring 的 IoC 容器是spring 的核心, spring AOP 是 spring 框架的重
9、要组成部分4.在 spring 中 ioc 最典型的应用 就 是 整 合 并 管 理 各 个 组 件 , 如 整 合ssh时 , spring可 以 管 理datasource,sessionfactory,dao,service,action 等 bean,这些传统开发方式中均是由硬编码的方 式 实 现 ; 而aop则 在spring中 表 现 为 各 种 通 知 , spring提 供 了 诸 如MethodBeforeAdvice,AfterReturningAdvice,AfterThrowingAdvice等 API,并在 spring 提供的声明式事务中也提供了相应的tx 命名空间
10、,利用aop 简化事务配置五、 Struts 中 mvc 中分别使用的什么技术?1.在 Action 的实现方面, 而 Struts2 中可以是一个POJO。Struts2 支持通过拦截器堆栈为每一个 Action 创建不同的生命周期,其中拦截器在AOP (Aspect-Oriented Programming )中用于在某个方法或字段被访问之前或之后加入某些操作2.线程模型方面,Struts2 的 Action 是一个请求对应一个实例(每次请求时都新new 出一个对象) ,没有线程安全方面的问题。3.Servlet 依赖方面, Struts2 中的 Action 不再依赖于Servlet A
11、PI,有利于测试, 并且实现TDD 。4.封装请求参数, Struts2 可以选择使用POJO类来封装请求的参数, 或者直接使用Action的属性。5.表达式语言方面,Struts2 整合了 OGNL (Object Graph NavigationLanguage ) 。6.绑定值到视图技术,Struts2 使用“ ValueStack”技术。7.类型转换, Struts2 中使用 OGNL 进行转换,可以更方便的使用。8.Struts2 支持重写validate 方法或者使用XWork 的验证框架。 同时也很好的使用了Java的国际化机制六、 Spring 是怎么实现事务处理的?Sprin
12、g 提供两种事务处理方式,一种是编程式事务处理;一种是声明式事务处理。其中编程式事务处理使用TransactionTemplate 进行事务处理(Spring 进行 commit和rollback ) 。而 Spring 的声明式事务处理,可以说是Spring AOP 的一种实现。因为事务处理是所谓方面(Aspect )的一个子集。因此默认情况下,事务处理是利用Java 动态代理机制实现的,这样就必须先定义一个接口,然后再编写实现;而对于没有接口的Javabean ,则通过CGLIB 实现。这部分是SpringAOP 部分的内容。其实就是在执行某个业务方法之前添加了tx.beginTran()
13、 事务开启, 若没有异常, 业务方法执行完毕后添加了 mitTran() 事务提交。若有异常抛出,则添加了tx.rollbackTran(); 事务回滚。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 4 页 - - - - - - - - - 使用 Spring?AOP 进行事务控制需要具备一定的规则,若是开发人员的业务Service 或者说业务 Service 中的业务方法命名不按照事前定义好的规则进行命名的话,AOP 是拦截不到的。七、谈谈Hibernate 的缓存
14、机制Hibernate 的缓存包括Session的缓存和SessionFactory 的缓存, 其中 SessionFactory的缓存又可以分为两类:内置缓存和外置缓存。Session的缓存是内置的,不能被卸载,也被称为Hibernate 的第一级缓存。SessionFactory 的内置缓存和Session的缓存在实现方式上比较相似,前者是SessionFactory 对象的一些集合属性包含的数据,后者是指Session的一些集合属性包含的数据。SessionFactory 的内置缓存中存放了映射元数据和预定义SQL 语句,映射元数据是映射文件中数据的拷贝,而预定义SQL 语句是在Hibe
15、rnate 初始化阶段根据映射元数据推导出来,SessionFactory 的内置缓存是只读的,应用程序不能修改缓存中的映射元数据和预定义SQL 语句,因此 SessionFactory 不需要进行内置缓存与映射文件的同步。SessionFactory 的外置缓存是一个可配置的插件。在默认情况下, SessionFactory 不会启用这个插件。外置缓存的数据是数据库数据的拷贝,外置缓存的介质可以是内存或者硬盘。SessionFactory 的外置缓存也被称为Hibernate 的第二级缓存。八、 MyBatis 和 Hibernate 有什么区别1)MyBATIS 非常简单易学,Hibern
16、ate 相对较复杂,门槛较高。2) 二者都是比较优秀的开源产品。但Hibernate 现在已经是主流O/R Mapping 框架,从文档的丰富性,产品的完善性, 版本的开发速度都要强于MyBatis 。3) 当系统属于二次开发,无法对数据库结构做到控制和修改,那MyBatis 的灵活性将比Hibernate 更适合。 4) 系统数据处理量巨大,性能要求极为苛刻,在这种情况下MyBatis会有更好的可控性和表现。因为MyBatis 比 Hibernate 更容易进行sql 的优化。 5) MyBatis 可以进行细粒度的优化,减少与数据库的交互,对于性能的提升是非常重要。6) MyBatis 需
17、要手写sql 语句,也可以生成一部分, Hibernate 则基本上可以自动生成,偶尔会写一些Hql。如果涉及到数据库字段的修改, Hibernate 修改的地方很少。7) 开发方面:开发效率上,两者差不多;可维护性方面,MyBatis更好一些。 8) 运行效率:在不考虑cache 的情况下, MyBatis应该会比 hibernate 快一些或者很多(根据实际情况会有所不同)。 9) 对不同数据库类型的支持。 MyBatis 对不同数据库类型的支持不够好,如果你要开发的系统是要在对中数据间移植,那可能用hibernate 比较好。 10)对缺省的cache 支持。 MyBatis 对缺省的c
18、ache支持不够好,但是hibernate 的 cache支持其实也不是很好,而且很复杂。尤其是对于大并发量的应用。九、 Hashmap 和 Hashtable 的区别1 HashMap 不是线程安全的,hastmap是将键映射到值的对象,其中键和值都是对象,并且不能包含重复键,但可以包含重复值。HashMap 允许 null key 和 null value,而 hashtable不允许。 2 .HashTable 是线程安全的一个Collection 。HashMap 是 Hashtable的轻量级实现 (非线程安全的实现) ,他们都完成了Map 接口,主要区别在于HashMap允许空(
19、null )键值( key) ,由于非线程安全,效率上可能高于Hashtable。 HashMap允许将 null 作为一个 entry 的 key 或者 value, 而 Hashtable不允许。 HashMap 把 Hashtable的 contains 方法去掉了, 改成 containsvalue 和 containsKey。 Hashtable 继承自 Dictionary类,而 HashMap 是 Java1.2 引进的 Map interface 的一个实现。最大的不同是, Hashtable名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - -
20、- - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 4 页 - - - - - - - - - 的方法是Synchronize 的,而 HashMap 不是,在多个线程访问Hashtable 时,不需要自己为它的方法实现同步,而HashMap 就必须为之提供外同步。Hashtable 和 HashMap采用的 hash/rehash算法都大概一样,所以性能不会有很大的差异十、 JDBC 与 Hibernate 的优缺点比较JDBC 与 Hibernate 在性能上相比,JDBC 灵活性有优势。而Hibernate 在易学性,易用性上有些优势。当用到很多复杂的多
21、表联查和复杂的数据库操作时,JDBC 有优势。相同点:两者都是JAVA 的数据库操作中间件。两者对于数据库进行直接操作的对象都不是线程安全的,都需要及时关闭。两者都可以对数据库的更新操作进行显式的事务处理。不同点:使用的 SQL 语言不同:JDBC 使用的是基于关系型数据库的标准SQL 语言,Hibernate使用的是 HQL(Hibernate query language) 语言操作的对象不同:JDBC 操作的是数据,将数据通过SQL 语句直接传送到数据库中执行, Hibernate 操作的是持久化对象,由底层持久化对象的数据更新到数据库中。数据状态不同:JDBC 操作的数据是 “ 瞬时 ” 的,变量的值无法与数据库中的值保持一致,而 Hibernate 操作的数据是可持久的,即持久化对象的数据属性的值是可以跟数据库中的值保持一致的。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 4 页 - - - - - - - - -
限制150内