Java面试问题清单
未来几天有计划的面试吗?本指南包含100多个Java面试问题,将帮助您针对经验丰富的开发人员以及从小型创业公司到大型公司的大多数Java核心面试问题进行修订。
从这些基本的Java基本问题开始。我写这些教程是为了帮助您回答您可能会遇到的一些难题。我试图在每个答案后面尽可能多地推理。尽管如此,仍无法在本指南中包含所有可能的问题,因此我在本访谈指南的末尾提供了一些很好的资源。
1.核心Java面试问题
1.1 核心Java面试问题系列
通常,每个访问员都将先从Java核心概念入手,然后再跳到更高级的主题。原因很简单,他想放松您并使您感到舒适。
这些问题的范围可能从简单的面向对象原理到最常用的Java类(例如String
或)HashMap
。我说的是简单的问题,因为它们测试了您的基础,基础知识以及对细节的好奇心。尝试回答所有此类问题。它们是低挂的水果,您不应该错过。
该系列分为3部分。这些问题将帮助您在很短的时间内快速修订最常见的核心Java问题。开始准备下一次面试的最佳方法。
1.2 对象初始化最佳实践
在Java中,对象初始化被认为是一个繁重的过程,您应该了解每个新创建的对象如何影响内存和应用程序性能。一个简单的例子是Java包装器类,它从外部看起来很简单,就像基元一样,但是它们并不像看起来那样简单。学习Java如何帮助您与包装类,如内物体的内部缓存Double
,Long
或Integer
。
1.3 HashMap如何在Java中工作
HashMap
如果您是参加任何初级或中级面试,则这可能是讨论最多且最具争议的话题。HashMap
如果您知道hashmap在内部是如何工作的,那么您可以面对任何与相关的面试问题。这篇文章将帮助您回答一些很好的问题,例如–
- HashMap如何存储键值对?
- HashMap如何解决冲突?
- HashMap中如何使用hashCode()和equals()方法?
- 密钥的随机/固定hashCode()值的影响?
- 在多线程环境中使用HashMap?
1.4 为HashMap设计好密钥
所以您现在知道如何HashMap
工作吗?现在,学习有关为设计一个好的密钥的知识HashMap
。这是测试您是否正确理解HashMap内部工作的一种好方法。这将帮助您回答以下问题:
- 为什么
String
HashMap是一个好钥匙? - 您将如何设计一个用作键的类?
- 您将重写Key类中的hashCode()方法吗?有什么影响?
- 为可以作为HashMap关键对象的类编写语法?
1.5 关于ConcurrentHashMap的问题
HashMap不是线程安全的。我们可以在并发应用程序中使用HashTable,但这会影响应用程序的性能。所以我们有ConcurrentHashMap
。它是并发版本,HashMap
其性能与HashMap相同,并且同时也是线程安全的。
您应该更加了解ConcurrentHashMap。仅此一个类就有很多概念。这也是准备下一次面试时要学习的另一个好话题。
1.6 Java Collections面试问题
我是否应该建议您准备Collection框架及其所有主要类?我想你已经足够聪明了。
如果没有任何与馆藏框架有关的问题,则任何面试(初中和中级)都将是不完整的。它真正测试您的编程技能和对核心Java API的了解。问题可能像集合层次结构一样简单,而困难的问题例如队列和堆栈。这是此类常见收藏采访问题的列表–
- 解释馆藏层次?
- 集和列表之间的区别?
- Vector和ArrayList之间的区别?
- HashMap和HashTable之间的区别?
- Iterator和ListIterator之间的区别?
- 为什么Map接口没有扩展Collection接口?
- 如何将String数组转换为ArrayList?
- 如何扭转名单?
- HashSet如何存储元素?
- 是否可以将null元素添加到TreeSet或HashSet中?
- 什么是IdentityHashMap和WeakHashMap?
- 什么时候使用HashMap或TreeMap?
- 如何使收藏集只读?
- 如何使收集线程安全?
- 故障快速和故障安全之间有什么区别?
- 什么是可比和比较器界面?
- 什么是Collections和Arrays类?
- 什么是队列和堆栈?列出他们的差异?
1.7 Java中的多态是什么?
简而言之,多态就是我们可以创建在不同程序环境下表现不同的函数或引用变量的能力。与继承,抽象和封装一样,多态是面向对象编程的主要构建块之一。
通过示例更详细地了解该概念。这非常重要。
1.8 Java中的抽象是什么?
在上一个问题中,您学习了多态。现在是时候通过理解抽象来扩展您的知识了。任何Java面试的话题都非常复杂。
1.9 抽象还是封装?
了解抽象和封装之间的区别是深入理解这两个概念的关键。您不能孤立地学习两者。它们采用Java编写,因此必须加以集体理解。
在这篇文章中,我解释了封装并通过抽象来区分它。在继续之前,必须阅读Java面试问题。
1.10 接口和抽象类之间的区别?
自从Java语言诞生以来,就已经有非常清晰的分离抽象类和接口。但是自从Java 8发行到市场以来,发生了很多变化。它的核心概念之一是功能接口。
Functional接口完全改变了我们看待Java语言的两个基本构建块的方式。如果您的简历说您使用Java 8,就不能跳过这个问题。在链接的教程中,我将向您显示正确的场景,这将帮助您解决一些复杂的面试问题和案例研究。
1.11 枚举面试题
枚举已成为核心构件很长时间了。在大多数流行的Java库中都可以看到它们。它们帮助您以更加面向对象的方式管理常量。它们看起来非常简单,但是如果您深入研究,它们会隐藏很多复杂性。一些枚举问题可能是–
- 枚举与枚举类之间的区别?
- 枚举可以与String一起使用吗?
- 我们可以扩展枚举吗?
- 写枚举的语法?
- 如何在枚举中实现反向查找?
- 什么是EnumMap和EnumSet?
1.12 Java序列化和可序列化接口
如果您准备接受电信公司或在其应用程序流中使用序列化的任何此类域的Java采访,那么您将从本教程中受益匪浅。用Java中的序列化做和不做的很好的清单。可能的问题可能包括–
- 什么是serialVersionUID?
- 什么是readObject和writeObject?
- ow,您将序列化和反序列化一个类吗?
- 您将如何对类进行更改,以使序列化不中断?
- 我们可以序列化静态字段吗?
1.13 Java main方法
有没有想过为什么main()
公开,静态和无效?在Java面试中,这不是一个经常问到的面试问题,但我仍然建议您阅读这篇文章来回答以下问题:
- Java主要方法语法?
- 为什么主要方法是公开的?
- 为什么主要方法是静态的?
- 为什么主要方法无效?
- 当您调用main方法时,内部会发生什么?
1.14 Java对象克隆
用Java 克隆对象不是一个容易的概念。我自己花了很长时间了解Java的克隆。看起来真的很简单;使用Cloneable
接口和重写clone()
方法。可是等等; 在面试中还有很多要说的和要问的。例如
- clone()方法如何工作?
- Java中的浅表复制是什么?
- 什么是复制构造函数?
- Java中的深层复制是什么?
- 创建对象深层副本的不同方法?
1.15 什么是CountDownLatch?
从Java 5开始,java.uti.concurrent
程序包具有许多有用的但很复杂的类来在并发应用程序上工作。CountDownLatch
是所有Java面试大公司中要求很高的类之一。在本教程中,CountDownLatch
将通过示例和相关概念进行解释。
1.16 为什么字符串是不可变的?
这个问题是初学者中非常受欢迎的面试问题。基本上,面试官测试您对String类,字符串池,内存区域和对象创建的了解。
我分开写这篇文章是因为这个概念非常重要。实际上,不变性本身是Java中非常重要的概念。感受冰山一角。
1.17 如何使Java类不可变?
不变类是一种一旦创建便无法更改其状态的类。有一些准则可以创建Java中不变的类,您必须知道它们才能正确回答此问题。
请注意,不变性在许多设计方面都很重要,并且是所有Java专家推荐的设计模式。了解如何使Java类不可变,如何使Java类受益于应用程序设计,并准备在其上遇到更多软件设计面试问题。
2. Java并发面试问题
2.1 什么是线程安全?
定义线程安全性出奇的棘手。线程安全性的任何合理定义的核心是正确性的概念。因此,在了解线程安全性之前,我们应该首先了解这种“正确性”。
在此必读的Java教程中,清除您的疑问并准备回答一些流行的面试问题。例如
- 线程安全的正确性是什么?
- 举个线程安全类的例子吗?
- 您将如何设计线程安全的Java类?
- 不变类线程安全吗?
2.2 对象级别锁定与类级别锁定
并发的核心是对象锁定的概念。锁定发生在实例级别以及类级别。
- 当您要同步非静态方法或非静态代码块时,只有一个线程将能够在给定的类实例上执行代码块,因此对象级锁定是一种机制。为了确保实例级数据线程安全,应始终这样做。
- 类级别锁定可防止多个线程在运行时在所有可用实例中的任何一个中进入同步块。这意味着,如果在运行时有100个实例
DemoClass
,则一次只能demoMethod()
在一个实例中执行一个线程,而所有其他实例将被其他线程锁定。为了确保静态数据线程的安全,应该始终这样做。
在本教程中详细了解整个概念。
2.3 “可运行的实现”和“扩展线程”之间的区别?
这也是一个非常受欢迎的面试问题。如果您的角色要求为并发应用程序创建设计,那么您必须知道此问题的正确答案。这个问题的答案决定了您在两者之间选择哪种结构。
此外,它将帮助您回答一些基本问题,例如–
- 线程和可运行之间的区别?
- 编写Java代码以使用Runnable接口创建线程?
- 两者之间应首选哪种方法?
2.4 比较和交换[CAS]算法
此问题针对中级或高级开发人员。在回答这个问题之前,这需要对其他并发概念有深刻的理解。因此,这是测试Java并发知识的好方法。
- 什么是乐观锁定和悲观锁定?
- 什么是比较和交换算法?
- 什么是原子操作?
- AtomicInteger和AtomicLong如何工作?
2.5 什么是Fork / Join框架?
自Java 8发行以来,这不是一个新概念,但现在已以多种方式使用。Fork-Join将手头的任务分解为多个微型任务,直到该微型任务足够简单,可以解决而无需进一步拆分。这就像分而治之的算法。在此框架中要注意的一个重要概念是,理想情况下,没有工作线程处于空闲状态。他们实现了一种工作窃取算法,即闲置的工人从忙碌的工人那里窃取了工作。
学习这个精巧而高效的算法,以更好地为您的下一次面试做准备。
2.6 什么是ThreadPoolExecutor?
在并发Java应用程序中,创建线程是一项昂贵的操作。而且,如果您每次都开始创建新的线程实例来执行任务,则应用程序性能肯定会降低。ThreadPoolExecutor解决了此问题。
ThreadPoolExecutor将任务创建和执行分开。使用ThreadPoolExecutor,您仅需实现Runnable对象并将其发送给执行程序。它负责它们的执行,实例化以及使用必要的线程运行。
阅读ThreadPoolExecutor如何解决各种问题以及如何与BlockingQueue一起使用。
2.7 Java执行程序框架教程和最佳实践
您将在上一个链接中学习执行器,但是要在性能方面有效地使用这些执行器,您需要了解某些事情。
2.8 如何用Java编写死锁并解决
它可能以难题的形式出现。最好为此做好准备。面试官可能测试并发的知识和你的深刻理解wait()
和notify()
方法调用。
用指尖准备一个死锁源代码示例。您将需要它。
在出现任何Java采访之前,必须阅读以上给出的问题。但是,它们仍无法提供完整的覆盖范围。您需要了解的越来越多,才能在面试中表现更好。我建议您按照给定的顺序阅读以下各节中的更多主题。
3.有经验的开发人员的Java面试问题
3.1 最佳做法指南
强烈推荐的最佳做法列表。他们会打开您的思路,朝着不同的方向思考。简而言之,它们将为您的下一次Java面试提供帮助。
3.2 解决一些难题
解决这些难题并在它们周围玩耍。您永远都不知道在糟糕的一天会遇到什么。
3.3 刷设计模式
为了在您的下一次Java面试中获得更高的职位,您必须知道这些设计模式可以处理一些复杂的应用程序设计问题,这些问题通常在当今的所有面试中都有讨论。
3.4 随机浏览核心Java主题
仍然有实力阅读更多。在此处浏览更多Java面试问题。
4.Spring面试题
4.1 Spring核心面试题
我已经尝试收集一些春季热门核心面试问题,您将在下次技术面试中面对这些问题,例如
- 什么是控制反转(IoC)和依赖注入(DI)?
- BeanFactory和ApplicationContext之间的区别?
- 什么是基于Spring Java的配置?
- 解释Spring Bean的生命周期?
- Spring Bean范围有哪些不同?
- 在Spring Framework中,Singleton bean线程安全吗?
- 解释Bean自动装配的不同模式?
- 用示例解释@Qualifier注释?
- 构造函数注入和setter注入之间的区别?
- 列举一下Spring框架中使用的一些设计模式吗?
4.2 Spring AOP面试问题
Spring AOP(面向方面的编程)在某种意义上补充了OOP,因为它还提供了模块化功能。在OOP中,关键单位是“对象”,而在AOP中,关键单位是方面或横切关注点,例如日志记录和安全性。AOP提供了使用简单的可插入配置在实际逻辑之前,之后或周围动态添加横切关注点的方法
通过这些最常见的AOP面试问题-
- 关注点和跨领域关注点之间的区别?
- 有哪些可用的AOP实现?
- 春季AOP中有哪些不同的建议类型?
- 什么是Spring AOP代理?
- 什么是连接点和切入点?
- 什么是纵横编织?
4.3 Spring MVC面试问题
这些Spring MVC面试问题和答案已被编写,可帮助您为面试做准备,并快速地对总体概念进行修订。如果有多余的时间,我强烈建议您深入了解每个概念。通常,您应该能够回答以下问题-
- 什么是MVC架构?
- 什么是DispatcherServlet和ContextLoaderListener?
- 如何使用基于Java的配置?
- 我们如何使用Spring创建返回JSON响应的Restful Web Service?
- <context:annotation-config>与<context:component-scan>之间的区别?
- @ Component,@ Controller,@ Repository和@Service批注之间的区别?
- Spring MVC如何提供验证支持?
- 什么是Spring MVC拦截器以及如何使用?
- 如何在Spring MVC Framework中处理异常?
- 如何在Spring MVC应用程序中实现本地化?
5.测试您的知识
5.1 针对Oracle企业管理器项目的真正Java面试问题
到目前为止,您已经学习了Java中的所有不同概念,这些概念可以通过面试问题的形式出现在您面前。现在该看看您是否准备好了。在接受Oracle Corporation采访时,请回答Sreenath Ravva提出的一些实际问题。
- 您可以开始讲述自己和您的项目吗?
- 什么是Java中的抽象和封装?
- 方法重载规则?
- Java的扩大和缩小?
- 我可以只尝试代码块吗?
- 线程:生产者和消费者有问题吗?
- 为什么在Object类中定义了wait(),notify()和notifyAll()?
- 我们可以覆盖wait()或notify()方法吗?
- wait(),sleep()和yield()之间的区别?
- 解释一下线程类中的join()方法?
- 您是否遇到了内存不足错误?如果是,您如何解决?告诉不同的情况为什么会这样?
- 数据库连接泄漏?
- 编写程序以使用第三个变量交换两个数字?
- 编写程序对数组进行排序并删除重复项?
- 在Singleton上编写程序?
- 写一个程序合并两个数组?
- final和final关键字有什么用?
- 我可以将类声明为静态还是私有的吗?
- 为什么要更改公司?
5.2 中级开发人员的Java面试问题
Nikhil在Java / j2ee开发人员方面有6年的经验,他正计划改变公司。我向他提出了这些中级面试问题。
他的面试很成功。您也可以从中受益。
6.推荐书籍
6.1 Java拼图
每种编程语言都有其怪癖。本书通过编程难题揭示了Java编程语言的奇特之处。
6.2 实践中的Java并发
实践中的Java并发为您提供了为当今和未来的系统编写安全且可扩展的Java程序所需的概念和技术。
6.3 Joshua Bloch撰写的《EffectiveJava》
《Effective Java,Second Edition》汇集了七十八个不可或缺的程序员经验法则:针对您每天遇到的编程难题提供的最佳实践解决方案。
- 本文标签: 其他
- 本文链接: https://www.v8en.com/article/263
- 版权声明: 本文由SIMON原创发布,转载请遵循《署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)》许可协议授权