![](https://img-blog.csdnimg.cn/direct/828ee182bbd843c0875b48f894a66f58.jpeg?x-oss-process=image/resize,m_fixed,h_224,w_224)
Java经典面试题(2024实时更新)
文章平均质量分 72
Java常见面试题,几百道面试题精心为面试题准备。
dream_ready
java本是无敌路,何须再借C+骨
展开
-
HashMap为什么会死循环?
死循环是因为并发 HashMap 扩容导致的,并发扩容的第一步,线程 T1 和线程 T2 要对 HashMap 进行扩容操作此时T1 和 T2 指向的是链表的头结点元素 A,而T1和 T2 的下一个节点,也就是 T1.next 和 T2next 指向的是B 节点,如下图所示:。因为 T1 执行完扩容之后 B 节点的下一个节点是 A,而 T2 线程指向的首节点是 A,第二个节点是 B,这个顺序刚好和 T1 扩完容完之后的节点顺序是相反的。,这就是 HashMap 死循环导致的原因。原创 2024-03-22 21:19:56 · 460 阅读 · 0 评论 -
树的分类有哪些?
树是一种非线性的层次型的数据结构,也是一种非常重要的数据结构,它由节点(node)和边(edge)组成。非线性数据结构是指其中的元素之间不是一对一的线性关系。具体来说,非线性数据结构中的元素可以有多个前驱和多个后继,其组织和连接方式不受任何限制。与之相对的是线性数据结构,其中的元素以线性的方式相互连接,每个元素只有一个前驱和一个后继。:每个节点最多有两个子节点的树,分别为左子节点和右子节点。原创 2024-03-17 12:13:12 · 970 阅读 · 5 评论 -
String 底层是如何实现的?
String底层是基于 char[ ] 数组或 byte[ ] 数组实现的,JDK9 之后,之所以使用 byte[ ] 替换 char[ ] 数组,这是因为,byte类型粒度更细,一个 char 等于 2 个 byte。对于大部分的英文字符和少量中文字符来说,使用 1 个 byte就够了,完全不需要使用 1 个 char 进行存储,所以 JDK9 使用 byte[ ] 之后,对于大部分英文字符来说,同样的内容,其存储空间减少了一半,这就是 JDK9 之后使用 byte[ ] 所带来的优势原创 2024-03-12 19:20:35 · 609 阅读 · 0 评论 -
Java中 final、finally、finalize 有什么区别?
final、finally、finalize 是 Java 中三个不同的关键字,它们除了长得像之外,其他的(作用和含义)完全不同。它们三个的区别就好像:雷、雷锋、雷峰塔之间的区别。(是三个完全不同的东西)final、finally、finalize的区别如下:final:表示不可变性,用于修饰类、方法和变量 ,当用于类时,表示该类不能被继承;当用于方法时,表示该方法不能被子类重写(覆盖);当用于变量时,表示该变量的值不能被修改(成为常量)。原创 2024-03-12 18:28:20 · 1053 阅读 · 0 评论 -
== 和 equals 有什么区别?
== 用于基础数据类型时,是用来比较两个变量的值是否相等的,而对于引用类型来说,是用来比较两个对象的引用是否相同的。而 equals 默认是比较两个对象的引用是否相同的,但大部分时候都会被重写为比较两个对象的值是否相同。原创 2024-03-12 12:28:21 · 644 阅读 · 0 评论 -
返回值不同算方法重载么?为什么?
方法签名(Method Signature)指的是方法的唯一标识,包括方法的名称、参数列表和参数的顺序。方法签名用于区分不同的方法,以便编译器和虚拟机能够正确地识别和调用特定的方法。原创 2024-03-12 12:19:34 · 518 阅读 · 0 评论 -
方法重载和方法重写有什么区别?
总的来说,方法重载是在一个类中多个同名方法之间的多态性,而方法重写是在父类和子类之间的多态性。,用的是父类还是子类的方法是需要根据实际情况改变的,比如向上转型接收参数时,调用同一个方法可能是截然不同的效果。方法本质上并没有区别开来,从方法签名角度它俩也没有区别开来。,这几个方法本质上已经完全不同了,你用的时候根据参数等的改变没有什么二义性,用的是这个就不存在是另一个的可能性,所以代码在编译时就已经对应好了你要用的方法。第5点需要注意一下,方法重载 不是动态绑定的,是静态绑定的,迷惑的话自己再想想。原创 2024-03-12 12:18:36 · 427 阅读 · 3 评论 -
Java中抽象类和接口有什么区别?
它和接口的区别主要体现在:类型扩展不同、方法/属性访问控制符不同、方法实现不同,以及使用目的不同。普通类(Concrete Class):普通类是最常见的类,可以被直接实例化和使用。它可以包含成员变量、方法和构造方法等,并且可以定义自己的继承关系。内部类是定义在其他类内部的类。它可以访问外部类的属性和方法,也可以用于实现某些特定的功能。抽象类是通过 abstract 关键字来定义的,用于表示一种抽象的类。注:其他方面的特性,抽象类和普通类并无太大差别。非静态内部类(成员内部类)原创 2024-03-12 11:50:29 · 809 阅读 · 0 评论 -
什么叫做 “面向对象” 编程?
(Object-Oriented Programming,简称)是一种编程范式或编程方法,通过将数据和操作数据的方法(函数)进行组合,以创建对象的方法来解决问题面向对象编程的主要思想是将问题划分为不同的对象,每个对象具有一些特定的属性和行为,对象之间通过消息传递进行通信和交互。原创 2024-03-11 20:16:27 · 512 阅读 · 0 评论 -
为什么Java不支持多继承
在 Java 语言中,不支持多继承的主要原因是为了和(如菱形)以及,同时又因为在实际工作中,确实很少用到多继承,所以在Java语言中,并不支持多继承。而且,虽然Java中不支持多继承,但也给了一些功能上的,比如。原创 2024-03-11 19:39:36 · 941 阅读 · 0 评论