【计算机类职业资格】(Java)程序员面试-13及答案解析.doc

上传人:outsidejudge265 文档编号:1317846 上传时间:2019-10-17 格式:DOC 页数:29 大小:115.50KB
下载 相关 举报
【计算机类职业资格】(Java)程序员面试-13及答案解析.doc_第1页
第1页 / 共29页
【计算机类职业资格】(Java)程序员面试-13及答案解析.doc_第2页
第2页 / 共29页
【计算机类职业资格】(Java)程序员面试-13及答案解析.doc_第3页
第3页 / 共29页
【计算机类职业资格】(Java)程序员面试-13及答案解析.doc_第4页
第4页 / 共29页
【计算机类职业资格】(Java)程序员面试-13及答案解析.doc_第5页
第5页 / 共29页
点击查看更多>>
资源描述

1、(Java)程序员面试-13 及答案解析(总分:100.00,做题时间:90 分钟)一、论述题(总题数:26,分数:100.00)1.cookie 和 session 有什么区别 (分数:4.00)_2.什么是 J2EE (分数:4.00)_3.J2EE 中常用的术语有哪些 (分数:4.00)_4.EJB 有哪些不同的类别 (分数:4.00)_5.EJB 与 JavaBean 有什么异同 (分数:4.00)_6.EJB 有哪些生命周期 (分数:4.00)_7.EJB 的角色有哪几种 (分数:4.00)_8.EJB 的开发流程是怎样的 (分数:4.00)_9.EJB 3.0 与 EJB 2.0

2、有哪些不同之处 (分数:4.00)_10.EJB 容器有哪些作用 (分数:4.00)_11.EJB 规范规定 EJB 中禁止的操作有哪些 (分数:4.00)_12.Web 服务器与 Web 应用服务器有什么区别 (分数:4.00)_13.什么是 Web Service (分数:4.00)_14.SOAP 与 REST 有什么区别 (分数:4.00)_15.什么是 XML (分数:4.00)_16.数据库连接池的工作机制是怎样的 (分数:4.00)_17.J2EE 开发有哪些调优的方法 (分数:4.00)_18.什么是 Struts 框架 (分数:4.00)_19.Struts 框架响应客户请求

3、的工作流程是什么 (分数:4.00)_20.Struts 框架的数据验证可分为几种类型 (分数:4.00)_21.Form Bean 的表单验证流程是什么 (分数:4.00)_22.在 Struts 配置文件中,action元素包含哪些属性和子元素 (分数:4.00)_23.ActionForm Bean 的作用有哪些 (分数:3.00)_24.ActionForm 的执行步骤有哪些 (分数:3.00)_25.forward 与 global-forward 有什么区别 (分数:3.00)_26.Struts 如何实现国际化 (分数:3.00)_(Java)程序员面试-13 答案解析(总分:1

4、00.00,做题时间:90 分钟)一、论述题(总题数:26,分数:100.00)1.cookie 和 session 有什么区别 (分数:4.00)_正确答案:()解析:cookie 是在 HTTP 下,服务器或脚本可以维护客户工作站上信息的一种方式。它是由 Web 服务器保存在用户浏览器上的小文件,可以包含有关用户的信息(如身份识别号码、密码等信息)。session 是指用来在客户端与服务器端之间保持状态的解决方案以及存储结构。 尽管二者都能够进行信息存储,但是也存在着区别。具体而言,二者有以下几个方面的区别: 1)cookie 机制采用的是在客户端保持状态的方案,即数据存放在客户的浏览器上

5、;而 session 机制采用的是在服务器端保持状态的方案,即数据放在服务器上。 2)cookie 安全性不够。由于 cookie 信息存放在客户端,其他人可以很容易地得到存放在本地的 cookie,并进行 cookie 欺骗;而 session 信息存放在服务器端,因此较为安全。 3)cookie 性能更高一些。由于 session 会在一定时间内保存在服务器上,因此当访问量增多时,会降低服务器的性能。 4)单个 cookie 保存的数据不能超过 4KB,很多浏览器都限制一个站点最多保存 20 个 cookie;而 session不存在此问题。 鉴于以上几点区别,一般情况下,将用户登录信息等

6、重要信息存放至 session 中,而其他需要保留的信息可以放在 cookie 中。2.什么是 J2EE (分数:4.00)_正确答案:()解析:1J2EE(Java2 Platform,Enterprise Edition)是 Java 平台企业版的简称,是用来开发与部署企业级应用的一个架构,它提供了一种统一的、开放标准的多层平台,该平台主要由构件、服务和通信 3 个模块构成。 构件包含客户端构件和服务器端构件两种类型,其中,客户端构件主要包含两类 Applets 和 Application Clients,服务器端构件分为两类 Web 构件(Servlet 与 JSP)和 EJBs(Ent

7、erprise Java Beans)两种。服务由 J2EE 平台提供商实现,分为 Service API(开发时使用)和运行时服务。通信由容器提供的支持协作构件之间的通信。 从本质上来讲,J2EE 只是一个行业标准,主要用来通过 Java 开发服务器端应用提供一个独立的、可移植的、多用户的企业级平台,从而能够简化应用程序的开发和部署。正是由于 J2EE 只是一个标准而不是一个成熟的产品,因此目前有很多不同类型的 J2EE 服务器。只要开发的应用程序符合 J2EE 的标准,就都可以部署在遵循了 J2EE 开发标准的 J2EE 服务器上。这种标准使得开发人员只需要专注于各种应用系统的商业逻辑与架

8、构设计,而不用过多地考虑底层繁琐的程序编写工作,系统的开发与部署效率大幅提升。 常见笔试题: 在 J2EE 中,属于 Web 层的组件有_。 AServlet BEJB CApplet DHTML 答案:A。见上面讲解。3.J2EE 中常用的术语有哪些 (分数:4.00)_正确答案:()解析:J2EE 中常用的术语有 Web 服务器、Web 容器、EJB 容器、Applet 容器、Application Client 容器、JNDI、JMS、JTA、JAF、RMI 等。下面将分别对它们进行解释。 (1)Web 服务器 Web 服务器是指驻留在 Internet 上的计算机程序。它是一种服务程序

9、,其主要工作是接收来自于客户端的请求,然后把对请求的处理结果返回给客户端。用户可以通过浏览器来请求所需资源,这些资源可以是HTML 页面、图片、音频、视频或者 PDF 文档等,Web 服务器接收到请求后会去查找用户请求的资源,然后把找到的资源返回给用户。需要注意的是,它是一个被动的程序,只有当收到来自客户端的请求后,才会发送响应。 目前最流行的两大 Web 服务器是:IIS(Internet Information Services)和 Apache Http Server(简称Apache)。 (2)Web 容器 Web 容器也被叫作 Web 应用服务器,它是一种服务程序,用来给运行在其中的

10、程序(例如 Servlet、JSP 等)提供一个运行的环境。由于 Web 容器的存在,Servlet 只需要关注业务逻辑的处理而不用关注与客户端的交互,因为这些交互都已经由 Web 容器来协助完成了。常见的 Web 容器有 Tomcat、JBoss、WebLogic 和WebSphere 等。 下面以 Tomcat 为例介绍一下 Web 容器主要完成了哪些工作:当 Web 服务器(例如 Apache)接收到一个客户端对 Servlet 的请求后,不是直接把这些请求交给 Servlet 来处理,而是交给 Web 容器来处理,由 Web 容器负责给 Servlet 提供 HTTP 请求与响应对象,

11、同时容器调用 Servlet 的 doGet()或 doPost()方法来处理用户的请求。 (3)EJB 容器 EJB 容器是一个服务器端容器。EJB(Enterprise JavaBean)是 J2EE 应用的业务层的技术标准,只要满足J2EE 规范的组件就能在 EJB 容器中运行,这个组件就会被 EJB 容器高效地管理。同时,EJB 容器还给运行在其中的组件提供了安全而优越的服务环境,例如事务管理、邮件服务等。 需要注意的是,EJB 组件不能显式地使用 EJB 容器的 API(Application Programming Interface,应用程序接口)来请求容器提供的中间件服务,但可

12、以隐式地让 EJB 容器知道它们的需求,例如在基于 XML 的部署描述符中制定所需的配置信息,在 Bean 类中使用部署注释请求中间件服务。EJB 容器为 EJB 组件隐式地提供中间件服务。 (4)Applet 容器 Applet 容器是一个客户端容器,包含的组件为 Applet。Applet 是一种嵌入在浏览器中的轻量级客户端,一般而言,只有当使用 Web 页面无法充分地表现数据或应用界面时,才会使用它。Applet 是一种替代 Web页面的手段,开发人员只能够使用 J2SE 开发 Applet,出于安全性的考虑,Applet 无法使用 J2EE 的各种Service 和 API。 (5)A

13、pplication Client 容器 Application Clienf 容器是一个客户端容器,包含的组件为 Application Client。相对 Applet 而言,Application Client 是一种较重量级的客户端,它能够使用 J2EE 的大多数 Service 和 API。 (6)JNDI JNDI 全称为 Java Naming and Directory Interface,译为 Java 命名和目录接口。它提供了一个目录系统,并将服务名称与对象关联起来,从而使得开发人员在开发过程中可使用名称来访问对象。 通过使用 JNDI,一方面实现了快速查找和定位分布式应用

14、程序的功能,另一方面使得程序有了更好的可扩展性。由于 JNDI 是独立于目录协议的,因此应用还可以使用 JNDI 访问各种特定的目录服务,例如轻量级目录访问协议(Lightweight Directory Access Protocol,LDAP)、网络数据服务(Network Data Service,NDS)和域名系统(Domain Name System,DNS)等。 (7)JMS JMS 全称为 Java Message Setvice,译为 Java 消息服务。它是一个 Java 平台中面向消息中间件的 API,主要实现各个应用程序之间进行异步通信,包括创建、发送、接收、读取消息等。

15、通过使用 JMS,能够最大限度地提升消息应用的可移植性。JMS 既支持点对点的消息通信,也支持发布/订阅式的消息通信。 (8)JTA JTA 全称为 Java Transaction API,译为 Java 事务服务。它提供各种分布式事务服务(在多个网络计算机上进行数据访问和更新),为 J2EE 实现分布式事务处理提供了重要的支撑。 (9)JAF JAF 的全称为 JavaBeans Activation Framework,译为 JavaBeans 激活框架。它是一个专用的数据处理框架,提供了一种统一处理不同数据格式的方法。 (10)RMI RMI 全称为 Remote Method Inv

16、ocation,译为远程方法调用,它主要用于远程调用服务,通过它,可以像调用本地函数一样调用另外一台计算机上运行的程序,而不需要关心远程计算机所使用的系统或所使用的语言,也就是说,只要满足一定的规范,就可以实现在不同的计算机上进行函数调用。 常见笔试题: JNDI 可用于如下哪些应用场景?_ A配置信息存储 B异步信息发送 C数据库连接池查找 D远程对象查找 答案:D。见上面讲解。4.EJB 有哪些不同的类别 (分数:4.00)_正确答案:()解析:EJB 是 Enterprise JavaBean 的简称,相当于分布式组件对象模型(Distributed Component Object M

17、odel,DCOM),它是一种服务器端组件体系结构,用于开发和部署多层的、分布式的以及面向对象的应用系统的跨平台体系结构。EJB 简化了 Java 开发企业级的分布式组件应用程序的过程,它定义了一组可重用的组件Enterprise Beans,开发人员可以利用这些组件,像搭积木一样建立各种分布式应用。所以,使用 EJB 可以写出可扩展的、健壮的、安全的应用程序,而不需要开发人员自己去编写复杂的分布式组件框架。 依据特性的不同,EJB 可以分为以下 3 种类型:Session Bean(会话 Bean),Entity Bean(实体 Bean)和Message Driven Bean(消息驱动

18、Bean)。下面将分别对这 3 种 Bean 进行介绍。 (1)Session Bean Session Bean 用来实现服务器端的业务逻辑,同时协调 Bean 之间的交互。Session Bean 仅存在于客户应用与服务器交互的时间段内,Session Bean 中的数据是不保存在数据库中的。根据 Session Bean 是否有状态又可以分为两种类型:Stateless Session Bean(无状态的 Session Bean)和 Stateful Session Bean(有状态的 Session Bean)。 Stateless Session Bean 在方法调用期间不维护任何

19、状态,所有事务处理都是在一个方法中处理完成,因此一个 Stateless Session Bean 可以被多个客户共享,即一个 Stateless Session Bean 可以同时处理多个客户应用的请求;而 Stateful Session Bean 则不同,它可以记录客户应用请求的状态,例如在线购物系统中,每个客户都拥有购物车(Stateful Bean),而装载的货物和货物的数量在 Session Bean 中通过方法来操作,因此每个 Stateful Session Bean 只能处理一个客户的请求。与 Stateless Session Bean相比,Stateful Session

20、 Bean 的优点是能够记录客户应用的状态,其缺点是它不能被共享,开销较大,性能逊于 Stateless Bean,因此当请求用户数量比较多时会消耗更多的内存。 (2)Entity Bean Entity Bean 主要是资料组件,代表数据库中的记录,因此它与数据库中的数据有着相同的生存周期,也就是说,只要数据库中的数据存在,Entity bean 就一直存在。此外,Entity Bean 还可以被多个客户应用共享。Entity 有两种对数据持久化的处理方式:CMP(Container Managed Persistence,容器管理的持续性)。构件的相关数据库操作由容器自动完成,不需要在 b

21、ean 中编写数据库操作的代码。BMP(Bean Managed Persistence,Bean 管理的持续性)。构件的相关数据库操作由开发人员在代码中通过 JDBC 编程来实现。这两种 Entity Bean 的形态不同,但目的相同,二者的主要区别在于维护资料的角色,CMP 是由EJB Container 来维护,而 BMP 则是由 Bean 自行维护资料的一致性。 Entity Bean 一共有 3 种状态:no-state、pooled 和 ready。其中,no-state 状态表示 Bean 实例还没有被创建;pooled 状态表示 Bean 实例已经被创建,但还没有和一个 EJB

22、 Object 关联起来;ready 状态表示与 EJB Object 关联起来,若断开关联,则回到 pooled 状态。 (3)Message Driver Bean Message Driver Bean 用来处理异步消息,一般不是由用户来调用的。它的调用方式为:当有异步消息发送到某个 Message Driver Bean 后,容器会负责调用 Message Driver Bean 的 OnMessage()方法来处理这个异步请求。5.EJB 与 JavaBean 有什么异同 (分数:4.00)_正确答案:()解析:EJB 是基于 Java 的远程方法调用(Remote Method I

23、nvoeation,RMI)技术,可以被远程访问(跨进程、跨计算机),但它必须被部署在 Webspere、WebLogic 等容器中。EJB 客户从不直接访问真正的 EJB 组件,而是通过其容器访问。EJB 容器是 EJB 组件的代理,EJB 组件由容器所创建和管理。 Java Bean 是可复用的组件,理论上讲,任何一个 Java 类都可以是一个 Bean。但通常情况下,由于 Java Bean 是被容器(例如 Tomcat)所创建的,因此 Java Bean 应具有一个无参的构造器,另外,通常 Java Bean 还要实现 Serializable 接口用于实现 Bean 的持久性。Jav

24、a Bean 实际上相当于微软 COM 模型中的本地进程内 COM 组件,是不能被跨进程访问的。 EJB 与 JavaBean 都是基于 Java 语言的构件模型。在开发应用时,既可以选择使用 EJB 模型,也可以选择使用 JavaBean 模型。尽管如此,二者也并非完全通用,其主要区别见表。 EJB 与 JavaBean 对比 EJB JavaBean 主要用在服务器端的开发 主要用在客户端的开发 可以作为独立的单元被部署到 EJB容器中 不可部署 支持使用部署描述符对 EJB 应用进行定制化 定制化只能在开发阶段 EJB 构件分布式对象,可以被远程的对象访问 JavaBean 构件不是分布

25、式对象,只能在应用程序内部被访问 EJB 构件对终端用户不可见 部分 JavaBean 对终端用户可见 6.EJB 有哪些生命周期 (分数:4.00)_正确答案:()解析:Stateless Session Bean 的生命周期是由容器决定的,当客户端发出请求要建立一个 Bean 的实例时,EJB 容器不一定要创建一个新的 Bean 实例来供客户端调用,如果当前有 Stateless Session Bean 的实例能够满足客户需求,就不会去创建新的实例。对于 Stateless Session Bean 来说,实例的创建和删除都是由 EJB 容器来控制的。StatelessSession B

26、ean 的生命周期共有两个状态:No State(无状态)和Method Ready(准备方法),下图是两种状态的状态转移图。 No State 和 Method Ready 的状态转移图其中,No State 表示容器中没有 Stateless Session Bean 的实例。只有 EJB 容器认为实例池中需要更多的实例为客户提供服务时,才会去创建新的实例,此时新创建的实例就由 No State 转换为 Method Ready状态;相反,如果 EJB 容器认为当前实例池中已经不需要这么多的实例来给客户端提供服务,就会根据某些策略从实例池中删除一些实例,这些被删除的实例的状态就转换为 No

27、 State。 Stateful Session Bean 的生命周期是与用户的操作相关联的,由于 Stateful Session Bean 不能被共享,因此当客户端第一次调用一个 Stateful Session Bean 时,容器必须立即在服务器中创建一个新的 Bean实例,并关联到客户端上,以后当此客户端调用 Stateful Session Bean 的方法时,容器会把调用分派到与此客户机相关联的 Bean 实例。Stateful Session Bean 的实例在生命周期中共有 3 个状态:No State(无状态)、Method Ready(准备方法)和 Passivated(钝

28、化)。状态间的转换如图所示。 Stateful Session Bean 的状态转换图其中,No State 表示容器中没有 Stateful Session Bean 的实例。只要有新的用户请求到来,EJB 容器就会创建新的 Stateful Session Bean 实例,此时被创建的实例的状态就从 No State 转换为 Mechod Ready。当这个实例不再被使用时(客户端不再使用或客户端超时),EJB 容器就会删除该实例,此时这个实例的状态就会转换为 No State。与 Stateless Session Bean 不同的是,Stateful Session Bean 不能被共

29、享,因此在某一时刻 EJB 容器中可能会有大量的 Stateful Session Bean 实例,从而导致内存开销过大,为了解决这个问题,在 Stateful Session Bean 的生命周期中引入了另外一个状态Passirated。当 Stateful Session Bean 实例过多时,EJB 容器只保留那些正在被使用的实例,从而把当前不被使用的实例从内存移到持久存储介质上(例如硬盘),此时这些实例的状态就转换为 Passivated。只有当客户再次请求使用处于 Passivated 状态的实例时,这些实例才会被激活并恢复到内存中,同时其状态也转换为Method Ready。当实例

30、不再被使用或超时后,其状态都会转换为 No State。 Method Ready 状态与 Passivated 状态之间通过根据 MRU 或 NRU 算法进行迁移。状态迁移前会调用对应的ejbActive()和 ejbPassivate()方法。 Entity Bean 能存活相对较长的时间,并且状态是持续的。只要数据库中的数据存在,Entity Bean 就一直存活,而不是按照应用程序或者服务进程来说的,即使 EJB 容器崩溃了,Entity Bean 也是存活的。Entity Bean 的生命周期能够被容器或者 Bean 自己管理。为了很好地管理 Entity Bean,它的生命周期被划

31、分为 3 个状态:No State、Pooled State 和 Ready State,这 3 个状态之间的转换如图所示。 7.EJB 的角色有哪几种 (分数:4.00)_正确答案:()解析:EJB 将开发部署 EJB 应用的任务划分到了 6 个不同的角色,它们分别为 Enterprise Bean Provider(企业级组件开发者)、Application Assembler(应用组合者)、EJB Deployer(EJB 部署者)、EJB Server Provider(EJB 服务器提供者)、EJB Container Provider(EJB 容器提供者)和 System Admi

32、nistrator(系统管理员)。每个角色都可以由不同的开发商提供,每个角色所做的工作都必须严格遵循 EJB 规范,并保证彼此之间的兼容性。 下表为 EJB 中 6 个角色及其功能描述。 EJB 中 6 个角色及其功能描述介绍 角 色 功能描述 Enterprise Bean Provider 用来编写EJB 应用所需的构件。主要包含Enterprise Bean(包含应用的商业逻辑)、 Home接口(包含Enterprise Bean生命周期管理的相关方法)、Remote 接口(包含商业方 法的定义)和Deployment Descriptor(在部署描述符中,Enterprise Bean

33、 Provider 指明 Enterprise Bean的名字、事务属性以及安全性角色等) Application Assembler 在部署描述符中编写组装Enterprise Bean的代码。这些代码中包含构成应用的多个 Enterprise Bean之间关联的定义 EJB Deployer 是应用环境的操作专家,负责与 EJB部署相关的工作。它们将Enterprise Bean安装到运 行环境中,而且在部署时可以对其进行定制化,例如可以在部署时把定义的安全角色和 EJB 部署环境中的用户组及账号对应起来,实现它们的映射 EJB Server Provider 即生产 EJB服务器的厂家,

34、它们是分布式事务、分布式对象和其他低级系统级服务的 专家,为 EJB容器提供运行时环境和服务框架 EJB Container Provider 一方面为Enterprise Bean的执行提供系统级服务,如Home接口的自动注册;另一方面 提供了一个很好的部署工具,可以将Enterprise Bean部署到 EJB容器中。EJB Container Provider与 EJB Server Provider 一般都由同一厂商来提供 System Administrator 用来配置、监控、维护EJB Server 与部署的Enterprise Bean的日常运行 需要注意的是,以上 6 个角色

35、可以由不同的开发商提供,但有一个前提,即它们都必须遵循 EJB 规范并且保证相互之间的兼容性。8.EJB 的开发流程是怎样的 (分数:4.00)_正确答案:()解析:在 EJB 的开发流程中有非常重要的 3 个对象:Remote 接口、Home 接口和 Bean 类。其中 Remote 接口定义了业务方法,用于 EJB 客户端调用业务方法,需要注意的是,开发 EJB 时,只需要对其进行定义即可,并不需要去实现它,因为容器会在编译时会根据接口定义和 Enterprise Bean 类的内容自动创建一个实现了该接口的类。Home 接口提供了产生和定位 Remote 接口实例的方法,用于 EJB 工

36、厂创建、移除、查找 EJB 实例,它又分为远程 Home 接口与本地 Home 接口两种。Bean 类指的是实现了javax.ejb.EnterpriseBean 接口的类,它定义了应用的商业逻辑。 具体而言,EJB 开发步骤如下所示。 1)定义 Romote 接口。编写一个接口继承自 javax.ejb.EJBObject。在这个接口中定义需要实现业务逻辑的方法对应的接口。需要注意的是,这个接口中定义的类都必须抛出 RemoteException 异常,示例如下。 import javax.ejb.*; import java.rmi.*; public interface HelloInt

37、erface extends EJBObject String hello()throws RemoteException; 2)编写一个接口继承 javax.ejb.EJBHome。这个接口中实现 create()方法,这个方法的返回值必须为Remote 接口类型(可以被远程访问的接口),同时这个方法还需要抛出两个异常:CreateException 和RemoteException。create()方法取代传统 OO(Object Oriented,面向对象)中的 constructor(构造方法)来初始化一个对象。EJB 容器可以维护一定数量的对象实例,示例如下。 import java

38、x.ejb.*; public interface HelloHome extends EJBHome public HelloInterface create()throws java.rmi.RemoteException, jaw.ejb.CreateException; 以上这个例子中的 create()方法返回值为上面创建的 HelloInterface 接口。 3)编写 bean 类的实现类(SessionBean)。实现类必须实现下面 5 个方法: public void ejbCreate()方法。EJB 容器会调用这个方法创建 enterprise bean 的对象。 pub

39、lic void ejbRemove()方法。 public void ejbActivate()方法。 public void ejbPassivate()方法。 public void setSessionContext(SesssionCOntext ctx) this.ctx=ctx; 以上 4 个方法(ejbRemove()、ejbActivate()、ejbPassivate()、setSessionContext()主要用来控制SessionBean 的生命周期。具体而言,容器在删除 enterprise bean 的实例之前会调用其 ejbRemove()方法。容器在将 enterprise bean 的实例从临时持久存储介质加载到内存中后会调用其 ejbActivate()方法。容器在将 enterprise bean 的实例转移到临时持久存储介质之前会调用其 ejbPassivate()方法。每次创建一个 SessionBean 时,容器会调用 setSessionContext()方法,用来初始化 enterprise bean 使用的SessionContext 变量。具体使用方法如下所示: import jav

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 考试资料 > 职业资格

copyright@ 2008-2019 麦多课文库(www.mydoc123.com)网站版权所有
备案/许可证编号:苏ICP备17064731号-1