##类和数据抽象

  1. 构造函数

  2. 智能指针

    问题:1、忘记delete,内存泄漏;2、还有指针引用,就释放 了对象,产生非法内存指针

    三种智能指针 share_ptr weak_ptr unique_ptr

  3. 析构函数

  4. 强引用和弱引用

  1. 引用和 指针的关系

  2. new 和malloc的区别

    new返回对象的指针,销毁对象

  3. tcp 和udp的区别

  4. 友元函数

  5. 成员函数

  6. this指针

非静态成员函数中访问类的非静态成员,编译器会自动将对象本身的地址作为一个隐含参数传递给函数

在类的非静态成员函数中返回类对象本身的时候,直接使用 return *this;另外一种情况是当参数与成员变量名相同时,如this->n = n (不能写成n = n)。
  1. const 函数重载

  2. 类的作用作用域

    只在该类是已知的,类外未知的。可以在不同的类中使用名称相同的类成员而不引起冲突。

  3. 虚函数和纯虚函数virtual

    • 虚函数 virtual void play():允许用基类的指针来调用子类的这个函数

    • 纯虚函数(virtual void print() = 0;):纯虚函数是为了实现一个接口,纯虚函数是在基类中声明的虚函数,它在基类中没有定义,但要求任何派生类都要定义自己的实现方法。

    • 纯虚函数对类最大的束缚就是:类中一旦出现纯虚函数,就不可实例化了;

      纯虚函数可以有函数体,最终还是要被派生类重写,在派生类的函数中可以调用基类中有函数体的纯虚函数;

      为使派生类能完全释放资源,基类析构函数必须声明为虚函数,否则,在用基类指针new一个派生类对象后,delete该指针就只能回收与基类相关的资源,造成内存泄漏;

      纯虚析构函数必须要有函数体,根据C++析构函数的调用规则,派生类会调用基类析构函数,如果基类析构函数没有函数体会造成函数调用失败而报错,这是纯虚析构函数与普通纯虚函数不同之处。

  1. const 对象的构造函数

  2. 重载运算符

  3. static成员

面向对象和泛型编程

  1. 继承
  2. 多态

容器和算法

  1. vector
  2. set
  3. list
  4. hashset

算法

  • 排序
  • 数组去重
  • 字符串去重
  • 二叉树
  • 链表翻转 倒序

设计模式

单例模式

工厂模式

socket编程

epoll和select poll的区别

select==>时间复杂度O(n)

无差别轮询所有流; 单个进程可监视的fd数量被限制,即能监听端口的大小有限,对socket进行扫描时是线性扫描,即采用轮询的方法,效率较低:

poll本质上和select没有区别,它将用户传入的数组拷贝到内核空间,然后查询每个fd对应的设备状态, 但是它没有最大连接数的限制,原因是它是基于链表来存储的.

epoll可以理解为event poll,不同于忙轮询和无差别轮询,epoll会把哪个流发生了怎样的I/O事件通知我们。所以我们说epoll实际上是事件驱动(每个事件关联上fd)这种模式比水平触发效率高,系统不会充斥大量你不关心的就绪文件描述符没有最大并发连接的限制,能打开的FD的上限远大于1024(1G的内存上能监听约10万个端口)
2、效率提升,不是轮询的方式,不会随着FD数目的增加效率下降。只有活跃可用的FD才会调用callback函数;
即Epoll最大的优点就在于它只管你“活跃”的连接,而跟连接总数无关,因此在实际的网络环境中,Epoll的效率就会远远高于select和poll。

组件使用

动态组件

静态组件

多线程的理解

死锁操作

GDB

mfc

QT

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容