欢迎来到知了汇智!
联系电话:知了汇智-电话号码 028-62016472 / 13228113191

Java基础面试题-知了汇智

Java基础面试题

  ==与equals()方法的区别?

  1. ==在比较基本数据类型时比较的是值,比较两个对象时比较的是地址值;

  2. equals()方法存在于Object类中,Object类中equals()方法底层依赖的是==操作,

  在所有没有重写equals()的类中,调用equals()其实和使用==的效果一样,也是比较的地址值。

  String重写了equals(),底层比较的是两个String对应位置的char字符是否==。

  为什么重写equals()方法就必须重写hashCode()方法?

  1. Object.hashCode()方法是一个本地native方法,返回的是对象引用中存储的对象的内存地址;

  2. 基于散列的集合(HashSet、HashMap和Hashtable)存放key时,调用该对象(存入对象)的hashCode()方法来得到该对象的hashCode值,然后根据该hashCode值决定该对象在HashSet中存储的位置;

  3. 所以如果equals方法返回true,那么两个对象的hasCode()返回值必须一样;

  Object有哪些方法?

  1. equals()、hashCode()、getClass()、toString();

  2. clone():实现对象的浅复制(当改变其中一个对象的引用类型属性实例的属性时,另一个对象相应的引用类型的属性实例中的属性也会发生变化),只有实现了Cloneable接口才可以调用该方法。否则抛出CloneNotSupportedException;深复制:引用类型属性也要实现clone()方法并显式调用;

  3. finalize():用于JVM对象收集;

  4. wait():使当前线程等待该对象的锁,当前线程必须是该对象的拥有者,也就是具有该对象的锁。wait()方法一直等待,直到获得锁或者被中断;

  5. notify():唤醒在该对象上等待的某个线程;

  6. notifyAll():唤醒在该对象上等待的所有线程;

  接口和抽象类的区别,什么情况下用接口或抽象类?

  区别:接口里面方法都是没有实现的,抽象类里面可以有部分是实现的方法。

  抽象类:只有一个或几个方法需要定义成抽象方法,从而让子类来实现;其他方法具有清晰、明确、共同的逻辑需要在本类中实现,由子类“共享”和“复用”。

  接口:纯粹定义方法接口,所有方法都由实现该接口的类来实现。没有共享的公共逻辑,此时用接口比较合适。

Java基础面试题

 

  String、StringBuffer、StringBuilder区别

  不可变:String,底层是final char value[]

  可变:StringBuffer、StringBuilder,底层是char[] value

  线程安全:StringBuffer

  线程不安全:StringBuilder

  为什么String设计成不可变?

  1. 字符串常量池的需要:字符串常量池是Java堆内存中一个特殊的存储区域, 当创建一个String对象时,假如此字符串值已经存在于常量池中,则不会创建一个新的对象,而是引用已经存在的对象;

  2. 允许String对象缓存HashCode:Java中String对象的哈希码被频繁地使用,字符串不变性保证了hash码的唯一性,因此可以放心地进行缓存。这也是一种性能优化手段,意味着不必每次都去计算新的哈希码;

  3. 安全性:String常被用来当做参数,例如 网络连接地址URL,文件路径path,还有反射机制所需要的String参数等, 假若String不是固定不变的,将会引起各种安全隐患。

  序列化和反序列化?

  概念:

  1. 把对象转换为字节序列的过程称为对象的序列化;

  2. 把字节序列恢复为对象的过程称为对象的反序列化。

  用途:

  1. 把对象的字节序列永久地保存到硬盘上,让它们离开内存空间,入住物理硬盘,等要用了,再把保存在硬盘中的对象还原到内存中;

  2. 在网络上传送对象的字节序列;

  实现:

  1. ObjectOutputStream代表对象输出流,它的writeObject(Object obj)方法可对参数指定的obj对象进行序列化,把得到的字节序列写到一个目标输出流中;

  2. ObjectInputStream代表对象输入流,它的readObject()方法从一个源输入流中读取字节序列,再把它们反序列化为一个对象,并将其返回;

  3. 只有实现了Serializable接口的类的对象才能被序列化;

  serialVersionUID的作用:

  1. 在某些场合,希望类的不同版本对序列化兼容,因此需要确保类的不同版本具有相同的serialVersionUID;

  2. 在某些场合,不希望类的不同版本对序列化兼容,因此需要确保类的不同版本具有不同的serialVersionUID。

  SpringBoot优缺点?

  优点:快速构建项目、对主流开发框架的无配置集成(约定优于配置)、项目可独立运行,无须外部依赖Servlet容器(内置tomcat插件)、Spring Maven版本统一管理(避免版本冲突);

  缺点:集成度较高,使用过程中不太容易了解底层,部署出现问题难以排查;

       版权声明:本文来源于网络,由知了堂搜集整理,仅供大家学习Java时使用

132 2811 3191
预约免费试学
点击咨询
预约试学