Java面试题

java常见的继承、多态相关、String等

  1. String和StringBuffer的区别
    答:java中它们都可以存储和操作单个或者多个字符串。String是final修饰的,表示其不可变性;而StringBuffer提供对字符串的修改,而且可以动态的进行字符串的组装。(注:可了解StringBuffer和StringBulider的区别)。
  2. 覆盖(重写)和重载的区别;
    答:重载一般是定义名称相同的方法,通过传入不同的参数(个数、类型等)来区分这些方法,会根据不同的参数样式来选择执行哪一个方法。(一个类)
    (1)不同参数个数、不同参数类型、不同参数顺序;
    (2)方法的异常不会对重载造成影响。
    重写指的是指在修改方法之后,使方法达到不同的作用。(多个类)
    (1)覆盖方法的标识符必须一致
    (2)返回值必须一致
    (3)子类所抛出的异常必须是父类的子类或者相同。
    注:如果存在继承关系时,父类访问权限为private,则子类不构成重写或者覆盖。
  3. 接口可否可以继承接口?抽象类是否可以实现接口?抽象类是否可以继承实体类?
    答:继承可以继承接口。抽象类可以实现接口,抽象类可以继承实体类,前提条件是:实体类必须有明确的构造函数。
  4. 抽象类和接口的区别?
    答:该问题需要回答抽象类和接口分别是什么,再比较其区别。修饰符的不同,方法是否可以被实现,是否存在多继承关系,在java1.8之后的接口中是否可以实现方法。
  5. String类型是否可以作用在switch上:不可以,Long也不行,不清楚就说没用过,不知道。
  6. 什么是多态?
    答概括一下:在同一时刻调用同一个方法引用,产生不同的结果:类的覆盖,方法的重载,最好可以举例说明。如一个人在不同的国家的语言表达等。
    条件:存在继承关系。父类的引用指向子类的对象,覆盖。

异常相关、线程和同步锁等

  1. 运行时异常是什么,列举几个常见的异常。
    答:RuntimeException,指的是程序在运行过程中出现的异常,可人为捕获或者抛出,项目中可作为自定义异常。
    常见异常:中断异常、数组越界异常、类找不到异常、SQL异常、类型转换异常、空指针异常、IO流异常等等。
  2. try、throw、throws,抛出异常和捕获异常形式等。
    答:try…with…resource是最为常见的一种,用于捕获异常使用,还有一种为直接捕获try()catch即可,throw代表在方法中抛出,可捕获,throws一般是指在方法抛出异常,交给调用者进行异常处理。一般来说都是catch捕获,finally(执行其他)
  3. 多线程实现方法
    答:继承Thead类和实现Runnable接口,同步的实现方式是sychronized和wait+notify。
  4. 什么是Java序列化?如何实现Java序列化?
    答:序列化是指将对象转化为流进行处理,即对流化的对象进行读写操作。
    将需要进行序列化的对象实现Serializable接口,转化为流形式,此方法也是进行深拷贝的方法之一。
  5. 当一个线程进入一个对象的一个sychronized方法后,其它线程是否可以进入此对象的其他方法
    答:分为几种情况:
    (1)看是否加了sychronized关键字,没加则可以。
    (2)方法内部如果调用了wait,则可以进入其他的Sychronized方法
    (3)如果其他方法是静态的,同步的是当前类的字节码,与非静态的方法不能同步,因为非静态使用的是this。
  6. sleep和wait的区别
    答:sleep指的是让一个正在运行的线程沉睡,属于静态方法,需要捕获中断异常。
    wait是指让线程处于等待转台,释放该线程所持有的锁,由notify或者Allnotify唤醒,让线程处于竞争状态,无法确定线程的优先级,由JVM调用。

集合

  1. Collection和Collections的区别。
    答:Collections是集合的一个工具类,提供了集合操作的一些方法。
    Collection是List和Set集合的一个父接口。List集合包括LinkedList,ArrayList,Vector等,其中Vector是线程安全的,相对来说运行速度比较慢。Set是一个不重复且有序的集合,包括hashSet,TreeSet等。

  2. HashMap和Hashtable的区别
    答:HashMap和Hashtable都是Map集合中的分支。HashMap是线程不安全的,Hashtable是线程安全的,开发中使用的还有一种叫做CurrentHashMap。

  3. HashMap的工作原理是什么?
    答:(1)基于Hashing,使用put(key,value)将数据存储到Hashmap中。
    (2)在使用get获取对象,利用hashcode找到对应的实体,那种map中的键值对。

  4. 如果两个对象的hashcode相同会发生什么?
    答:线性冲突,即碰撞,可了解数据结构中散列哈希表中解决方法,有两种一种为线性探测,一种为二次探测。

  5. hashMap的几个注意点:
    答:当一个map填满了负载因在到达0.75时时,会重新调整为原来的两倍,以满足内存需要;
    链表长度到达8时,会转化为红黑树(具体问道可以说,暂时没接触,不太了解,大佬无所谓)

Java的JVM相关

  1. 简单介绍Java的GC垃圾回收机制。
    答:作用:防止内存泄漏。
    回收机制:
    (1)对长时间不使用的对象
    (2)占用内存过多的无用对象
    (3)调用System.gc()方法。
  2. Java中内存泄漏的情况:
    答:长生命周期的对象持有短生命周期对象的引用。(具体可以说自己没用过,没遇到过,大佬除外)
  3. 堆栈
    答:(1)Java的堆是一个运行时数据区,类的对象从堆中分配空间。这些对象通过new等指令建立,通过垃圾回收器来销毁。
    (2)堆的优势是可以动态地分配内存空间,需要多少内存空间不必事先告诉编译器,因为它是在运行时动态分配的。但缺点是,由于需要在运行时动态分配内存,所以存取速度较慢。
    (3)栈中主要存放一些基本数据类型的变量(byte,short,int,long,float,double,boolean,char)和对象的引用。
    (4)栈的优势是,存取速度比堆快,栈数据可以共享。但缺点是,存放在栈中的数据占用多少内存空间需要在编译时确定下来,缺乏灵活性。
  4. jvm底层实现
    答:讲清楚java文件的编译过程,一般是将java文件转为class文件,由jvm转化为机器码进行识别,具体可以说不清楚。
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值