亚信java笔试题

(一) 
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的交换两个整数的值 
智力题:一个皇帝,有四个儿子。有三种颜色的帽子 
三升的水,五升的水,八升的水

你可能感兴趣的:(亚信java笔试题)