Java常用框架原理(面试)

1. struts2运行原理

    (1)客户端向Servlet容器(例如Tomcat)发送一个请求;

    (2)这个请求经过一系列的过滤器(Filter);

    (3)接着FilterDispatcher被调用,FilterDispatcher询问ActionMapper来决定这个请求是否需要调用某个Action;

    (4)如果ActionMapper决定需要调用某个Action,FilterDispatcher把请求的处理交给ActionProxy;

    (5)ActionProxy通过Configuration Manager询问框架的配置文件,找到需要调用的Action类;

    (6)ActionProxy创建一个ActionInvocation的实例;

    (7)ActionInvocation在调用Action的过程前后,涉及到相关拦截器(Intercepter)的调用;

    (8)一旦Action执行完毕,ActionInvocation负责根据struts.xml中的配置找到对应的返回结果。返回结果通常是jsp或者FreeMarker的模版。(体系结构图见下一页)

图片.png



    2. Hibernate 中get 和 load的区别

     get():会马上执行sql语句,返回的是对象;数据不存在返回null

     load():懒加载为true的时候,用的时候才会执行sql 语句(延迟加载),否则(lazy="false")立即执行sql。返回的是一个代理对象,如果类被final修饰,懒加载就会失效,数据不存在就会抛出异常ObjectNotFoundException

     createQuery()

     createCriteria()


    get和load的区别:

                 加载方式        返回值          如果数据不存在

        ---------------------------------------------------------

        get   立即加载   真实对象或null       返回null

        load  延迟加载  代理对象                 抛异常



3. Spring MVC运行原理

    (1)发起请求到前端控制器(DispatcherServlet)

    (2)前端控制器请求HandlerMapping查找 Handler

             可以根据xml配置、注解进行查找

    (3)处理器映射器HandlerMapping向前端控制器返回Handler

    (4)前端控制器调用处理器适配器去执行Handler

    (5)处理器适配器去执行Handler

    (6)Handler执行完成给适配器返回ModelAndView

    (7)处理器适配器向前端控制器返回ModelAndView

             ModelAndView是springmvc框架的一个底层对象,包括 Model和view

    (8)前端控制器请求视图解析器去进行视图解析

             根据逻辑视图名解析成真正的视图(jsp)

    (9)视图解析器向前端控制器返回View

    (10)前端控制器进行视图渲染

             视图渲染将模型数据(在ModelAndView对象中)填充到request域

    (11)前端控制器向用户响应结果

blob.png



4. Struts1.x与Struts2.x的区别

    Struts 2以WebWork为核心,采用拦截器的机制来处理用户的请求,struts1严重依赖于servletAPI,属于侵入性框架,struts2不严重依赖于servletAPI,属于非侵入型框架。

    线程模型方面:

        Struts1的Action是单实例的,一个Action的实例处理所有的请求。

        Struts2的Action是一个请求对应一个实例(每次请求时都新new出一个对象),没有线程安全方面的问题

    封装请求参数:

        Struts1中强制使用ActionForm对象封装请求的参数。

        Struts2可以选择使用POJO类来封装请求的参数,或者直接使用Action的属性。

        struts1的前端总控制器(核心总控制器)为ActionServlet,

        struts2的前端总控制器(核心总控制器)为FilterDispatcher



5. Spring MVC、struts1和struts2区别

    (1)spring mvc 单例 非线程安全

          struts1单例 非线程安全

          struts2线程安全对每个请求都产生一个实例

    (2)spring mvc的入口是servlet,而struts2是filter

          spring 的前端总控制器为 DispatcherServlet

          struts2 的前端总控制器为 FilterDispatcher

          struts1 的前端总控制器为 actionServlet

    (3)参数传递:

          struts是在接受参数的时候,可以用属性来接受参数,这就说明参数是让多个方法共享的。

          springmvc 用方法来接受参数

    (4)spring mvc是基于方法的设计,而sturts是基于类



6. Hibernate、Ibatis、Jdbc三者的区别

    Hibernate属于全自动, Ibatis属于半自动,Jdbc属于手动;

    从开发效率上讲hibernate较高,ibatis居中,jdbc较低;

    从执行效率上讲hibernate较低,ibatis居中,jdbc较高。

    因为jdbc是手工写sql语句,程序员对sql的控制能力更大,可以根据业务需要进行优化,而ibatis虽然也可以对sql进行优化,但是他里面将resultset封装为实体的过程中采用了反射机制所以一定程度上影响了性能,而hibernate因为高度封装所以开发效率相对较高,但正因为这个原因,所以程序员在对sql语句的控制和优化方面相对比较弱,而且在将resultset封装成实体的过程中也采用了反射机制,所以在性能方面较低。



7. Hibernate的运行原理   

    首先通过configuration去加载hibernate.cfg.xml这个配置文件,根据配置文件的信息去创建sessionFactory;

    sessionFactory是线程安全的,是一个session工厂,用来创建session;

    session是线程不安全的,相当于jdbc的connection;

    最后通过session去进行数据库的各种操作;

    在进行操作的时候通过transaction进行事务的控制。



8. hibernate中对象的状态

    临时状态:Transient

        与数据库没有对应,跟Session没有关联。一般是新new出的对象。

    持久化状态:Persist

         对象在Session的管理之中,最终会有对应的数据库记录。

       特点:

         1> 有OID

         2> 对对象的修改会同步到数据库。

    游离状态:Detached

         数据库中有对应记录,但对象不在Session管理之中。

         修改此状态对象时数据库不会有变化。

    删除状态:Removed

         执行了delete()后的对象。



9. spring框架的特点

    低侵入式设计

    Spring的Ioc容器降低了业务对象替换的复杂性,提高了组件之间的解耦

    Spring的Aop支持允许将一些通用的任务事务,日志等进行集中处理

    Spring的ORM和DAO提供了第三方的持久层的框架的良好整合,并简化了底层数据库的访问

    Spring的开发性,并不强制应用完全依赖于Spring,开发者可以选择框架的部分或全部



10. 应用上下文是如何实现的?

    FileSystemXmlApplicationContext 容器加载XML文件中beans的定义。XML Bean配置文件的完整路径必须传递给构造器。

    ClassPathXmlApplicationContext 容器也加载XML文件中beans的定义。注意,你需要正确的设置CLASSPATH,因为该容器会在CLASSPATH中查看bean的XML配置文件。

    WebXmlApplicationContext:该容器加载xml文件,这些文件定义了web应用中所有的beans。



11. Bean Factory 和 ApplicationContext 有什么区别?

    ApplicationContext提供了一种解决文档信息的方法,一种加载文件资源的方式(如图片),他们可以向监听他们的beans发送消息。另外,容器或者容器中beans的操作,这些必须以bean工厂的编程方式处理的操作可以在应用上下文中以声明的方式处理。应用上下文实现了MessageSource,该接口用于获取本地消息,实际的实现是可选的。



12. 总结一下什么是RESTful架构

    (1)每一个URI代表一种资源;

    (2)客户端和服务器之间,传递这种资源的某种表现层;

    (3)客户端通过四个HTTP动词,对服务器端资源进行操作,实现"表现层状态转化"。

    

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

cpongo11

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值