网络原理
网络原理
传输层
UDP
特点
特点:无连接,不可靠,面向数据报,全双工
格式
怎么进行校验呢?
把UDP数据报中的源端口,目的端口,UDP报文长度的每个字节,都依次进行累加
把累加结果,保存到两个字节的变量中(校验和)
加着加着,可能就溢出了,但是溢出也无所谓,所有字节都加一遍,最终就得到了校验和
传输数据的时候,就会把原始数据和校验和一起传递过去
接收方接收到数据,同时也收到了发送端送过来的校验和(旧的校验和)
接收方按照同样的方式再计算一次,得到新的校验和
如果旧的校验和跟新的校验和相同,就可以视为数据传输过程中是正确的
如果不同,就认为传输过程中出错了
数据相同=>校验和相同
校验和不同=>数据不同
但是
校验和相同,难道数据就一定相同嘛?不一定!!!
正好可能某个字节多了一个1,后面一个字节少了一个1,两者相加,正好抵消
CRC校验确实不那么严谨,但是在工程上也足够用了
也有一些其他的算法进行校验,可以达到更高的精度,但是需要更多的代价,因此没必要
如果一个UDP报文出错了怎么办?
丢弃!(而TCP出错了就可以要求重新发,这也是TCP可靠性的一种体现!)
TCP
1.确认应答(可靠性机制)
TCP的可靠传输是内核实现的,写代码的时候是感知不到的
可靠传输的实现机制是 确认应答(我给对方发消息,对方收到之后给我一个应答说确认收到了),确认应答是保证可靠传输的最核心的机制
再说一下确认应答的后发先至
比如我给女神发消息
本来是
结果是
当连续发多条数据的时候,可能就会出现后发先至的情况(一个数据报是先发的,反而后到了)
怎么产生的呢?
那该怎么解决呢?
,ikk
这里的tcp确认应答跟我们的例子有两个不同
1.针对字节进行编号的,而不是“条数”
2.应答报文也是要和收到的数据的序号相关联的,但是不是“相等”
网络上很多关于这个问题的解释是错误的!
比如tcp保证可靠性的核心机制是"三次握手"
2.超时重传(可靠性机制)
在传输数据的过程中,还可能发生**“丢包”,也就是发送一个数据,然后丢失了
在两个主机之间,网络的结构是非常复杂的,中间要经过很多路由器和交换机,这些路由器和交换机同时也连接着其他的路由器和交换机,这些结果错综复杂,传输的数据量也是不确定,有时候传输的数据可能会多点,有时候可能会少点
如果设备太繁忙,这些数据包就需要等待,如果等太久了,就可能被丢弃了,网络负载越高,线路就越繁忙,就越容易丢包
真的出现丢包怎么办呢?
重传!设置一个时间,在规定的时间里面没有收到回应,就重新传输这个数据,这个就叫做超时重传**
超时重传相当于针对确认应答进行的一个重要补充,因为要保证可靠性
丢包有两种可能性,如下图
如果网络已经出现严重故障,复位操作也无法成功,最终只能放弃连接,只能把自己保存的对端的信息删除掉了
核心就是一句话:确认应答是tcp保证可靠性的最核心机制;超时重传是TCP可靠性机制的有效补充
3.连接管理(可靠性机制)[网络这个模块最常考的部分]
1.建立连接(三次握手)
上述只是简单描述了一下三次握手,实际的三次握手比这个更加复杂,如下图
如果面试中面试官问你TCP三次握手是怎样的过程
三次握手的意义是啥,要完成什么目的?
三次握手也是保证可靠传输的一种重要途径
tcp的三次握手,就是要验证网络通信是否畅通,以及验证每个主机的发送能力和接收能力是否正常
2.断开连接(四次挥手)
连接双方,各自在内存中保存对端的相关信息,如果不需要连接了,就得及时释放上述存储空间
四次挥手的流程和三次握手非常相似
三次握手必然是客户端主动发起来的,但是四次挥手不一定,服务器也可以主动发起,大多数还是客户端发起的
还有一些极端情况,比如A在等待2MSL时间的过程中,B在反复重传FIN多次,这些FIN都丢了(理论上存在这种情况),这时候网络一定存在严重故障了,这个时候不具备可靠传输的前提条件了,因此A就单方面释放资源也无所谓了
再谈
TCP式如何实现可靠传输的?
确认应答
超时重传
连接管理(三次握手,四次挥手)
这些机制都起到了作用,在三次握手中,一旦路探完了,后续就没它事了,网络环境事多变的,可能这会畅通,过会就堵塞了,而确认应答,是保证每次传输的这些数据都是可靠的,因此真正起到决定性作用的还是确认应答!
那么TTL和MSL都是存活时间,有什么区别呢?
4.滑动窗口(提高传输效率)
更准确地说,是让TCP在可靠传输的前提下,效率别太拉跨,因为可靠传输效率已经降低了
使用滑动窗口,不能让TCP变得比UDP快,但是可以缩小差距
那么问题又来了,现在按照这种批量的方式传输,中间丢包了咋整?
对呀TCP来说提高效率必然不应该影响到可靠性
丢包分为两种:
1.数据丢了
2.ACK丢了
下面让我们来看看滑动窗口下的超时重传机制是怎么样的
快速重传是超时重传结合滑动窗口产生的变形操作(本质还是超时重传)
使用TCP的时候不一定就涉及到滑动窗口
如果你通信双方大规模传输数据,肯定是滑动窗口(此时按照快速重传来工作)
如果你通信双方大规模传输数据比较少,这个时候就不用滑动窗口了(仍然按照之前的超时重传来工作)
5.流量控制(作为滑动窗口补充)
滑动窗口的窗口越大,传输效率越高
但是窗口也不能无限大,如果窗口太大了,就可能使接收方处理不过来了,或者是使传输的中间链路处理不过来,这样就会出现丢包,就得重传了,这时候窗口大并没有提高效率,反而降低效率了
流量控制就是给滑动窗口睬踩刹车,避免窗口太大,导致接收方处理不过来
光考虑接收方,还是不够的,还需要考虑中间链路的处理能力(也就是拥塞控制)
6.拥塞控制
总的传输速率是一个木桶效应,取决于最短板
具体怎样衡量中间设备的转发能力呢?
此处并不会对中间设备的转发能力进行量化,而是把中间的设备都看成一个整体,采取“实验”的方式,动态调整,产出一个合适的窗口大小
使用一个较小的窗口传输,如果传输通畅,就调大窗口
使用一个较大的窗口传输,如果丢包,就调小
这是一种工程师思维
这样做也可以非常好的适应网络环境的动态变化
实际发送方的窗口=min(拥塞窗口,流量控制窗口)
拥塞控制喝流量控制共同限制了滑动窗口机制,可以让滑动窗口能够在保证可靠性的前提下,提高传输效率了
也就是说拥塞控制和流量控制也是保证可靠性的机制
7.延迟应答(提高传输效率的机制)
(延迟应答也是围绕滑动窗口来展开的)
是否有办法在条件允许的基础上,尽可能地提高窗口大小呢?
需要在返回ack的时候,拖延一点时间,利用拖延的这个时间,就可以给应用程序腾出来更多的消费数据的时间,这样接受缓冲区的剩余空间就更大了!
此处通过延时应答到底能提高多少速率,还是取决于接收方应用程序实际的处理能力
8.捎带应答
在延迟应答的基础上,引入的第一个进一步提高效率的方式
延迟应答使让ack传输的时机更慢
捎带应答使基于延迟应答,让数据进行合并
9.面向字节流(粘包问题)
属于TCP的特性,不过我把它写在了下面应用层
10.TCP异常情况的处理(经典面试题!!!)
网络本身就会存在一些变数,导致tcp连接不能继续正常工作了
比如
1.进程崩溃
进程崩溃=>
进程没了=>
PCB没了=>
文件描述符表也就被释放了=>
相当于调用socket.close()(socket在系统内核中也是一个文件,也会被放到文件描述符表中)=>
崩溃的这一方就会发出FIN,进一步的触发四次挥手,此时连接就正常释放了
此时tcp的处理和进程的正常退出没啥区别
2.主机关机(正常步骤的关机)
3.主机掉电(拔电源,没有任何反应的空间)
虽然TCP中有心跳包的支持了,但是还不够,往往还需要在应用层的应用程序中重新实现心跳包。因为TCP的心跳包周期太长了,是分钟级别的,而在现在大数据的高并发的特点下,分钟级别是不够的,需要秒级甚至毫秒级的心跳包,这样就可以在更短的时间内,发现某个服务器出现问题
4.网线断开
网线断开相当于主机掉电的升级版
以上就是TCP的十个主要特性,并不是只有这十个特性,还有很多特性在标准文档中
TCP和UDP的对比
应用层
面向字节流
在面向字节流的情况下,会产生一些其他问题
粘包问题
这里的“粘”是“应用层数据报”
通过tcp的 read/white的数据,都是tcp报文的载荷,也就是应用层的数据
发送方一次性是可以发送多个应用层数据报的,但是接收的时候,如何区分,从哪里到哪里是一个完整的应用数据报呢?如果没设计好,接收方就很难区分,甚至会产生bug!!
比如发送是两个包,读可能读了半个或者一个半,这个时候就会产生问题
此处正确的做法,是合理的设计应用层协议
这件事在传输层已经是无解了,因为站在tcp的角度,它只认字节,无法区分是哪个包
因此就需要站在应用层角度来解决这个问题了
可以在应用层协议中,引入分隔符,区分包之间的边界
或者在应用层协议中,引入“包长度”,也能区分包之间的边界
粘包问题不仅仅是tcp才有的,只要是面向字节流的机制(比如文件)都会有同样的问题,解决方案也都是一样,要么使用分隔符,要么使用长度来区分
在自定义应用层协议的时候,就可以使用这种思想来解决问题了
网络层
IP协议
IP协议虽然复杂,但是在这里只是简单讨论,实际开发中用到的并不多
IP地址
IP地址采用点分十进制的一种方式,可以让你知道别人电脑的位置,也可以让别人知道你的电脑的位置
IP地址不够用了咋整?
1.动态分配(DHCP)
你这个设备需要上网的时候就分配给你,不需要的时候就把你的IP地址收回,这种方案,只能缓解,不能根治
2.NAT机制
将IP地址分成了两大类
内网IP:不同局域网内的设备,内网IP可以重复;同一个局域网的设备,内网IP不能重复
范围:
10.xx.xx.xx
172.16x—172.31.xx
192.168.xx
外网IP:外网IP不能重复
在你的电脑控制台输入ipconfig,得到的IP地址就是内网IP,如果你在浏览器上搜IP地址,就是外网
(1).如果同一个局域网内部的两台设备想通信,肯定是没问题的,因为同一个局域网的两台电脑的IP地址肯定是不一样的
(2).如果两个局域网的两台电脑要通信呢,这两台设备很可能IP地址一样,这时候咋整呢?
当前的规则,是禁止这种情况的!!!!!
如果必要的时间,迫切需要两台设备通信呢?比如两个人在地球的两端发微信通信,这就需要有一个带有外网IP的设备进行中转!
(3).局域网内部的设备访问带有外网IP的设备
像平时的手机,电脑,都是在局域网内部使用,他们会有一个内网IP,还有一类设备就是服务器,服务器可以有外网ip
这个过程就涉及到NAT工作机制了
真实的情况是:我的电脑跟学校是一个局域网,一个联通路由器上,有很多个局域网,于是我的电脑的IP地址经过学校局域网,会有一次NAT,学校局域网经过联通路由器会有一个NAT(每次经历路由器转发,都"可能"有一次NAT,为啥说可能呢,具体的还要看路由器怎么配置了,有的配置下就不会触发)
3.IPv6
IPv4是4个字节,
IPv6是16个字节,非常非常大,只要人类没有脱离地球文明,ip地址的个数足够用到地老天荒
可是为什么主流还是NAT呢?
其实IPv6和NAT诞生的时间差不多,为啥NAT能成功呢,而IPv6举步维艰呢?
是因为IPv6和IPv4不兼容,要想升级IPv6,就要更换路由器设备==>花钱
(升级IPv6不会提高网速,更不会提高流畅性)
相比之下,NAT方案只需要路由器开发商开发出新版本的软件(路由器固件),升级软件,即可直接支持(成本非常低)
IP地址的组成
IP地址分为两个部分:网络号+主机号
网络号:标识网段(局域网),保证相互连接的两个网段具有不同的标识
主机号:标识主机,同一网段内,主机之间具有相同的网络号,但是必须有不同的主机号
子网掩码
一个IP地址,哪部分是网络号,哪部分是主机号,通常是通过子网掩码来识别的
特殊的IP地址
路由选择
数据链路层
(简单了解,越往下,距离程序员越远)
以太网
是历史问题,发明IP地址和MAC地址的是两波人,发明之前没讨论,所以都发明出来了,但是发明出来之后谁也不服谁,就都留下了
都留下之后,就让IP地址负责网络层的转发,让MAC地址负责数据链路层的转发
网络层负责是整体的转发过程
数据链路层负责的是是局部(相邻设备)的转发过程
举个例子
DNS(域名解析系统)
平时我们上网要访问服务器,需要知道服务器的IP地址,而IP地址是渔船数字,虽然这个数字使用点分十进制已经清晰不少了,但是仍然不方便人们传播记忆,于是就使用单词来代替IP地址
使用baidu,taobao等单词来代替IP地址
这样的单词就称为域名,实践中为了保证域名的唯一性,域名往往是分级
www.baidu.com com是一级,baidu是二级,www是三级
域名是给人看的,但是机器不认识,于是就有一套系统,把域名自动翻译成IP地址,这个系统就是DNS
那么问题来了,全世界这么多的主机都在上网,此时DNS服务器能承担这么高的并发量嘛?DNS服务器如何承载高并发量呢?
两条原则:开源 节流
从技术角度讲,DNS服务器是否会挂呢?当然会,尤其是你所在地区的镜像服务器,一年挂了两三次很正常
MTU
MTU对IP协议的影响
由于数据链路层MTU的限制,对于较大的IP数据包要进行分包。
将较大的IP包分成多个小包,并给每个小包打上标签;
每个小包IP协议头的 16位标识(id) 都是相同的;
每个小包的IP协议头的3位标志字段中,第2位置为0,表示允许分片,第3位来表示结束标记(当前是否是最后一个小包,是的话置为1,否则置为0);
到达对端时再将这些小包,会按顺序重组,拼装到一起返回给传输层;
一旦这些小包中任意一个小包丢失,接收端的重组就会失败。但是IP层不会负责重新传输数据;
MTU对UDP协议的影响
一旦UDP携带的数据超过1472(1500 - 20(IP首部) - 8(UDP首部)),那么就会在网络层分成多个IP数据报。
这多个IP数据报有任意一个丢失,都会引起接收端网络层重组失败。那么这就意味着,如果UDP数据报在网络层被分片,整个数据被丢失的概率就大大增加了。
MTU对于TCP协议的影响
TCP的一个数据报也不能无限大,还是受制于MTU。TCP的单个数据报的最大消息长度,称为MSS(Max Segment Size);
TCP在建立连接的过程中,通信双方会进行MSS协商。
最理想的情况下,MSS的值正好是在IP不会被分片处理的最大长度(这个长度仍然是受制于数据链路层的MTU)。
双方在发送SYN的时候会在TCP头部写入自己能支持的MSS值。
然后双方得知对方的MSS值之后,选择较小的作为最终MSS。
MSS的值就是在TCP首部的40字节变长选项中(kind=2);
ARP
虽然我们在这里介绍ARP协议,但是需要强调,ARP不是一个单纯的数据链路层的协议,而是一个介于数据链路层和网络层之间的协议
ARP协议的作用
ARP协议建立了主机 IP地址 和 MAC地址 的映射关系。
在网络通讯时,源主机的应用程序知道目的主机的IP地址和端口号,却不知道目的主机的硬件地址;
数据包首先是被网卡接收到再去处理上层协议的,如果接收到的数据包的硬件地址与本机不符,则直接丢弃;
因此在通讯前必须获得目的主机的硬件地址;
ARP协议的工作流程
1.源主机发出ARP请求,询问“IP地址是172.20.1.2的主机的硬件地址是多少”,并将这个请求广播到本地网段(以太网帧首部的硬件地址填FF:FF:FF:FF:FF:FF表示广播);
2.目的主机接收到广播的ARP请求,发现其中的IP地址与本机相符,则发送一个ARP应答数据包给源主机,将自己的硬件地址填写在应答包中;
3.每台主机都维护一个ARP缓存表,可以用arp -a命令查看。缓存表中的表项有过期时间(一般为20分钟),如果20分钟内没有再次使用某个表项,则该表项失效,下次还要发ARP请求来获得目的主机的硬件地址
相关文章:
网络原理
网络原理 传输层 UDP 特点 特点:无连接,不可靠,面向数据报,全双工 格式 怎么进行校验呢? 把UDP数据报中的源端口,目的端口,UDP报文长度的每个字节,都依次进行累加 把累加结果&a…...
力扣(LeetCode)算法_C++——同构字符串
给定两个字符串 s 和 t ,判断它们是否是同构的。 如果 s 中的字符可以按某种映射关系替换得到 t ,那么这两个字符串是同构的。 每个出现的字符都应当映射到另一个字符,同时不改变字符的顺序。不同字符不能映射到同一个字符上,相…...
网管实战⑼:配置华为S5720交换机
配置好汇聚交换机后,需要根据单位情况配置具体的接入交换机。 自从2019年12月底配置好交换机后,基本上都没有怎么操作交换机了。那时候使用的是H3C交换机,主要是H3C S7706、H3C S5120、H3C S5130、H3C S5500、H3C S3600等型号的交换机&#x…...
文件上传漏洞第十六关十七关
第十六关 第十七关 第十六关 直接上传php文件判断限制方式: 同第十五关白名单限制 第十六关源码: 代码逻辑判断了后缀名、content-type,以及利用imagecreatefromgif判断是否为gif图片,最后再做了一次二次渲染 二次渲染图片马&…...
Try llama2 in NUC (by quqi99)
作者:张华 发表于:2023-09-06 版权声明:可以任意转载,转载时请务必以超链接形式标明文章原始出处和作者信息及本版权声明 ( http://blog.csdn.net/quqi99 ) 据说现在在PC机上可以运行llama2大模型了, Way 1 于是照…...
强大易用的开源 建站工具Halo
特点 可插拔架构 Halo 采用可插拔架构,功能模块之间耦合度低、灵活性提高。支持用户按需安装、卸载插件,操作便捷。同时提供插件开发接口以确保较高扩展性和可维护性。 ☑ 支持在运行时安装和卸载插件 ☑ 更加方便地集成三方平台 ☑ 统一的可配置设置表…...
如何使用vuex
1.安装vuex 2.在store文件夹内写index.js 此处tab是自定义的文件 import Vue from "vue" import Vuex from "vuex" import tab from "./tab"Vue.use(Vuex)export default new Vuex.Store({modules:{tab} }) 3.在store文件夹内写tab.js(自定义…...
动手深度学习——Windows下的环境安装流程(一步一步安装,图文并配)
目录 环境安装官网步骤图文版安装Miniconda下载包含本书全部代码的压缩包使用conda创建虚拟(运行)环境使用conda创建虚拟环境并安装本书需要的软件激活之前创建的环境打开Jupyter记事本 环境安装 文章参考来源:http://t.csdn.cn/tu8V8 官网…...
个人博客系统-测试用例+自动化测试
一、个人博客系统测试用例 二、自动化测试 使用selenium4 Junit5单元测试框架,来进行简单的自动化测试。 1. 准备工作 (1)引入依赖,此时的pom.xml文件: <?xml version"1.0" encoding"UTF-8&quo…...
C语言文件读写常用函数
文章目录 1. fopen函数2. fclose函数3. fgetc函数4. fgets函数5. fputc函数6. fputs函数7. fprintf函数8. fscanf函数9. fseek函数10. ftell函数 1. fopen函数 返回值:文件指针(FILE*)参数:文件名(包括文件路径&#…...
【C++基础】实现日期类
👻内容专栏: C/C编程 🐨本文概括: C实现日期类。 🐼本文作者: 阿四啊 🐸发布时间:2023.9.7 对于类的成员函数的声明和定义,我们在类和对象上讲到过,需要进行…...
C语言程序设计—通讯录实现
本篇文章主要是实现一个简易的通讯录: 功能如下: 添加用户修改用户删除用户查找用户(可重名)按名字或年龄排序显示用户保存通讯录日志追加 有如下知识点: 动态数组结构体枚举自定义标识符和宏文件打开与存储函数指针…...
实战:大数据Flink CDC同步Mysql数据到ElasticSearch
文章目录 前言知识积累CDC简介CDC的种类常见的CDC方案比较 Springboot接入Flink CDC环境准备项目搭建 本地运行集群运行将项目打包将包传入集群启动远程将包部署到flink集群 写在最后 前言 前面的博文我们分享了大数据分布式流处理计算框架Flink和其基础环境的搭建,…...
B-Tree 索引和 Hash 索引的对比
分析&回答 B-Tree 索引的特点 B-tree 索引可以用于使用 , >, >, <, < 或者 BETWEEN 运算符的列比较。如果 LIKE 的参数是一个没有以通配符起始的常量字符串的话也可以使用这种索引。 有时,即使有索引可以使用,MySQL 也不使用任何索引。…...
入门Python编程:了解计算机语言、Python介绍和开发环境搭建
文章目录 Python入门什么是计算机语言1. 机器语言2. 符号语言(汇编)3. 高级语言 编译型语言和解释型语言1. 编译型语言2. 解释型语言 Python的介绍Python开发环境搭建Python的交互界面 python学习专栏python基础知识(0基础入门)py…...
深度解析Redisson框架的分布式锁运行原理与高级知识点
推荐阅读 项目实战:AI文本 OCR识别最佳实践 AI Gamma一键生成PPT工具直达链接 玩转cloud Studio 在线编码神器 玩转 GPU AI绘画、AI讲话、翻译,GPU点亮AI想象空间 资源分享 史上最全文档AI绘画stablediffusion资料分享 AI绘画关于SD,MJ,GPT,SDXL百科全书 AI绘画 stable…...
C#扩展方法
参数列表中this的这种用法是在.NET 3.0之后新增的一种特性---扩展方法。通过这个属性可以让程序员在现有的类型上添加扩展方法(无需创建新的派生类型、重新编译或者以其他方式修改原始类型)。 扩展方法是一种特殊的静态方法,虽然是静态方法&a…...
uniapp 高度铺满全屏
问题:在有uni-tabbar的情况下,页面铺满剩下的部分 <template><view :style"{height:screenHeightpx}" class"page"></view> </template> <script>export default {data() {return {screenHeight: &q…...
UG\NX二次开发 判断向量在指定的公差内是否为零,判断是否是零向量 UF_VEC3_is_zero
文章作者:里海 来源网站:王牌飞行员_里海_里海NX二次开发3000例,里海BlockUI专栏,C\C++-CSDN博客 简介: UG\NX二次开发 判断向量在指定的公差内是否为零,判断是否是零向量 UF_VEC3_is_zero 效果: 代码: #include "me.hpp"void ufusr(char* param, int* retco…...
2023年MySQL实战核心技术第一篇
目录 四 . 基础架构:一条SQl查询语句是如何执行的? 4.1 MySQL逻辑架构图: 4.2 MySQL的Server层和存储引擎层 4.2.1 连接器 4.2.1.1 解释 4.2.1.2 MySQL 异常重启 解决方案: 4.2.1.2.1. 定期断开长连接: 4.2.1.2.2. 初始…...
hivesql执行过程
语法解析 SemanticAnalyzer SemanticAnalyzer是Hive中的语义分析器,负责检查Hive SQL程序的语义是否正确。SemanticAnalyzer会对Hive SQL程序进行以下检查: 检查过程 语法检查 SemanticAnalyzer会检查Hive SQL程序的语法是否正确,包括关…...
C语言学习:8、深入数据类型
数据超过类型规定的大小怎么办 C语言中,如果需要用的整数大于int类型的最大值了怎么办? 我们知道int能表示的最大数是2147483647,最小的数是-2147483648,为什么? 因为字32位系统中,寄存器是32位的&#…...
生成树协议 STP(spanning-tree protocol)
一、STP作用 1、消除环路:通过阻断冗余链路来消除网络中可能存在的环路。 2、链路备份:当活动路径发生故障时,激活备份链路,及时恢复网络连通性。 二、STP选举机制 1、目的:找到阻塞的端口 2、STP交换机的角色&am…...
【LeetCode】312.戳气球
题目 有 n 个气球,编号为0 到 n - 1,每个气球上都标有一个数字,这些数字存在数组 nums 中。 现在要求你戳破所有的气球。戳破第 i 个气球,你可以获得 nums[i - 1] * nums[i] * nums[i 1] 枚硬币。 这里的 i - 1 和 i 1 代表和…...
商业数据分析概论
🐳 我正在和鲸社区参加“商业数据分析训练营活动” https://www.heywhale.com/home/competition/6487de6649463ee38dbaf58b ,以下是我的学习笔记: 学习主题:波士顿房价数据快速查看 日期:2023.9.4 关键概念/知识点&…...
Golang GUI框架
Golang GUI框架fyne fyne简介第一个fyne应用fyne应用程序和运行循环fyne更新GUI内容fyne窗口处理fyne解决中文乱码问题fyne应用打包fyne画布和画布对象fyne容器和布局fyne绘制和动画fyne盒子布局fyne网格grid布局fyne网格包裹布局fyne边框布局fyne表单布局fyne中心布局fyne ma…...
LeetCode刷题笔记【24】:贪心算法专题-2(买卖股票的最佳时机II、跳跃游戏、跳跃游戏II)
文章目录 前置知识122.买卖股票的最佳时机II题目描述贪心-直观写法贪心-优化代码更简洁 55. 跳跃游戏题目描述贪心-借助ability数组贪心-只用int far记录最远距离 45.跳跃游戏II题目描述回溯算法贪心算法 总结 前置知识 参考前文 参考文章: LeetCode刷题笔记【23】…...
游戏出现卡顿有哪些因素
一、服务器CPU内存占用过大会导致卡顿,升级CPU内存或者优化自身程序占用都可以解决。 二、带宽跑满导致卡,可以升级带宽解决。 二、平常不卡,有大型的活动的时候会卡,这方面主要是服务器性能方面不够导致的,性能常说…...
学习Bootstrap 5的第八天
目录 加载器 彩色加载器 实例 闪烁加载器 实例 加载器大小 实例 加载器按钮 实例 分页 分页的基本结构 实例 活动状态 实例 禁用状态 实例 分页大小 实例 分页对齐 实例 面包屑(Breadcrumbs) 实例 加载器 彩色加载器 在 Bootstr…...
vue中自定义指令
什么是指令 在Vue.js中,指令是一种特殊的 token,用于在模板中以声明式方式将响应式数据绑定到 DOM 元素上,从而实现与 DOM 元素的交互和操作。指令以 “v-” 前缀开始,后跟指令的名称,例如 v-model、v-bind 和 v-on。…...
windows2008 iis 网站/电脑全自动挂机赚钱
今天打开vmware下的xp系统,装完了oracle9i,本想ipconfig一下看看ip地址,没成想在cmd下ipconfig之后提示错误:‘ipconfig’不是内部或外部命令,也不是可运行的程序。后来才发现有可能是安装oracle把系统的环境变量给更改…...
新建网页的方法有哪些/seo引擎搜索网址
CMakeLists.txt cmake_minimum_required(VERSION 3.13) project(image) #用变量替换值 set(CMAKE_CXX_STANDARD 14) set(CMAKE_CXX_FLAGS "-stdc11") #搜索外部库 find_package(OpenCV REQUIRED) #指定头文件的搜索路径,编译器查找相应头文件 include_directories($…...
dwcs5怎么做动态网站后台/google网站增加关键词
PicConvert for mac是一款全新的图像格式转换工具,picconvert mac版支持批量转换和调整图像大小,快速帮助用户将图像转换成需要的格式,比如jpg、png、tiff、heic、jpx、bmp等,使用非常便捷,如果你想要转换图片的格式&a…...
怎样增加网站会员量/营销策划与运营
目录用户1、增加用户,并指定主目录2、修改密码1、设置普通密码2、设置会过期的密码3、锁定账户,解锁用户,踢用户下线4、将目录设置为用户所拥有以及删除拥有5、删除用户6、建立一个程序用户7、赋予用户权限1、赋予用户root权限-方式12、赋予用…...
途牛电子商务网站建设/电商运营自学全套教程
系列文章 -- ES6笔记系列 解构赋值,即对某种结构进行解析,然后将解析出来的值赋值给相关的变量,常见的有数组、对象、字符串的解构赋值等 一、数组的解构赋值 function ids() {return [1, 2, 3]; }var [id1, id2, id3] ids();console.log(id…...
网站友情链接对方网站没有加入本站链接对本站有没有影响?/网站优化培训
目录一、PySide6概述二、安装PySide6三、设计界面四、响应UI操作五、打包部署一、PySide6概述 近几年,受益于人工智能的崛起,Python语言几乎以压倒性优势在众多编程语言中异军突起,成为AI时代的首选语言。在很多情况下,我们想要以…...