Java面试题总结-Day2

Java面试题总结-Day2

Java面试题总结-Day2

1 面试题-Day2

1.1 String和StringBuffer,StringBuilder的区别是什么?String为什么是不可变的?

1.1.1 可变性

  1. String类中使用字符数组: private final char value[] 保存字符串,所以String对象是不可变的.
  2. StringBuilder与StringBuffer都继承自AbstractStringBuilder类,在AbstractStringBuilder中也是使用字符数组 char[] value 保存字符串,这两种对象都是可变的.

1.1.2 线程安全性

  1. String对象是你不可变的,也就是可以理解为常量,线程安全.
  2. AbstractStringBuilder是StringBuilder和StringBuffer的公共父类,定义了一些字符串的基本操作,如expandCapacity,append,insert,indexOf等公共方法.
  3. StringBuffer对AbstractStringBuilder的公共方法添加了同步锁或者对调用的方法加了同步锁,所以是线程安全的.
  4. StringBuilder并没有对AbstractStringBuilder的公共方法添加同步锁,所以是非线程安全的.

1.1.3 对于三者使用总结

  1. 如果操作少量的数据用String.
  2. 单线程操作字符串缓冲区下操作大量数据用StringBuilder.
  3. 多线程操作字符串缓冲区下操作大量数据用StringBuffer.

1.2 什么是反射机制?反射机制的应用场景有哪些呢?

1.2.1 反射机制的介绍

  1. JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的

任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能被称为Java的反射机制.

1.2.2 静态编译和动态编译

  • 静态编译: 在编译时确定类型,绑定对象
  • 动态编译: 运行时确定类型,绑定对象

1.2.3 反射机制的优缺点

  • 优点: 运行期类型的判断,动态加载类,提高代码灵活度.
  • 缺点: 性能瓶颈: 反射相当于一系列解释操作,通知JVM要做很多事情,性能比直接的Java代码要慢很多.

1.2.4 反射机制的应用场景

  1. 动态代理设计模式.
  2. Spring/Hibernate等框架也大量使用到了反射机制.

1.3 接口与抽象类的区别是什么?

  1. 接口的方法默认是public的,所有方法在接口中都不能有实现,抽象类中可以有非抽象的方法.
  2. 接口中的实例变量默认是final类型的,而抽象类中则不一定.
  3. 一个类可以实现多个接口,但是一个类最多只能实现一个抽象类.
  4. 一个类实现接口需要实现接口中的所有方法,一个类实现抽象类只需实现它的抽象方法.
  5. 接口不能用new实例化,但是可以声明,必须引用一个实现该接口的对象.
  6. 从设计层面来说,抽象类是对类的抽象,是一种模板设计.接口是行为的抽象,是一种行为的规范.

1.4 成员变量和局部变量有哪些区别?

  1. 从语法形式看,成员变量属于类,局部变量是在方法中定义的变量或者是方法的参数.
    • 成员变量可以被public,private,static等修饰符所修饰,而局部变量不能被访问控制权限符及static所修饰.
    • 成员变量和局部变量都能被final所修饰.
  2. 从变量在内存中的存储方式看,成员变量是对象的一部分,对象存在于堆内存中,局部变量存在于栈内存中.
  3. 从变量在内存中的生存时间看,成员变量是对象的一部分, 它随着对象的创建而存在,而局部变量随着方法调用而自动消失.
  4. 成员变量如果没有被赋初值,则会自动以类型的默认值而赋值(一种情况例外被final修饰但没有被static修饰的成员变量必须显式的复制),局部变量则不会自动赋值.

1.5 重载与重写的区别

  • 重载: 发生在同一个类中,方法名必须相同,参数参数类型不同(个数不同,顺序不同),方法返回值的访问修饰符可以不同,发生在编译时.
  • 重写: 发生在父子类中,方法名,参数列表必须相同,返回值范围小于父类,抛出的异常范围小于父类,修饰符范围大于等于父类,如果父类方法访问修饰符为private则子类就不能重写该方法.

Date: 2018-10-31 22:51

Author: devinkin

Created: 2018-11-01 四 08:00

Validate

posted @ 2018-10-31 23:21  EmacsDevinkin  阅读(118)  评论(0编辑  收藏  举报