八股文问题及答案
1、面向对象
面向对象是一种编程思想,他是从面向过程过度而来的,例子:洗衣服任务。
三大特性:封装、继承、多态
封装:把数据与基于数据的操作封装在一起,使其形成一个不可分割的独立个体。减少耦合、提高代码的复用性。
继承:一种类之间的关联关系,子类可以得到父类的非私有的属性和方法。子类可以当作父类来使用。
多态:编译时多态 & 运行时多态
编译时多态:主要指方法的重载
运行时多态:指程序中定义的对象引用所指向的具体类型在运行期间才确定
运行时多态三个条件:继承、重写、向上转型
2、JDK、JRE、JVM之间的区别
JVM:是运行java字节码的虚拟机
JDK:是提供给开发者使用的java开发工具包
JRE:是java的运行环境
3、==和equals方法之间的区别
==的作用:基本类型比较值是否相等,引用类型比较内存地址是否相等
equals的作用:基本类型没有,引用类型比较内存地址是否相等。可重写equals方法
4、hashCode()与equals()之间的关系
在覆盖(重写)equals方法时应当总是覆盖hashCode方法,保证等价的两个对象散列值也相等。
5、final关键字的作用是什么?
用来修饰变量、方法、类。修饰变量则变量在初始化之后不能改变。修饰方法则方法不能被重写。修饰类则类不能被继承。
6、String、StringBuffer、StringBuilder的区别?
执行速度:低、中、高;
线程安全:安全、安全、不安全;
使用场景:少量字符串操作、多线程大量操作、单线程大量操作
7、重载与重写的区别?
重载出现在类中,名称相同的方法,参数列表不同、返回值类型不同。
重写出现在继承中,子类改写父类重名的方法,参数列表不变、返回值类型不变,只更改方法体中的逻辑就是重写。
8、接口和抽象类的区别?
抽象:将项目中某些共性的东西抽离出来。
抽象类是对整个事物的抽象,包括属性和行为。接口是对事物的某一个行为进行抽象。
9、List和Set的区别
List:存储的元素有序、可重复
Set:存储的元素无序、不可重复
Queue:按照特定的排队规则来确认先后顺序,存储的元素有序、可重复
Map:使用键值对存储,key无序、不可重复,value无序、可重复,每个key最多可映射一个value
10、ArrayList和LinkedList区别
都实现了List接口,具有有序不唯一的特点。都是不同步的,线程不安全。
ArrayList实现了长度可变的数组、在内存中分配了连续的空间,底层数据结构是Object数组,LinkedList底层数据结构是双向链表。