单例模式
视频
参考
用例:序列号生成器、web页面计数器
通过单例模式, 可以做到:
- 确保一个类只有一个实例被建立 ,并且自行实例化并向整个系统提供这个实例。
- 提供了一个对对象的全局访问指针
- 在不影响单例类的客户端的情况下允许将来有多个实例
- 因为要保证只有一个实例,就要求该类不能被外界实例化只能类自己实例化,即构造函数要是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;
}
};
抽象工厂模式
适配器模式
桥接模式
观察者模式
单例模式的优点:
- 减少内存开支
- 减少系统调用
- 避免资源的多重占用
- 线程安全
死锁:
某台计算机连接了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
线程的那些资源可以共享()
堆
栈
静态变量
存储器
来源:oschina
链接:https://my.oschina.net/u/4326655/blog/4533758