Java面试题目集

Java软件开发工程师面试题集

Java简答题、JAVA编程题、JAVA代码查错、Java程序段结果、C++/C 试题、数据库、其他)

Java简答题(共计134题)

1、面向对象的特征有哪些方面   

1.抽象:

抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面。抽象并不打算了解全部问题,而只是选择其中的一部分,暂时不用部分细节。抽象包括两个方面,一是过程抽象,二是数据抽象。

2.继承:

继承是一种联结类的层次模型,并且允许和鼓励类的重用,它提供了一种明确表述共性的方法。对象的一个新类可以从现有的类中派生,这个过程称为类继承。新类继承了原始类的特性,新类称为原始类的派生类(子类),而原始类称为新类的基类(父类)。派生类可以从它的基类那里继承方法和实例变量,并且类可以修改或增加新的方法使之更适合特殊的需要。

3.封装:

封装是把过程和数据包围起来,对数据的访问只能通过已定义的界面。面向对象计算始于这个基本概念,即现实世界可以被描绘成一系列完全自治、封装的对象,这些对象通过一个受保护的接口访问其他对象。

4. 多态性:

多态性是指允许不同类的对象对同一消息作出响应。多态性包括参数化多态性和包含多态性。多态性语言具有灵活、抽象、行为共享、代码共享的优势,很好的解决了应用程序函数同名问题。

2String是最基本的数据类型吗?

基本数据类型包括byteintcharlongfloatdoublebooleanshort

java.lang.String类是final类型的,因此不可以继承这个类、不能修改这个类。为了提高效率节省空间,我们应该用StringBuffer

3int  Integer 有什么区别

Java 提供两种不同的类型:引用类型和原始类型(或内置类型)。Intjava的原始数据类型,Integerjavaint提供的封装类。Java为每个原始类型提供了封装类。

原始类型封装类

boolean    Boolean

char           Character

byte           Byte

short                   Short

int              Integer

long           Long

float           Float

double      Double

引用类型和原始类型的行为完全不同,并且它们具有不同的语义。引用类型和原始类型具有不同的特征和用法,它们包括:大小和速度问题,这种类型以哪种类型的数据结构存储,当引用类型和原始类型用作某个类的实例数据时所指定的缺省值。对象引用实例变量的缺省值为 null,而原始类型实例变量的缺省值与它们的类型有关。

4String StringBuffer的区别

JAVA平台提供了两个类:StringStringBuffer,它们可以储存和操作字符串,即包含多个字符的字符数据。这个String类提供了数值不可改变的字符串。而这个StringBuffer类提供的字符串进行修改。当你知道字符数据要改变的时候你就可以使用StringBuffer。典型地,你可以使用StringBuffers来动态构造字符数据。

5、运行时异常与一般异常有何异同?

异常表示程序运行过程中可能出现的非正常状态,运行时异常表示虚拟机的通常操作中可能遇到的异常,是一种常见运行错误。java编译器要求方法必须声明抛出可能发生的非运行时异常,但是并不要求必须声明抛出未被捕获的运行时异常。

6、说出Servlet的生命周期,并说出ServletCGI的区别。

Servlet被服务器实例化后,容器运行其init方法,请求到达时运行其service方法,service方法自动派遣运行与请求对应的doXXX方法(doGetdoPost)等,当服务器决定将实例销毁的时候调用其destroy方法。

cgi的区别在于servlet处于服务器进程中,它通过多线程方式运行其service方法,一个实例可以服务于多个请求,并且其实例一般不会销毁,而CGI对每个请求都产生新的进程,服务完成后就销毁,所以效率上低于servlet

7、说出ArrayList,Vector, LinkedList的存储性能和特性

ArrayListVector都是使用数组方式存储数据,此数组元素数大于实际存储的数据以便增加和插入元素,它们都允许直接按序号索引元素,但是插入元素要涉及数组元素移动等内存操作,所以索引数据快而插入数据慢,Vector由于使用了synchronized方法(线程安全),通常性能上较ArrayList差,而LinkedList使用双向链表实现存储,按序号索引数据需要进行前向或后向遍历,但是插入数据时只需要记录本项的前后项即可,所以插入速度较快。

8EJB是基于哪些技术实现的?并说出SessionBeanEntityBean的区别,StatefulBeanStatelessBean的区别。

    EJB包括Session BeanEntity BeanMessage Driven Bean,基于JNDIRMIJAT等技术实现。

SessionBeanJ2EE应用程序中被用来完成一些服务器端的业务操作,例如访问数据库、调用其他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 的优势却在于他可以维持使用者的状态。

9Collection  Collections的区别。 

  Collection是集合类的上级接口,继承与他的接口主要有Set List.

Collections是针对集合类的一个帮助类,他提供一系列静态方法实现对各种集合的搜索、排序、线程安全化等操作。

10&&&的区别。 

    &是位运算符,表示按位与运算,&&是逻辑运算符,表示逻辑与(and)。

11HashMapHashtable的区别。 

    HashMapHashtable的轻量级实现(非线程安全的实现),他们都完成了Map接口,主要区别在于HashMap允许空(null)键值(key,由于非线程安全,效率上可能高于Hashtable

HashMap允许将null作为一个entrykey或者value,而Hashtable不允许。

HashMapHashtablecontains方法去掉了,改成containsvaluecontainsKey。因为contains方法容易让人引起误解。

Hashtable继承自Dictionary类,而HashMapJava1.2引进的Map interface的一个实现。

最大的不同是,Hashtable的方法是Synchronize的,而HashMap不是,在多个线程访问Hashtable时,不需要自己为它的方法实现同步,而HashMap 就必须为之提供外同步。 

HashtableHashMap采用的hash/rehash算法都大概一样,所以性能不会有很大的差异。

12final, finally, finalize的区别。 

  final 用于声明属性,方法和类,分别表示属性不可变,方法不可覆盖,类不可继承。

finally是异常处理语句结构的一部分,表示总是执行。

finalizeObject类的一个方法,在垃圾收集器执行的时候会调用被回收对象的此方法,可以覆盖此方法提供垃圾收集时的其他资源回收,例如关闭文件等。

13sleep()  wait() 有什么区别

    sleep是线程类(Thread)的方法,导致此线程暂停执行指定时间,给执行机会给其他线程,但是监控状态依然保持,到时后会自动恢复。调用sleep不会释放对象锁。

waitObject类的方法,对此对象调用wait方法导致本线程放弃对象锁,进入等待此对象的等待锁定池,只有针对此对象发出notify方法(或notifyAll)后本线程才进入对象锁定池准备获得对象锁进入运行状态。

14OverloadOverride的区别。Overloaded的方法是否可以改变返回值的类型?

方法的重写Overriding和重载OverloadingJava多态性的不同表现。重写Overriding是父类与子类之间多态性的一种表现,重载Overloading是一个类中多态性的一种表现。如果在子类中定义某方法与其父类有相同的名称和参数,我们说该方法被重写 (Overriding)。子类的对象使用这个方法时,将调用子类中的定义,对它而言,父类中的定义如同被"屏蔽"了。如果在一个类中定义了多个同名的方法,它们或有不同的参数个数或有不同的参数类型,则称为方法的重载(Overloading)Overloaded的方法是可以改变返回值的类型。

15errorexception有什么区别?

error 表示恢复不是不可能但很困难的情况下的一种严重问题。比如说内存溢出。不可能指望程序能处理这样的情况。

    exception 表示一种设计或实现问题。也就是说,它表示如果程序运行正常,从不会发生的情况。

16、同步和异步有何异同,在什么情况下分别使用他们?举例说明。

如果数据将在线程间共享。例如正在写的数据以后可能被另一个线程读到,或者正在读的数据可能已经被另一个线程写过了,那么这些数据就是共享数据,必须进行同步存取。

当应用程序在对象上调用了一个需要花费很长时间来执行的方法,并且不希望让程序等待方法的返回时,就应该使用异步编程,在很多情况下采用异步途径往往更有效率。

17abstract classinterface有什么区别?

声明方法的存在而不去实现它的类被叫做抽象类(abstract class),它用于要创建一个体现某些基本行为的类,并为该类声明方法,但不能在该类中实现该类的情况。不能创建abstract 类的实例。然而可以创建一个变量,其类型是一个抽象类,并让它指向具体子类的一个实例。不能有抽象构造函数或抽象静态方法。Abstract 类的子类为它们父类中的所有抽象方法提供实现,否则它们也是抽象类为。取而代之,在子类中实现该方法。知道其行为的其它类可以在类中实现这些方法。

接口(interface)是抽象类的变体。在接口中,所有方法都是抽象的。多继承性可通过实现这样的接口而获得。接口中的所有方法都是抽象的,没有一个有程序体。接口只可以定义static final成员变量。接口的实现与子类相似,除了该实现类不能从接口定义中继承行为。当类实现特殊接口时,它定义(即将程序体给予)所有这种接口的方法。然后,它可以在实现了该接口的类的任何对象上调用接口的方法。由于有抽象类,它允许使用接口名作为引用变量的类型。通常的动态联编将生效。引用可以转换到接口类型或从接口类型转换,instanceof 运算符可以用来决定某对象的类是否实现了接口。

18heapstack有什么区别。

栈是一种线形集合,其添加和删除元素的操作应在同一段完成。栈按照后进先出的方式进行处理。

堆是栈的一个组成元素

19forward redirect的区别

forward是服务器请求资源,服务器直接访问目标地址的URL,把那个URL的响应内容读取过来,然后把这些内容再发给浏览器,浏览器根本不知道服务器发送的内容是从哪儿来的,所以它的地址栏中还是原来的地址。

    redirect就是服务端根据逻辑,发送一个状态码,告诉浏览器重新去请求那个地址,一般来说浏览器会用刚才请求的所有参数重新请求,所以session,request参数都可以获取。

20EJBJAVA 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必须被布署在诸如WebspereWebLogic这样的容器中,EJB客户从不直接访问真正的EJB组件,而是通过其容器访问。EJB容器是EJB组件的代理,EJB组件由容器所创建和管理。客户通过容器来访问真正的EJB组件。

21Static Nested Class  Inner Class的不同。 

    Static Nested Class是被声明为静态(static)的内部类,它可以不依赖于外部类实例被实例化。而通常的内部类需要在外部类实例化后才能实例化。

22JSP中动态INCLUDE与静态INCLUDE的区别?

动态INCLUDEjsp:include动作实现 <INCLUDE&NBSP;PAGE="INCLUDED.JSP"&NBSP;FLUSH="TRUE"&NBSP; />它总是会检查所含文件中的变化,适合用于包含动态页面,并且可以带参数。

静态INCLUDEinclude伪码实现,定不会检查所含文件的变化,适用于包含静态页面 

23、什么时候用assert 

    assertion(断言)在软件开发中是一种常用的调试方式,很多开发语言中都支持这种机制。在实现中,assertion就是在程序中的一条语句,它对一个boolean表达式进行检查,一个正确程序必须保证这个boolean表达式的值为true;如果该值为false,说明程序已经处于不正确的状态下,系统将给出警告或退出。一般来说,assertion用于保证程序最基本、关键的正确性。assertion检查通常在开发和测试时开启。为了提高性能,在软件发布后,assertion检查通常是关闭的。

24GC是什么为什么要有GC? 

  GC是垃圾收集的意思(Gabage Collection,内存处理是编程人员容易出现问题的地方,忘记或者错误的内存回收会导致程序或系统的不稳定甚至崩溃,Java提供的GC功能可以自动监测对象是否超过作用域从而达到自动回收内存的目的,Java语言没有提供释放已分配内存的显示操作方法。

25short s1 = 1; s1 = s1 + 1;有什么错? short s1 = 1; s1 += 1;有什么错

    short s1 = 1; s1 = s1 + 1; s1+1运算结果是int型,需要强制转换类型)

short s1 = 1; s1 += 1;(可以正确编译)

26Math.round(11.5)等於多少? Math.round(-11.5)等於多少? 

    Math.round(11.5)==12

Math.round(-11.5)==-11

round方法返回与参数最接近的长整数,参数加1/2后求其floor.

27String s = new String("xyz");创建了几个String Object? 

    两个

28、设计4个线程,其中两个线程每次对j增加1,另外两个线程对j每次减少1。写出程序。

以下程序使用内部类实现线程,对j增减的时候没有考虑顺序问题。

public class ThreadTest1{

  private int j;

  public static void main(String args[]){

ThreadTest1 tt=new ThreadTest1();

Inc inc=tt.new Inc();

Dec dec=tt.new Dec();

for(int i=0;i<2;i++){

Thread t=new Thread(inc);

t.start();

t=new Thread(dec);

t.start();

}

}

  private synchronized void inc(){

j++;

System.out.println(Thread.currentThread().getName()+"-inc:"+j);

  }

  private synchronized void dec(){

j--;

System.out.println(Thread.currentThread().getName()+"-dec:"+j);

  }

  class Inc implements Runnable{

public void run(){

for(int i=0;i<100;i++){

inc();

}

}

  }

  class Dec implements Runnable{

public void run(){

for(int i=0;i<100;i++){

dec();

}

 }

  }

}

29Java有没有goto?

java中的保留字,现在没有在java中使用。

30、启动一个线程是用run()还是start()?

启动一个线程是调用start()方法,使线程所代表的虚拟处理机处于可运行状态,这意味着它可以由JVM调度并执行。这并不意味着线程就会立即运行。run()方法可以产生必须退出的标志来停止一个线程。

31EJB包括(SessionBean,EntityBean)说出他们的生命周期,及如何管理事务的?

SessionBeanStateless Session Bean 的生命周期是由容器决定的,当客户机发出请求要建立一个Bean的实例时,EJB容器不一定要创建一个新的Bean的实例供客户机调用,而是随便找一个现有的实例提供给客户机。当客户机第一次调用一个Stateful Session Bean 时,容器必须立即在服务器中创建一个新的Bean实例,并关联到客户机上,以后此客户机调用Stateful Session Bean 的方法时容器会把调用分派到与此客户机相关联的Bean实例。

EntityBeanEntity Beans能存活相对较长的时间,并且状态是持续的。只要数据库中的数据存在,Entity beans就一直存活。而不是按照应用程序或者服务进程来说的。即使EJB容器崩溃了,Entity beans也是存活的。Entity Beans生命周期能够被容器或者 Beans自己管理。

EJB通过以下技术管理实务:对象管理组织(OMG)的对象实务服务(OTS),Sun MicrosystemsTransaction ServiceJTS)、Java Transaction APIJTA),开发组(X/Open)的XA接口。

32、应用服务器有那些?

BEA WebLogic ServerIBM WebSphere Application ServerOracle9i Application ServerjBossTomcat

33、给我一个你最常见到的runtime exception

ArithmeticException, ArrayStoreException, BufferOverflowException, BufferUnderflowException, CannotRedoException, CannotUndoException, ClassCastException, CMMException, ConcurrentModificationException, DOMException, EmptyStackException, IllegalArgumentException, IllegalMonitorStateException, IllegalPathStateException, IllegalStateException, ImagingOpException, IndexOutOfBoundsException, MissingResourceException, NegativeArraySizeException, NoSuchElementException, NullPointerException, ProfileDataException, ProviderException, RasterFormatException, SecurityException, SystemException, UndeclaredThrowableException, UnmodifiableSetException, UnsupportedOperationException

34、接口是否可继承接口抽象类是否可实现(implements)接口抽象类是否可继承实体类(concrete class)?

接口可以继承接口。抽象类可以实现(implements)接口,抽象类是否可继承实体类,但前提是实体类必须有明确的构造函数。

35List, Set, Map是否继承自Collection接口?

    ListSet是,Map不是

36、说出数据连接池的工作机制是什么?

J2EE服务器启动时会建立一定数量的池连接,并一直维持不少于此数目的池连接。客户端程序需要连接时,池驱动程序会返回一个未使用的池连接并将其表记为忙。如果当前没有空闲连接,池驱动程序就新建一定数量的连接,新建连接的数量有配置参数决定。当使用的池连接调用完成后,池驱动程序将此连接表记为空闲,其他调用就可以使用这个连接。

37abstractmethod是否可同时是static,是否可同时是native,是否可同时是synchronized?

    都不能

38、数组有没有length()这个方法? String有没有length()这个方法?

数组没有length()这个方法,有length的属性。String有有length()这个方法。

39Set里的元素是不能重复的,那么用什么方法来区分重复与否呢是用==还是equals()? 它们有何区别?

Set里的元素是不能重复的,那么用iterator()方法来区分重复与否。equals()是判读两个Set是否相等。

    equals()==方法决定引用值是否指向同一对象equals()在类中被覆盖,为的是当两个分离的对象的内容和类型相配的话,返回真值。如果是基本数据类型的封装类调用equals方法相等的时候那么HashCode()方法返回值也相等,如果是一般自定义类型 调用==equals都是比较地址,而HashCode()则返回的是这个地址压缩映射后的Hash值,有可能不相同的地址有相同的Hash值。

40、构造器Constructor是否可被override?

构造器Constructor不能被继承,因此不能重写Overriding,但可以被重载Overloading

41、是否可以继承String?

String类是final类,故不可以继承。

42swtich是否能作用在byte上,是否能作用在long上,是否能作用在String?

switchexpr1)中,expr1是一个整数表达式。因此传递给 switch  case 语句的参数应该是 int short char 或者 bytelong,string 都不能作用于swtich

43try {}里有一个return语句,那么紧跟在这个try后的finally {}里的code会不会被执行,什么时候被执行,在return前还是后?

会执行,在return前执行。

44、编程题用最有效率的方法算出2乘以8等於几? 

2 << 3

45、两个对象值相同(x.equals(y) == true),但却可有不同的hash code,这句话对不对?

不对,有相同的hash code

46、当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递

是值传递。Java 编程语言只有值传递参数。当一个对象实例作为一个参数被传递到方法中时,参数的值就是对该对象的引用。对象的内容可以在被调用的方法中改变,但对象的引用是永远不会改变的。

47、当一个线程进入一个对象的一个synchronized方法后,其它线程是否可进入此对象的其它方法?

不能,一个对象的一个synchronized方法只能由一个线程访问。

48、编程题写一个Singleton出来。

Singleton模式主要作用是保证在Java应用程序中,一个类Class只有一个实例存在。

一般Singleton模式通常有几种种形式:

第一种形式定义一个类,它的构造函数为private的,它有一个staticprivate的该类变量,在类初始化时实例话,通过一个publicgetInstance方法获取对它的引用,继而调用其中的方法。

public class Singleton {

private Singleton(){}

      //在自己内部定义自己一个实例,是不是很奇怪?

      //注意这是private 只供内部调用

      private static Singleton instance = new Singleton();

      //这里提供了一个供外部访问本class的静态方法,可以直接访问  

      public static Singleton getInstance() {

        return instance;   

      } 

    } 

    第二种形式

public class Singleton { 

  private static Singleton instance = null;

  public static synchronized Singleton getInstance() {

  //这个方法比上面有所改进,不用每次都进行生成对象,只是第一次     

  //使用时生成实例,提高了效率!

  if (instance==null)

    instancenew Singleton();

return instance;   

其他形式:

定义一个类,它的构造函数为private的,所有方法为static的。

一般认为第一种形式要更加安全些

49Java的接口和C++的虚类的相同和不同处。

由于Java不支持多继承,而有可能某个类或对象要使用分别在几个类或对象里面的方法或属性,现有的单继承机制就不能满足要求。与继承相比,接口有更高的灵活性,因为接口中没有任何实现代码。当一个类实现了接口以后,该类要实现接口里面所有的方法和属性,并且接口里面的属性在默认状态下面都是public static,所有方法默认情况下是public.一个类可以实现多个接口。

50Java中的异常处理机制的简单原理和应用。

JAVA程序违反了JAVA的语义规则时,JAVA虚拟机就会将发生的错误表示为一个异常。违反语义规则包括2种情况。一种是JAVA类库内置的语义检查。例如数组下标越界,会引发IndexOutOfBoundsException;访问null的对象时会引发NullPointerException。另一种情况就是JAVA允许程序员扩展这种语义检查,程序员可以创建自己的异常,并自由选择在何时用throw关键字引发异常。所有的异常都是java.lang.Thowable的子类。

51、垃圾回收的优点和原理。并考虑2种回收机制。

Java语言中一个显著的特点就是引入了垃圾回收机制,使c++程序员最头疼的内存管理的问题迎刃而解,它使得Java程序员在编写程序的时候不再需要考虑内存管理。由于有个垃圾回收机制,Java中的对象不再有"作用域"的概念,只有对象的引用才有"作用域"。垃圾回收可以有效的防止内存泄露,有效的使用可以使用的内存。垃圾回收器通常是作为一个单独的低级别的线程运行,不可预知的情况下对内存堆中已经死亡的或者长时间没有使用的对象进行清楚和回收,程序员不能实时的调用垃圾回收器对某个对象或所有对象进行垃圾回收。回收机制有分代复制垃圾回收和标记垃圾回收,增量垃圾回收。

52、请说出你所知道的线程同步的方法。

wait():使一个线程处于等待状态,并且释放所持有的对象的lock

sleep():使一个正在运行的线程处于睡眠状态,是一个静态方法,调用此方法要捕捉InterruptedException异常。

notify():唤醒一个处于等待状态的线程,注意的是在调用此方法的时候,并不能确切的唤醒某一个等待状态的线程,而是由JVM确定唤醒哪个线程,而且不是按优先级。

Allnotity():唤醒所有处入等待状态的线程,注意并不是给所有唤醒线程一个对象的锁,而是让它们竞争。

53、你所知道的集合类都有哪些?主要方法?

最常用的集合类是 List  Map List 的具体实现包括 ArrayList  Vector,它们是可变大小的列表,比较适合构建、存储和操作任何类型对象的元素列表。 List 适用于按数值索引访问元素的情形。 

Map 提供了一个更通用的元素存储方法。 Map 集合类用于存储元素对(称作""""),其中每个键映射到一个值。

54、描述一下JVM加载class文件的原理机制?

JVM中类的装载是由ClassLoader和它的子类来实现的,Java ClassLoader 是一个重要的Java运行时系统组件。它负责在运行时查找和装入类文件的类。

55char型变量中能不能存贮一个中文汉字?为什么? 

能够定义成为一个中文的,因为java中以unicode编码,一个char16个字节,所以放一个中文是没问题的

56、多线程有几种实现方法,都是什么?同步有几种实现方法,都是什么? 

多线程有两种实现方法,分别是继承Thread类与实现Runnable接口 

同步的实现方面有两种,分别是synchronized,waitnotify

57JSP的内置对象及方法。

request表示HttpServletRequest对象。它包含了有关浏览器请求的信息,并且提供了几个用于获取cookie, header, session数据的有用的方法。 

    response表示HttpServletResponse对象,并提供了几个用于设置送回浏览器的响应的方法(如cookies,头信息等) 

    out对象是javax.jsp.JspWriter的一个实例,并提供了几个方法使你能用于向浏览器回送输出结果。 

    pageContext表示一个javax.servlet.jsp.PageContext对象。它是用于方便存取各种范围的名字空间、servlet相关的对象的API,并且包装了通用的servlet相关功能的方法。 

    session表示一个请求的javax.servlet.http.HttpSession对象。Session可以存贮用户的状态信息 

    applicaton 表示一个javax.servle.ServletContext对象。这有助于查找有关servlet引擎和servlet环境的信息 

    config表示一个javax.servlet.ServletConfig对象。该对象用于存取servlet实例的初始化参数。 

    page表示从该页面产生的一个servlet实例

58、线程的基本概念、线程的基本状态以及状态之间的关系

线程指在程序执行过程中,能够执行程序代码的一个执行单位,每个程序至少都有一个线程,也就是程序本身。

Java中的线程有四种状态分别是:运行、就绪、挂起、结束。

59JSP的常用指令

isErrorPage(是否能使用Exception对象)isELIgnored(是否忽略表达式)

" target="_blank">http://......"%>

60、什么情况下调用doGet()doPost()

Jsp页面中的form标签里的method属性为get时调用doGet(),为post时调用doPost()

61servlet的生命周期

web容器加载servlet,生命周期开始。通过调用servletinit()方法进行servlet的初始化。通过调用service()方法实现,根据请求的不同调用不同的do***()方法。结束服务,web容器调用servletdestroy()方法。

62、如何现实servlet的单线程模式

<%@ page isThreadSafe="false"%>

63、页面间对象传递的方法

requestsessionapplicationcookie

64JSPServlet有哪些相同点和不同点,他们之间的联系是什么? 

JSPServlet技术的扩展,本质上是Servlet的简易方式,更强调应用的外表表达。JSP编译后是"servlet"ServletJSP最主要的不同点在于,Servlet的应用逻辑是在Java文件中,并且完全从表示层中的HTML里分离开来。而JSP的情况是JavaHTML可以组合成一个扩展名为.jsp的文件。JSP侧重于视图,Servlet主要用于控制逻辑。

65、四种会话跟踪技术

会话作用域ServletsJSP 页面描述

page否是代表与一个页面相关的对象和属性。一个页面由一个编译好的 Java servlet 类(可以带有任何的 include 指令,但是没有 include 动作)表示。这既包括 servlet 又包括被编译成 servlet  JSP 页面

request是是代表与 Web 客户机发出的一个请求相关的对象和属性。一个请求可能跨越多个页面,涉及多个 Web 组件(由于 forward 指令和 include 动作的关系)

session是是代表与用于某个 Web 客户机的一个用户体验相关的对象和属性。一个 Web 会话可以也经常会跨越多个客户机请求

application是是代表与整个 Web 应用程序相关的对象和属性。这实质上是跨越整个 Web 应用程序,包括多个页面、请求和会话的一个全局作用域

66Request对象的主要方法:

setAttribute(String name,Object):设置名字为namerequest的参数值

getAttribute(String name):返回由name指定的属性值

getAttributeNames():返回request对象所有属性的名字集合,结果是一个枚举的实例

getCookies():返回客户端的所有Cookie对象,结果是一个Cookie数组

getCharacterEncoding():返回请求中的字符编码方式

getContentLength():返回请求的Body的长度

getHeader(String name):获得HTTP协议定义的文件头信息

getHeaders(String name):返回指定名字的request Header的所有值,结果是一个枚举的实例

getHeaderNames():返回所以request Header的名字,结果是一个枚举的实例

getInputStream():返回请求的输入流,用于获得请求中的数据

getMethod():获得客户端向服务器端传送数据的方法

getParameter(String name):获得客户端传送给服务器端的有name指定的参数值

getParameterNames():获得客户端传送给服务器端的所有参数的名字,结果是一个枚举的实例

getParameterValues(String name):获得有name指定的参数的所有值

getProtocol():获取客户端向服务器端传送数据所依据的协议名称

getQueryString():获得查询字符串

getRequestURI():获取发出请求字符串的客户端地址

getRemoteAddr():获取客户端的IP地址

getRemoteHost():获取客户端的名字

getSession([Boolean create]):返回和请求相关Session

getServerName():获取服务器的名字

getServletPath():获取客户端所请求的脚本文件的路径

getServerPort():获取服务器的端口号

removeAttribute(String name):删除请求中的一个属性

67J2EE是技术还是平台还是框架?

    J2EE本身是一个标准,一个为企业分布式应用的开发提供的标准平台。

    J2EE也是一个框架,包括JDBCJNDIRMIJMSEJBJTA等技术。

68、我们在web应用开发过程中经常遇到输出某种编码的字符,如iso8859-1等,如何输出一个某种编码的字符串?

  Public String translate (String str) {

    String tempStr = "";

    try {

      tempStr = new String(str.getBytes("ISO-8859-1"), "GBK");

      tempStr = tempStr.trim();

    }

    catch (Exception e) {

      System.err.println(e.getMessage());

    }

    return tempStr;

  }

69、简述逻辑操作(&,|,^)与条件操作(&&,||)的区别。

区别主要答两点:a.条件操作只能操作布尔型的,而逻辑操作不仅可以操作布尔型,而且可以操作数值型

b.逻辑操作不会产生短路

71、简述synchronizedjava.util.concurrent.locks.Lock的异同 

主要相同点:Lock能完成synchronized所实现的所有功能

主要不同点:Lock有比synchronized更精确的线程语义和更好的性能。synchronized会自动释放锁,而Lock一定要求程序员手工释放,并且必须在finally从句中释放。

72EJB的角色和三个对象

一个完整的基于EJB的分布式计算结构由六个角色组成,这六个角色可以由不同的开发商提供,每个角色所作的工作必须遵循Sun公司提供的EJB规范,以保证彼此之间的兼容性。这六个角色分别是EJB组件开发者(Enterprise Bean Provider 、应用组合者(Application Assembler)、部署者(Deployer)、EJB 服务器提供者(EJB Server Provider)、EJB 容器提供者(EJB Container Provider)、系统管理员(System Administrator

三个对象是RemoteLocal)接口、HomeLocalHome)接口,Bean

73EJB容器提供的服务

主要提供声明周期管理、代码产生、持续性管理、安全、事务管理、锁和并发行管理等服务。

74EJB规范规定EJB中禁止的操作有哪些? 

    1.不能操作线程和线程API(线程API指非线程对象的方法如notify,wait)2.不能操作awt3.不能实现服务器功能,4.不能对静态属生存取,5.不能使用IO操作直接存取文件系统,6.不能加载本地库.7.不能将this作为变量和返回,8.不能循环调用。

75remote接口和home接口主要作用

remote接口定义了业务方法,用于EJB客户端调用业务方法。

home接口是EJB工厂用于创建和移除查找EJB实例

76bean 实例的生命周期

对于Stateless Session BeanEntity BeanMessage Driven Bean一般存在缓冲池管理,而对于Entity BeanStatefull Session Bean存在Cache管理,通常包含创建实例,设置上下文、创建EJB Objectcreate)、业务方法调用、remove等过程,对于存在缓冲池管理的Bean,在create之后实例并不从内存清除,而是采用缓冲池调度机制不断重用实例,而对于存在Cache管理的Bean则通过激活和去激活机制保持Bean的状态并限制内存中实例数量。

77EJB的激活机制

Stateful Session Bean 为例:其Cache大小决定了内存中可以同时存在的Bean实例的数量,根据MRUNRU算法,实例在激活和去激活状态之间迁移,激活机制是当客户端调用某个EJB实例业务方法时,如果对应EJB Object发现自己没有绑定对应的Bean实例则从其去激活Bean存储中(通过序列化机制存储实例)回复(激活)此实例。状态变迁前会调用对应的ejbActiveejbPassivate方法。

78EJB的几种类型

会话(SessionBean ,实体(EntityBean 消息驱动的(Message DrivenBean

会话Bean又可分为有状态(Stateful)和无状态(Stateless)两种

实体Bean可分为Bean管理的持续性(BMP)和容器管理的持续性(CMP)两种

79、客服端调用EJB对象的几个基本步骤

设置JNDI服务工厂以及JNDI服务地址系统属性,查找Home接口,从Home接口调用Create方法创建Remote接口,通过Remote接口调用其业务方法。

80、如何给weblogic指定大小的内存

在启动Weblogic的脚本中(位于所在Domian对应服务器目录下的startServerName),增加set MEM_ARGS=-Xms 32m  -Xmx 200m ,可以调整最小内存为 32M ,最大 200M

81、如何设定的weblogic的热启动模式(开发模式)与产品发布模式?

可以在管理控制台中修改对应服务器的启动模式为开发或产品模式之一。或者修改服务的启动文件或者commenv文件,增加set PRODUCTION_MODE=true

82、如何启动时不需输入用户名与密码?

修改服务启动文件,增加 WLS_USERWLS_PW项。也可以在boot.properties文件中增加加密过的用户名和密码.

83、在weblogic管理制台中对一个应用域(或者说是一个网站,Domain)进行jmsejb或连接池等相关信息进行配置后,实际保存在什么文件中?

保存在此Domainconfig.xml文件中,它是服务器的核心配置文件。

84、说说weblogic中一个Domain的缺省目录结构?比如要将一个简单的helloWorld.jsp放入何目录下,然的在浏览器上就可打入 http://主机:端口号//helloword.jsp就可以看到运行结果了?  又比如这其中用到了一个自己写的javaBean该如何办?

Domain目录服务器目录applications,将应用目录放在此目录下将可以作为应用访问,如果是Web应用,应用目录需要满足Web应用目录要求,jsp文件可以直接放在应用目录中,Javabean需要放在应用目录的WEB-INF目录的classes目录中,设置服务器的缺省应用将可以实现在浏览器上无需输入应用名。

85、在weblogic中发布ejb需涉及到哪些配置文件

不同类型的EJB涉及的配置文件不同,都涉及到的配置文件包括ejb-jar.xml,weblogic-ejb-jar.xmlCMP实体Bean一般还需要weblogic-cmp-rdbms-jar.xml 

86、如何在weblogic中进行ssl配置与客户端的认证配置或说说j2ee(标准)进行ssl的配置

缺省安装中使用DemoIdentity.jksDemoTrust.jks  KeyStore实现SSL,需要配置服务器使用Enable SSL,配置其端口,在产品模式下需要从CA获取私有密钥和数字证书,创建identitytrust keystore,装载获得的密钥和数字证书。可以配置此SSL连接是单向还是双向的。

87、如何查看在weblogic中已经发布的EJB?

可以使用管理控制台,在它的Deployment中可以查看所有已发布的EJB

88CORBA是什么?用途是什么

CORBA 标准是公共对象请求代理结构(Common Object Request Broker Architecture),由对象管理组织 (Object Management Group,缩写为 OMG)标准化。它的组成是接口定义语言(IDL), 语言绑定(binding:也译为联编)和允许应用程序间互操作的协议。 其目的为:用不同的程序设计语言书写在不同的进程中运行,为不同的操作系统开发。

89、说说你所熟悉或听说过的j2ee中的几种常用模式?及对设计模式的一些看法

  Session Facade Pattern:使用SessionBean访问EntityBean

Message Facade Pattern:实现异步调用

EJB Command Pattern:使用Command JavaBeans取代SessionBean,实现轻量级访问

Data Transfer Object Factory:通过DTO Factory简化EntityBean数据提供特性

Generic Attribute Access:通过AttibuteAccess接口简化EntityBean数据提供特性

Business Interface:通过远程(本地)接口和Bean类实现相同接口规范业务逻辑一致性

EJB架构的设计好坏将直接影响系统的性能、可扩展性、可维护性、组件可重用性及开发效率。项目越复杂,项目队伍越庞大则越能体现良好设计的重要性。

90、说说在weblogic中开发消息Bean时的persistentnon-persisten的差别

persistent方式的MDB可以保证消息传递的可靠性,也就是如果EJB容器出现问题而JMS服务器依然会将消息在此MDB可用的时候发送过来,而nonpersistent方式的消息将被丢弃。

91Servlet执行时一般实现哪几个方法?

public void init(ServletConfig config)

public ServletConfig getServletConfig()

public String getServletInfo()

public void service(ServletRequest request,ServletResponse response)

public void destroy()

init()方法在servlet的生命周期中仅执行一次,在服务器装载servlet时执行。缺省的init()方法通常是符合要求的,不过也可以根据需要进行override,比如管理服务器端资源,一次性装入GIF图像,初始化数据库连接等,缺省的inti()方法设置了servlet的初始化参数,并用它的ServeltConfig对象参数来启动配置,所以覆盖init()方法时,应调用super.init()以确保仍然执行这些任务。

service()方法是servlet的核心,在调用service()方法之前,应确保已完成init()方法。对于HttpServlet,每当客户请求一个HttpServlet对象,该对象的service()方法就要被调用,HttpServlet缺省的service()方法的服务功能就是调用与HTTP请求的方法相应的do功能,doPost()doGet(),所以对于HttpServlet,一般都是重写doPost()doGet()方法。

destroy()方法在servlet的生命周期中也仅执行一次,即在服务器停止卸载servlet时执行,把servlet作为服务器进程的一部分关闭。缺省的destroy()方法通常是符合要求的,但也可以override,比如在卸载servlet时将统计数字保存在文件中,或是关闭数据库连接。

getServletConfig()方法返回一个servletConfig对象,该对象用来返回初始化参数和servletContextservletContext接口提供有关servlet的环境信息。

getServletInfo()方法提供有关servlet的信息,如作者,版本,版权。

92j2ee常用的设计模式?说明工厂模式。

    Java中的23种设计模式:

Factory(工厂模式),      Builder(建造模式),       Factory Method(工厂方法模式),

Prototype(原始模型模式),Singleton(单例模式),    Facade(门面模式),

Adapter(适配器模式),    Bridge(桥梁模式),        Composite(合成模式),

Decorator(装饰模式),    Flyweight(享元模式),     Proxy(代理模式),

Command(命令模式),      Interpreter(解释器模式), Visitor(访问者模式),

Iterator(迭代子模式),   Mediator(调停者模式),    Memento(备忘录模式),

Observer(观察者模式),   State(状态模式),         Strategy(策略模式),

Template Method(模板方法模式), Chain Of Responsibleity(责任链模式)

工厂模式:工厂模式是一种经常被使用到的模式,根据工厂模式实现的类可以根据提供的数据生成一组类中某一个类的实例,通常这一组类有一个公共的抽象父类并且实现了相同的方法,但是这些方法针对不同的数据进行了不同的操作。首先需要定义一个基类,该类的子类通过不同的方法实现了基类中的方法。然后需要定义一个工厂类,工厂类可以根据条件生成不同的子类实例。当得到子类的实例后,开发人员可以调用基类中的方法而不必考虑到底返回的是哪一个子类的实例。

93EJB需直接实现它的业务接口或Home接口吗,请简述理由。

远程接口和Home接口不需要直接实现,他们的实现代码是由服务器产生的,程序运行中对应实现类会作为对应接口类型的实例被使用。

其实一直都不是很明白EJBremote接口,home接口,Bean类究竟是如何使用的,或许应该进一步了解EJB的原理吧,查到了一个原创文章,那就说说EJB调用的原理吧。其实在这个问题上,最需要理解的是RMI机制原理。

 一个远程对象至少要包括4class文件:远程对象、远程对象接口、实现远程接口的对象的stub、对象的skeleton

而在EJB中则至少要包括10class:

Bean类,特定App ServerBean实现类

Beanremote接口,特定App Serverremote接口实现类,特定App Serverremote接口的实现类的stub类和skeleton类。

Beanhome接口,特定App Serverhome接口实现类,特定App Serverhome接口的实现类的stub类和skeleton类。

RMI不同的是,EJB中这10class真正需要用户写的只有3个,Bean类,remote接口,home接口,其它的7个究竟怎么生成,被打包在哪里,是否需要更多的类文件,否根据不同的App Server表现出较大的差异。

Weblogic

home接口和remote接口的weblogic的实现类的stub类和skeleton类是在EJB被部署到weblogic的时候,由weblogic动态生成stub类和skeleton类的字节码,所以看不到这4个类文件。

对于一次客户端远程调用EJB,要经过两个远程对象的多次RMI循环。首先是通过JNDI查找Home接口,获得Home接口的实现类,这个过程其实相当复杂,首先是找到Home接口的Weblogic实现类,然后创建一个Home接口的Weblogic实现类的stub类的对象实例,将它序列化传送给客户端(注意stub类的实例是在第1RMI循环中,由服务器动态发送给客户端的,因此不需要客户端保存Home接口的Weblogic实现类的stub类),最后客户端获得该stub类的对象实例(普通的RMI需要在客户端保存stub类,而EJB不需要,因为服务器会把stub类的对象实例发送给客户端)。

客户端拿到服务器给它的Home接口的Weblogic实现类的stub类对象实例以后,调用stub类的create方法,(在代码上就是home.create(),但是后台要做很多事情),于是经过第2RMI循环,在服务器端,Home接口的Weblogic实现类的skeleton类收到stub类的调用信息后,由它再去调用Home接口的Weblogic实现类的create方法。

在服务端,Home接口的Weblogic实现类的create方法再去调用Bean类的Weblogic实现类的ejbCreate方法,在服务端创建或者分配一个EJB实例,然后将这个EJB实例的远程接口的Weblogic实现类的stub类对象实例序列化发送给客户端。

客户端收到remote接口的Weblogic实现类的stub类的对象实例,对该对象实例的方法调用(在客户端代码中实际上就是对remote接口的调用),将传送给服务器端remote接口的Weblogic实现类的skeleton类对象,而skeleton类对象再调用相应的remote接口的Weblogic实现类,然后remote接口的Weblogic实现类再去调用Bean类的Weblogic实现类,如此就完成一次EJB对象的远程调用。

先拿普通RMI来说,有4class,分别是远程对象,对象的接口,对象的stub类和skeleton类。而对象本身和对象的stub类同时都实现了接口类。而我们在客户端代码调用远程对象的时候,虽然在代码中操纵接口,实质上是在操纵stub类,例如:接口类:Hello

远程对象:Hello_Server

stub类:Hello_Stub

skeleton类:Hello_Skeleton

客户端代码要这样写:

Hello h = new Hello_Stub();

h.getString();

我们不会这些写:

Hello_Stub h = new Hello_Stub();

h.getString();

因为使用接口适用性更广,就算更换了接口实现类,也不需要更改代码。因此客户端需要Hello.classHello_Stub.class这两个文件。但是对于EJB来说,就不需要Hello_Stub.class,因为服务器会发送给它,但是Hello.class文件客户端是省不了的,必须有。表面上我们的客户端代码在操纵Hello,但别忘记了Hello只是一个接口,抽象的,实质上是在操纵Hello_Stub

Weblogic上的EJB举例子,10class分别是:

Bean类:HelloBean (用户编写)

Bean类的Weblogic实现类:HelloBean_Impl EJBC生成)

Home接口:HelloHome (用户编写)

Home接口的Weblogic实现类 HelloBean_HomeImplEJBC生成)

Home接口的Weblogic实现类的stub HelloBean_HomeImpl_WLStub(部署的时候动态生成字节码)

Home接口的Weblogic实现类的skeleton HelloBean_HomeImpl_WLSkeleton(部署的时候动态生成字节码)

Remote接口: Hello (用户编写)

Remote接口的Weblogic实现类 HelloBean_EOImplEJBC生成)

Remote接口的Weblogic实现类的stub HelloBean_EOImpl_WLStub(部署的时候动态生成字节码)

Remote接口的Weblogic实现类的skeleton HelloBean_EOImpl_WLSkeleton(部署的时候动态生成字节码)

客户端只需要Hello.classHelloHome.class这两个文件。

HelloHome home = (Home) PortableRemoteObject.narrow(ctx.lookup("Hello"), HelloHome.class);

这一行代码是从JNDI获得Home接口,但是请记住!接口是抽象的,那么home这个对象到底是什么类的对象实例呢?很简单,用toString()输出看一下就明白了,下面一行是输出结果:

HelloBean_HomeImpl_WLStub@ 18c 458

这表明home这个通过从服务器的JNDI树上查找获得的对象实际上是HelloBean_HomeImpl_WLStub类的一个实例。

接下来客户端代码:

Hello h = home.create()

同样Hello只是一个抽象的接口,那么h对象是什么东西呢?打印一下:

HelloBean_EOImpl_WLStub@8fa0d1

原来是HelloBean_EOImpl_WLStub的一个对象实例。

用这个例子来简述一遍EJB调用过程:

首先客户端JNDI查询,服务端JNDI树上Hello这个名字实际上绑定的对象是HelloBean_HomeImpl_WLStub,所以服务端将创建HelloBean_HomeImpl_WLStub的一个对象实例,序列化返回给客户端。

于是客户端得到home对象,表面上是得到HelloHome接口的实例,实际上是进行了一次远程调用得到了HelloBean_HomeImpl_WLStub类的对象实例,别忘记了HelloBean_HomeImpl_WLStub也实现了HelloHome接口。

 

然后home.create()实质上就是HelloBean_HomeImpl_WLStub.create(),该方法将发送信息给HelloBean_HomeImpl_WLSkeleton,而HelloBean_HomeImpl_WLSkeleton接受到信息后,再去调用HelloBean_HomeImplcreate方法,至此完成第1次完整的RMI循环。

注意在这次RMI循环过程中,远程对象是HelloBean_HomeImpl,远程对象的接口是HelloHome,对象的stubHelloBean_HomeImpl_WLStub,对象的skeletonHelloBean_HomeImpl_WLSkeleton

然后HelloBean_HomeImpl再去调用HelloBean_ImplejbCreate方法,而HelloBean_ImplejbCreate方法将负责创建或者分配一个Bean实例,并且创建一个HelloBean_EOImpl_WLStub的对象实例。

这一步比较有趣的是,在前一步RMI循环中,远程对象HelloBean_HomeImpl在客户端有一个代理类HelloBean_HomeImpl_WLStub,但在这一步,HelloBean_HomeImpl自己却充当了HelloBean_Impl的代理类,只不过HelloBean_HomeImpl不在客户端,而是在服务端,因此不进行RMI

然后HelloBean_EOImpl_WLStub的对象实例序列化返回给客户端,这一步也很有趣,上次RMI过程,主角是HelloBean_HomeImpl和它的代理类HelloBean_HomeImpl_WLStub,但这这一次换成了HelloBean_EOImpl和它的代理类HelloBean_EOImpl_WLStub来玩了。

Hello h = home.create();h.helloWorld();

假设Hello接口有一个helloWorld远程方法,那么表面上是在调用Hello接口的helloWorld方法,实际上是在调用HelloBean_EOImpl_WLStubhelloWorld方法。

然后HelloBean_EOImpl_WLStubhelloWorld方法将发送信息给服务器上的HelloBean_EOImpl_WLSkeleton,而HelloBean_EOImpl_WLSkeleton收到信息以后,再去调用HelloBean_EOImplhelloWorld方法。至此,完成第2次完整的RMI循环过程。在刚才HelloBean_EOImpl是作为远程对象被调用的,它的代理类是HelloBean_EOImpl_WLStub,但现在HelloBean_EOImpl要作为HelloBean_Impl的代理类了。现在HelloBean_EOImpl去调用HelloBean_ImplhelloWorld方法。注意!HelloBean_Impl继承了HelloBean,而HelloBean中的helloWorld方法是我们亲自编写的代码,现在终于调用到了我们编写的代码了!

至此,一次EJB调用过程终于完成。在整个过程中,服务端主要要调用的类是HelloBean_Impl HelloBean_HomeImplHelloBean_HomeImpl_WLSkeletonHelloBean_EOImplHelloBean_EOImpl_WLSkeleton。客户端主要调用的类是HelloBean_HomeImpl_WLStubHelloBean_EOImpl_WLStub,这两个类在客户端代码中并不会直接出现,出现在代码中的类是他们的接口HelloHomeHello,因此客户端需要这两个接口文件,而Stub是服务器传送给他们的。

http://www.pbase.com/nobo123/image/27229257

http://forum.javaeye.com/viewtopic.php?t=3832&postdays=0&postorder=asc&start=0

94、排序都有哪几种方法?请列举。用JAVA实现一个快速排序。

    排序的方法有:插入排序(直接插入排序、希尔排序),交换排序(冒泡排序、快速排序),选择排序(直接选择排序、堆排序),归并排序,分配排序(箱排序、基数排序)

快速排序的伪代码。

/ /使用快速排序方法对a[ 0 :n- 1 ]排序

a[ 0 :n- 1 ]中选择一个元素作为m i d d l e,该元素为支点

把余下的元素分割为两段left r i g h t,使得l e f t中的元素都小于等于支点,而right 中的元素都大于等于支点

递归地使用快速排序方法对left 进行排序

递归地使用快速排序方法对right 进行排序

所得结果为l e f t + m i d d l e + r i g h t

95、请对以下在J2EE中常用的名词进行解释(或简单描述)

web容器:给处于其中的应用程序组件(JSPSERVLET)提供一个环境,使JSP,SERVLET直接和容器中的环境变量接接口互,不必关注其它系统问题。主要有WEB服务器来实现。例如:TOMCAT,WEBLOGIC,WEBSPHERE等。该容器提供的接口严格遵守J2EE规范中的WEB APPLICATION 标准。我们把遵守以上标准的WEB服务器就叫做J2EE中的WEB容器。

Web container:实现J2EE体系结构中Web组件协议的容器。这个协议规定了一个Web组件运行时的环境,包括安全,一致性,生命周期管理,事务,配置和其它的服务。一个提供和JSPJ2EE平台APIs界面相同服务的容器。一个Web container Web服务器或者J2EE服务器提供。

EJB容器:Enterprise java bean 容器。更具有行业领域特色。他提供给运行在其中的组件EJB各种管理功能。只要满足J2EE规范的EJB放入该容器,马上就会被容器进行高效率的管理。并且可以通过现成的接口来获得系统级别的服务。例如邮件服务、事务管理。

一个实现了J2EE体系结构中EJB组件规范的容器。

这个规范指定了一个Enterprise bean的运行时环境,包括安全,一致性,生命周期,事务,

配置,和其他的服务。

JNDI:(Java Naming & Directory InterfaceJAVA命名目录服务。主要提供的功能是:提供一个目录系统,让其它各地的应用程序在其上面留下自己的索引,从而满足快速查找和定位分布式应用程序的功能。

JMS:(Java Message ServiceJAVA消息服务。主要实现各个应用程序之间的通讯。包括点对点和广播。

JTA:(Java Transaction APIJAVA事务服务。提供各种分布式事务服务。应用程序只需调用其提供的接口即可。

JAF:(Java Action FrameWorkJAVA安全认证框架。提供一些安全控制方面的框架。让开发者通过各种部署和自定义实现自己的个性安全控制策略。

RMI/IIOP:Remote Method Invocation /internet对象请求中介协议)他们主要用于通过远程调用服务。例如,远程有一台计算机上运行一个程序,它提供股票分析服务,我们可以在本地计算机上实现对其直接调用。当然这是要通过一定的规范才能在异构的系统之间进行通信。RMIJAVA特有的。

RMI-IIOP出现以前,只有RMICORBA两种选择来进行分布式程序设计。RMI-IIOP综合了RMICORBA的优点,克服了他们的缺点,使得程序员能更方便的编写分布式程序设计,实现分布式计算。首先,RMI-IIOP综合了RMI的简单性和CORBA的多语言性(兼容性),其次RMI-IIOP克服了RMI只能用于Java的缺点和CORBA的复杂性(可以不用掌握IDL)。

96JAVA语言如何进行异常处理,关键字:throws,throw,try,catch,finally分别代表什么意义?在try块中可以抛出异常吗?

Java通过面向对象的方法进行异常处理,把各种不同的异常进行分类,并提供了良好的接口。在Java中,每个异常都是一个对象,它是Throwable类或其它子类的实例。当一个方法出现异常后便抛出一个异常对象,该对象中包含有异常信息,调用这个对象的方法可以捕获到这个异常并进行处理。Java的异常处理是通过5个关键词来实现的:trycatchthrowthrowsfinally。一般情况下是用try来执行一段程序,如果出现异常,系统会抛出(throws)一个异常,这时候你可以通过它的类型来捕捉(catch)它,或最后(finally)由缺省处理器来处理。

try来指定一块预防所有"异常"的程序。紧跟在try程序后面,应包含一个catch子句来指定你想要捕捉的"异常"的类型。

throw语句用来明确地抛出一个"异常"

throws用来标明一个成员函数可能抛出的各种"异常"

Finally为确保一段代码不管发生什么"异常"都被执行一段代码。

可以在一个成员函数调用的外面写一个try语句,在这个成员函数内部写另一个try语句保护其他代码。每当遇到一个try语句,"异常"的框架就放到堆栈上面,直到所有的try语句都完成。如果下一级的try语句没有对某种"异常"进行处理,堆栈就会展开,直到遇到有处理这种"异常"try语句。

http://www.programfan.com/article/showarticle.asp?id=2731 

97、一个".java"源文件中是否可以包括多个类(不是内部类)?有什么限制?

可以。必须只有一个类名与文件名相同。

98MVC的各个部分都有那些技术来实现?如何实现? 

MVCModelViewController的简写。"Model" 代表的是应用的业务逻辑(通过JavaBeanEJB组件实现), "View" 是应用的表示面,用于与用户的交互(由JSP页面产生),"Controller" 是提供应用的处理过程控制(一般是一个Servlet),通过这种设计模型把应用逻辑,处理过程和显示逻辑分成不同的组件实现。这些组件可以进行交互和重用。

model层实现系统中的业务逻辑,view层用于与用户的交互,controller层是modelview之间沟通的桥梁,可以分派用户的请求并选择恰当的视图以用于显示,同时它也可以解释用户的输入并将它们映射为模型层可执行的操作。

99java中有几种方法可以实现一个线程?用什么关键字修饰同步方法? stop()suspend()方法为何不推荐使用?

有两种实现方法,分别是继承Thread类与实现Runnable接口

synchronized关键字修饰同步方法

反对使用stop(),是因为它不安全。它会解除由线程获取的所有锁定,而且如果对象处于一种不连贯状态,那么其他线程能在那种状态下检查和修改它们。结果很难检查出真正的问题所在。suspend()方法容易发生死锁。调用suspend()的时候,目标线程会停下来,但却仍然持有在这之前获得的锁定。此时,其他任何线程都不能访问锁定的资源,除非被"挂起"的线程恢复运行。对任何线程来说,如果它们想恢复目标线程,同时又试图使用任何一个锁定的资源,就会造成死锁。所以不应该使用suspend(),而应在自己的Thread类中置入一个标志,指出线程应该活动还是挂起。若标志指出线程应该挂起,便用wait()命其进入等待状态。若标志指出线程应当恢复,则用一个notify()重新启动线程。

100java中有几种类型的流?JDK为每种类型的流提供了一些抽象类以供继承,请说出他们分别是哪些类?

字节流,字符流。字节流继承于InputStream OutputStream,字符流继承于InputStreamReader OutputStreamWriter。在java.io包中还有许多其他的流,主要是为了提高性能和使用方便。

输入流:ByteArrayInputStream(DataInputStream, BufferedInputStream, LineNumberInputStream, PushbackInputStream), FilterInputStream,ObjectInputStream,PipedInputStream,SequenceInputStream,StringBufferInputStream;

输出流:FileOutputStream, ByteArrayOutputStream, FilterOutputStream(DataOutputStream, BufferedOutputStream, PrintStream), ObjectOutputStream, PipedOutputStream.

101java中会存在内存泄漏吗,请简单描述。

的确存在Java的内存泄漏, 并且事态可以变得相当严重

Java garbage collector自动释放哪些内存里面程序不在需要的对象, 以此避免大多数的其他程序上下文的内存泄漏. 但是Java应用程序依旧会有相当的内存泄漏. 查找原因会十分困难.

有两类主要的Java内存泄漏:

* 不再需要的对象引用

* 未释放的系统资源

2.2 非必要的对象引用

Java代码常常保留对于不再需要的对象引用, 并且这组织了内存的垃圾收集器的工作. Java对象通常被其他对象包含引用, 为此一个单一对象可以保持整个对象树在内存中, 于是导致了如下问题:

* 在向数组添加对象以后遗漏了对于他们的处理

* 直到你再次使用对象的时候都不释放引用. 比如一个菜单指令可以插件一个对象实例引用并且不释放便于以后再次调用的时候使用, 但是也许永远不会发生.

* 在其他引用依然需要旧有状态的时候贸然修改对象状态. 比如当你为了在一个文本文件里面保存一些属性而使用一个数组, 诸如"字符个数"等字段在不再需要的时候依然保留在内存当中.

* 允许一个长久执行的线程所引用的对象. 设置引用为NULL也无济于事, 在线程退出和空闲之前, 对象不会被收集释放

2.3 未释放的系统资源

Java方法可以定位Java实例意外的堆内存, 诸如针对视窗和位图的内存资源. Java常常通过JNI(Java Native Interface)调用C/C++子程序定位这些资源.

102java中实现多态的机制是什么?

方法的重写Overriding和重载OverloadingJava多态性的不同表现。重写Overriding是父类与子类之间多态性的一种表现,重载Overloading是一个类中多态性的一种表现。

103、垃圾回收器的基本原理是什么?垃圾回收器可以马上回收内存吗?有什么办法主动通知虚拟机进行垃圾回收?

对于GC来说,当程序员创建对象时,GC就开始监控这个对象的地址、大小以及使用情况。通常,GC采用有向图的方式记录和管理堆(heap)中的所有对象。通过这种方式确定哪些对象是"可达的",哪些对象是"不可达的"。当GC确定一些对象为"不可达"时,GC就有责任回收这些内存空间。可以。程序员可以手动执行System.gc(),通知GC运行,但是Java语言规范并不保证GC一定会执行。

104、静态变量和实例变量的区别?

static i = 10; //常量

class A a;  a.i =10;//可变

105、什么是java序列化,如何实现java序列化?

序列化就是一种用来处理对象流的机制,所谓对象流也就是将对象的内容进行流化。可以对流化后的对象进行读写操作,也可将流化后的对象传输于网络之间。序列化是为了解决在对对象流进行读写操作时所引发的问题。

序列化的实现:将需要被序列化的类实现Serializable接口,该接口没有需要实现的方法,implements Serializable只是为了标注该对象是可被序列化的,然后使用一个输出流(如:FileOutputStream)来构造一个ObjectOutputStream(对象流)对象,接着,使用ObjectOutputStream对象的writeObject(Object obj)方法就可以将参数为obj的对象写出(即保存其状态),要恢复的话则用输入流。

106、是否可以从一个static方法内部发出对非static方法的调用?

不可以,如果其中包含对象的method();不能保证对象初始化.

107、写clone()方法时,通常都有一行代码,是什么?

Clone 有缺省行为,super.clone();他负责产生正确大小的空间,并逐位复制。

108、在JAVA中,如何跳出当前的多重嵌套循环?

break; return 方法。

109ListMapSet三个接口,存取元素时,各有什么特点?

List 以特定次序来持有元素,可有重复元素。Set 无法拥有重复元素,内部排序。Map 保存key-value值,value可多值。

110J2EE是什么?

J2EESun公司提出的多层(multi-diered),分布式(distributed),基于组件(component-base)的企业级应用模型(enterpriese application model).在这样的一个应用系统中,可按照功能划分为不同的组件,这些组件又可在不同计算机上,并且处于相应的层次(tier)中。所属层次包括客户层(clietn tier)组件,web层和组件,Business层和组件,企业信息系统(EIS)层。

111UML方面 

标准建模语言UML。用例图,静态图(包括类图、对象图和包图),行为图,交互图(顺序图,合作图),实现图。

112、说出一些常用的类,包,接口,请各举5

常用的类:BufferedReader  BufferedWriter  FileReader  FileWirter  String  Integer

常用的包:java.lang  java.awt  java.io  java.util  java.sql

常用的接口:Remote  List  Map  Document  NodeList 

113、开发中都用到了那些设计模式?用在什么场合? 

每个模式都描述了一个在我们的环境中不断出现的问题,然后描述了该问题的解决方案的核心。通过这种方式,你可以无数次地使用那些已有的解决方案,无需在重复相同的工作。主要用到了MVC的设计模式。用来开发JSP/Servlet或者J2EE的相关应用。简单工厂模式等。

114jsp有哪些动作?作用分别是什么

JSP共有以下6种基本动作 jsp:include:在页面被请求的时候引入一个文件。 jsp:useBean:寻找或者实例化一个JavaBean jsp:setProperty:设置JavaBean的属性。 jsp:getProperty:输出某个JavaBean的属性。 jsp:forward:把请求转到一个新的页面。 jsp:plugin:根据浏览器类型为Java插件生成OBJECTEMBED标记。

115Anonymous Inner Class (匿名内部类是否可以extends(继承)其它类,是否可以implements(实现)interface(接口)? 

可以继承其他类或完成其他接口,在swing编程中常用此方式。

116、应用服务器与WEB SERVER的区别?

应用服务器:WeblogicTomcatJboss

WEB SERVERIIS Apache

117BSCS的联系与区别。

C/SClient/Server的缩写。服务器通常采用高性能的PC、工作站或小型机,并采用大型数据库系统,如OracleSybaseInformix SQL Server。客户端需要安装专用的客户端软件。

B/S是Brower/Server的缩写,客户机上只要安装一个浏览器(Browser),如Netscape NavigatorInternet Explorer,服务器安装OracleSybaseInformix SQL Server等数据库。在这种结构下,用户界面完全通过WWW浏览器实现,一部分事务逻辑在前端实现,但是主要事务逻辑在服务器端实现。浏览器通过Web Server 同数据库进行数据交互。

C/S  B/S 区别: 

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等信息、流向的变化更像交易中心。

118LINUX下线程,GDI类的解释。

LINUX实现的就是基于核心轻量级进程的"一对一"线程模型,一个线程实体对应一个核心轻量级进程,而线程之间的管理在核外函数库中实现。 

GDI类为图像设备编程接口类库。

119STRUTS的应用(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属性、国际化的提示和消息。

120Jdo是什么? 

JDOJava对象持久化的新的规范,为java data object的简称,也是一个用于存取某种数据仓库中的对象的标准化APIJDO提供了透明的对象存储,因此对开发人员来说,存储数据对象完全不需要额外的代码(如JDBC API的使用)。这些繁琐的例行工作已经转移到JDO产品提供商身上,使开发人员解脱出来,从而集中时间和精力在业务逻辑上。另外,JDO很灵活,因为它可以在任何数据底层上运行。JDBC只是面向关系数据库(RDBMSJDO更通用,提供到任何数据底层的存储功能,比如关系数据库、文件、XML以及对象数据库(ODBMS)等等,使得应用可移植性更强。

121、内部类可以引用他包含类的成员吗?有没有什么限制?

一个内部类对象可以访问创建它的外部类对象的内容

内部类如果不是static的,那么它可以访问创建它的外部类对象的所有属性

内部类如果是sattic的,即为nested class,那么它只可以访问创建它的外部类对象的所有static属性

一般普通类只有publicpackage的访问修饰,而内部类可以实现staticprotectedprivate等访问修饰。

当从外部类继承的时候,内部类是不会被覆盖的,它们是完全独立的实体,每个都在自己的命名空间内,如果从内部类中明确地继承,就可以覆盖原来内部类的方法。

122WEB SERVICE名词解释。JSWDL开发包的介绍。JAXPJAXM的解释。SOAPUDDI,WSDL解释。 

Web ServiceWeb Service是基于网络的、分布式的模块化组件,它执行特定的任务,遵守具体的技术规范,这些规范使得Web Service能与其他兼容的组件进行互操作。

JAXP(Java API for XML Parsing) 定义了在Java中使用DOM, SAX, XSLT的通用的接口。这样在你的程序中你只要使用这些通用的接口,当你需要改变具体的实现时候也不需要修改代码。

JAXM(Java API for XML Messaging) 是为SOAP通信提供访问方法和传输机制的API

WSDL是一种 XML 格式,用于将网络服务描述为一组端点,这些端点对包含面向文档信息或面向过程信息的消息进行操作。这种格式首先对操作和消息进行抽象描述,然后将其绑定到具体的网络协议和消息格式上以定义端点。相关的具体端点即组合成为抽象端点(服务)。

SOAP即简单对象访问协议(Simple Object Access Protocol),它是用于交换XML编码信息的轻量级协议。 

UDDI 的目的是为电子商务建立标准;UDDI是一套基于Web的、分布式的、为Web Service提供的、信息注册中心的实现标准规范,同时也包含一组使企业能将自身提供的Web Service注册,以使别的企业能够发现的访问协议的实现标准。

soapweb service最关键的技术,是web service中数据和方法调传输的介质。

WSDLweb service definition language)描述了web service的接口和功能。

123开发一个企业bean必须提供哪几种类型的文件?

Bean类,EJB对象,远程接口,本地接口,Home接口,部署描述符,厂商专有文件,Ejb-jar文件。

124什么是激活?什么是钝化?

EJB容器调用ejbActivate()方法使Bean恢复在ejbPassivate()过程中释放的资源。调用ejbPassivate()方法使Bean释放或处理占用的资源。

125String”+”StringBuffer.append()的区别是什么。

String”+”是连接两个String对象并产生新的对象。而StringBuffer.append()方法只有一个原来的对象

126、如何让一个ServletWeb Application中刚启动就销毁。

servletinit()方法中调用destroy()方法。就可以在Application中刚启动就销毁.

127IOC如何实现,作用是什么?

控制反转是一种编程模式-主要目的是实现服务(或应用程序组件)的定义方式与这些服务应该怎样定位自己依赖的其它服务之间的分离。

为了实现分离,其实现通常依赖于一个容器或定位符框架-由它们来负责各种具体的任务:

(1)保持一组可用的服务

(2)提供一种方式把组件(即"可服务的对象")与其依赖的服务绑定到一起

(3)为应用程序代码提供一种方式以请求一个配置好的对象(也就是说,一个其依赖性都得到满足的对象)-这可以确保所有相关的服务都可用于该对象

作用是将服务(或者应用程序组件)的定义和服务如何定位它们依赖的服务进行分离。提高程序代码的解耦性。

128、说说反射机制

Reflection使Java程序可以加载一个运行时才得知名称的class,获悉其完整构造(但不包括methods定义),并生成其对象实体、或对其fields设值、或唤起其methods1

129ThreadLoacal 用途?

线程局部变量(ThreadLocal)其实的功用非常简单,就是为每一个使用该变量的线程都提供一个变量值的副本,是每一个线程都可以独立地改变自己的副本,而不会和其它线程的副本冲突。

130instanceof运算符的作用

它的作用是测试它左边的对象是否是它右边的类的实例,返回boolean类型的数据。

131“>>”“>>>”的区别

>>代表有符号的右移操作符,>>>代表无符号右移操作符。

132、简述springIOC模式的理解

一种控制反转模式实现服务(或应用程序组件)的定义方式与这些服务应该怎样定位自己依赖的其它服务之间的分离,不需要再程序里面多次创建对象,而只用告诉容器我需要什么对象,容器会通过接口或者显示构造函数分配给你那个对象实例.

133JavaBean的定义以

javaBean是一种可重复使用、且跨平台的软件组件。分为两种:一种是图形javaBean,另一种是非图形javaBean

通常javaBean是一个public类,且必须有一个无参数的构造函数,具有getXXXsetXXX 方法。

134、请阐述JSPrequest. getParameter (“test”)request. getAttribute(“test”)的区别,并给出是实际应用中的代码片断和说明。

request. getParameter (“test”)获取超联接都的参数,如http://127.0.0.1/Test/test =test;则: String test = request. getParameter (“test”); test的值为“test”.request. getAttribute(“test”)获取request 对象里键为“test”的值,如 String testRequest = “test”;request.setAttribute(“test”, testRequest);则:String test = request. getParameter (“test”); test的值为“test”

 

JAVA编程题(共计11题)

1.现在输入n个数字,以逗号,分开;然后可选择升或者降序排序;按提交键就在另一页面显示按什么排序,结果为,提供reset

import java.util.*;

public class bycomma{

 public static String[] splitStringByComma(String source){

   if(source==null||source.trim().equals(""))

    return null;

   StringTokenizer commaToker = new StringTokenizer(source,",");

   String[] result = new String[commaToker.countTokens()];

   int i=0;

   while(commaToker.hasMoreTokens()){

    result[i] = commaToker.nextToken();

    i++;

   }

   return result;

 }

 public static void main(String args[]){

 String[] s = splitStringByComma("5,8,7,4,3,9,1");

 int[] ii = new int[s.length];

 for(int i = 0;i<S.LENGTH;I++){

 ii[i] =Integer.parseInt(s[i]);

 }

    Arrays.sort(ii);

    //asc

    for(int i=0;i<S.LENGTH;I++){

    System.out.println(ii[i]);

    }

    //desc

    for(int i=(s.length-1);i>=0;i--){

    System.out.println(ii[i]);

    }

 }

}

2.金额转换,阿拉伯数字的金额转换成中国传统的形式如:(¥1011)->(一千零一拾一元整)输出。

package test.format;

import java.text.NumberFormat;

import java.util.HashMap;

public class SimpleMoneyFormat {

  public static final String EMPTY = "";

  public static final String ZERO = "";

  public static final String ONE = "";

  public static final String TWO = "";

  public static final String THREE = "";

  public static final String FOUR = "";

  public static final String FIVE = "";

  public static final String SIX = "";

  public static final String SEVEN = "";

  public static final String EIGHT = "";

  public static final String NINE = "";

  public static final String TEN = "";

  public static final String HUNDRED = "";

  public static final String THOUSAND = "";

  public static final String TEN_THOUSAND = "";

  public static final String HUNDRED_MILLION = "亿";

  public static final String YUAN = "";

  public static final String JIAO = "";

  public static final String FEN = "";

  public static final String DOT = ".";

  private static SimpleMoneyFormat formatter = null;

  private HashMap chineseNumberMap = new HashMap();

  private HashMap chineseMoneyPattern = new HashMap();

  private NumberFormat numberFormat = NumberFormat.getInstance();

  private SimpleMoneyFormat() {

    numberFormat.setMaximumFractionDigits(4);

    numberFormat.setMinimumFractionDigits(2);

    numberFormat.setGroupingUsed(false);

    chineseNumberMap.put("0", ZERO);

    chineseNumberMap.put("1", ONE);

    chineseNumberMap.put("2", TWO);

    chineseNumberMap.put("3", THREE);

    chineseNumberMap.put("4", FOUR);

    chineseNumberMap.put("5", FIVE);

    chineseNumberMap.put("6", SIX);

    chineseNumberMap.put("7", SEVEN);

    chineseNumberMap.put("8", EIGHT);

    chineseNumberMap.put("9", NINE);

    chineseNumberMap.put(DOT, DOT);

    chineseMoneyPattern.put("1", TEN);

    chineseMoneyPattern.put("2", HUNDRED);

    chineseMoneyPattern.put("3", THOUSAND);

    chineseMoneyPattern.put("4", TEN_THOUSAND);

    chineseMoneyPattern.put("5", TEN);

    chineseMoneyPattern.put("6", HUNDRED);

    chineseMoneyPattern.put("7", THOUSAND);

    chineseMoneyPattern.put("8", HUNDRED_MILLION);

  }

  public static SimpleMoneyFormat getInstance() {

    if (formatter == null)

      formatter = new SimpleMoneyFormat();

    return formatter;

  }

  public String format(String moneyStr) {

    checkPrecision(moneyStr);

    String result;

    result = convertToChineseNumber(moneyStr);

    result = addUnitsToChineseMoneyString(result);

    return result;

  }

  public String format(double moneyDouble) {

    return format(numberFormat.format(moneyDouble));

  }

  public String format(int moneyInt) {

    return format(numberFormat.format(moneyInt));

  }

  public String format(long moneyLong) {

    return format(numberFormat.format(moneyLong));

  }

  public String format(Number moneyNum) {

    return format(numberFormat.format(moneyNum));

  }

  private String convertToChineseNumber(String moneyStr) {

    String result;

    StringBuffer cMoneyStringBuffer = new StringBuffer();

    for (int i = 0; i < moneyStr.length(); i++) {

      cMoneyStringBuffer.append(chineseNumberMap.get(moneyStr.substring(i, i + 1)));

    }

    //拾佰仟万亿等都是汉字里面才有的单位,加上它们

    int indexOfDot = cMoneyStringBuffer.indexOf(DOT);

    int moneyPatternCursor = 1;

    for (int i = indexOfDot - 1; i > 0; i--) {

      cMoneyStringBuffer.insert(i, chineseMoneyPattern.get(EMPTY + moneyPatternCursor));

      moneyPatternCursor = moneyPatternCursor == 8 ? 1 : moneyPatternCursor + 1;

    }

    String fractionPart = cMoneyStringBuffer.substring(cMoneyStringBuffer.indexOf("."));

    cMoneyStringBuffer.delete(cMoneyStringBuffer.indexOf("."), cMoneyStringBuffer.length());

    while (cMoneyStringBuffer.indexOf("零拾") != -1) {

      cMoneyStringBuffer.replace(cMoneyStringBuffer.indexOf("零拾"), cMoneyStringBuffer.indexOf("零拾") + 2, ZERO);

    }

    while (cMoneyStringBuffer.indexOf("零佰") != -1) {

      cMoneyStringBuffer.replace(cMoneyStringBuffer.indexOf("零佰"), cMoneyStringBuffer.indexOf("零佰") + 2, ZERO);

    }

    while (cMoneyStringBuffer.indexOf("零仟") != -1) {

      cMoneyStringBuffer.replace(cMoneyStringBuffer.indexOf("零仟"), cMoneyStringBuffer.indexOf("零仟") + 2, ZERO);

    }

    while (cMoneyStringBuffer.indexOf("零万") != -1) {

      cMoneyStringBuffer.replace(cMoneyStringBuffer.indexOf("零万"), cMoneyStringBuffer.indexOf("零万") + 2, TEN_THOUSAND);

    }

    while (cMoneyStringBuffer.indexOf("零亿") != -1) {

      cMoneyStringBuffer.replace(cMoneyStringBuffer.indexOf("零亿"), cMoneyStringBuffer.indexOf("零亿") + 2, HUNDRED_MILLION);

    }

    while (cMoneyStringBuffer.indexOf("零零") != -1) {

      cMoneyStringBuffer.replace(cMoneyStringBuffer.indexOf("零零"), cMoneyStringBuffer.indexOf("零零") + 2, ZERO);

    }

    if (cMoneyStringBuffer.lastIndexOf(ZERO) == cMoneyStringBuffer.length() - 1)

      cMoneyStringBuffer.delete(cMoneyStringBuffer.length() - 1, cMoneyStringBuffer.length());

    cMoneyStringBuffer.append(fractionPart);

    result = cMoneyStringBuffer.toString();

    return result;

  }

  private String addUnitsToChineseMoneyString(String moneyStr) {

    String result;

    StringBuffer cMoneyStringBuffer = new StringBuffer(moneyStr);

    int indexOfDot = cMoneyStringBuffer.indexOf(DOT);

    cMoneyStringBuffer.replace(indexOfDot, indexOfDot + 1, YUAN);

 

4.设计一个程序题:输入n个数字,以逗号分开的字符串; 输出按升序排列的n个数字,以逗号分开的字符串。不能使用类StringTokenizerString的方法split

package pri1;

public class sort {

  public sort() {

  }

  public static void main(String[] args) {

    String str="300,4,1,5,2";

    int pos,beg=0,end;

    int i=0,n,j=0 ,m=0;

  

    if(args.length>0){

      str=args[0];

    }

    System.out.println("str="+str);

    n=str.length();

    for(;i<n;i++){

     char c = str.charAt(i);

     if (c == ',') {

       m++;

     }

   }

    int num[]= new int[m+1];

    i=0;

    for(;i<n;i++){

      char c = str.charAt(i);

      if (c == ',') {

         end=i;

         String s = str.substring(beg,end);

         if(s!=null){

           num[j] = Integer.parseInt(s);

           j++;

         }

         beg=end+1;

      }

     }

     for(i=0;i<num.length;i++){

       System.out.print("num[" + i + "]="+num[i]+ " ");

      

     }

      System.out.print("/n");

             int k,t;

             System.out.println("排序前:");

             for(i=0;i<num.length;i++)

             {

                     System.out.print(num[i]+" " );

             }

             System.out.print("/n" );

             for(i=0;i<num.length;i++)

             {

                     k=i;

                     for(j=i+1;j<num.length;j++)

                     {

                             if(num[j]<num[k])

                             {

                                     k=j;

                             }

                     }

                     t=num[k];

                     num[k]=num[i];

                     num[i]=t;

             }

     for(i=0;i<num.length;i++){

         System.out.print(num[i]+ ",");

  }

 }

}

 

5.编写一个网页,要求页面中只有一个文本框和一个按钮,第一次打开这个页面时,文本框中显示的是按钮的标题。在文本框中输入另外的字符,单击按钮后,按纽的标题变成文本框中的名字。用JavaScript实现。

 <HTML>

<HEAD>

<TITLE> New Document </TITLE>

<script language="JavaScript">

function clickme() {

    document.form.button.value=document.form.text.value;

       return true;

  }

function showbuttonname()

       {

              document.form.text.value=document.form.button.value;

              return true;

       }

</script>

</HEAD>

<BODY οnlοad="return showbuttonname()">

<div align=center>

<br>

<br>

<FORM METHOD=POST ACTION="get" name="form">

<INPUT TYPE="text" NAME="text" >

 

<INPUT TYPE="button" name="button" value="我是按钮" οnclick="return clickme()">

</FORM>

</div>

</BODY>

</HTML>

 

6.编写一个javascript函数,判断一个字符串是否为正整数。

<script language=javascript>

function onlyNum()

{if(!((event.keyCode>=48&&event.keyCode<=57)||(event.keyCode>=96&&event.keyCode<=105)))

event.returnValue=false;}

</script>

<input οnkeydοwn="onlyNum();">

 

7.把一个数组排序,并写出核心算法。

for(int i=0;i<array.length;i++){

for(int j=0;j<array.length-i-1;j++){

if(array[j]>array[j+1]){

                     int temp=array[j+1];

                     array[j+1]=array[j];

                     array[j]=temp;

}

}

}

 

8.请用javascript对一个text值去左右空格,英文自动变大写,前面补加ABCDE

function change(){

       var aa=document.form1.a.value;

       var temp=aa.toUpperCase();

       var begin=0;

       var temp1=temp.split(" ");

       var temp2="";

       for(var i=0;i<temp1.length;i++){

              temp2+=temp1[i];

       }

       alert("ABCDE"+temp2);

}

9.给出一段代码,就是关于子类和基类定义对象,调用相关的方法,看到底调用的是子类还是父类的方法,写出输出结果。

Public class Sub{

       Public void test1(){

              System.out.println(“Sub.test1()!”);

       }

       Public static void main(String[] args){

              Sub sub=new Sub();

              sub.test1();

              Super sup=new Super();

              sup.test1();

              Super sup1=new Sub();

              sup1.test1();

       }

}

Class Super{

       Public void test1(){

              System.out.println(“Super.test1()!”);

       }

}

结果为:    Sub.test1()!

              Super.test1()!

              Sub.test1()!

 

10.如何用JDBC链接ORACLE数据库

import java.sql.*;

public class DBAccess {

       private String driver = "oracle.jdbc.driver.OracleDriver";

       private String url = "jdbc:oracle:thin:@localhost:1521:sidtb";

       private String username = "scott";

       private String password = "tiger";

       private Connection conn = null;

       private Statement stmt = null;

       private ResultSet rs = null;

       public DBAccess() {

              try {

                     // 加载数据库驱动程序类

                     Class.forName(driver);

                     // 2、创建数据库连接对象

                     conn = DriverManager.getConnection(url, username, password);

                     stmt = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,

                                   ResultSet.CONCUR_UPDATABLE);

              } catch (ClassNotFoundException e) {

                     e.printStackTrace();

              } catch (SQLException e) {

                     System.out.println("数据库连接失败");

                     e.printStackTrace();

              }

       }

       public Connection getConn() {

              try {

                     if (conn.isClosed()) {

                            conn = DriverManager.getConnection(url, username, password);

                     }

              } catch (SQLException ex) {

              }

              return conn;

       }

       public Statement getStmt() {

              return stmt;

       }

}

 

11. String str1=”abc bbbd sdsds sds”     String str2=” ”,写代码实现根据str2分割str1并打印出来,效果如下:

abc

bbbd

sdsds

sds

class Test {

       public static void main(String[] args) {

              String str1 = "abc bbbd sdsds sds";

              String str2 = " ";

              String[] strSpilts = str1.split(str2);

              for (String string : strSpilts) {

                     System.out.println(string);

              }

       }

}

 

JAVA代码查错(共计15题)

1.

abstract class Name {

   private String name;

   public abstract boolean isStupidName(String name) {}

}

大侠们,这有何错误?

答案错。abstract method必须以分号结尾,且不带花括号。

2.

public class Something {

   void doSomething () {

       private String s = "";

       int l = s.length();

   }

}

有错吗?

答案错。局部变量前不能放置任何访问修饰符 (privatepublic,和protected)final可以用来修饰局部变量

(final如同abstractstrictfp,都是非访问修饰符,strictfp只能修饰classmethod而非variable)

3.

abstract class Something {

   private abstract String doSomething ();

}

这好像没什么错吧?

答案错。abstractmethods不能以private修饰。abstractmethods就是让子类implement(实现)具体细节的,怎么可以用privateabstract

method封锁起来呢? (同理,abstract method前不能加final)

4.

public class Something {

   public int addOne(final int x) {

       return ++x;

   }

}

这个比较明显。

答案错。int x被修饰成final,意味着x不能在addOne method中被修改。

5.

public class Something {

   public static void main(String[] args) {

       Other o = new Other();

       new Something().addOne(o);

   }

   public void addOne(final Other o) {

       o.i++;

   }

}

class Other {

   public int i;

}

和上面的很相似,都是关于final的问题,这有错吗?

答案正确。在addOne method中,参数o被修饰成final。如果在addOne method里我们修改了oreference

(比如: o = new Other();),那么如同上例这题也是错的。但这里修改的是omember vairable(成员变量),而oreference并没有改变。

6.

class Something {

    int i;

    public void doSomething() {

        System.out.println("i = " + i);

    }

有什么错呢看不出来啊。

答案正确。输出的是"i = 0"int i属於instant variable (实例变量,或叫成员变量)instant variabledefault valueintdefault value0

7.

class Something {

    final int i;

    public void doSomething() {

        System.out.println("i = " + i);

    }

}

和上面一题只有一个地方不同,就是多了一个final。这难道就错了吗?

答案错。final int i是个finalinstant variable (实例变量,或叫成员变量)finalinstant variable没有default value,必须在constructor (构造器)结束之前被赋予一个明确的值。可以修改为"final int i = 0;"

8.

public class Something {

     public static void main(String[] args) {

        Something s = new Something();

        System.out.println("s.doSomething() returns " + doSomething());

    }

    public String doSomething() {

        return "Do something ...";

    }

}

 看上去很完美。

答案错。看上去在maincall doSomething没有什么问题,毕竟两个methods都在同一个class里。但仔细看,mainstatic的。static method不能直接call non-static methods。可改成"System.out.println("s.doSomething() returns " + s.doSomething());"。同理,static method不能访问non-static instant variable

9.

此处,Something类的文件名叫OtherThing.java

class Something {

    private static void main(String[] something_to_do) {        

        System.out.println("Do something ...");

    }

}

 这个好像很明显。

答案正确。从来没有人说过JavaClass名字必须和其文件名相同。但public class的名字必须和文件名相同。

10

interface  A{

   int x = 0;

}

class B{

   int x =1;

}

class C extends B implements A {

   public void pX(){

      System.out.println(x);

   }

   public static void main(String[] args) {

      new C().pX();

   }

}

答案:错误。在编译时会发生错误(错误描述不同的JVM有不同的信息,意思就是未明确的x调用,两个x都匹配(就象在同时import java.utiljava.sql两个包时直接声明Date一样)。对于父类的变量,可以用super.x来明确,而接口的属性默认隐含为 public static final.所以可以通过A.x来明确。

11.

interface Playable {

    void play();

}

interface Bounceable {

    void play();

}

interface Rollable extends Playable, Bounceable {

    Ball ball = new Ball("PingPang");

}

class Ball implements Rollable {

    private String name;

    public String getName() {

        return name;

    }

    public Ball(String name) {

        this.name = name;        

    }

   public void play() {

        ball = new Ball("Football");

        System.out.println(ball.getName());

    }

}

这个错误不容易发现。

答案错。"interface Rollable extends Playable, Bounceable"没有问题。interface可继承多个interfaces,所以这里没错。问题出在interface Rollable里的"Ball ball = new Ball("PingPang");"。任何在interface里声明的interface variable (接口变量,也可称成员变量),默认为public static final。也就是说"Ball ball = new Ball("PingPang");"实际上是"public static final Ball ball = new Ball("PingPang");"。在Ball类的Play()方法中,"ball = new Ball("Football");"改变了ballreference,而这里的ball来自Rollable interfaceRollable interface里的ballpublic static final的,finalobject是不能被改变reference的。因此编译器将在"ball = new Ball("Football");"这里显示有错。

12.  

String arrayName [] =request.getParameterValue(“name”)

String pwd = null;

int nameLength = arrayName.length;

for(int i=0; i<nameLength; i++)

{

             String nameValue = arrayName [i] ;

              System.out.println(nameValue);

}

System.out.println(“Hello”+pwd);

答案错。String arrayName [] =request.getParameterValue(“name”);应该为String arrayName [] =request.getParameterValues(“name”);

13.

       String[] str = requset.getparametervalues(“name”);

      String temp;

      for (int i=0;i<str.length;i++){

             temp+=str[i]+” ^ ”;

      }

答案错。尚未初始化变量 temp

14.

abstract  class  Name {

private String name;

public abstract boolean is Boolean Name (String name) { }

}

答案错。抽象方法后面声明后不用{}而直接用分号。

15.

public class Test {

void  addstriy  ( ) {

private  String  Str = “”;

int  i = Str.length ( ) ;

}

答案错。局部变量不能用private修饰。

 

Java程序段结果(共计60题)

1.    public class Test {

           public static void main(String[] args) {

Value v=new Value();

              v.i=25;

              int i=5;

              second(v,i);

              System.out.println(v.i+"&"+i);

           }

           public static void second(Value v,int i){

              v.i=0;

              Value v2=new Value();

              i=0;

              v=v2;

              System.out.println(v.i+"&"+i);

           }

}

class Value{

           public int i=15;

}

问:输出程序结果:

       输出结果:    15&0

                            0&5

2.    switch (x)

{

case 1:

System.out.println("Test1");

break;

case 2:

              case 3:

                     System.out.println("Test3");

                     break;

              case 4:

                     System.out.println("Test4");

                     break;

              default:

                     System.out.println("defalut");

              }

问:当X为什么值时打印的结果是Test3.

       结果:    X=2或者x=3

3.    int[] number=new int[2];

for(int i=0;i<number.length;i++){

                     System.out.println(number[i]);

              }

                                     

问:输出结果是什么。

       输出结果:    0

0

4 int[]a=new int[];

int[10]b=new int[];

int[][]c=new int[][10];

int[][]d=new int[10][];

int[]e=new int[10];

问:哪个声明方式是正确的。

       结果:    int[][]d=new int[10][];

int[]e=new int[10];

5.    try {

System.out.println("begin exception");

……………………

System.out.println("end exception!");

Return;

} catch (Exception e) {

System.out.println("runtime exception");

}finally{

System.out.println("finally exception");

}

问:当程序运行时,没有发生异常,会输出什么样的结果。

       输出结果:    begin exception

end exception!

finally exception

6.    以下代码输出的结果是什么?

public class Foo {

public static void main(String[] args) {

              String s = “Java-Java”;

              s.replacesAll(“-”, “*”);

              System.out.println(“s = ” + s);

}

}

A)    s = Java-Java

B)    s = Java*Java

C)    无法编译

D)    运行时错误

答案:A

7.    请写出程序输出结果

      Public Class Father(){

            Public Father(){

System.out.print(“CreateFather”);

}

}

Public Class Sub{

             Public Sub(){

                   System.out.print(“CreateSub”);

Public static void main(){

Father aa  = new Father();

Sub bb  = new Sub();

}

}

输出结果:    CreateFather

CreateFather

CreateSub

8.    执行下列代码结果是()

       class a {

              public int a =99 ;

              public void boo()

              {

                     System.out.println("aaa");

              }

              a()

              {

                    boo();

              }

}

class b extends a  {

              int a = -1 ;

              public void boo()

              { 

                    System.out.println("bbb");

              }

              public static void main()

              {

                     a bb = new  b ();

                     bb.boo();

                     System.out.println(bb.a);

              }

}

 输出结果:   bbb

                     bbb

                     99

 

Java编程测试题(共计60题)

Question 1) (which in red color is right)

What will happen when you attempt to compile and run this code?

abstract class Base{

        abstract public void myfunc();

        public void another(){

        System.out.println("Another method");

        }

}

public class Abs extends Base{

        public static void main(String argv[]){

        Abs a = new Abs();

        a.amethod();

        }

        public void myfunc(){

                System.out.println("My Func");

                }

        public void amethod(){

        myfunc();

        }

}

1) The code will compile and run, printing out the words "My Func"

2) The compiler will complain that the Base class has non abstract methods

3) The code will compile but complain at run time that the Base class has non abstract methods

4) The compiler will complain that the method myfunc in the base class has no body, nobody at all to looove it

Answer to Question 1 1

Question 2)

What will happen when you attempt to compile and run this code?

public class MyMain{

public static void main(String argv){

        System.out.println("Hello cruel world");

        }

}

1) The compiler will complain that main is a reserved word and cannot be used for a class

2) The code will compile and when run will print out "Hello cruel world"

3) The code will compile but will complain at run time that no constructor is defined

4) The code will compile but will complain at run time that main is not correctly defined

Answer to Question 2 4

Question 3)

Which of the following are Java modifiers?

1) public

2) private

3) friendly

4) transient

5) vagrant

Answer to Question 3 124

Question 4)

What will happen when you attempt to compile and run this code?

class Base{

public final void amethod(){

        System.out.println("amethod");

        }

}

public class Fin extends Base{

public static void main(String argv[]){

          Base b = new Base();

          b.amethod();

     }

}

1) Compile time error indicating that a class with any final methods must be declared final itself

2) Compile time error indicating that you cannot inherit from a class with final methods

3) Run time error indicating that Base is not defined as final

4) Success in compilation and output of "amethod" at run time.

Answer to Question 4 4

Question 5)

What will happen when you attempt to compile and run this code?

public class Mod{

public static void main(String argv[]){

    }

     public static native void amethod();

}

1) Error at compilation: native method cannot be static

2) Error at compilation native method must return value

3) Compilation but error at run time unless you have made code containing native amethod available

4) Compilation and execution without error

Answer to Question 5 4

Question 6)

What will happen when you attempt to compile and run this code?

private class Base{}

public class Vis {

      transient int iVal;

     public static void main(String elephant[]){

}

}

1)Compile time error: Base cannot be private

2)Compile time error indicating that an integer cannot be transient

3)Compile time error transient not a data type

4)Compile time error malformed main method

Answer to Question 6 1

Question 7)

What happens when you attempt to compile and run these two files in the same directory?

//File P1.java

package MyPackage;

class P1{

void afancymethod(){

        System.out.println("What a fancy method");

}

}

//File P2.java

public class P2 extends P1{

afancymethod();

}

1) Both compile and P2 outputs "What a fancy method" when run

2) Neither will compile

3) Both compile but P2 has an error at run time

4) P1 compiles cleanly but P2 has an error at compile time

Answer to Question 7 4

Question 8)

You want to find out the value of the last element of an array. You write the following code. What will happen when you compile and run it.?

public class MyAr{

public static void main(String argv[]){

          int[] i = new int[5];

          System.out.println(i[5]);

}

}

1) An error at compile time

2) An error at run time

3) The value 0 will be output

4) The string "null" will be output

Answer to Question 8 2

Question 9)

You want to loop through an array and stop when you come to the last element. Being a good java programmer and forgetting everything you ever knew about C/C++ you know that arrays contain information about their size. Which of the following can you use?

1)myarray.length();

2)myarray.length;

3)myarray.size

4)myarray.size();

Answer to Question 9 2

Question 10)

How does the set collection deal with duplicate elements?

1) An exception is thrown if you attempt to add an element with a duplicate value

2) The add method returns false if you attempt to add an element with a duplicate value

3) A set may contain elements that return duplicate values from a call to the equals method

4) Duplicate values will cause an error at compile time

Answer to Question 10) 3

Question 11)

What can cause a thread to stop executing?

1) The program exits via a call to System.exit(0);

2) Another thread is given a higher priority

3) A call to the thread's stop method.

4) A call to the halt method of the Thread class

Answer to Question 11) 13

Question 12)

For a class defined inside a method, what rule governs access to the variables of the enclosing method?

1) The class can access any variable

2) The class can only access static variables

3) The class can only access transient variables

4) The class can only access final variables

Answer to Question 12) 4

Question 13)

What will happen when you attempt to compile and run the following code

public class Hope{

public static void main(String argv[]){

Hope h = new Hope();

}

protected Hope(){

for(int i =0; i <10; i ++){

                    System.out.println(i);

             }

}

}

1) Compilation error: Constructors cannot be declared protected

2) Run time error: Constructors cannot be declared protected

3) Compilation and running with output 0 to 10

4) Compilation and running with output 0 to 9

Answer to Question 13) 4

Question 14)

What will happen when you attempt to compile and run the following code

public class MySwitch{

public static void main(String argv[]){

            MySwitch ms= new MySwitch();

            ms.amethod();

    }

public void amethod(){

            int k=10;

             switch (k){

                 default: //Put the default at the bottom, not here

                      System.out.println("This is the default output");

                      break;

                 case 10:

                      System.out.println("ten");

                 case 20:

                      System.out.println("twenty");

                        break;

           }

    }

}

1) None of these options

2) Compile time error target of switch must be an integral type

3) Compile and run with output "This is the default output"

4) Compile and run with output of the single line "ten"

Answer to Question 14) 1

Question 15)

What will happen when you attempt to compile and run the following code with the command line "hello there"

public class Arg{

String[] MyArg;

     public static void main(String argv[]){

          MyArg=argv;

}

public void amethod(){

System.out.println(argv[1]);

}

}

1) Compile time error

2) Compilation and output of "hello"

3) Compilation and output of "there"

4) None of the above

Answer to Question 15) 1

Question 16)

What will happen when you attempt to compile and run the following code

public class StrEq{

public static void main(String argv[]){

          StrEq s = new StrEq();

}

private StrEq(){

String s = "Marcus";

String s2 = new String("Marcus");

if(s == s2){

                   System.out.println("we have a match");

            }else{

System.out.println("Not equal");

}

}

}

1) Compile time error caused by private constructor

2) Output of "we have a match"

3) Output of "Not equal"

4) Compile time error by attempting to compare strings using ==

Answer to Question 16) 3

Question 17)

Which of the following will compile correctly

1) short myshort = 99S;

2) String name = 'Excellent tutorial Mr Green';

3) char c = 17c ;

4)int z = 015;

Answer to Question 17) 4

Question 18)

Which of the following are Java key words

1)double

2)Switch

3)then

4)instanceof

Answer to Question 18) 14

Question 19)

What will be output by the following line?

System.out.println(Math.floor(-2.1));

1) -2

2) 2.0

3) -3

4) -3.0

Answer to Question 19) 4

Question 20)

Which of the following statements are true?

1) At the root of the collection hierarchy is a class called Collection

2) The collection interface contains a method called enumerator

3) The interator method returns an instance of the Vector class

4) The set interface is designed for unique elements

Answer to Question 20) 4

Question 21)

Which of the following statements are true

1) An inner class may be defined as static

2) There are NO circumstances where an inner class may be defined as private

3) An anonymous class may have only one constructor

4) An inner class may extend another class

Answer to Question 21) 14

Question 22)

Given the following variables

char c = 'c';

int i = 10;

double d = 10;

long l = 1;

String s = "Hello";

Which of the following will compile without error?

1)c=c+i;

2)s+=i;

3)i+=s;

4)c+=s;

Answer to Question 22) 2

Question 23)

Which of the following methods are members of the Vector class and allow you to input a new element

1) addElement

2) insert

3) append

4) addItem

Answer to Question 23) 1

Question 24)

Which of the following statements are true?

1) Adding more classes via import statements will cause a performance overhead, only   import classes you actually use.

2) Under no circumstances can a class be defined with the private modifier

3) A inner class may under some circumstances be defined with the protected modifier

4) An interface cannot be instantiated

Answer 24) 34

Question 25)

Which of the following are methods of the Collection interface?

1) iterator

2) isEmpty

3) toArray

4) setText

Answer 25) 12

Question 26)

Which of the following best describes the use of the synhronized keyword?

1) Allows two process to run in paralell but to communicate with each other

2) Ensures only one thread at a time may access a method or object

3) Ensures that two or more processes will start and end at the same time

4) Ensures that two or more Threads will start and end at the same time

Answer 26) 2

Question 27)

Which are keywords in Java?

   A. NULL

   B. true

   C. sizeof

   D. implements

   E. instanceof  

Answer 27) BDE

Question 28)

Consider the following code:  

   Integer s = new Integer(9);

   Integer t = new Integer(9);

   Long u = new Long(9);  

   Which test would return true?

   A. (s==u)

   B. (s==t)

   C. (s.equals(t))

   D. (s.equals(9))

   E. (s.equals(new Integer(9)) 

Answer 28) CE

Question 29)

Given the following method body:

{

          if (sometest()) {

                 unsafe();

} else {

                safe();

          }

}

The method "unsafe" might throw an IOException (which is not a subclass of RunTimeException). Which correctly completes the method of declaration when added at line one?

   A. public void methodName() throws Exception

   B. public void methodname()

   C. public void methodName() throw IOException

   D. public void methodName() throws IOException

   E. public IOException methodName()

Answer 29) D

Question 30)

下列不是JAVA的关键字的是:

Asize of

Bture

Cconst      

DVisable

Answer 30) ACD

Question 31)

下列为真值的是:

String a="hello";

String b="hello";

char c[]={'h','e','l','l','o'};

A.a.equls(b)

B a==b

C a.equls(c)

D b==c //类型不匹配

Answer 31) AB

Question 32)

public class IfTest{

public static void main(String[] args){

int x=3;

int y=1;

if(x=y)

System.out.println("Not equal");

else

System.out.println("Equal");

}

}

what is the result?

a Compile error.

b Program dose not terminate

c Prints out Not equal

d Prints out Equal

Answer 32) A

Question 33)

consider the following program:

public class Test{

public static void main(String[] args){

boolean a=false;

if(a=true)

System.out.println("Hello");

else

System.out.println("Goodbye");

int x=3;

}

}

What is the result:

a Program produces no output terminates correctly.

b Program does not terminate.

c prints out "Hello".

d prints out "Goodbye".

Answer 33) C

Question 34)

public class X{

public static void main(String[] args){

String foo="ABCDE";

foo.substring(3);

foo.concat(“XYZ”);

}

}

What is the value of foo at line 6:

Answer 34) ABCDE

Question 35)

public class Test{

public static void add3(Integer i){

int val=i.intvalue();

val+=3;

i=new Integer(val);

}

public static void main(String[] args){

Integer i=new Integer(0);

add3(i);

System.out.println(i.intvalue);

}

}

What is the result:

a comile fail.

b print out "0".

c print out "3".

d comile succeded but excption at line 3.

Answer 35) B

Question 36)

public class ConstOver{

public ConstOver(int x,itn y,int z){

}

}

which two overload the ConstOver Consteructor?

a ConstOver(){}

b protected int ConstOver(){}

c private ConsteOver(){}

d public  void ConstOver(byte x,byte y,byte z){}

e public Object ConstOver(int x,int y,int z){}

Answer 36) AC

Question 37)

public class Test{

public static void main(String[] args){

class Foo{

public int i=3;

}

Object o=(Object)new Foo();

Foo foo=(Foo)o;

Systm.out.println(foo.i);

}

}

what is result?C

a compile error at line 6

b compile error at line 7

c print out 3

Answer 37) C

Question 38)

class ExceptionTest{

public static void main(String[] args){

try{

methodA();

}catch(IOException e){

System.out.println("caught IOException")

}catch(Exception e){

System.out.println("caught Exception")

}

}

}

if methodA throws a IOException,what is the result?

Answer 38) caught IOException

Question 39)

int index=1;

int foo[]=new int[3];

int bar=foo[index];

int baz=bar+index;

what is the result?

a baz has a value of 0

b baz has vaule of 1

c baz has vaule of 2

d an exception is throw

e the code will not cpmpile

Answer 39) B

Question 40)

which three are valid declaraction of a float?

a float foo=1

b float foo=1.0

c float foo=42el

d float foo= 2.02f

e float foo=3.03

f float foo=0x0123

Answer 40) ADF

Question 41)

public class foo{

public static void main(String[] args){

String s;

System.out.println("s="+s);

}

}

what is the result?

Answer 41) (变量s没有初始化。)

Question 42)

what is reserved words in java?

a.run

b default

c implement

d import

Answer 42) BD

Question 43)

public class MyClass{

public static void main(String[] arguments){

amethod(arguments);

}

public void amethod(String[] arguments){

System.out.println(arguments);

System.out.println(arguments[1]);

}

}

what will happen if you compile and run the code?

a error Can't make static refarence to void amethod

b error method main not correct

c error array must include parameter

d amethod must be declared with String

Answer 43) A

Question 44)

the following code resudes in the source?

class StringTest{

public static void main(String[] args){

//

//String comparing

//

String a,b;

StringBuffer c,d;

c=new StringBuffer("Hello");

a=new String("hello");

b=a;

d=c;

id(<<<operator>>>){}

}

}//class

which of the following statement return true for the <<<operator>>> line in StringTest.calss?

a b.equals(a)

b b==a

c d==c

d d.equals(c)

Answer 44) ABCD

Question 45)

以下关于SessionFactory的说法哪些正确?(多选)

A 对于每个数据库事务,应该创建一个SessionFactory对象

B 一个SessionFactory对象对应一个数据库存储源。

C SessionFactory是重量级的对象,不应该随意创建。如果系统中只有一个数据库存储源,只需要创建一个。

D SessionFactoryload()方法用于加载持久化对象

Answer 45) BC

Question 46)

以下哪些属于Session的方法?(多选)

A load()

B save()

C delete()

D update()

E)open()

F)close()

Answer 46) ABCDF

Question 47)

以下程序的打印结果是什么?(单选)

tx = session.beginTransaction();

Customer c1=(Customer)session.load(Customer.class,new Long(1));

Customer c2=(Customer)session.load(Customer.class,new Long(1));

System.out.println(c1==c2);

tx.commit();

session.close();

A 运行出错,抛出异常

B 打印false

C 打印true

Answer 47) B

Question 48)

假设对Customer类的orders集合采用延迟检索策略,编译或运行以下程序,会出现什么情况(单选)

Session session=sessionFactory.openSession();

tx = session.beginTransaction();

Customer customer=(Customer)session.get(Customer.class,new Long(1));

tx.commit();

session.close();

Iterator orderIterator=customer.getOrders().iterator();

Answer 48) (引发延迟加载异常(Exception initialize proxy

Question 49)

关于HQLSQL,以下哪些说法正确?(多选)

A HQLSQL没什么差别

B HQL面向对象,而SQL操纵关系数据库

C HQLSQL中,都包含select,insert,update,delete语句

D HQL仅用于查询数据,不支持insert,updatedelete语句

Answer 49) BC

Question 50)

执行下列代码运行结果是()

Swith(c)

{

Case :1

{

            Systm.out.println(aaaa);

}

Case:2

Case :3

{

System.out.println(ccccc)

Break

}

System.out.println(dddd);

}

C为( )的时候打印出CCCC

A 1  B 2   C 3  D 4

Answer 50) BC

Question 51)

怎样可以让一个线程暂时停止让其他线程进入表示 为真的是:

       A 出现线程异常

       B 执行 read()方法

       C 执行 wait ()方法

       D 执行

Answer 51) C

Question 52)

执行下列代码为真的是:

Public void show(){

       Public static int i ;

      Public static void main(){

             System.out.println(i);

       }

}

A 0

B 编译错误

C 函数未初始化

D 无法执行

Answer 52) B

Question 53)

执行下列代码为真的是:

Public void show()

{

       Public  int i ;

      Public static void main()

{

             System.out.println(i);

       }

}

A 0

B 编译错误

C 函数未初始化

D 无法执行

Answer 53) B

Question 54)

定义5个空的字符:

A    String  [] aa = new String(5)

For(int i=0 ,i<aa.length();i++)

{

                    aa[i]=null ;

}

B    String [] aa = {“ ”,” ”,” ”,” ”,” ”};

C    String [5] aa

D    String  [] aa = new String(5)

For(int i=0 ,i<aa.length();i++)

{

                    aa[i]=” ” ;

}

Answer 54) B

Question 55)

下面哪个是声明i的语句?

A <% float i=4.2%>

B <%# double I =4.2%>

C <%! Double I =4.2 %>

D <% @ Double I =4.2%>

Answer 55) C

Question 56)

下面哪个是在tomcatweb.xml的位置

A  %Tomcat_Home%webapps/ROOT/WEB-INF

B  %Tomcat_Home%webapps/ROOT/WEB-INF/lib

C  %Tomcat_Home%webapps/ROOT/WEB-INF/lib/classes

D %Tomcat_Home%webapps/ROOT

Answer 56) A

Question 56)

Given the following declaration

   String s = "Example";  

   Which are legal code?  

   A. s >>> = 3;

   B. s[3] = "x";

   C. int i = s.length();

   D. String t = "For " + s;

   E. s = s + 10;

Answer 56) CDE

Question 57)

下面哪些运算符与out.print功能一样

A <%     %>

B <%@ — —%>

C <%   %>

D <%=  %>

Answer 57) D

Question 58)

下面代码的显示结果是________

Try

{

       System.out.println(“ 1” );

       Throw exception();

}

Catch(exception e)

{

       System.out.println(“ 2” );

}

Finially

{

System.out.println(“ 3” );

}

Answer 58) 123

Question 59)

public class Jtest{

int m=1;

int i=3;

void Jtest(){

m=2;

i=4;

}

public static void main(String[] args){

Jtest app=new Jtest();

System.out.println(app.m+","+app.i);

}

}

Answer 59) 13

Question 60)

public class Jtest{

int m=1;

int i=3;

void Jtest(){

m=2;

i=4;

}

public static void main(String[] args){

Jtest app=new Jtest();

app.Jtest();

System.out.println(app.m+","+app.i);

}

}

Answer 60) 24

 

C++/C 试题(共计6题)

本试题仅用于考查C++/C 程序员的基本编程技能。内容限于C++/C 常用语法,不

涉及数据结构、算法以及深奥的语法。考试成绩能反映出考生的编程质量以及对C++/C

的理解程度,但不能反映考生的智力和软件开发能力。

笔试时间90 分钟。请考生认真答题,切勿轻视。

一、请填写BOOL , float, 指针变量 零值比较的 if 语句。(10 分)

提示:这里零值可以是0, 0.0 , FALSE 或者空指针。例如 int 变量 n 零值

比较的 if 语句为:

if ( n == 0 )

if ( n != 0 )

以此类推。

请写出 BOOL flag 零值比较的 if 语句:

请写出 float x 零值比较的 if 语句:

请写出 char *p 零值比较的 if 语句:

二、以下为Windows NT 下的32 C++程序,请计算sizeof 的值(10 分)

void Func ( char str[100])

{

请计算

sizeof( str ) =

}

char str[] = “Hello” ;

char *p = str ;

int n = 10;

请计算

sizeof (str ) =

sizeof ( p ) =

sizeof ( n ) =

void *p = malloc( 100 );

请计算

sizeof ( p ) =

高质量C++/C 编程指南,v 1.0

2001 Page 94 of 101

三、简答题(25 分)

1、头文件中的 ifndef/define/endif 干什么用?

2#include <filename.h> #include “filename.h” 有什么区别?

3const 有什么用途?(请至少说明两种)

4、在C++ 程序中调用被 C 编译器编译后的函数,为什么要加 extern “C”声明?

5、请简述以下两个for 循环的优缺点

// 第一个

for (i=0; i<N; i++){

if (condition)

DoSomething();

else

DoOtherthing();

}

// 第二个

if (condition){

for (i=0; i<N; i++)

DoSomething();

} else {

for (i=0; i<N; i++)

DoOtherthing();

}

优点:

缺点:

优点:

缺点:

高质量C++/C 编程指南,v 1.0

2001 Page 95 of 101

四、有关内存的思考题(20 分)

void GetMemory(char *p){

p = (char *)malloc(100);

}

void Test(void){

char *str = NULL;

GetMemory(str);

strcpy(str, "hello world");

printf(str);

}

请问运行Test 函数会有什么样的结果?

答:

char *GetMemory(void){

char p[] = "hello world";

return p;

}

void Test(void){

char *str = NULL;

str = GetMemory();

printf(str);

}

请问运行Test 函数会有什么样的结果?

答:

Void GetMemory2(char **p, int num){

*p = (char *)malloc(num);

}

void Test(void){

char *str = NULL;

GetMemory(&str, 100);

strcpy(str, "hello");

printf(str);

}

请问运行Test 函数会有什么样的结果?

答:

void Test(void){

char *str = (char *) malloc(100);

strcpy(str, hello);

free(str);

if(str != NULL){

strcpy(str, world);

printf(str);

}

}

请问运行Test 函数会有什么样的结果?

答:

高质量C++/C 编程指南,v 1.0

2001 Page 96 of 101

五、编写strcpy 函数(10 分)

已知strcpy 函数的原型是

char *strcpy(char *strDest, const char *strSrc);

其中strDest 是目的字符串,strSrc 是源字符串。

1)不调用C++/C 的字符串库函数,请编写函数 strcpy

2strcpy 能把strSrc 的内容复制到strDest,为什么还要char * 类型的返回值?

六、编写类String 的构造函数、析构函数和赋值函数(25 分)

已知类String 的原型为:

class String{

public:

String(const char *str = NULL); // 普通构造函数

String(const String &other); // 拷贝构造函数

~ String(void); // 析构函数

String & operate =(const String &other); // 赋值函数

private:

char *m_data; // 用于保存字符串

};

请编写String 的上述4 个函数。

高质量C++/C 编程指南,v 1.0

2001 Page 97 of 101

附录C C++/C 试题的答案与评分标准

一、请填写BOOL , float, 指针变量 零值比较的 if 语句。(10 分)

请写出 BOOL flag 零值比较的 if 语句。(3 分)

标准答案:

if ( flag )

if ( !flag )

如下写法均属不良风格,不得分。

if (flag == TRUE)

if (flag == 1 )

if (flag == FALSE)

if (flag == 0)

请写出 float x 零值比较的 if 语句。(4 分)

标准答案示例:

const float EPSINON = 0.00001;

if ((x >= - EPSINON) && (x <= EPSINON)

不可将浮点变量用“==”=”与数字

比较,应该设法转化成“>=”“<=”

类形式。

如下是错误的写法,不得分。

if (x == 0.0)

if (x != 0.0)

请写出 char *p 零值比较的 if 语句。(3 分)

标准答案:

if (p == NULL)

if (p != NULL)

如下写法均属不良风格,不得分。

if (p == 0)

if (p != 0)

if (p)

if (!)

二、以下为Windows NT 下的32 C++程序,请计算sizeof 的值(10 分)

void Func ( char str[100])

{

请计算

sizeof( str ) = 4 2 分)

}

char str[] = “Hello” ;

char *p = str ;

int n = 10;

请计算

sizeof (str ) = 6 2 分)

sizeof ( p ) = 4 2 分)

sizeof ( n ) = 4 2 分)

void *p = malloc( 100 );

请计算

sizeof ( p ) = 4 2 分)

高质量C++/C 编程指南,v 1.0

2001 Page 98 of 101

三、简答题(25 分)

1、头文件中的 ifndef/define/endif 干什么用?(5 分)

答:防止该头文件被重复引用。

2#include <filename.h> #include “filename.h” 有什么区别?(5 分)

答:对于#include <filename.h> ,编译器从标准库路径开始搜索 filename.h

对于#include “filename.h” ,编译器从用户的工作路径开始搜索 filename.h

3const 有什么用途?(请至少说明两种)(5 分)

答:(1)可以定义 const 常量

2const 可以修饰函数的参数、返回值,甚至函数的定义体。被const 修饰的东

西都受到强制保护,可以预防意外的变动,能提高程序的健壮性。

4、在C++ 程序中调用被 C 编译器编译后的函数,为什么要加 extern “C” 5 分)

答:C++语言支持函数重载,C 语言不支持函数重载。函数被C++编译后在库中的名字

C 语言的不同。假设某个函数的原型为: void foo(int x, int y);

该函数被C 编译器编译后在库中的名字为_foo C++编译器则会产生像

_foo_int_int 之类的名字。

C++提供了C 连接交换指定符号externC来解决名字匹配问题。

5、请简述以下两个for 循环的优缺点(5 分)

for (i=0; i<N; i++)

{

if (condition)

DoSomething();

else

DoOtherthing();

}

if (condition)

{

for (i=0; i<N; i++)

DoSomething();

}

else

{

for (i=0; i<N; i++)

DoOtherthing();

}

优点:程序简洁

缺点:多执行了N-1 次逻辑判断,并且

打断了循环流水线作业,使得编译

器不能对循环进行优化处理,降低了效

率。

优点:循环的效率高

缺点:程序不简洁

高质量C++/C 编程指南,v 1.0

2001 Page 99 of 101

四、有关内存的思考题(每小题5 分,共20 分)

void GetMemory(char *p)

{

p = (char *)malloc(100);

}

void Test(void)

{

char *str = NULL;

GetMemory(str);

strcpy(str, "hello world");

printf(str);

}

请问运行Test 函数会有什么样的结果?

答:程序崩溃。

因为GetMemory 并不能传递动态内存,

Test 函数中的 str 一直都是 NULL

strcpy(str, "hello world");将使程序崩

溃。

char *GetMemory(void)

{

char p[] = "hello world";

return p;

}

void Test(void)

{

char *str = NULL;

str = GetMemory();

printf(str);

}

请问运行Test 函数会有什么样的结果?

答:可能是乱码。

因为GetMemory 返回的是指向栈内存

的指针,该指针的地址不是 NULL,但其原

现的内容已经被清除,新内容不可知。

void GetMemory2(char **p, int num)

{

*p = (char *)malloc(num);

}

void Test(void)

{

char *str = NULL;

GetMemory(&str, 100);

strcpy(str, "hello");

printf(str);

}

请问运行Test 函数会有什么样的结果?

答:

1)能够输出hello

2______内存泄漏

void Test(void)

{

char *str = (char *) malloc(100);

strcpy(str, hello);

free(str);

if(str != NULL)

{

strcpy(str, world);

printf(str);

}

}

请问运行Test 函数会有什么样的结果?

答:篡改动态内存区的内容,后果难以预

料,非常危险。

因为free(str);之后,str 成为野指针,

if(str != NULL)语句不起作用。

高质量C++/C 编程指南,v 1.0

2001 Page 100 of 101

五、编写strcpy 函数(10 分)

已知strcpy 函数的原型是

char *strcpy(char *strDest, const char *strSrc);

其中strDest 是目的字符串,strSrc 是源字符串。

1)不调用C++/C 的字符串库函数,请编写函数 strcpy

char *strcpy(char *strDest, const char *strSrc);

{

assert((strDest!=NULL) && (strSrc !=NULL)); // 2

char *address = strDest; // 2

while( (*strDest++ = * strSrc++) != / 0 ) // 2

NULL ;

return address ; // 2

}

2strcpy 能把strSrc 的内容复制到strDest,为什么还要char * 类型的返回值?

答:为了实现链式表达式。 // 2

例如 int length = strlen( strcpy( strDest, “hello world”) );

六、编写类String 的构造函数、析构函数和赋值函数(25 分)

已知类String 的原型为:

class String

{

public:

String(const char *str = NULL); // 普通构造函数

String(const String &other); // 拷贝构造函数

~ String(void); // 析构函数

String & operate =(const String &other); // 赋值函数

private:

char *m_data; // 用于保存字符串

};

请编写String 的上述4 个函数。

标准答案:

// String 的析构函数

String::~String(void) // 3

{

delete [] m_data;

// 由于m_data 是内部数据类型,也可以写成 delete m_data;

}

高质量C++/C 编程指南,v 1.0

2001Flyincloud // String 的普通构造函数

String::String(const char *str) // 6

{

if(str==NULL)

{

m_data = new char[1]; // 若能加 NULL 判断则更好

*m_data = / 0 ;

}

else

{

int length = strlen(str);

m_data = new char[length+1]; // 若能加 NULL 判断则更好

strcpy(m_data, str);

}

}

// 拷贝构造函数

String::String(const String &other) // 3

{

int length = strlen(other.m_data);

m_data = new char[length+1]; // 若能加 NULL 判断则更好

strcpy(m_data, other.m_data);

}

// 赋值函数

String & String::operate =(const String &other) // 13

{

// (1) 检查自赋值 // 4

if(this == &other)

return *this;

// (2) 释放原有的内存资源 // 3

delete [] m_data;

// 3)分配新的内存资源,并复制内容 // 3

int length = strlen(other.m_data);

m_data = new char[length+1]; // 若能加 NULL 判断则更好

strcpy(m_data, other.m_data);

// 4)返回本对象的引用 // 3

return *this;

}

 

数据库(共计12题)

1、查看当前所有对象

SQL> select * from tab;

 

2、建一个和a表结构一样的空表

SQL> create table b as select * from a where 1=2;

 

SQL> create table b(b1,b2,b3) as select a1,a2,a3 from a where 1=2;

 

3、察看数据库的大小,和空间使用情况

SQL> col tablespace format a20

SQL> select b.file_id  文件ID,

  b.tablespace_name  表空间,

  b.file_name     物理文件名,

  b.bytes       总字节数,

  (b.bytes-sum(nvl(a.bytes,0)))   已使用,

  sum(nvl(a.bytes,0))        剩余,

  sum(nvl(a.bytes,0))/(b.bytes)*100 剩余百分比

  from dba_free_space a,dba_data_files b

  where a.file_id=b.file_id

  group by b.tablespace_name,b.file_name,b.file_id,b.bytes

  order by b.tablespace_name

  /

  dba_free_space --表空间剩余空间状况

  dba_data_files --数据文件空间占用情况

 

4、查看现有回滚段及其状态

SQL> col segment format a30

SQL> SELECT SEGMENT_NAME,OWNER,TABLESPACE_NAME,SEGMENT_ID,FILE_ID,STATUS FROM DBA_ROLLBACK_SEGS;

 

5、查看数据文件放置的路径

SQL> col file_name format a50

SQL> select tablespace_name,file_id,bytes/1024/1024,file_name from dba_data_files order by file_id;

 

6、显示当前连接用户

SQL> show user

 

7、把SQL*Plus当计算器

SQL> select 100*20 from dual;

 

8、连接字符串

SQL> select 1||2 from 1;

SQL> select concat(1,2) from 1;

 

9、查询当前日期

SQL> select to_char(sysdate,'yyyy-mm-dd,hh24:mi:ss') from dual;

 

10、用户间复制数据

SQL> copy from user1 to user2 create table2 using select * from table1;

 

11、视图中不能使用order by,但可用group by代替来达到排序目的

SQL> create view a as select b1,b2 from b group by b1,b2;

 

12、通过授权的方式来创建用户

SQL> grant connect,resource to test identified by test;

SQL> conn test/test

 

题号

               

R07-01

软件业一般常设的与软件开发技术有关的岗位类,请至少说出其中的5

答案:

需求分析工程师、系统分析工程师、系统设计师、开发工程师、测试工程师、实施工程师、技术支持工程师、销售人员、项目经理……

表达:

 

R07-02

作为软件开发工程师来讲,需要具备哪些文化和技能素质,请至少说出其中的5

答案:

逻辑思维、软件知识、编程规范、质量标准、善于学习、程序语言、开发工具、操作系统、数据库技术、开发文档编写、执行力

表达:

 

R07-07

请根据你对“软件销售岗位”工作的理解,在以下选项中,选择必须具备的工作技能:

1.对软件开发技术的掌握、2.编程技术、3.对软件功能的全面掌握、

4.需求分析技术、5.对客户心态的理解、6.公关能力、7.能言善辩、

8.客户工作性能的理解程度、9.产品演讲能力、10.意外状态应对能力、

11.系统设计能力、12.容忍度量、13.与开发人员的沟通能力、14.催收款能力、

答案:

356891013

表达:

 

R07-08

有人说,做软件销售岗位工作,比做程序编程工程师更难,您认为呢?为什么?

答案:

从一定意义上说是这样的,因为它要求的技能面具备多面性,个性化强,跨领域。

表达:

 

R08-04

你如何认识和对待你的第一份工作?

答案:

 

表达:

知道与自己的专业结合;是职业成功的开始;是打基础和培养良好习惯的开始;不是随便或无奈选择的;会认真对待;

R08-09

企业都希望招聘有工作经验的人,你并没有工作经验,对此,你怎么看?

答案:

 

表达:

不自卑;对“企业还希望有培养潜力的”表达;没有工作经验但还是有项目经验、有知识优势的;表达不好的经验对企业还有坏影响;企业肯见我就是“重经验不唯经验”,就是给我的初步认同;表现出思维层次的成熟性;知道诙谐轻松的应答;

R09-03

假设现在有2个工作需你必选一项,一个是有些规模的大型制造业企业,需要你去做ERP信息系统的开发工程师,该工作需要你从需求分析开始,一直做到程序开发;还有一个是国内的知名软件企业,该企业有自己的成熟产品,需要你去做二次开发,工作内容是“编程”;2家企业承诺的工资一样,你选择哪家,为什么?

答案:

任意选择都可以,重在表达

表达:

1.选择制造业的。能正确认识和描述软件研发与领域知识关系;到企业在有限的人才中获取最大的自我价值体现;到企业去全面学习和磨练软件工程技术;为使自己具备复合型软件技术;有利于自己以后的中高层次的软件设计工程师职业工作;  最好答案。

 2.选择软件业的。认为软件公司环境熟悉;同事都是同行便于沟通;只希望继续在编码技术上深造;利于以后往项目经理发展的;给80分。

3.认为2家的工作是有冲突的;到非软件企业工作是放弃了本专业的;到非软件企业工作无法沟通的;无法说出理由的;无分。

R09-05

你到一个新公司上班的第一天,项目经理通知你接手一项未完工软件系统,这需要你去维护别人原来的一些程序代码,而你发现这些代码编写的很不规范,看的很难,此时你会选择如何处理?为什么?

1.直接新做代码替换原来的代码;

2.向经理报告建议重新规范的写代码;

3.无所谓反正是做事情,耐着性子修改代码;

答案:

向经理报告请求重新规范的写新代码

表达:

明白修改他人代码是程序人员常规性的工作内容;知道工作请示的重要性;知道要遵守源代码修改的规范工作流程;明白适当的条件下是允许重新编写完全新代码的,这样可以替代原来太不规范的代码,增强代码运行的稳定性;明白重新编写新代码可能回会节约开发时间的道理;

R09-07

你认为一个人的知识来源都有哪些?你最看重的是哪些?、至少说出5项并表达该项对你知识取得的意义?

答案:

书、学校、同事、工作经验、失败教训…..

表达:

能同时表达意义的

R09-09

你与应聘公司约好在今天上午900面谈,你提前出门后选择搭乘一般公车前往,结果路上还是碰到塞车,速度很慢,现在可以肯定的是,如果等这个公车慢慢走,大概会迟到5分钟,如果现在下去转的士,可以保证准时到,但要多花10元钱,你如何选择,为什么?

答案:

“转的士”

 

表达:

遵守时间体现出个人素质;体现个人或职业诚信;认识到金钱、时间和效益关系的;

 

R09-12

请介绍一下你自己?

答案:

 

表达:

姓名、原职业、学习情况、简单经历、技术特长、个性特点、个人志向。时间控制在2-5分钟,知道“察言观色、适可而止”;在对方再次提问时,再详细点表达。

R09-13

请问,你到本公司应聘,对我公司的情况都了解到一些什么?

答案:

 

表达:

绝对不能说没有观察到什么;网页了解;企业文化;产品了解;公司发展历史和发展方向;应聘岗位了解;企业用人策略;应聘时对公司环境和员工状态的了解;可以大方的说还有薪酬福利;

R13-01

你选择了2个公司准备应聘,一个是30人的小企业,一个是500人的大企业,请问,你对待2个公司的应聘准备是否一样,为什么?

答案:

不一样

表达:

有区别的分析对方资料和准备;从心态上一样的尊重;从准备上一样的慎重;知道小公司更容易把握就业成功率的道理;知道大公司是一定很规范很严格的;有大公司可能会很高高在上的对待你的心态准备;

R13-04

你去一个新公司应聘时,会观察这个公司的哪些方面?为什么?

答案:

上班是否方便、公司环境、公司的宣传资料、公司做什么产品的、公司规模、公司员工形象、员工工作状态、老板形象、老板的谈吐、面试人员素质、…..

表达:

 

R13-06

你在自己还没有工作经验的时候,如果在应聘企业一定要你明确说出一个工资期望值,你对企业提出的工资标准的依据一般是什么?

1.对自己的评估价值;2.公司的规模;3.自己以前的工资;4.社会工资水平;5.猜测该公司可能接受的数目;6.依据生存需要给自己定下的最低工资;7.集中前面的情况综合考虑;8.随便想的

答案:

集中前面的情况综合考虑;

表达:

 

R14-02

你如何看待“敬业”与“跳槽”?

答案:

 

表达:

不绝对的、能辨证的看待“跳槽”;能理解“敬业”就是要在工作期间对工作负责,要有职业精神;明白在职期间不能心猿意马,总想着“跳槽”;能明白在一定的情况下,“跳槽”是为了更好的发展;明白人频繁“跳槽”是不利于职业发展的;

R16-01

你去企业面试前,认为应该作哪些准备工作?至少说出其中的三项

答案:

 

表达:

 

R16-04

你在面试时,对方的面试官非常严肃,你此时是同样的还以严肃、还是采取另外的方式?为什么?

答案:

 

表达:

 

R16-10

你所理解的“这个企业很不错”,一般是表示这个企业有什么特征?请至少说出其中的三种特征

答案:

 

表达:

不要说“企业很大”;不要说“待遇好”;不要说“上班近”;不要说“……

R17-03

请你将以下的项目,按照逻辑关系给予一个序号。

1..改进、2.因素、3.问题、4.方案、5.矛盾、6.目标、7.分析、

答案:

多种答案,关键是你的逻辑表达能力和敏捷性

表达:

例如:5372641

R17-05

你如何理解“梦想与成功”的关系

答案:

 

表达:

每个人都应该敢于有梦;承认梦想与成功之间有必然联系;认为敢于梦想是成功的基础;认识到大多的梦想都不一定成功,但不影响继续做梦;知道需要把握“梦想”的度;

R22-01

请评价一下你任职软件职业的优势

答案:

 

表达:

 

R22-05

如果说你从事的工作中一定需要你经常性的写文档,你认为自己可以适应吗?

答案:

 

表达:

 

R22-06

当你在工作中遇到问题时,你是选择:

1.坚持自己琢磨;

2.赶快问别人;

3.先自己想,想不出了再问别人;

答案:

先自己想,想不出了再问别人

表达:

 

R22-10

你认为以下的表现,你具备哪些?可多项选择。

1.对表格的内容很容易理解;

2.对图形的内容很容易理解;

3.喜欢漫画,并很容易理解漫画域义;

4.见了需要计算性的东西就觉得难,不喜欢;

5.不喜欢做逻辑性、或需要分析的事情;

答案:

 

表达:

 

R26-1

什么是“软件”?什么是应用软件?

答案:

 

表达:

 

R26-2

请你画出“软件开发过程的阶段划分”,并做意义描述

答案:

需求定义、概要设计、详细设计、编程、测试、实施、维护

表达:

 

R26-3

你在学校中也做过项目,能描述一下您的项目经历和体会吗?

答案:

 

表达:

 

R26-4

软件工程包含的4个关键元素。

答案:

方法;语言;工具和过程。

表达:

 

R26-5

描述一下您对软件开发过程的理解?

答案:

 

表达:

 

R26-6

你知道在进入程序编码前,必须要编写哪些主要的设计文档吗?

答案:

 

表达:

 

R26-7

请你说出规范的“需求规格说明书”的阅读对象是谁?该设计文档有什么作用?

答案:

 

表达:

 

R26-9

请你描述一下“程序员”的工作内容?

答案:

 

表达:

 

R26-10

你认为一个合格的“程序工程师”应该具备什么样的职业素质?

答案:

 

表达:

 

R26-11

你知道作为“程序工程师”应该承担什么样的工作责任吗?

答案:

 

表达:

 

R26-12

当你开发MIS软件系统时,作为程序工程师,你如何理解“系统交互界面”的可行性?

答案:

 

表达:

 

R26-13

请你表达一下对CMM的理解?

答案:

 

表达:

 

R26-14

UML是一种建模语言?还是一种方法!

答案:

 

表达:

 

R26-15

您应聘本职位,你认为自己有哪些优势可以胜任这一职位?还存在哪些不足,准备如何来弥补?

答案:

 

表达:

 

R26-16

你是怎么理解“职业素质”的,请表达一下?

答案:

 

表达:

 

R26-17

你是怎么理解“软件职业特性”的,请表达一下?

答案:

 

表达:

 

R26-19

请你描述一下数据库开发规范一般有哪些?

答案:

 

表达:

 

R26-20

请你说一下你认为的“编码规范”一般有哪些?

答案:

 

表达:

 

R26-21

请你表达一下测试工程师岗位工作内容?

答案:

 

表达:

 

R26-22

请你描述一下软件开发过程中的测试,一般分哪些主要测试过程?

答案:

 

表达:

 

R26-23

请你描述一下对测试技术和测试方法的理解?

答案:

 

表达:

 

R26-24

MIS系统的测试有些什么工作特性,请你描述一下?

答案:

 

表达:

 

R08-25

软件测试必须贯穿于软件生产过程,为什么?请你描述一下?

答案:

 

表达:

 

R26-26

我公司做人力资源管理软件的,从你的简历上看,你做过此类项目,请你描述一下“人力资源管理系统”的软件功能?

答案:

 

表达:

 

R26-27

我公司是做电子商务软件的,从你的简历上看,你做过“网上图书销售”类项目,请你描述一下“电子商务系统”一般应该表现出的软件功能?

答案:

 

表达:

 

R26-28

我公司需要你做软件销售工作,你以前做过“服装销售”,请你描述一下对“软件销售”工作的理解?

答案:

 

表达:

 

R26-32

我公司是做助学贷款软件的,你以前好象做过,请你描述一下该软件功能?

答案:

 

表达:

 

R26-29

你来应聘“售前”岗位的工作,你能描述一下“软件售前”工作内容吗?

答案:

 

表达:

 

R26-30

你来应聘“售后”岗位的工作,你能描述一下“软件售后”工作内容吗?

答案:

 

表达:

 

R26-31

你知道开发MIS软件最难于把握的是什么?为什么?

答案:

软件需求。因为“跨知识领域、多变性、个性化强、非编码性的设计技术弱”

表达:

 

R26-34

你能描述一下你对项目开发的体会吗?

R26-35

我们公司的权限管理系统总是做不好,客户需求变化太大,你有什么好意见吗?

R26-36

如果公司需要你跟随项目组去客户单位调研需求,你觉得自己能做什么工作?

27-1

请你自己选定一种数据库环境,并写出以下基本的SQL语句:

连接;

显示当前连接用户;

查看系统拥有哪些用户;

新建用户并授权;

连接到新用户;

查询当前用户下所有对象;

建立第一个表;

查询表结构;

插入新记录;

查询记录;

更改记录;

删除记录;

回滚;

提交;

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值