Java大数据面试复习30天冲刺 - 日积月累,每日五题Day01——JavaSE

Posted Maynor学长

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java大数据面试复习30天冲刺 - 日积月累,每日五题Day01——JavaSE相关的知识,希望对你有一定的参考价值。

文章目录

1. 重载和重写的区别

重载: 发生在同一个类中,方法名必须相同,参数类型不同,个数不同,顺序不同,方法返回值和访问修饰符可以不同,发生在编译时。
重写: 发生在父子类中,方法名,参数列表必须相同,返回值范围小于等于父类,抛出的异常范围小于等于父类,访问修饰符范围大于等于父类;如果父类方法访问修饰符为 private 则子类就不能重写该方法。

https://blog.csdn.net/weixin_45385660/article/details/108407603

2. String和StringBuffer,StringBuilder 的区别是什么?String 为什么是不可变的?

可变性
简单的来说:String 类中使用 final 关键字字符数组保存字符串, private final char value[] ,所以 String对象是不可变的。而StringBuilder 与 StringBuffer 都继承自 AbstractStringBuilder 类,在AbstractStringBuilder中也是使用字符数组保存字符串 char[]value 但是没有用 final 关键字修饰,所以这两种对象都是可变的。
线程安全性
String 中的对象是不可变的,也就可以理解为常量,线程安全。AbstractStringBuilder 是 StringBuilder 与 StringBuffer 的公共父类,定义了一些字符串的基本操作,如 expandCapacity.append.insert.indexOf 等公共 方法。StringBuffer 对方法加了同步锁或者对调用的方法加了同步锁,所以是线程安全的。StringBuilder 并没有对方法进行加同步锁,所以是非线程安全的。
性能
每次对 String 类型进行改变的时候,都会生成一个新的 String 对象,然后将指针指向新的 String 对象。
StringBuffer 每次都会对 StringBuffer 对象本身进行操作,而不是生成新的对象并改变对象引用。相同情况下使用StirngBuilder 相比使用 StringBuffer 仅能获得 10%~15% 左右的性能提升,但却要冒多线程不安全的风险。
对于三者使用的总结:

操作少量的数据 => 使用String

单线程操作字符串缓冲区下操作大量数据 => 使用StringBuilder

多线程操作字符串缓冲区下操作大量数据 => 使用StringBuffer

https://blog.csdn.net/csxypr/article/details/92378336

3. Java 中==和 equals 的区别

== 的作用:
基本类型:比较的就是值是否相同
引用类型:比较的就是地址值是否相同
equals 的作用:引用类型:默认情况下,比较的是地址值。
特:String、Integer、Date 这些类库中 equals 被重写,比较的是内容而不是地址!
答: ==:比较的是两个字符串内存地址(堆内存)的数值是否相等,属于数值比较;
equals():比较的是两个字符串的内容,属于内容比较

https://blog.csdn.net/lcsy000/article/details/82782864

4. 关于final关键字的一些总结

final关键字主要用在三个地方:变量、方法、类。

对于一个final变量,如果是基本数据类型的变量,则其数值一旦在初始化之后便不能更改;如果是引用类型的变量,则在对其初始化之后便不能再让其指向另一个对象。

当用final修饰一个类时,表明这个类不能被继承。final类中的所有成员方法都会被隐式地指定为final方法。 

使用final方法的原因有两个。第一个原因是把方法锁定,以防任何继承类修改它的含义;第二个原因是效率。

在早期的Java实现版本中,会将final方法转为内嵌调用。但是如果方法过于庞大,可能看不到内嵌调用带来的任何性能提升(现在的Java版本已经不需要使用final方法进行这些优化了)。类中所有的private方法都隐式地指定为final。https://blog.csdn.net/qq_42651904/article/details/87708198

5.error 和 exception 的区别?

Error 类和 Exception 类的父类都是 Throwable 类,他们的区别如下。
Error 类一般是指与虚拟机相关的问题,如系统崩溃,虚拟机错误,内存空间不足,方法调用栈溢出等。对于这类 错误的导致的应用程序中断,仅靠程序本身无法恢复和和预防,遇到这样的错误,建议让程序终止。
Exception 类表示程序可以处理的异常,可以捕获且可能恢复。遇到这类异常,应该尽可能处理异常,使程序恢复运行,而不应该随意终止异常。
Exception 类又分为运行时异常(Runtime Exception)和受检查的异常(CheckedException ),运行时异常。https://blog.csdn.net/iblade/article/details/78196016

以上是关于Java大数据面试复习30天冲刺 - 日积月累,每日五题Day01——JavaSE的主要内容,如果未能解决你的问题,请参考以下文章

Java大数据面试复习30天冲刺 - 日积月累,每日五题Day04——JavaSE

Java大数据面试复习30天冲刺 - 日积月累,每日五题Day02——JavaSE

大数据开发岗面试复习30天冲刺 - 日积月累,每日五题Day21——Spark8

大数据开发岗面试复习30天冲刺 - 日积月累,每日五题Day29——数据倾斜2

大数据开发岗面试复习30天冲刺 - 日积月累,每日五题Day23——Spark10

大数据开发岗面试复习30天冲刺 - 日积月累,每日五题Day24——Spark11