大数据面试知识点整理合辑

这篇博客整理了Java基础知识,包括重载与重写、String相关特性、自动装箱与拆箱、异常处理和Final关键字等内容。还深入讨论了Java集合框架,如ArrayList与LinkedList的异同以及HashMap的基本原理。最后,涉及JVM内存区域和垃圾回收机制,对面试中的常见问题进行了总结。
摘要由CSDN通过智能技术生成

Java基础知识

重载与重写的区别

重载指的是在同一个类中,函数的方法必须一样但是参数顺序不同,个数不同,类型不同,返回值和访问修饰符可以不一样,发生在编译时。
重写发生在父子类中,方法名必须一样,参数列表必须一致。返回值类型范围必须小于等于父类,抛出异常范围小于等于父类,访问修饰符的范围必须大于父类。private类型的方法不可以被重写。子类对父类中的方法功能不满意,对该方法进行功能修改。
问题:

  1. 为什么返回值的范围和抛出异常的范围必须小于等于父类?
  2. 为什么访问修饰符的范围必须大于父类?

String,StringBuffer,StringBuilder之间的区别,String为什么是不可变的?

多变性

String类中使用final关键字字符数组保存字符串 private final char value[],所以String是对象是不可变。
StringBuffer和StringBuilder都是继承于AbstractStringBuilder类,它们的源码定义是char []value;

线程安全性

String中的对象是不可变的,也就可以理解为常量,线程安全。在StringBuffer中这些操作是添加了线程锁,所以线程是安全的。StringBuilder的并没有对方法进行同步锁,所以使非线程安全。

性能

每次对String类型进行改变的时候,都会生成一个新的String对象,然后引用指向新的地址。
StringBuffer每次都对自身进行操作,相同情况下,StringBuilder和相比StringBuffer性能提升了15%~20%,但是要冒着线程不安全的风向。
三者使用的选择:

  • 操作少量的数据使用String;
  • 在单线程下操作大量数据则使用StringBuffer;
  • 在多线程下操作大量数据则使用StringBuilder。

自动装箱与拆箱

装箱:将基本类型转换为引用类型。
拆箱:将引用类型转换为基本类型。

equals 与 == 的区别

==对于基本类型比较的是数据的值,对于引用类型比较的是存储地址。

equals有两种用法:

  1. 对于未被类覆盖的equals方法使用方式和==一样;
  2. 对于类覆盖了的方法(即重写)equals比较的是两个对象的内容是否相等。
    请注意以下几种情况:
  • String中的equals已经被重写了,所以比较的是内容。Object中的equals方法是比较的对象的内存地址。
  • 创建一个String对象,JVM会现在常量池中寻找相同的内容,如果有则把引用指向该内容,反之则创建一个新的内容。

关于Final关键字的一些总结

Final一般用于变量、方法、类
Final修饰基本类型的变量以后该值无法改变。对于引用类型的常量来说,一旦被指定该应用无法指向其他内存地址。
Final修饰类,这该类无法被继承。对应的该类里面的方法则被隐式的变为Final方法。
Final修饰方法,1.这样做是为了锁定该方法,无法被任何继承类修改2.提升效率,早期的Java,会将Final方法转为内嵌调用。如果方法过于庞大,内嵌式函数对于效率的提升并没有多少(现在的Java已经做出了优化,不在使用Final优化方法),类中所有的Private方法都隐式的指定为Final。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值