TCP中的拥塞控制
在TCP传输过程中,发送端开始发送数据的时候,如果刚开始大量发送数据,那么可能造成一些问题,网络可能在开始的时候非常的拥堵,如果给网络中再次加入大量的数据,那么这个拥堵就会加剧。
拥堵加剧会产生大量的丢包,就会产生大量的超时重传,严重影响传输速率
所以TCP引入了慢启动机制,在开始发送数据的时候,先发送少量的数据探路,探清当前的网络状态如何
在决定使用多大的速度进行传输
**拥塞窗口:**发送刚开始定义拥塞窗口为1,每次收到ACK应答 拥塞窗口加一
在发送数据之前,首先将拥塞窗口和接收端返回的窗口大小进行比对,取最小值作为实际发送的窗口
拥塞窗口的增长是指数级别的,慢启动机制只是说明在开始的时候发送的少,发送的慢,但是增长的速度是很快的,
为控制拥塞窗口的增长,不能单纯的是拥塞窗口加倍
设置一个拥塞窗口阈值,当拥塞窗口超过阈值以后,不再按照指数来增长,而是线性的增长
在慢启动开始的时候,如果慢启动的阈值等于窗口的最大值,一旦发生网络阻塞,发生超时重传
慢启动的阈值会降低为原来的一半,同时拥塞窗口设置为1
拥塞控制是TCP在传输的尽可能的将数据传输,并且避免拥塞的一系列问题,是可靠性的保证同时也维护了传输的高效型
C++编译过程中的动态链接和静态链接有什么区别?动态链接的流程是怎样的
动态链接和静态链接最大的区别就在于链接的时机不同
动态链接的进行在程序执行时链接,静态链接在形成可执行程序之前的链接
流程
预处理->编译->汇编->链接
预处理 编译器把c程序的头文件编译进来,还有宏的替换
编译 这个阶段主要做词法分析,语法分析,语义分析,在检查无错误之后,把代码翻译成为汇编语言
汇编 汇编语言变成机器语言
链接 将编译阶段生成的文件链接为一个整体的文件
TCP和UDP的不同点
1.TCP提供面相链接的传输,通信之前建立连接(三次握手);UDP提供无连接的传输,通信之前不需要连接
2.TCP提供可靠的传输(有序,无差错,不丢失,不重复);UDP提供不可靠的传输
3.TCP面相字节流的传输,每次传输之前,先把信息分割成组,到达接收端在将其充足,UDP面相数据的传输,没有分组和充足
4.TCP提供拥塞控制和流量控制机制,UDP不提供拥塞控制和流量控制机制
5.TCP只是点到点之间的传输,UDP支持一对一,多对多,一对多,多对一
6.TCP的逻辑通信是双全工的可靠信道,UDP是不可信道
7.TCP首部字节开销20字节,UDP首部开销8字节
TCP开销大 稳定 传输速率慢 开销大 适合完整性要求高 不追求效率(大文件传输,文件传输)
UDP 传输速度快,效率高,开销小 不稳定 实时性要求较高场合追求速度(游戏,视频通话,视频电话等)
用UDP如何保证数据的完整性
外加校验码来保证正确性,加顺序码保证完整性,相当于把TCP保证完整性和可靠性的东西自己去完成,不需要做的太复杂
值类型和引用类型的区别
1.管理机制: 值类型是操作系统负责管理,作用于结束只有操作系统会自动释放,引用类型是垃圾回收器负责管理
2.内存分配: 值类型:被分配到变量声明的地方,局部变量分配到栈上
引用类型分配到托管堆上,变量 存储在栈中
3.赋值方式 值类型:赋值变量包含的值,引用类型:赋值对象引用的地址
4.基类值类型:继承System.ValueType;System.ValueType又继承自System.Object
引用类型:继承自System.Object
结构体和类的区别
c++
1.语法定义的区别一个是class 一个是struct
2.声明字段是否可以设置初值 结构体中字段不可设置初值 类中字段可以设置初值
3.构造函数要求 结构体的构造函数中要求所有字段赋值,类的构造函数中无限制
4.所占空间 结构体是值类型在栈中分配空间,类是引用类型,在堆上分配空间
5.处理方式 struct变量使用完成之后会自动解除内存分配,class实例有垃圾回收机制保证内存回收处理
c++中结构体与类的最大区别就是 结构体继承默认访问权限为public class为private
c#
结构体是值类型,类是引用类型
结构体存储在栈中,类存储在堆中
结构体不能继承不能写构造函数,不能写为虚 抽象 保护类型
结构体不能扩展,不能继承与被继承 而c++中不做限制
C#中的GC
GC就是内存的垃圾收集器,以应用程序root为基础,遍历应用程序在Heap上动态分配的所有对象,通过辨识他们是否被引用来确定哪些对象是死亡的,哪些是仍需要被使用的,已经不再被应用程序的root或者是别的对象所引用的就是已经死亡的对象,即所谓垃圾
优点:
1.提高了软件开发的抽象度
2.程序员可以将精力集中在实际问题上,而不是专门分心来管理内存的问题
3.可以使模块的接口更加清晰,减少模块之间的耦合
4.大大减少了因为认为不当的处理而带来的bug
5.是内存更加的使用高效
总体来说就是GC把程序员从复杂的内存问题中解放了出来,从而提高了软件的开发速度,质量和安全性
以上即是最近我刷面经遇到的高频问题,我都总结下来
希望对大家有所帮助