在这篇文章中,我试图包含最有趣和最常见的问题。 另外,我会给你正确的答案。
接下来我们就来看看这些问题。
1. 用 10 分的标准来评价自己——你的 Java 水平如何?
如果您不完全确定自己或自己对 Java 的熟练程度,这可能是一个棘手的问题。 如果是这种情况,您应该稍微降低您的评级。 之后,您可能会收到与您承认的水平相匹配的问题。 因此,如果你给自己打了满分,却无法回答一个有点困难的问题,这将对你不利。
2.解释Java 7和Java 8之间的区别。
老实说,两者之间存在很多差异。 如果你能列出最重要的,那就足够了。 您应该解释 Java 8 中的新增功能。有关完整列表,请访问官方网站:Java 8 JDK。
您应该了解以下关键点:
3.您知道哪些收藏类型?
以下是您应该了解的最重要的类型:
之后,您可能会被问到一些问题,例如何时应该使用这种特定类型、它比其他类型更好、它如何存储数据以及它背后的数据结构是什么。
最好的选择是尽可能多地了解这些集合类型,因为问题几乎是无穷无尽的。
4. 该类包含哪些方法?
这是一个非常常见的问题,用于确定您对基础知识的熟悉程度。 以下是每个对象都有的方法:
在 java.lang 包中,类位于类层次结构的顶部。 每个类都是某个类的直接或间接子类。 您使用或编写的每个类都会从该类继承实例方法。 您不需要使用任何这些方法,但如果您选择这样做,则可能需要使用特定于类的代码重写这些方法。 以下是从本节讨论的类继承的方法:
该类的 、 和 wait 方法都起到同步程序中独立运行的线程的活动的作用,这将在后面的课程中讨论,这里不再介绍。 有五种方法:
5. 为什么对象是不可变的?
字符串池是可能的,因为字符串在 Java 中是不可变的。 这样一来,Java运行环境就节省了大量的堆空间,因为不同的变量可以引用池中的同一个变量。 如果 () 不是不可变的,则它是不可能的,因为一旦任一变量更改了它所引用的对象的值,它也会反映在另一个变量中。
如果字符串不是不可变的,那么它可能会对应用程序构成严重的安全威胁。 例如,数据库用户名和密码都被传递以获取数据库连接,编程主机和端口信息也是如此。 由于字符串是不可变的,因此它们的值无法更改。 否则,任何黑客都可以篡改它所引用的值,这可能会导致应用程序中出现安全问题。
由于不可变,对于多线程来说是安全的,并且单个实例可以在不同线程之间共享。 这避免了使用同步来保证线程安全; 字符串是隐式线程安全的。
字符串用于 Java 类加载器,它们的不变性为类加载器加载正确的类提供了安全性。 否则,请考虑当您尝试加载 java.sql 时的危险情况。 class,您引用的值更改为 . 它可以对数据库做一些你不想要的事情。
由于它是不可变的,所以它的哈希码在创建时就被缓存起来,不需要再次计算。 这使其成为映射中键的理想对象,它的处理速度比其他键类型更快。 这就是为什么 是 中最常用的键类型。
为什么Java中的字符串是不可变的? 您可以查看下面的链接。
6.final、、、三者有什么区别?
这是我最喜欢的问题。
Final关键字在多个上下文中使用来定义只能分配一次的实体。
代码块是用于执行关闭连接、流等重要代码的代码块。无论是否处理异常,代码块都将始终被执行。 代码块紧跟在 try 代码块或 catch 代码块之后。
这是垃圾收集器在删除或销毁对象之前始终调用的方法,它使垃圾收集机制能够执行清理活动。
7.什么是钻石继承问题?
菱形继承问题反映了为什么我们不允许在Java中实现多重继承。 如果两个类共享具有特定方法的超类,则该方法将被两个子类覆盖。 那么,如果你决定同时继承两个子类,当你调用重写的方法时,编译器无法识别你要调用哪个子类方法。
我们将这个问题称为钻石继承问题。 它如上图所示,并由此得名。
8. 如何使一个类不可变?
我认为这是一个相当困难的问题。 您需要对该类进行一些修改才能实现不变性:
将类声明为final,这样就不能被继承。
所有字段都用 修饰,并且不允许直接访问。
不提供变量的方法。
所有变量字段都用final修饰,使其值只能被赋值一次。
通过构造函数执行深度克隆来初始化所有字段。
对方法获取的对象执行克隆,以返回副本而不是实际的对象引用。
9.什么是单例模式?
单例模式意味着一个类只允许创建其自身的一个实例,并提供对该实例的访问。 它包含静态变量,可以保存其自身的唯一和私有实例。 它用于用户希望将类的实例约束为对象的场景。 当需要单个对象来协调整个系统时,它会很有帮助。
10.什么是依赖注入?
这是您必须知道您使用的是 Java EE 还是框架的第一个问题。 你可以看看我的文章,它进一步解释了这一点:什么是依赖注入?
总结
在本文中,我们讨论了十大 Java 面试问题——根据我的经验,我认为这是当天最重要的问题。 如果你理解了这些问题,相信你在面试中能获得很大的优势。
【关于投稿】
如果您有原创好文章可以贡献,请直接给公众号留言。
①消息格式:
【提交】+“文章标题”+文章链接
② 示例:
【投稿】《别自称程序员,我十几年的IT职场总结》:
③最后请附上你的个人资料~