核心 Java 面试问题:第二部分

一则或许对你有用的小广告

欢迎加入小哈的星球 ,你将获得:专属的项目实战 / Java 学习路线 / 一对一提问 / 学习打卡/ 赠书活动

目前,正在 星球 内带小伙伴们做第一个项目:全栈前后端分离博客项目,采用技术栈 Spring Boot + Mybatis Plus + Vue 3.x + Vite 4手把手,前端 + 后端全栈开发,从 0 到 1 讲解每个功能点开发步骤,1v1 答疑,陪伴式直到项目上线,目前已更新了 204 小节,累计 32w+ 字,讲解图:1416 张,还在持续爆肝中,后续还会上新更多项目,目标是将 Java 领域典型的项目都整上,如秒杀系统、在线商城、IM 即时通讯、权限管理等等,已有 870+ 小伙伴加入,欢迎点击围观

游戏名称是Java核心面试题,我做你的出题大师。每周我都会发布 10 个新的快速问答。如果您有任何问题想要提出建议,请给我发送电子邮件至 hello@corejavainterviewquestions.com

1. 什么是关闭钩子?

关闭挂钩允许您在 JVM 关闭时启动和运行线程。


 Runtime.getRuntime().addShutdownHook(new Thread() {

});

您可能出于多种原因想要使用一个,例如停止接受新客户端或正确关闭连接。不能依赖它来执行,例如如果有 kill -9 之类的强制关闭。

2. 命名变量有什么规则?

变量必须以字母、$(美元符号)或 _(下划线)开头。因此,变量不能以数字开头,但后续字符可以包含数字。

3、Java支持goto吗?

goto 是 java 中的保留关键字,但它被标记为未使用。因此,您不能直接在 java 中执行 goto 语句。

4. hashcode和equals之间的契约是什么?

两个相等的对象必须具有相同的哈希码。具有相同哈希码的两个对象可能相等也可能不相等。


 Runtime.getRuntime().addShutdownHook(new Thread() {

});

实际上,这意味着当您覆盖一个时,您应该覆盖另一个。

5. 你能覆盖静态方法吗?

不。静态方法属于类本身,而不属于对象实例。

6. 当我们说 java 支持协变返回类型时,我们是什么意思

当实现/覆盖一个方法时,我们可以返回一个类,它是原始返回类型的 子类型 。例如,父类返回一辆汽车,覆盖类返回一辆特斯拉就可以了。


 Runtime.getRuntime().addShutdownHook(new Thread() {

});

自 Java 5 以来就是这种情况。

7、final、finally、finalize有什么区别?

final 是一个关键字,可用于类、方法或变量,表示该值不能更改或覆盖。 finally 在 try catch 块的末尾执行,并保证在正常情况下执行。 finalize 是在对象被垃圾回收时调用的方法。无法保证它会被执行,因此最好不要依赖它。

8、HashMap和HashTable有什么区别?

HashTable 是同步的,不允许空值。 HashMap 未同步,将允许 1 个空键和所有空值。现在通常不鼓励使用 HashTable,Collections.synchronizedMap(Map) 和 ConcurrentHashMap 是首选。

9. Collections.synchronizedMap 和 ConcurrentHashMap 有什么区别?

ConcurrentHashMap 的性能明显更高,并允许从多个线程并行访问读取和写入。但是,它不保证迭代器会或不会包含迭代期间所做的更新。因此,线程有可能具有过时的视图。 Collections.synchronizedMap 锁定整个映射以进行读写,因此性能不佳但保证了安全性和数据可见性。 ConcurrentHashMap 也不允许空键或空值。

10. 什么是浅拷贝和深拷贝?

浅拷贝将保留所有与原始对象相同的引用。例如,如果一个 Person 对象引用了一辆 Car,我们称它为 Car A,然后我们对 Person 进行浅拷贝,那么新的 Person 将指向 Car A。如果我们进行深拷贝,我们将导航整个从那个人的对象图并复制每个其他对象。在这种情况下,我们将制作一份汽车 A 的副本以属于我们的新人。