`

最容易被问的几个框架问题

    博客分类:
  • J2EE
 
阅读更多


一、struts2的优点(其实会问你做的这个项目为什么会用struts2框架呢?)

1.Struts2基于MVC架构,框架结构清晰,开发流程一目了然,开发人员可以很好的掌控开发的过程。
    项目开发过程中,一个具体的功能的开发流程是:拿到一个具体的功能需求文档和设计好的前台界面(在开发中我不负责设计页面),分析需要从前台传递哪些参数,确定参数的变量名称,在Action中设置相应的变量,这些参数在前台如何显示,并将页面上的一些控件适当使用Struts2提供的服务器端控件来代替,编写Action对应的方法来完成业务逻辑,最后,做一些与配置文件相关的设置。当然实际的开发比这个过程要复杂,涉及到数据库,验证,异常等处理。但是使用Struts2进行开发,你的关注点绝大部分是在如何实现业务逻辑上,开发过程十分清晰明了。
2.使用OGNL进行参数传递。
    OGNL提供了在Struts2里访问各种作用域中的数据的简单方式,你可以方便的获取Request,Attribute,Application,Session,Parameters中的数据。大大简化了开发人员在获取这些数据时的代码量。
3.强大的拦截器
    Struts2 的拦截器是一个Action级别的AOP,Struts2中的许多特性都是通过拦截器来实现的,例如异常处理,文件上传,验证等。拦截器是可配置与重用的,可以将一些通用的功能如:登录验证,权限验证等置于拦截器中以完成一些Java Web项目中比较通用的功能。在我实现的的一Web项目中,就是使用Struts2的拦截器来完成了系统中的权限验证功能。
4.易于测试
    Struts2的Action都是简单的POJO,这样可以方便的对Struts2的Action编写测试用例,大大方便了Java Web项目的测试。
5.易于扩展的插件机制
    在Struts2添加扩展是一件愉快而轻松的事情,只需要将所需要的Jar包放到WEB-INF/lib文件夹中,在struts.xml中作一些简单的设置就可以实现扩展。
6.模块化
Struts2已经把模块化作为了体系架构中的基本思想,可以通过三种方法来将应用程序模块化:
(1)将配置信息拆分成多个文件
(2)把自包含的应用模块创建为插件
(3)创建新的框架特性,即将与特定应用无关的新功能组织成插件,以添加到多个应用中去。
7.全局结果与声明式异常
  为应用程序添加全局的Result,和在配置文件中对异常进行处理,这样当处理过程中出现指定异常时,可以跳转到特定页面,这一功能十分实用。

二、Spring的优点:(你觉得在项目中用到spring的好处?)

1方便解耦,简化开发

通过Spring提供的IoC容器,我们可以将对象之间的依赖关系交由Spring进行控制,避免硬编码所造成的过度程序耦合。有了Spring,用户不必再为单实例模式类、属性文件解析等这些很底层的需求编写代码,可以更专注于上层的应用。

2 AOP编程的支持

  通过Spring提供的AOP功能,方便进行面向切面的编程,许多不容易用传统OOP实现的功能可以通过AOP轻松应付。

3声明式事务的支持

  在Spring中,我们可以从单调烦闷的事务管理代码中解脱出来,通过声明式方式灵活地进行事务的管理,提高开发效率和质量。

4方便程序的测试

  可以用非容器依赖的编程方式进行几乎所有的测试工作,在Spring里,测试不再是昂贵的操作,而是随手可做的事情。

5方便集成各种优秀框架

Spring不排斥各种优秀的开源框架,相反,Spring可以降低各种框架的使用难度,Spring提供了对各种优秀框架(如Struts,Hibernate、Hession、Quartz)等的直接支持。

6降低Java EE API的使用难度

  Spring对很多难用的Java EE API(如JDBC,JavaMail,远程调用等)提供了一个薄薄的封装层,通过Spring的简易封装,这些Java EE API的使用难度大为降低。

7 Java 源码是经典学习范例

Spring的源码设计精妙、结构清晰、匠心独用,处处体现着大师对Java设计模式灵活运用以及对Java技术的高深造诣。Spring框架源码无疑是Java技术的最佳实践范例。如果想在短时间内迅速提高自己的Java技术水平和应用开发水平,学习和研究Spring源码将会使你收到意想不到的效果。

三、iBatis和Hibernate的5点区别及选择要素

1. iBatis的特性易于掌握

iBatis的特性拿来文档看半天到两天就可以掌握了。Hibernate可能需要3倍以上的时间来掌握。

2.iBatis的特性更容易进行SQL的优化

这个应该大家都有共识了。另外Hibernate生成的SQL也实在是太难看了。鉴于有的朋友提到了SQL不太重要。我想在这里强调一下我的经验,一般系统性能的瓶颈都在数据库上。所以这一点是iBatis和Hibernate比较后非常重要的一个优势。

3.iBatis的特性是可以进行细粒度的优化

3.1 比如说我有一个表,这个表有几个或者几十个字段,我需要更新其中的一个字段,iBatis 很简单,执行一个SQLUPDATE TABLE_A SET column_1=#column_1# WHERE id=#id#但是用Hibernate的话就比较麻烦了,缺省的情况下Hibernate会更新所有字段。当然我记得Hibernate有一个选项可以控制只保存修改过的字段,但是我不太确定这个功能的负面效果,因此iBatis和Hibernate比较,iBatis的优势很明显。

3.2 我需要列出一个表的部分内容,用iBatis的时候,这里面的好处是可以少从数据库读很多数据,节省流量SELECT ID, NAME FROMTABLE_WITH_A_LOT_OF_COLUMN WHERE

3.2.1 一般情况下Hibernate会把所有的字段都选出来。比如说有一个上面表有8个字段,其中有一两个比较大的字段,varchar(255)/text。上面的场景中我为什么要把他们也选出来呢?

3.2.2 用Hibernate的话,你又不能把这两个不需要的字段设置为 lazy load,因为还有很多地方需要一次把整个 domain object 加载出来。这个时候就能显现出iBatis的好处了。

3.2.3Hibernate还有一个方案,就是生成 javabean/map/object[](感谢 leelun/cjmm),但是这样的话就可能会产生大量的多余 class。map/object[] 的方式应该不错,我比较喜欢这种方式。

3.3 如果我需要更新一条记录(一个对象),如果使用Hibernate,需要现把对象 select 出来,然后再做 update。这对数据库来说就是两条SQL。而iBatis只需要一条 update 的SQL就可以了。减少一次与数据库的交互,对于性能的提升是非常重要。

4. 开发方面

4.1 开发效率上,我觉得iBatis和Hibernate应该差不多

4.2 可维护性方面,我觉得iBatis更好一些。因为iBatis的 SQL都保存到单独的文件中。而Hibernate在有些情况下可能会在 java 代码中保存sql/hql。

5. 运行效率

5.1 在不考虑 cache 的情况下,iBatis 应该会比Hibernate快一些或者很多(根据实际情况会有所不同)。

当然 iBatis和Hibernate相比也有比较大的缺点

1. 不同数据库类型的支持不好,如果你要开发的系统是要在对中数据间移植,那可能用Hibernate比较好。 2. 缺省的 cache 支持不好,但是Hibernate的 cache 支持其实也不是很好,而且很复杂。尤其是对于大并发量的应用。所以我更倾向于自己管理 cache。

 

分享到:
评论

相关推荐

    大数据机器学习框架大数据机器学习框架

    现有的机器学习框架/软件包存在几个问题: 无法处理大数据:多数Python,Matlab和R写的训练框架适合处理规模小的样本,没有为大数据优化。 不容易整合到实际生产系统:standalone的程序无法作为library嵌入到大程序...

    Titan-Framework, 最容易使用WordPress选项框架.zip

    Titan-Framework, 最容易使用WordPress选项框架 泰坦框架 简单易用的WordPress选项框架。 Titan框架允许主题和插件开发者创建管理页面。选项。元框和主题定制选项,只需几个简单的代码行。把它放在WordPress插件的...

    CodeIgniter:php敏捷开发框架web快速开发详解

    你想写一个只有几个标准特性的简单的网站。 1.1.1 节省时间 CI 学习周期短,见效快。让我们试着评估一下相关的要素: CI 如何减少代码量? 你真的可以减少很多工作量:敲击键盘的次数减少了,代码错误减少了,你...

    XeFramework 一款轻量级的Delphi通用系统UI框架

    框架UI界面设计简洁、轻量、时尚和风格统一,代码一看就懂,容易上手和维护 框架代码部分采用模块化设计,代码之间的耦合度低,旧工程项目的代码可以方便快速的部署迁移到此框架上 框架包含了一个模拟程序启动时初始...

    Fourinone分布式并行计算四合一框架

    在写这个框架之前,我对分布式计算进行了长时间的思考,也看了老外写的其他开源框架,当我们把复杂的hadoop当作一门学科学习时,似乎忘记了我们想解决问题的初衷:我们仅仅是想写个程序把几台甚至更多的机器一起用...

    Fourinone分布式计算框架

    在写这个框架之前,我也看了老外写的其他开源框架,也对分布式计算进行了长时间的思考,当我们把复杂的hadoop当作一门学科学习时,似乎忘记了我们想解决问题的初衷:我们仅仅是想写个程序把几台甚至更多的机器一起用...

    侃侃单片机的裸奔程序框架

    经过这个阶段后,后来接触不同的MCU就会发现,都大同小异,各有各的优势而已,学任何一种新的MCU都很容易入手包括一些复杂的处理器。而且对MCU的编程控制会提升一个高度概况——就是对各种外围进行控制(如果是对复杂...

    关于ssm框架的所有jar包

    SpringMVC分离了控制器、模型对象、分派器以及处理程序对象的角色,这种分离让它们更容易...MyBatis是一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架。里面包含了所有的ssm框架的jar,还有jaon,tcp相关的包

    一个开源通用的应用程序框架 (待参与)

    ―――――――――――――――――――――――――――――――――― uClasses------------------------------在这里定义应用程序中的基础类 uPattern------------------------------几个模式的DELPHI实现或者...

    PHP敏捷开发框架CodeIgniter

    目前,我手头上有几个正在运行的客户网站,我希望依照我指定的方式去对其进行检测控制以及测试,同时记录下程序操作行为,在我需要时我可以得到一份相关的报告。 本书中的范例无法将 CI 的功能一丝不漏的完全展示,...

    网易游戏高性能、分布式服务器开发框架 Pomelo.zip

    第三个理念是让第三方很容易扩展,框架用了很多插件式的设计, 组件component、路由规则、甚至管理控制台都可以完全由第三方扩展。 Pomelo的框架组成 pomelo包括三部分: 框架, pomelo的核心, 与以往单进程的游戏...

    使用Dojo框架

    它是在几个项目捐助基础上建立起来的(nWidgets, Burstlib, f(m)),这也是为什么叫它a unified toolkit的原因。Dojo的目标是解决开发DHTML应用程序遇到的那些、长期存在 、历史问题,以及DHTML 跨浏览器问题。 Dojo...

    DuoLamPHP框架 v1.0

    自定义路径名字,长路径变成几个字符串  强大的import载入文件功能,随意指定路径或者目录  自动按需加载文件,大幅度提高运行速度  路由功能,比URL重写还给力。  自由、强大的扩展能力,让你不局限在框架...

    CodeIgniter:php敏捷开发框架(中文)

    目前,我手头上有几个正在运行的客户网站,我希望依照我指定的方式去对其进行检测控制以及测试,同时记录下程序操作行为,在我需要时我可以得到一份相关的报告。 本书中的范例无法将 CI 的功能一丝不漏的完全展示,...

    Seam 2.1 安全模块框架

    • 权限验证 - 一个应用十分广泛的权限验证框架,支持用户角色、持久化和基于规则的权限设置,能够灵活地实现属于用户自己的安全设置 • 权限管理 - 一组内置的Seam组件,能让应用程序的安全政策变得容易管理 • ...

    软件测试之自动化测试框架.doc

     随着项目版本的快速迭代、APP测试有以下几个特点:  首先,功能点多且细,测试工作量大,容易遗漏;  其次,代码模块常改动,回归测试很频繁,测试重复低效;  最后,数据环境多样,用户场景复杂,功能回归...

    一个开源通用的应用程序框架2版 (待参与)

    ―――――――――――――――――――――――――――――――――― uClasses------------------------------在这里定义应用程序中的基础类 uPattern------------------------------几个模式的DELPHI实现或者...

    10个最优秀的Node.js MVC框架

    这些框架使得它更加用户友好,易于使用,还支持众多的特性和功能,只要按照几个步骤就可以开发出庞大的 Web 应用程序。 1)Sails js Sails 是一款优秀的框架,可以很容易地开发定制的,企业级的和现代的Node.js应用...

    大数据机器学习框架(弥勒佛)MLF.zip

    现有的机器学习框架/软件包存在几个问题:无法处理大数据:多数Python,Matlab和R写的训练框架适合处理规模小的样本,没有为大数据优化。不容易整合到实际生产系统:standalone的程序无法作为library嵌入到大程序中...

    通用应用程序框架(开源)

    uPattern------------------------------几个模式的DELPHI实现或者定义 uAppUtils-----------------------------应用程序工具单元 uAppSet-------------------------------应用程序设置接口声明单元 ...

Global site tag (gtag.js) - Google Analytics