问题及答案来源自《Java程序员面试笔试宝典》第五章 Java Web 5.2 J2EE与EJB

1、什么是J2EE?

J2EE是Java平台企业版的简称,是用来开发和部署企业级应用的一个架构,提供了统一的、开放标准的多层平台

J2EE核心是一组技术规范与指南,其中所包含的各类组件、服务架构及技术层次,均有共同的标准及规格,让各种

依循J2EE架构的不同平台之间,存在良好的兼容性,解决过去企业后端使用的信息产品彼此之间无法兼容,企业内部

或外部难以互通的窘境。

J2EE组件和“标准的” Java类的不同点在于:它被装配在一个J2EE应用中,具有固定的格式并遵守J2EE规范,由J2EE服务器对其进行管理。

J2EE组件:

  • 客户端应用程序和applet是运行在客户端的组件
  • Java Servlet和Java Server Pages (JSP) 是运行在服务器端的Web组件
  • Enterprise Java Bean (EJB )组件是运行在服务器端的业务组件

3、EJB有哪些不同的类型?

EJB:

EJB是enterprise JavaBean的简称,相当于分布式组件对象模型,它是一种服务器端组件体系结构,用于开发和部署

多层的、分布式的以及面向对象的应用体系的跨平台体系结构。EJB简化了Java开发企业级的分布式组件应用程序的

过程, 它定义了一组可重用的组件:Enterprise Beans

EJB分为如下三种类型:

(1)Session Bean

Session Bean用来实现服务器端的业务逻辑,同时协调Bean之间的交互,另外Session Bean仅存在于客户应用和服务器交互的

时间段内,Session Bean中的数据不会保存在数据库中

Session Bean可以分为两种状态:

  • Stateless Session Bean(无状态的Session Bean)
  • Stateful Session Bean(有状态的Session Bean)

(2)Entity Bean

Entity Bean主要是资料组件,代表数据库里的记录,因此它与数据库中的数据有着相同的生存周期,也就是说只要数据库中的

数据存在,Entity Bean就一直存在。另外Entity Bean还可以被多个客户应用共享

(3)Message Driver Bean

Message Driver Bean用来处理异步消息,一般不是由用户调用,它的调用方式是一旦有异步消息发到某个Message Driver Bean

后,容器都会负责调用Message Driver Bean的OnMessage()方法来处理异步请求

4、EJB与JavaBean有什么异同?

EJB:

EJB是基于Java的远程方法调用技术,可以被远程访问(跨进程、跨计算机),但它必须部署在webspere、weblogic等容器中

EJB客户从不直接访问真正的EJB组件,而是通过其容器访问,EJB容器是EJB组件的代理,其组件由容器创建和管理

Java Bean:

Java Bean是可重用的组件,没有严格的规范限制,因此可以说任何一个类都是一个javabean,但是通常情况下,java bean是

由容器所创建的(比如tocamt).而且javabean必须要有自己的无参构造器,必须实现serializable接口便于持久化操作。所以

Java Bean就相当于com组件,是不能被跨进程访问的。

EJB与Java Bean的区别:

  • EJB主要用在服务器端的开发,Java Bean主要用在客户端的开发
  • EJB可作为独立的单元被部署到EJB容器中,Java Bean不可部署
  • EJB支持使用部署描述对EJB应用进行定制化,Java Bean定制化只能在开发阶段
  • EJB构件分布式对象,可以被远程的对象访问,Java Bean构件不是分布式对象,只能在应用程序内部被访问
  • EJB构件对终端用户不可见,部分Java Bean对终端用户可见

5、EJB有哪些生命周期?

EJB有 entity bean, session bean, MD bean(Message Driver Bean)

其实entity bean 是随便服务器启动而初始化,随着服务器关闭而销毁。

MD bean作为JMS的消费端,不包含客户端状态,它的生命周期有EJB容器用对象池管理管理。所以应该是当JMS端访问

MD bean时候 可能会创建,也可能会调用一个已经存在的。

关于session bean, 分为有状态和无状态。

  • 有状态session bean 的生命周期是客户端访问请求时候创建,并且受事务管理,在事物完成后销毁。
  • 无状态session bean 的生命周期类似于MD bean,有对象池管理。

6、EJB的角色有哪几种?

EJB将开发部署EJB应用的任务划分到了6个不同的角色,它们分别为:

  • Enterprise Bean Provider:企业级组件开发者
  • Application Assembler:应用组合者
  • EJB Deployer:EJB部署者
  • EJB Server Provider:EJB服务器提供者
  • EJB Container Provider:EJB容器提供者
  • System Administrator:系统管理员

每个角色都可以由不同的开发商提供,每个角色所做的工作都必须严格遵循EJB规范,并保证彼此之间的兼容性

11、web服务器与web应用服务器有什么区别?

web服务器:

真正意义上的web服务器就两个 : IIS 和 apache

web 服务器可以提供代理服务,即可以访问本地磁盘上所有的资源文件,即使项目资源文件没有放在服务器中。

常见的web服务器有: nginx , nginx 是Apache 提供的web服务器,nginx是一款高性能、轻量级的web服务器和

反向代理服务器以及邮件代理服务器。支持高并发,并发量50000 。nginx不能解析动态的jsp页面

web应用服务器:

在java web开发时,最早接触的web服务器是tomcat,其实tomcat是web应用服务器,任何的 web项目资源文件如果

没有部署在tomcat应用服务器中(资源文件没有放在tomcat安装目录中),都将不能访问得到

类似的web应用服务器还有 weblogic 和 jetty等

两者的区别:

  • web服务器只能解析静态页面,即html页面,它请求的路径是固定的
  • web应用服务器可以解析动态的jsp页面,即它请求的路径是动态生成的,负责的是请求的逻辑处理

一般在web项目开发 中,apache+tomcat+nginx联合使用,访问静态资源时用apache解析,访问动态资源时

用tomcat解析,nginx作为反向代理服务器,同时支持高并发

12、什么是Web Service?

WebService:

WebService是一个SOA(面向服务的编程)的架构,它是不依赖于语言,不依赖于平台,可以实现不同的语言间的

相互调用,通过Internet进行基于Http协议的网络应用间的交互。 WebService实现不同语言间的调用,是依托于一个

标准,webservice是需要遵守WSDL(web服务定义语言)/SOAP(简单请求协议)规范的。

WebService=WSDL+SOAP+UDDI(webservice的注册)

Web Service是通过提供标准的协议和接口,可以让不同的程序集成的一种SOA架构。

WebService基于以下协议实现:

  • XML:可拓展标记语言
  • WSDL:web服务描述语言
  • UDDL:通用描述、发现与集成服务
  • SOAP:简单对象存取协议

WebService的优点:

  • 完好的封装性
  • 松耦合
  • 动态性

WebService的基本原理:

  • Service Provider采用WSDL描述服务
  • Service Provider 采用UDDI将服务的描述文件发布到UDDI服务器(Register server)
  • Service Requestor在UDDI服务器上查询并 获取WSDL文件
  • Service requestor将请求绑定到SOAP,并访问相应的服务

13、SOAP与REST有什么区别?

SOAP和REST:

SOAP:将HTTP协议作为传输层协议,本质是采用HTTP进行传输,使用XML封装消息内容的RPC调用。

REST:REST并不是一种协议,只是一种设计规范,该设计规范要求程序遵守HTTP协议最初设计的初衷,

使用HTTP的GET/PUT/DELTET/POST对资源进行操作,REST接口是以URI资源为基础,对资源进行CRUD操作的接口。

SOAP和REST的对比:

SOAP相对REST来说较为重量级

SOAP接口是自解释的,采用WSDL进行描述,程序可以基于WSDL进行解释并自动生成SOAP调用代码;

REST接口只能通过接口文档进行描述,难以做到程序解释接口定义。

SOAP采用HTTP作为传输层协议,对HTTP协议来说服务调用是透明的,防火墙上难以对SOAP进行细粒度的权限控制,

也难以使用http的缓存机制提高效率。而REST是标准的HTTP访问,可以充分利用HTTP协议提供的一些好处,例如

可在防火墙上进行权限控制(最小粒度可以基于每个URL的操作),也可充分利用缓存提高响应速度和系统的吞吐效率。

由于REST是标准的HTTP访问,其适用性更广,web应用,移动应用都可以在不使用第三方库的情况下使用REST接口构造应用程序

根据REST设计原则,接口是无状态的,因此可以简单地通过对服务器进行水平扩展提升服务能力

15、数据库连接池的工作机制是怎样的?

数据库连接池的作用:

数据库连接池负责分配、管理并释放数据库连接,它允许应用程序重复使用一个现有的数据库连接,而不再是重新建立新的数据库

连接,同时它还负责释放空闲时间超过最大空闲时间的数据库连接,避免因为没有释放数据库连接而引起的数据库连接泄漏

数据库连接池的原理:

在J2EE中,服务器启动时会创建一定数量的池连接,并一直维持不少于此数目的池连接。客户端程序需要连接时,池驱动程序

会返回一个未使用的池连接并将其表记为忙。如果当前没有空闲连接,池驱动程序就新建一定数量的连接,新建连接的数量有

配置参数决定。当使用的池连接调用完成后,池驱动程序将此连接表记为空闲,其他调用就可以使用这个连接

16、J2EE开发中有哪些调优方法?

调优方式如下:

  • 优化设计:组合代替继承
  • 使用数据库连接池
  • 给web容器配置合理的线程数量来处理客户端的http请求
  • 使用框架(eg:Hibernate)提高系统效率
  • 使用缓存
  • 优化IO性能
  • 优化查询
  • 对session进行合理管理及设置

J2EE与EJB的更多相关文章

  1. J2EE和EJB有什么关系?

    其实j2EE就是java的企业版,与javaSE(标准版)有是有区别的,所以运行环境会有差异(简单点可以说,这是两组不同的接口),我们一般所熟悉的tomcat仅仅只实现了j2ee的一小部分规范,它只是 ...

  2. J2EE之EJB

     EJB是sun的JavaEEserver端组件模型,最大的用处是部署分布式应用程序.EJB把使用java开发的server组件的部署和开发进行标准化. 凭借java跨平台的优势.用EJB技术部署的分 ...

  3. [J2EE]struts+ejb笔记

    DispatchAtion: - org.apache.struts.actions.DispatchAction 这个类是个抽象类,但实现父类Action的execute方法,在项目中重写这个类可以 ...

  4. J2EE学习从菜鸟变大鸟之六 EJB(Enterprise JavaBean)企业级Java组件

    EJB (EnterpriseJavaBean)是J2EE的一部分,定义了一个用于开发基于组件的企业多重应用程序的标准.其特点包括网络服务支持和核心开发工具(SDK).其称为Java 企业Bean,是 ...

  5. EJB 简介

    EJB: 被称为java企业bean,服务器端组件,核心应用是部署分布式应用程序.用它部署的系统不限定平台.实际上ejb是一种产品,描述了应用组件要解决的标准 标准:   可扩展 (Scalable) ...

  6. EJB初识(通熟易懂)

    转载自http://blog.csdn.net/jojo52013145/article/details/5783677,讲的很透彻,佩服,膜拜学习 1. 我们不禁要问,什么是"服务集群&q ...

  7. EJB概念理解

    转自http://blog.csdn.net/jojo52013145/article/details/5783677 1. 我们不禁要问,什么是"服务集群"?什么是"企 ...

  8. 历史疑团之EJB

    在学习Sping框架的过程中,看到过很多次关于EJB的批判.使用了SpringMVC但是并没有真性情般体会到它的优点,所以有必要对传统的Java Bean和EJB来做一些了解,无奈百度搜了很多知识,还 ...

  9. [转] EJB到底是什么,真的那么神秘吗??

    原文地址:http://blog.csdn.net/jojo52013145/article/details/5783677 1. 我们不禁要问,什么是"服务集群"?什么是&quo ...

随机推荐

  1. 二维指针的malloc内存分配(转)

    写代码的时候会碰到多维数组的内存分配和释放问题,在分配和释放过程中很容易出现错误.下面贴上一些示例代码,以供参考. 如果要给二维数组(m*n)分配空间,代码可以写成下面: char **a, i; 1 ...

  2. VMware下ubuntu与Windows实现文件共享的方法 (转)

    最近安装caffe需要将Windows下文件拷贝到ubuntu16.04下,就进行了共享文件夹的设置,期间遇到一些困难,记录下来,方便以后遇到此类问题不再困惑. (记录只为更好的分享) 言归正传: 1 ...

  3. java 泛型实现原理

    泛型思想最早在C++语言的模板(Templates)中产生,Java后来也借用了这种思想.虽然思想一致,但是他们存在着本质性的不同. C++中的模板是真正意义上的泛型,在编译时就将不同模板类型参数编译 ...

  4. VMWare虚拟机安装 - 学习者系列文章

    以前笔者写过一个VMWare虚拟机的安装说明,但是那个版本比较低,已经过时,今天,讲讲VMWare的14版本的安装和使用说明. 首先,下载VMWare 14的安装文件,这里提供一下百度网盘文件: 链接 ...

  5. AS3面试题 个人理解

    现在as3面试 感觉就那几个题目来回考.有了题库,大家都看了 都答上来了 题目本身也就失去了考核的意义.而且题目本身也有很多偏的(不常用的)在考. 真正的面试官现在肯定也不会把笔试成绩当作标准.所谓: ...

  6. bzoj4020: 未来程序·改

    只需写一个解释器 第一次预处理将输入进行分词,分割出 关键字,运算符,变量/函数名,整数常量,并对变量/函数名离散化以便处理 第二次预处理建语法树,每个节点存节点类型,变量定义表等信息 运行时在语法树 ...

  7. python 字符转换记录

    1.unicode转utf-8格式: a="unicode格式的字符" a=a.encode("utf-8") 2.utf-8转unicode格式: s2 = ...

  8. 廖雪峰Java2面向对象编程-2数据封装-1方法重载

    方法重载 方法重载Overload是指:多个方法的方法名相同,但各自的参数不同 参数的个数不同 参数的类型不同 参数位置不同 方法返回值类型通常都是相同的 目的:相同功能的方法使用同一名字,便于调用 ...

  9. jmap、jstack、jps无法连接jvm解决办法

    转载 http://blog.51cto.com/zhangshaoxiong/1310166 一.背景 在对线上服务器的java应用dump操作时发现,以下报错,不能dump.jps也获取不到jav ...

  10. Oracle 小技巧

    Oracle小技巧 ###add at 18-10-11 1  ed 在sqlplus当中 如果前一条语句输入有误的话 可以输入ed再回车.在进行编辑 输入ed后有弹窗,可以对之前的输入语句进行编辑 ...