关于单例模式

1.什么是单例模式?
答:

单例模式是一种创建型设计模式,确保一个类在运行期间仅有一个实例,提供全局唯一的访问点

2.单例模式的目的?

答:

避免重复创建资源消耗大的对象,例如日志系统、线程池、连接池等

统一管理全局共享状态或资源、例如配置管理器

确保实例在程序结束时正确销毁,避免资源泄露

总结:避免重复创建资源大的对象、统一管理一些资源、确保销毁

3.在日志系统中,为什么用到了单例模式?全局变量不行吗?

答:

在这个日志系统中,支持多个日志器存在,你可以创建建造者类的接口创建多个日志器,每个日志器可以设置自己的输出方向和日志格式,通过单例模式建造一个日志器管理类,每当创建一个日志器后都会放入这一个全局单例类中进行管理,可以通过单例类中的接口根据日志器名称来获取你想要的日志器,然后进行输出打印,通过单例模式减少了频繁创建的问题,任何模块都可以通过这个全局管理类来获取日志器

总结:为了让日志器管理类全局只有一个,每个日志器创建出来后都会放入这个类中,全局都可以通过getinstance接口来访问,全局变量很难保证其他代码不会修改到它

4.用的懒汉模式还是饿汉模式?他俩的区别是什么?

答:

饿汉模式:在main函数执行前初始化、没有线程安全问题、但是可能造成资源浪费

懒汉模式:在第一次使用的时候初始化、有线程安全问题、资源浪费情况小

5.单例模式为什么要禁用拷贝构造和赋值,如果不禁用会有什么风险

答:

防止通过拷贝和赋值创建新对象、破坏单例唯一性

如果不禁用,用户可以通过A a = A::getinstance(); 创建副本

6.单例模式的生命周期和析构问题?

答:

饿汉模式:按照全局/静态变量析构

懒汉模式:按照局部静态变量析构

7.单例模式的优缺点与使用场景?

答:

优点:资源利用率高,减少重复创建和销毁的开销

缺点:懒汉模式线程安全

8.三种懒汉模式(非安全、安全、c++11)的性能对比?

答:

非安全:性能最快,无锁开销

安全:第一次初始化加锁,其他时候不加锁,性能还行

c++11:性能也还行、

9.c++11版本的原理?

答:

编译器在生产代码时,会为局部变量添加一个辅助标志位判断是否被初始化

执行到代码的时候判断标志位,没有被初始化就加锁,已初始化就跳过,返回

关于工厂模式

10.日志系统中为什么用到了工厂模式,谈谈对工厂模式的理解?

答:

在日志落地模块通过工厂模式来生产指定落地方式,通过工厂模式来进行扩展新落地方式

工厂模式是一种创建型设计模式、通过定义工厂类的接口,在接口内部返回指定的对象

解决了创建和使用耦合的问题,一旦对象的创建方式发生变化,仅需更改工厂模式

使扩展更方便

隐藏了创建的复杂逻辑细节,只返回对象

注意项:工厂模式返回对象尽量智能指针,不然使用完对象需要手动delete,不然内存泄漏

11.工厂模式跟建造者模式的关系?

答:

两者都是创建型设计模式、都封装了对象的创建过程

工厂模式专注于创建不同类型的产品,我要什么 工厂给我什么

建造者模式专注于如何一步步构建产品

12.工厂模式的分类及核心区别?

答:

简单工厂模式:一个工厂类、新增产品需修改工厂

工厂方法模式:抽象一个工厂类,一个产品一个子工厂类

抽象工厂模式:抽象一个工厂类,一个产品类一个子工厂类

关于建造者模式

1.日志系统为什么使用建造者模式?谈谈你对建造者模式的理解

答:

在日志系统中的构建完整日志器、如日志器名称、日志消息、等级、日志格式化器、同步/异步、落地方式 是通过建造者模式的,因为日志系统是两种日志器:局部和全局,设置两个建造者类来进行建造,我们只需要传入对应参数,帮我们建造完返回给我们对象

建造者模式也是一种创建型设计模式,将复杂对象的构造过程统一

2.建造者模式的优缺点

答:

优点:解耦构造过程与产品表示,便于扩展(新增具体建造者类就可生成新对象)

精确控制对象的构建步骤,代码可读性高

缺点:增加了类的数量、如果产品结构更改 需要修改

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/web/92582.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/92582.shtml
英文地址,请注明出处:http://en.pswp.cn/web/92582.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

学习:JS[8]本地存储+正则表达式

一.本地存储1.介绍将数据存储到用户浏览器当中设置、读取方便、页面刷新不丢失数据2.本地存储分类-localStoragea.语法(1)存储数据//存储数据 localStorage.setItem(键,值)如 localStorage.setItem(uname,哈哈)(2)获取数据//获取方式 都加引号 localStorage.getItem(键) localS…

C++算法练习:单词识别

做题记录:牛客习题:单词识别 相关题目代码已经提交到gitee中:楼田莉子 (riko-lou-tian) - Gitee.com喜欢请点个赞谢谢 目录 题目: C 字符函数头文件头文件:(C 标准库)核心函数功能说明&#…

从免费到盈利:Coze智能体1小时封装变现全流程指南——井云科技

在AI技术普惠的浪潮下,Coze等智能体平台让零代码开发者也能快速构建功能强大的AI助手。然而,许多创作者在完成智能体开发后,却面临“工具免费、成本自担”的困境——用户无限制调用导致算力成本飙升,想收费又缺乏成熟的支付与用户…

C++学习之STL学习:map/set

通过前面的学习,我们已经对C STL有了初步了解。然而,STL作为一个庞大复杂的体系,远不止这些内容。接下来,我们将深入探讨STL中的另外两个重要组件——map和set。 作者的个人gitee:楼田莉子 (riko-lou-tian) - Gitee.co…

[学习] CORDIC算法详解:从数学原理到反正切计算实战

CORDIC算法详解:从数学原理到反正切计算实战 文章目录CORDIC算法详解:从数学原理到反正切计算实战引言一、数学原理二、求解流程(旋转模式)三、典型应用场景四、反正切计算示例(Python实现)五、算法流程可视…

3款强力的Windows系统软件卸载工具

1、Geek 下载地址:https://download.csdn.net/download/weixin_42203093/91625765 Geek Uninstaller 是一款专业的 Windows 软件卸载工具,主要用于卸载软件并清理残留垃圾: 特点 体积小巧便携:软件体积约为 1.7M,是单…

AcWing 4579. 相遇问题

这道题做个今天的结尾 比较简单 正在备战csp吗,正好刷一下 难度:简单时/空限制:1s / 256MB总通过数:1738总尝试数:2584来源: CSP-J 2022 模拟赛 原题链接 4579. 相遇问题 - AcWing题库 题目描述 一…

基于clodop和Chrome原生打印的标签实现方法与性能对比

今天想看看,基于clodop和Chrome原生打印的标签实现方法与性能对比。先看看DeepSeek关于这个问题的回答! CloudPrint 和 Chrome 原生打印的区别 基本概念差异 CloudPrint (Clodop) 是基于云的打印服务解决方案需要安装专门的客户端程序支持跨平台、跨设备…

百度网盘如何做到下载速度最快?OpenSpeedy绿色安装版下载,开源免费网盘加速

下载地址获取点击这里打开:OpenSpeedy下载地址 打开解压后的文件夹,找到【OpenSpeedy.exe】应用程序,右键选择【以管理员身份运行】。 添加图片注释,不超过 140 字(可选) 主要特性: 免费开源蛮…

科技云报到:热链路革命:阿卡 CRM 的 GTM 定位突围

科技云报道原创。在企业数字化的工具箱里,“CRM” 一词早已不是 “全流程客户管理” 的代名词,而是从营销获客到客户信息沉淀,再到长期关系维护,仿佛要包揽从线索到复购的所有环节。但成立仅两年半的阿卡 CRM,却在实践…

什么是Graphical Abstract

什么是Graphical Abstract 现在都需要用Graphical Abstract,新加的好像。图形摘要(Graphical Abstract)是学术论文中一种以可视化方式浓缩呈现研究核心内容的图表,它通过简洁的图形、流程图、示意图或组合视觉元素,直观…

心灵笔记:正念冥想

定义:正念冥想(Mindfulness Meditation)是一种源自东方禅修、结合现代心理学的心理训练方法,核心是有意识地将注意力集中在当下的体验上,不加评判地觉察自身的 thoughts(想法)、feelings&#x…

微软推出革命性AI安全工具Project IRE,重塑网络安全防御新范式

面对日益复杂的网络安全威胁,微软近日发布了具有里程碑意义的Project IRE AI工具。这项创新性解决方案将人工智能与逆向工程技术深度融合,开创了自动化威胁检测的新纪元。据微软官方披露,该工具能够在不依赖人工干预的情况下,自主…

C#Attribute(特性)的定义与使用

1.什么是 Attribute1.1 定义 Attribute 是一种“声明式元数据(declarative metadata)”机制。 • 附加位置:程序集、模块、类型、字段、属性、方法、方法参数、方法返回值、事件、泛型参数、局部变量、本地函数、Lambda 表达式、甚至表达式树…

飞书对接E签宝完整方案

1、概述飞书和E签宝在各自领域都属于领先的产品,但因为E签宝与钉钉的特殊关系,一直以来E签宝都只实现了与钉钉的深度集成,一家企业如果想同时使用飞书和E签宝,则需要通过S-HUB这样的产品来进行桥接,用户在飞书端审批&a…

Mysql快速导出数据库设计说明书word文档(表结构、类型、注释、是否有主键)

主要有三种方式,根据你的需求来选择: 1、Mysql语句查询 优点:无需安装额外的软件,使用你常用的数据库可视化工具即可 缺点:受限于你的数据库可视化工具的导出功能,需要额外写脚本进行处理 2、Python脚本…

DigitalProductId解密算法php调试版piddebug.php

<?php // 使用数组字面量 $digits [B, C, D, F, G, H, J, K, M, P, Q, R,T, V, W, X, Y, 2, 3, 4, 6, 7, 8, 9]; //foreach ($digits as $digit) { // echo $digit."<br>"; //}$hexPidarray(0xc2,0x49,0x4b,0xcc,0x60,0x34,0x09,0xcd,0x96,0xf7,0xec,0…

IDEA快捷键壁纸分享

说明&#xff08;1&#xff09;因为显示器的尺寸不同&#xff0c;对快捷键显示的位置稍作调整 &#xff08;2&#xff09;这里默认您熟悉常用的快捷键&#xff0c;分享一些功能好用但是用的少的快捷键空壁纸笔记本壁纸&#xff08;15.6寸&#xff09;24 寸显示器壁纸

InnoDB vs MyISAM: MySQL存储引擎的世纪对决

选错存储引擎&#xff1f;你的数据库性能可能暴跌80%&#xff01; 本文用最直观的对比拆解MySQL两大核心存储引擎的差异&#xff0c;让你彻底明白什么场景该选谁。一、引擎全景图: 数据库的"心脏"之争 ❤️ #mermaid-svg-KTQko8kEUvOkTb4L {font-family:"trebuc…

【Avalonia】无开发者账号使用iOS真机调试跨平台应用

文章目录1. 要求1.1 无需Apple开发者账号1.2 最新版mac系统1.3 最新版Xcode2. 配对Mac3. 配置开发证书3.1 创建一个名为MTClient的Xcode项目3.2 找到签名证书3.3 配置签名3.4 配置标识符4. 真机调试4.1 设置应用首屏 Launch Screen4.2 设置应用图标5. 问题5.1 DI异常该问题的解…