亚信java笔试题[转载]

网上发现的09年的JAVA题目,虽然我不知道亚信是啥东东...不是看不起,是真的不 知道,我知道的IT公司本来就少得可怜...看过之后发觉和我之前参加的中软的面试题相似度甚高.看来不管是知名还是不知名,大企业还是小企业,笔试题都 是网上down的啊,不过我很开心,不过貌似行动的有点晚了...

原文地址:http://battle19821016.javaeye.com/blog/410303

(一)

1.String str=new String("abc") 在内存中是怎么分配的?

答:在运行时才在内存创建一个内存空间。

2.String str1="abc" 和 String str1=new String("abc"); 这两个的区别是什么?

答:String str1="abc"在编译时已经在一个常量池中生成一个拷贝,其中str1中的"abc"是字符串常量。而对于String str1=new String("abc")的话,它是在运行时才创建。这两句在内在中所产生的对象并不是同一个对象。

3.GC是什么?有几种算法实现?(这题到现在也不大明白..如果GC是垃圾回收的话.后面为什么要问有几种算法实现呢?)

答:垃圾回收.可实现的算法有引用计数,标记回收,复制回收等.

4.Java Server Page 和 servlet 的联系与区别

5.collection和collections的区别?

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

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

=====================================================

6.ArrayList和Vector的区别,HashMap和HashTable的区别?

答: Vector是同步的。这个类中的一些方法保证了Vector中的对象是线程安全的。而ArrayList则是异步的,因此ArrayList中的对象并 不是线程安全的。因为同步的要求会影响执行的效率,所以如果你不需要线程安全的集合那么使用ArrayList是一个很好的选择,这样可以避免由于同步带 来的不必要的性能开销。

Hashtable和HashMap的区别:

1.Hashtable是Dictionary的子类,HashMap是Map接口的一个实现类;

2.Hashtable中的方法是同步 的,而HashMap中的方法在缺省情况下是非同步的。即是说,在多线程应用程序中,不用专门的操作就安全地可以使用Hashtable了;而对于 HashMap,则需要额外的同步机制。但HashMap的同步问题可通过Collections的一个静态方法得到解决:

Map Collections.synchronizedMap(Map m)

这个方法返回一个同步的Map,这个Map封装了底层的HashMap的所有方法,使得底层的HashMap即使是在多线程的环境中也是安全的。

3. 在HashMap中,null可以作为键,这样的键只有一个;可以有一个或多个键所对应的值为null。当get()方法返回null值时,即可以表示 HashMap中没有该键,也可以表示该键所对应的值为null。因此,在HashMap中不能由get()方法来判断HashMap中是否存在某个键, 而应该用containsKey()方法来判断。

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

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

HashMap把Hashtable的contains方法去掉了,改成containsvalue和containsKey。因为contains方法容易让人引起误解。

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

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

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

================================================

7.overload和override的区别?

override(重写)

1、方法名、参数、返回值相同。

2、子类方法不能缩小父类方法的访问权限。

3、子类方法不能抛出比父类方法更多的异常(但子类方法可以不抛出异常)。

4、存在于父类和子类之间。

5、方法被定义为final不能被重写。

overload(重载)

1、参数类型、个数、顺序至少有一个不相同。

2、不能重载只有返回值不同的方法名。

3、存在于父类和子类、同类中。

8.char能不能存储汉字?

答:java char型变量是能够定义成为一个中文的,因为java中以unicode编码,一个char占16个字节,所以放一个中文是没问题的

(二)

1.interface 和 abstract 的区别?

(1)关于抽象类和接口,我想还是看具体的要求,什么模式之类的东西

都是有了应用才出现的,需求才是第一位的。

它们之间的区别是:

1. 在抽象类中可以实现某些方法,而接口不行

2. 抽象类是用来extends的,而继承有一定的局限性,只能继承一个类

而接口就不同,可以同时实现多个接口

这两者也可以联合使用。看具体的要求了。如果有共同方法的那些类

它们的共同的方法的实现是一样的,那么可以考虑用抽象类,把方法

在抽象类中实现,如果还有一些方法定义相同而实现不同,那么可以

考虑定义一个接口,让抽象类来implements这个接口

然后各个子类只用继承抽象类即可。

(2)接口是“like a ”象一个什么东西、或是具备什么功能

抽象类是 “ is a ”是一个什么东西。

一个带锁的门,那么一定是 “somthing extends 门 impliment 锁 ”

决不能说 “带门的锁”

(3)经过自己写代码的测试结果:I代表interface,A代表abstract

I implemets I 错

I extends I 对

I extends A 错

(4)一个是接口,一个是虚函数 java中的接口相当C++中纯虚函数

也就是一个也不实现,具体是在子类中实现,这体现了多态性

同时java接口也是java实现多重继承的一个方法

1.interface的所有函数都是abstract的;

2.interface的数据成员默认都是public static final的;

3.Interface可以被多继承,abstract class单继承

interface是接口,abstract class是抽象类 主要区别:

1、接口可以多重implement(实现),抽象类只能单一extends(继承)

2、接口内只能是功能的定义,抽象类中可以包括功能的定义和功能的实现。

3、接口字段定义默认为public static final,而抽象类的则默认为friendly。

3.GC是什么?常用的两种方法是什么?

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

(2)答案:System.gc()用来强制立即回收垃圾,即释放内存。

java 对内存的释放采取的垃圾自动回收机制,在编程的时候不用考虑变量不用时释放内存,java虚拟机可以自动判断出并收集到垃圾,但一般不会立即释放它们的内 存空间,当然也可以在程序中使用System.gc()来强制垃圾回收,但是要注意的是,系统并不保证会立即进行释放内存.

gc首先要判断该对象是否是时候可以收集。两种常用的方法是引用计数和对象引用遍历。

==========================================================

4. 线程常用的方法是什么?

Thread类的常用方法:

static Thread currentThread() //静态方法,通过这个方法可以获得主线程的引用,从而达到操作主线程的目的。

static int activeCount() //静态方法,获得当前活动线程数量

long getId() //获得当前线程id

String getName() //获得当前线程名字

int getPriority() //获得优先级

boolean isAlive() //当前线程是否处于活动状态。

boolean isDaemon() //是否为守护线程

void run() //run()方法,我们用线程,主要就是对run()方法的重写

void start() // 使该线程开始执行;Java 虚拟机调用该线程的run() 方法。

void sleep() //使当前线程休眠,以执行其他线程,如Thread.sleep(1000) 休眠1秒

5. Sleep()和wait()的区别?

搞线程的最爱sleep()方法是使线程停止一段时间的方法。在sleep 时间间隔期满后,线程不一定立即恢复执行。这是因为在那个时刻,其它线程可能正在运行而且没有被调度为放弃执行,除非(a)"醒来"的线程具有更高的优先 级,(b)正在运行的线程因为其它原因而阻塞。wait()是线程交互时,如果线程对一个同步对象x 发出一个wait()调用,该线程会暂停执行,被调对象进入等待状态,直到被唤醒或等待时间到。

6. Servlet中forward()和redirct()的区别?

答:前者仅是容器中控制权的转向,在客户端浏览器地址栏中不会显示 出转向后的地址;后者则是完全的跳转,浏览器将会得到跳转的地址,并重新发送请求链接。这样,从浏览器的地址栏中可以看到跳转后的链接地址。所以,前者更 加高效,在前者可以满足需要时,尽量使用forward()方法,并且,这样也有助于隐藏实际的链接。在有些情况下,比如,需要跳转到一个其它服务器上的 资源,则必须使用sendRedirect()方法。

7. EJB和JavaBean都是什么?

答案:

javabean是客户端组件,EJB是服务器端组件。

其实ejb与javaBean的最根本区别是:分布性。这是关键!!!

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组件。

8. EJB都有哪些构成?

答案:Session Bean, Entity Bean, Message Driven Bean.

9. Servlet的生命周期,比CGI有什么优点?

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

Servlet是Java平台上的CGI技术。Servlet在服务器端运行,动态地生成Web页面。与传统的CGI和许多其它类似CGI的技术相 比,Java Servlet具有更高的效率并更容易使用。对于Servlet,重复的请求不会导致同一程序的多次转载,它是依靠线程的方式来支持并发访问的。

14. 存储过程和函数的区别?

本质上没区别。只是函数有如:只能返回一个变量的限制。而存储过程可以返回多个。而函数是可以嵌入在sql中使用的,可以在select中调用,而存储过 程不行。执行的本质都一样。 函数限制比较多,比如不能用临时表,只能用表变量.还有一些函数都不可用等等.而存储过程的限制相对就比较少。

智力题:

分三部份:

oracle:存储过程,触发器,数据库的优化,PL\SQL。

java:比较基础,java的交换两个整数的值

智力题:一个皇帝,有四个儿子。有三种颜色的帽子

三升的水,五升的水,八升的水

网上发现的09年的JAVA题目,虽然我不知道亚信是啥东东...不是看不起,是真的不 知道,我知道的IT公司本来就少得可怜...看过之后发觉和我之前参加的中软的面试题相似度甚高.看来不管是知名还是不知名,大企业还是小企业,笔试题都 是网上down的啊,不过我很开心,不过貌似行动的有点晚了...

原文地址:http://battle19821016.javaeye.com/blog/410303

(一)

1.String str=new String("abc") 在内存中是怎么分配的?

答:在运行时才在内存创建一个内存空间。

2.String str1="abc" 和 String str1=new String("abc"); 这两个的区别是什么?

答:String str1="abc"在编译时已经在一个常量池中生成一个拷贝,其中str1中的"abc"是字符串常量。而对于String str1=new String("abc")的话,它是在运行时才创建。这两句在内在中所产生的对象并不是同一个对象。

3.GC是什么?有几种算法实现?(这题到现在也不大明白..如果GC是垃圾回收的话.后面为什么要问有几种算法实现呢?)

答:垃圾回收.可实现的算法有引用计数,标记回收,复制回收等.

4.Java Server Page 和 servlet 的联系与区别

5.collection和collections的区别?

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

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

=====================================================

6.ArrayList和Vector的区别,HashMap和HashTable的区别?

答: Vector是同步的。这个类中的一些方法保证了Vector中的对象是线程安全的。而ArrayList则是异步的,因此ArrayList中的对象并 不是线程安全的。因为同步的要求会影响执行的效率,所以如果你不需要线程安全的集合那么使用ArrayList是一个很好的选择,这样可以避免由于同步带 来的不必要的性能开销。

Hashtable和HashMap的区别:

1.Hashtable是Dictionary的子类,HashMap是Map接口的一个实现类;

2.Hashtable中的方法是同步 的,而HashMap中的方法在缺省情况下是非同步的。即是说,在多线程应用程序中,不用专门的操作就安全地可以使用Hashtable了;而对于 HashMap,则需要额外的同步机制。但HashMap的同步问题可通过Collections的一个静态方法得到解决:

Map Collections.synchronizedMap(Map m)

这个方法返回一个同步的Map,这个Map封装了底层的HashMap的所有方法,使得底层的HashMap即使是在多线程的环境中也是安全的。

3. 在HashMap中,null可以作为键,这样的键只有一个;可以有一个或多个键所对应的值为null。当get()方法返回null值时,即可以表示 HashMap中没有该键,也可以表示该键所对应的值为null。因此,在HashMap中不能由get()方法来判断HashMap中是否存在某个键, 而应该用containsKey()方法来判断。

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

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

HashMap把Hashtable的contains方法去掉了,改成containsvalue和containsKey。因为contains方法容易让人引起误解。

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

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

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

================================================

7.overload和override的区别?

override(重写)

1、方法名、参数、返回值相同。

2、子类方法不能缩小父类方法的访问权限。

3、子类方法不能抛出比父类方法更多的异常(但子类方法可以不抛出异常)。

4、存在于父类和子类之间。

5、方法被定义为final不能被重写。

overload(重载)

1、参数类型、个数、顺序至少有一个不相同。

2、不能重载只有返回值不同的方法名。

3、存在于父类和子类、同类中。

8.char能不能存储汉字?

答:java char型变量是能够定义成为一个中文的,因为java中以unicode编码,一个char占16个字节,所以放一个中文是没问题的

(二)

1.interface 和 abstract 的区别?

(1)关于抽象类和接口,我想还是看具体的要求,什么模式之类的东西

都是有了应用才出现的,需求才是第一位的。

它们之间的区别是:

1. 在抽象类中可以实现某些方法,而接口不行

2. 抽象类是用来extends的,而继承有一定的局限性,只能继承一个类

而接口就不同,可以同时实现多个接口

这两者也可以联合使用。看具体的要求了。如果有共同方法的那些类

它们的共同的方法的实现是一样的,那么可以考虑用抽象类,把方法

在抽象类中实现,如果还有一些方法定义相同而实现不同,那么可以

考虑定义一个接口,让抽象类来implements这个接口

然后各个子类只用继承抽象类即可。

(2)接口是“like a ”象一个什么东西、或是具备什么功能

抽象类是 “ is a ”是一个什么东西。

一个带锁的门,那么一定是 “somthing extends 门 impliment 锁 ”

决不能说 “带门的锁”

(3)经过自己写代码的测试结果:I代表interface,A代表abstract

I implemets I 错

I extends I 对

I extends A 错

(4)一个是接口,一个是虚函数 java中的接口相当C++中纯虚函数

也就是一个也不实现,具体是在子类中实现,这体现了多态性

同时java接口也是java实现多重继承的一个方法

1.interface的所有函数都是abstract的;

2.interface的数据成员默认都是public static final的;

3.Interface可以被多继承,abstract class单继承

interface是接口,abstract class是抽象类 主要区别:

1、接口可以多重implement(实现),抽象类只能单一extends(继承)

2、接口内只能是功能的定义,抽象类中可以包括功能的定义和功能的实现。

3、接口字段定义默认为public static final,而抽象类的则默认为friendly。

3.GC是什么?常用的两种方法是什么?

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

(2)答案:System.gc()用来强制立即回收垃圾,即释放内存。

java 对内存的释放采取的垃圾自动回收机制,在编程的时候不用考虑变量不用时释放内存,java虚拟机可以自动判断出并收集到垃圾,但一般不会立即释放它们的内 存空间,当然也可以在程序中使用System.gc()来强制垃圾回收,但是要注意的是,系统并不保证会立即进行释放内存.

gc首先要判断该对象是否是时候可以收集。两种常用的方法是引用计数和对象引用遍历。

==========================================================

4. 线程常用的方法是什么?

Thread类的常用方法:

static Thread currentThread() //静态方法,通过这个方法可以获得主线程的引用,从而达到操作主线程的目的。

static int activeCount() //静态方法,获得当前活动线程数量

long getId() //获得当前线程id

String getName() //获得当前线程名字

int getPriority() //获得优先级

boolean isAlive() //当前线程是否处于活动状态。

boolean isDaemon() //是否为守护线程

void run() //run()方法,我们用线程,主要就是对run()方法的重写

void start() // 使该线程开始执行;Java 虚拟机调用该线程的run() 方法。

void sleep() //使当前线程休眠,以执行其他线程,如Thread.sleep(1000) 休眠1秒

5. Sleep()和wait()的区别?

搞线程的最爱sleep()方法是使线程停止一段时间的方法。在sleep 时间间隔期满后,线程不一定立即恢复执行。这是因为在那个时刻,其它线程可能正在运行而且没有被调度为放弃执行,除非(a)"醒来"的线程具有更高的优先 级,(b)正在运行的线程因为其它原因而阻塞。wait()是线程交互时,如果线程对一个同步对象x 发出一个wait()调用,该线程会暂停执行,被调对象进入等待状态,直到被唤醒或等待时间到。

6. Servlet中forward()和redirct()的区别?

答:前者仅是容器中控制权的转向,在客户端浏览器地址栏中不会显示 出转向后的地址;后者则是完全的跳转,浏览器将会得到跳转的地址,并重新发送请求链接。这样,从浏览器的地址栏中可以看到跳转后的链接地址。所以,前者更 加高效,在前者可以满足需要时,尽量使用forward()方法,并且,这样也有助于隐藏实际的链接。在有些情况下,比如,需要跳转到一个其它服务器上的 资源,则必须使用sendRedirect()方法。

7. EJB和JavaBean都是什么?

答案:

javabean是客户端组件,EJB是服务器端组件。

其实ejb与javaBean的最根本区别是:分布性。这是关键!!!

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组件。

8. EJB都有哪些构成?

答案:Session Bean, Entity Bean, Message Driven Bean.

9. Servlet的生命周期,比CGI有什么优点?

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

Servlet是Java平台上的CGI技术。Servlet在服务器端运行,动态地生成Web页面。与传统的CGI和许多其它类似CGI的技术相 比,Java Servlet具有更高的效率并更容易使用。对于Servlet,重复的请求不会导致同一程序的多次转载,它是依靠线程的方式来支持并发访问的。

14. 存储过程和函数的区别?

本质上没区别。只是函数有如:只能返回一个变量的限制。而存储过程可以返回多个。而函数是可以嵌入在sql中使用的,可以在select中调用,而存储过 程不行。执行的本质都一样。 函数限制比较多,比如不能用临时表,只能用表变量.还有一些函数都不可用等等.而存储过程的限制相对就比较少。

智力题:

分三部份:

oracle:存储过程,触发器,数据库的优化,PL\SQL。

java:比较基础,java的交换两个整数的值

智力题:一个皇帝,有四个儿子。有三种颜色的帽子

三升的水,五升的水,八升的水