面试题3

在Struts2框架中的处理大概分为以下几个步骤
1 客户端初始化一个指向Servlet容器(例如Tomcat)的请求
2 这个请求经过一系列的过滤器(Filter)(这些过滤器中有一个叫做ActionContextCleanUp的可选过滤器,这个过滤器对于Struts2和其他框架的集成很有帮助,例如:SiteMesh Plugin)
3 接着StrutsPrepareAndExecuteFilter被调用,StrutsPrepareAndExecuteFilter询问ActionMapper来解析和判断该次请求是否需要由struts2框架来处理.
4 如果ActionMapper判断需要struts2来处理请求,StrutsPrepareAndExecuteFilter会把请求的处理交给ActionProxy
5 ActionProxy通过Configuration Manager加载框架的配置文件,找到需要调用的Action以及拦截器配置信息
6 ActionProxy创建一个ActionInvocation的实例。
7 ActionInvocation实例使用命名模式来调用,在调用Action的过程前后,涉及到相关拦截器(Intercepter)的调用。
8 一旦Action执行完毕,ActionInvocation负责根据struts.xml中的配置找到对应的返回结果配置。根据配置找到对应的Result处理类来处理结果集.大多数情况输出会交由模版语言(JSP,FreeMarker)完成输出内容拼装


简单介绍一下你对hibernate的理解?


    答:hibernate框架是一个ORM的持久层框架,ORM的含义是对象关系映射,简单理解就是通过对象和关系型数据库之间建立映射信息,以后再操作对象就相当于操作数据库了。hibernate框架是对JDBC进行了轻量级的封装,可以更方便简单的对数据库完成增删改查的操作。同时也提供了查询的方式和查询的策略。例如HQL和QBC的查询方式等。还提供了缓存的策略,效率会更高。


Hibernate和mybatis有什么区别?


1)mybatis是把sql语句与java代码分离了,sql语句在xml文件配置的
2)hibernate是ORM框架,它对jdbc进行了封装,在分层结构中处于持久化层,它能建立面向对象的域模型和关系数据模型之间的映射.它大大简化了dao层的编码工作
      3)  mybatis是半自动的,hibernate是全自动的,就是说mybatis可以配置sql语句,对于sql调优来说是比较好的,hibernate会自动生成所有的sql语句,调优不方便,hibernate用起来难度要大于mybatis


Hibernate中的update()和saveOrUpdate()的区别
    答:update是修改的方法,saveOrUpdate是保存或者更新
        saveorupdate()如果传入的对象在数据库中有就做update操作,如果没有就做save操作。
        save()在数据库中生成一条记录,如果数据库中有,会报错说有重复的记录。
        update()就是更新数据库中的记录


谈谈Spring的ioc、aop?
        IoC
                Inversion of Control 控制反转。
                我们以前开发,在一个类中使用其他类对象的时候都是采用new的方式直接获取,或者高级一点是通过反射的方式的得到需要的对象实例。这就造成了程序的耦合度非常高,一个类的运行,严重依赖于其他的类。并且还会出现程序中硬编码的情况。
                而spring中的IoC很好的解决了该问题,我们在一个类中使用其他类对象时,只需要定义一个接口类型的类成员变量,由使用者在使用时为我们注入具体的实现类对象,从而降低了程序的耦合度。
                实现IoC的思想就只有两种:依赖注入(Dependency Injection,简称DI)和依赖查找(Dependency Lookup)。
                而依赖注入使用的更广泛一些。例如:构造函数注入,set方法注入等等。


        AOP
                Aspect Oriented Programming 面向切面编程。
                我们之前学习的java语言,号称是面向对象编程,它有自己的优势。但是也存在着一些弊端。
                举例说明,在实际开发中,我们都会有一根业务主线,即客户(甲方)的需求。而程序员要做的就是围绕业务主线上的需求,实现功能(实现功能的方法我们叫做业务核心方法)。但是不可避免的,会有一些功能与业务主线没有关系,却又不能不做,比如权限的控制,事务的控制,日志的记录等等,这些功能绝大多数时候和业务主线没有关系,但是却和很多业务核心方法交织在一起,使我们的开发变得麻烦,并且冗余代码增多。
                而spring的提供了一种思想,把这些和业务主线没有关系的功能剥离出来,而在需要使用这些公共方法时,适时适地的把它加到我们的代码中去,使程序员在开发时,把更多的精力放在理解需求,实现业务核心功能上,并且让我们的代码变得简洁。这种思想就是面向切面编程。
                Spring实现面向切面编程使用的是动态代理技术,并且会根据实际情况来选择使用基于子类的还是基于接口的动态代理。


简单介绍一下你对spring的理解?
        任何框架在植入项目之中都不能带来效率的提升,反而是会带来效率的下降。因为java核心机制的问题,内存中多创建一个对象,就会造成性能降低。
        但是,spring带来的好处还是显而易见的:
                1、它的核心之一IoC,降低了我们程序的耦合度,使我们可以把项目设计成为一个可插拔的组件式工程。
                2、它的另一大核心AOP,使我们在开发过程中,精力得到释放,可以更专注的去理解客户的需求。并且在后期维护时,可以只维护很少的一部分。
                3、它提供的事务管理机制,采用声明的方式来配置事务,从而在维护时无需改动源码,解决了程序硬编码的弊端。
                4、它提供的DAO模板使我们的持久层开发又多了一种途径。
                5、它可以整合其他时下流行的框架,使我们在管理项目时,更加清晰,明确。
        并且以现在计算机的水平,使用spring框架造成的这点下降对程序的影响是微乎其微的。
        所以,总体来说spring框架的使用还是利大于弊的。


Spring是干嘛的?
        它是一个full-stack框架,提供了从表现层到业务层再到持久层的一套完整的解决方案。我们在项目中可以只使用spring一个框架,它就可以提供表现层的mvc框架,持久层的Dao框架。
        它的两大核心IoC和AOP更是为我们程序解耦和代码简洁易维护提供了支持。


你知道依赖注入么?简单介绍一下


        首先,明确依赖注入是实现控制反转的一种思想(另一种是依赖查找)。
        其次,在开发过程中,我们需要某个类的实例时,是由使用者为我们提供该类的实例。而不是自己去获取。
        最后,实现依赖注入的方式可以是使用构造方法注入或者set方法注入两种方式。
        在spring中注入的方式就有很多了,比如constructor-arg元素,property元素,p名称空间等等。


你知道控制反转么?简单介绍一下
        它是spring的核心之一。或者说是spring的基础核心,spring的其余核心功能都必须有IoC的支持。
        控制反转指的是,我们在获取对象的时候,由之前的主动出击,变成了被动接收。也就是说,在编写某个类时,只需要提供一个接口类型的类成员,并不需要关系具体的实现类,而是由使用者在使用时提供。这就降低了类和类之间的耦合度。


spring中自动装配的方式有哪些?
        1、 No:
                即不启用自动装配。
        2、 byName:
                通过属性的名字的方式查找JavaBean依赖的对象并为其注入。比如说类Computer有个属性printer,指定其autowire属性为byName后,Spring IoC容器会在配置文件中查找id/name属性为printer的bean,然后使用Seter方法为其注入。
        3、 byType:
                通过属性的类型查找JavaBean依赖的对象并为其注入。比如类Computer有个属性printer,类型为Printer,那么,指定其autowire属性为byType后,Spring IoC容器会查找Class属性为Printer的bean,使用Seter方法为其注入。
        4、 constructor:
                通byType一样,也是通过类型查找依赖对象。与byType的区别在于它不是使用Seter方法注入,而是使用构造子注入。
        5、 autodetect:
                在byType和constructor之间自动的选择注入方式。
        6、 default:
                由上级标签<beans>的default-autowire属性确定。


spring和hibernate管理事务有啥区别
        1、从编码上说,hibernate的事务管理是硬编码,是写在程序之中的。这就造成了,如果需要调整,就要修改源码,重新编译。
        2、从事务控制的位置来说:        hibernate是持久层框架,事务是控制在持久层的,这样就造成了越权操作。事务应放在业务层,而非持久层
        3、从代码维护上来说:hibernate控制事务,需要在每个需要事务支持的地方编写代码,后期维护不便。


spring管理事务有几种方式
        有两种方式:
                1、编程式事务,在代码中硬编码。(不推荐使用)
                2、声明式事务,在配置文件中配置(推荐使用)
                        声明式事务又分为两种:
                                a、基于XML的声明式事务
                                b、基于注解的声明式事务
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值