当前位置: 首页 > ai >正文

C++方向知识汇总(一)

关于单例模式

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.xdnf.cn/news/17313.html

相关文章:

  • 可泛化双手操作机器人基准测试:CVPR 2025 MEIS 研讨会 RoboTwin 双臂协作挑战赛
  • SwiftUI 登录页面键盘约束冲突与卡顿优化全攻略
  • 大语言模型提示工程与应用:提示工程-提升模型准确性与减少偏见的方法
  • node.js 零基础入门
  • mfc按钮点击事件没有触发,且程序卡死
  • VGMP状态机解析
  • 【GitHub小娱乐】GitHub个人主页ProFile美化
  • 交 换
  • 分享一个基于Spark的眼科疾病临床数据可视化分析与应用研究Hadoop基于Vue和Echarts的眼科疾病统计数据交互式可视化系统的设计与实现
  • HarvardX TinyML小笔记1(番外2:神经网络)
  • FreeRTOS学习笔记:任务通知和软件定时器
  • gRPC for C++ 实战全流程 —— 从零搭建到同步/异步服务
  • 第二十八天(cookiesessiontokeny验证)
  • LeetCode 分类刷题:209. 长度最小的子数组
  • 目标检测数据集 - 无人机检测数据集下载「包含COCO、YOLO两种格式」
  • 【工具变量】地级市固定资产投资数据(2000-2023年)
  • 开发手札:UnrealEngine和Unity3d坐标系问题
  • Kubelet 探针如何选择 IP:status.PodIP 溯源与“同 Pod 两个 IP“现象解析
  • Go 实用指南:如何执行 Skyline 查询(Pareto 最优点筛选)
  • PID学习笔记1
  • 基于springboot+vue开发的校园食堂评价系统【源码+sql+可运行】【50809】
  • 【洛谷题单】--分支结构(三)
  • DigitalProductId解密算法php调试版piddebug.php
  • 七、《Serverless架构:按毫秒计费的成本革命》--从新浪AI推理平台50%效能提升看无服务器本质
  • vscode/trae 的 settings.json 中配置 latex 的一些记录
  • Android--监听软键盘弹出隐藏事件
  • CamX-骁龙相机修改
  • BPMN编辑器技术实现总结AI时代的工作流编辑器
  • 香港服务器容器网络插件的多节点通信性能基准测试
  • 从灵感枯竭到批量产出:无忧秘书创作平台如何重构内容生产者的工作流程?全环节赋能分析