const 修饰类的成员变量,表示成员常量,不能被修改。
const修饰函数承诺在本函数内部不会修改类内的数据成员,不会调用其它非 const 成员函数。
如果 const 构成函数重载,const 对象只能调用 const 函数,非 const 对象优先调用非 const 函数。
const 函数只能调用 const 函数。非 const 函数可以调用 const 函数。
类体外定义的 const 成员函数,在定义和声明处都需要 const 修饰符。
类的静态成员变量在类实例化之前就已经存在了,并且分配了内存。函数的static变量在执行此函数时进行初始化。
一、堆栈空间分配区别:
1、栈(操作系统):由操作系统自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈;
2、堆(操作系统): 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收,分配方式倒是类似于链表。
二、堆栈缓存方式区别:
1、栈使用的是一级缓存, 他们通常都是被调用时处于存储空间中,调用完毕立即释放;
2、堆是存放在二级缓存中,生命周期由虚拟机的垃圾回收算法来决定(并不是一旦成为孤儿对象就能被回收)。所以调用这些对象的速度要相对来得低一些。
三、堆栈数据结构区别:
堆(数据结构):堆可以被看成是一棵树,如:堆排序;
栈(数据结构):一种先进后出的数据结构。
一、封装:
封装是实现面向对象程序设计的第一步,封装就是将数据或函数等集合在一个个的单元中(我们称之为类)。
封装的意义在于保护或者防止代码(数据)被我们无意中破坏。
二、继承:
继承主要实现重用代码,节省开发时间。
子类可以继承父类的一些东西。
三、多态
多态:同一操作作用于不同的对象,可以有不同的解释,产生不同的执行结果。在运行时,可以通过指向基类的指针,来调用实现派生类中的方法。
指针是一个变量,只不过这个变量存储的是一个地址,指向内存的一个存储单元;而引用仅是个别名;
引用使用时无需解引用(*),指针需要解引用;
引用只能在定义时被初始化一次,之后不可变;指针可变;
引用没有 const,指针有 const;
引用不能为空,指针可以为空;
“sizeof 引用”得到的是所指向的变量(对象)的大小,而“sizeof 指针”得到的是指针本身的大小;
指针和引用的自增(++)运算意义不一样;
指针可以有多级,但是引用只能是一级(int **p;合法 而 int &&a是不合法的)
从内存分配上看:程序为指针变量分配内存区域,而引用不需要分配内存区域。
用动态存储分配函数动态开辟的空间,在使用完毕后未释放,结果导致一直占据该内存单元即为内存泄露。
使用的时候要记得指针的长度。
malloc的时候得确定在那里free.
对指针赋值的时候应该注意被赋值指针需要不需要释放.
动态分配内存的指针最好不要再次赋值.
答:选择、冒泡、快速、希尔、归并、堆排等。
1.快排:是冒泡排序的一种改进。
优点:快,数据移动少
缺点:稳定性不足
2.归并:分治法排序,稳定的排序算法,一般用于对总体无序,但局部有序的数列。
优点:效率高O(n),稳定
缺点:比较占用内存
1、malloc与free是C++/C语言的标准库函数,new/delete是C++的运算符。它们都可用于申请动态内存和释放内存。
2、对于非内部数据类型的对象而言,光用malloc/free无法满足动态对象的要求。对象在创建的同时要自动执行构造函数,对象在消亡之前要自动执行析构函数。
3、由于malloc/free是库函数而不是运算符,不在编译器控制权限之内,不能够把执行构造函数和析构函数的任务强加于malloc/free。因此C++语言需要一个能完成动态内存分配和初始化工作的运算符new,以一个能完成清理与释放内存工作的运算符delete。注意new/delete不是库函数。
4、C++程序经常要调用C函数,而C程序只能用malloc/free管理动态内存。
5、new可以认为是malloc加构造函数的执行。new出来的指针是直接带类型信息的。而malloc返回的都是void指针。
1.TCP面向连接, UDP面向无连接的
2.TCP有保障的,UDP传输无保障的
3.TCP是效率低的,UDP效率高的
4.TCP是基于流的,UDP基于数据报文
5.TCP传输重要数据,UDP传输不重要的数据
IOCP全称I/O Completion Port,中文译为I/O完成端口。
IOCP是一个异步I/O的API,它可以高效地将I/O事件通知给应用程序。
与使用select()或是其它异步方法不同的是,一个套接字[socket]与一个完成端口关联了起来,然后就可继续进行正常的Winsock操作了。然而,当一个事件发生的时候,此完成端口就将被操作系统加入一个队列中。然后应用程序可以对核心层进行查询以得到此完成端口。
A. 同步
所谓同步,就是在发出一个功能调用时,在没有得到结果之前,该调用就不返回。
按照这个定义,其实绝大多数函数都是同步调用(例如sin isdigit等)。
但是一般而言,我们在说同步、异步的时候,特指那些需要其他部件协作或者需要一定时间完成的任务。
最常见的例子就是 SendMessage。
该函数发送一个消息给某个窗口,在对方处理完消息之前,这个函数不返回。
当对方处理完毕以后,该函数才把消息处理函数所返回的值返回给调用者。
B. 异步
异步的概念和同步相对。
当一个异步过程调用发出后,调用者不会立刻得到结果。
实际处理这个调用的部件是在调用发出后,通过状态、通知来通知调用者,或通过回调函数处理这个调用。
Const修饰成员变量,不可以修改,Const修饰函数不修改类内数据,Const函数重载,const对象只调用const函数,非const对象可以调用const函数,函数也是如此,类外定义的const函数,定义声明都需要加const
类的static变量实例化之前存在,分配了内存,执行函数时候初始化,静态成员变量先初始化,类外定义,所有类对象共享,静态成员函数不能调用非静态,反过来可以,没this指针,静态成员函数可以访问静态成员变量,类成员函数可以访问静态数据成员
栈操作系统可以自动释放,存放局部变量,形参,一级缓存,是一个先进后出的数据结构。堆程序员释放,二级缓存(调用速度较慢),可以看做一个树。
封装是面向对象程序设计第一步,将数据和函数封装起来一个类,防止代码被破坏,继承重用代码,子类继承父类的方法,多态同一操作不同对象不同解释不同结果。
指针是一个变量存储一个变量的地址,定义可以随时改变,有sizeof,可使用const,可为空,使用的时候需要解引用,有多级指针,++意义不同,需要内存空间。引用是一个别名,定义时候初始化一次,无sizeof,不可使用const,不为空,无需解引用,一级引用,不需内存空间。
内存泄漏是动态开辟内存没有释放导致占用内存,要记录指针长度,注意malloc-free,new-delete,赋值指针是否需要释放,动态分配内存的指针不赋值
选择、冒泡、快速、希尔、归并、堆排,快排是冒泡改进,归并分治法排序总体无序,局部有序
New(delete)和malloc(free)动态申请内存和释放内存,new(不是库函数)可以创建对象,有构造和析构函数,适用于c++,malloc使用c(库函数),new像是malloc+构造函数
Tcp面向连接,有保障,效率低,基于字节流数据,重要数据,udp无连接,无保障效率高,数据报文
同步:功能调用之后,无结果就等待,结果来了返回,异步与这个相反