面向程序员的50多个Java面试问题

50+ Java Interview Questions for Programmers

Hello, guys! Recently, I have been sharing a lot of Java Interview questions and discussion individually, and many of my readers requested to bring them together so that they can have them in the same page and prepare better and this post is the result of that.

本文包含了 50个Java面试问题,涵盖了所有重要主题,例如核心Java基础知识,Java Collection Framework,Java多线程和并发,Java IO,JDBC,JVM内部,编码问题,面向对象的编程, 等等

这些问题也可以从各种访谈中找到,它们绝非易事,您可能已经在电话或面对面的访谈中看到了它们。

这些问题对于修订诸如多线程和集合之类的重要主题也非常有用,因为我还分享了一些有用的资源以进行进一步的学习和改进,例如The Complete Java MasterClass,以弥补和弥补您的Java技能空白。

因此,我们在这里等待的是来自2到5年经验的初学者和经验丰富的Java开发人员的访谈中一些常见的Java问题列表:

Java面试问答

1) Java如何实现平台独立性? (答案)提示:字节码和Java虚拟机

2) Java中的ClassLoader是什么? (answer)提示:JVM的一部分,用于加载类的字节码。 您可以自己编写。

3)编写Java程序以检查数字是偶数还是奇数? (答案)提示:您可以使用按位运算符,例如 按位与&,请记住,偶数末尾的二进制格式为零,奇数末尾的值为1。

4) Java中ArrayListHashSet之间的区别? (answer)提示:ListSet之间的所有差异均适用于此,例如 排序,重复,随机搜索等。

5)什么是Singleton中的双重检查锁定? (answer)提示:两次检查实例是否已初始化,第一个没有锁定,第二个有锁定。

6)如何在Java中创建线程安全的Singleton? (answer)提示:很多方式,例如 使用Enum或使用双重检查的锁定模式或使用嵌套的静态类。

7)何时在Java中使用volatile变量? (答案)提示:当您需要指示JVM变量可以被多个线程修改并向JVM提示不缓存其值的提示时。

8)何时在Java中使用瞬态变量? (answer)提示:当您要在实现了Serializable接口的类中使变量不可序列化时。 换句话说,您可以将其用于不想保存其值的变量。请参阅《完整的Java MasterClass》以了解Java中的瞬时变量。

9)Java中的瞬时变量和易失性变量之间的区别? (答案)提示:完全不同,一种用于序列化,而另一种用于并发。

10)Java中可序列化和可外部化之间的区别? (answer)提示:外部化可让您更好地控制序列化过程。

11)我们可以在Java中覆盖private方法吗? (答案)提示:否,因为它在子类中不可见,这是重写Java方法的主要要求。

12)Java中HashtableHashMap之间的区别? (answer)

提示:几个但最重要的是Hashtable,它已同步,而HashMap不是。 与HashMap相比,它还很旧而且很慢。

13)Java中的ListSet之间的区别? (答案)提示:List是有序的,并且允许重复。Set是无序的,并且不允许重复的元素。 14)Java中ArrayListVector之间的区别(答案) 提示:很多但最重要的是,ArrayList是非同步且快速的,而Vector是同步且缓慢的。 它也是Hashtable之类的传统类。 15)Java中HashtableConcurrentHashMap之间的区别? (answer)提示:更具可扩展性

16)ConcurrentHashMap如何实现可伸缩性? (答案)提示:将地图分为多个部分,并且仅在写入操作期间锁定。

17)对于要在HashMap中用作KeyObject,您将覆盖哪两种方法? (答案)提示:等于和哈希码 18)Java中的等待和睡眠之间的区别? (答案)提示:wait()方法释放锁定或监视器,而睡眠不释放。 19)Java中notifynotifyAll之间的区别? (answer)提示:notify通知一个随机线程正在等待该锁,而notifyAll通知所有正在等待监视器的线程。如果确定只有一个线程在等待,则使用notify,否则使用notifyAll更好。请参阅Java冠军Heinz Kabutz撰写的《 Threading Essentials微型课程》,以了解有关线程基础的更多信息。 20)为什么要在Java中覆盖哈希码以及equals()? (answer)提示:要符合均等和哈希码协定,如果您打算将对象存储到集合类(例如HashMapArrayList)中,这是必需的。 21) x2的负载系数是指? (答案)提示:触发HashMap调整大小的阈值通常为0.75,这意味着如果HashMap已满75%,则调整自身大小。 22)ArrayList和< x17>在Java中? (answer)提示:与数组和链接列表相同,一个允许随机搜索,而另一个则不允许。在链表上插入和删除都很容易,但是在数组上搜索很容易。请参阅 Java基础知识:集合有关Pluralsight的Richard Warburton课程,以了解有关Java中基本Collection数据结构的更多信息。 23)Java中CountDownLatchCyclicBarrier之间的区别? (answer)提示:您可以在屏障突破后重用CyclicBarrier,但是在计数达到零后就不能重用CountDownLatch

24)您何时在Java中使用Runnable vs Thread? (回答)提示:始终

25)Enum在Java中是类型安全的是什么意思? (答案)提示:这意味着您无法将不同Enum类型的实例分配给Enum变量。 例如 如果您有类似DayOfWeek day的变量,则不能从DayOfMonth enum为其分配值。

26)Integer的自动装箱在Java中如何工作? (answer)提示:使用valueOf()方法

27)Java中PATHClasspath之间的区别? (answer)提示:PATH由操作系统使用,而Classpath由JVM用于查找Java二进制文件,例如 JAR文件或类文件。 请参阅Java基础知识:核心平台,以了解有关PATHClasspath和其他Java环境变量的更多信息。

28)Java中方法重载和重写之间的区别? (answer)提示:覆盖发生在子类上,而重载发生在同一类上。 同样,覆盖是运行时活动,而重载在编译时得到解决。

29)如何防止某个类在Java中被子类化? (answer)提示:只需将其构造函数设为私有

30)您如何限制班级被客户使用? (答案)提示:将构造函数设为私有或抛出构造函数异常

31)Java中的StringBuilderStringBuffer之间的区别? (答案)提示:StringBuffer同步时,StringBuilder不同步。

32)Java中的多态和继承之间的区别? (answer)提示:继承允许代码重用并建立类之间的关系,这是提供动态行为的多态性所必需的。 请参阅Java基础知识:面向对象的设计,以了解有关OOP功能的更多信息。

33)我们可以在Java中覆盖静态方法吗? (answer)提示:否,因为覆盖在运行时解析,而静态方法调用在编译时解析。

34)我们可以使用Java访问私有方法吗? (回答)提示:是的,在同一个班级中,但不在班级外

35)Java中的接口和抽象类之间的区别? (答案)提示:从Java 8开始,区别变得模糊。 但是,Java类仍然可以实现多个接口,但只能扩展一个类。

36)Java中的DOM和SAX解析器之间的区别? (答案)提示:DOM将整个XML文件加载到内存中,而SAX则没有。 它是一个基于事件的解析器,可用于解析大文件,但是DOM速度很快,应该是小型文件的首选。

37)Java中throw和throws关键字之间的区别? (答案)提示:throws声明在发生错误的情况下方法可以抛出的异常,而throw关键字实际上是抛出异常。 请参阅Java基础知识:异常处理以了解有关Java中异常处理的更多信息。

38)Java中的故障安全迭代器和故障快速迭代器之间的区别? (答案)提示:故障安全保护不会在迭代时在基础集合上检测到外部变化时抛出ConcurrentModificationException,而fail-fast则抛出。

39)Java中的迭代器和枚举之间的区别? (答案)提示:"迭代器"还使您能够在迭代时删除元素,而"枚举"则不允许这样做。

40)Java中的IdentityHashMap是什么? (答案)提示:A Map,它使用==相等运算符而不是equals()方法来检查相等性。

41)Java中的String池是什么? (答案)提示:String个文字的集合。 记住,它已从JDK 7中的perm gen空间移到堆中。

42)Serializable类可以在Java中包含不可序列化的字段吗? (answer)

提示:是的,但是您需要使其为静态或瞬态。

43)Java中的this和super之间的区别? (答案)提示:这是指当前实例,而super是指超类的实例。 44)Java中ComparatorComparable之间的区别? (answer)提示:Comparator定义自定义顺序,而Comparable定义对象的自然顺序,例如 String的字母顺序。请参阅完整的Java MasterClass,以了解有关Java排序的更多信息。

45)Java中java.util.Datejava.sql.Date之间的区别? (答案)提示:前者包含日期和时间,而后者仅包含日期部分。

46)为什么在Java的Object类中声明了wait和notify方法? (answer)提示:因为它们需要锁定,该锁定仅适用于对象。

47)为什么Java不支持多重继承? (答案)提示:由于对C ++的不良体验,它不支持,但是对于Java 8,从某种意义上说,它不支持-Java现在仅支持Type的多个继承。

48)Java中已检查和未检查的异常之间的区别? (answer)提示:如果选中,则必须使用catch块处理异常;如果选中,则取决于您; 编译不会打扰您。

49)Java中错误和异常之间的区别? (答案)提示:我已经厌倦了打字,请检查答案

50)Java中竞争条件和死锁之间的区别? (答案)提示:两者都是在并发应用程序中发生的错误,一个是由于线程调度而发生的,而另一个是由于编码不正确而发生的。

其他资源

  • Java面试指南:200多个面试问题与解答

    Java面试指南:200多个面试问题与解答

    Spring Framework面试指南-200多个问题与解答

    准备面试作者:约翰·桑梅兹(John Sonmez)

    Markham公开的Java编程访谈

    破解编码面试-189个问题和答案

    求职面试的数据结构和算法分析

    最近5年130多个Java面试问题感谢阅读本文! 如果您喜欢这些Java核心问题,请与您的朋友和同事分享。 如果您有任何疑问或反馈,请在下面添加注释。