成都精准云教育科技有限公司2019面试题

面试时间: 2019-4-8

一、单选题

  1. 下列哪一种叙述是正确的(D)
    A. abstract 修饰符可修饰字段、方法和类
    B. 抽象方法的 body 部分必须用一对大括号 {} 包住
    C. 声明抽象方法,大括号可有可无
    D. 声明抽象方法不可写出大括号
  2. 如下代码(D)
    A. 0
    B. 1
    C. 2
    D. 编译失败

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    public class Test {
    public int aMethod() {
    static int i = 0;
    i++;
    return i;
    }

    public static void main(String args[]) {
    Test test = new Test();
    test.aMethod();
    int j = test.aMethod();
    System.out.println(j);
    }
    }
  3. 下列哪种说法是正确的(D)
    A. 实例方法可直接调用超类的实例方法
    B. 实例方法可直接调用超类的类方法
    C. 实例方法可直接调用其他类的实例方法
    D. 实例方法可直接调用本类的类方法

  4. 如下代码(E)
    A. 4,4
    B. 4,5
    C. 5,4
    D. 5,5
    E. 编译失败

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    class Super {
    public Integer getLength() {
    return new Integer(4);
    }
    }

    public class Sub extends Super {
    @Override
    public Long getLength() {
    return new Long(5);
    }

    public static void main(String[] args) {
    Super sooper = new Super();
    Sub sub = new Sub();
    System.out.println(sooper.getLength().toString() + "," + sub.getLength().toString());
    }
    }
  5. 在Servlet处理请求的方式为(C)
    A. 以进程的方式
    B. 以程序的方式
    C. 以线程的方式
    D. 以响应的方式

  6. 按照MVC设计模式,JSP用于实现(B)
    A. Model
    B. View
    C. Controller
    D. 容器

  7. 以下关于异常的说法不正确的是(D)
    A. 一旦出现异常,程序运行就终止了
    B. 如果一个方法声明将跑出某个异常,它就必须真的抛出那个异常
    C. 在catch子句中匹配异常是一种精准匹配
    D. 可能抛出系统异常的方法是不需要声明该异常的

  8. 在一个线程中Sleep(1000)方法,将使得该线程在多少时间后获得对CPU的控制(假设睡眠过程中不会有其他事件唤醒该线程)?(C)
    A. 正好1000毫秒
    B. 1000毫秒不到
    C. =>1000毫秒
    D. 不一定

  9. 在WEB-INF目录下,必须存放的文件为:(B)
    A. class文件
    B. web.xml
    C. jar文件
    D. html文件

  10. 下面的语句会产生什么样的输出(A)
    A.4
    B.5
    C.6
    D.7
    E.0

    1
    System.out.println(4&7);
  11. 下面的程序中,temp的最终值是什么(B)
    A. 0
    B. 1
    C. 2
    D. 3
    E. 4

    1
    long temp=(int)3.9; temp%=2;
  12. 下面哪个不是JAVA关键字(A)
    A. integer
    B. double
    C. float
    D. default

  13. 下列关于构造方法的叙述中,错误的是(C)
    A. Java语言规定构造方法名与类名必须相同
    B. Java语言规定构造方法没有返回值,但不用vold声明
    C. Java语言规定构造方法不可以重载
    D. Java语言规定构造方法只能通过new自动调用

  14. 构造函数何时被调用(B)
    A. 类定义时
    B. 创建对象时
    C. 调用对象方法时
    D. 使用对象的变量时

  15. break语句(D)
    A. 只中断最内层的循环
    B. 只中断最外层的循环
    C. 借助于标号,可以实现任何外层循环中断
    D. 只中断某一层的循环

  16. Java语言中下面哪个可以用作正确的变量名称(B)
    A. 3D
    B. name
    C. extends
    D. implements

二、简答题

  1. Java有哪些基本数据类型,String是不是基本数据类型,他们有何区别
  • byte、short、int、long、char、boolean、float
  • 基本数据类型(如int,boolean,double等)与String的区别在于内存。
    String是以数组存放的,数组的每一个内容表示字符串的一个字符;
    int等变量是用几个字节存放的,几种基本类型无非就是字节数量不同而已。
  1. 数组和集合的区别
  • 数组的特点
    a.数组本质上就是一段连续的内存空间,用于记录多个类型相同的数据
    b.数组一旦声明完毕,则内存空间固定不变
    c.插入和删除操作不方便,可能会移动大量的元素导致效率太低
    d.支持下标访问,可以实现随机访问
    e.数组中的元素可以是基本数据类型,也可以使用引用数据类型

  • 集合的特点
    a.内存空间可以不连续,数据类型可以不相同
    b.集合的内存空间可以动态地调整
    c.集合的插入删除操作可以不移动大量元素
    d.部分支持下标访问,部分不支持
    e.集合中的元素必须是引用数据类型

  1. 使用StringBuffer类和String类进行字符串拼接时有何区别?
  • StringBuffer是在内存开辟一块存储空间,在里面可以增加字符,如果满了的话,再增加存储空间
  • String是一个常量,进行连接时,会创建一个新的String对象,如果进行连接很频繁的话用StringBuffer,String的效率比较低
  1. 谈谈 final,finally,finalize的区别
  • final:如果一个类被final修饰,意味着该类不能派生出新的子类,不能作为父类被继承。
    因此一个类不能被声明为abstract,又被声明为final。将变量或方法声明为final。
    可以保证他们在使用的时候不被改变。
    其初始化可以在两个地方:一是其定义的地方,也就是在final变量在定义的时候就对其赋值;
    二是在构造函数中。这两个地方只能选其中的一个,要么在定义的时候给值,要么在构造函数中给值。
    被声明为final的方法也只能使用,不能重写。
  • finally:在异常处理的时候,提供finally块来执行任何的清除操作。
    如果抛出一个异常,那么相匹配的catch字句就会执行,然后控制就会进入finally块,前提是有finally块。
  • finalize:finalize是方法名,java技术允许使用finalize()方法在垃圾收集器将对象从内存中清除出去之前做必要的清理工作。
    这个方法是在垃圾收集器确认一个对象没有被引用时对这个对象调用的。
    它是在Object类中定义的,因此,所有的类都继承了它。子类覆盖finalize()方法已整理系统资源或者执行其他清理工作。
    finalize()方法是在垃圾收集器删除对象之前对这个对象调用的。
  1. String s = new String(“xyz”);创建了几个String Object?
  • 两个(一个是“xyz”,一个是指向“xyz”的引用对象s)
  1. 数组有没有length()这个方法?String有没有length()这个方法?
  • 数组只有length属性,String有length()方法
  1. float型float f=3.4是否正确?
  • 答案: 不正确
  • 原因: 精度不准确,应该用强制类型转换,如下所示:float f=(float)3.4 或float f = 3.4f
    在java里面,没小数点的默认是int,有小数点的默认是 double;
    编译器可以自动向上转型,如int 转成 long 系统自动转换没有问题,因为后者精度更高
    double 转成 float 就不能自动做了,所以后面的加上个 f;
  1. short s1=1;s1=s1+1;有什么错? short s1=1;s1+=1;有什么错?
  • short s1 = 1;s1 = s1 + 1;错误!java中整型默认为int型,s1+1结果为int型,有一个short->int的自动类型转换的过程,而int不会自动转换为精度更低的short型
  • short s1 = 1; s1 += 1;正确! 执行s1+=1;其实执行的是s1 = (short) (s1 + 1); 其中会有一个强制转换的过程。