【java面试】框架部分理解
- 简单谈一下什么是 什么是MVC模式?(只针对MVC模式本身回答)
MVC (Model View Controller) 是一个设计模式,使用MVC应用程序被分成三个核心部件:模型、视图、控制器。它们各自处理自己的任务。M是指数据模型,V是指用户界面,C则是控制器。使用MVC的目的是将M和V的实现代码分离,从而使同一个程序可以应用于不同的表现形式。
- MVC模式有着明显的优点,能简单说说吗?
1).各施其职,互不干涉
在MVC模式中,三个层各施其职,所以如果一旦哪一层的需求发生了变化,就只需要更改相应的层中的代码而不会影响到其它层中的代码。
2).有利于开发中的分工
在MVC模式中,由于按层把系统开,那么就能更好的实现开发中的分工。网页设计人员可以进行开发视图层中的JSP,对业务熟悉的开发人员可开发业务层,而其它开发人员可开发控制层。
3).有利于组件的重用
分层后更有利于组件的重用。如控制层可独立成一个能用的组件,视图层也可做成通用的操作界面。
- Struts就是一个基于MVC模式的框架。
请描述一下Struts2的值栈结构?
Struts2的值栈结构,有两种情况,一种是Map结构,一种是List结构,
也就是说ValueStack分为Map和List,而这个Map也就是ActionContext,而List就是CompRoot,是两种不同的数据结构存储方式
Struts2里面有什么隐式对象?
(这些隐式对象都是Map类型)
parameters 用于访问请求参数
request 用于访问HttpServletRequest的属性
session 用于访问HttpSession的属性
application 用于访问ServletContext的属性
attr 用于访问各作用域内的属性,将依次搜索 request > session > application
Struts2的Action中获取request对象的几种方式?
1.通过ActionContext.getSession获取
2.通过ServletActionContext.getRequest()获取
3.通过SessionAware接口注入
4.通过ServletRequestAware接口注入
请说说你对Struts2的拦截器的理解。
Struts2拦截器是在访问某个Action或Action的某个方法,字段之前或之后实施拦截,并且Struts2拦截器是可插拔的,拦截器是AOP的一种实现.
拦截器栈(Interceptor Stack)类似于过滤器链。
拦截器和过滤器的区别
1)、拦截器是基于java反射机制的,而过滤器是基于函数回调的。
2)、拦截器不依赖于servlet容器,过滤器依赖于servlet容器。
3)、拦截器只能对Action请求起作用,而过滤器则可以对几乎所有请求起作用。
4)、拦截器可以访问Action上下文、值栈里的对象,而过滤器不能。
5)、在Action的生命周期中,拦截器可以多次调用,而过滤器只能在容器初始化时被调用一次。
- 什么是ORM思想?常用的基于ORM的框架有哪些?*
ORM的全称是Object-Relational Mapping,即对象关系映射。因此,我们需要在面向对象与面向关系之间找到一个平衡点,ORM于是应运而生。
目前流行的ORM框架有如下这些产品:
(1)Enitiy EJB:Enitiy EJBEJB作为一种重量级、高花费的ORM技术.
(2)Hibernate:目前最流行的开源ORM框架,已经被选作JBoss的持久层解决方案。
(3)MyBatis: Apache软件基金组织的子项目。
(4)TopLink:Oracle公司的产品(收费)
(5)OBJ:Apache软件基金组织的子项目。
- **请说说你对Hibernat的理解?JDBC和Hibernate各有什么优势和劣势? **
Hibernate是一个轻量级的持久层开源框架,它是连接Java应用程序和关系数据库的中间件,负责Java对象和关系数据之间的映射.Hibernate内部对JDBC API进行了封装,负责Java对象的持久化.因为它封装了所有的数据访问细节,使得业务逻辑层可以专注于实现业务逻辑.
它是一种优秀的ORM映射工具,提供了完善的对象-关系映射服务,开发过程不依赖容器,灵活性非常大,可以无缝集成到任何一个java系统中.
**JDBC和Hibernate都是用于数据持久化操作的。 **
JDBC:
1).实现业务逻辑的代码和访问数据库的代码混杂在一起,使程序结构不清晰,可读性差.
2).Java是面向对象的,sql是面向关系的.两者混在一起,程序员不能完全的运用面向对象的思维来编写程序.
3).业务逻辑和关系数据模型绑定,如果关系数据模型发生变化(如更改表结构),就必须手动修改程序里所有相关的sql语句,增加了维护软件的难度.如果sql语句有语法错误,编译是不能检查这种错误,只有运行时才能发现错误,增加了程序的调试难度.
4).数据库移植困难。
Hibernate:
Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库。
- 如何优化Hibernate?
1). 使用双向一对多关联,不使用单向一对多
2).灵活使用单向一对多关联
3).不用一对一,用多对一取代
4).配置对象缓存,不使用集合缓存
5).一对多集合使用Bag,多对多集合使用Set
6).继承类使用显式多态
7).表字段要少,表关联不要怕多,有二级缓存撑腰
- Spring框架有哪些模块?
Spring框架由七个模块组成组成,这7个模块(或组件)均可以单独存在,也可以与其它一个或多个模块联合使用,如下所示:
(1)Spring 核心容器——IoC容器 (2)Spring AOP
(3)Spring ORM (4)Spring DAO (5)Spring WEB
(6)Spring上下文(Context) (7)Spring MVC
- 为什么要使用Spring框架,概括一下它有什么优点?
(1)轻量级的框架(2)非侵入性的
(3)可以整合其它的框架,比如Struts,Hibernate等
(4)可以提供事务管理
- 解释一下Dependency Injection(依赖注入)和IoC(Inversion of Control,控制反转)
1.依赖注入DI是一种设计模式,通常也称作控制反转,尽管在技术上来讲,依赖注入是一个IoC的特殊实现,依赖注入是指一个对象应用另外一个对象来提供一种特殊的能力。
2.控制反转和依赖注入的基本思想就是把类的依赖从类内部转化到外部以减少依赖。
- **应用控制反转,对象在被创建的时候,由一个调控系统内所有对象的外界实体,将其所依赖的对象的引用,传递给它。
也可以说,依赖被注入到对象中。所以,控制反转是,关于一个对象如何获取它依赖的对象的引用,这个责任的反转。
- 描述一下Spring中实现DI常用的几种方式。
spring的IOC有三种注入方式:
第一是根据属性注入也叫set方法注入;
第二种是根据构造方法进行注入;
第三种是根据接口注入
-
以最简洁的语言描述一下什么是AOP,AOP的最根本作用是什么?
面向切面编程(AOP)提供另外一种角度来思考程序结构,通过这种方式弥补了面向对象编程(OOP)的不足。最重要的服务是声明性事务管理,这个服务建立在Spring的抽象事物管理之上。 允许用户实现自定义切面,用AOP来完善OOP的使用,可以把Spring AOP看作是对Spring的一种增强.