java32.txt

来自「教授大家在应聘java程序员时的比较可能的面试问题」· 文本 代码 · 共 212 行 · 第 1/2 页

TXT
212
字号
  启动一个线程是调用start()方法,使线程所代表的虚拟处理机处于可运行状态,这意味着它可以由JVM调度并执行。这并不意味着线程就会立即运行。run()方法可以产生必须退出的标志来停止一个线程。   
    
  第二十四,构造器Constructor是否可被override?   
  构造器Constructor不能被继承,因此不能重写Overriding,但可以被重载Overloading。   
    
  第二十五,是否可以继承String类?   
  String类是final类故不可以继承。   
    
  第二十六,当一个线程进入一个对象的一个synchronized方法后,其它线程是否可进入此对象的其它方法?   
  不能,一个对象的一个synchronized方法只能由一个线程访问。   
    
  第二十七,try   {}里有一个return语句,那么紧跟在这个try后的finally   {}里的code会不会被执行,什么时候被执行,在return前还是后?   
  会执行,在return前执行。   
    
  第二十八,编程题:   用最有效率的方法算出2乘以8等於几?   
  有C背景的程序员特别喜欢问这种问题。   
    
  2   <<   3   
    
  第二十九,两个对象值相同(x.equals(y)   ==   true),但却可有不同的hash   code,这句话对不对?   
  不对,有相同的hash   code。   
    
  第三十,当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递?     
  是值传递。Java   编程语言只由值传递参数。当一个对象实例作为一个参数被传递到方法中时,参数的值就是对该对象的引用。对象的内容可以在被调用的方法中改变,但对象的引用是永远不会改变的。   
    
  第三十一,swtich是否能作用在byte上,是否能作用在long上,是否能作用在String上?   
  switch(expr1)中,expr1是一个整数表达式。因此传递给   switch   和   case   语句的参数应该是   int、   short、   char   或者   byte。long,string   都不能作用于swtich。   
    
  第三十二,编程题:   写一个Singleton出来。   
  Singleton模式主要作用是保证在Java应用程序中,一个类Class只有一个实例存在。   
  一般Singleton模式通常有几种种形式:   
  第一种形式:   定义一个类,它的构造函数为private的,它有一个static的private的该类变量,在类初始化时实例话,通过一个public的getInstance方法获取对它的引用,继而调用其中的方法。   
  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)   
      instance=new   Singleton();   
  return   instance;     }     
  }     
  其他形式:   
  定义一个类,它的构造函数为private的,所有方法为static的。   
  一般认为第一种形式要更加安全些     
    
  第三十三   Hashtable和HashMap     
  Hashtable继承自Dictionary类,而HashMap是Java1.2引进的Map   interface的一个实现     
    
  HashMap允许将null作为一个entry的key或者value,而Hashtable不允许     
    
  还有就是,HashMap把Hashtable的contains方法去掉了,改成containsvalue和containsKey。因为contains方法容易让人引起误解。     
    
  最大的不同是,Hashtable的方法是Synchronize的,而HashMap不是,在     
  多个线程访问Hashtable时,不需要自己为它的方法实现同步,而HashMap     
  就必须为之提供外同步。     
    
  Hashtable和HashMap采用的hash/rehash算法都大概一样,所以性能不会有很大的差异。   
    
  1:abstract的method是否可同时是static,是否可同时是native,是否可同时是synchronized?     
    
  2:当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的   
  结果,那么这里到底是值传递还是引用传递?     
    
  3:Set里的元素是不能重复的,那么用什么方法来区分重复与否呢?   是用==还是equals()?   它们   
  有何区别?     
    
  4:构造器Constructor是否可被override?   
    
  5:当一个线程进入一个对象的一个synchronized方法后,其它线程是否可进入此对象的其它方法?     
    
  6:两个对象值相同(x.equals(y)   ==   true),但却可有不同的hash   code,这句话对不对   
    
    
    
  关于参数传递:   
    
  其实JAVA里对参数的传递在国际上都是一直有争论的。包括《Think   in   java》里都提到了,Bruce   Eckel   也没给出定论。我觉得这很大程度上是由于规范不严格造成的。因为大家都知道参数传递的本质是什么,但描述方式不一样,以致造成答案不一致。   
    
  现给一些参考:   
    
  第一,JAVA   里的参数传递只有值传递,没有所谓的引用传递。(说白了,是因为大家的说法   
  不统一)   
  第二,引用一个强人的观点   jamesfancy()边城狂人(James   Fancy)   :   
    
  "1.   首先明白参数的传递实质是压栈和出栈的过程。即在调用一个方法(或说子程序)之前,先将需要传入的参数压栈,然后执行代码的指针跳转到方法的起始位置,进行出栈操作,原来压入栈中的参数取出置入方法中的局部变量(这里即参数变量)。   
    
  2.   对于基本类型,传递的参数都是对原变量值的拷贝。每一个基本类型的数据都是以字节形式保存在内存中的(如整型是4个字节,长整型是8个字节等),压栈时会将内存中的变量值按字节存入栈中,而原变量的值(即保存在原位置的内容)并不改变??内存中的数据是保存在堆中的,参数是保存在栈中的,总不可能把内存块搬过来是吧......所以一定是拷贝的!   
    
  3.   先搞明白引用的实质。当一个对象创建后,它的内容(N个字节)被保存在内存中。它的位置,即一个地址址,被返回,保存在一个引用变量中??所以实际上一个引用变量保存的只是某个类的地址,而引用的类型,并不会改变引用变量的大小,它只是说明一个对象的数据大小。这样,就可以从引用变量找到对象的起始地址,再通过类型,获取对象数据。而通过引用调用的方法,属性这些东西,就是通过在这块内存地址中的位置偏移来寻址的。(当然,实际的操作会比我说的复杂得多,因为还涉及向上向下传型等问题)   
    
  4.   引用参数的传递,实际上就是传递的引用变量的值,这和传递基本类型的值原理是一样的。但由于引用变量其值的特殊性(只是一个地址,这个地址上保存的才是对象的实际数据),所以,引用变量的值传入参数变量后,通过参数变量对对象的修改(在实际地址上的操作)自然就会影响到同一个对象。??这里,外面的引用变量和参数变量,本身是不同的,但是它们的值相同,都是对象的地址。"   
  不是打基础,打基础吧!Top
01069723285

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?