`

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

    博客分类:
  • 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。

 

分享到:
评论

相关推荐

    自己搭建的一个框架

    标题 "自己搭建的一个框架" 暗示了这个压缩包可能包含了一个人自定义开发的软件框架,这通常意味着一个用于简化特定类型软件开发的基础结构。框架可以是用于Web应用、移动应用或者桌面应用,它提供了代码重用和设计...

    SSH框架,适合初学者的,内容比较简单容易理解

    在学习SSH框架时,初学者可以从以下几个方面入手: 1. **理解MVC模式**:了解模型、视图和控制器各自的职责,以及它们如何协作处理用户请求。 2. **Struts2配置**:学习struts2.xml配置文件,掌握Action、...

    ssh框架练习页面框架

    这个“ssh框架练习页面框架”项目,显然是一个针对SSH框架的实践练习,重点在于使用JSP进行前端页面设计,实现客户信息管理系统的增删改查功能。 Struts2是MVC(Model-View-Controller)架构的一部分,主要负责处理...

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

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

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

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

    Spring+SpringMVC+Mybatis框架整合例子(SSM) 下载

    Spring、SpringMVC和Mybatis是Java开发中最常用的三大开源框架,它们的整合使用,通常被称为SSM框架。这个框架组合提供了完整的后端服务解决方案,包括依赖注入(DI)、面向切面编程(AOP)、模型-视图-控制器(MVC...

    Java框架面试题总结

    Struts中的几个关键对象的作用** - **ActionServlet**:作为控制器,管理整个Struts框架的流程。 - **ActionForm**:封装表单数据,提供验证功能。 - **Action**:业务逻辑处理器,执行具体的业务操作。 - **...

    HTML+css框架集合

    在描述中提到“不是很好用”,这可能是因为每个框架都有其适用场景和局限性。例如,虽然Bootstrap广泛使用,但其较大的文件大小可能不适合对性能要求极高的项目。而某些框架可能学习曲线较陡峭,初学者可能会感到...

    Javaweb开发三大框架整理.pdf

    Java Web 开发三大框架是指 Struts、Hibernate 和 Spring 三个框架,它们是 Java Web 开发中最常用的框架。本篇文章将对这三个框架进行概述和分析,帮助读者更好地理解和使用它们。 Struts 框架 Struts 框架是一个...

    Java框架面试题总结.pdf

    它的工作流程可以分为以下几个阶段: * 客户端向服务器发送请求 * 服务器接收到请求后,Struts框架将其 dispatch 到对应的Action * Action将请求参数封装到FormBean中,并将其传递给业务逻辑层 * 业务逻辑层处理...

    Android-安卓跨进程跨app通信框架

    这个框架的核心目标是提供一个简单易用的API,使得开发者可以轻松地在不同的Android应用之间传递数据和执行操作。它通常会包含以下几个关键组成部分: 1. **Binder机制**:Android的跨进程通信基础是Binder机制。...

    最全的安全框架shiro学习视频

    Shiro的核心功能主要分为以下几个部分: 1. **认证(Authentication)**:验证用户的身份,即用户是否为系统中的合法用户。 2. **授权(Authorization)**:确定用户是否有权限执行某些操作。 3. **会话管理(Session ...

    基于SSM框架的Java Web开发课程教学中的几点思考.pdf

    本文主要探讨了在基于SSM(Spring+Spring MVC+MyBatis)框架的Java Web开发课程教学中出现的问题,并提出了相应的改进措施。以下是详细的知识点总结: 1. SSM框架介绍: SSM框架是目前Java Web开发中广泛使用的一种...

    外挂框架源码

    在本案例中,标签"MFC"提示我们这个框架可能基于Microsoft Foundation Classes (MFC),这是一个由微软提供的C++类库,用于构建Windows桌面应用程序。 MFC是微软Windows API的封装,它提供了一种面向对象的方式来...

    微博框架源代码

    这个框架的主要目的是简化微博类应用的开发过程,提供一个基础结构,开发者可以在此基础上添加自定义功能和设计,以满足特定需求。从描述来看,该框架包含了实现基本功能的组件,如发布心情、查看好友页面等,这些都...

    java框架在线生成

    1. **快速启动项目**:通过在线生成工具,可以在几分钟内搭建起一个基础的Java项目框架,避免了手动创建项目所需的时间和精力。 2. **标准化代码结构**:自动生成的框架遵循了一定的设计模式和编码规范,有助于保持...

    c++框架visio图

    此"Frame.vsd"文件很可能是用Visio绘制的C++框架接口的详细图表,可能包含以下几个方面: 1. **框架核心组件**:这部分可能会展示框架的主要组成部分,如事件管理器、插件管理器等,以及它们之间的关系。 2. **...

    ASP.NET后台管理框架

    这个框架基于Microsoft的ASP.NET技术栈,利用了.NET Framework或.NET Core的特性,旨在提高开发效率,减少重复工作,并确保应用程序的稳定性和性能。 在ASP.NET后台管理框架中,有几个核心知识点是开发者必须了解的...

    一个简单maven项目框架ssm

    在项目结构上,一个典型的SSM项目会包含以下几个主要部分: - `src/main/java`:存放Java源代码,包括Spring配置、业务逻辑、实体类和Mapper接口。 - `src/main/resources`:存储配置文件,如Spring的bean配置、...

Global site tag (gtag.js) - Google Analytics