-
什么是内存泄漏?
答:内存泄漏是指程序中已动态分配的的堆内存,由于某些原因无法释放或者未释放,造成的内存浪费。
-
深拷贝和浅拷贝?
答:浅拷贝是指源对象与拷贝对象公用一份实体,仅仅是引用的变量不同(名称不同)其中任何一个对象的改动都会影响另一个对象。
深拷贝是指源对象与拷贝对象互相独立,其中任何一个对象的改动都不会对另外一个对象造成影响。
一般来说,浅拷贝就是复制那个对象的指针。深拷贝就是复制了那个对象。
-
基类、派生类?
答:基类:在面向对象设计中,被定义为包含所有实体共性的class类型,被称为“基类”
派生类:利用继承机制,新的类可以从已有的类中派生。那些用于派生的类称为这些特别派生出的类的“基类”。(,即子类(相对基类))
-
TCP和UDP和各自适用的场景?
答:
- TCP和UDP区别:
a.连接:TCP是面向连接的传输层协议,即传输数据之前必须先建立好连接。UDP无连接。
b.服务对象:TCP是点对点的两点间服务,即一条TCP连接只能有两个端点;UDP支持一对一,一对多,多对一,多对多的交互通信。
c.可靠性:TCP是可靠交付:无差错,不丢失,不重复,按序到达。UDP是尽最大努力交付,不保证可靠交付。
d.拥塞控制,流量控制:TCP有拥塞控制和流量控制保证数据传输的安全性。UDP没有拥塞控制,网络拥塞不会影响源主机的发送效率。
e. 报文长度:TCP是动态报文长度,即TCP报文长度是根据接收方的窗口大小和当前网络拥塞情况决定的。UDP面向报文,不合并,不拆分,保留上面传下来报文的边界。
f.首部开销:TCP首部开销大,首部20个字节。UDP首部开销小,8字节。(源端口,目的端口,数据长度,校验和) - TCP和UDP适用场景:
a.从特点上我们已经知道,TCP 是可靠的但传输速度慢,UDP 是不可靠的但传输速度快。因此在选用具体协议通信时,应该根据通信数据的要求而决定。
b.若通信数据完整性需让位与通信实时性,则应该选用TCP 协议(如文件传输、重要状态的更新等);反之,则使用 UDP 协议(如视频传输、实时通信等)。
-
什么是智能指针?
答:C++里面的四个智能指针:auto_ptr,shared_ptr,weak_ptr,unique_ptr其中后三个是C++11支持,并且第一个已经被11弃用。
为什么使用智能指针:
智能指针的作用是管理一个指针,因为存在一下情况:申请的空间在函数结束时忘记释放,造成内存泄漏。使用智能指针可以很大程度上的避免这个问题,因为智能指针就是一个类,当超出了类的作用域时,类会自动调用析构函数,析构函数会自动释放资源。所以智能指针的作用原理就是就函数结束时自动释放内存空间,不需要手动释放内存空间。
-
C++析构函数的作用
答:
a.析构函数和与构造函数对应,当对象结束其生命周期,如对象所在的函数已调用完毕时,系统会自动执行析构函数。
b.析构函数名也应与类名相同,只是在函数名前面加上一个位取反符~,eg: ~stud(),以区别与构造函数。它不能带任何参数,也没有返回值。只有一个析构函数,不能重载。
c.如果用户没有编写析构函数,编译系统会自动生成一个缺省的析构函数(即使自定义了析构函数,编译器也总是会为我们合成一个析构函数,并且如果自定义了析构函数,编译器在执行时会先调用自定义的析构函数再调用合成的析构函数),它也不进行任何操作。所以许多简单的类中没有用显式的析构函数。
d.如果一个类中有指针,且在使用的过程中动态的申请了内存,那么最好显示构造析构函数在销毁类之前,释放掉申请的内存空间,避免内存泄漏。
-
内联函数?
答:内联函数是C++为提高程序运行速度。
C++内敛是通常鱼类一起使用。如果一个函数是内敛的,那么在编译时,编译器会把该函数的代码副本放置在每个调用该函数的地方。
-
为什么要动态申请?
答:由于数组在声明的时候总要显式的指定一个长度,容易造成空间浪费或者空间不够用,使用不够灵活,所以使用了动态的申请。
-
C++的注册表编程?
答:注册表的组织方式跟文件目录比较相似,主要分为根键、子键和键值项三部分,与文件目录对应的话就是根目录、子目录和文件。
-
隐式类型转换?
答:首先,对于内置类型,低精度的变量给高精度变量赋值会发生隐式类型转换,其次,对于只存在单个参数的构造函数的对象构造来说,函数调用可以直接使用该参数传入,编译器会自动调用其构造函数生成临时对象。
-
设计模式?
答:a.设计模式和框架针对的问题域不同,设计模式针对面向对象的问题域;框架针对特定业务的问题域。
b.设计模式比框架更为抽象,设计模式在碰到具体问题后,才能产生代码;框架已经可以用代码表示。
c.设计模式是比框架更小的体系结构元素,框架中可以包括很多设计模式设计模式就像武术中基本的招式,将这些招式合理地组合起来,就形成套路(框架),框架是一种半成品。