java面试中经常被问到的问题有哪些?

2022-03-08  本文已影响0人  Java老白

想要找到一份好的工作,面试是少不了的,可能你觉得自己技术应该不错了,但是面试却是一团糟。下面我收集了八个常常被问到的Java面试题。

image-20220308170557037

1.阐述 Java 7 和 Java 8 的区别。

实话说,两者有很多不同。如果你能列出最重要的,应该就足够了。你应该解释 Java 8 中的新功能。想要获得完整清单,请访问官网:Java 8 JDK。

你应该知道以下几个重点:

lambda 表达式,Java 8 版本引入的一个新特性。lambda 表达式允许你将功能当作方法参数或将代码当作数据。lambda 表达式还能让你以更简洁的方式表示只有一个方法的接口 (称为函数式接口) 的实例。

方法引用,为已命名方法提供了易于阅读的 lambda 表达式。

默认方法,支持将新功能添加到类库中的接口,并确保与基于这些接口的旧版本的代码的二进制兼容性。

重复注解,支持在同一声明或类型上多次应用同一注解类型。

类型注解,支持在任何使用类型的地方应用注解,而不仅限于声明。此特性与可插入型系统一起使用时,可增强对代码的类型检查。

2.你了解哪些集合类型?

你应该知道以下几个最重要的类型:

ArrayList

LinkedList

HashMap

HashSet

之后,你可能会被问到这样一些问题,比如何时应该使用此种特定类型,它比其他的好在哪里,它是怎么存储数据的以及隐匿在其后的数据结构是什么。

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

3.Object 类包含哪些方法?

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

在 java.lang 包中,Object 类位于类层次结构的顶端。每个类都是 Object 类直接或间接的子类。你使用或编写的每个类都继承了 Object 类中的实例方法。你并不需要使用这些方法中的任何一种,但是,如果你选择这样做,则可能需要用你的类的特定代码来重写这些方法。以下是本节所讨论的从 Object 类中继承的方法:

protected Object clone throws CloneNotSupportedException 创建并返回此对象的副本。

public boolean equals(Object obj) 判断另一对象与此对象是否「相等」。

protected void finalize throws Throwable 当垃圾回收机制确定该对象不再被调用时,垃圾回收器会调用此方法。

public final Class getClass 返回此对象的运行时类。

public int hashCode 返回此对象的散列码值。

public String toString 返回此对象的字符串表示形式。

Object 类的 notify,notifyAll 和 wait 方法都在同步程序中独立运行线程的活动方面发挥了作用。

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)

4.为什么 String 对象是不可变的?

因为字符串在 Java 中是不可变的,由此 Java 运行时环境节省了大量堆空间,因为不同的 String 变量可以引用池中的同一 String 变量。如果 String 不是不可变的, 则字符串驻留(String interning)将是不可能的,因为一旦任一变量更改所引用的String对象的值,它也会反映在其他变量中。

如果字符串不是不可变的,那么它可能会对应用程序造成严重的安全威胁。例如,数据库用户名和密码都作为 String 传递以获取数据库连接,Socket 编程的主机和端口信息也是如此。由于字符串是不可变的,因此其值不能被更改。否则,任何黑客都可以篡改其引用的值,这会导致应用程序中的安全问题。

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

字符串被用在 Java 类加载器中,其不可变性为类加载器加载正确的类提供了安全性。否则的话,请考虑这样一个危险的情况,在你尝试加载 java.sql.Connection 类时,你引用的值却被更改为 myhacked.Connection,并且它能对数据库执行你不需要的操作。

由于 String 是不可变的,因此在它被创建时其散列码就被缓存,不需要再次计算。这使得它成为映射中键的理想对象,它的处理速度比其他HashMap 键类型快。这就是为什么 String 是 HashMap 中最常用的键类型。

5.final,finally,和 finalize 三者之间有什么不同?

final 关键字用于在多个语境下定义只能分配一次的实体。

finally 代码块是用于执行重要代码 (如关闭连接、流等) 的代码块。无论是否处理异常,finally 代码块总会被执行。finally 代码块紧随 try 代码块或 catch 代码块。

finalize 是在删除或销毁对象之前垃圾回收器总会调用的方法,该方法使得垃圾回收机制能够执行清理活动。

6.如何使一个类不可变?

将类声明为 final,使其无法被继承。

所有域都用 private 修饰,不允许直接访问。

不提供变量的 setter 方法。

所有可变域都用 final 修饰, 使它的值只能分配一次。

通过构造函数执行深克隆初始化所有域。

对 getter 方法获取的对象执行克隆以返回副本,而不是返回实际的对象引用。

7.什么是单例模式?

单例模式是指一个类仅允许创建其自身的一个实例,并提供对该实例的访问权限。它包含静态变量,可以容纳其自身的唯一和私有实例。它被应用于这种场景——用户希望类的实例被约束为一个对象。在需要单个对象来协调整个系统时,它会很有帮助。

8.什么是依赖注入?

依赖注入是spring框架中的解耦的一种策略,称为DI,主要有set方式(提供set和get方法)和constractor(构造方法)方式,它使得类与类之间以配置文件的形式组织在一起,而不是硬编码的方式

以上就是常见的八个Java面试题,如果你了解这些问题,我相信你能在面试中获得很大的优势,即使这次面试没有被问到,很可能下次的面试中就会被问到了哦。

分享5套Java面试必备文档PDF,看完之后直接给跪了..

包括:Java中高级核心知识全面解析、25大专题Java面试题手册、Java面经、新高并发宝典、Spring全家桶。

反正我已经找到了心仪的工作。也不藏着掖着了,拿出来免费分享给大家,大家可以选择自己需要的领取。

下列文档资料,点击此处免费下载

1、Java中高级核心知识全面解析

GitHub 上标星 120k的《Java中高级核心知识全面解析》(524页)。主要包括 Java 基础、Java 容器、Java 并发、Java 虚拟机和 Java IO。另外还附带网络、linux、数据结构与算法、数据库、系统设计、必会工具、面试指南等内容。

img img

2、25大专题Java面试题手册

史上最全Java面试题。包括JavaOOP、多线程&并发、JVM、Spring、Mysql、Dubbo、数据结构、算法、微服务等等.....它将是你冲击互联网大厂的利器。

img img

3、Java面经

圈内疯狂转发的面经。朴实无华全是干货,程序员面试竞争压力大,多看多学,知道面试官要问什么很关键,这样有很大概率在千千万万的面试者中脱颖而出。

本文中PDF文档,点击此处免费下载

img img

4、新高并发宝典

这份《新高并发宝典》层层深入,形成了一个很好的知识系统,让你在应对面试官的时候完全不慌,所以今天我们就一起来学习一下阿里的高并发架构吧。

img img

5、Spring全家桶

SpringBoot,SpringCloud,SpringSecurity 啥的都成了我们 Java 程序员必须要掌握的技能;每次面试也都是必问。阿里最近也是推出了 Spring 一系列的全彩版学习笔记,作为一名宠粉的巨佬博主,我一拿到手就来直接分享给大家了~

img img

这次的分享方方面面都为大家整理到位了,用心学习,相信一定可以冲击大厂!!!

本文中PDF文档,点击此处免费下载

上一篇下一篇

猜你喜欢

热点阅读