JavaEE框架相关

JavaEE框架相关整理面经

1、Spring框架有哪些优点?

  1. 使用Spring的IOC容器,将对象之间的依赖关系交给Spring,降低组件 之间的耦合性,让我们更专注于应用逻辑
    2.可以提供众多服务,事务管理,WS等。
    3.AOP的很好支持,方便面向切面编程。
    4.对主流的框架提供了很好的集成支持,如hibernate,Struts2,JPA等
    5.Spring DI机制降低了业务对象替换的复杂性。
    6.Spring属于低侵入,代码污染极低。
    7.Spring的高度可开放性,并不强制依赖于Spring,开发者可以自由选择Spring部分或全部

2、Spring框架有哪几部分组成?请分别简单描述。
1,Spring Core :Core模块是Spring的核心类库,Spring的所有功能都依赖于该类库,Core主要实现IOC功能,Sprign的所有功能都是借助IOC实现的。
2,AOP :AOP模块是Spring的AOP库,提供了AOP(拦截器)机制,并提供常用的拦截器,供用户自定义和配置。
3,ORM :Spring 的ORM模块提供对常用的ORM框架的管理和辅助支持,Spring支持常用的Hibernate,ibtas,jdao等框架的支持,Spring本身并不对ORM进行实现,仅对常见的ORM框架进行封装,并对其进行管理
4,DAO模块 :Spring 提供对JDBC的支持,对JDBC进行封装,允许JDBC使用Spring资源,并能统一管理JDBC事物,并不对JDBC进行实现。
5,WEB模块 :WEB模块提供对常见框架如Struts1,WEBWORK(Struts 2),JSF的支持,Spring能够管理这些框架,将Spring的资源注入给框架,也能在这些框架的前后插入拦截器。
6,Context模块 :Context模块提供框架式的Bean访问方式,其他程序可以通过Context访问Spring的Bean资源,相当于资源注入。
7,MVC模块 :WEB MVC模块为Spring提供了一套轻量级的MVC实现,在Spring的开发中,我们既可以用Struts也可以用Spring自己的MVC框架,相对于Struts,Spring自己的MVC框架更加简洁和方便

3、描述一下Spring中实现DI(dependency injection)的几种方式。
方式一:接口注入,在实际中得到了普遍应用,即使在IOC的概念尚未确立时,这样的方法也已经频繁出现在我们的代码中。
方式二:通过set方法设置进去
方式三:以构造方法参数的方式注入

4、简单描述下IOC(inversion of control)的理解。
一个类需要用到某个接口的方法,我们需要将类A和接口B的实现关联起来,最简单的方法是类A中创建一个对于接口B的实现C的实例,但这种方法显然两者的依赖(Dependency)太大了。而IoC的方法是只在类A中定义好用于关联接口B的实现的方法,将类A,接口B和接口B的实现C放入IoC的 容器(Container)中,通过一定的配置由容器(Container)来实现类A与接口B的实现C的关联

5、请介绍下Spring的事务管理。
一个数据库事务是一个被视为单一的工作单元的操作序列。这些操作应该要么完整地执行,要么完全不执行。
事务的4个特性:
原子性(Atomicity):事务应该当作一个单独单元的操作,这意味着整个序列操作要么是成功,要么是失败的。
一致性(Consistency):这表示数据库的引用完整性的一致性,表中唯一的主键等。
隔离性(Isolation):可能同时处理很多有相同的数据集的事务,每个事务应该与其他事务隔离,以防止数据损坏。
持久性(Durablity):一个事务一旦完成全部操作后,这个事务的结果必须是永久性的,不能因系统故障而从数据库中删除
事务管理分成两种:
编程式的事务管理,该方法不推荐使用。
声明式的事务管理,对代码的侵入性最小,让事务管理代码完全从业务代码中移除。

6、Spring中的applicationContext.xml能不能改为其他名字。
可以。因为这个是默认的,改为其他的话,就要在web.xml中说明下。

7、Spring中BeanFactory和ApplicationContext的作用和区别
spring的两种容器:BeanFactoy和、ApplicationContext应用上下文
BeanFactory:BeanhFactory使用延迟加载所有的Bean,为了从BeanhFactory得到一个Bean,只要调用getBean()方法,就能获得Bean。
ApplicationContext:a、提供文本信息解析,支持I18N
b、提供载入文件资源的通用方法
c、向注册为监听器的Bean发送事件
d、ApplicationContext接口扩展BeanFactory接口
e、ApplicationContext提供附加功能

8、Spring中使用jdbc与传统方法使用jdbc有什么区别?
Spring的jdbc是在原生态JDBC上面的一层简单的封装,提供了一些有用的接口,你不会管理连接的创建、关闭。你只需要实现Spring提供的回调类。
9、如何在Spring中实现国际化?
在applicationContext.xml加载一个bean
  
  
  message
  
  
   在src目录下建多个properties文件
   对于非英文的要用native2ascii -encoding gb2312 源 目转化文件相关内容
   其命名格式是message_语言_国家。
   页面中的中显示提示信息,键名取键值。
   当给定国家,系统会自动加载对应的国家的properties信息。
   通过applictionContext.getMessage(“键名”,”参数”,”区域”)取出相关的信息。

10、Spring中AOP的关键名词有哪些?各有什么作用?
方面/切面(Aspect):其实就是共有功能的实现。如日志切面、权限切面、事务切面等。在实际应用中通常是一个存放共有功能实现的普通Java类,之所以能被AOP容器识别成切面,是在配置中指定的。可以认为是通知、引入和切入点的组合;在Spring中可以使用Schema和@AspectJ方式进行组织实现;
通知(Advice):是切面的具体实现,在连接点上执行的行为,通知提供了在AOP中需要在切入点所选择的连接点处进行扩展现有行为的手段。以目标方法为参照点,根据放置的地方不同,可分为前置通知(Before)、后置通知(AfterReturning)、异常通知(AfterThrowing)、最终通知(After)与环绕通知(Around)5种。在实际应用中通常是切面类中的一个方法,具体属于哪类通知,同样是在配置中指定的。做什么?
连接点(Joinpoint):表示需要在程序中插入横切关注点的扩展点,连接点可能是类初始化、方法执行、方法调用、字段调用或处理异常等等. 在哪里(很多可以连接的部分)做什么?
切入点(Pointcut):选择一组相关连接点的模式,即可以认为连接点的集合,Spring支持perl5正则表达式和AspectJ切入点模式,Spring默认使用AspectJ语法,在AOP中表示为“在哪里(确定下来)做的集合”.
目标对象(Target Object):需要被织入横切关注点的对象,即该对象是切入点选择的对象,需要被通知的对象,从而也可称为“被通知对象”;由于Spring AOP 通过代理模式实现,从而这个对象永远是被代理对象.对谁做这件事?

代理对象(AOP Proxy Object):AOP框架使用代理模式创建的对象,从而实现在连接点处插入通知(即应用切面),就是通过代理来对目标对象应用切面。在Spring中,AOP代理可以用JDK动态代理或CGLIB代理实现,而通过拦截器模型应用切面。
织入(Weaving):将切面应用到目标对象从而创建一个新的代理对象的过程。这个过程可以发生在编译期、类装载期及运行期,当然不同的发生点有着不同的前提条件。譬如发生在编译期的话,就要求有一个支持这种AOP实现的特殊编译器;发生在类装载期,就要求有一个支持AOP实现的特殊类装载器;只有发生在运行期,则可直接通过Java语言的反射机制与动态代理机制来动态实现。

11、Spring的Bean有多种作用域,分别进行描述。

  1. singleton:
    当Bean的作用域为singleton的时候,Spring容器中只会存在一个共享的Bean实例,所有对Bean的请求只要id与bean的定义相匹配,则只会返回bean的同一实例。单一实例会被存储在单例缓存中,为Spring的缺省作用域。
  2. prototype:
    每次对该Bean请求的时候,Spring IoC都会创建一个新的作用域。
    对于有状态的Bean应该使用prototype,对于无状态的Bean则使用singleton
  3. request:
    Request作用域针对的是每次的Http请求,Spring容器会根据相关的Bean的
    定义来创建一个全新的Bean实例。而且该Bean只在当前request内是有效的。
  4. session:
    针对http session起作用,Spring容器会根据该Bean的定义来创建一个全新的Bean的实例。而且该Bean只在当前http session内是有效的。
  5. global session:
    类似标准的http session作用域,不过仅仅在基于portlet的web应用当中才有意义。Portlet规范定义了全局的Session的概念。他被所有构成某个portlet外部应用中的各种不同的portlet所共享。在global session作用域中所定义的bean被限定于全局的portletsession的生命周期范围之内。

12、请介绍 一下Spring的bean的生命周期。
Bean的生命周期:
(1)实例化(必须的)构造函数构造对象
(2)装配(可选的)为属性赋值
(3)回调(可选的)(容器-控制类和组件-回调类)
(4)初始化(init-method=" “)
 (5)就绪
(6)销毁(destroy-method=” ")

13、Spring中如何获取bean?
1.读取xml文件的方式,这种在初学入门的时候比较适用 。
    ApplicationContext applicationContext = new ClassPathXmlApplicationContext(“classpath:tt.xml”);
    ApplicationContext applicationContext = new FileSystemXmlApplicationContext(“classpath:tt.xml”);
 2.继承spring的Aware类,覆盖方法实现获取上下文,从上下文中获取。
    2.1.继承自抽象类ApplicationObjectSupport
    说明:抽象类ApplicationObjectSupport提供getApplicationContext()方法,可以方便的获取到ApplicationContext。
    Spring初始化时,会通过该抽象类的setApplicationContext(ApplicationContext context)方法将ApplicationContext 对象注入。
    2.2:继承自抽象类WebApplicationObjectSupport
    说明:类似上面方法,调用getWebApplicationContext()获取WebApplicationContext
    2.3:实现接口ApplicationContextAware
     说明:实现该接口的setApplicationContext(ApplicationContext context)方法,并保存ApplicationContext 对象。
    Spring初始化时,会通过该方法将ApplicationContext对象注入。
private static ApplicationContext applicationContext=null;
@Override
public void setApplicationContext(ApplicationContext applicationContext)
throws BeansException {
this.applicationContext = applicationContext;}
  3.借助于spring提供的工具类,
    WebApplicationContextUtils.getWebApplicationContext(ServletContext) 需要传入Servletcontext ,
    通常从request中获取req.getSession().getServletContext()。适合于controller或者action中直接获取,但通常会直接@autoWire注入。
  4.适用工具类ContextLoader.getCurrentWebApplicationContext()。这种最简单,用起来最方便,不需要继承,不需要注入,直接使用静态代码。注意一点,在服务器启动时,Spring容器初始化时,不能使用,在应用启动后方可使用。

14、MyBatis框架有什么作用?
mybatis是对jdbc的封装,它让数据库底层操作变的透明。mybatis的操作都是围绕一个sqlSessionFactory实例展开的。mybatis通过配置文件关联到各实体类的Mapper文件,Mapper文件中配置了每个类对数据库所需进行的sql语句映射。在每次与数据库交互时,通过sqlSessionFactory拿到一个sqlSession,再执行sql命令

15、MyBatis在核心处理类叫什么?有什么作用?
 SqlSessionFactoryBuilder:
      SqlSessionFactoryBuilder负责构建SqlSessionFactory。它的最大特点是:用过即丢。一旦创建了SqlSessionFactory对象之后,这个类就不需要存在了,因此SqlSessionFactoryBuilder的最佳范围就是存在于方法体内,也就是局部变量而已。
  SqlSessionFactory:
      SqlSessionFactory简单的理解就是创建SqlSession实例的工厂。所有的MyBatis应用都是以SqlSessionFactory实例为中心,SqlSessionFactory的实例可以通过SqlSessionFactoryBuilder对象来获得。有了SqlSessionFactory实例后,就可以通过SqlSessionFactory实例的openSession()方法来获取SqlSession实例。
      SqlSessionFactory对象一旦创建,就会在整个应用运行过程中始终存在。没有理由去销毁或再创建它,并且在应用运行中也不建议多次创建SqlSessionFactory。因此SqlSessionFactory的最佳作用域是Application,即随着应用的生命周期一同存在。
  SqlSession:
      SqlSession是用于执行持久化操作的对象,类似于JDBC中的Connection。它提供了面向数据库执行SQL命令所需的酥油方法,可以通过SqlSession实例直接运行已映射的SQL语句。
      SqlSession对应着一次数据库会话,所以每次访问数据库时都需要创建它。创建SqlSession的地方只有一个,就是SqlSessionFactory实例的openSession()方法。(但一个SqlSession会话也可以执行多次SQL)
      SqlSession的两种使用方式:直接通过SqlSession实例来执行已映射的SQL语句、基于mapper接口方式操作数据。

16、请描述MyBatis框架中的缓存机制。
mybatis的查询缓存分为一级缓存和二级缓存,一级缓存是SqlSession级别的缓存,二级缓存时mapper级别的缓存,二级缓存是多个SqlSession共享的。mybatis通过缓存机制减轻数据压力,提高数据库性能。
一级缓存:
mybatis的一级缓存是SQLSession级别的缓存,在操作数据库时需要构造SqlSession对象,在对象中有一个HashMap用于存储缓存数据,不同的SqlSession之间缓存数据区域(HashMap)是互相不影响的。
一级缓存的作用域是SqlSession范围的,当在同一个SqlSession中执行两次相同的sql语句时,第一次执行完毕会将数据库中查询的数据写到缓存(内存)中,第二次查询时会从缓存中获取数据,不再去底层进行数据库查询,从而提高了查询效率。需要注意的是:如果SqlSession执行了DML操作(insert、update、delete),并执行commit()操作,mybatis则会清空SqlSession中的一级缓存,这样做的目的是为了保证缓存数据中存储的是最新的信息,避免出现脏读现象。
当一个SqlSession结束后该SqlSession中的一级缓存也就不存在了,Mybatis默认开启一级缓存,不需要进行任何配置。
二级缓存:
二级缓存是mapper级别的缓存,使用二级缓存时,多个SqlSession使用同一个Mapper的sql语句去操作数据库,得到的数据会存在二级缓存区域,它同样是使用HashMapper进行数据存储,相比一级缓存SqlSession,二级缓存的范围更大,多个SqlSession可以共用二级缓存,二级缓存是跨SqlSession的。
二级缓存是多个SqlSession共享的,其作用域是mapper的同一个namespace,不同的SqlSession两次执行相同的namespace下的sql语句,且向sql中传递的参数也相同,即最终执行相同的sql语句,则第一次执行完毕会将数据库中查询的数据写到缓存(内存),第二次查询时会从缓存中获取数据,不再去底层数据库查询,从而提高查询效率。
Mybatis默认没有开启二级缓存,需要在setting全局参数中配置开启二级缓存

17、请描述Hibernate、JDBC、MyBatis三者的区别。
JDBC执行的操作
1.注册驱动(forClass)
2.编写sql
3.预编译(通过Connection得到Statement)
4.设置参数(往Statement中添加参数)
5.执行sql(通过Statement执行sql)
6.封装结果(通过ResultSet得到结果)
JDBC的优点:
1.很清楚明白的看出数据库所执行的操作
JDBC的缺点:
1.编写工作量巨大
2.灵活性差
3.需要及时处理异常并正确关闭数据源
Hibernate
执行过程
1.读取配置文件完成ORM的映射关系
2.获取session进行增删改查的操作
Hibernate的优点
1.维护方便,数据库连接和POJO类的映射都写在xml文档中
2.操作方便,只需获取session就可以对数据库进行操作,关闭时也只需关闭session
Hibernate的缺点
1.全映射会造成性能比较差
2.sql语句由于是hibernate生成而造成了sql的灵活性较差,不方便定制高效sql
3.自带的HQL语句性能较低
Mybatis
Mybatis优点
1.半自动的执行方式,除sql外操作由框架完成,方便快捷
2.手工定制sql,实现sql与java代码分离,灵活性高,方便维护
3.只需要sql进行操作,不需要学习额外的内容
4.轻量级的框架,执行速度快

18、为什么要用ORM框架,与JDBC有何不同?
用JDBC的API编程访问数据库,代码量较大,特别是访问字段较多的表的时候,代码显得繁琐、累赘,容易出错。程序员需要耗费大量的时间、精力去编写具体的数据库访问的SQL语句,还要十分小心其中大量重复的源代码是否有疏漏,并不能集中精力于业务逻辑开发上面。
ORM则建立了Java对象与数据库对象之间的影射关系,程序员不需要编写复杂的SQL语句,直接操作Java对象即可,从而大大降低了代码量,也使程序员更加专注于业务逻辑的实现。ORM建立Java对象与数据库对象关系影射的同时,也自动根据数据库对象之间的关系创建Java对象的关系,并且提供了维持这些关系完整、有效的机制。

19、什么是Spring MVC框架的控制器?
控制器接受用户的输入并调用模型和视图去完成用户的需求,所以当单击Web页面中的超链接和发送HTML表单时,控制器本身不输出任何东西和做任何处理。它只是接收请求并决定调用哪个模型构件去处理请求,然后再确定用哪个视图来显示返回的数据。

20、请描述SpringMVC框架的执行流程。
第一步:发起请求到前端控制器(DispatcherServlet)
第二步:前端控制器请求HandlerMapping查找 Handler可以根据xml配置、注解进行查找
第三步:处理器映射器HandlerMapping向前端控制器返回Handler
第四步:前端控制器调用处理器适配器去执行Handler
第五步:处理器适配器去执行Handler
第六步:Handler执行完成给适配器返回ModelAndView
第七步:处理器适配器向前端控制器返回ModelAndView
ModelAndView是springmvc框架的一个底层对象,包括Model和view
第八步:前端控制器请求视图解析器去进行视图解析。根据逻辑视图名解析成真正的视图(jsp)
第九步:视图解析器向前端控制器返回View
第十步:前端控制器进行视图渲染:视图渲染将模型数据(在ModelAndView对象中)填充到request域
第十一步:前端控制器向用户响应结果

21、请描述JDO的含义及作用。
含义:Java数据对象(Java Data Objects,JDO)是一个应用程序接口(API),它是Java程序员能够间接地访问数据库,也就是说,不需使用直接的结构化查询语言(SQL)语句。JDO是作为Java数据库连接(JDBC)的一个补充来介绍的,而JDBC是一个支持使用SOL语句对流行的数据库程序进行访问的接口。有了 JDO,程序员就可以使用类来定义数据对象,然后支撑程序就会根据类的定义来管理对给定数据库的实际的数据访问了。  
作用:JDO集成了很多持久性机制的特性,这使得在JDO中创建一个持久化(persistence)类就像创建一个序列化类一样简单。JDO支持批量数据的存储,数据一致性,并发处理和JDBC的查询功能。就像对象-关系映射软件和对象数据库一样,它允许使用面向对象的高级特性比如“继承”。它避免了像EJB中实体Bean一样必须依赖于来自厂商定义的严格规范。同EJB一样,JDO也不规定任何特定的后端数据库。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java EE常用框架 WebService 介绍 基于Web的服务。它使用Web(HTTP)方式,接收和响应外部系统的某种请求。从而实现远程调用 术语 XML. Extensible Markup Language -扩展性标记语言 WSDL – WebService Description Language – Web服务描述语言。 SOAP-Simple Object Access Protocol(简单对象访问协议) SOA(Service-Oriented Architecture) :面向服务的架构 它是一种思想,IBM大力倡导是即插即用的,IBM大力提倡,希望以组装电脑的方式来开发应用 它是目录服务,通过该服务可以注册和发布webservcie,以便第三方的调用者统一调用 使用: 二、我们可以使用Java自带的WsImport来实现本地代理。这种方法会将WebService翻译成Java类,我们使用类一样去访问WebService就行了。非常好用。 三、除了调用别人发布的webService,也可以自己发布WebService服务 四、CXF框架可以与spring无缝连接,就不用我们自己Endpoint了。它还能记录日志之类的 五、我们还可以使用Idea下的webservice,能够使用图形画面的方式获取本地代理和生成WSDL文件。 Activiti 介绍 Activiti5是一个业务流程管理(BPM)框架 如果我们的业务是比较复杂的话,我们才会用到工作流! 使用Activiti的步骤 定义工作流 画一个BPMN图就可以了 部署工作流 执行工作流-->按照我们定义的工作流来执行 工作流在执行的过程中肯定会涉及到很多数据,Activiti是默认提供数据库表给我们使用的 Activiti工作流框架快速入门: 定义工作流,使用插件来把我们的流程图画出来。这个流程图就是我们定义的工作流。 工作流引擎是工作流的核心,能够让我们定义出来的工作流部署起来。 由于我们使用工作流的时候是有很多数据产生的,因此Activiti是将数据保存到数据库表中的。这些数据库表由Actitviti创建,由Activiti维护。 部署完的工作流是需要手动去执行该工作流的。 根据由谁处理当前任务,我们就可以查询出具体的任务信息。 根据任务的id,我们就可以执行任务了。 细节 流程定义:涉及到了四张数据库表 我们可以通过API把我们的流程定义图读取出来 可以根据查询最新版本的流程定义 删除流程定义 部署流程定义的时候也可以是ZIP文件 流程运行:涉及到两个对象,四张数据库表: 流程实例 获取流程实例和任务的历史信息 判断流程实例是否为空来判断流程是否结束了 查看正在运行服务的详细信息 通过流程实例来开启流程 流程变量:它涉及到了两张表。 流 程变量实际上就是我们的条件。 作用 我们可以在流程开始的时候设置流程变量,在任务完成的时候设置流程变量。 运行时服务和流程任务都可以设置流程变量。 连线 通过连线我们可以在其中设置条件,根据不同的条件流程走不同的分支 排他网关 SpringData JPA 简介 API Repository接口 PagingAndSortingRepository JpaRepository JpaSpecificationExecutor 过滤条件查询接口 注解 nameQuery注解 SQL命名,调用的时候根据名称调用 查询注解 1,targetEntity 属性表示默认关联的实体类型,默认为当前标注的实体类。 2,cascade属性表示与此实体一对一关联的实体的级联样式类型。 3,fetch属性是该实体的加载方式,默认为即时加载EAGER 4,optional属性表示关联的该实体是否能够存在null值,默认为ture,如果设置为false,则该实体不能为null, 5, mapperBy属性:指关系被维护端 1,@JoinColumn注释是保存表与表之间关系的字段 2,如果不设置name,默认name = 关联表的名称+”-“+关联表

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值