超过20个Java面试问题

毫无疑问,Java是获得丰厚利润的主要编程选择之一。 毕竟,基于类的通用,面向对象的编程语言是世界上使用最广泛的编程语言之一。

具有许多强大的功能,编程语言不仅是经验丰富的专家的首选,而且是编程领域的新手所追求的。 因此,这里有28个重要的面试问题,它们将帮助您完成Java工作,或者至少提高您的学习水平。

问:如何区分HashMap和HashTable? A: HashMap in Java is a Map-based collection class, used for storing key & value pairs. It is denoted as:

HashMap或HashMap

HashTable是一个列表数组,其中每个列表称为存储桶。 HashTable中包含的值是唯一的,并且取决于键。

方法在HashMap中不同步,而关键方法在HashTable中同步。 但是,HashMap没有线程安全性,而HashTable具有相同的线程安全性。 对于迭代值,HashMap使用迭代器,而HashTable使用枚举器。

HashTable不允许任何为空的内容,而HashMap则允许一个空键和多个空值。 在性能方面,HashTable较慢。 相对而言,HashMap更快。

问:Java中的集合是什么意思? Java中Collections的组成是什么? A:Java中的一组对象称为集合。 Java.util包包含日期和时间功能,国际化,旧版收集类等,以及用于收集的各种类和接口。

或者,可以将集合视为设计用于存储对象和操纵对象存储在其中的设计的框架。 您可以使用集合对对象执行以下操作:

1.删​​除 2.插入 3,操纵 4.搜索 5,排序

以下是集合框架的各个组成部分:

班级–数组列表,链接列表,列表和向量 介面–集合,列表,地图,队列,集合,排序的地图和排序的集合 地图– HashMap,HashTable,LinkedHashMap和TreeMap Queue列–优先队列 套装–哈希集,链接哈希集和树集

问:请在Java中解释Map及其类型。 A:Java Map是一个将键映射到值的对象。 它不能包含重复的键,并且每个键只能映射到一个值。 为了确定两个键是相同还是不同,Map使用了equals()方法。 Java中有4种类型的Map,如下所述:

哈希图 - It is an unordered and unsorted map and hence, is a good choice when there is no emphasis on the order. A 哈希图 allows one null key and multiple null values, and doesn’t maintain any insertion order. 哈希表–不允许为空并且具有同步的方法。 由于它允许线程安全,因此性能很慢。 Linked哈希图 – Slower than a 哈希图 but maintains insertion order and has a faster iteration. 树状图–排序图,它支持使用构造函数构造排序顺序。

问:Java中的优先级队列是什么意思? A:与常规队列一样,优先级队列是一种抽象数据类型,不同之处在于优先级队列与它所包含的每个元素相关联。 在优先级队列中,高优先级的元素在低优先级的元素之前得到服务。

优先队列中的元素根据比较器或自然排序。 优先级队列中元素的顺序代表它们的相对优先级。

问:Abstract类与Interface有何不同? A:Java中的Abstract类和Interface之间有几个区别,总结如下:

组成部分–抽象类包含实例变量,而接口只能包含常量。 构造函数和实例化–接口既没有构造函数也不能实例化,则抽象类可以具有默认的构造函数,该实例在实例化具体子类时就被调用。 方法的实现–实现接口的所有类都需要为其包含的所有方法提供实现。 但是,扩展抽象类的类不需要实现其中包含的所有方法。 在具体的子类中只需实现抽象方法。 方法类型–任何抽象类都具有抽象方法和非抽象方法。 另一方面,接口只有一个抽象方法。

问:您能否解释一下Java中的各种异常类型? 另外,请告诉我们有关处理它们的不同方法。 A:Java提供了两种类型的异常:

检查异常–扩展Throwable类的类(运行时异常和错误除外)称为检查异常。 此类异常由编译器在编译期间检查。 这些类型的异常必须具有适当的try / catch块,或者必须使用throws关键字声明。 ClassNotFoundException是一个检查的异常。 未检查的异常–在编译期间,编译器不会检查此类异常。 因此,编译器无需处理未经检查的异常。 算术异常和ArrayIndexOutOfBounds异常是未经检查的异常。 Exceptions in Java are handled in two ways:

声明throws关键字–我们可以在方法末尾使用throws关键字声明异常。 例如, ExceptionCheck类{ 公共静态void main(String [] args){ 加(); } 公共无效add()引发异常{ 加成(); } } 使用try / catch –预期会产生异常的任何代码段都被try块包围。 一旦发生异常,它就会被try块之后的catch块捕获。 例如, ExceptionCheck类{ 公共静态void主(String [] args){ 加(); } 公共无效add(){ 尝试{ 加成(); }catch(Exception e){ e.printStacktrace(); } } }

问: Could you draw the Java Exception Hierarchy?
A:
超过20个Java面试问题

问:final关键字在Java中扮演什么角色? 它对变量,方法和类有什么影响? A:Java中的final关键字是不可访问的修饰符,仅适用于类,方法或变量。 根据使用环境的不同,它有不同的用途。

上课:

当某个类被声明为final类时,则该类不能被子类化,即,没有任何类可以扩展final类。

用的方法:

带有final关键字的任何方法都不能被子类覆盖。

带有变量:

紧跟着final关键字的变量不能在程序执行期间更改其持有的值。 因此,它的行为就像一个常量。

问:如何在Java中创建线程? 举个例子。 A:为了在Java中创建线程,有两种选择:

扩展线程类–线程在java.lang.Thread类中可用。 为了创建线程,您需要扩展线程类并覆盖run方法。 例如,公共类Addition扩展了Thread { 公共无效run(){ } }

使用线程类的缺点是无法扩展任何其他类。 但是,可以在类中重载run()方法

实现可运行接口–在Java中创建线程的另一种方法是通过实现可运行接口。 为此,有必要提供在 接口。 例如, 公共类Addition实现Runnable { 公共无效运行(){ } }

问:为什么我们使用yield()方法? A:yield()方法属于线程类。 它将当前正在运行的线程转移到可运行状态,并允许其他线程执行。 换句话说,它为优先级相同的线程提供了运行的机会。 因为yield()是静态方法,所以它不会释放任何锁定。

问:您能解释一下Java中的线程生命周期吗? A:线程生命周期具有以下状态,并遵循以下顺序:

新增–在线程生命周期的第一个状态下,将创建线程实例,并且尚未调用start()方法。 该线程现在被认为是活动的。 可运行-调用start()方法之后但调用run()方法之前,线程处于可运行状态。 线程也可以从等待或睡眠状态返回到可运行状态。 正在运行–调用run()方法后,线程进入运行状态。 这是线程开始执行的时间。 不可运行–尽管线程处于活动状态,但无法运行。 通常,一段时间后它将返回到可运行状态。 终止–运行()方法完成执行后,线程进入终止状态。 现在还不活着。

**问:看下面的两个代码片段:

一世。

类加法器{ 静态int add(int a,int b) { 返回a + b; } 静态double add(double a,double b) { 返回a + b; } 公共静态void main(String args []) { System.out.println(Adder.add(11,11)); System.out.println(Adder.add(12.3,12.6)); }} ii。

车类{ 无效run(){ System.out.println(“汽车正在运行”); } 奥迪级扩展车{ 无效run() { System.out.println(“奥迪以100公里安全运行”); } 公共静态void main(字符串args []) { 汽车b = new Audi(); b.run(); } } 两者之间的重要区别是什么? 答:**代码段i。 是代码片段ii中方法重载的示例。 演示方法重载。

问:您对Java的同步有什么了解? 它最大的缺点是什么? A:如果多个线程尝试访问单个代码块,那么产生不准确结果的机会就会增加。 为防止这种情况,请使用同步。

使用sync关键字使线程需要键才能访问同步的代码。 简而言之,同步一次只允许一个线程访问一个代码块。

每个Java对象都有一个锁,每个锁只有一个键。 线程只有在可以获取对象锁定的键的情况下,才能访问同步方法。 以下示例演示了同步:

公共类ExampleThread实现Runnable { 公共静态void主(String [] args){ 线程t =新线程(); t.start(); } public void run(){ 同步(对象){ { } } 注意:建议避免对所有方法实施同步。 这是因为当只有一个线程能够访问同步的代码时,下一个线程需要等待。 因此,它导致程序性能降低。

问:是否可以在单个try块下写入多个catch块? A:是的,可以在一个try块下写入多个catch块。 但是,该方法需要从特定到一般。 下面的示例演示了相同的内容:

公共类示例{ 公共静态void main(String args []){ 尝试{ int a [] = new int [10]; a [10] = 10/0; } catch(ArithmeticException e) { System.out.println(“第一个catch块中的算术异常”); } catch(ArrayIndexOutOfBoundsException e) { System.out.println(“数组索引超出第二个catch块的边界”); } catch(异常e) { System.out.println(“第三个catch块中的任何异常”); } }

问:您能说出execute(),executeQuery()和executeUpdate()之间的区别吗? A:

执行()–用于执行任何SQL查询。 如果结果是ResultSet(如运行Select查询),则返回TRUE;如果结果不是ResultSet(如运行Insert或Update查询),则返回FALSE。 executeQuery()–用于执行选择查询。 它返回ResultSet,即使没有匹配查询的记录,也不为null。 的executeQuery()在执行选择查询时必须使用方法,以便在有人尝试执行Insert或Update语句时抛出带有“ executeQuery方法不能用于更新”消息的java.sql.SQLException。 executeUpdate()–用于执行不返回任何内容的Delete / Insert / Update语句或DDL语句。 输出取决于语句是数据操作语言(DML)语句还是数据定义语言(DDL)语句而有所不同。 输出为整数,等于前一种情况的总行数,后一种情况为0。 Note: The 执行() method needs to be used only in a scenario when there is no certainty about the type of statement. In all other cases, either use executeQuery() or executeUpdate() method.

问: Provide an example of Hibernate architecture:
A:

超过20个Java面试问题

问:您能否通过代码示例演示如何在JSP中删除cookie? A:以下代码演示了如何在JSP中删除cookie:

Cookie mycook =新的Cookie(“ name1”,“ value1”); response.addCookie(mycook1); Cookie killmycook =新的Cookie(“ mycook1”,“ value1”); killmycook。 设置MaxAge(0); killmycook。 设置路径(“ /”); killmycook。 addCookie(killmycook 1);

问:编写适当的代码示例来演示final,final和finalize的用法。 A:

最后 final关键字用于限制类,方法和变量。 最终类无法继承,最终方法无法覆盖,并且最终变量变为常量,即其值无法更改。

类FinalVarExample { 公共静态void main(字符串args []) { 最终整数a = 10; a = 50; //由于值现在无法更改,将导致错误 } 最后 无论是否处理异常,都将执行finally块内的任何代码。

类FinalExample { 公共静态void main(String args []){ 尝试{ int x = 100; } catch(Exception e){ System.out.println(e); } 最后{ System.out.println(“最终块正在执行”);} } } } Finalize Finalize方法在对象被垃圾回收之前执行清理。

类FinalizeExample { 公共无效finalize(){ System.out.println(“最终完成称为”); } 公共静态void main(String args []) { Finalize Example f1 = new Finalize Example(); FinalizeExample f2 = new FinalizeExample(); f1 = NULL; f2 = NULL; System.gc(); } }

问:throw关键字与throws关键字有何不同? A:throws关键字允许声明异常,而throw关键字用于显式抛出异常。 受检查的异常不能仅通过throw传播,而throw允许这样做而无需其他任何操作。

throws关键字后跟一个类,而throw关键字后跟一个实例。 方法中使用throw关键字,但方法签名中使用throws关键字。 此外,不可能抛出多个异常,但是可以声明多个异常。

问:如何区分进程和线程? A:进程和线程之间有几个基本区别,如下所述:

定义–进程是程序的执行实例,而线程是进程的子集。 变化–对父流程所做的更改不会影响子流程。 但是,主线程的更改可能导致同一进程的其他线程的行为发生更改。 通讯–虽然进程需要进程间通信才能与同级进程进行通信,但是线程能够直接与属于同一进程的其他线程进行通信。 控制–进程由操作系统控制,并且只能控制子进程。 相反,线程是由程序员控制的,并且能够对它们所属的同一进程的线程进行控制。 依存关系–进程是独立的实体,而线程是相关的实体 记忆–线程在共享内存空间中运行,但进程在单独的内存空间中运行。

问:您能否在Array和ArrayList之间进行比较? A:数组必须在声明期间提供大小,而数组列表不一定需要大小,因为它会动态更改大小。

为了将对象放入数组,需要指定索引。 但是,对于数组列表,没有这样的要求。 参数化数组列表时,不参数化数组。

问:请解释一下Abstract类和Abstract方法是什么意思? A:Java中的抽象类是无法实例化的类。 这样的类通常用于为子类提供基础,以便扩展以及实现抽象方法以及覆盖或使用抽象类中定义的已实现方法。

为了创建抽象类,需要在其后跟随abstract关键字。 任何抽象类都可以具有抽象方法和非抽象方法。

Java中仅具有声明而没有实现的方法被称为抽象方法。 同样,抽象方法名称后跟abstract关键字。 任何扩展抽象类的具体子类都必须提供抽象方法的实现。

问:您对Java接口有什么了解? A:Java接口是仅包含方法声明而不包含方法实现的模板。 这是一种在Java中实现多重继承的解决方法。

一些值得记住的有关Java接口的要点是:

实现接口的类必须为接口中声明的所有方法提供实现 接口中的所有方法在内部都是公共抽象void 接口中的所有变量都是内部公共的static final 类不扩展但实现接口

问:什么是join()方法? 举个例子。 A:我们使用join()方法将一个线程与当前正在运行的线程的末端连接起来。 它是一种非静态方法,并且具有重载版本。 考虑下面的示例:

公共静态void主(String [] args){ 线程t =新线程(); t.start(); t.join(); }

主线程在上述示例中开始执行。 一旦执行到达代码t.start(),线程t就会启动其自己的堆栈以执行。 JVM在这里在主线程和线程t之间切换。

一旦执行达到t.join(),则线程t单独执行并被允许完成其任务。 之后,主线程恢复执行。

问:如何在Java中使线程停止? A:Java中有三种方法可以停止执行线程:

*–此方法用于使线程处于阻塞状态。 满足阻塞条件后,将立即恢复执行。 例如,ServerSocket.accept()是一种阻塞方法,它侦听传入的套接字连接,并且仅在建立连接时才恢复被阻塞的线程。 睡眠–此方法用于将线程的执行延迟一段时间。 使用sleep()方法的线程被称为进入睡眠状态。 唤醒后即进入可运行状态,即睡眠状态完成。 在sleep()方法的花括号内提到了线程需要进入睡眠状态的时间。 这是一种静态方法。 等候–尽管可以在任何Java对象上调用它,但是wait()方法只能从同步块中调用。

问:Volatile变量在Java中起什么作用? A:存储在volatile变量中的值不是从线程的缓存中读取的,而是从主内存中读取的。 易失变量主要在同步期间使用。

问:请比较Java中的序列化与反序列化。 A:序列化是将Java对象转换为字节流的过程。 反序列化与序列化的过程恰好相反,在序列化过程中,从字节流中检索Java对象。

通过将Java对象写入ObjectOutputStream来序列化Java对象,并通过从ObjectInputStream读取Java对象来反序列化Java对象。

这就完成了28个基本Java面试问题的清单。 您如何看待我们编制的清单? 将您的评论放在下面的专用窗口中,让我们知道。 另外,请查看这些最佳Java教程,以进一步完善Java技能。

Originally Posted: https://hackr.io/blog/java-interview-questions

from: https://dev.to//vijaykhatri96/top-20-java-interview-questions--1lcf