一、TCP为什么是可靠传输
检验和:检验发送方和接收方是否相同
确认应答:ACK和序列号机制保证数据的完整性
超时重传
连接管理
最大消息长度
流量控制
拥塞控制
二、TCP和UDP的区别
tcp是面向连接的可靠传输,udp是面向无连接的不可靠传输
Tcp适用于对传输数据准确、而对速度没有很高要求场景,udp适用于对实时性要求很高的场景
tcp是面向字节流的协议,udp是面向报文的协议
Tcp仅仅支持一对一通信,udp支持一对一、一对多、多对多等通信方式
Tcp中的超时重传、拥塞控制、流量控制来保证数据的安全性,同时网络拥塞的话,数据传输变慢,而udp即使在网络拥塞的时候,传输速度也不慢
三、面向对象的三大特征
封装:将客观事物进行抽象,将其属性和方法合成一个类,封装了成员函数和成员变量,同时又实现了对属性和方法的权限控制,降低了与外界的耦合度
继承:子类继承父类的各种属性和方法,同时子类还可以在父类的基础上重新定义和扩展父类的属性和方法,使其具有不同的功能,继承提高了代码的复用性及可维护性
多态:统一调用语句在父类和子类间使用具有不同的表现形式,可以使用同一段代码处理不同类型的对象,提高代码的复用性
四、进程和线程的区别
共同点:都为操作系统提供了并发执行力
不同点:
调度资源:线程是系统调度的最小单位,进程是资源分配的最小单位
地址空间:同一进程创建多个线程共享进程资源;进程的地址空间相互独立
通信方面:线程通信将对简单,只要通过全局变量就可以实现,但需要考虑临界资源访问的问题;进程间的通信比较复杂,需要借助进程间的通信机制(3~4G的内核空间)
安全性方面:线程安全性差一些,当进程结束时会导致所有线程退出,进程相对安全
五、深浅拷贝的问题
浅拷贝:增加一个指向相同堆区的指针,这将导致在析构的时候会重复释放,默认的拷贝构造和运算符重载都是浅拷贝
深拷贝:拷贝的时候将内容申请内存,重新拷贝一份,放到内存中,指针指向这个新拷贝的部分,这样就不会出现析构的时候重复释放问题了
简单来说:
浅拷贝是讲对象的指针进行简单的复制,原对象和副本指向的是相同的资源
深拷贝是新开辟一块空间,将原对象的资源复制到新的空间中,并且返回该空间的地址
六、进程有哪几种状态
创建:一个进程启动,首先进入创建状态,需要获取系统资源创建进程管理模块完成资源分配
就绪状态:在创建状态完成之后,进程已经准备好,处于就绪状态,但是还未获得处理器资源,无法运行
运行状态:获取处理器资源,被系统调度,当具有时间片开始处于运行状态,如果进程的时间片用完了就进入就绪态
阻塞状态:在运行状态期间,如果进行了阻塞操作,此时进程暂时无法操作进入到了阻塞状态,在这些操作完成后就进入就绪状态。等待再次获取处理器资源,被系统调度,当具有时间片就进入运行态
终止状态:进程结束或者被系统终止,进入终止态
七、堆区和栈区的区别
管理方式:栈区是由编译器自动管理,无需手动控制。堆区的分配和释放都是由程序员控制的
空间大小:栈的空间是要小于堆区的,堆区内存几乎没有限制,栈区一般是有一定的空间大小的
碎片问题:堆分配和释放都是由程序员控制的,频繁操作势必会造成内存空间的不连续,从而造成大量的内存碎片,使程序效率降低。栈是先进后出的数据结构,在某一数据弹出之前,他之前的所有数据都已经弹出
八、TCP粘包和拆包的原因
要发送的数据大于tcp发送缓冲区剩余空间大小,将发生拆包