Java基础

Java基础

  • JVM

运行java字节码的虚拟机。

  • jre与jdk的区别?

jre:java程序运行的环境
jdk:除运行环境外,还有java自带的各种工具如,jps(查看java线程),jstat(监视运行时虚拟机的状态 jstat -gc pid),jmap(生成heap dump文件分析内存溢出时使用 jmap -heap pid),
jstack(查看线程状态,用来分析死锁、死循环等)。
总结:只是运行java程序安装jre即可,若要分析内存溢出,cpu使用率过高的线上问题安装jdk。

  • 构造器Constructor是否可被 override?

不可被override(重写),但是可以被overload(重载)。

  • 重写(override)和重载(overload)的区别?

重写:子类对父类方法重写编写实现,参数必须相同,返回值可以相同,可以不相同(返回值,异常范围都小于父类)。
重载:在同一个类中的多个同名方法,参数类型数量必须不同,返回值可以相同也可以不同。

  • 面向对象三大特性?

封装:对象属性私有化。
继承:子类可以拥有父类的属性和方法(私有属性可以拥有但是不能访问)
多态:具体使用父类还是子类的方法或属性在编译时不能确定,在运行时确定

多态(父类子类相同变量,方法时):
FuClass demo=new ZiClass();
demo.变量 //调用父类的
demo.方法() //调用子类的
  • String StringBuilder 和 StringBuffer区别?

String:不可变字符串,底层为final char[] value 数组。
StringBuilder:可变字符串,线程不安全。
StringBuffer:可变字符串,线程安全。
性能:StringBuilder>StringBuffer
总结:推荐使用StringBuffer;StringBuilder性能只提高了15%左右,却要冒线程不安全的风险。

  • 自动装箱,拆箱
//假如需要生成一个Integer对象,值为5
//正常
Integer i = new Integer(10);
//自动装箱
Integer i = 10;
//自动拆箱
int n = i;
  • 包装类型和基本类型的区别是什么?

    1. 包装类型可以为null,基本类型不行。(pojo中的某个属性若设置为int型,正好数据查出这个属性值为null,由于自动装箱的存在,所以会报NullPointerException异常)
    2. 包装类型可以用于泛型,基本类型不行。
    3. 基本类型更高效(基本类型存在栈中,包装类型存在堆中)
    
  • 接口和抽象类的区别?

    1. 接口默认public,接口不能有已实现的方法;抽象类可以有非抽象方法。
    2. 接口变量必须是static或final型。
    3. 接口可以多继承
    4. 抽象类是对类的抽象,相当于模板,接口是对行为的抽象;比如animal都会跑,那么子类cat必须实现run,cat可能还会爬树这种行为,再去实现接口的climb方法;
    
  • 全局变量和局部变量的区别?

    1. 全局变量是属于类的,局部变量在方法中定义。
    2. 局部变量只能被final修饰。
    3. 局部变量存在栈,全局存在堆。
    4. 全局变量未赋值系统会赋予默认值,局部变量必须有初始值。
    5. 局部变量随方法结束消失,全局变量是对象的一部分,与对象的生命周期相同。
    
  • ==与equals的区别?

==比较的对象的地址是否相同
equals判断两个对象是否相等,若已重写如String,那么比较的是值是否相等,否则比较的还是地址

  • hashCode与equals

    1. 什么是hashCode?
    答:hashCode方法存在于Object.java中,所以每个java对象都有hashCode方法
    2. hashCode有什么用?
    答:用于确定对象在散列表中的位置,且hashCode只在散列表中起作用。
    3. 散列表?
    答:常见的有:HashSet, Hashtable, HashMap
    4. hashCode() 和 equals() 的关系
    答:1.未用到散列表,这种情况下未用到hashCode,重写equals就可以判断两个对象是否相等。
       2.用到散列表,此时如果只重写equals方法,不重写hashCode方法,那么equals无效。
      // 新建Person对象,
      Person p1 = new Person("eee", 100);
      Person p2 = new Person("eee", 100);
      // 新建HashSet对象 
      HashSet set = new HashSet();
      set.add(p1);
      set.add(p2);
      由于未重写hashCode方法,即使equals方法判断为true,但是他们的hashCode值是不同的,所以HashSet判断他们是两个对象,那么存进去的时候就会出现重复。
    
  • java参数传递方式?

java只有值传递

//值传递,基本类型
//num1和num2未发生改变
public static void main(String[] args) {
    int num1 = 10;
    int num2 = 20;

    swap(num1, num2);

    System.out.println("num1 = " + num1);
    System.out.println("num2 = " + num2);
}

public static void swap(int a, int b) {
    int temp = a;
    a = b;
    b = temp;

    System.out.println("a = " + a);
    System.out.println("b = " + b);
}
//值传递,引用类型
//这里看起来像是引用传递,其实不是,这里传递的是引用的值,引用的值就是内存地址,arr和array指向同样的内存地址所以arr的发生了改变。
 public static void main(String[] args) {
        int[] arr = { 1, 2, 3, 4, 5 };
        System.out.println(arr[0]);
        change(arr);
        System.out.println(arr[0]);
    }

    public static void change(int[] array) {
        // 将数组的第一个元素变为0
        array[0] = 0;
    }
  • 线程和进程的区别?

    1. 进程:CPU加载上下文+CPU执行+CPU保存上下文 的时间
    2. 线程:把进程的时间细分成3段,a,b,c那么abc就是线程,他们共享进程的上下文
    3. 总结:进程和线程都是一个时间段的描述,是CPU工作时间段的描述,不过是颗粒大小不同。
    
  • 线程的状态?

    1. 新建 NEW
    2. 运行 RUNNABLE
    3. 阻塞 BLOCKED
    4. 等待 WAITING
    5. 超时等待 TIME_WAITING
    6. 终止态 TERMINATED
    
  • final关键字

用于类,方法,变量
1. 修饰基本变量表示变量不可变,修饰引用变量表示引用不可指向其他。
2. 修饰类表示类不可被继承。
3. 修饰方法表示方法不可被重写。

  • 异常

分为Error和Exception
Error一般为StackOverFlowError(递归过深)和OutOfMemoryError(内存溢出),Error是代码无法处理的
Exception分为IOException和RuntimeException
IOException一般为FileNotFoundException(文件未发现)
RuntimeException一般有数组越界,空指针,未发现类等

  • IO流
  1. 分类:
    按照流的流向分,可以分为输入流和输出流。
    按照操作单元划分,可以划分为字节流和字符流。
    按照流的角色划分为节点流和处理流。
  2. 有了字节流为什么还要有字符流?
    字符流是java虚拟机转换字节流得到的,这个过程是很耗时的,所以干脆直接提供字符流。
    字符一般用字符流,音频视频文件一般用字节流。
  • BIO,NIO,AIO有什么区别?
  1. BIO,同步阻塞IO,读取写入在一个线程内完成,并发量低。
  2. NIO,Non-blocaking同步非阻塞IO,利用Channel,Selector,Buffer等抽象达到异步IO的效果
  3. AIO,异步非阻塞IO
  • 深拷贝和浅拷贝
  1. 浅拷贝:基本数据类型,值传递;引用数据类型,对其引用进行拷贝。
  2. 深拷贝:基本数据类型,值传递;引用数据类型,创建一个新的对象,并复制其内容。

转自JavaGuide面试突击版

原文地址:https://www.cnblogs.com/qifengle1412/p/12870540.html