加入收藏 | 设为首页 | 会员中心 | 我要投稿 核心网 (https://www.hxwgxz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 建站 > 正文

Java面试过程中10个最难回答的面试题(附答案)

发布时间:2019-08-05 13:40:41 所属栏目:建站 来源:IT技术分享
导读:这是我收集的10个最棘手的Java面试问题列表。这些问题主要来自 Java 核心部分 ,不涉及 Java EE 相关问题。你可能知道这些棘手的 Java 问题的答案,或者觉得这些不足以挑战你的 Java 知识,但这些问题都是容易在各种 Java 面试中被问到的,而且包括我的朋友

如果 method1() 和 method2() 都由两个或多个线程调用,则存在死锁的可能性, 因为如果线程 1 在执行 method1() 时在 Sting 对象上获取锁, 线程 2 在执行 method2() 时在 Integer 对象上获取锁, 等待彼此释放 Integer 和 String 上的锁以继续进行一步, 但这永远不会发生。

Java面试过程中10个最难回答的面试题(附答案)

此图精确演示了我们的程序, 其中一个线程在一个对象上持有锁, 并等待其他线程持有的其他对象锁。

你可以看到, Thread1 需要 Thread2 持有的 Object2 上的锁,而 Thread2 希望获得 Thread1 持有的 Object1 上的锁。由于没有线程愿意放弃, 因此存在死锁, Java 程序被卡住。

其理念是, 你应该知道使用常见并发模式的正确方法, 如果你不熟悉这些模式,那么 Jose Paumard 《应用于并发和多线程的常见 Java 模式》是学习的好起点。

如何避免Java中的死锁?

现在面试官来到最后一部分, 在我看来, 最重要的部分之一; 如何修复代码中的死锁?或如何避免Java中的死锁?

如果你仔细查看了上面的代码,那么你可能已经发现死锁的真正原因不是多个线程, 而是它们请求锁的方式, 如果你提供有序访问, 则问题将得到解决。

下面是我的修复版本,它通过避免循环等待,而避免死锁, 而不需要抢占, 这是需要死锁的四个条件之一。

  1. public class DeadLockFixed { 
  2.  /** 
  3.  * 两种方法现在都以相同的顺序请求锁,首先采用整数,然后是 String。 
  4.  * 你也可以做反向,例如,第一个字符串,然后整数, 
  5.  * 只要两种方法都请求锁定,两者都能解决问题 
  6.  * 顺序一致。 
  7.  */ 
  8.  public void method1() { 
  9.  synchronized (Integer.class) { 
  10.  System.out.println("Aquired lock on Integer.class object"); 
  11.  synchronized (String.class) { 
  12.  System.out.println("Aquired lock on String.class object"); 
  13.  } 
  14.  } 
  15.  } 
  16.  public void method2() { 
  17.  synchronized (Integer.class) { 
  18.  System.out.println("Aquired lock on Integer.class object"); 
  19.  synchronized (String.class) { 
  20.  System.out.println("Aquired lock on String.class object"); 
  21.  } 
  22.  } 
  23.  } 

现在没有任何死锁,因为两种方法都按相同的顺序访问 Integer 和 String 类文本上的锁。因此,如果线程 A 在 Integer 对象上获取锁, 则线程 B 不会继续, 直到线程 A 释放 Integer 锁, 即使线程 B 持有 String 锁, 线程 A 也不会被阻止, 因为现在线程 B 不会期望线程 A 释放 Integer 锁以继续。

8.如果你的Serializable类包含一个不可序列化的成员,会发生什么?你是如何解决的?

任何序列化该类的尝试都会因 NotSerializableException 而失败,但这可以通过在 Java中 为 static 设置瞬态(trancient)变量来轻松解决。

Java 序列化相关的常见问题

(编辑:核心网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读