C++面试准备(自用)

二叉树遍历

前序
根左右     ABDEGHCF
中序
左根右     DBGEHACF
后序
左右根    DGHEBFCA
层次遍历
ABCDEFGH
前中后遍历有递归和非递归的方式,非递归双循环
层次遍历使用栈
进程和线程的区别
进程是指程序执行时的一个实例。线程是进程的一个实体。进程——资源分配的最小单位,线程——程序执行的最小单位。
1.因为进程拥有独立的堆栈空间和数据段,所以每当启动一个新的进程必须分配给它独立的地址空间,建立众多的数据表来维护它的代码段、堆栈段和数据段,系统开销比较大
而线程不一样,线程拥有独立的堆栈空间,但是共享数据段,它们彼此之间使用相同的地址空间,共享大部分数据,比进程更节俭,开销比较小,切换速度也比进程快,效率高,
但是正由于进程之间独立的特点,使得进程安全性比较高,也因为进程有独立的地址空间,一个进程崩溃后,在保护模式下不会对其它进程产生影响,而线程只是一个进程中的不同执行路径。一个线程死掉就等于整个进程死掉。

2.线程又称为轻量级进程,进程有进程控制块,线程有线程控制块;

3.线程必定也只能属于一个进程,而进程可以拥有多个线程而且至少拥有一个线程;

TCP和UDP的区别
1.TCP面向连接;UDP是无连接的,发送数据之前不需要建立连接。
2.TCP速度比较慢,而UDP速度比较快,因为TCP必须创建连接,以保证消息的可靠交付和有序性,所以TCP协议比UDP复杂
3.TCP 提供交付保证(Tcp通过校验和,重传控制,序号标识,滑动窗口、确认应答实现可靠传输),无差错,不丢失,不重复,且按序到达,也保证了消息的有序性。该消息将以从服务器端发出的同样的顺序发送到客户端,尽管这些消息到网络的另一端时可能是无序的。TCP协议将会为你排好序。
UDP不提供任何有序性或序列性的保证。UDP尽最大努力交付,数据包将以任何可能的顺序到达。
TCP三次握手
序号字段:占4B,报文段序号从301开始,携带数据共有100B,表明本报名端数据第一个字节的序号是301,最后一个字节的序号是400。
确认号字段:占4B(字节).TCP有确认机制,接收端需要给发送端发送确认号,确认号等于N,表明到序号N-1为止的所以暑假都已经正确收到
如客户端收到服务端发送报文段,序号字段值为501,数据长度是200B(序号501-700),表明收到序号700为止的数据,下一个数据序号是701,确认报文段中确认号设置为ack=700+1;
确认比特位ACK:只有当ACK=1时,确认号字段才有效;当ACK=0时,确认号无效。TCP规定,一旦建立连接,所以传送的报文段都必须把ACK置1.
同步比特位SYN:置为1,表示这是一个连接请求或者连接接受报文。
终止比特FIN:释放一个连接,当FIN=1时,表明此报文段的发送端数据已faso
1.客户端向服务器发出连接请求报文段,其首部中的同步位SYN=1,并选择序号seq=x(x可以是0,100代表一个序号)表明传送数据时的第一个数据字节的序号是x
2.服务器收到了数据报文,并从SYN位位1知道这是一个建立连接的请求,发回确认。在确认报文段中使用SYN=1,ACK=1,其确认号ack=x+1,自己选择的序号seq=y。
3.客户端收到报文段后向服务端给出确认,其ACK=1,ack=y+1。服务端收到主机A的确认后,通知上层应用进程,建立连接。
http协议和https协议的不同和其大概原理

智能指针
在C++中,动态内存的管理是用一对运算符完成的:new和delete,new:在动态内存中为对象分配一块空间并返回一个指向该对象的指针,delete:指向一个动态独享的指针,销毁对象,并释放与之关联的内存。
动态内存管理经常会出现两种问题:一种是忘记释放内存,会造成内存泄漏;一种是尚有指针引用内存的情况下就释放了它,就会产生引用非法内存的指针。
智能指针的行为类似常规指针,重要的区别是它负责自动释放所指向的对象。标准库提供的两种智能指针的区别在于管理底层指针的方法不同,shared_ptr允许多个指针指向同一个对象,unique_ptr则“独占”所指向的对象。

#C/C++##学习路径#
全部评论

相关推荐

4 12 评论
分享
牛客网
牛客企业服务