设计模式

不羁的心 提交于 2020-10-16 02:13:14

单例模式

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


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

代码:

// 懒汉式单例模式:类加载时不实例化,而是在第一次被调用的时候才进行实例化
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
线程的那些资源可以共享()


静态变量
存储器


















易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!