06 2023 档案
摘要:关闭socket分为主动关闭和被动关闭两种情况。前者是指有本地主机主动发起的关闭;而后者则是指本地主机检测到远程主机发起关闭之后,作出回应,从而关闭整个连接; 将关闭部分的状态转移摘出来,就得到了下图: 产生原因?通过图上,我们来分析,什么情况下,连接处于CLOSE_WAIT状态呢?在被动关闭连接情
阅读全文
摘要:什么时候需要创建索引?(1) 主键自动建立唯一索引;(2) 频繁作为查询条件的字段应该创建索引;(3) 查询中排序的字段创建索引将大大提高排序的速度(索引就是排序加快速查找)(4) 查询中统计或者分组的字段; 什么时候不需要创建索引?(1) 频繁更新的字段不适合创建索引,因为每次更新不单单是更新记录
阅读全文
摘要:1、静态全局变量 全局变量的空间会在程序的生命周期内分配,在全局变量的前面加上static,变成静态全局变量。 #include <iostream> #include <string.h> using namespace std; static int n = 5; int main() { n
阅读全文
摘要:1、通常在处理音视频数据时,我们如何选择解码器? 通常我们不是根据 NALU 裸流数据中的信息来选择解码器,而是根据媒体封装层的信息来确定解码器。媒体封装层是表示媒体数据是什么封装格式的,比如 MP4、FLV。在这层信息里,通常会携带码流编码格式的信息。拿 MP4 来说,我们可以根据 Sample
阅读全文
摘要:IMS的全称是IP多媒体子系统,它是一个基于IP网提供语音及多媒体业务的网络体系架构。它最初是由3G标准化组织3GPP设计的,作为其GSM之后的未来移动网络远景目标的一部分。IMS的最初的版本(3GPP R5)主要是给出了一种基于GPRS来实现IP多媒体业务的方法。在这个版本的基础上,3GPP、3G
阅读全文
摘要:SDP在webrtc或voip通话中有重要的作用,它通过文本对媒体信息进行描述。其本身并不传递媒体数据,而是用于参与媒体会话的双方进行媒体协商。通过SDP,通信双方可以知道对方的:支持的音视频编码器、网络信息以及其他重要信息。在webrtc中没有规定统一的信令,通常信令使用使用者自己实现。下图是we
阅读全文
摘要:网络层的目的就是实现终端节点之间的通信,即点对点通信。具体功能包括路由选择与地址管理等。 这一层主要有IP和ICMP两个协议组成,在这里就先重点讲解IP协议,后面会单独将IP协议相关的如ICMP,DNS,NAT,NAPT,DHCP等协议单独写一篇博客汇总。 IP层协议是实现网络数据传输的重要协议之一
阅读全文
摘要:在TCP的socket编程中,发送端和接收端都有成对的socket。发送端为了将多个发往接收端的包,更加高效的的发给接收端,于是采用了优化算法(Nagle算法),将多次间隔较小、数据量较小的数据,合并成一个数据量大的数据块,然后进行封包。那么这样一来,接收端就必须使用高效科学的拆包机制来分辨这些数据
阅读全文
摘要:总的来说,FreeSwitch由一个稳定的核心(Core)及一些外围模块组成、这些外围模块根据其功能和用途的不同又分为Endpoint、Codec、Application等不同的类别。 FreeSwitch内部使用线程模型来处理并发请求,每个连接都在单独的线程中进行处理,不同的线程间通过Mutex互
阅读全文
摘要:哈希设计思想:试想如果我们对一个数组进行查询,这个数组里,每一个元素都是一个字符串。我们知道数组最快的检索办法是通过数组的下标进行检索,但是对于这种场景,我们无能为力,只能从头查到尾,从而查询出目标元素。 如果我们要根据名字找到其中的任何一个元素,就需要遍历整个数组。最坏情况下时间复杂度是O(n)
阅读全文
摘要:观察者模式又叫做发布-订阅模式;观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态发生变化时,会通知所有观察者对象,使他们能够自动的更新自己。 有两大类(主题和观察者)一共四个角色从上面我们可以看到,这里面包含了:(1) 抽象主题/抽象被观察者(Subj
阅读全文
摘要:什么是单例模式?单例模式指在整个系统生命周期里,保证一个类只能产生一个实例,确保该类的唯一性。 单例模式分类有哪些?单例模式可以分为懒汉式和饿汉式,两者之间的区别在于创建实例的时间不同:懒汉式:指系统运行中,实例并不存在,只有当需要使用该实例时,才会去创建并使用实例。(这种方式要考虑线程安全)饿汉式
阅读全文
摘要:浅拷贝:简单的复制拷贝操作 P1的生命周期结束后,判断m_PtrAge是否为空,很明显m_PtrAge的值是0x0100,不为空,释放m_PtrAge指向的内存;P2的生命周期结束后,同样判断m_PtrAge是否为空,很明显m_PtrAge的值也是0x0100,也不为空,再次释放m_PtrAge指向
阅读全文
摘要:weak_ptr虽然是智能指针,但实际上是作为shared_ptr的辅助指针使用。weak_ptr通常不单独使用,一般用于查看对应的shared_ptr的信息。weak_ptr没有重载*,->等指针运算符。weak_ptr对象不会影响shared_ptr对象的引用计数。 #include<iostr
阅读全文
摘要:C++内存资源管理不当。比如:(1) 有些内存资源已经被释放,但指向它的指针并没有改变指向(成为了野指针),并且后续还在使用;(2) 有些内存资源已经被释放,后期又试图再释放一次(重复释放同一块内存会导致程序运行崩溃);(3) 没有及时释放不再使用的内存资源,造成内存泄漏,程序占用的内存资源越来越多
阅读全文
摘要:#include<iostream> #include<string.h> #include<stdio.h> using namespace std; class String { public: String(const char *str = NULL); //普通构造函数 String(co
阅读全文
摘要:C/C++编译的程序所占用内存区域一般分为以下5个部分: (1) 栈区:由编译器自动分配和释放,用来存放函数形参、函数局部变量、局部变量 (2) 堆区:一般由程序员分配和释放,malloc、free、calloc、realloc (3) 静态存储区:全局变量、静态全局变量、静态局部变量 (4) 常量
阅读全文
摘要:多态就是多种形态,C++的多态分为静态多态与动态多态。动态多态就是通过继承重写基类的虚函数实现的多态,在基类的函数前加上virtual关键字,在派生类中重写该函数,运行时将会根据对象的实际类型来调用相应的函数。 多态的总结:(1) 用virtual关键字声明的函数叫做虚函数,虚函数肯定是类的成员函数
阅读全文
摘要:前面我们讨论了select、poll和epoll三组I/O复用系统调用,这三组系统调用都能同时监听多个文件描述符。它们将等待由timeout参数指定的超时时间,直到一个或多个文件描述符上有事件发生时返回,返回值是就绪的文件描述符的数量。返回0表示没有事件发生。现在我们从事件集、最大支持文件描述符数、
阅读全文
摘要:即使我们使用ET模式,一个socket上的某个事件还是可能被触发多次,这在并发程序中就会引起一个问题,比如一个线程在读取某个socket上的数据后开始处理这些数据,而在数据的处理过程中该socket上又有新的数据可读,此时另外一个线程被唤醒来读取这些新的数据,于是就出现两个线程同时操作一个socke
阅读全文
摘要:epoll: epoll是Linux特有的IO复用函数,被认为性能最好的一种方法,它和select、poll在实现和使用上有很大差异:1.使用一组函数来完成,而不是单个2.把用户关心的文件描述符上的事件放在内核的一个事件表中,无须向select、poll那样每次调用都要重复传入文件描述符集或事件集,
阅读全文
摘要:select:select系统调用的用途是:在一段指定时间内,监听用户所感兴趣的文件描述符上的可读、可写和异常事件缺点:1.所能监视的文件描述符的数量有限制,sizeof(fd_set)=128,说明能监视的描述符的最大值为128*8=1024个;2.同时每次调用select都需要在内核遍历传递进来
阅读全文
摘要:poll:poll系统调用和select类似,也是在指定时间内轮询一定数量的文件描述符,以测试其中是否有就绪的文件描述符。优点:1.相比select来讲,它没有fd数量的限制,理论上打开fd的数目跟系统内在有关;2.也不用每次都把fd集合从用户区拷贝数据到内核,它使用一个 struct pollfd
阅读全文