Java面试之对五大框架的理解

五大框架(springMVC,struts2,spring,mybatis,hibernate)

说说你对springMVC框架的理解?

简要口述(如果感觉说的少可以在完整答案里面挑几条说)

Springmvc就是spring框架的一个模块,它是一个基于mvc设计思想的前端web层框架,主要作用就是对前端请求进行处理。

完整答案

Springmvc就是spring框架的一个模块,所以它可以和spring框架可以进行无缝整合,它是一个基于mvc设计思想的前端web框架,主要作用就是对前端请求进行处理。他的前端控制器是一个servlet.它的请求拦截是基于方法级别的.他的执行流程是

Spring的MVC框架主要由DispatcherServlet、处理器映射、处理器(控制器)、视图解析器、视图组成

1. 客户端请求提交到DispatcherServlet

2. 由DispatcherServlet控制器查询一个或多个HandlerMapping,找到处理请求的Controller

3. DispatcherServlet将请求提交到Controller

4. Controller调用业务逻辑处理后,返回ModelAndView

5. DispatcherServlet查询一个或多个ViewResoler视图解析器,找到ModelAndView指定的视图

6. 视图负责将结果显示到客户端

备注: 

mvc指的就是Model(业务模型)、View(视图)、Controller(控制器)

 

说说你对struts2框架的理解?

简要口述(如果感觉说的少可以在完整答案里面挑几条说)

Struts2,它是一个基于mvc设计思想的前端web层框架,主要作用就是对前端请求进行处理。他的核心是拦截器.但是他的前端控制器是一个过滤器

完整答案

Struts2,它是一个基于mvc设计思想的前端web层框架,主要作用就是对前端请求进行处理。他的核心是拦截器.但是他的前端控制器是一个过滤器. 它的请求拦截是基于类级别,OGNL也提供了在Struts2里访问各种作用域中的数据的简单方式.大大简化了获取数据的代码.struts2的执行流程是:

A. 页面请求传递到后台, 首先进入Struts2 的核心过滤器 StrutsPrepareAndExecutedFilter .

B. 请求进入到struts2 之后, 会根据请求的路径到 struts.xml 文件中根据 package的 namespace 属性 与 action 的 name 属性配置到请求处理的Action 类.

C. 匹配到对应 Action 类的对应方法 , 执行该方法进行业务处理, 处理完毕之后会返回一个结果视图(字符串).

D. 然后根据返回的结果视图 , 到struts.xml 中对应的Action的result结果集配置中 匹配 对应的视图页面(或action).

E. 然后根据 result 的type属性, 转发(或重定向) 对应的页面(或action).

 

 

SpringMVC和Struts2两个框架对比一下.

简要口述(如果感觉说的少可以在完整答案里面挑几条说)

注意:两个技术已经很多年了,技术非常成熟.用户群体很大.不能片面的用好与不好来说.只能说适合不适合.因为每个东西都有擅长和不擅长

 

注意:说出几点即可

1、springmvc入口是一个servlet前端控制器,struts2入口是一个filter过虑器。

2、struts2通过在action类中定义成员变量接收请求参数,struts2只能使用多例模式管理action。

springmvc通过在controller方法中定义形参接收请求参数,springmvc可以使用单例模式管理controller。

3、springmvc是基于方法开发的,注解开发中使用requestMapping将url和方法进行映射,如果根据url找到controller类的方法生成一个Handler处理器对象(只包括一个method)。

struts2是基于类开发,每个请求过来创建一个action实例,实例对象中有若干的方法。

开发中建议使用springmvc,springmvc方法更类似service业务方法。

4、Struts采用值栈存储请求和响应的数据,通过OGNL存取数据, springmvc通过参数绑定器是将request请求内容解析,并给方法形参赋值。

 

说说你对spring框架的理解?他的作用是什么?

 

简要口述(如果感觉说的少可以在完整答案里面挑几条说)

Spring的核心有很多.其中比较主要也是我们常用的就是AOP,IOC,DI.也就是面向切面编程,控制反转,依赖注入.Spring一般是作为容器管理其他框架.例如常见的web层框架(struts2,springMVC)和持久成框架(mybatis,hibernate).一般都由spring来管理

完整答案

    (1)aop:面向切面编程,将跟业务逻辑没有关系的代码提取出来,在调用目标方法之前或者之后执行。常用的场景,事务,日志,权限控制,异常处理等方面。

    (2)ioc:创建对象的权利,交给spring容器创建。

    (3)di:如果一个对象A需要使用另一个对象B才能实现某个功能,这时就可以说A对象依赖于B对象,而Spring容器在创建A对象时,会自动将A对象需要的B对象注入到A对象中,此过程就是依赖注入。

 

核心容器:核心容器提供 Spring 框架的基本功能。核心容器的主要组件是 BeanFactory,它是工厂模式的实现。BeanFactory 使用控制反转 (IOC) 模式将应用程序的配置和依赖性规范与实际的应用程序代码分开。

    Spring 上下文:Spring 上下文是一个配置文件,向 Spring 框架提供上下文信息。Spring 上下文包括企业服务,例如 JNDI、EJB、电子邮件、国际化、校验和调度功能。

    Spring AOP:通过配置管理特性,Spring AOP 模块直接将面向方面的编程功能集成到了 Spring 框架中。所以,可以很容易地使 Spring 框架管理的任何对象支持 AOP。Spring AOP 模块为基于 Spring 的应用程序中的对象提供了事务管理服务。通过使用 Spring AOP,不用依赖 EJB 组件,就可以将声明性事务管理集成到应用程序中。

    Spring DAO:JDBC DAO 抽象层提供了有意义的异常层次结构,可用该结构来管理异常处理和不同数据库供应商抛出的错误消息。异常层次结构简化了错误处理,并且极大地降低了需要编写的异常代码数量(例如打开和关闭连接)。Spring DAO 的面向 JDBC 的异常遵从通用的 DAO 异常层次结构。

    Spring ORM:Spring 框架插入了若干个 ORM 框架,从而提供了 ORM 的对象关系工具,其中包括 JDO、Hibernate 和 iBatis SQL Map。所有这些都遵从 Spring 的通用事务和 DAO 异常层次结构。

    Spring Web 模块:Web 上下文模块建立在应用程序上下文模块之上,为基于 Web 的应用程序提供了上下文。所以,Spring 框架支持与 Jakarta Struts 的集成。Web 模块还简化了处理多部分请求以及将请求参数绑定到域对象的工作。

    Spring MVC 框架:MVC 框架是一个全功能的构建 Web 应用程序的 MVC 实现。通过策略接口,MVC 框架变成为高度可配置的,MVC 容纳了大量视图技术,其中包括 JSP、Velocity、Tiles、iText 和 POI。

 

 

说说你对mybatis框架的理解

简要口述(如果感觉说的少可以在完整答案里面挑几条说)

Mybatis是一个优秀的ORM框架.应用在持久层. 它对jdbc的 操作数据库过程 进行封装,使开发者只需要关注 SQL 本身,而不需要花费精力去处理例如注册驱动、创建connection、等jdbc繁杂的过程代码.一般使用mapper代理的方式开发.直接在xml里面写sql(如果对hibernate了解.可以话题转向mybatis和hibernate的对比)

完整答案

Mybatis的工作流程

 

1、  mybatis配置

SqlMapConfig.xml,此文件作为mybatis的全局配置文件,配置了mybatis的运行环境等信息。

mapper.xml文件即sql映射文件,文件中配置了操作数据库的sql语句。此文件需要在SqlMapConfig.xml中加载。

2、  通过mybatis环境等配置信息构造SqlSessionFactory即会话工厂

3、  由会话工厂创建sqlSession即会话,操作数据库需要通过sqlSession(DefaultSqlSession)进行。

4、  mybatis底层自定义了Executor(BaseExecutor)执行器接口操作数据库,Executor接口有两个实现,一个是基本执行器、一个是缓存执行器。

5、  Mapped Statement也是mybatis一个底层封装对象,它包装了mybatis配置信息及sql映射信息等。mapper.xml文件中一个sql对应一个Mapped Statement对象,sql的id即是Mapped statement的id。

6、  Mapped Statement对sql执行输入参数进行定义,包括HashMap、基本类型、pojo,Executor通过 Mapped Statement在执行sql前将输入的java对象映射至sql中,输入参数映射就是jdbc编程中对preparedStatement设置参数。

7、  Mapped Statement对sql执行输出结果进行定义,包括HashMap、基本类型、pojo,Executor通过 Mapped Statement在执行sql后将输出结果映射至java对象中,输出结果映射过程相当于jdbc编程中对结果的解析处理过程。

 

 

说说你对hibernate框架的理解

简要口述(如果感觉说的少可以在完整答案里面挑几条说)

Hibernate是轻量级的持久层解决方案,是一个关系数据库ORM框架, 对JDBC访问数据库的代码做了封装.我们可以很容易的对数据库进行增删改查操作.

完整答案

hibernate查询方式?

    (1)导航对象图检索方式。根据已经加载的对象,导航到其他对象。

    (2)OID检索方式。使用get或者load加载对应的对象

    (3)HQL检索方式。

    (4)QBC检索方式。

    (5)SQL检索方式。

sql与hql的区别?

    (1)sql是直接操作数据库的

    (2)hql是通过操作对象操作数据库,对大小写敏感。

一级缓存和二级缓存的区别?

    (1)一级缓存是session级别的缓存,二级缓存是sessionFactory级别的缓存。

hibernate中get和load的区别?

    get和load都是根据id获取数据。

    (1)get先查询session中对应id是否有数据,如果有则直接返回,有查询数据库,如数据库中没有则返回为null;

    (2)load方式查询session中对应id是否有数据,如果没有生成代理对象,查询数据库。如没有对应的id则抛出异常

 

Hibernate和mybatis对比

简要口述(如果感觉说的少可以在完整答案里面挑几条说)

注意:两个技术已经很多年了,技术非常成熟.用户群体很大.不能片面的用好与不好来说.只能说适合不适合.因为每个东西都有擅长和不擅长

1. 在移植性方面hibernate配置一下方言即可.而一般情况下mybatis则需要修改sql语句

2. hibernate是一个完全的ORM框架.完全的面向对象.更符合我们开发者的思维模式.mybatis需要我们手动写sql语句

3. hibernate的优化成本比较高.因为hibernate的sql语句是自动生成的,所以在优化方面一般的新手无从下手.而mybatis只要修改sql就可以了.更加容易上手

(如果对某一个框架非常了解.这里话锋可以转向具体的详细介绍某一个框架)

你可能感兴趣的:(java面试)