剑指offer 面试题2—实现单例模式

RJ45以太网接口EMC设计方案 RJ45以太网接口EMC设计方案 一、 接口概述 RJ45以太网接口是目前应用最广泛的通讯设备接口,以太网口的电磁兼容性能关系到通讯设备的稳定运行。赛盛技术应用电磁兼容设计平台(EDP)软件从接口原理图、结构设计,线缆设计三个方面来设计以太网口的EMC设计方案。 二、 接口电路 原理图的EMC设计 百兆以太网接口2KV防雷滤波设计 图1 百兆以太网接口2KV防雷滤波设计 接口电路设计概述: 本方案从EMC原理上,进行了相关的抑制干扰和抗敏感度的设计;从设计层次解决EMC问题;同时此电路兼容了百兆以太网接 阅读详情

终于把简直offer看完了一遍

所以第二遍我决定要美一个题自己去实现一遍,会加入自己的理解(但是不一定对哈)

题目:设计一个类,我们只能生成该类的一个实例。

饿汉试

package T2Singleton;

/**
 * 饿汉式
 * @author yxx
 *
 */
public class Singleton {

    //私有构造方法
    private Singleton() {}

    private static Singleton singleton = new Singleton();

    public static Singleton getInstance() {
        return singleton;
    }

}

我第一下想到的就是饿汉试的单例模式,因为他可以在多线程下使用,不想一般的懒汉式那样。

饿汉式在类创建的同时就已经创建好一个静态的对象供系统使用,以后不再改变,所以是线程安全的。

如果是懒汉式,我们就得加同步锁了

懒汉式

考虑同步,但是是对方法加锁

package T2Singleton;

/**
 * 多线程
 * 
 * @author yxx
 * 
 */
public class Singleton2 {

    //私有构造方法
    private Singleton2() {}

    private static Singleton2 instance = null;

    public synchronized static Singleton2 getInstance() {
        if (instance == null) {
            instance = new Singleton2();
        }
        return instance;
    }
}

考虑同步,对对象上锁,使锁的粒度变小

package T2Singleton;

/**
 * 多线程
 * 
 * @author yxx
 * 
 */
public class Singleton2 {

    // 私有构造方法
    private Singleton2() {}
    private static Singleton2 instance = null;

    public static Singleton2 getInstance() {
        if (instance == null) {
            synchronized (instance) {
                if (instance == null) {
                    instance = new Singleton2();
                }
            }
        }
        return instance;
    }
}

上面这种,加同步锁前后两次判断实例是否存在
加锁耗时。可以实现只有当single为null即没有创建时,需要加锁操作,当single创建出来之后,则无须加锁。

还有一种登记式的,有兴趣可以自行研究一下

package T2Singleton;

/**
 * 按需创建
 * 
 * @author yxx
 * 
 */
public class Singleton3 {

    Singleton3() {}

    public static Singleton3 getInstance() {
        return Nested.instance;
    }

    static class Nested {

        Nested() {}

        final static Singleton3 instance = new Singleton3();

    }
}

如果当我们第一次试图通过属性Single3.instance得到Single3的实例时,会自动调用Nested的静态构造函数创建实例instance。如果我们不调用属性,那么就不会触发运行,也不会创建实例。

饿汉式和懒汉式区别

这两种乍看上去非常相似,其实是有区别的,主要两点

1、线程安全:

饿汉式是线程安全的,可以直接用于多线程而不会出现问题,懒汉式就不行,它是线程不安全的,如果用于多线程可能会被实例化多次,失去单例的作用。
如果要把懒汉式用于多线程,有两种方式保证安全性,一种是在getInstance方法上加同步,另一种是在使用该单例方法前后加双锁。

2、资源加载:

饿汉式在类创建的同时就实例化一个静态对象出来,不管之后会不会使用这个单例,会占据一定的内存,相应的在调用时速度也会更快,
而懒汉式顾名思义,会延迟加载,在第一次使用该单例的时候才会实例化对象出来,第一次掉用时要初始化,如果要做的工作比较多,性能上会有些延迟,之后就和饿汉式一样了。

所有源码均可去【GitHub】下载

【学习体会】Lighttools8.4.0:简单光学系统实例 添加球型光源(SphereSource)和表面接收器: 对光线模拟的参数进行设置: 光线追踪-模拟输入 要追踪的光线总数,决定模拟的准确度,总数越多,准确度越高,当然耗时更多 预览光线数量是模拟之后可以看到的示意光线(黑线),一般是100~1000,随意设置 点击,开始模拟: (模拟结果) 如果光线太多,则会出现,可以看到剩余时间 照度分析: 分析-照度显示-光栅图表 ... 阅读详情

相关推荐

智驾系统分层架构:从传感器到执行器的全链路解析

本文深入解析了智能驾驶系统的分层架构,从传感器数据采集融合、应用层决策到车辆管理层执行,完整呈现了从感知到控制的全链路工作流程。文章重点阐述了架构设计的核心优势在于接口标准化与模块解耦,以ACC和LKA协同场景为例,说明了各层级如何通过清晰分工与高效协作,实现复杂系统的可靠、灵活与易于升级。

weixin_29219189的博客 399

剑指Offer:实现单例模式

在所有的设计模式中面试最容易提及的就是单例模式了,对于单例模式我们一定不陌生,单例模式具有以下特点: 单例类只能有一个实例。 单例类必须自己创建自己的唯一实例。 单例类必须给所有其他对象提供这一实例。 版本一:最简单的写法,只能适用于单线程 public class Singleton { private static Singleton instance = null;

带翅膀的猫的博客 4210

ERROR 1045 (28000): Access denied for user ‘root‘@‘localhost‘ (using password: NO)解决办法

问题:ERROR 1045 (28000): Access denied for user ‘root’@‘localhost’ (using password: NO) 很久没用这台电脑的mysql了,今天需要连接数据库,启动数据库报错: ERROR 1045 (28000): Access denied for user ‘root’@‘localhost’ (using password: NO) 解决方法: 查阅资料后知道了,应该使用已知的用户名和密码登陆 mysql -u root -p 然而密

一个超会写Bug的程序猿的博客 43万+

剑指offer-面试题2 实现单例模式

我也不知道面试题1去哪儿了。。面试题2.实现单例模式1. 单例模式的定义  单例模式是一种常用的软件设计模式。通过单例模式可以保证系统中只有类的实例的唯一性。单例模式最初的定义出现于《设计模式》(艾迪生维斯理,1994):“保证一个类仅有一个实例,并提供一个访问它的全局访问点。”   在Java中,提供全局访问变量或者方法需要使用“static”静态关键字实现。   另一个定义是(百度百科):

我的博客 3211

在银河麒麟V10上部署Atlas 300i Duo:从固件到驱动的一站式踩坑笔记

日期:2025-09-09关键词:鲲鹏920、Atlas 300i Duo、银河麒麟V10、NPU、驱动、固件。

weixin_41544125的博客 2809

用友U8 API 二次开发:WebService封装7个核心DLL引用与U8Login登录避坑

本文详细介绍了用友U8 API二次开发中的WebService封装与U8Login登录优化实践。通过7个核心DLL的正确引用、U8Login登录机制的深度解析及IIS环境下的特殊处理方案,为开发者提供了一套高可用性的通用解决方案,助力企业实现ERP系统的高效集成与数字化转型。

weixin_42524171的博客 505

剑指offer 面试题2之单例模式实现

在应聘比较知名的IT或者互联网企业的时候,不管是高级还是中初级工程师都会有很大几率遇到笔试,笔试内容主要就是考察基础了,而且在面试的时候也经常会让手写算法的时候,这部分内容的准备可以刷下剑指offer和leetcode,我这边主要是java,之前看的剑指offer主要是用c++实现的,这边就用java把剑指offer里面的面试题大部分都实现一下。 面试题二:实现单例模式 不推荐的解法一,单线程...

harryptter的专栏 354

基于CANoe的Basic Diagnostics ECU (UDS)

基于CANoe的Basic Diagnostics ECU (UDS)

farmer00的博客 9153

《剑指offer》面试题2:实现Singleton单例模式

题目:设计一个类,我们只能生成该类的一个实例。 思路: 1.饿汉式:单例实例在类装载时就构建,急切初始化。(预先加载法) 优点 1.线程安全 。2.在类加载的同时已经创建好一个静态对象,调用时反应速度快。 缺点 资源效率不高,可能getInstance()永远不会执行到,但执行该类的其他静态方法或者加载了该类(class.forName),那么这个实例仍然初始化 2....

qq_43502142的博客 276

C#的GDI+绘图详解

/消除锯齿 或 AntiAlias。// 1.在窗体或控件的Paint事件中,用PaintEventArgs e 创建绘图对象 ---- 控件或窗体重绘时。//为控件创建绘图对象。//--------------------以上方法三选一。//2.创建绘图对象 panel1中绘图。

weixin_50920631的博客 3457

YOLOv11全方位改进指南:卷积层、轻量化、注意力、损失函数等创新优化一览

YOLOv11通过八大核心模块的创新设计,在保持YOLO系列实时性的同时显著提升检测精度。本文提出的可变形卷积DCNv4多模态注意力动态解耦头等创新方案,已在工业质检、自动驾驶、无人机巡检等领域成功应用。完整项目地址预训练模型:包含从nano到x六个规格在线演示创新声明首次在YOLO系列集成DCNv4,小目标检测AP提升8.2%提出多模态混合注意力(MMAttention),兼顾通道与空间关系动态标签分配策略使训练效率提升40%

QQ_778132974的博客 1019

剑指offer 面试题2 实现单例模式

不会以及不熟练的方法参考DERRANTCM的剑指offer专栏的程序,感谢DERRANTCM的分享。面试题2实现 Singleton 模式package algorithm.foroffer;/** * 单例模式:恶汉式,线程安全 * 步骤: * 1. 创建并初始化 private static 变量 * 2. 私有化构造方法 * 3. 创建返回单例对象的 p

LYZ 683

Mac下Neo4j的安装、配置及Error汇总

Mac 配置 jdk环境(图文) 卸载jdk

Yale-曼陀罗 1642

剑指Offer面试题2 实现单例模式

剑指Offer面试题2 实现单例模式

qq_46115054的博客 194

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

剑指offer 面试题2:实现单例模式

参考链接: https://www.cnblogs.com/sunchaothu/p/10389842.html 版本1:使用静态局部变量,缺点只能在C++11以上环境中运行 class Singleton{ public: ~Singleton() { cout<<"deconstruct"<<endl; } static Singleton& getI...

hello_my_coder的博客 299

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

剑指offer-面试题2(实现单例模式)

一:写在前面        从互联网公司辞职以后,进入了事业单位,但是突然感觉,代码那些东西,不用的话,忘记的太快了。所以打算开始写点东西,捡捡以前的东西。        原来快毕业的时候是从剑指offer这本书开始的,现在还是从剑指offer这本书捡起吧。首先是一个老题,学习过设计模式的同学肯定接触过单例模式。 二:单例模式 VS 静态类 2.1 单例模式的概念与特点        因...

zhang222730的博客 241

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

剑指offer面试题2:实现单例模式

单例模式的两种实现方式:饿汉式、懒汉式 饿汉式是在类加载的时候就已经实例化,即使是两个线程同时想获取它,取到的是类加载时实例化的那个变量的值,所以线程是安全的。 懒汉式是线程不安全的,因为有可能两个线程同时判断(instance==null),这个时候就会产生两个实例。 public class Main { public static class Singleton{ public static...

GuYuyuyuyu的博客 210

剑指offer-面试题2:实现单例模式

单例模式即一个类只有一个实例,并实现该实例的全局访问点 1.饿汉式 直接实例化,比如打开淘宝首页,会看到所有文字和图片都显示出来 实现代码: public class Singleton { private static Singleton instance=new Singleton(); private Singleton(){} public static Singleton getInstance(){ return instance; } } .

qq_43568109的博客 228

Java详解《剑指Offer第二版》面试题2:实现单例模式

题目:设计一个类,我们只能生成该类的一个实例 单例模式的特点: 单例类只能有一个实例。 单例类必须自己创建自己的唯一实例。 单例类必须给所有其他对象提供这一实例。 实现单例的三要素: 私有的构造方法; 指向自己实例的私有静态引用; 以自己实例为返回值的静态的公有方法。 单例模式分为懒汉式(需要时才去创建对象)和饿汉式(加载类的时候,就创建对象)。从速度和反...

春卷同学的博客 330

[剑指offer]面试题2(实现单例模式)

题目:设计一个类,我们只能生成该类的一个实例。 作用:保证为一个类只生成唯一的实例对象。也就是说,在整个程序空间中,该类只存在一个实例对象 关于单例模式,有两种实现方法:饿汉式和懒汉式 饿汉式 优点:加载进程时静态创建单例对象,线程安全 缺点:无论使用与否,总要创建。会造成一定的资源空间浪费 懒汉式 优点:用则创建,不用不创建,什么时候用什么时候创建,空间利用率较高 缺点:在多线程...

華仔的博客 408

剑指offer面试题2:实现单例模式-----java实现

最近计划跟着剑指offer的面试题学习一下算法。都是学习。面试题2: 设计一个类,我们只能生成该类的一个实例。我们来提供五种方法来实现:1 最简单的单例模式,但是只适合在单线程下使用(不好)package com.no2; /** * 简单单例模式(只适合单线程下使用) * * @author yushen * */ public class Singleton { // 单例模...

yushen 284

剑指offer 面试题2:单例模式(java实现)

Java 单例模式 摘要:博主在学习剑指offer过程中,结合另外一位道友总结Java的单例模式:https://www.cnblogs.com/cielosun/p/6582333.html 如有不足,希望大佬指点: 应用单例模式的场景:由于程序的设计,我们需要某个类同时且最多只需保留一个对象,此时我们就需要单例模式; 特点: 单例只能有一个实例; 单例类必须创建自己的唯一实例; ...

qq_40931405的博客 258

剑指Offer算法题之设计模式的单例模式--面试题2:实现Singleton模式

提到单例模式,不得不稍微了解一下设计模式,所以首先介绍几种常见的设计模式。设计模式:它表示了一个特定环境、一类问题和一个解决方案之间的关系。每一个模式都描述了一个不断重复发生的问题,以及该问题解决方案的核心设计。常见设计模式介绍1. 单例模式的介绍(singleton)有些时候,允许自有创建某类的实例是会造成系统性能的下降。如果一个类始终只创建一个实例,则这个类就被称为单例类,这种模式就被称为单例模

优快云_564174144的博客 517

<剑指offer 面试题2> 单例模式 (Java实现)

public class Interview2 { /* 一共三种方法,如下:*/ // 方法1 /*private static final Interview2 singleton = new Interview2(); private Interview2(){} public static Interview2 getInstance(){return sin

sytloveyxj的博客 249

《剑指Offer》面试题2(设计模式之单例模式):实现Singleton模式(Java实现)

题目:设计一个类,只能生成该类的一个实例。 分析:只能生成一个实例的类是实现了Singleton(单例)模式的类型,保证一个系统中的某个类只有一个实例而且该实例易于外界访问。 大体步骤: 单例模式设计步骤 1、 构造方法私有化(private) 2、 定义一个私有的(private)静态(static)实例化对象 3、 对外提供一个公共的(public)静态(st...

谢凌宣 280

C#版多线程安全泛型单例

看到《剑指Offer》的面试题2觉得有趣自己写了个泛型单例。 优点: 1.多线程安全。 2.首次调用Instance时才执行实例化。 3.简单干净,没有其它没必要的成员函数,需要的话可以自己加。 4.支持泛型。 public class Singleton&lt;T&gt; where T : Singleton&lt;T&gt;, new() {     protected Sin...

Xymazpq的博客 539
上一篇: 《HTTP详解》三部曲
下一篇: 剑指offer 面试题3—二维数组中找数
杜鲁门
博客等级 码龄11年 219粉丝 316原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值