我最近遇到的十大Java面试问题


1.以10的等级进行自我评估—您在Java中的表现如何?

如果您不确定自己或对Java的熟练程度,这将是一个非常棘手的问题。如果听起来很熟悉,则应该降低一些。在此之后,您可能会根据所接受的级别获得问题。因此,例如,如果您说10,而不能回答一个相当困难的问题,那将是一个缺点。

2.解释Java 7和8之间的区别。

老实说,有很多差异。在这里,如果您可以列出最重要的那些,就足够了。您应该解释Java 8的新功能。有关完整列表,请访问原始网站:Java 8 JDK。

您应该知道的最重要的是:

  • 此版本中引入了Lambda表达式(一种新的语言功能)。Lambda表达式使您可以将功能视为方法参数或将代码视为数据。Lambda表达式使您可以更紧凑地表示单方法接口(称为功能接口)的实例。
  • 方法引用为已经具有名称的方法提供了易于阅读的lambda表达式。
  • 默认方法允许将新功能添加到库的接口,并确保与为这些接口的较早版本编写的代码二进制兼容。
  • 重复注释提供了将同一注释类型多次应用于同一声明或类型使用的能力。
  • 类型注释提供了将注释应用到使用类型的任何地方的能力,而不仅仅是在声明上。与可插拔类型系统一起使用时,此功能可改进代码的类型检查。

3.您知道哪种类型的馆藏?

在这里您应该了解最重要的一些:

  • ArrayList
    • LinkedList
  • HashMap
    • HashSet

之后,您可能会遇到以下问题:何时应使用此特定工具,相对于其他工具有什么好处,如何存储数据以及幕后工作的数据结构。

在这里,最好的方法是尽可能多地了解这些收集类型,因为各种问题几乎是无穷无尽的。

4.对象类有哪些方法?

这是一个非常常见的问题,用于确定您对基础知识的熟悉程度。这些是每个对象都具有的方法:

该Object班,在java.lang包装,坐镇类层次结构树的顶端。每个类都是该类的直接或间接后代Object。您使用或编写的每个类都继承的实例方法Object。您不需要使用任何这些方法,但是,如果您选择使用这些方法,则可能需要使用特定于您的类的代码覆盖它们。Object本节将讨论从中继承的方法:

  • protected Object clone() throws CloneNotSupportedException 创建并返回此对象的副本。
  • public boolean equals(Object obj) 指示其他某个对象是否与此对象“相等”。
  • protected void finalize() throws Throwable 当garbagecollection 确定不再有对该对象的引用时,由垃圾收集器在对象上调用 。
  • public final Class getClass()
  • 返回对象的运行时类。
  • public int hashCode()
  • 返回对象的哈希码值。
  • public String toString()
  • 返回对象的字符串表示形式。

notify,notifyAll和wait方法Object都在一个程序,它在后面的课程中讨论,并不会在这里介绍的同步独立运行的线程的活动中发挥作用。这些方法有五种:

  • public final void notify()
  • public final void notifyAll()
  • public final void wait()
  • public final void wait(long timeout)
  • public final void wait(long timeout, int nanos)

5.为什么 字符串对象在Java中是不可变的? 1.字符串池是唯一可能的,因为在Java中String是不可变的。这样,Java运行时可以节省大量Java堆空间,因为不同的String变量可以引用池中的相同String变量。如果String是不可变的,那么将不可能进行String实习,因为如果有任何变量更改了值,则它将反映在其他变量中。

2.如果String不可更改,那么它将对应用程序造成严重的安全威胁。例如,数据库用户名和密码作为String传递,以获取数据库连接,套接字编程主机和端口详细信息作为String传递。由于String是不可变的,因此其值无法更改。否则,任何黑客都可能更改参考值,从而导致应用程序中的安全问题。

3.由于String是不可变的,因此对于多线程是安全的,并且可以在不同线程之间共享单个String实例。这避免了为了线程安全而使用同步。字符串是隐式线程安全的。

  1. Java类加载器中使用了字符串,并且不变性提供了安全性,以确保 Java语言正确加载了正确的类 Classloader。例如,考虑一个实例,您尝试在其中加载 java.sql.Connection 类,但引用的值已更改为 myhacked.Connection class,并且可能会对数据库造成不良影响。

5.由于String是不可变的,因此其哈希码将在创建时进行缓存,因此无需再次计算。这使其成为地图中某个键的理想候选者,并且其处理速度比其他HashMap 键对象快 。这就是为什么String是HashMap 键的最常用的对象 。

为什么在Java中String是不可变的? 点击这里了解更多。

6. Final,Final和Finalize有什么区别?

这个问题是我最喜欢的一个。

最终关键字将在若干情况下使用,以限定只能一次被分配的实体。 Java finally 块是用于执行重要代码(如关闭连接,流等)的finally 块。无论是否处理异常,Java 块始终执行。Java finally 块位于 try 或 catch 块之后。 这是一种始终在删除/销毁对象之前调用的方法,该 对象适合垃圾回收执行清理活动。GarbageCollector 7.什么是diamond问题?

菱形问题反映了为什么我们不允许在Java中进行多重继承。如果有两个类具有使用特定方法共享的超类,则在两个子类中都将其覆盖。然后,如果您决定从这两个继承 subClasses ,则如果您想调用该方法,则该语言将无法决定您要调用哪个方法。

diamond-problem-multiple-inheritance.png

我们把这个问题称为diamond问题。它从上面的图片中获得名称,该图片描述了警告。

8.您如何 使一个类不可变? 我认为这是一个非常困难的问题。您需要对类进行一些修改以实现不变性:

将课程声明为最终课程,因此无法扩展。 将所有字段设为私有,以便不允许直接访问。 不提供变量的设置方法 将所有可变字段定为最终值,使其值只能分配一次。 通过执行深度复制的构造函数初始化所有字段。 在getter方法中执行对象的克隆以返回副本,而不是返回实际的对象引用。

9. Singleton是什么意思?

单例是仅允许创建其自身的单个实例并提供对该创建的实例的访问权的类。它包含静态变量,可以容纳其自身的唯一实例和私有实例。当用户希望将类的实例化限制为仅一个对象时,可以使用它。通常在需要单个对象来协调整个系统中的动作时,这很有用。

10.什么是依赖注入? 如果您使用Java EE或Spring,这是您必须知道的头号问题。您可以在这里查看我的文章进一步解释这一点: 什么是依赖注入?

概括 在本文中,我们讨论了Java面试的十大问题,根据我的经验,这是当今最重要的问题。如果您知道这些,我相信您在招聘过程中将拥有很大的优势。

希望我能为您服务!如果您在此主题上有类似的经验,或者您有一些成功的故事,请随时在下面的评论中分享。


原文链接:http://codingdict.com