八股文总结第一篇 | C++ vector 单例设计模式 操作系统 线程和进程

前言

这两天都没总结八股文,正好今天休息一天把前两天欠的东西补上

C++ vector

1.vector是一个动态数组,用一片连续的内存空间存放数据,底层实现是三个指针,一个指向头,一个指向当前存放元素的位置,一个指向尾也就是本身的大小。

2.vector的特点是如果当前存放元素的数量等于空间大小,vector会自动进行扩容。扩容的过程是先拷贝元素,释放旧空间,申请新空间,一般扩容采用倍数扩容O(1)如1.5倍(VS),2倍(Linux)而不采用等长扩容O(n)。2倍扩容后的新空间必定大于前面的总和,导致前面的空间无法使用;而1.5倍在几次扩容后可以使用之前的空间。而这个倍数的原理其实需要满足的公式是An-2+An-1>An,是斐波那契数列,而斐波那契数列有一个最佳扩容因子为1.618倍。

3.因为每次扩容都要拷贝元素开销很大,所以为了避免过大开销最好的方式是预估vector的空间并开好,避免扩容发生。

4.vector对于随机访问的性能很好,但插入删除因为涉及到移动元素和扩容,性能很低。而且插入删除操作因为改变内存空间地址,所以会导致迭代器失效。

C++ 单例设计模式

1.单例设计模式保证类的实例化对象只有一个,一般用于程序中某个类只需要一个对象,如任务管理器只能打开一个,操作系统中文件管理系统只能有一个等。

2.单例设计模式通过将构造函数,拷贝构造函数,赋值构造函数设置为私有,防止在外部调用创建对象。

3.单例设计模式分为懒汉式和饿汉式

饿汉式:在类定义的时候就实例化,是线程安全的

class Singleton{
private:
    static Singleton* instence;
    Singleton(const Singleton& temp){}
    Singleton& operator=(const Singleton& temp){}
protected:
	 Singleton(){} 
public:
    static Singleton* getInstence(){ 
        return instence;    
    }
};
Singleton* Singleton::instence = new Singleton();

懒汉式:第一次用到才失效,非线程安全,一般通过加锁或者使用内部静态变量保证线程安全

class Singleton
{
public:
    static Singleton* GetInstance()
    {
        static Singleton  singleton;/
        return &singleton;
    }
private:
    Singleton();
}

操作系统 进程和线程

1.进程是系统分配资源的单位,线程是CPU调度的单位,一个进程中可以有多个线程,他们共享这个进程的资源。

2.同一个进程中切换线程不会引起进程切换,不同进程中的线程切换会引起进程切换。进程切换的会记录,分配和撤销进程所掌握的内存资源,CPU资源,开销很大。

3.进程间的通信需要某些方式,而线程间通信读取统一进程的资源即可。

总结

把两天欠的八股总结补上了,坚持就是胜利

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值