当前位置: 首页 > news >正文

新手做网站应该注意什么/宁波百度推广优化

新手做网站应该注意什么,宁波百度推广优化,我想做个卷帘门网站怎么做,宁波网站设计哈工大计算机网络传输层详解之:流水线机制与滑动窗口协议 哈工大计算机网络课程传输层协议详解之:可靠数据传输的基本原理哈工大计算机网络课程传输层协议详解之:TCP协议哈工大计算机网络课程传输层协议详解之:拥塞控制原理剖析 …

哈工大计算机网络传输层详解之:流水线机制与滑动窗口协议

  • 哈工大计算机网络课程传输层协议详解之:可靠数据传输的基本原理
  • 哈工大计算机网络课程传输层协议详解之:TCP协议
  • 哈工大计算机网络课程传输层协议详解之:拥塞控制原理剖析

在上一节中我们逐步分析了可靠传输协议的设计过程,最后讲到rdt3.0的设计和实现机制。但是rdt3.0为了实现可靠性,牺牲了很大一部分性能,其中最主要的原因就在于停止等待协议,在发送完数据后,发送端需要等待至少RTT后才能收到ACK,期间什么都不能做。

因此,我们需要设计方案来解决这个问题,这就是本节所讲述的内容。

流水线机制:提高资源利用率

在这里插入图片描述

在之前的停止等待协议中,发送端每发送一个数据包,都会等待至少RTT的时间。现在采用流水线机制,每一次发送端多发送几个数据包,比如上图中的发送3个数据包。即每次发送端发完3个数据包后,再执行停止等待协议,此时的发送方利用率(发送方发送时间百分比)就相当于原先的3倍。

流水线协议

现在利用流水线机制,允许发送方在发送完数据包后,不用立即停止等待,而是可以在发送多个数据包后,再执行停止等待协议,等待每个数据包的ACK反馈。

允许发送方在收到ACK之前连续发送多个分组

  • 需要更大的序列号范围,只有原先的0和1显然是不够了
  • 发送方和/或接收方需要更大的存储空间以缓存分组。原来的接收方只需要一个分组的存储空间,但是现在需要多个分组的缓存空间。

在这里插入图片描述

左边就是只有一个数据包发送的过程。右图就是流水线机制下,多个数据包的发送和接收。

滑动窗口协议

窗口:用来管理那些发送端已经发出,但还未来得及确认的数据包。

  • 允许使用的序列号范围(每个数据包都对于一个序列号,因此滑动窗口中是已发送的数据包,也就表示使用的序列号范围)
  • 窗口尺寸为N:最多有N个等待确认的消息。N也表示发送端一次允许发送的最大数据包个数。

滑动窗口:随着协议的运行,窗口在序列号空间内向前滑动

滑动窗口协议:GBN、SR

在这里插入图片描述

如上图所示,窗口左边表示的是已经发送,且已经得到ACK确认的数据分组。 黄色部分表示已经发送,带还没确认的数据分组。蓝色则表示还可以使用的序列号范围(最大为N,蓝色表示接下来发送可以使用的序列号范围)。当蓝色部分用完后,就必须等待窗口内的数据包得到ACK确认后,窗口继续右移,来发送加下来的序列号数据包。

接下来,我们分别对GBN和SR两种滑动窗口协议进行介绍,介绍其实现原理和区别,便于我们理解滑动窗口协议的改进。

滑动窗口协议:Go-Back-N协议(GBN)

发送方

  • 分组头部包含k-bit序列号
  • 窗口尺寸为N,最多允许N个分组未确认。

在这里插入图片描述

如上所述,窗口左边的绿色部分表示已经获得ACK确认的数据分组。黄色的表示已经发送,但未ACK确认的分组,蓝色部分表示继续发送分组可使用的序列号范围,比如此时如果需要再发送一个数据分组,使用的序列号就是图中nextseqnum对于的序列号值。最右边的白色是还不能使用的序列号,需要等待窗口滑动右移才能到达。

累计确认机制

对于GBN协议来说,发送端对于ACK的确认采用的是累计确认的方式。

  • ACK(n):表示确认到序列号n(包含n)的分组均已被正确接收。即n-1、n-2,…往前的分组都已经被正确接收了。
  • 为传输中的分组设置计数器(timer)
  • 超时(timeout)时间:重传序列号大于等于n,还未收到ACK的所有分组。

GBN发送方的有限状态机示例如下图所示:

在这里插入图片描述

  • if(nextseqnum < base+N)表示如果下一个序列号小于窗口的最大范围,说明还可以继续发送数据包,则取nextseqnum的序列号来构造数据包并发送。同时,如果在窗口的最左侧时,启动当前窗口内流水线发送数据包的定时器。可以看到,整个窗口内发送数据包时,只会有一个定时器。
  • refuse_data:如果窗口内的序列号已经用光了,也就是发送的数据包序列号达到了窗口的最大值。此时,发送方再需要发送数据包时,会被拒绝refuse。
  • timeout如果触发了timeout超时,则会从窗口最左侧的数据包开始,逐个重发,知道窗口最右端。
  • rdt_rcg && notcorrupt由于是累计确认,在收到ACK(n)后,表示认到序列号n(包含n)的分组均已被正确接收,此时起始偏移base会更新为所收到的确认号ACK(n)的值+1(n+1)。这里,也就是窗口滑动的原理过程了。

GBN接收方的有限状态机示例如下图所示:

在这里插入图片描述

ACK机制:发送拥有最高序列号的、已被正确接收的分组的ACK(累计重传机制)

  • 可能产生重复ACK
  • 只需要记住唯一的expectedseqnum。因为流水线机制可能会使到达接收方的数据包序列号乱序,此时接收方只需记住期待接收的最大序列号即可,比如期待序列号为5,此时收到了一个序列号为7的数据包,此时GBN会直接丢弃掉这些已经收到的但不是当前期望的分组序号。丢弃完后,还是需要做ACK的,所以重新确认序列号最大的按序到达的分组。比如上述例子的,收到序列号7,期望5,应该确认的是序列号4,因为5之前的都已经收到了。

乱序到达的分组:

  • 直接丢弃—>接收方没有缓存
  • 重新确认序列号最大的、按序到达的分组

GBN示例

在这里插入图片描述

假定窗口的大小是4,所以在发送方可以发送pkt0、pkt1、pkt2、pkt3,发送完pkt3后达到了窗口的最大序列号,因此发送端开始停止等待ACK反馈。

前两个pkt0、pkt1都正确到达了分组,pkt2在发送过程中丢失了,而pkt3也正确到达了接收端。在接收端接收到pkt0、pkt1之后,接收端期望的序列号expectedseqnum应该为2,而此时pkt3分组到达了接收端,但不是接收端期望的序列号。按照上面的分析我们知道,此时接收端会丢弃序列号3对应的分组,然后发送一个ACK1的返回(因为期望序列号是2,所以发送ACK1表示序列号2前面的数据分组都收到了)。

但是这个ACK1在返回时也不幸丢失了。由于pkt1的分组和该分组的ACK1的反馈被成功接收到了,此时发送端的窗口就可以向右移动两位,有了序列号来发送pkt4、pkt5。

在发送完pkt4、pkt5之后,由于pkt2的ACK一直没有收到,所以发送端触发了timeout超时,又由于上一次接收到的最大ACK确认序列号为1,即序列号为1和1之前的都已经确认了,所以发送方会重发序列号为1之后的分组,即上图中的pkt2、pkt3、pkt4、pkt5。对于接收方收到的重复分组,会根据序列号进行去重,所以不怕分组重复。

练习题: 数据链路层采用后退N帧(GBN)协议,发送方已经发送了编号为0~7的帧。当计时器超时时,若发送方只收到0,2,3号帧的确认,则发送方下需要重发的帧数是多少?分别是哪几个帧?

解: 根据GBN协议工作原理,GBN协议的确认是累计确认,由于发送端已经得到的最大ACK确认序列号为3,表示序列号3和之前的分组都已经确认(即使ACK1的确认序列号可能在反馈途中丢失了)。因此,发送方需要重新下发的帧数是4个,依次分别是4、5、6、7号帧。

滑动窗口协议:Selective Repeat协议(SR)

GBN有什么缺陷?

通过上面的介绍也能发现,GBN一个比较明显的缺陷就是,当需要重传时,可能一次会重传很多个分组,比如当某个序列号n的分组丢失时,发送端会重传序列号n和n之后到窗口右侧最大序列号之间的数据分组。 这会导致网络中充斥着很多这些不必要的重复分组,造成网络拥塞,性能变差。所以一个显然的改进就是,我们不使用累计确认机制,而是对每个分组单个确认,同时不丢弃那些乱序的分组,接收端缓存起来。

SR协议

接收方

  • 接收方对每个分组单独进行确认。只要这个分组到达,就会返回一个ACK确认。这点跟GBN的不同在于,GBN的确认是累计确认,在确认时会有一个期望序列号expectedseqnum,对于接收端接收到的分组序号不是期望序号的,是直接丢弃不返回ACK的。只有在是期望序号时,才返回对应序号的ACK,并便是这个序号之前的分组都正确收到了,这是上面GBN采用的ACK累计确认机制。
  • 接收方设置缓存机制,缓存乱序到达的分组。 因为现在分组是乱序到达的,还不是一个完整的数据报文,所以不能直接向上交付,需要先缓存起来。
  • 接收方也有一个窗口

发送方

  • 发送方只重传那些没收到ACK的分组。
  • 发送方为每个分组设置单独的定时器。
  • 发送窗口:包含N个连续的序列号,限制已发送且未确认的分组。

SR协议中发送方和接收方的窗口如下所示:

在这里插入图片描述

图(b)表示的是接收方的窗口。接收方的窗口大小也是N,窗口前面是那些已经按序到达成功交付的数据分组。窗口里的灰色部分表示接收方期望收到的,但是还没收到的分组序号。红色的则表示那些乱序到达的分组,这些乱序到达的分组,此时接收方会缓存起来,并返回ACK。蓝色的部分表示接收方可以接收的序列号范围。

从上两个图可以发现,在SR协议中,发送方和接收方的窗口不是同步的,发送方的窗口可能是滞后于接收端的(因为可能某些已发送的分组还没收到ACK)。

SR协议的整体逻辑如下所示:
在这里插入图片描述

  • 对于发送方来说,如果窗口内收到了序列号为N的ACK,且该序列号是窗口中最小序列号的还没被ACK确认的序列号,则此时该分组确认后,窗口会向右滑动到下一个还没确认ACK的序列号最小的分组位置。
  • 对于接收方来说,如果接收到的分组序列号是在接收窗口序列号范围内的,会对该分组返回ACK,如果这个分组是乱序到达的,则缓存起来。如果是按序到达的,则跟其它按序到达的分组拼接起来,并且如果这个分组序号是接收端窗口中的未接收的最小序号,则窗口向右移动到下一个还未接收的最小序号位置。
  • 如果接收端接收到的分组序号不在接收端窗口范围内,同样要发送ACK。因为这种情况可能是之前返回的ACK丢失了,发送端触发了超时操作重传了分组,因此这种情况仍然要重新发ACK。

SR协议示例

在这里插入图片描述

  1. 上图中,发送方连续发送pkt0~pkt3的数据分组,首先接收方接收接收到pkt0,向上层交付,并返回ACK0,同时窗口右移。pkt1同理。但是pkt2在发送过程中丢失了,接收方接收端乱序到达的pkt3。因此SR协议的独立确认机制,此时接收方会返回对pkt3的确认ACK。
  2. 当发送方收到pkt0、pkt1的确认ACK后,同样的,窗口会右移,继续发送数据pkt4、pkt5。由于pkt2的ACK一直没有返回,因此发送方的窗口最左侧移动到序号2的位置就不动了。
  3. 在这个过程中,接收方会接收到发送方窗口右移后的pkt4、pkt5的数据分组,由于SR协议有缓存机制,因此会对乱序到达的分组缓存起来,并返回对应序号的确认ACK。但此时,由于窗口中序列号最小的pkt2还未接收到,所以接收端窗口不会右移。
  4. 终于,发送端pkt2分组的定时器超时了,触发重传。
  5. 等到pkt2到达接收端后,由于这个序号是窗口内最小未到达的序号,并且其他序号的分组都已经收到了,此时接收方会将窗口内的分组一起交付给上层。同时窗口会右移到下一个未接收的最小序列号的位置,也就是pkt6的位置,如上右图最下边所示。
  6. 对于发送端来说,第二次对于pkt2分组的确认ACK被正确收到了,那么窗口也会右移到下一个最小未确认ACK的序号所在的位置,也就是pkt6的位置。

SR困境

在这里插入图片描述

上图给出了a、b两种场景,图中窗口大小是3,序列号只包括0、1、2、3四个序列号,循环使用。思考接收方能区分开上面两种不同的场景吗?

  • 在(a)场景中,接收方对pkt0、1、2的ACK都丢失了,在超时后,发送端会重发pkt0
  • 在(b)场景中,接收方在收到ack0、1确认后,窗口右移,并继续发送后面的pkt3、pkt0,而这时pkt3的分组丢失了。
  • 两种场景的共性在于,接收端的窗口位置一样,而且在某一时刻,接收端都接收到了一个pkt0的分组。

那么,在(a)场景中发送方重发分组0,接收方收到后会如何处理?

从上帝视角我们直到,这两种场景是不一样的,(a)场景中的pkt0是重传,而(b)场景下的分组是正常的数据分组。但是接收端并不能区分这两种场景,就有可能导致错误。比如在(a)场景下,接收端可能以为这次收到的pkt0是正常的数据分组进行了接收,并按序向上交付。但此时,这个分组并不是正确按序到达的分组,就会导致上层数据解析错误。

之所以会导致上述的问题,显而易见,是由于我们的序号太少,而窗口尺寸相对序号又比较大。因此在SR协议中,需要考虑序号个数与窗口大小之间的关系。

序列号个数与窗口尺寸需满足什么关系?

Ns+Nr <= 2k

上式中k表示序列号的位数,Ns表示发送方窗口尺寸,Nr表示接收方窗口尺寸。

相关文章:

哈工大计算机网络传输层详解之:流水线机制与滑动窗口协议

哈工大计算机网络传输层详解之&#xff1a;流水线机制与滑动窗口协议 哈工大计算机网络课程传输层协议详解之&#xff1a;可靠数据传输的基本原理哈工大计算机网络课程传输层协议详解之&#xff1a;TCP协议哈工大计算机网络课程传输层协议详解之&#xff1a;拥塞控制原理剖析 …...

Unity Mac最新打苹果包流程

作者介绍&#xff1a;铸梦xy。IT公司技术合伙人&#xff0c;IT高级讲师&#xff0c;资深Unity架构师&#xff0c;铸梦之路系列课程创始人。 IOS详细打包流程1.申请APPID2.申请开发证书3.创建描述文件 IOS详细打包流程 1.申请AppID 2.创建证书 3.申请配置文件&#xff08;又名描…...

【MySQL数据库 | 第二十篇】explain执行计划

目录 前言&#xff1a; explain&#xff1a; 语法&#xff1a; 总结&#xff1a; 前言&#xff1a; 上一篇我们介绍了从时间角度分析MySQL语句执行效率的三大工具&#xff1a;SQL执行频率&#xff0c;慢日志查询&#xff0c;profile。但是这三个方法也只是在时间角度粗略的…...

学Python能做哪些副业?我一般不告诉别人!建议存好

前两天一个朋友找到我吐槽&#xff0c;说工资一发交完房租水电&#xff0c;啥也不剩&#xff0c;搞不懂朋友圈里那些天天吃喝玩乐的同龄人钱都是哪来的&#xff1f;确实如此&#xff0c;刚毕业的大学生工资起薪都很低&#xff0c;在高消费、高租金的城市&#xff0c;别说存钱&a…...

简化 Hello World:Java 新写法要来了

OpenJDK 的 JEP 445 提案正在努力简化 Java 的入门难度。 这个提案主要是引入 “灵活的 Main 方法和匿名 Main 类” &#xff0c;希望 Java 的学习过程能更平滑&#xff0c;让学生和初学者能更好地接受 Java 。 提案的作者 Ron Pressler 解释&#xff1a;现在的 Java 语言非常…...

【服务器】springboot实现HTTP服务监听

文章目录 前言1. 本地环境搭建1.1 环境参数1.2 搭建springboot服务项目 2. 内网穿透2.1 安装配置cpolar内网穿透2.1.1 windows系统2.1.2 linux系统 2.2 创建隧道映射本地端口2.3 测试公网地址 3. 固定公网地址3.1 保留一个二级子域名3.2 配置二级子域名3.2 测试使用固定公网地址…...

浅谈常见的加密算法及实现

浅谈常见的加密算法及实现 简介&#xff1a; 随着公司业务的发展&#xff0c;系统用户量日益增多&#xff0c;系统安全性问题一直在脑子里反复回旋&#xff0c;以前系统用户少影响面小&#xff0c;安全方面也一直没有进行思考和加固&#xff0c;现如今业务发展了&#xff0c;虽…...

FTP协议详解

简介 FTP&#xff08;File Transfer Protocol&#xff0c;文件传输协议&#xff09; 是 TCP/IP 协议组中的协议之一。FTP协议包括两个组成部分&#xff0c;其一为FTP服务器&#xff0c;其二为FTP客户端。其中FTP服务器用来存储文件&#xff0c;用户可以使用FTP客户端通过FTP协…...

网络安全|渗透测试入门学习,从零基础入门到精通—渗透中的开发语言

目录 前面的话 开发语言 1、html 解析 2、JavaScript 用法 3、JAVA 特性 4、PHP 作用 PHP 能做什么&#xff1f; 5、C/C 使用 如何学习 前面的话 关于在渗透中需要学习的语言第一点个人认为就是可以打一下HTML&#xff0c;JS那些基础知识&#xff0c;磨刀不误砍柴…...

八大排序算法之归并排序(递归实现+非递归实现)

目录 一.归并排序的基本思想 归并排序算法思想(排升序为例) 二.两个有序子序列(同一个数组中)的归并(排升序) 两个有序序列归并操作代码: 三.归并排序的递归实现 递归归并排序的实现:(后序遍历递归) 递归函数抽象分析: 四.非递归归并排序的实现 1.非递归归并排序算法…...

基于SpringBoot+Html的前后端分离的学习平台

✌全网粉丝20W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取项目下载方式&#x1f345; 一、项目背景介绍&#xff1a; 在知识大爆炸的现代,怎…...

MySQL实战解析底层---“order by“是怎么工作的

目录 前言 全字段排序 rowid排序 全字段排序 VS rowid排序 前言 在开发应用的时候&#xff0c;一定会经常碰到需要根据指定的字段排序来显示结果的需求以举例市民表为例&#xff0c;假设你要查询城市是“杭州”的所有人名字&#xff0c;并且按照姓名排序返回前1000个人的姓…...

Linux和Shell:开源力量与命令行之美

目录 一、概述二、Linux的简单介绍三、Shell的简单介绍四、Linux和Shell的应用领域五、Shell编程结语&#xff1a; 一、概述 Linux和Shell是开源世界中不可或缺的两个重要组成部分。Linux作为一种自由和开放的操作系统&#xff0c;以其稳定性、安全性和可定制性而备受推崇。而S…...

服务负载均衡Ribbon

服务负载均衡Ribbon Ribbon 介绍Ribbon 案例Ribbon 负载均衡策略Ribbon 负载均衡算法设置自定义负载均衡算法 Ribbon 介绍 Ribbon 是一个的客服端负载均衡工具&#xff0c;它是基于 Netflix Ribbon 实现的。它不像 Spring Cloud 服务注册中心、配置中心、API 网关那样独立部署…...

hibernate vilidator主要使用注解的方式对bean进行校验

hibernate vilidator主要使用注解的方式对bean进行校验&#xff0c;初步的例子如下所示&#xff1a; package com.learn.validate.domain; import javax.validation.constraints.Min; import org.hibernate.validator.constraints.NotBlank; public class Student { //在需要校…...

华为HCIP第一天---------RSTP

一、介绍 1、以太网交换网络中为了进行链路备份&#xff0c;提高网络可靠性&#xff0c;通常会使用冗余链路&#xff0c;但是这也带来了网络环路的问题。网络环路会引发广播风暴和MAC地址表震荡等问题&#xff0c;导致用户通信质量差&#xff0c;甚至通信中断。为了解决交换网…...

Jmeter(二) - 从入门到精通 - 创建测试计划(Test Plan)(详解教程)

1.简介 上一篇文章已经教你把JMeter的测试环境搭建起来了&#xff0c;那么这一篇我们就将JMeter启动起来&#xff0c;一睹其芳容&#xff0c;首先我给大家介绍一下如何来创建一个测试计划&#xff08;Test Plan&#xff09;。 2.创建一个测试计划&#xff08;Test Plan&#x…...

Autosar诊断实战系列06-详解Dem中Event的NvM存储

本文框架 前言1. Dem触发NvM存储的基本流程2. Dem触发NvM存储的layout格式及内容2.1 Event在NvM中的layout格式2.2 Event在NvM中的存储内容2.3 Dem中Event与DTC的存储关系3.组合式Event(多个Event对应一个DTC)的存储处理3.1 仅分配一个Memory Entry3.2 检索方式3.3 一对一方式前…...

04 todoList案例

React全家桶 一、案例- TODO List 综合案例 功能描述 动态显示初始列表添加一个 todo删除一个 todo反选一个 todotodo 的全部数量和完成数量全选/全不选 todo删除完成的 todo 1.1 静态组件构建 将资料包中的todos_page/index.html中核心代码添加到Todo.jsx文件中&#xff0c;…...

海睿思分享 | 浅谈企业数据质量问题

一、数据质量问题场景 在日常工作中&#xff0c;业务领导经常通过BI系统来了解各项业务的业绩情况。倘若某天&#xff0c;他打开某张核心报表&#xff0c;发现当日某个区域的数据一直是空白的。BI开发人员经过几个小时的排查分析&#xff0c;发现是当日该区域的销售数据存在产…...

神经网络:激活函数

在计算机视觉中&#xff0c;激活函数是神经网络中的一种非线性函数&#xff0c;用于引入非线性变换和非线性特性到网络中。激活函数的作用、原理和意义如下&#xff1a; 1. 引入非线性变换&#xff1a; 神经网络的线性组合层&#xff08;如卷积层和全连接层&#xff09;只能表…...

图像色彩增强相关论文阅读-Representative Color Transform for Image Enhancement(ICCV2021)

文章目录 Representative Color Transform for Image EnhancementAbstractIntroductionRelated workMethod实验Conclusion Representative Color Transform for Image Enhancement 作者&#xff1a;Hanul Kim1, Su-Min Choi2, Chang-Su Kim3, Yeong Jun Koh 单位&#xff1a;S…...

Elasticsearch介绍与应用

Elasticsearch介绍与应用 Elasticsearch的官方文档。 Elasticsearch官网参考文档&#xff1a;https://www.elastic.co/guide/index.html Elasticsearch官方下载地址&#xff1a;https://www.elastic.co/cn/downloads/elasticsearch mvnrepository依赖库地址&#xff1a;http…...

JavaEE规范

Servlet&#xff1a;用于开发 Web 应用程序的 API&#xff0c;定义了处理 HTTP 请求和响应的方式。JSP&#xff08;JavaServer Pages&#xff09;&#xff1a;一种在服务器端生成动态网页的技术&#xff0c;允许将 Java 代码嵌入到 HTML 页面中。(注意JSP本质就是一个Servlet)J…...

嵌入式实时操作系统的设计与开发New(八)

创建线程 用户在基于RTOS开发应用程序前&#xff0c;首先要创建线程。 用户创建一个线程时须指定用户希望采用的调度策略。 例如&#xff0c;用户想创建一个周期性执行的线程&#xff1a; acoral_period_policy_data_t* data; data acoral_malloc(sizeof(acoral_period_poli…...

MySQL事务相关笔记

杂项 InnoDB最大特点&#xff1a;支持事务和行锁&#xff1b; MyISAM不支持事务 介绍 一个事务是由一条或者多条对数据库操作的SQL语句所组成的一个不可分割的单元&#xff0c;只有当事务中的所有操作都正常执行完了&#xff0c;整个事务才会被提交给数据库。事务有如下特性…...

如何利用AI高效率快速调色

在设计行业中&#xff0c;时间是非常宝贵的资源&#xff0c;而设计师们常常需要应对繁忙的工作日程和紧迫的截止日期。为了提高工作效率和节省时间&#xff0c;越来越多的设计师开始利用人工智能&#xff08;AI&#xff09;技术中的高效调色功能。本文将介绍如何利用AI高效率快…...

数据结构--顺序表的基本操作--插入 and 删除

数据结构–顺序表的基本操作–插入 顺序表的插入操作 实现目标 ListInsert(&L,i,e):插入操作。在表L中的第i个位置上插入指定元素e。 typedef struct {int data[MaxSize];int len; }Sqlist;代码实现&#xff1a; #include <stdio.h> #include <stdlib.h> …...

BCSP-玄子Java开发之Java Web编程CH01_初识动态网页

BCSP-玄子Java开发之Java Web编程CH01_初识动态网页 1.1 B/S架构 B/S架构&#xff1a;浏览器/服务器 程序完全部署在服务器上使用浏览器访问服务器无需单独安装客户端软件 为什么要使用B/S架构 B/S与C/S比较B/S架构C/S架构软件安装浏览器需要专门的客户端应用升级维护客户…...

【软件教程】农林生环、水文、海洋、水环境、大气科学、人工智能、碳中和、碳排放、3S、R与统计等软件模型

本文涉及领域水文水资源、大气科学、农林生态、地信遥感、统计分析、编程语言等... 从软件基础到实践案例应用操作&#xff0c;手把手教学&#xff0c;提供永久回放观看和助学群长期辅助指导。适合课题组人员一站式学习&#xff0c;科研人员技术提升、企业单位工程项目、高校论…...