单例模式面试

2024-05-03

我最近在一次采访中被问到与java相关的问题,代码如下,因为我对java非常陌生,几乎没有用Java编写代码,所以我真的不知道下面的代码是做什么的。

问题是 使用以下代码选择描述最糟糕情况的选项:

public class Bolton {
    private static Bolton INST = null;

    public static Bolton getInstance()
    {
        if ( INST == null )
        {
            INST = new Bolton();
        }
        return INST;
    }

    private Bolton() {
    }
}

这是这个问题的选项

  1. 可以创建多个 Bolton 实例
  2. 博尔顿永远不会被创造出来
  3. 构造函数是私有的,不能被调用
  4. Value可以被垃圾回收,调用getInstance可能会返回垃圾数据

以上哪个选项是正确的?为什么?


这是一个单例模式 http://en.wikipedia.org/wiki/Singleton_pattern

单例模式的思想是只有一个类的一个可用实例。因此constructor被设定为private在这种情况下,该类维护一个getInstance()调用现有实例变量的方法,INST在此类中,或为执行程序创建一个新类。答案可能是 1,因为它不是线程安全的。它可能会与我之前写下的 3 混淆,但从技术上来说,这是设计使然,所以实际上并不是一个缺陷。

这是一个例子延迟初始化,来自维基百科的线程安全单例模式:

public class SingletonDemo {

    private static volatile SingletonDemo instance = null;

    private SingletonDemo() {  } 

    public static SingletonDemo getInstance() {
        if (instance == null) {
            synchronized (SingletonDemo.class){
                if (instance == null) {
                    instance = new SingletonDemo();
                }
            }
        }
        return instance;
    }

}

将实例变量设置为volatile http://jeremymanson.blogspot.com/2008/11/what-volatile-means-in-java.html告诉 Java 从内存中读取它,而不是将其设置到缓存中。

同步语句或方法 http://docs.oracle.com/javase/tutorial/essential/concurrency/帮助并发性 http://en.wikipedia.org/wiki/Concurrency_(computer_science).

阅读更多关于双重检查锁定 http://en.wikipedia.org/wiki/Double-checked_locking这就是“延迟初始化”单例会发生的情况

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

单例模式面试 的相关文章

  • Java中如何动态添加charsequence[]中的数据?

    初始化的一种方法charsequence is charsequence item abc def 但我不想以这种方式初始化它 有人可以建议其他方式吗 比如我们初始化的方式string arrays 首先 修复变量声明 charsequen
  • 使用 Intellij 2017.2 /out 目录构建会重复 /build 目录中的文件

    更新到 Intellij 2017 2 后 构建我的项目会创建一个 out包含生成的源文件和资源文件的目录 这些文件与已包含的文件重复 build并导致duplicate class生成的类的编译器错误 关于 Gradle 或 Intell
  • 如何在谷歌地图中使用latlng字符串数组绘制多边形

    在我的应用程序中 我有包含 imagview 的 recyclerview 并且该 imageview 通过使用我存储在 sqlite 中的坐标包含静态地图图像 当我单击该图像时 我将该字符串数组格式的坐标传递给其他地图活动 然后使用该字符
  • 在 Java 8 中将对象追加到列表并返回结果?

    有没有一种方法可以将对象附加到列表并以功能性非命令方式在一行中返回结果 如果原始列表也不应该被改变 你会怎么做 Java 8 是允许的 我已经知道如何将两个列表连接到一行中 Source https stackoverflow com a
  • IntelliJ Ultimate 在 Play 2.3 (Java) 项目测试中找不到路由

    虽然我的测试运行得很好 但 IntelliJ 抱怨它找不到路由对象 并且代码自动完成无法工作 我已经查看了所有文档 这应该可以工作 这是 IntelliJ 的报告内容 关于我的项目配置可能有什么问题有什么想法吗 这很可能与以下事实有关 ro
  • Maven 2 未运行 Junit 4 测试

    我在确保运行 Junit4 测试时遇到问题 同样的问题也被报告在https stackoverflow com questions 2021771 sort newest sort top https stackoverflow com q
  • 如何显示/隐藏jsf组件

    在我的一个 JSF 应用程序中 顶部的标题部分包含 selectOneMenu 底部的内容部分显示过滤器组件 默认情况下 应用程序首先在顶部显示 selectOneMenu 数据 在底部显示相应的 Filter 信息 如果用户选择不同的se
  • 到底什么是哈希冲突

    HashMap 中的哈希冲突或哈希冲突并不是一个新主题 我遇到过几个博客和讨论板 以模糊且详细的方式解释如何产生哈希冲突或如何避免它 我最近在一次采访中遇到了这个问题 我有很多事情要解释 但我认为很难准确地给出正确的解释 抱歉 如果我的问题
  • IntSummaryStatistics的summaryStatistics方法

    为什么空 IntStream 上的 summaryStatistics 方法返回整数的最大和最小值作为流中存在的最大和最小 int 值 IntStream intStream IntStream of IntSummaryStatistic
  • Android 反向地理编码不适用于华为设备

    我正在尝试通过这段代码反转地理编码纬度 经度 Geocoder geocoder new Geocoder context Locale ENGLISH try List
  • Java检测鼠标长按

    如果用户按下 JList 组件超过 3 秒 有什么方法可以捕获事件吗 我发现困难的部分是即使在用户松开鼠标左键之前也需要触发事件 这可以通过 mousePressed 和 mouseReleased 组合轻松完成 您可以在 mouseDow
  • java:如何设置全局线程ID?

    是否有可能为线程设置唯一ID 在分布式系统中 线程是在许多不同的机器上创建的 例如通过 RMI 我需要它来创建日志消息 根据我的研究 我知道可以使用 log4j mdc ndc 来完成 但只能在单线程中完成 我的问题是 在创建线程时必须设置
  • Java 泛型:将 Object o 的类与 进行比较

    假设我有以下课程 public class Test
  • 将字符串转换为字符并按降序排序(ascii)

    我正在创建一个程序 该程序将使用户输入整数 一个接一个 存储在数组中并按降序显示整数 该程序还要求用户输入一个字符串 使用以下命令将其转换为字符string toCharArray 我已经正确地按降序显示整数 问题是我不知道如何按降序显示字
  • Wildfly 10.1 消耗所有核心

    我们最近将银行应用程序从 java 1 6 升级到 1 8 将 jboss 4 x 升级到 wildfly 10 1 我们观察到 java 消耗了机器上可用的所有核心 10 有人可以告诉是什么原因吗 通常情况下 jboss 4 x 的最大
  • 当通过 Map.put(K, V) 添加值时,是否必须通过 Map.get(K) 返回相同的实例?

    假设您有以下代码 Map
  • logcat 信息出现在 Android Studio 的“运行”选项卡中

    我的 android studio 运行选项卡很简单 然后它变得更难并给我更多信息 例如 logcat 中的信息 如何禁用或删除第二张图片中出现的更多信息并返回到第一张图片中的第一个外观 我只需要正在运行的 flutter 应用程序的日志输
  • Eclipse 在单独的窗口中打开代码

    我正在 eclipse 中编程 在两个显示器设置上运行 在其中一台显示器上 我只获得了项目资源管理器和编辑器作为自定义透视图 而在另一台显示器上 我获得了其他工具 例如控制台 调试 任务 变量 断点等 例如 当我单击任务视图中的任务时 这将
  • 混合语言源目录布局

    我们正在运行一个使用多种不同语言的大型项目 Java Python PHP SQL 和 Perl 到目前为止 人们一直在自己的私有存储库中工作 但现在我们希望将整个项目合并到一个存储库中 现在的问题是 目录结构应该是什么样的 我们应该为每种
  • 将 JSON 发送到 Spring MVC 控制器

    我正在尝试将 JSON 发送到 Spring MVC 控制器 在 Spring MVC 方面 一切都配置正确 下面是代码 但似乎没有运行

随机推荐

  • 使用 OpenCV 裁剪黑色边缘

    我认为这应该是一个很简单的问题 但我找不到解决方案或有效的关键字进行搜索 我只有这个图像 黑边没有用 所以我想把它们剪掉 只留下 Windows 图标 和蓝色背景 我不想计算Windows图标的坐标和大小 GIMP 和 Photoshop
  • 在 VBScript 中导航 XML 节点(对于 Dummy)

    我正在尝试编写一个脚本来为我操作 xml 文件中的一些数据 我对 VBScript 还很陌生 但有 VB NET 和 VBA 背景 所以我觉得我知道自己在做什么 我认为可能有更好的方法来导航文件 而不是对每一行进行大量调用 InStr 或类
  • 自定义 Javascript EventManager - 请帮我完成

    我正在尝试创建一个自定义 javascript EventManager 类 我采用了 Grant Skinner 在他的 essel js 框架中使用的格式来创建类 并且需要坚持使用它 在这一点上我真的迷失了 我认为 至少在概念意义上 我
  • fork() 不并行运行

    我对编程过程很陌生 我的基本程序并没有真正按照我的预期工作 我在 Oracle VM 上的 Ubuntu 18 04 上运行此代码 这是代码 include
  • Meteor 文件上传不工作

    我已将包 cfs standard packages 和 cfs filesystem 添加到我的 Meteor 项目中 我想使用带有此输入的表单为我的博客上传精选图像 div class form group div
  • DocsList.createFile 有时会创建空白或损坏的 PDF

    我正在尝试创建一个 google 文档 如果可以的话 我很乐意将其创建为 HTML 然后将该文档导出为 pdf 以作为电子邮件附件发送 这是我的基本结构 var docName test var doc DocumentApp create
  • 如何使用动态时间扭曲获得距离矩阵?

    我有 6 个时间序列值 如下所示 import numpy as np series np array 0 0 1 2 1 0 1 0 0 0 1 2 0 0 0 0 0 0 1 2 0 0 0 0 0 1 1 0 0 1 2 1 0 1
  • Maven 父级定义中的相对路径

    在定义父工件时 我是否需要将其包含在子项目的 pom 中 例如 Is the
  • 动画后 SVG 路径发生变化

    我正在画一个
  • HtmlUnit 的替代方案

    迄今为止 我一直在研究可用的无头浏览器 发现 HtmlUnit 的使用非常广泛 与 HtmlUnit 相比 我们是否有任何具有可能优势的 HtmlUnit 替代方案 谢谢 纳恩 据我所知 HtmlUnit 是最强大的无头浏览器 你对此有什么
  • 生成落在多边形或形状内的点网格的最快方法?

    我在 python 中使用 shapely 并尝试在网格中生成均匀间隔的点 这些点在最快的 O n 时间内落在形状内 形状可以是任何闭合多边形 而不仅仅是正方形或圆形 我目前的做法是 找到最小 最大 y 和 x 来构建一个矩形 给定间距参数
  • 如何在android中的视频视图中获取视频的总长度

    我有一个问题 我想获取在视频视图中运行的视频的总长度 为此我正在使用视频视图的 getDuration 方法 但当我将其与 currentPosition 进行比较时 它总是返回 1 实际上我希望如果视频的当前位置等于视频的总长度那么它应该
  • Azure DevOps 扩展自定义 UI

    我的任务是开发 Azure DevOps 的扩展以自动化构建过程 自定义构建任务 需要注意的是 实际上我正在开发的是一系列构建任务 每个任务都包含常规输入 但由于历史原因 所有这些构建任务都应该分组 用户可以从管道设置中任务页面的下拉列表中
  • wpf 调试错误输出 System.WIndows.Data 错误 25

    我有一个自定义样式的组合框 效果很好 它被放置在用户控件内并绑定到数据结构 我使用 DisplayMemberPath 仅显示组合框文本框中的一个元素 ComboBox 样式取自 MSDN 并被多次使用 所以这里就不显示了
  • Python Suds URLError 名称或服务未知问题

    有一个奇怪的问题 我可以成功创建一个 suds 客户端并将其打印出来 gt gt gt client Client the wsdl url gt gt gt print client Suds https fedorahosted org
  • Node2vec 的工作原理

    我一直在读关于node2vec https cs stanford edu jure pubs node2vec kdd16 pdf嵌入算法 我有点困惑它是如何工作的 作为参考 node2vec 由 p 和 q 参数化 并通过模拟来自节点的
  • C#:如何在虚拟模式下有效过滤(隐藏)ListView 项目?

    C 如何在虚拟模式下有效过滤 隐藏 ListView 项目 我正在寻找一种在虚拟模式下过滤 隐藏 显示 ListView 中的项目的方法 我将我的项目缓存在列表视图项目数组中 如何有效地使其在按下过滤按钮时仅显示特定的列表视图项目 然后在按
  • 使用多个列组重塑 Pandas Dataframe

    我目前有一个宽数据框 如下所示 Index ID1 ID2 Foc A Foc B Foc C Sat A Sat B Sat C 0 r 1 10 15 17 100 105 107 1 r 2 20 25 27 110 115 117
  • 为什么GCC不报告未初始化的变量?

    include
  • 单例模式面试

    我最近在一次采访中被问到与java相关的问题 代码如下 因为我对java非常陌生 几乎没有用Java编写代码 所以我真的不知道下面的代码是做什么的 问题是 使用以下代码选择描述最糟糕情况的选项 public class Bolton pri