Java面试八股文-----Java基础篇

1.方法重载与重写的区别

  • 重载:发生在本类,方法名相同,参数列表、返回值类型、访问权限可以不同。
  • 重写:发生在子类,方法名、参数列表、返回值类型必需相同,访问权限大于父类,异常声明小于父类。final修饰的类和private修饰的方法不能重写。

2.抽象类和接口的区别

  • 抽象类有构造方法,接口不能有构造方法。
  • 抽象类可以有普通方法、代码块,接口只有有抽象方法,静态方法、普通方法。
  • 抽象类需要被继承,接口需要被实现。
  • 抽象类的成员变量可以是任何类型的,接口的成员方法必须用public static final 修饰。

3.==和equals的区别

  • ==在对于基本数据类型和引用数据类型比较的是不同的,
  • ==比较基本类型数据时比较的值是否相等,==比较引用数据类型比较的是引用地址值。
  • eqauls是Object类的方法,本质也是==,但是当有些方法重写了equals比较的值就会发生改变,就会变成比较当前对象的值,另外重写equals方法也要重写hashcode方法。

4.String能否被继承,为什么。

  • String不能被继承,因为String被final关键词修饰,被final关键字修饰的类则不能被继承。
  • String作为做常用的类,为了效率,不能被继承与重写。
  • String类中有很多native修饰的调用系统级别的本地方法,如果被继承可能会出现篡改信息不安全。

5.String、StirngBuilder、StringBuffer的区别

  • String是被final修饰的不可变的,每一次修改String都会生成一个新的类将原来的引用地址指向新的String对象。
  • StringBuilder可以改变,是线程不安全的。
  • StringBuffer可以改变,而且线程安全。

使用少量字符时,使用String;单线程操作大量数据使用StringBuffer,多线程操作大量数据使用StringBuilder。

6.Hashcode和Equals的区别

  • hashcode和equals都是Object类中的方法,equals比较的是引用地址值,hashcode方法是用地址值比较hash值,equals相等,hash值一定相等,hash值相等,equals不一定相等,两个方法都可能会被重写,重写后就是比较equals就通过内容表是否相等,hashcode重写后根据重写内容比较hash值。

7.深拷贝和浅拷贝

  • 浅拷贝:只赋值对象的引用,不复制本身,新对象和旧对象用的还是同一块内存
  • 深拷贝:会拷贝一个一模一样的对象,两个对象地址不一样,修改新对象原有对象不会改变。

8.sleep()和wait()的区别

  • wait()是Object类的方法,sleep()是thread类的方法
  • wait()方法释放CPU给其他线程会自动释放,sleep()释放cpu给其他线程不会自动释放、
  • 调用sleep()进入等待阻塞状态,调用wait()进入等待状态。

9.异常处理机制

  1. try catch finally捕获异常,其中finally中的代码一定会被执行,异常捕获到后程序继续执行。
  2. Throws声明类可能会抛出的异常,异常发生后 程序终止运行。

10.HashMap原理

HashMap在jdk1.8之后使用的是数组+链表+红黑树实现的。特点是key不能重复可以为0,线程不安全。

HashMap的扩容机制: 

HashMap默认容量是16,负载因子为0.75,当HashMap的的元素个数超过容量*负载因子的个数时,就会创建一个大小是之前容器两倍的新数组,将原来的数组复制到新数组中,当数组长度到64且链表长度大于8是,链表转为红黑树。

HashMap存取原理 :

  1. 计算key的hash值,然后进行二次hash,根据二次hash结果找到索引位置
  2. 如果这个位置有值,先进行equals比较,结果为真就取代这个元素,如果为假,就是用高低位平移法插入链表。

11.想要线程安全的HashMap怎么解决?

  1. 使用concurrentHashMap
  2. 使用HashTable
  3. 使用collections.synchronizedHashMap() 

12.HashMap和HashTable的区别

  • HashTable的每个方法都是用了synrchronized修饰,所以线程安全但是效率低
  • HashTable的key可以重复,但不允许为null
  • HashTable只进行一次hash,HashMap进行两次hash
  • HashTable底层使用了数组+链表。

13.ArrayList和LinkedList区别

ArrayList是实现了基于动态数组的数据结构,LinkedList基于链表的数据结构。
对于随机访问get和set,ArrayList觉得优于LinkedList,因为LinkedList要移动指针。
对于新增和删除操作add和remove,LinedList比较占优势,因为ArrayList要移动数据。

 14.java反射的作用

反射机制是在运行时,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意个对象,都能够调用它的任意一个方法。在java中,只要给定类的名字,就可以通过反射机制来获得类的所有信息。这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。

15. 反射创建Class类对象方式

  • 类型.getClass()方式
  • 类名.Class方式
  • Class.forName(类的包名)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

'Triple A-

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值