框架面试题自己别人的试题.docx
- 文档编号:11783845
- 上传时间:2023-04-01
- 格式:DOCX
- 页数:95
- 大小:78.78KB
框架面试题自己别人的试题.docx
《框架面试题自己别人的试题.docx》由会员分享,可在线阅读,更多相关《框架面试题自己别人的试题.docx(95页珍藏版)》请在冰豆网上搜索。
框架面试题自己别人的试题
(问答题+选取题(在55页))
Java工程师(程序员)面题
Struts,Spring,Hibernate三大框架
1.Hibernate工作原理及为什么要用?
原理:
1.读取并解析配备文献2.读取并解析映射信息,创立SessionFactory3.打开Session4.创立事务Transation5.持久化操作6.提交事务7.关闭Session8.关闭SesstionFactory
为什么要用:
1.对JDBC访问数据库代码做了封装,大大简化了数据访问层繁琐重复性代码。
2.Hibernate是一种基于JDBC主流持久化框架,是一种先进ORM实现。
她很大限度简化DAO层编码工作3.hibernate使用Java反射机制,而不是字节码增强程序来实现透明性。
4.hibernate性能非常好,由于它是个轻量级框架。
映射灵活性很出众。
它支持各种关系数据库,从一对一到多对多各种复杂关系。
2.Hibernate是如何延迟加载?
1.Hibernate2延迟加载实现:
a)实体对象b)集合(Collection)
2.Hibernate3提供了属性延迟加载功能当Hibernate在查询数据时候,数据并没有存在与内存中,当程序真正对数据操作时,对象才存在与内存中,就实现了延迟加载,她节约了服务器内存开销,从而提高了服务器性能。
3.Hibernate中如何实现类之间关系?
(如:
一对多、多对多关系)
类与类之间关系重要体当前表与表之间关系进行操作,它们都是对对象进行操作,咱们程序中把所有表与类都映射在一起,它们通过配备文献中many-to-one、one-to-many、many-to-many
4.Struts1流程:
1、客户端浏览器发出HTTP祈求。
2、依照web.xml配备,该祈求被ActionServlet接受。
3、依照struts-config.xml配备,ActionServlet先将祈求中参数填充到ActionForm中,然后ActionServlet再将祈求发送到Action进行解决。
4、与否验证,需要验证则调用ActionFormvalidate办法,验证失败则跳转到input,成功则继续。
5、Action从ActionForm获得数据,调用javabean中业务办法解决数据。
6、Action返回ActionForward对象,跳转到相应JSP页面或Action。
7、返回HTTP响应到客户端浏览器。
MVC设计模式:
modal:
“模型”也称业务逻辑,是正真完毕任务代码,相称与JavaBeanview:
视图,其实就是显示界面,相称于JSPcontroller:
控制器,她控制模型和视图交互过程,相称于servletstruts1是基于MVC设计模式hibernate是基于ORM对象关系映射
5.struts是什么?
struts1是基于JSP和servlet一种开源Web应用框架,使用是MVC设计模式struts2是基于webwork技术框架,是sun和webwork公司联手开发一种功能非常齐全框架,struts2和struts1没有任何关系,是一种全新框架
6.spring是什么?
spring是一种集成了许多第三方框架大杂烩,其核心技术是IOC(控制反转,也称依赖注入)和AOP(面向切面编程)
7.hibernate是什么?
hibernate是基于ORM对象关系映射(完毕对象数据到关系数据映射机制)实现,做数据持久化工具
8.JSF是什么?
JavaServerFace是基于组件web开发框架,跟sturts差不多框架
9.数据库里面索引和约束是什么?
索引是为了提高数据检索速度,索引是建立在数据表上,依照一种或各种字段建立约束是为了保持数据完整性,约束有非空约束,主键约束,外键约束等等。
10.spring是什么
这个问题,往往可以通过咱们为什么要使用spring这个问题来切入:
AOP让开发人员可以创立非行为性关注点,称为横切关注点,并将它们插入到应用程序代码中。
使用AOP后,公共服务(比如日记、持久性、事务等)就可以分解成方面并应用到域对象上,同步不会增长域对象对象模型复杂性。
IOC容许创立一种可以构造对象应用环境,然后向这些对象传递它们协作对象。
正如单词倒置所表白,IOC就像反过来JNDI。
没有使用一堆抽象工厂、服务定位器、单元素(singleton)和直接构造(straightconstruction),每一种对象都是用其协作对象构造。
因而是由容器管理协作对象(collaborator)。
Spring虽然一种AOP框架,也是一IOC容器。
Spring最佳地方是它有助于您替代对象。
有了Spring,只要用JavaBean属性和配备文献加入依赖性(协作对象)。
然后可以很容易地在需要时替代具备类似接口协作对象。
11.用自己话简要阐述struts2执行流程。
Struts2框架自身大体可以分为3个某些:
核心控制器FilterDispatcher、业务控制器Action和顾客实现公司业务逻辑组件。
核心控制器FilterDispatcher是Struts2框架基本,包括了框架内部控制流程和解决机制。
业务控制器Action和业务逻辑组件是需要顾客来自己实现。
顾客在开发Action和业务逻辑组件同步,还需要编写有关配备文献,供核心控制器FilterDispatcher来使用。
Struts2工作流程相对于Struts1要简朴,与WebWork框架基本相似,因此说Struts2是WebWork升级版本。
基本简要流程如下:
1、客户端浏览器发出HTTP祈求。
2、依照web.xml配备,该祈求被FilterDispatcher接受。
3、依照struts.xml配备,找到需要调用Action类和办法,并通过IoC方式,将值注入给Aciton。
4、Action调用业务逻辑组件解决业务逻辑,这一步包括表单验证。
5、Action执行完毕,依照struts.xml中配备找到相应返回成果result,并跳转到相应页面。
6、返回HTTP响应到客户端浏览器。
1Action是不是线程安全?
如果不是有什么方式可以保证Action线程安全?
如果是,阐明因素
不是
声明局部变量,或者扩展RequestProcessor,让每次都创立一种Action,或者在spring中用scope="prototype"来管理
2.MVC,分析一下struts是如何实现MVC
m:
JavaBean或结合EJB组件或者pojo构成
c:
Action来实现
v:
一组JSP文献及其标签构成。
3.struts中几种核心对象作用(说说几种核心对象作用)
Action:
控制器类,ActionForm:
表单对象,DynaValidatorForm:
动态form,ActonMapping:
配备文献中action节点信息......
4.说说AOP和IOC概念以及在spring中是如何应用
AOP:
面向方面编程,ioc:
依赖注入;声明式事务和编程式事务积极某些通用某些
5.Hibernate有哪几种查询数据方式
hql查询,sql查询,条件查询
6.load()和get()区别
hibernate对于load办法以为该数据在数据库中一定存在,可以放心使用代理来延迟加载,load默认支持延迟加载,在用到对象中其她属性数据时才查询数据库,但是万一数据库中不存在该记录,只能抛异常ObjectNotFoundEcception;所说load办法抛异常是指在使用该对象数据时,数据库中不存在该数据时抛异常,而不是在创立这个对象时。
由于session中缓存对于hibernate来说是个相称便宜资源,因此在load时会先查一下session缓存看看该id相应对象与否存在,不存在则创立代理(load时候之查询一级缓存,不存在则创立代理)。
get()当前一级缓存找,没有就去二级缓存找,没有就去数据库找,没有就返回null;而对于get办法,hibernate一定要获取到真实数据,否则返回null。
7.谈谈hibernate延迟加载和openSessionInView
延迟加载要在session范畴内,用届时候再加载;opensessioninview是在web层写了一种
filter来打开和关闭session,这样就表达在一次request过程中session始终开着,保证了延迟
加载在session中这个前提。
8.spring事务有几种方式?
谈谈spring事务隔离级别和传播行为。
声明事务和编程事务
隔离级别:
-DEFAULT使用数据库默认隔离级别
-READ_UNCOMMITTED会浮现脏读,不可重复读和幻影读问题
-READ_COMMITTED会浮现重复读和幻影读
-REPEATABLE_READ会浮现幻影读
-SERIALIZABLE最安全,但是代价最大,性能影响极其严重
和传播行:
-REQUIRED存在事务就融入该事务,不存在就创立事务
-SUPPORTS存在事务就融入事务,不存在则不创立事务
-MANDATORY存在事务则融入该事务,不存在,抛异常
-REQUIRES_NEW总是创立新事务
-NOT_SUPPORTED存在事务则挂起,始终执行非事务操作
-NEVER总是执行非事务,如果当前存在事务则抛异常
-NESTED嵌入式事务
9.Hibernate中update()和saveOrUpdate()区别.
摘自hibernate阐明文档:
saveOrUpdate()做下面事:
如果对象已经在本session中持久化了,不做任何事
如果另一种与本session关联对象拥有相似持久化标记(identifier),抛出一种异常
如果对象没有持久化标记(identifier)属性,对其调用save()
如果对象持久标记(identifier)表白其是一种新实例化对象,对其调用save()
如果对象是附带版本信息(通过
否则update()这个对象
10.Spring对各种ORM框架提供了较好支持,简朴描述在Spring中使用Hibernate办法,并结合事务管理。
getHiberanteTemplate里面提供了save,update,delete,find等办法。
简朴说一种:
如果配备了声明式事务,当执行getHibernateTemplate各种办法时候,事务会
自动被加载
如果没有配备事务,那么以上操作不会真正被同步到数据库,除非配备了hibernate
autocommit=true
8.spring事务有几种方式?
谈谈spring事务隔离级别和传播行为。
spring事务分两种形式,声明式事务和编程式事务,spring提供了一种事务接口
PaltformTractionManager接口,针对不同事务,spring进行了不同实现,对hibernate事务
实现HIbernateTractionManager,对JDBCJdbcTractionManager,
DataSourceTractionManager以及JdoTractionManager。
接口platformTractionManager提供了三
个办法,获取事务,提交和回滚办法。
******************************************************************************
分享面试题二】Spring,hibernate,struts面试笔试题(含答案)
(声明:
这里不是为其她商业利益,是为学习讨论使用)
【郑重声明】:
单纯接分将被删帖,但愿人们有自己感触
Hibernate工作原理及为什么要用?
原理:
1.读取并解析配备文献
2.读取并解析映射信息,创立SessionFactory
3.打开Sesssion
4.创立事务Transation
5.持久化操作
6.提交事务
7.关闭Session
8.关闭SesstionFactory
为什么要用:
1.对JDBC访问数据库代码做了封装,大大简化了数据访问层繁琐重复性代码。
2.Hibernate是一种基于JDBC主流持久化框架,是一种先进ORM实现。
她很大限度简化DAO层编码工作
3.hibernate使用Java反射机制,而不是字节码增强程序来实现透明性。
4.hibernate性能非常好,由于它是个轻量级框架。
映射灵活性很出众。
它支持各种关系数据库,从一对一到多对多各种复杂关系。
2.Hibernate是如何延迟加载?
1.Hibernate2延迟加载实现:
a)实体对象b)集合(Collection)
2.Hibernate3提供了属性延迟加载功能
当Hibernate在查询数据时候,数据并没有存在与内存中,当程序真正对数据操作时,对象才存在与内存中,就实现了延迟加载,她节约了服务器内存开销,从而提高了服务器性能。
3.Hibernate中如何实现类之间关系?
(如:
一对多、多对多关系)
类与类之间关系重要体当前表与表之间关系进行操作,它们都市对对象进行操作,咱们程序中把所有表与类都映射在一起,它们通过配备文献中many-to-one、one-to-many、many-to-many、
4.说下Hibernate缓存机制
1.内部缓存存在Hibernate中又叫一级缓存,属于应用事物级缓存
2.二级缓存:
a)应用及缓存
b)分布式缓存
条件:
数据不会被第三方修改、数据大小在可接受范畴、数据更新频率低、同一数据被系统频繁使用、非核心数据
c)第三方缓存实现
5.Hibernate查询方式
Sql、Criteria,objectcomptosition
Hql:
1、属性查询
2、参数查询、命名参数查询
3、关联查询
4、分页查询
5、记录函数
6.如何优化Hibernate?
1.使用双向一对多关联,不使用单向一对多
2.灵活使用单向一对多关联
3.不用一对一,用多对一取代
4.配备对象缓存,不使用集合缓存
5.一对多集合使用Bag,多对多集合使用Set
6.继承类使用显式多态
7.表字段要少,表关联不要怕多,有二级缓存撑腰
7.Struts工作机制?
为什么要使用Struts?
工作机制:
Struts工作流程:
在web应用启动时就会加载初始化ActionServlet,ActionServlet从
struts-config.xml文献中读取配备信息,把它们存储到各种配备对象
当ActionServlet接受到一种客户祈求时,将执行如下流程.
-
(1)检索和顾客祈求匹配ActionMapping实例,如果不存在,就返回祈求途径无效信息;
-
(2)如果ActionForm实例不存在,就创立一种ActionForm对象,把客户提交表单数据保存到ActionForm对象中;
-(3)依照配备信息决定与否需要表单验证.如果需要验证,就调用ActionFormvalidate()办法;
-(4)如果ActionFormvalidate()办法返回null或返回一种不包括ActionMessageActuibErrors对象,就表达表单验证成功;
-(5)ActionServlet依照ActionMapping所包括映射信息决定将祈求转发给哪个Action,如果相应Action实例不存在,就先创立这个实例,然后调用Actionexecute()办法;
-(6)Actionexecute()办法返回一种ActionForward对象,ActionServlet在把客户祈求转发给ActionForward对象指向JSP组件;
-(7)ActionForward对象指向JSP组件生成动态网页,返回给客户;
为什么要用:
JSP、Servlet、JavaBean技术浮现给咱们构建强大公司应用系统提供了也许。
但用这些技术构建系统非常繁乱,因此在此之上,咱们需要一种规则、一种把这些技术组织起来规则,这就是框架,Struts便应运而生。
基于Struts开发应用由3类组件构成:
控制器组件、模型组件、视图组件
8.Strutsvalidate框架是如何验证?
在struts配备文献中配备详细错误提示,再在FormBean中validate()办法详细调用。
9.说下Struts设计模式
MVC模式:
web应用程序启动时就会加载并初始化ActionServler。
顾客提交表单时,一种配备好ActionForm对象被创立,并被填入表单相应数据,ActionServler依照Struts-config.xml文献配备好设立决定与否需要表单验证,如果需要就调用ActionFormValidate()验证后选取将祈求发送到哪个Action,如果Action不存在,ActionServlet会先创立这个对象,然后调用Actionexecute()办法。
Execute()从ActionForm对象中获取数据,完毕业务逻辑,返回一种ActionForward对象,ActionServlet再把客户祈求转发给ActionForward对象指定jsp组件,ActionForward对象指定jsp生成动态网页,返回给客户。
10.spring工作机制及为什么要用?
1.springmvc请所有祈求都提交给DispatcherServlet,它会委托应用系统其她模块负责负责对祈求进行真正解决工作。
2.DispatcherServlet查询一种或各种HandlerMapping,找到解决祈求Controller.
3.DispatcherServlet请祈求提交到目的Controller
4.Controller进行业务逻辑解决后,会返回一种ModelAndView
5.Dispathcher查询一种或各种ViewResolver视图解析器,找到ModelAndView对象指定视图对象
6.视图对象负责渲染返回给客户端。
为什么用:
{AOP让开发人员可以创立非行为性关注点,称为横切关注点,并将它们插入到应用程序代码中。
使用AOP后,公共服务(比如日记、持久性、事务等)就可以分解成方面并应用到域对象上,同步不会增长域对象对象模型复杂性。
IOC容许创立一种可以构造对象应用环境,然后向这些对象传递它们协作对象。
正如单词倒置所表白,IOC就像反过来JNDI。
没有使用一堆抽象工厂、服务定位器、单元素(singleton)和直接构造(straightconstruction),每一种对象都是用其协作对象构造。
因而是由容器管理协作对象(collaborator)。
Spring虽然一种AOP框架,也是一IOC容器。
Spring最佳地方是它有助于您替代对象。
有了Spring,只要用JavaBean属性和配备文献加入依赖性(协作对象)。
然后可以很容易地在需要时替代具备类似接口协作对象。
}
Struts,Spring,Hibernate优缺陷
Struts跟Tomcat、Turbine等诸多Apache项目同样,是开源软件,这是它一大长处。
使开发者能更进一步理解其内部实现机制。
Struts开放源码框架创立是为了使开发者在构建基于JavaServlet和JavaServerPages(JSP)技术Web应用时更加容易。
Struts框架为开放者提供了一种统一原则框架,通过使用Struts作为基本,开发者可以更专注于应用程序商业逻辑。
Struts框架自身是使用JavaServlet和JavaServerPages技术一种Model-View-Controller(MVC)实现.
详细来讲,
Struts长处有:
1.实现MVC模式,构造清晰,使开发者只关注业务逻辑实现.
2.有丰富tag可以用,Struts标记库(Taglib),如能灵活动用,则能大大提高开发效率。
此外,就当前国内JSP开发者而言,除了使用JSP自带惯用标记外,很少开发自己标记,或许Struts是一种较好起点。
3.页面导航.页面导航将是此后一种发展方向,事实上,这样做,使系统脉络更加清晰。
通过一种配备文献,即可把握整个系统各某些之间联系,这对于后期维护有着莫大好处。
特别是当另一批开发者接手这个项目时,这种优势体现得更加明显。
4.提供Exception解决机制.
5.数据库链接池管理
6.支持I18N
缺陷:
一、转到展示层时,需要配备forward,每一次转到展示层,相信大多数都是直接转到jsp,而涉及到转向,需要配备forward,如果有十个展示层jsp,需要配备十次struts,并且还不涉及有时候目录、文献变更,需要重新修改forward,注意,每次修改配备之后,规定重新布置整个项目,而tomcate这样服务器,还必要重新启动服务器,如果业务变更复杂频繁系统,这样操作简朴不可想象。
当前就是这样,几十上百个人同步在线使用咱们系统,人们可以想象一下,我烦恼有多大。
二、StrutsAction必须是thread-safe方式,它仅仅容许一种实例去解决所有祈求。
因此action用到所有资源都必须统一同步,这个就引起了线程安全问题。
三、测试不以便.Struts每个Action都同Web层耦合在一起,这样它测试依赖于Web容器,单元测试也很难实现。
但是有一种Junit扩展工具StrutsTestCase可以实现它单元测试。
四、类型转换.StrutsFormBean把所有数据都作为String类型,它可以使用工具Commons-Beanutils进行类型转化。
但它转化都是在Class级别,并且转化类型是不可配备。
类型转化时错误信息返回给顾客也是非常困难。
五、对Servlet依赖性过强.Struts解决Action时必须要依赖ServletRequest和ServletResponse,所有它挣脱不了Servlet容器。
六、前端表达式语言方面.Struts集成了JSTL,因此它重要使用JSTL表达式语言来获取数据。
可是JSTL表达式语言在Collection和索引属性方面解决显得很弱。
七、对Action执行控制困难.Struts创立一种Action,如果想控制它执行顺序将会非常困难。
甚至你要重新去写Servlet来实现你这个功能需求。
八、对Action执行前和后解决.Struts解决Action时候是基于classhierarchies,很难在action解决前和后进行操作。
九、对事件支持不够.在struts中,实际是一种表单Form相应一种Action类(或DispatchAction),换一句话说:
在Struts中实际是一种表单只能相应一种事件,struts这种事件方式称为applicationevent,applicationevent和componentevent相比是一种粗粒度事件。
Struts重要表单对象ActionForm是一种对象,它代表了一种应用,这个对象中至少包括几种字段,这些字段是Jsp页面表单中input字段,由于一种表单相应一种事件,因此,当咱们需
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 框架 试题 自己 别人