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

嵌入式设备系统日志记录及调试技巧_嵌入式日志系统(1),如何成为杰出的程序员 这里面我使用的芯片为哈弗体系,全局常量存储编译器默认分配在flash,需要注意如果使用片内flash时,注意存储调试等级的flash块不要与代码区重合,要不然修改调试等级擦除flash块同时PC指针指向当前块的代码区,会导致仪器死机;这个也是之前用的比较多的,以上代码是模仿linux 内核的写法,可以比较好的做到日志信息分层,编译时相加对应的编译开关即可。但有个弊端就是,切换debug等级时,需要重新编译且需更新固件,而嵌入式设备出现异常后更新固件往往复位后,故障有时很难复现,调试起来比较浪费时间。 阅读详情

终于把简直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】下载

【分子指纹】化学分子指纹的概念和应用(非常重要) 分子指纹(Molecular fingerprints)可以低计算成本的方式表示大规模化学数据集中化合物的化学(结构、物理化学等)性质。它们在将化学数据集中的分子转换为适合于计算方法的一致输入格式(bit向量或数值)方面发挥着重要作用。在这篇综述中, 阅读详情

相关推荐

VS Code+ESP-IDF开发避坑指南:头文件标红报错的5种解决方法(附CMakeLists.txt配置)

本文详细解析了在VS Code中使用ESP-IDF开发ESP32时头文件标红报错的5种解决方法,包括环境配置检查、CMakeLists.txt规范配置、路径解析策略、缓存清理技巧和高级调试手段。特别提供了CMakeLists.txt的实战配置示例,帮助开发者彻底解决头文件路径问题,提升开发效率。

weixin_33670786的博客 559

剑指Offer:实现单例模式

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

带翅膀的猫的博客 4210

STM32 超声波模块输入捕获测距(标准库)

通道2设置为下降沿触发,触发瞬间会将CNT的记录到CCR2中,由于上升沿触发时已经将CNT置零所以此时的CNT的值就是高电平的持续时间。通道1设置为上升沿触发,触发的瞬间会将CNT的值记录到CCR1里面,同时设置通道1触发带有从模式,并把从模式设置为置零CNT。超声波传感器模块上面通常有两个超声波元器件,一个用于发射,一个用于接收。电路板上有四个引脚:VCC、GND、Trig(触发)、Echo(回应)。输入捕获原理可以看看这位大佬,感觉写的很清楚,工作电压与电流:5V,15mA。感测角度:不小于15度。

qq_62425900的博客 2082

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

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

我的博客 3211

libjpeg-turbo图片解码 VS opencv

本文对比了libjpeg-turbo和opencv在图像解码层面的耗时情况,及解码数据是否存在diff

优快云_WHB的博客 833

python控制caxa模块_CAXA二次开发实用手册.doc

您所在位置:网站首页 > 海量文档&nbsp>&nbsp汽车/机械/制造&nbsp>&nbsp机械软件CAXA二次开发实用手册.doc119页本文档一共被下载:次,您可全文免费在线阅读后下载本文档。 下载提示1.本站不保证该用户上传的文档完整性,不预览、不比对内容而直接下载产生的反悔问题本站不予受理。2.该文档所得收...

weixin_39990819的博客 1760

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

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

harryptter的专栏 354

PCB设计必看:铜皮厚度与载流能力对照表(附Excel计算工具)

本文深入解析了PCB设计中铜皮厚度与载流能力的核心关系,提供了基于IPC-2152标准的动态计算逻辑与实用Excel工具。文章不仅分享了载流对照表,更重点剖析了影响载流能力的关键因素(如铜厚、线宽、温升、布线层),并给出了高电流设计的实战技巧与测试验证方法,帮助工程师规避常见陷阱,实现从理论到实践的闭环设计。

weixin_29228781的博客 721

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

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

qq_43502142的博客 276

Unity安卓打包实战:SDK与JDK配置全攻略

本文详细介绍了Unity安卓打包过程中SDK与JDK的配置方法,包括工具下载、安装步骤、环境变量设置及常见错误排查。通过实战指南帮助开发者快速完成Unity安卓打包环境搭建,提升开发效率。

weixin_30338481的博客 415

Unity Sprite Editor切片功能详解:如何快速将一张大图拆分成多个小图(附常见问题解决)

本文详细解析了Unity Sprite Editor的切片功能,指导开发者如何高效地将一张大图拆分为多个独立小图。文章涵盖了自动与手动切片操作步骤、轴心点设置、子精灵命名管理等核心技巧,并针对切片错位、性能优化等常见问题提供了实用解决方案,帮助提升2D游戏资源处理效率。

i0j1k2l3m的博客 646

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

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

LYZ 683

Qwen2.5-VL多模态微调超参数深度解析(上):训练流程与优化策略的量化机制分析

上篇文章通过系统化的对比实验,回答了多模态微调中的三个基础问题:“选什么方法”(LoRA/Full/Freeze/OFT对比)、“用什么配置”(60+组超参数组合)、“达到什么效果”(ROUGE-L/BLEU-4指标)。这些结果为后续工作奠定了实验基线,但也留下了更深层的疑问:为何相同方法在不同数据集上表现迥异?为何某些超参数的微小调整会引发性能剧变?如何在未见过的任务上快速找到最优配置?本文是对前文实验数据的二次挖掘与机理解析。我们将关注点从"做了什么实验"转移到"实验揭示了什么规律",实验视角从"结果对

羊城迷鹿的博客 1005

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

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

qq_46115054的博客 194

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

剑指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

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

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

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

zhang222730的博客 241

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

剑指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、付费专栏及课程。

余额充值