1、Java工程师(程序员)面题Struts,Spring,Hibernate三大框架 1.Hibernate工作原理及为何要用?原理: 1.读取并解析配备文献 2.读取并解析映射信息,创建SessionFactory 3.打开Session 4.创建事务Transation 5.持久化操作 6.提交事务 7.关闭Session 8.关闭SesstionFactory 为何要用: 1. 对JDBC访问数据库的代码做了封装,大大简化了数据访问层繁琐的重复性代码。 2. Hibernate是一个基于JDBC的主流持久化框架,是一个优秀的ORM实现。他很大程度的简化DAO层的编码工作 3. hibern
2、ate使用Java反射机制,而不是字节码增强程序来实现透明性。 4. hibernate的性能非常好,因为它是个轻量级框架。映射的灵活性很出色。它支持各种关系数据库,从一对一到多对多的各种复杂关系。 2Hibernate是怎样延迟加载? 1. Hibernate2延迟加载实现:a)实体对象 b)集合(Collection) 2. Hibernate3 提供了属性的延迟加载功效 当Hibernate在查询数据的时候,数据并没有存在与内存中,当程序真正对数据的操作时,对象才存在与内存中,就实现了延迟加载,他节约了服务器的内存开销,从而提升了服务器的性能。 3Hibernate中怎样实现类之间的关系
3、?(如:一对多、多对多的关系) 类与类之间的关系重要体目前表与表之间的关系进行操作,它们都是对对象进行操作,我们程序中把所有的表与类都映射在一起,它们通过配备文献中的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、是否验证,需要验证则调用ActionFo
4、rm的validate措施,验证失败则跳转到input,成功则继续。5、Action从ActionForm取得数据,调用javabean 中的业务措施处理数据。6、Action返回ActionForward对象,跳转到对应JSP页面或Action。7、返回HTTP响应到客户端浏览器。MVC设计模式:modal:“模型” 也称业务逻辑,是正真完成任务的代码,相称与JavaBeanview:视图,其实就是显示界面,相称于JSPcontroller:控制器,他控制模型和视图的交互过程,相称于servletstruts1是基于MVC设计模式hibernate是基于ORM对象关系映射 5.struts是
5、什么?struts1是基于JSP和servlet的一个开源的Web应用框架,使用的是MVC的设计模式struts2是基于webwork技术的框架,是sun和webwork企业联手开发的一个功效非常齐全的框架,struts2和struts1没有任何关系,是一个全新的框架 6.spring是什么?spring是一个集成了许多第三方框架的大杂烩,其核心技术是IOC(控制反转,也称依赖注入)和AOP(面对切面编程) 7.hibernate是什么?hibernate是基于ORM对象关系映射(完成对象数据到关系数据映射的机制)实现的,做数据持久化的工具 8.JSF是什么?JavaServer Face是基
6、于组件的web开发框架,跟sturts差不多的框架 9.数据库里面的索引和约束是什么?索引是为了提升数据的检索速度,索引是建立在数据表上,依照一个或多个字段建立的约束是为了保持数据的完整性,约束有非空约束,主键约束,外键约束等等。10.spring是什么这个问题,往往能够通过我们为何要使用spring这个问题来切入:AOP 让开发人员能够创建非行为性的关注点,称为横切关注点,并将它们插入到应用程序代码中。使用 AOP 后,公共服务 (比 如日志、持久性、事务等)就能够分解成方面并应用到域对象上,同时不会增加域对象的对象模型的复杂性。 IOC 允许创建一个能够结构对象的应用环境,然后向这些对象传
7、递它们的协作对象。正如单词 倒置 所表白的,IOC 就像反 过来的 JNDI。没有使用一堆抽象工厂、服务定位器、单元素(singleton)和直接结构(straight construction),每一个对象都是用其协作对象结构的。因此是由容器管理协作对象(collaborator)。 Spring虽然一个AOP框架,也是一IOC容器。 Spring 最佳的地方是它有利于您替代对象。有了 Spring,只要用 JavaBean 属性和配备文献加入依赖性(协作对象)。然后能够很轻易地在需要时替代具备类似接口的协作对象。 11.用自己的话简明论述struts2的执行流程。Struts 2框架自身大
8、体能够分为3个部分:核心控制器FilterDispatcher、业务控制器Action和用户实现的企业业务逻辑组件。核心控制器FilterDispatcher是Struts 2框架的基础,包括了框架内部的控制流程和处理机制。业务控制器Action和业务逻辑组件是需要用户来自己实现的。用户在开发Action和业务逻辑组件的同时,还需要编写有关的配备文献,供核心控制器FilterDispatcher来使用。 Struts 2的工作流程相对于Struts 1要简单,与WebWork框架基本相同,因此说Struts 2是WebWork的升级版本。基本简明流程如下:1、客户端浏览器发出HTTP祈求。2、
9、依照web.xml配备,该祈求被FilterDispatcher接收。3、依照struts.xml配备,找到需要调用的Action类和措施, 并通过IoC方式,将值注入给Aciton。4、Action调用业务逻辑组件处理业务逻辑,这一步包括表单验证。5、Action执行完成,依照struts.xml中的配备找到对应的返回成果result,并跳转到对应页面。6、返回HTTP响应到客户端浏览器。1 Action是不是线程安全的?假如不是 有什么方式能够确保Action的线程安全?假如是,阐明原因 不是申明局部变量,或者扩展RequestProcessor,让每次都创建一个Action,或者在spr
10、ing中用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.Hi
11、bernate有哪几个查询数据的方式 hql查询,sql查询,条件查询6.load()和get()的区分 hibernate对于load措施以为该数据在数据库中一定存在,能够放心的使用代理来延迟加载,load默认支持延迟加载,在用到对象中的其他属性数 据时才查询数据库,不过万一数据库中不存在该统计,只能抛异常ObjectNotFoundEcception;所说的load措施抛异常是指在使用该对 象的数据时,数据库中不存在该数据时抛异常,而不是在创建这个对象时。因为session中的缓存对于hibernate来说是个相称便宜的资源,因此在 load时会先查一下session缓存看看该id对应的对
12、象是否存在,不存在则创建代理(load时候之查询一级缓存,不存在则创建代理)。get() 目前一级缓存找,没有就去二级缓存找,没有就去数据库找,没有就返回null ;而对于get措施,hibernate一定要获取到真实的数据,否则返回null。7.谈谈hibernate的延迟加载和openSessionInView 延迟加载要在session范围内,用到的时候再加载;opensessioninview是在web层写了一个filter来打开和关闭session,这么就表示在一次request过程中session一直开着,确保了延迟加载在session中的这个前提。8.spring的事务有几个方式
13、?谈谈spring事务的隔离级别和传输行为。 申明事务和编程事务 隔离级别: - DEFAULT使用数据库默认的隔离级别 - READ_UNCOMMITTED会出现脏读,不可重复读和幻影读问题 - READ_COMMITTED会出现重复读和幻影读 - REPEATABLE_READ会出现幻影读 - SERIALIZABLE最安全,不过代价最大,性能影响极其严重 和传输行: - REQUIRED存在事务就融入该事务,不存在就创建事务 - SUPPORTS存在事务就融入事务,不存在则不创建事务 - MANDATORY存在事务则融入该事务,不存在,抛异常 - REQUIRES_NEW总是创建新事务
14、- NOT_SUPPORTED存在事务则挂起,一直执行非事务操作 - NEVER总是执行非事务,假如目前存在事务则抛异常 - NESTED嵌入式事务9.Hibernate中的update()和saveOrUpdate()的区分. 摘自hibernate阐明文档: saveOrUpdate()做下面的事: 假如对象已经在本session中持久化了,不做任何事 假如另一个与本session关联的对象拥有相同的持久化标识(identifier),抛出一个异常 假如对象没有持久化标识(identifier)属性,对其调用save() 假如对象的持久标识(identifier)表白其是一个新实例化的对象
15、,对其调用save() 假如对象是附带版本信息的(通过 或 ) 并且版本属性的值表白其是一个新实例化的对象,save()它。 否则update() 这个对象10.Spring对多个ORM框架提供了很好的支持,简单描述在Spring中使用Hibernate的措施,并结合事务管理。 getHiberanteTemplate里面提供了save,update,delete,find等措施。 简单说一个:假如配备了申明式事务,当执行getHibernateTemplate的各种措施的时候,事务会自动被加载 假如没有配备事务,那么以上操作不会真正的被同时到数据库,除非配备了hibernate的autoco
16、mmit=true8.spring的事务有几个方式?谈谈spring事务的隔离级别和传输行为。 spring事务分两种形式,申明式事务和编程式事务,spring提供了一个事务的接口PaltformTractionManager接口,针对不一样的事务,spring进行了不一样的实现,对hibernate事务的实现HIbernateTractionManager,对JDBC的JdbcTractionManager,DataSourceTractionManager以及JdoTractionManager。接口platformTractionManager提供了三个措施,获取事务,提交和回滚的措施。
17、*分享面试题二】Spring,hibernate,struts的面试笔试题(含答案) (申明:这里不是为其他商业利益,是为学习讨论使用)【郑重申明】:单纯接分将被删帖,希望大家有自己的感触 Hibernate工作原理及为何要用? 原理: 1.读取并解析配备文献 2.读取并解析映射信息,创建SessionFactory 3.打开Sesssion 4.创建事务Transation 5.持久化操作 6.提交事务 7.关闭Session 8.关闭SesstionFactory为何要用: 1. 对JDBC访问数据库的代码做了封装,大大简化了数据访问层繁琐的重复性代码。2. Hibernate是一个基于J
18、DBC的主流持久化框架,是一个优秀的ORM实现。他很大程度的简化DAO层的编码工作3. hibernate使用Java反射机制,而不是字节码增强程序来实现透明性。4. hibernate的性能非常好,因为它是个轻量级框架。映射的灵活性很出色。它支持各种关系数据库,从一对一到多对多的各种复杂关系。2 Hibernate是怎样延迟加载? 1. Hibernate2延迟加载实现:a)实体对象 b)集合(Collection)2. Hibernate3 提供了属性的延迟加载功效当Hibernate在查询数据的时候,数据并没有存在与内存中,当程序真正对数据的操作时,对象才存在与内存中,就实现了延迟加载,
19、他节约了服务器的内存开销,从而提升了服务器的性能。3Hibernate中怎样实现类之间的关系?(如:一对多、多对多的关系)类与类之间的关系重要体目前表与表之间的关系进行操作,它们城市对对象进行操作,我们程序中把所有的表与类都映射在一起,它们通过配备文献中的many-to-one、one-to-many、many-to-many、4 说下Hibernate的缓存机制1. 内部缓存存在Hibernate中又叫一级缓存,属于应用事物级缓存2. 二级缓存: a) 应用及缓存 b) 分布式缓存 条件:数据不会被第三方修改、数据大小在可接收范围、数据更新频率低、同一数据被系统频繁使用、非 核心数据 c)
20、第三方缓存的实现5 Hibernate的查询方式 Sql、Criteria,object comptosition Hql: 1、 属性查询 2、 参数查询、命名参数查询 3、 关联查询 4、 分页查询 5、 统计函数6 怎样优化Hibernate? 1.使用双向一对多关联,不使用单向一对多 2.灵活使用单向一对多关联 3.不用一对一,用多对一取代 4.配备对象缓存,不使用集合缓存 5.一对多集合使用Bag,多对多集合使用Set 6. 继承类使用显式多态 7. 表字段要少,表关联不要怕多,有二级缓存撑腰7 Struts工作机制?为何要使用Struts? 工作机制: Struts的工作流程: 在
21、web应用开启时就会加载初始化ActionServlet,ActionServlet从 struts-config.xml文献中读取配备信息,把它们存储到各种配备对象 当ActionServlet接收到一个客户祈求时,将执行如下流程. -(1)检索和用户祈求匹配的ActionMapping实例,假如不存在,就返回祈求途径无效信息; -(2)假如ActionForm实例不存在,就创建一个ActionForm对象,把客户提交的表单数据保存到ActionForm对象中; -(3)依照配备信息决定是否需要表单验证.假如需要验证,就调用ActionForm的validate()措施; -(4)假如Act
22、ionForm的validate()措施返回null或返回一个不包括ActionMessage的ActuibErrors对象, 就表示表单验证成功; -(5)ActionServlet依照ActionMapping所包括的映射信息决定将祈求转发给哪个Action,假如对应 的 Action实例不存在,就先创建这个实例,然后调用Action的execute()措施; -(6)Action的execute()措施返回一个ActionForward对象,ActionServlet在把客户祈求转发给 ActionForward对象指向的JSP组件; -(7)ActionForward对象指向JSP组件
23、生成动态网页,返回给客户;为何要用: JSP、Servlet、JavaBean技术的出现给我们构建强大的企业应用系统提供了也许。但用这些技术构建的系统非常的繁乱,因此在此之上,我们需要一个规则、一个把这些技术组织起来的规则,这就是框架,Struts便应运而生。基于Struts开发的应用由3类组件组成:控制器组件、模型组件、视图组件8 Struts的validate框架是怎样验证的? 在struts配备文献中配备详细的错误提示,再在FormBean中的validate()措施详细调用。9 说下Struts的设计模式 MVC模式: web应用程序开启时就会加载并初始化ActionServler。用
24、户提交表单时,一个配备好的ActionForm对象被创建,并被填入表单对应的数 据,ActionServler依照Struts-config.xml文献配备好的设置决定是否需要表单验证,假如需要就调用ActionForm的 Validate()验证后选择将祈求发送到哪个Action,假如Action不存在,ActionServlet会先创建这个对象,然后调用 Action的execute()措施。Execute()从ActionForm对象中获取数据,完成业务逻辑,返回一个ActionForward对 象,ActionServlet再把客户祈求转发给ActionForward对象指定的jsp组
25、件,ActionForward对象指定的jsp生成动 态的网页,返回给客户。10 spring工作机制及为何要用? 1.spring mvc请所有的祈求都提交给DispatcherServlet,它会委托应用系统的其他模块负责负责对祈求进行真正的处理工作。 2.DispatcherServlet查询一个或多个HandlerMapping,找到处理祈求的Controller. 3.DispatcherServlet请祈求提交到目标Controller 4.Controller进行业务逻辑处理后,会返回一个ModelAndView 5.Dispathcher查询一个或多个ViewResolver视
26、图解析器,找到ModelAndView对象指定的视图对象 6.视图对象负责渲染返回给客户端。为何用: AOP 让开发人员能够创建非行为性的关注点,称为横切关注点,并将它们插入到应用程序代码中。使用 AOP 后,公共服务 (比 如日志、持久性、事务等)就能够分解成方面并应用到域对象上,同时不会增加域对象的对象模型的复杂性。 IOC 允许创建一个能够结构对象的应用环境,然后向这些对象传递它们的协作对象。正如单词 倒置 所表白的,IOC 就像反 过来的 JNDI。没有使用一堆抽象工厂、服务定位器、单元素(singleton)和直接结构(straight construction),每一个对象都是用其
27、协作对象结构的。因此是由容器管理协作对象(collaborator)。 Spring虽然一个AOP框架,也是一IOC容器。 Spring 最佳的地方是它有利于您替代对象。有了 Spring,只要用 JavaBean 属性和配备文献加入依赖性(协作对象)。然后能够很轻易地在需要时替代具备类似接口的协作对象。Struts,Spring,Hibernate优缺陷 Struts跟Tomcat、Turbine等诸 多Apache项目同样,是开源软件,这是它的一大优点。使开发者能更深入的了解其内部实现机制。 Struts开放源码框架的创建是为了使开发者在构建基于Java Servlet和JavaServe
28、r Pages(JSP)技术的Web应用时愈加轻易。Struts框架为开放者提供了一个统一的标准框架,通过使用Struts作为基础,开发者能够更专注 于应用程序的商业逻辑。Struts框架自身是使用Java Servlet和JavaServer Pages技术的一个Model-View-Controller(MVC)实现.详细来讲,Struts的优点有:1. 实现MVC模式,结构清楚,使开发者只关注业务逻辑的实现.2. 有丰富的tag能够用 ,Struts的标识库(Taglib),如能灵活动用,则能大大提升开发效率。另外,就目前国内的JSP开发者而言,除了使用JSP自带的常用标识外,极少开发自
29、己的标识,或许Struts是一个很好的起点。3. 页面导航.页面导航将是此后的一个发展方向,实际上,这么做,使系统的脉络愈加清楚。通过一个配备文献,即可把握整个系统各部分之间的联系,这对于后期的维护有着莫大的好处。尤其是当另一批开发者接手这个项目时,这种优势体现得愈加明显。4. 提供Exception处理机制 .5. 数据库链接池管理6. 支持I18N缺陷:一、转到展示层时,需要配备forward,每一次转到展示层,相信大多数都是直接转到jsp,而包括到转向, 需要配备forward,假如有十个展示层的jsp,需要配备十次struts,并且还不包括有时候目录、文献变更,需要重新修改forwar
30、d,注意, 每次修改配备之后,要求重新布署整个项目,而tomcate这么的服务器,还必须重新开启服务器,假如业务变更复杂频繁的系统,这么的操作简单不可想象。 目前就是这么,几十上百个人同时在线使用我们的系统,大家能够想象一下,我的烦恼有多大。二、 Struts 的Action必需是threadsafe方式,它仅仅允许一个实例去处理所有的祈求。因此action用到的所有的资源都必需统一同时,这个就引起了线程安全的问题。三、 测试不以便. Struts的每个Action都同Web层耦合在一起,这么它的测试依赖于Web容器,单元测试也极难实现。不过有一个Junit的扩展工具Struts TestCa
31、se能够实现它的单元测试。四、 类型的转换. Struts的FormBean把所有的数据都作为String类型,它能够使用工具Commons-Beanutils进行类型转化。但它的转化都是在Class级别,并且转化的类型是不可配备的。类型转化时的错误信息返回给用户也是非常困难的。五、 对Servlet的依赖性过强. Struts处理Action时必需要依赖ServletRequest 和ServletResponse,所有它挣脱不了Servlet容器。六、前端体现式语言方面.Struts集成了JSTL,因此它重要使用JSTL的体现式语言来获取数据。可是JSTL的体现式语言在Collection
32、和索引属性方面处理显得很弱。七、 对Action执行的控制困难. Struts创建一个Action,假如想控制它的执行次序将会非常困难。甚至你要重新去写Servlet来实现你的这个功效需求。八、 对Action 执行前和后的处理. Struts处理Action的时候是基于class的hierarchies,极难在action处理前和后进行操作。九、 对事件支持不够. 在struts中,实际是一个表单Form对应一个Action类(或DispatchAction),换一句话说:在Struts中实际是一个表单只能 对应一个事件,struts这种事件方式称为application event,app
33、lication event和component event相比是一个粗粒度的事件。Struts重要的表单对象ActionForm是一个对象,它代表了一个应用,这个对象中最少包括几个字段, 这些字段是Jsp页面表单中的input字段,因为一个表单对应一个事件,因此,当我们需要将事件粒度细化到表单中这些字段时,也就是说,一个字段对应一 个事件时,单纯使用Struts就不太也许,当然通过结合JavaScript也是能够转弯实现的。2HibernateHibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,使得Java程序员能够随心所欲的使用对象编程思维来操纵数
34、据库。Hibernate能够应用在任何使用JDBC的场所,既能够在Java的客户端程序实用,也能够在Servlet/JSP的Web应用中使用,最具革命意义的是,Hibernate能够在应用EJB的J2EE架构中取代CMP,完成数据持久化的重担。大多数开发机构常常采取创建各自独立的数据持久层。一旦底层的数据结构发生变化,那么修改应用的其他部分使之适应这种变化的代价将是十分巨大的。 Hibernate适时的填补了这一空白,它为Java应用提供了一个易用的、高效率的对象关系映射框架。hibernate是个轻量级的持久性框架,功 能却非常丰富。优点:a.Hibernate 使用 Java 反射机制而不
35、是字节码增强程序来实现透明性。b.Hibernate 的性能非常好,因为它是个轻量级框架。映射的灵活性很出色。c.它支持各种关系数据库,从一对一到多对多的各种复杂关系。缺陷:它限制您所使用的对象模型。(例如,一个持久性类不能映射到多个表)其独有的界面和可怜的市场份额也让人不安,尽管如此,Hibernate 还是以其强大的发展动力减轻了这些风险。其他的开源持久性框架也有某些,不过都没有 Hibernate 这么有市场冲击力。上面回贴情绪有点激动,希望谅解,我不是因为有人批评Hibernate而感到不快,而是因为帖子里面的观点实在让我以为荒谬。无论以为 Hibernate好也吧,不好也吧,我唯一以
36、为遗憾的是,在中文论坛里面找不到一个对Hibernate的真正高水平的评价。在TSS上有一个有关 Hibernate的hot thread,跟了几百贴,其中包括Hibernate作者Gavin和LiDO JDO的CTO,对于JDO和Hibernate有过某些激烈的争论,我曾经耐心的看了一遍,仍然没有发觉针对Hibernate真正有力的袭击,那些所 谓的袭击无非针对Hibernate没有一个GUI的配备工具,没有商业企业支持,没有标准化等等这些站不住脚的理由。补充几点我的意见:一、Hibernate是JDBC的轻量级的对象封装,它是一个独立的对象持久层框架,和App Server,和EJB没有什
37、么必然的联系。Hibernate能够用在任何JDBC能够使用的场所,例如Java应用程序的数据库访问代码,DAO接口 的实现类,甚至能够是BMP里面的访问数据库的代码。从这个意义上来说,Hibernate和EB不是一个范围的东西,也不存在非此即彼的关系。二、Hibernate是一个和JDBC亲密关联的框架,因此Hibernate的兼容性和JDBC驱动,和数据库都有一定的关系,不过和使用它的Java程序,和App Server没有任何关系,也不存在兼容性问题。三、Hibernate不能用来直接和Entity Bean做对比,只有放在整个J2EE项目标框架中才能比较。并且虽然是放在软件整体框架中来
38、看,Hibernate也是做为JDBC的替代者出现的,而 不是Entity Bean的替代者出现的,让我再列一次我已经列n次的框架结构:老式的架构:1) Session Bean Entity Bean DB为了处理性能障碍的替代架构:2) Session Bean DAO JDBC DB使用Hibernate来提升上面架构的开发效率的架构:3) Session Bean DAO Hibernate DB就上面3个架构来分析:1、内存消耗:采取JDBC的架构2无疑是最省内存的,Hibernate的架构3次之,EB的架构1最差。2、运行效率:假如JDBC的代码写的非常优化,那么JDBC架构运行效
39、率最高,不过实际项目中,这一点几乎做不到,这需要程序员非常精通JDBC,利用 Batch语句,调整PreapredStatement的Batch Size和Fetch Size等参数,以及在必要的情况下采取成果集cache等等。而一般情况下程序员是做不到这一点的。因此Hibernate架构体现出最快的运行效率。 EB的架构效率会差的很远。3、开发效率:在有JBuilder的支持下以及简单的项目,EB架构开发效率最高,JDBC次之,Hibernate最差。不过在大的项目,尤其是持久层关系映射很复杂的情况下,Hibernate效率高的惊人,JDBC次之,而EB架构很也许会失败。4、分布式,安全检查
40、,集群,负载均衡的支持因为有SB做为Facade,3个架构没有区分。四、EB和Hibernate学习难度在哪里?EB的难度在哪里?不在复杂的XML配备文献上,而在于EB利用稍微不慎,就有严重的性能障碍。因此难在你需要学习诸多EJB设计模式来避开性能问题,需 要学习App Server和EB的配备来优化EB的运行效率。做EB的开发工作,程序员的大部分精力都被放到了EB的性能问题上了,反而没有更多的精力关注自身就重要 投入精力去考虑的对象持久层的设计上来。Hibernate难在哪里?不在Hibernate自身的复杂,实际上Hibernate非常的简单,难在Hibernate太灵活了。当你用EB来实
41、现持久层的时候,你会发觉EB实在是太笨拙了,笨拙到你根本没有什么能够选择的余地,因此你根本就不用花费精力去设计方案,去平衡方案的好坏,去费脑筋考虑选择哪个方案,因为只有唯一的方案摆在你面前,你只能这么做,没得选择。Hibernate相反,它太灵活了,相同的问题,你最少能够设计出十几个方案来处理,因此尤其的犯难,到底用这个,还是用那个呢?这些方案之间到底有什 么区分呢?他们的运行原理有什么不一样?运行效率哪个比很好?光是主键生成,就有七八种方案供你选择,你为难不为难?集合属性能够用Set,能够用 List,还能够用Bag,到底哪个效率高,你为难不为难?查询能够用iterator,能够用list,
42、哪个好,有什么区分?你为难不为难?复合主键你 能够直接在hbm里面配备,也能够自定义CustomerType,哪种比很好些?你为难不为难?对于一个表,你能够选择单一映射一个对象,也能够映射成 父子对象,还能够映射成两个1:1的对象,在什么情况下用哪种方案比很好,你为难不为难?这个列表能够一直开列下去,直到你不想再看下去为止。当你面前摆着无数的眼花缭乱的方案的时候,你会以为幸福呢?还是悲痛呢?假如你是一个负责的程序员, 那么你一定会仔细研究每种方案的区分,每种方案的效率,每种方案的合用场所,你会以为你已经陷入进去拔不出来了。假如是用EB,你第一秒种就已经做出了决 定,根本没得选择,例如说集合属性
43、,你只能用Collection,假如是Hibernate,你会在Bag,List和Set之间往返犹豫不决,甚至搞 不清楚的话,程序都没有措施写。3 Spring它是一个开源的项目,并且目前非常活跃;它基于IoC(Inversion of Control,反向控制)和AOP的构架多层j2ee系统的框架,但它不强迫你必须在每一层中必须使用Spring,因为它模块化的很好,允许你依照自 己的需要选择使用它的某一个模块;它实现了很优雅的MVC,对不一样的数据访问技术提供了统一的接口,采取IoC使得能够很轻易的实现bean的装配,提供 了简洁的AOP并据此实现Transcation Managment,
44、等等优点:a. Spring能有效地组织你的中间层对象,无论你是否选择使用了EJB。假如你仅仅使用了Struts或其他为J2EE的 API特制的framework,Spring致力于处理剩余的问题。b. Spring能消除在许多工程中常见的对Singleton的过多使用。依照我的经验,这是一个很大的问题,它减少了系统的可测试性和面对对象的程度。c. 通过一个在不一样应用程序和项目间一致的措施来处理配备文献,Spring能消除各种各样自定义格式的属性文献的需要。曾经对某个类要寻找的是哪个魔法般的 属性项或系统属性感到不解,为此不得不去读Javadoc甚至源编码?有了Spring,你仅仅需要看看类
45、的JavaBean属性。Inversion of Control的使用(在下面讨论)协助完成了这种简化。d.通过把对接口编程而不是对类编程的代价几乎减少到没有,Spring能够促进养成好的编程习惯。e. Spring被设计为让使用它创建的应用尽也许少的依赖于他的APIs。在Spring应用中的大多数业务对象没有依赖于Spring。f. 使用Spring构建的应用程序易于单元测试。g.Spring能使EJB的使用成为一个实现选择,而不是应用架构的必然选择。你能选择用POJOs或local EJBs来实现业务接口,却不会影响调用代码。h. Spring协助你处理许多问题而无需使用EJB。Sprin
46、g能提供一个EJB的替代物,它们适合用于许多web应用。例如,Spring能使用AOP提供申明性事务管理而不通过EJB容器,假如你仅仅需要与单个数据库打交道,甚至不需要一个JTA实现。i. Spring为数据存取提供了一个一致的框架,无论是使用的是JDBC还是O/R mapping产品(如Hibernate)。Spring确实使你能通过最简单可行的处理措施来处理你的问题。而这是有有很大价值的。缺陷:使用人数不多、jsp中要写诸多代码、控制器过于灵活,缺乏一个公用控制器。6. Java web部分1、Tomcat的优化经验答:去掉对web.xml的监视,把jsp提前编辑成Servlet。有充裕物
47、理内存的情况,加大tomcat使用的jvm的内存1、HTTP祈求的GET与POST方式的区分(1)get是从服务器上获取数据,post是向服务器传送数据。 在客户端,Get方式在通过URL提交数据,数据在URL中能够看到;POST方式,数据放置在HTML HEADER内提交。 (2) 对于get方式,服务器端用Request.QueryString获取变量的值,对于post方式,服务器端用Request.Form获取提交的数据。 (3) GET方式提交的数据最多只能有1024字节,而POST则没有此限制。 (4)安全性问题。正如在(1)中提到,使用 Get 的时候,参数会显示在地址栏上,而 Post 不会。因此,假如这些数据是中文数据并且是非敏感数据,那么使用 get;假如用户输入的数据不是中文字符并且包括敏感数据,那么还是使用 post为好。62、解释一下什么是servlet;答:servlet有良好的生存期的定义,包括加载和实例化、初始化、处理祈
©2010-2025 宁波自信网络信息技术有限公司 版权所有
客服电话:4008-655-100 投诉/维权电话:4009-655-100