设计模式

本文介绍了设计模式中的单例模式、工厂模式、适配器模式等,并探讨了死锁问题,用户态与内核态的转换,以及数据库事务的隔离级别。此外,还涉及了TCP连接建立、虚拟内存限制、汇编代码生成等多个计算机科学概念。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

单例模式

视频
参考
用例:序列号生成器、web页面计数器
通过单例模式, 可以做到:

  1. 确保一个类只有一个实例被建立 ,并且自行实例化并向整个系统提供这个实例。
  2. 提供了一个对对象的全局访问指针
  3. 在不影响单例类的客户端的情况下允许将来有多个实例
  1. 因为要保证只有一个实例,就要求该类不能被外界实例化只能类自己实例化,即构造函数要是private

代码:

----------------------------------------------
// Singleton.h
// Created by xiemenghui on 2018/7/20.
#ifndef DESIGNPATTERN_SINGLETON_H
#define DESIGNPATTERN_SINGLETON_H

// 单例模式
class Singleton {
private:
    Singleton(){}
    ~Singleton(){}
    Singleton(const Singleton &);
    Singleton & operator= (const Singleton &);

public:
    static Singleton & GetInstance()
    {
        static Singleton instance;
        return instance;
    }
    void DoSomething();
};

#endif //DESIGNPATTERN_SINGLETON_H
-----------------------------------------------------
// Singleton.cpp
// Created by xiemenghui on 2018/7/20.
#include <iostream>
#include "Singleton.h"

void Singleton::DoSomething()
{
    std::cout << "Singleton do something\n";
}
-------------------------------------------------------------------
//SingletonMain.h
// Created by xiemenghui on 2018/7/20.
#ifndef DESIGNPATTERN_SINGLETONMAIN_H
#define DESIGNPATTERN_SINGLETONMAIN_H
#include "Singleton.h"

void SingletonMain()
{
    Singleton::GetInstance().DoSomething();
}

#endif //DESIGNPATTERN_SINGLETONMAIN_H
-------------------------------------------------------------------
// 懒汉式单例模式:类加载时不实例化,而是在第一次被调用的时候才进行实例化
class Singleton
{
private:
	Singleton() { }
	static Singleton * pInstance;
public:
	static Singleton * GetInstance()
	{
		if (pInstance == nullptr)
			pInstance = new Singleton();
		return pInstance;
	}
};

// 线程安全的单例模式:饿汉式,即在类加载的时候就进行实例化
class Singleton
{
private:
	Singleton() { }
	~Singleton() { }
	Singleton(const Singleton &);
	Singleton & operator = (const Singleton &);
public:
	static Singleton & GetInstance()
	{
		static Singleton instance;
		return instance;
	}
};

简单工厂模式

工厂模式

抽象工厂模式

适配器模式

桥接模式

观察者模式

单例模式的优点:

  1. 减少内存开支
  2. 减少系统调用
  3. 避免资源的多重占用
  4. 线程安全

死锁:

某台计算机连接了8个相同的设备,有N个进程在竞争使用,每个进程最多会同时占用3个设备,请问当N大于等于多少时,系统可能发生死锁?

用户态&内核态

以下哪种操作不会导致计算机从用户态切换至内核态?
访问内存时出现缺页异常
对一个变量进行取模运算
创建一个子进程
读取硬盘中文件的内容

以下数据库事务的隔离级别中哪一个可能造成脏读

读取未提交内容(Read Uncommited)
读取提交内容(Read Committed)
可重复读(Repeatable Read)
可串行化(Serializable)

在以下哪种容器上,不能应用二分查找算法?

std::vector
std::deque
std::list
std::array
访问主存上的数据,大概需要多少个机器时钟?
2
10
100
10000
以下哪一项不能有效利用程序的局部性?
顺序读取数据对象
将相关代码拆散到多个C文件中
精简程序binary的大小
将主要的计算逻辑集中在内部循环并做优化
以下哪一项不会导致C程序发生“段错误”?
忘记释放已分配的内存块
引用不存在的变量
引用已经被释放的内存块
访问数组越界
“定义了一系列算法,并将每个算法封装起来,使它们可以相互替换”是指以下哪种设计模式?
模板模式
策略模式
状态模式
命令模式
2019! 的末尾有多少个零?
501
502
503
504
tcp连接建立需要几次握手
1
2
3
4
以下哪种TCP状态需要等待2MSL
TIME_WAIT
CLOSE_WAIT
CLOSING
FIN_WAIT
路由器工作在网络协议的哪一层
物理层
链路层
网络层
应用层
虚拟内存的容量只受()的限制
物理内存的大小
磁盘空间的大小
数据存放的实际地址
计算机地址位数
以下哪个步骤会产生汇编代码文件
预处理
编译
汇编
链接
若处理器有32位地址,则它的虚拟地址空间为( )
2G
4G
512M
256M
按照二叉树的定义,具有3个结点的二叉树有几种。
3
4
5
6
堆排序的时间复杂度为
n
nlogn
logn
n^2
编程题1:反转应为句子
输入例子1:
I am a student.

输出例子1:
student. a am I
编程题2:输入一个正整数数组,将它们连接起来排成一个数,输出能排出的所有数字中最小的一个。
输入例子1:
32,231

输出例子1:
23132

编程题3:有为N件物品,它们的重量w分别是w1,w2,…,wn,它们的价值v分别是v1,v2,…,vn,每件物品数量有且仅有一个,现在给你个承重为M的背包,求背包里装入的物品具有的价值最大总和?
输入例子1:
5
10
2 2 6 5 4
6 3 5 4 6

输出例子1:
15

以下设计模式的应用场景中,属于代理模式的选项有()
树形结构的遍历
产品簇创建场景
防火墙
CopyOnWriteList
由3 个“1”和 5 个“0”组成的 8 位二进制补码,能表示的最小整数()
-126
-125
-32
-3
以下软件设计模式的应用场景中,属以下git命令中,用于显示工作区和当前分支文件的差异的命令是()
git diff
git diff HEAD HEAD^
git diff --cached
git diff HEAD
线程的那些资源可以共享()


静态变量
存储器

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值