JAVA

作者在 2008-09-21 23:23:08 发布以下内容
1、抽象类和接口的区别
 a、接口可以被多重实现(implements),抽象类只能被单一继承(extends)。
 b、接口只有定义,抽象类可以有定义和实现。
 c、接口的定义默认为:public static final,抽象类默认字段是 "friendly"(本包可见)。
2、抽象:
   抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分注意与当前目标有关的方面。
 抽象并不打算了解问题的全部,而只是选择其中的一部分,暂时不用部分细节。抽象包括两个方面:
 一个是过程抽象,第二个是数据抽象。
3、继承:
   继承是一种联结类的层次模型,并且允许和鼓励类的重用,它提供一种明确表述共性的方法。
 对象的一个新类可以从现有类中派生,这个过程称为继承。新类继承的原始类的特性,新类称为
 原始类的派生类(子类),而原始类称为新类的基类(父类)。派生类可以从基类那里继承方法
 和实例变量,并且类可以修改或增加新的方法使之更适合特殊的需要。
4、封装:
   封装是把过程和数据包围起来,对数据的访问只能通过已定义的界面。面向对象计算始于这个
 基本概念,即现实世界可以被描述成一系列完全自治、封装的对象,这些对象通过一个受保护的接
 口访问其他对象。
5、多态性:
   多态性是指不同类的对象对同一消息作出的响应。多态性包含参数化多态性和包含多态性。多
 态性语言具有灵活、抽象、行为共享、代码共享的优势,很好的解决的应用程序函数同名问题。
 
6、说出数据库连接池的工作机制是什么?
   J2EE 服务器启动时会建立一定数量的连接,并一直维持不少于此数目池连接。客户端程序需要
 连接时,池驱动程序会返回一个从未使用过池连接并将其标记为忙。如果当前没有空闲连接,池驱动
 程序就会建立一定数量的连接,新建连接的数量由配置参数决定。当使用的池连接调用完成后,池驱
 动程序将此连接标记为空闲,其他调用就可以使用这个连接。
7、Java中的异常处理机制的简单原理和应用?
   当 JAVA 程序违反了 JAVA 的主义规则时,JAVA 虚拟机就会将发生的错误表示为一个异常。违
 反主义规则有 2 种情况:一种是 JAVA 类库内置的主义检查。例如数组下标越界,会引发IndexOut-
 OfBoundsException;访问 null 的对象时会引发 NullPointerException。另一种情况就是 JAVA 允
 许程序员扩展这种主义检查,程序员可以创建自己的异常,并自由选择在何时用 throw 关键字引发
 异常。所有的异常都是 java.lang.Throwable 的子类。
8、JSP和SERVLET有哪些相同点和不同点,他们之间的联系是什么?
   JSP 是 SERVLET 技术的特点,本质上是 SERVLET 的简易方式,更强调应用的外表表达。JSP 编
 译后是类 “SERVLET” 。SERVLET 和 JSP 最主要的不同点在于,SERVLET 的应用逻辑在 JAVA 文件中,
 并且完全从表示层的 HTML 里分离开来。而 JSP 的情况是 JAVA 和 HTML 可以组合成一个扩展包为
 .jsp 的文件。JSP 侧重于视图,SERVLET 主要用于控制逻辑。
9、 forward和redirect的区别?
   forward 是服务器请求资源,服务器直接访问目标地址的 URL ,把那个 URL 的响应内容读取过
 来,然后再把这些内容发给浏览器,浏览器根本不知道服务器发送的内容是从哪儿来的,所以它的地
 址栏中还是原来的地址。
   redirect 是服务器端根据逻辑,发送一个状态码,告诉浏览器去重新请求那个地址,一般来说
 浏览器会用刚才请求的所有参数重新请求,所以 session,request 参数都可以获取。
10、什么是Web容器?
   实现 J2EE 规范中 WEB 协议的应用。该协议定义了 WEB 程序的运行时环境,包括:并发性,安
 全性,使命周期管理等等。
 
11、解释下面关于 J2EE的名词?
   (1)、JNDI:Java Naming & Directory interface,JAVA 命名和目录服务。主要提供的功能是:
 提供一个目录系统,让其他各地的应用程序在其上面留下自己的索引,从而满足快速查找和定位分
 布式应用程序的功能。
   (2)、JMS:Java Message Service,Java 消息服务。主要实现各个应用程序之间的通讯,包括
 点对点和广播。
   (3)、JTA:Java Transaction API,JAVA 事务服务。提供各种事务分布式服务。应用程序只需
 调用其提供的接口即可。
   (4)、JAF:Java Action FrameWork,Java 安全认证框架。提供一些安全控制方面的框架。让开
 发者通过各种部署和自定义实现自己的个性安全控制策略。
   (5)、RMI:Remote Method interface,远程方法调用。
12、JSP中动态INCLUDE和静态INDLUDE的区别?
   动态INCLUDE用:jsp:include 实现。<jsp:include page="included.jsp" flush="true"/>   
 它总是会检查所含文件中的变化,适合包含动态页面,并且可以带参数。
   静态INCLUDE用include伪码实现,定不会检查所含文件的变化,适用于包含静态页面
 <%@ include File="included.jsp"%>。
 
13、JSP的内置对象及方法?
   Request request 表示 HttpServletRequest 对象。它包含了有关浏览器请求的信息,并且提
 供了几个用于获取 cookie,header,和 session 数据的有用方法。
   Response response 表示 HttpServletResponse 对象,并提供了几个用于设置送回浏览器的响
 应方法(如 cookies,头信息等)。
   Out out 对象是 javax.jsp.JspWriter的一个实例,并提供了几个方法使你能用于向浏览器回送
 输出的结果。
   pageContext pageContex 表示一个 javax.servlet.jsp.PageContext 对象,它是方便用于存取
 各种范围的名字空间、servlet相关的对象的 API,并且包装了通用的 servlet 相关功能的方法。
   Session session 表示一个请求的 javax.servlet.http.HttpSession 对象。Session 可以存储
 用户的状态信息。
   Application application 表示一个 javax.servlet.ServletContext 对象。这有助于查找有关
 servlet 引擎和 servlet 环境的信息。
   Config config 表示一个 javax.servlet.ServletConfig 对象。该对象用于存取 servelt 实例
 的初始化参数。
   Page page 表示从该页面产生的一个 servlet 实例。
   
14、介绍JAVA中的CollectionFrameWork(包括如何写自己的数据结构)?
    Collection FrameWork如下:
  Collection
  ├List
  │├LinkedList
  │├ArrayList
  │└Vector
  │ └Stack
  └Set
  Map
  ├Hashtable
  ├HashMap
  └WeakHashMap
  Collection是最基本的集合接口,一个Collection代表一组Object,即Collection的元素
  (Elements)Map提供key到value的映射。5.0版本增加了一个新的接口Queue。
  其所有的标准实现类均在java.util包中定义。
  总体上来说,Map定义了键和值的对应关系,List定义了列表,Set定义了堆式。
  所以一般来说Map和Set为无序而List有序,但也有例外。
15、STRING与STRINGBUFFER的区别?
   String 的长度是不可变的,STRINGBUFFER 的长度是可变的。如果你对字条串的内容经常进行
 操作,特别是内容要修改时,那么使用 StringBuffer,如果最后需要 String,那么使用
 StringBuffer 的 toString() 方法。 
 
16、<%@ include page="include.jsp" flush="true"%>和<jsp:include File="include.jsp">的区别?
   前者页面不会转向 include 所指的页面,只是显示该页面的结果,主页面还是原来的结果。
 执行完后还会回来,相当于函数调用。并且可以带参数。后者完全转向新页面,不会再回来。相当
 于 go to 语句。
 
17、Hashtable的原理,并说出Hashtable与Hashmap的区别?
   Hashtable的原理:通过节点的关键码确定节点的存储位置,即给定节点的关键码 k,通过一定
 的函数关系 H(散列函数),得到函数值H(K),将些值解释为该节点的存储地址。
   Hashmap 与 Hashtable 很相似,但 Hashmap 是非同步(unsynchronided)和可以以 null 为关键
 码的。
18、多线程有几种实现方法,都是什么?同步有几种实现方法,都是什么?
   多纯种有两种实现方法,分别是继承 Thread 类与实现 Runnable 接口,同步的实现方面有两种
 分别是synchronided,wait与notify。
19、类的Static代码段,可以看作是类首次被加载(被虚拟机加载)执行的代码,而对于类的加载,首
   先要执行其基类的的构造,再执行其本身的构造。
20、说出ArrayList,Vector,LinkedList的存储性能和特性?
   ArrayList 和 Vector 都是使用数组方式存储数据,此数组元素数大于实际存储的数据以便增加
 和插入元素,它们都允许直接按序号索引元素,但是插入元素要涉及数组元素移动和内存操作,所以
 索引数据快而插入数据慢。Vector由于使用了synchronized方法(线程安全),通常性能上较
 ArrayList差,而LinkedList使用双向链表实现存储,按序号索引数据需要进行前向或后向遍历,
 但是插入数据时只需要记录本项的前后项即可,所以插入速度较快。
 
21、sleep()和wait()有什么区别?
   sleep是线程类(Thread)的方法,导致此线程暂停执行指定时间,给执行机会给其他线程,但是
 监控状态依然保持,到时后会自动恢复。调用sleep不会释放对象锁。 wait是Object类的方法,对此
 对象调用wait方法导致本线程放弃对象锁,进入等待此对象的等待锁定池,只有针对此对象发出notify
 方法(或notifyAll)后本线程才进入对象锁定池准备获得对象锁进入运行状态。
 
22、说出Servlet的生命周期,并说出Servlet和CGI的区别。
   Servlet被服务器实例化后,容器运行其init方法,请求到达时运行其service方法,service方法
 自动派遣运行与请求对应的doXXX方法(doGet,doPost)等,当服务器决定将实例销毁的时候调用其
 destroy方法。
 与cgi的区别在于servlet处于服务器进程中,它通过多线程方式运行其service方法,一个实例可以服
 务于多个请求,并且其实例一般不会销毁,而CGI对每个请求都产生新的进程,服务完成后就销毁,所
 以效率上低于servlet。
23、当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,
  那么这里到底是值传递还是引用传递?
   是值传递。Java 编程语言只有值传递参数。当一个对象实例作为一个参数被传递到方法中时,
 参数的值就是对该对象的引用。对象的内容可以在被调用的方法中改变,但对象的引用是永远不会改
 变的。
 
24、四种会话跟踪技术
   会话作用域Servlets JSP页面描述
  page是代表与一个页面相关的对象和属性。一个页面由一个编译好的 Java servlet 类(可以带
 有任何的 include 指令,但是没有 include 动作)表示。这既包括 servlet 又包括被编译成
 servlet的 JSP 页面。
  request是代表与 Web 客户机发出的一个请求相关的对象和属性。一个请求可能跨越多个页面,
 涉及多个 Web 组件(由于 forward 指令和 include 动作的关系)。
  session是是代表与用于某个 Web 客户机的一个用户体验相关的对象和属性。一个 Web 会话可以
 也经常会跨越多个客户机请求application是是代表与整个 Web 应用程序相关的对象和属性。这实质
 上是跨越整个 Web 应用程序,包括多个页面、请求和会话的一个全局作用域。
  application是代表与整个 Web 应用程序相关的对象和属性。这实质上是跨越整个 Web 应用程序,
 包括多个页面、请求和会话的一个全局作用域。
 
25、jsp有哪些动作?作用分别是什么?
   JSP共有以下6种基本动作:
 jsp:include:在页面被请求的时候引入一个文件。
 jsp:useBean:寻找或者实例化一个JavaBean。
  jsp:setProperty:设置JavaBean的属性。
 jsp:getProperty:输出某个JavaBean的属性。
 jsp:forward:把请求转到一个新的页面。
 jsp:plugin:根据浏览器类型为Java插件生成OBJECT或EMBED标记。
26、什么是java序列化,如何实现java序列化?
   序列化就是一种用来处理对象流的机制,所谓对象流也就是将对象的内容进行流化。可以对流
 化后的对象进行读写操作,也可将流化后的对象传输于网络之间。序列化是为了解决在对对象流进
 行读写操作时所引发的问题。
  序列化的实现:将需要被序列化的类实现Serializable接口,该接口没有需要实现的方法,
 implements Serializable只是为了标注该对象是可被序列化的,然后使用一个输出流(如:
 FileOutputStream)来构造一个ObjectOutputStream(对象流)对象,接着,使用ObjectOutputStream
 对象的writeObject(Object obj)方法就可以将参数为obj的对象写出(即保存其状态),要恢复的话
 则用输入流。
27、什么是Web Service?
   Web Service就是为了使原来各孤立的站点之间的信息能够相互通信、共享而提出的一种接口。
 Web Service所使用的是Internet上统一、开放的标准,如HTTP、XML、SOAP(简单对象访问协议)、
 WSDL等,所以Web Service可以在任何支持这些标准的环境(Windows,Linux)中使用。
 注:SOAP协议(Simple Object Access Protocal,简单对象访问协议),它是一个用于分散和分布式
 环境下网络信息交换的基于XML的通讯协议。在此协议下,软件组件或应用程序能够通过标准的HTTP
 协议进行通讯。它的设计目标就是简单性和扩展性,这有助于大量异构程序和平台之间的互操作性,
 从而使存在的应用程序能够被广泛的用户访问。
  优势:
 (1).跨平台;
 (2).SOAP协议是基于XML和HTTP这些业界的标准的,得到了所有的重要公司的支持。
 (3).由于使用了SOAP,数据是以ASCII文本的方式而非二进制传输,调试很方便;并且由于这样,
 它的数据容易通过防火墙,不需要防火墙为了程序而单独开一个“漏洞”。
 (4).此外,WebService实现的技术难度要比CORBA和DCOM小得多。
 (5).要实现B2B集成,EDI比较完善与比较复杂;而用WebService则可以低成本的实现,
 小公司也可以用上。
 (6).在C/S的程序中,WebService可以实现网页无整体刷新的与服务器打交道并取数。
  缺点:
 (1).WebService使用了XML对数据封装,会造成大量的数据要在网络中传输。
 (2).WebService规范没有规定任何与实现相关的细节,包括对象模型、编程语言,这一点,它不如CORBA。
28、什么是Web容器?
   实现J2EE规范中web协议的应用.该协议定义了web程序的运行时环境,包括:并发性,安全性,
 生命周期管理等等.
29、Jdo是什么?
   JDO是Java对象持久化的新的规范,为java data object的简称,也是一个用于存取某种数据仓
 库中的对象的标准化API。JDO提供了透明的对象存储,因此对开发人员来说,存储数据对象完全不
 需要额外的代码(如JDBC API的使用)。这些繁琐的例行工作已经转移到JDO产品提供商身上,使
 开发人员解脱出来,从而集中时间和精力在业务逻辑上。另外,JDO很灵活,因为它可以在任何数据
 底层上运行。JDBC只是面向关系数据库(RDBMS)JDO更通用,提供到任何数据底层的存储功能,比
 如关系数据库、文件、XML以及对象数据库(ODBMS)等等,使得应用可移植性更强。
30、作用域public,private,protected,以及不写时的区别?
   答:区别如下: 作用域 当前类 同一package 子孙类 其他package
       public     √      √      √          √        √
       protected  √      √      √          ×        ×
       friendly   √      √      ×          ×        ×
       private    √      ×      ×          ×        ×
       不写时默认为friendly 。
31、垃圾回收的优点和原理。并考虑2种回收机制。
   Java语言中一个显著的特点就是引入了垃圾回收机制,使c++程序员最头疼的内存管理的问题迎
 刃而解,它使得Java程序员在编写程序的时候不再需要考虑内存管理。由于有个垃圾回收机制,Java
 中的对象不再有“作用域”的概念,只有对象的引用才有“作用域”。垃圾回收可以有效的防止内存泄露,
 有效的使用可以使用的内存。垃圾回收器通常是作为一个单独的低级别的线程运行,不可预知的情况下
 对内存堆中已经死亡的或者长时间没有使用的对象进行清楚和回收,程序员不能实时的调用垃圾回收
 器对某个对象或所有对象进行垃圾回收。回收机制有分代复制垃圾回收和标记垃圾回收,增量垃圾回收。
32、在java中一个类被声明为final类型,表示了什么意思?
   表示该类不能被继承,是顶级类。
   
33、谈谈final, finally, finalize的区别?
   final—修饰符(关键字)如果一个类被声明为final,意味着它不能再派生出新的子类,不能作
 为父类被继承。因此一个类不能既被声明为 abstract的,又被声明为final的。将变量或方法声明
 为final,可以保证它们在使用中不被改变。被声明为final的变量必须在声明时给定初值,而在以后
 的引用中只能读取,不可修改。被声明为final的方法也同样只能使用,不能重载。
 
 finally—再异常处理时提供 finally 块来执行任何清除操作。如果抛出一个异常,那么相匹配的
  catch 子句就会执行,然后控制就会进入 finally 块(如果有的话)。 finalize—方法名。Java
  技术允许使用 finalize() 方法在垃圾收集器将对象从内存中清除出去之前做必要的清理工作。这个
  方法是由垃圾收集器在确定这个对象没有被引用时对这个对象调用的。它是在 Object 类中定义的,
  因此所有的类都继承了它。子类覆盖 finalize() 方法以整理系统资源或者执行其他清理工作。
  finalize() 方法是在垃圾收集器删除对象之前对这个对象调用的。
34、Collection 和 Collections的区别。
  Collections是个java.util下的类,它包含有各种有关集合操作的静态方
  Collection是个java.util下的接口,它是各种集合结构的父接口。
35、String s = new String("xyz");创建了几个String Object?
  两个对象,一个是“xyx”,一个是指向“xyx”的引用对象s。
36、Math.round(11.5)等於多少? Math.round(-11.5)等於多少?
  Math.round(11.5)返回(long)12,Math.round(-11.5)返回(long)-11;
37、short s1 = 1; s1 = s1 + 1;有什么错? short s1 = 1; s1 += 1;有什么错?
   short s1 = 1; s1 = s1 + 1;有错,s1是short型,s1+1是int型,不能显式转化为short型。
 可修改为s1 =(short)(s1 + 1) 。short s1 = 1; s1 += 1正确。
38、数组有没有length()这个方法? String有没有length()这个方法?
  数组没有length()这个方法,有length的属性。
  String有有length()这个方法。
39、Overload和Override的区别。Overloaded的方法是否可以改变返回值的类型?
   方法的重写Overriding和重载Overloading是Java多态性的不同表现。重写Overriding是父类
 与子类之间多态性的一种表现,重载Overloading是一个类中多态性的一种表现。如果在子类中定
 义某方法与其父类有相同的名称和参数,我们说该方法被重写 (Overriding)。子类的对象使用这
 个方法时,将调用子类中的定义,对它而言,父类中的定义如同被“屏蔽”了。如果在一个类中定义
 了多个同名的方法,它们或有不同的参数个数或有不同的参数类型,则称为方法的重载(Overloading)。
 Overloaded的方法是可以改变返回值的类型。
 
40、Set里的元素是不能重复的,那么用什么方法来区分重复与否呢? 是用==还是equals()? 它们有何区别?
  Set里的元素是不能重复的,那么用iterator()方法来区分重复与否。equals()是判读两个Set是否相等。
41、List, Set, Map是否继承自Collection接口?
  List,Set是 。Map不是
42、abstract class和interface有什么区别?
   声明方法的存在而不去实现它的类被叫做抽象类(abstract class),它用于要创建一个体现某
 些基本行为的类,并为该类声明方法,但不能在该类中实现该类的情况。不能创建abstract 类的实例。
 然而可以创建一个变量,其类型是一个抽象类,并让它指向具体子类的一个实例。不能有抽象构造函
 数或抽象静态方法。Abstract 类的子类为它们父类中的所有抽象方法提供实现,否则它们也是抽象
 类为。取而代之,在子类中实现该方法。知道其行为的其它类可以在类中实现这些方法。接口
 (interface)是抽象类的变体。在接口中,所有方法都是抽象的。多继承性可通过实现这样的接口
 而获得。接口中的所有方法都是抽象的,没有一个有程序体。接口只可以定义static final成员变量。
 接口的实现与子类相似,除了该实现类不能从接口定义中继承行为。当类实现特殊接口时,它定义
 (即将程序体给予)所有这种接口的方法。然后,它可以在实现了该接口的类的任何对象上调用接口的
 方法。由于有抽象类,它允许使用接口名作为引用变量的类型。通常的动态联编将生效。引用可以转换
 到接口类型或从接口类型转换,instanceof 运算符可以用来决定某对象的类是否实现了接口。
43、abstract的method是否可同时是static,是否可同时是native,是否可同时是synchronized?
  都不能。
44、、接口是否可继承接口? 抽象类是否可实现(implements)接口?
   抽象类是否可继承实体类(concrete class)?
   接口可以继承接口。抽象类可以实现(implements)接口,抽象类是否可继承实体类,
 但前提是实体类必须有明确的构造函数。
 
45、构造器Constructor是否可被override?
  构造器Constructor不能被继承,因此不能重写Overriding,但可以被重载Overloading。
46、swtich是否能作用在byte上,是否能作用在long上,是否能作用在String?
   switch(expr1)中,expr1是一个整数表达式。因此传递给 switch 和 case 语句的参数应该是
  int、 short、 char 或者 byte。long,string 都不能作用于swtich。
EJB 方面:
1、EJB2.0有哪些内容?分别用在什么场合? EJB2.0和EJB1.1的区别?
   答:规范内容包括Bean提供者,应用程序装配者,EJB容器,EJB配置工具,EJB服务提供者,
 系统管理员。这里面,EJB容器是EJB之所以能够运行的核心。EJB容器管理着EJB的创建,撤消,
 激活,去活,与数据库的连接等等重要的核心工作。JSP,Servlet,EJB,JNDI,JDBC,JMS.....
2、EJB与JAVA BEAN的区别?
   答:Java Bean 是可复用的组件,对Java Bean并没有严格的规范,理论上讲,任何一个Java类
 都可以是一个Bean。但通常情况下,由于Java Bean是被容器所创建(如Tomcat)的,所以Java Bean
 应具有一个无参的构造器,另外,通常Java Bean还要实现Serializable接口用于实现Bean的持久性。
 Java Bean实际上相当于微软COM模型中的本地进程内COM组件,它是不能被跨进程访问的。Enterprise
  Java Bean 相当于DCOM,即分布式组件。它是基于Java的远程方法调用(RMI)技术的,所以EJB可以
 被远程访问(跨进程、跨计算机)。但EJB必须被布署在诸如Webspere、WebLogic这样的容器中,EJB客
 户从不直接访问真正的EJB组件,而是通过其容器访问。EJB容器是EJB组件的代理,EJB组件由容器所
 创建和管理。客户通过容器来访问真正的EJB组件。
 
3、EJB包括(SessionBean,EntityBean)说出他们的生命周期,及如何管理事务的?
   SessionBean:Stateless Session Bean 的生命周期是由容器决定的,当客户机发出请求要建立
 一个Bean的实例时,EJB容器不一定要创建一个新的Bean的实例供客户机调用,而是随便找一个
 现有的实例提供给客户机。当客户机第一次调用一个Stateful Session Bean 时,容器必须立即
 在服务器中创建一个新的Bean实例,并关联到客户机上,以后此客户机调用Stateful Session Bean
 的方法时容器会把调用分派到与此客户机相关联的Bean实例。
 EntityBean:Entity Beans能存活相对较长的时间,并且状态是持续的。只要数据库中的数据存在,
 Entity beans就一直存活。而不是按照应用程序或者服务进程来说的。即使EJB容器崩溃了,Entity
 beans也是存活的。Entity Beans生命周期能够被容器或者 Beans自己管理。
 EJB通过以下技术管理实务:对象管理组织(OMG)的对象实务服务(OTS),Sun Microsystems的
 Transaction Service(JTS)、Java Transaction API(JTA),开发组(X/Open)的XA接口。
4、EJB是基于哪些技术实现的?并说出SessionBean和EntityBean的区别,
  StatefulBean和StatelessBean的区别?
   答:EJB包括Session Bean、Entity Bean、Message Driven Bean,基于JNDI、RMI、JAT等技术实现。
 SessionBean在J2EE应用程序中被用来完成一些服务器端的业务操作,例如访问数据库、调用其他EJB组件。
 EntityBean被用来代表应用系统中用到的数据。
 对于客户机,SessionBean是一种非持久性对象,它实现某些在服务器上运行的业务逻辑。
 对于客户机,EntityBean是一种持久性对象,它代表一个存储在持久性存储器中的实体的对象视图,
 或是一个由现有企业应用程序实现的实体。
 Session Bean 还可以再细分为 Stateful Session Bean 与 Stateless Session Bean ,
 这两种的 Session Bean都可以将系统逻辑放在 method之中执行,不同的是 Stateful Session Bean
 可以记录呼叫者的状态,因此通常来说,一个使用者会有一个相对应的 Stateful Session Bean 的实体。
 Stateless Session Bean 虽然也是逻辑组件,但是他却不负责记录使用者状态,也就是说当使用者呼叫
  Stateless Session Bean 的时候,EJB Container 并不会找寻特定的 Stateless Session Bean 的实
  体来执行这个 method。换言之,很可能数个使用者在执行某个 Stateless Session Bean 的 methods
  时,会是同一个 Bean 的 Instance 在执行。从内存方面来看, Stateful Session Bean 与
  Stateless Session Bean 比较, Stateful Session Bean 会消耗 J2EE Server 较多的内存,然而
  Stateful Session Bean 的优势却在于他可以维持使用者的状态。
 
5、EJB的角色和三个对象
   答:一个完整的基于EJB的分布式计算结构由六个角色组成,这六个角色可以由不同的开发商提供,
 每个角色所作的工作必须遵循Sun公司提供的EJB规范,以保证彼此之间的兼容性。这六个角色分别是
 EJB组件开发者(Enterprise Bean Provider) 、应用组合者(Application Assembler)、部署者
 (Deployer)、EJB 服务器提供者(EJB Server Provider)、EJB 容器提供者(EJB Container
 Provider)、系统管理员(System Administrator)三个对象是Remote(Local)接口、Home
 (LocalHome)接口,Bean类。
6、EJB容器提供的服务
   答:主要提供声明周期管理、代码产生、持续性管理、安全、事务管理、锁和并发行管理等服务。
7、EJB规范规定EJB中禁止的操作有哪些?
   答:1.不能操作线程和线程API(线程API指非线程对象的方法如notify,wait等),
   2.不能操作awt,
   3.不能实现服务器功能,
   4.不能对静态属生存取,
   5.不能使用IO操作直接存取文件系统,
   6.不能加载本地库.
   7.不能将this作为变量和返回,
   8.不能循环调用。
8、remote接口和home接口主要作用
   答:remote接口定义了业务方法,用于EJB客户端调用业务方法。
 home接口是EJB工厂用于创建和移除查找EJB实例。
9、bean 实例的生命周期
   答:对于Stateless Session Bean、Entity Bean、Message Driven Bean一般存在缓冲池管理,
 而对于Entity Bean和Statefull Session Bean存在Cache管理,通常包含创建实例,设置上下文、
 创建EJB Object(create)、业务方法调用、remove等过程,对于存在缓冲池管理的Bean,在create
 之后实例并不从内存清除,而是采用缓冲池调度机制不断重用实例,而对于存在Cache管理的Bean则
 通过激活和去激活机制保持Bean的状态并限制内存中实例数量。
 
10、EJB的激活机制
   答:以Stateful Session Bean 为例:其Cache大小决定了内存中可以同时存在的Bean实例的
 数量,根据MRU或NRU算法,实例在激活和去激活状态之间迁移,激活机制是当客户端调用某个EJB
 实例业务方法时,如果对应EJB Object发现自己没有绑定对应的Bean实例则从其去激活Bean存储中
 (通过序列化机制存储实例)回复(激活)此实例。状态变迁前会调用对应的ejbActive和ejbPassivate
 方法。
 
11、EJB的几种类型
   答:会话(Session)Bean ,实体(Entity)Bean 消息驱动的(Message Driven)Bean
 会话Bean又可分为有状态(Stateful)和无状态(Stateless)两种
 实体Bean可分为Bean管理的持续性(BMP)和容器管理的持续性(CMP)两种。
 
12、客服端调用EJB对象的几个基本步骤
   答:设置JNDI服务工厂以及JNDI服务地址系统属性,查找Home接口,从Home接口调用Create
 方法创建Remote接口,通过Remote接口调用其业务方法。
J2EE、MVC 方面
1、应用服务器与WEB SERVER的区别?
   简单的说就是WEB SERVER提供HTTP服务应用服务器提供各种服务。
   
2、J2EE是什么?
   答:Je22是Sun公司提出的多层(multi-diered),分布式(distributed),基于组件(component-base)
 的企业级应用模型(enterpriese application model).在这样的一个应用系统中,可按照功能划
 分为不同的组件,这些组件又可在不同计算机上,并且处于相应的层次(tier)中。所属层次包括
 客户层(clietn tier)组件,web层和组件,Business层和组件,企业信息系统(EIS)层。
3、WEB SERVICE名词解释。JSWDL开发包的介绍。JAXP、JAXM的解释。SOAP、UDDI,WSDL解释。
   答:Web Service描述语言WSDL SOAP即简单对象访问协议(Simple Object Access Protocol),
 它是用于交换XML编码信息的轻量级协议。 UDDI 的目的是为电子商务建立标准;UDDI是一套基于
 Web的、分布式的、为Web Service提供的、信息注册中心的实现标准规范,同时也包含一组使企业
 能将自身提供的Web Service注册,以使别的企业能够发现的访问协议的实现标准。
 
4、BS与CS的联系与区别。
   C/S是Client/Server的缩写。服务器通常采用高性能的PC、工作站或小型机,并采用大型数
 据库系统,如Oracle、Sybase、Informix或 SQL Server。客户端需要安装专用的客户端软件。
 B/S是Brower/Server的缩写,客户机上只要安装一个浏览器(Browser),如Netscape Navigator
 或Internet Explorer,服务器安装Oracle、Sybase、Informix或 SQL Server等数据库。在这种结
 构下,用户界面完全通过WWW浏览器实现,一部分事务逻辑在前端实现,但是主要事务逻辑在服务器
 端实现。浏览器通过Web Server 同数据库进行数据交互。
 
  1.硬件环境不同: 
 C/S 一般建立在专用的网络上, 小范围里的网络环境, 局域网之间再通过专门服务器提供连接和数
 据交换服务.B/S 建立在广域网之上的, 不必是专门的网络硬件环境,例与电话上网, 租用设备.
 信息自己管理. 有比C/S更强的适应范围, 一般只要有操作系统和浏览器就行。
 
  2.对安全要求不同:
  C/S 一般面向相对固定的用户群, 对信息安全的控制能力很强. 一般高度机密的信息系统采用
  C/S 结构适宜. 可以通过B/S发布部分可公开信息.  B/S 建立在广域网之上, 对安全的控制能
  力相对弱, 可能面向不可知的用户。
 
  3.对程序架构不同:
  C/S 程序可以更加注重流程, 可以对权限多层次校验, 对系统运行速度可以较少考虑.
  B/S 对安全以及访问速度的多重的考虑, 建立在需要更加优化的基础之上. 比C/S有更高的要求
  B/S结构的程序架构是发展的趋势, 从MS的.Net系列的BizTalk 2000 Exchange 2000等, 全面支
  持网络的构件搭建的系统. SUN 和IBM推的JavaBean 构件技术等,使 B/S更加成熟.
 
  4.软件重用不同:
  C/S 程序可以不可避免的整体性考虑, 构件的重用性不如在B/S要求下的构件的重用性好.
  B/S 对的多重结构,要求构件相对独立的功能. 能够相对较好的重用.就入买来的餐桌可以再利用,
  而不是做在墙上的石头桌子。
 
  5.系统维护不同:
  C/S 程序由于整体性, 必须整体考察, 处理出现的问题以及系统升级. 升级难. 可能是再做一
  个全新的系统B/S 构件组成,方面构件个别的更换,实现系统的无缝升级. 系统维护开销减到最小.
  用户从网上自己下载安装就可以实现升级.
 
  6.处理问题不同:
  C/S 程序可以处理用户面固定, 并且在相同区域, 安全要求高需求, 与操作系统相关. 应该都是
  相同的系统  B/S 建立在广域网上, 面向不同的用户群, 分散地域, 这是C/S无法作到的.
  与操作系统平台关系最小.
 
  7.用户接口不同:
  C/S 多是建立的Window平台上,表现方法有限, 对程序员普遍要求较高B/S 建立在浏览器上, 有更
  加丰富和生动的表现方式与用户交流. 并且 大部分难度减低,减低开发成本.
 
  8.信息流不同:
  C/S 程序一般是典型的中央集权的机械式处理, 交互性相对低B/S 信息流向可变化,
  B-B B-C B-G等信息、流向的变化, 更像交易中心。
 
5、STRUTS的应用(如STRUTS架构)
   答:Struts是采用Java Servlet/JavaServer Pages技术,开发Web应用程序的开放源码的
 framework。 采用Struts能开发出基于MVC(Model-View-Controller)设计模式的应用构架。
 Struts有如下的主要功能: 一.包含一个controller servlet,能将用户的请求发送到相应的
 Action对象。 二.JSP自由tag库,并且在controller servlet中提供关联支持,帮助开发员创建交
 互式表单应用。 三.提供了一系列实用对象:XML处理、通过Java reflection APIs自动处理
 JavaBeans属性、国际化的提示和消息。
 
6、MVC的各个部分都有那些技术来实现?如何实现?
   答:MVC是Model-View-Controller的简写。"Model" 代表的是应用的业务逻辑(通过
 JavaBean,EJB组件实现), "View" 是应用的表示面(由JSP页面产生),"Controller"
  是提供应用的处理过程控制(一般是一个Servlet),通过这种设计模型把应用逻辑,处理过程和
 显示逻辑分成不同的组件实现。这些组件可以进行交互和重用。
 
Xml方面
1、xml有哪些解析技术?区别是什么?
   答:有DOM,SAX,STAX等 DOM:处理大型文件时其性能下降的非常厉害。这个问题是由DOM的树结
 构所造成的,这种结构占用的内存较多,而且DOM必须在解析文件之前把整个文档装入内存,适
 合对XML的随机访问SAX:不现于DOM,SAX是事件驱动型的XML解析方式。它顺序读取XML文件,不
 需要一次全部装载整个文件。当遇到像文件开头,文档结束,或者标签开头与标签结束时,它
 会触发一个事件,用户通过在其回调事件中写入处理代码来处理XML文件,适合对XML的顺序访问
 STAX:Streaming API for XML (StAX)
2、你在项目中用到了xml技术的哪些方面?如何实现的?
   答:用到了数据存贮,信息配置两方面。在做数据交换平台时,将不能数据源的数据组装成XML
 文件,然后将XML文件压缩打包加密后通过网络传送给接收者,接收解密与解压缩后再同XML文件中
 还原相关信息进行处理。在做软件配置时,利用XML可以很方便的进行,软件的各种配置参数都存贮
 在XML文件中。
 
设计模式方面
1、开发中都用到了那些设计模式?用在什么场合?
   答:每个模式都描述了一个在我们的环境中不断出现的问题,然后描述了该问题的解决方案的
 核心。通过这种方式,你可以无数次地使用那些已有的解决方案,无需在重复相同的工作。主要用到
 了MVC的设计模式。用来开发JSP/Servlet或者J2EE的相关应用。简单工厂模式等。
2、UML方面
   答:标准建模语言UML。用例图,静态图(包括类图、对象图和包图),行为图,交互图(顺序图,
 合作图),实现图。
 
CORBA方面
1、CORBA是什么?用途是什么?
   答:CORBA 标准是公共对象请求代理结构(Common Object Request Broker Architecture),
 由对象管理组织(Object Management Group,缩写为 OMG)标准化。它的组成是接口定义语言(IDL),
  语言绑定(binding:也译为联编)和允许应用程序间互操作的协议。 其目的为: 用不同的程序设计
  语言书写 在不同的进程中运行 为不同的操作系统开发。
 
LINUX方面
1、LINUX下线程,GDI类的解释。
   答:LINUX实现的就是基于核心轻量级进程的"一对一"线程模型,一个线程实体对应一个核心
 轻量级进程,而线程之间的管理在核外函数库中实现。 GDI类为图像设备编程接口类库。
 
数据库方面:
1、 存储过程和函数的区别?
   存储过程是用户定义的一系列sql语句的集合,涉及特定表或其它对象的任务,用户可以调用存储
 过程,而函数通常是数据库已定义的方法,它接收参数并返回某种类型的值并且不涉及特定用户表。
2、 事务是什么?
   事务是作为一个逻辑单元执行的一系列操作,一个逻辑工作单元必须有四个属性,称为 ACID
 (原子性、一致性、隔离性和持久性)属性,只有这样才能成为一个事务:
  原子性:
 事务必须是原子工作单元;对于其数据修改,要么全都执行,要么全都不执行。
 
  一致性:
 事务在完成时,必须使所有的数据都保持一致状态。在相关数据库中,所有规则都必须应用于事
 务的修改,以保持所有数据的完整性。事务结束时,所有的内部数据结构(如 B 树索引或双向链表)
 都必须是正确的。
  隔离性:
 由并发事务所作的修改必须与任何其它并发事务所作的修改隔离。事务查看数据时数据所处的状态,
 要么是另一并发事务修改它之前的状态,要么是另一事务修改它之后的状态,事务不会查看中间状
 态的数据。这称为可串行性,因为它能够重新装载起始数据,并且重播一系列事务,以使数据结束时
 的状态与原始事务执行的状态相同。
  持久性:
 事务完成之后,它对于系统的影响是永久性的。该修改即使出现系统故障也将一直保持。
3、 游标的作用?如何知道游标已经到了最后?
   游标用于定位结果集的行,通过判断全局变量@@FETCH_STATUS可以判断是否到了最后,通常此
   变量不等于0表示出错或到了最后。
4、 触发器分为事前触发和事后触发,这两种触发有和区别。语句级触发和行级触发有何区别?
   事前触发器运行于触发事件发生之前,而事后触发器运行于触发事件发生之后。通常事前触发器
 可以获取事件之前和新的字段值。语句级触发器可以在语句执行前或后执行,而行级触发在触发器所
 影响的每一行触发一次。
 
Hibernate 方面
一、Hibernate是JDBC的轻量级的对象封装,它是一个独立的对象持久层框架,和App Server,和EJB没
 有什么必然的联系。Hibernate可以用在任何JDBC可以使用的场合,例如Java应用程序的数据库访问代码,
 DAO接口的实现类,甚至可以是BMP里面的访问数据库的代码。从这个意义上来说,Hibernate和EB不是
 一个范畴的东西,也不存在非此即彼的关系。
二、Hibernate是一个和JDBC密切关联的框架,所以Hibernate的兼容性和JDBC驱动,和数据库都有一定
 的关系,但是和使用它的Java程序,和App Server没有任何关系,也不存在兼容性问题。
三、Hibernate不能用来直接和Entity Bean做对比,只有放在整个J2EE项目的框架中才能比较。并且即
 使是放在软件整体框架中来看,Hibernate也是做为JDBC的替代者出现的,而不是Entity Bean的替代者
 出现的,让我再列一次我已经列n次的框架结构:
传统的架构:
1) Session Bean <-> Entity Bean <-> DB
为了解决性能障碍的替代架构:
2) Session Bean <-> DAO <-> JDBC <-> DB
使用Hibernate来提高上面架构的开发效率的架构:
3) Session Bean <-> DAO <-> Hibernate <-> DB
就上面3个架构来分析:
1、内存消耗:采用JDBC的架构2无疑是最省内存的,Hibernate的架构3次之,EB的架构1最差。
2、运行效率:如果JDBC的代码写的非常优化,那么JDBC架构运行效率最高,但是实际项目中,这一点
 几乎做不到,这需要程序员非常精通JDBC,运用Batch语句,调整PreapredStatement的Batch Size和
 Fetch Size等参数,以及在必要的情况下采用结果集cache等等。而一般情况下程序员是做不到这一点的。
 因此Hibernate架构表现出最快的运行效率。EB的架构效率会差的很远。
3、开发效率:在有JBuilder的支持下以及简单的项目,EB架构开发效率最高,JDBC次之,Hibernate
 最差。但是在大的项目,特别是持久层关系映射很复杂的情况下,Hibernate效率高的惊人,JDBC次之,
 而EB架构很可能会失败。
4、分布式,安全检查,集群,负载均衡的支持由于有SB做为Facade,3个架构没有区别。
四、EB和Hibernate学习难度在哪里?
 EJB的难度在哪里?不在复杂的XML配置文件上,而在于EB运用稍微不慎,就有严重的性能障碍。所以难
 在你需要学习很多EJB设计模式来避开性能问题,需要学习App Server和EB的配置来优化EB的运行效率。
 做EB的开发工作,程序员的大部分精力都被放到了EB的性能问题上了,反而没有更多的精力关注本身就
 主要投入精力去考虑的对象持久层的设计上来。
 Hibernate难在哪里?不在Hibernate本身的复杂,实际上Hibernate非常的简单,难在Hibernate太灵活了。
 当你用EB来实现持久层的时候,你会发现EB实在是太笨拙了,笨拙到你根本没有什么可以选择的余地,所
 以你根本就不用花费精力去设计方案,去平衡方案的好坏,去费脑筋考虑选择哪个方案,因为只有唯一
 的方案摆在你面前,你只能这么做,没得选择。
 
 Hibernate相反,它太灵活了,相同的问题,你至少可以设计出十几种方案来解决,所以特别的犯难,究
 竟用这个,还是用那个呢?这些方案之间到底有什么区别呢?他们的运行原理有什么不同?运行效率哪
 个比较好?光是主键生成,就有七八种方案供你选择,你为难不为难?集合属性可以用Set,可以用List,还可以用Bag,到底哪个效率高,你为难不为难?查询可以用iterator,可以用list,哪个好,有什么区别?你为难不为难?复合主键你可以直接在hbm里面配置,也可以自定义CustomerType,哪种比较好些?你为难不为难?对于一个表,你可以选择单一映射一个对象,也可以映射成父子对象,还可以映射成两个1:1的对象,在什么情况下用哪种方案比较好,你为难不为难?
 
 这个列表可以一直开列下去,直到你不想再看下去为止。当你面前摆着无数的眼花缭乱的方案的时候,
 你会觉得幸福呢?还是悲哀呢?如果你是一个负责的程序员,那么你一定会仔细研究每种方案的区别,
 每种方案的效率,每种方案的适用场合,你会觉得你已经陷入进去拔不出来了。如果是用EB,你第一秒
 种就已经做出了决定,根本没得选择,比如说集合属性,你只能用Collection,如果是Hibernate,
 你会在Bag,List和Set之间来回犹豫不决,甚至搞不清楚的话,程序都没有办法写。
Interviewing | 阅读 5268 次
文章评论,共0条
游客请输入验证码
浏览569733次