经常被问到的十个 Java 面试题?你Get了吗?

1. 以满分十分来评估自己——你有多擅长 Java?

如果你并不完全确信你自己或是你对 Java 的熟练程度,那么这会是一个非常棘手的问题。如果有这种情况,你应该把打分调低一点。之后,你大概会得到与你承认的水平相符的问题。因此,假如你给自己满分,却不能回答一个有点难的问题,那将会对你不利。

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

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

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

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

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

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

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

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

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

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

  • ArrayList

  • LinkedList

  • HashMap

  • HashSet

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

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

4. 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 类的 notifynotifyAll 和 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)

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

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

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

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

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

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

为什么 Java 中的字符串不可变?点击这里了解更多。

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

这是我最喜欢的问题。

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

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

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

7. 什么是菱形继承问题?

菱形继承问题反映了为什么在 Java 中我们不被允许实现多继承。如果有两个类共同继承一个有特定方法的超类,那么该方法会被两个子类重写。然后,如果你决定同时继承这两个子类,那么在你调用该重写方法时,编译器不能识别你要调用哪个子类的方法。

我们把这个问题称为 菱形继承问题 。上图对它作了说明,它也得名于此。

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

我认为这是一个相当困难的问题。您需要对类进行多次修改,以实现不可变性:

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

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

  3. 不提供变量的 setter 方法。

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

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

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

9. 什么是单例模式?

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

10. 什么是依赖注入?

这是你必须知道的首要问题, 无论你是使用 Java EE 还是 Spring 框架。你可以看看我的文章,其中进一步地解释了这一点: 什么是依赖注入?

为了让学习变得轻松、高效,今天给大家免费分享一套Java入门教学资源。帮助大家在成为Java架构师的道路上披荆斩棘。需要资料的欢迎加入学习交流群:9285,05736

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/503241.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java虚拟机JVM的内部体系结构

JVM(Java虚拟机)是一个抽象机器。 它是一个提供可以执行Java字节码的运行时环境的规范。JVM可用于许多硬件和软件平台(即JVM是平台相关的)。 什么是JVM? JVM(Java虚拟机)是: 指定Java虚拟机的工作的规范。 但实现提供程序是独立的选择算法。 其实现是由…

Java并发编程——volatile

1. 并发编程的两个关键问题 并发是让多个线程同时履行,若线程之间是独立的,那并发实现起来很简单,各自履行各自的就行;但常常多条线程之间需要同享数据,此时在并发编程进程中就不可避免要斟酌两个问题:通讯…

Java历经20年沧桑,将持续革新

对于企业界来说,很多服务器都部署着Java应用程序,许多物联网设备也都是基于Java技术开发。 20年前,Java为人们带来前所未有的科技理念:一次编写,到处运行。 在此之前,编程语言的种类寥寥无几,…

Java开发中定时器的使用

在JAVA中实现定时器功能要用的2个类是Timer,TimerTask Timer类是用来履行任务的类,它接受1个TimerTask做参数 Timer有两种履行任务的模式,最经常使用的是schedule,它可以以两种方式履行任务:1:在某个时间(Data),2:在某个固定的时间以后(int delay).这两种…

Java虚拟机组成详解

一、jvm的主要组成部分 类加载器(ClassLoader)运行时数据区(Runtime Data Area)执行引擎(Execution Engine)本地库接口(Native Interface) 接下来我们来看以上4个主要组成部分的用途…

取消android所有动画,android studio 取消BottomNavigationView的动画等

app:labelVisibilityMode"labeled"布局文件上添加上此句就可以让标签文字也显示出来了,但是缩放动画,还是会存在。那么回到初始化view的activity中BottomNavigationView navView findViewById(R.id.nav_view);//设置选中时的效果navView.setI…

android addtextchangedlistener参数,【Android】关于addTextChangedListener()方法的上机记录...

自己在学习控件的时候,学到关于EditText的addTextChangedListener()方法,想做一个类似发微博限制字数为140那样的功能,以此文记录上机过程中发现的一些问题。在做这个的时候,是第五节课视频刚提到addTextChangedListener()这个方法…

鸿蒙系统打通iOS,库克真的做到了!正式官宣确认截胡鸿蒙OS系统:软硬件生态全打通...

【4月25日讯】相信大家都知道,自从苹果正式举办完春季新品发布会以后,很多网友们都纷纷吐槽到“苹果的黑科技就是以换色为本,iPhone12推出紫色版本,而iMac也变成了彩虹色,很好的继承了诺基亚“科技以换壳为本”理念”&…

html标签中的文本框的值,HTML文本框的值分配给div标签的标题

线2:#msdhoni我want-什么,当用户输入一些东西在文本框(以行1)应该成为div的标题(在第2行)点击botton(在第1行)。其实想要用代码中的文本输入替换#msdhoni。jQuery代码我米使用:(请建议在这段代码的变化,使这成为可能)String.proto…

快速了解Java集合框架

1. 简介 JDK1.2 引入了 Java 集合框架,包含一组数据结构。与数组不同,这些数据结构的存储空间会随着元素添加动态增加。其中,一些支持添加重复元素另一些不支持,一些支持 null,一些能自动升序打印元素。 所有这些数据…

偷用计算机作文,偷玩电脑作文5篇

偷玩电脑作文5篇篇一:偷玩电脑的滋味星期天,我在家里看电视,妈妈很晚才回来,我只好在家等,看了一会,电视节目没了,我把电视关掉,看了会书消磨时间,我又写了会作业&#x…

钢铁厂计算机相关岗位需要倒班吗,钢铁厂工人倒班的三个阶段,请对号入座!...

原标题:钢铁厂工人倒班的三个阶段,请对号入座!刚开始钢铁厂倒班工作,感觉倒班好,夜班有啥,通宵可以感受夜的宁静,深夜闲暇之余还可以仰望星空,思考人生,白天自由时间多&a…

计算机文化基础B卷期末,《计算机文化基础》上机试卷B

课程代码: 座位号:新疆大学2008- 2009 学年度第一学期期末考试《计算机文化基础》上机试卷姓名: 学号: 专业:学院: 班级:2008年 12月注意事项:在试卷上必须注明学号、姓名否则成绩以“零”分计算完成以下各题后,将应用程序窗口最小…

win7查看 本地计算机策略,win7系统本地组策略编辑器打不开怎么办

本地组策略编辑器是win7系统的管理控制台,通过本地组策略编辑器可以禁止通过本地组策略、禁止对某些任务使用脚本等设置。有些win7 64位系统的用户发现,本地组组策略编辑器打不开了,这是怎么回事呢?会出现这种情况很有可能是控制台…

计算机打字测速,电脑的打字测速软件分享

对于电脑工作人员来说,打字是我们每天都会接触的,作为网站编辑来说,每天就是打字,打字,打字,因此,打字速度一定不能慢,不然就会大大的影响工作效率。下面是学习啦小编为大家整理的关…

2012服务器系统安装iis,Windows Server 2012服务器管理系统安装配置IIS8.5教程

IIS8.0是windows Server2012自带的服务器管理系统,和以往不同,IIS8.0安装和操作都比较简单,界面很简洁,安装也很迅速。今天我们重点完整的演示下windows server 2012上面配置IIS8.5的详细安装。windows server 2012上面配置IIS8.5…

Java9个异常处理的最佳实践

在本文中,作者介绍了9个处理异常的最佳方法与实践,以举例与代码展示结合的方式,让开发者更好的理解这9种方式,并指导读者在不同情况下选择不同的异常处理方式。 以下为译文: Java中的异常处理不是一个简单的话题。初学…

小白零基础怎么学习Java?不要慌

近年来,Java视频逐渐取代了“书籍”的作用,许多初学者已经将视频视为最重要的学习方式。然而,通过对java自学的长期观察和研究,我们发现书籍和视频都有自己的作用。阅读和观看视频对于Java学习者来说是不可或缺的。但是&#xff0…

服务器的虚拟内存怎么调,服务器的虚拟内存怎么调才好

服务器的虚拟内存怎么调才好 内容精选换一换华为云帮助中心,为用户提供产品简介、价格说明、购买指南、用户指南、API参考、最佳实践、常见问题、视频帮助等技术文档,帮助您快速上手使用华为云服务。开启弹性云服务器的虚拟内存后,会导致硬盘…

Java小白零基础学习如何突破自己的方法

有很多Java程序员在学习之初经常对如何学习感到困惑。本文将分析如何学习Java编程,并相信它可以帮助处于混乱状态的初学者。 I.培养兴趣 兴趣是可以让你继续前进的动力。如果你只是把这个程序写成谋生手段,那么你将会非常疲惫,更关心这个行…