zoukankan      html  css  js  c++  java
  • Java面试题

    1.C++或Java中的异常处理机制的简单原理和应用。

      
    当JAVA程序违反了JAVA的语义规则时,JAVA虚拟机就会将发生的错误表示为一个异常。

    违反语义规则包含2种情况。一种是JAVA类库内置的语义检查。比如数组下标越界,会引发IndexOutOfBoundsException;訪问null的对象时会引发NullPointerException。还有一种情况就是JAVA同意程序猿扩展这样的语义检查。程序猿能够创建自己的异常,并自由选择在何时用throwkeyword引发异常。

    全部的异常都是java.lang.Thowable的子类。

      
    2. Java的接口和C++的虚类的同样和不同处。  
    由于Java不支持多继承。而有可能某个类或对象要使用分别在几个类或对象里面的方法或属性,现有的单继承机制就不能满足要求。与继承相比。接口有更高的灵活性。由于接口中没有不论什么实现代码。

    当一个类实现了接口以后,该类要实现接口里面全部的方法和属性,而且接口里面的属性在默认状态以下都是public static,全部方法默认情况下是public.一个类能够实现多个接口。  
    3. 垃圾回收的长处和原理。

    并考虑2种回收机制。

      
    Java语言中一个显著的特点就是引入了垃圾回收机制,使c++程序猿最头疼的内存管理的问题迎刃而解。它使得Java程序猿在编敲代码的时候不再须要考虑内存管理。

    因为有个垃圾回收机制,Java中的对象不再有“作用域”的概念,仅仅有对象的引用才有“作用域”。

    垃圾回收能够有效的防止内存泄露,有效的使用能够使用的内存。垃圾回收器一般是作为一个单独的低级别的线程执行,不可预知的情况下对内存堆中已经死亡的或者长时间没有使用的对象进行清楚和回收。程序猿不能实时的调用垃圾回收器对某个对象或全部对象进行垃圾回收。回收机制有分代复制垃圾回收和标记垃圾回收。增量垃圾回收。  

    4. 请说出你所知道的线程同步的方法。  

    wait():使一个线程处于等待状态。而且释放所持有的对象的lock。  
    sleep():使一个正在执行的线程处于睡眠状态,是一个静态方法。调用此方法要捕捉InterruptedException异常。  
    notify():唤醒一个处于等待状态的线程,注意的是在调用此方法的时候,并不能确切的唤醒某一个等待状态的线程。而是由JVM确定唤醒哪个线程。并且不是按优先级。  
    Allnotity():唤醒全部处入等待状态的线程,注意并非给全部唤醒线程一个对象的锁。而是让它们竞争。  
    5. 请讲一讲析构函数和虚函数的使用方法和作用。

      
    6. Error与Exception有什么差别?  
    Error表示系统级的错误和程序不必处理的异常,  
    Exception表示须要捕捉或者须要程序进行处理的异常。  
    7. 在java中一个类被声明为final类型。表示了什么意思?  
    表示该类不能被继承。是顶级类。  
    8. 描写叙述一下你最经常使用的编程风格。

       

    9. heap和stack有什么差别。

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

      
    堆是栈的一个组成元素  

    10. 假设系统要使用超大整数(超过long长度范围)。请你设计一个数据结构来存储这样的超大型数字以及设计一种算法来实现超大整数加法运算)。  

    public class BigInt() 
    
    { 
    
    int[] ArrOne = new ArrOne[1000]; 
    
    String intString=""; 
    
    public int[] Arr(String s) 
    
    { 
    
    intString = s; 
    
    for(int i=0;i<ArrOne.leght;i++) 
    
    {
    11. 假设要设计一个图形系统,请你设计主要的图形元件(Point,Line,Rectangle,Triangle)的简单实现
     

    第一,谈谈final, finally, finalize的差别。 

    final 用于声明属性,方法和类,分别表示属性不可变,方法不可覆盖,类不可继承。finally是异常处理语句结构的一部分。表示总是运行。finalize是 Object类的一个方法,在垃圾收集器运行的时候会调用被回收对象的此方法,能够覆盖此方法提供垃圾收集时的其它资源回收,比如关闭文件等。

    第二,Anonymous Inner Class (匿名内部类) 能否够extends(继承)其他类,能否够implements(实现)interface(接口)?   
    能够继承其它类或完毕其它接口,在swing编程中经常使用此方式。

    第三,Static Nested Class 和 Inner Class的不同。说得越多越好(面试题有的非常笼统)。 

    Static Nested Class是被声明为静态(static)的内部类。它能够不依赖于外部类实例被实例化。

    而通常的内部类须要在外部类实例化后才干实例化。

    第四,&和&&的差别。 

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

    第五,HashMap和Hashtable的差别。

     
    HashMap是Hashtable的轻量级实现(非线程 安全 的实现),他们都完毕了Map接口,主要差别在于HashMap同意空(null)键值(key),因为非线程 安全 ,效率上可能高于Hashtable.

    第六,Collection 和 Collections的差别。 

    Collection是集合类的上级接口,继承与他的接口主要有Set 和List.Collections是针对集合类的一个帮助类。他提供一系列静态方法实现对各种集合的搜索、排序、线程安全化等操作。

    第七,什么时候用assert。 
    1.4新增keyword(语法)。用于測试boolean表达式状态。可用于调试程序。用法 assert ,表示假设表达式为真(true),则以下的语句执行,否则抛出AssertionError。另外的使用方式assert < boolean表达式>:,表示假设表达式为真,后面的表达式忽略。否则后面表达式的值用于AssertionError的构建參数。

    注意编译时要添加-source 1.4 參数,否则报错。]执行时要添加 –ea參数。否则assert行被忽略

    第八,GC是什么?

    为什么要有GC?  

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

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

    两个

    第十,Math.round(11.5)等於多少? Math.round(-11.5)等於多少?  
    Math.round(11.5)==12Math.round(-11.5)==-11round方法返回与參数最接近的长整数,參数加1/2后求其floor.

    第十一,short s1 = 1; s1 = s1 + 1;有什么错?   short s1 = 1; s1 += 1;有什么错?

    short s1 = 1; s1 = s1 + 1; (s1+1运算结果是int型,须要强制转换类型)short s1 = 1; s1 += 1;(能够正确编译)

    第十二,sleep() 和 wait() 有什么差别?

       
    sleep是线程类(Thread)的方法,导致此线程暂停运行指定时间。给运行机会给其它线程。可是监控状态依旧保持,到时后会自己主动恢复。

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

    第十三、

            多线程是为了同步完毕多项任务,不是为了提供执行效率,通过提高资源使用效率来提高系统的效率. 线程是在同一时间须要完毕多项任务的时候实现的.

             能够完毕同一时候执行,可是通过程序执行的结果发现,尽管同一时候执行,可是每一次结果都不一致。

              由于多线程存在一个特性:随机性。

              造成的原因:CPU在瞬间不断切换去处理各个线程而导致的。

             能够理解成多个线程在抢cpu资源。

     

    2、 线程与进程的比較

              线程具有很多传统进程所具有的特征,故又称为轻型进程(Light—Weight Process)或进程元;

                而把传统的进程称为重型进程(Heavy—Weight Process),它相当于仅仅有一个线程的任务。

    在引入了线程的操作系统中,通常一个进程都有若干个线程,至少须要一个线程。

     

       进程与线程的差别:

            1.进程有独立的进程空间,进程中的数据存放空间(堆空间和栈空间)是独立的。

             2.线程的堆空间是共享的,栈空间是独立的,线程消耗的资源也比进程小。相互之间能够影响的

     

    第十三。Java有没有goto?

      


    没有 非常十三的问题,假设哪个面试的问到这个问题,我劝你还是别进这家公司。

    第十四,数组有没有length()这种方法?

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

    第十五,Overload和Override的差别。

    Overloaded的方法能否够改变返回值的类型? 

    方法的重写Overriding和重载Overloading是Java多态性的不同表现。

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

    假设在子类中定义某方法与其父类有同样的名称和參数。我们说该方法被重写 (Overriding)。子类的对象使用这种方法时。将调用子类中的定义,对它而言,父类中的定义如同被“屏蔽”了。假设在一个类中定义了多个同名的方 法。它们或有不同的參数个数或有不同的參数类型,则称为方法的重载(Overloading)。Overloaded的方法是能够改变返回值的类型。

    第十六。Set里的元素是不能反复的。那么用什么方法来区分反复与否呢?

    是用==还是equals()?

    它们有何差别? 

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

     
    equals()和==方法决定引用值是否指向同一对象equals()在类中被覆盖,为的是当两个分离的对象的内容和类型相配的话,返回真值。

    第十七。给我一个你最常见到的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

    第十八。error和exception有什么差别?

     

    error 表示恢复不是不可能但非常困难的情况下的一种严重问题。

    比方说内存溢出。不可能指望程序能处理这种情况。

     
    exception 表示一种设计或实现问题。

    也就是说,它表示假设程序执行正常。从不会发生的情况。

    第十九,List, Set, Map是否继承自Collection接口?

     

    List。Set是 
    Map不是

    第二十,abstract class和interface有什么差别? 

    声明方法的存在而不去实现它的类被叫做抽象类(abstract class),它用于要创建一个体现某些基本行为的类,并为该类声明方法,但不能在该类中实现该类的情况。不能创建abstract 类的实例。然而能够创建一个变量,其类型是一个抽象类,并让它指向详细子类的一个实例。不能有抽象构造函数或抽象静态方法。Abstract 类的子类为它们父类中的全部抽象方法提供实现,否则它们也是抽象类为。取而代之,在子类中实现该方法。知道其行为的其他类能够在类中实现这些方法。 
    接口(interface)是抽象类的变体。在接口中。全部方法都是抽象的。多继承性可通过实现这种接口而获得。

    接口中的全部方法都是抽象的,没有一个 有程序体。接口仅仅能够定义static final成员变量。接口的实现与子类相似,除了该实现类不能从接口定义中继承行为。

    当类实现特殊接口时,它定义(即将程序体给予)全部这种接口的方法。 然后,它能够在实现了该接口的类的不论什么对象上调用接口的方法。因为有抽象类,它同意使用接口名作为引用变量的类型。通常的动态联编将生效。引用能够转换到 接口类型或从接口类型转换,instanceof 运算符能够用来决定某对象的类是否实现了接口。

    第二十一。abstract的method是否可同一时候是static,是否可同一时候是native,是否可同一时候是synchronized?

     
    都不能

    第二十二,接口是否可继承接口?

    抽象类是否可实现(implements)接口? 抽象类是否可继承实体类(concrete class)? 
    接口能够继承接口。抽象类能够实现(implements)接口。抽象类是否可继承实体类。但前提是实体类必须有明白的构造函数。

    第二十三。启动一个线程是用run()还是start()? 

    启动一个线程是调用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的。 
    一般觉得第一种形式要更加安全些

  • 相关阅读:
    node generator 模仿co
    node-webkit 屏幕截图功能
    linux命令, cut,sort,wc,uniq,tee 说明
    linux命令,vim,vi 说明
    linux命令,tar,configure,make,make install,su 说明
    java高级工程师学习方向
    oracle: Rownum原理
    Win7 环境weblogic用户名和密码忘记解决方法
    struts原理介绍,面试
    JSP、servlet--学习摘要
  • 原文地址:https://www.cnblogs.com/yxysuanfa/p/6790274.html
Copyright © 2011-2022 走看看