
谈谈你对Struts的邃晓。
struts是一个按MVC形式设想的Web层框架,实在它就是一个Servlet,这个Servlet名为ActionServlet,或是ActionServlet的子类。 (引荐进修:java口试题目)
我们能够在web.xml文件中将相符某种特性的一切请求交给这个Servlet处置惩罚,这个Servlet再参照一个设置文件将各个请求离别分配给差别的action去处置惩罚。
(struts的设置文件能够有多个,能够按模块设置各自的设置文件,如许能够防备设置文件的过分膨胀)
2.ActionServlet把请求交给action去处置惩罚之前,会将请求参数封装成一个formbean对象(就是一个java类,这个类中的每一个属性对应一个请求参数)
3.要申明的是, ActionServlet把formbean对象传递给action的execute要领之前,可能会挪用formbean的validate要领举行校验,只要校验通事后才将这个formbean对象传递给action的execute要领,不然,它将返回一个毛病页面,这个毛病页面由input属性指定。
4.action实行完后要返回显现的结果视图,这个结果视图是用一个ActionForward对象来示意的,actionForward对象经由历程struts-config.xml设置文件中的设置关联到某个jsp页面。
因为递次中运用的是在struts-config.xml设置文件为jsp页面设置的逻辑名,如许能够完成action递次代码与返回的jsp页面称号的解耦。
(以上,也能够连系本身运用感觉谈本身的观点)
谈谈你对Hibernate的邃晓。
1. 面向对象设想的软件内部运转历程能够邃晓成就是在不停竖立种种新对象、竖立对象之间的关联,挪用对象的要领来转变各个对象的状态和对象灭亡的历程,不论递次运转的历程和操纵怎样,本质上都是要获得一个结果,递次上一个时刻和下一个时刻的运转结果的差别就表现在内存中的对象状态发生了变化。
2.为了在关机和内存空间不够的状态下,坚持递次的运转状态,须要将内存中的对象状态保留到耐久化装备和从耐久化装备中恢复出对象的状态,一般都是保留到关联数据库来保留大批对象信息。
从Java递次的运转功用上来讲,保留对象状态的功用比拟体系运转的其他功用来讲,应该是一个很不起眼的隶属功用,java采纳jdbc来完成这个功用,这个不起眼的功用却要编写大批的代码,而做的事变仅仅是保留对象和恢复对象,而且那些大批的jdbc代码并没有什么手艺含量,基础上是采纳一套官样文章的范例代码模板来编写,是一种苦活和重复性的事情。
3.经由历程数据库保留java递次运转时发生的对象和恢复对象,实在就是完成了java对象与关联数据库纪录的映照关联,称为ORM(即Object RelationMapping),人们能够经由历程封装JDBC代码来完成了这类功用,封装出来的产物称之为ORM框架,Hibernate就是个中的一种盛行ORM框架。
运用Hibernate框架,不必写JDBC代码,仅仅是挪用一个save要领,就能够将对象保留到关联数据库中,仅仅是挪用一个get要领,就能够从数据库中加载出一个对象。
4.运用Hibernate的基础流程是:设置Configuration对象、发生SessionFactory、竖立session对象,启动事宜,完成CRUD操纵,提交事宜,封闭session。
5.运用Hibernate时,先要设置hibernate.cfg.xml文件,个中设置数据库衔接信息和方言等,还要为每一个实体设置响应的hbm.xml文件,hibernate.cfg.xml文件中须要登记每一个hbm.xml文件。
6.在运用Hibernate时,重点要相识Session的缓存道理,级联,耽误加载和hql查询。
(以上,也能够连系本身运用JDBC时的烦琐谈hibernate的感觉)
谈谈你对Spring的邃晓。
1.Spring是完成了工场形式的工场类(在这里有必要诠释清楚什么是工场形式),这个类名为BeanFactory(现实上是一个接口),在递次中一般BeanFactory的子类ApplicationContext。Spring相当于一个大的工场类,在其设置文件中经由历程<bean>元素设置用于竖立实例对象的类名和实例对象的属性。
2. Spring供应了对IOC优越支撑,IOC是一种编程头脑,是一种架构艺术,应用这类头脑能够很好地完成模块之间的解耦,IOC也称为DI(Depency Injection)。
3. Spring供应了对AOP手艺的优越封装, AOP称为面向切面编程,就是体系中有许多各不相干的类的要领,在这些浩瀚要领中要到场某种体系功用的代码,比方,到场日记,到场权限推断,到场异常处置惩罚,这类运用称为AOP。
完成AOP功用采纳的是代办手艺,客户端递次不再挪用目的,而挪用代办类,代办类与目的类对外具有雷同的要领声明,有两种体式格局能够完成雷同的要领声明,一是完成雷同的接口,二是作为目的的子类。
在JDK中采纳Proxy类发生动态代办的体式格局为某个接口生成完成类,假如要为某个类生成子类,则能够用CGLI B。
在生成的代办类的要领中到场体系功用和挪用目的类的响应要领,体系功用的代办以Advice对象举行供应,显著要竖立出代办对象,最少须要目的类和Advice类。spring供应了这类支撑,只须要在spring设置文件中设置这两个元素即可完成代办和aop功用。
(以上,也能够连系本身运用感觉谈本身的观点)
谈谈Struts的优瑕玷
长处:
1. 完成MVC形式,构造清楚,使开发者只关注营业逻辑的完成.
2.有雄厚的tag能够用 ,Struts的标记库(Taglib),如能天真动用,则能大大提高开发效力
3. 页面导航使体系的头绪越发清楚。经由历程一个设置文件,即可把握全部体系各部分之间的联络,这关于后期的保护有着莫大的优点。尤其是当另一批开发者接办这个项目时,这类上风表现得越发显著。
4. 供应Exception处置惩罚机制 .
5. 数据库链接池治理
6. 支撑I18N
瑕玷:
一,转到展现层时,须要设置forward,假如有十个展现层的jsp,须要设置十次struts,而且还不包含有时刻目次、文件变动,须要从新修正forward,注重,每次修正设置今后,请求从新部署全部项目,而tomcate如许的服务器,还必须从新启动服务器
二,Struts的Action必须是thread-safe体式格局,它仅仅许可一个实例去处置惩罚一切的请求。所以action用到的一切的资本都必须一致同步,这个就引起了线程平安的问题。
三,测试不方便. Struts的每一个Action都同Web层耦合在一同,如许它的测试依靠于Web容器,单元测试也很难完成。不过有一个Junit的扩大东西Struts TestCase能够完成它的单元测试。
四,范例的转换. Struts的FormBean把一切的数据都作为String范例,它能够运用东西Commons-Beanutils举行范例转化。但它的转化都是在Class级别,而且转化的范例是不可设置的。范例转化时的毛病信息返回给用户也是异常难题的。
五,对Servlet的依靠性过强. Struts处置惩罚Action时必须要依靠ServletRequest和ServletResponse,一切它摆脱不了Servlet容器。
六,前端表达式言语方面.Struts集成了JSTL,所以它重要运用JSTL的表达式言语来猎取数据。然则JSTL的表达式言语在Collection和索引属性方面处置惩罚显得很弱。
七,对Action实行的掌握难题. Struts竖立一个Action,假如想掌握它的实行递次将会异常难题。以至你要从新去写Servlet来完成你的这个功用需求。
八,对Action实行前和后的处置惩罚. Struts处置惩罚Action的时刻是基于class的hierarchies,很难在action处置惩罚前和后举行操纵。
九,对事宜支撑不够.在struts中,现实是一个表单Form对应一个Action类(或DispatchAction),换一句话说:在Struts中现实是一个表单只能对应一个事宜,struts这类事宜体式格局称为application event,application event和component event比拟是一种粗粒度的事宜
iBatis与Hibernate有什么差别?
雷同点:屏障jdbc api的底层接见细节,运用我们不必与jdbc api打交道,就能够接见数据。
jdbc api编程流程牢固,还将sql语句与java代码混淆在了一同,常常须要拼集sql语句,细节很烦琐。
ibatis的优点:屏障jdbc api的底层接见细节;将sql语句与java代码举行星散;供应了将结果集自动封装称为实体对象和对象的鸠合的功用,queryForList返回对象鸠合,用queryForObject返回单个对象;供应了自动将实体对象的属性传递给sql语句的参数。
Hibernate是一个全自动的orm映照东西,它能够自动生成sql语句,ibatis须要我们本身在xml设置文件中写sql语句,hibernate要比ibatis功用担任和壮大许多。因为hibernate自动生成sql语句,我们没法掌握该语句,我们就没法去写特定的高效力的sql。
关于一些不太庞杂的sql查询,hibernate能够很好帮我们完成,然则,关于迥殊庞杂的查询,hibernate就很难顺应了,这时刻用ibatis就是不错的挑选,因为ibatis照样由我们本身写sql语句。
在hibernate举行多表查询每一个表中各取几个字段,也就是说查询出来的结果集没有一个实体类与之对应怎样处理?
处理方案一,:根据Object[]数据掏出数据,然后本身组bean
处理方案二:对每一个表的bean写构造函数,比方表一要查出field1,field2两个字段,那末有一个构造函数就是Bean(type1 filed1,type2 field2) ,然后在hql内里就能够直接生成这个bean了。
引见一下Hibernate的二级缓存
根据以下思绪来回覆:
(1)起首说清楚什么是缓存
(2)再说有了hibernate的Session就是一级缓存,即有了一级缓存,为何还要有二级缓存
(3)末了再说怎样设置Hibernate的二级缓存。
1,缓存就是把之前从数据库中查询出来和运用过的对象保留在内存中(一个数据构造中),这个数据构造一般是或相似HashMap,当今后要运用某个对象时,先查询缓存中是不是有这个对象。
假如有则运用缓存中的对象,假如没有则去查询数据库,并将查询出来的对象保留在缓存中,以便下次运用。
2,Hibernate的Session就是一种缓存,我们一般将之称为Hibernate的一级缓存,当想运用session从数据库中查询出一个对象时,Session也是先从本身内部检察是不是存在这个对象,存在则直接返回,不存在才去接见数据库,并将查询的结果保留在本身内部。
因为Session代表一次会话历程,一个Session与一个数据库衔接相干系,所以Session最好不要长时候坚持翻开,一般仅用于一个事宜当中,在事宜结束时就应封闭。而且Session是线程不平安的,被多个线程同享时轻易出现问题。
一般只要那种全局意义上的缓存才是真正的缓存运用,才有较大的缓存代价,因而,Hibernate的Session这一级缓存的缓存作用并不显著,运用代价不大。
Hibernate的二级缓存就是要为Hibernate设置一种全局缓存,让多个线程和多个事宜都能够同享这个缓存。
我们愿望的是一个人运用过,其他人也能够运用,session没有这类结果。
3,二级缓存是独立于Hibernate的软件部件,属于第三方的产物,多个厂商和构造都供应有缓存产物,比方,EHCache和OSCache等等。在Hibernate中运用二级缓存,起首就要在hibernate.cfg.xml设置文件中设置运用哪一个厂家的缓存产物,接着须要设置该缓存产物本身的设置文件,末了要设置Hibernate中的哪些实体对象要归入到二级缓存的治理中。
邃晓了二级缓存道理和有了这个思绪后,很轻易设置起Hibernate的二级缓存。
扩大学问:一个SessionFactory能够关联一个二级缓存,也即一个二级缓存只能担任缓存一个数据库中的数据,当运用Hibernate的二级缓存后,注重不要有其他的运用或SessionFactory来变动当前数据库中的数据,如许缓存的数据就会与数据库中的现实数据不一致。
JDO是什么?
JDO是Java对象耐久化的新的范例,为java data object的简称,也是一个用于存取某种数据仓库中的对象的范例化API。JDO供应了通明的对象存储,因而对开发人员来讲,存储数据对象完整不须要分外的代码(如JDBC API的运用)。
这些烦琐的例行事情已转移到JDO产物供应商身上,使开发人员摆脱出来,从而集合时候和精神在营业逻辑上。别的,JDO很天真,因为它能够在任何数据底层上运转。
比较:JDBC只是面向关联数据库(RDBMS)JDO更通用,供应到任何数据底层的存储功用,比方关联数据库、文件、XML以及对象数据库(ODBMS)等等,使得运用可移植性更强。
Hibernate的一对多和多对一双向关联的区分??
一对多关联映照和多对一关联映照完成的基础道理都是一样的,既是在多的一端到场一个外键指向一的一端外键,而重要的区分就是保护端差别。
它们的区分在于保护的关联差别:
一对多关联映照是指在加载一的一端数据的同时加载多的一端的数据多对一关联映照是指在加载多的一端数据的同时加载一的一端的数据。
Hibernate是怎样耽误加载?
1. Hibernate2耽误加载完成:a)实体对象 b)鸠合(Collection)
2. Hibernate3 供应了属性的耽误加载功用 当Hibernate在查询数据的时刻,数据并没有存在与内存中,当递次真正对数据的操纵时,对象才存在与内存中,就完成了耽误加载,他节省了服务器的内存开支,从而提高了服务器的机能。
以上就是java框架口试题目(1)的细致内容,更多请关注ki4网别的相干文章!