【Linux】网络基础
🍎作者:阿润菜菜
📖专栏:Linux系统网络编程
文章目录
- 一、协议初识和网络协议分层(TCP/IP四层模型)
- 认识协议
- TCP/IP五层(或四层)模型
- 二、认识MAC地址和IP地址
- 认识MAC地址
- 认识IP地址
- 认识以太网和互联网
- 三、数据包封装和解包分用(数据段,数据报,数据帧)
- 四、局域网和广域网的通信
- 局域网通信
- 跨网络通信
一、协议初识和网络协议分层(TCP/IP四层模型)
我们知道一台计算机里面有很多的硬件,正是这些硬件之间互相配合协同工作才能让我们的计算机健康的运行,当然这里面也离不开软件对硬件的管理。
假设我们脑洞大一点,把计算机里面的各个硬件拉出来,各自放到很远很远的地方,而计算机依旧能正常运行,靠的就是协议,而协议本质就是一种约定,硬件和硬件之间也有协议,比如磁盘的HBA协议,磁盘和内存IO时也有协议,所以协议不仅仅是网络专属的,计算机体系结构里面也有协议,那计算机内部不就相当于一个小型的网络吗?各个设备通过网线连接,设备之间有协议约定,所以各个设备能够正常通信,以便于计算机为用户提供良好的服务,所以网络和计算机是不分家的,体系结构中有网络,网络中有体系结构!
认识协议
实际在网络中,所有的网络问题本质都是传输距离变长了,如果传输距离很短,那还需要担心发送数据会丢失吗?或者对方接收不到数据,又或者对方没有接收到完整的数据,这些问题自然就不用考虑了,因为传输距离很短,中间的障碍很少,出错的概率很低。而当传输距离过长的时候,就容易导致出现问题,比如传输信号减弱从而导致数据丢失,所以一旦长距离传输的时候,就会引入新的通信问题,而为了尽可能的减少通信的成本,就需要定制协议!!!
我们提前做好约定,达成双方的共识,让通信的两台主机之间约定好协议,而协议就会降低通信的成本。
所以说 “协议”本质就是一种约定,通信双方只要曾经做过某种约定,之后就可以使用这种约定来完成某种事情。而网络协议是通信计算机双方必须共同遵从的一组约定,因此我们一定要将这种约定用计算机语言表达出来,此时双方计算机才能识别约定的相关内容 。
那协议该由谁来定制呢?
计算机生产厂商那么多,操作系统厂商也有那么多,磁盘厂商也有很多,其他硬件设备的厂商也有很多,那如果每个厂商都有自己的协议,生产出来的各式各样的计算机还如何通信呢?只能一个厂商里面的计算机才能通信,这显然是不行的,所以此时就需要一个人站出来,定制统一的网络协议标准,这个网络协议就是TCP/IP协议,1983年TCP/IP协议正式替代NCP,成为大部分因特网共同遵守的网络协议标准。
正所谓“一流的企业做标准,二流的企业做品牌,三流的企业做产品”。但是标准的定制有一部分是公益性、开源性的,它制定标准的目的是为了让我们的世界变得更好;而标准的定制还有一部分是具有一定盈利性质的,当你需要使用这项技术时就会收取部分专利费,此时就能将曾经做的技术投入进行变现。
所以在1977年国际标准化组织提出了OSI七层网络模型,那为什么要进行分层呢?
因为在网络数据传输的过程中,需要面临很多方面的问题,比如物理层,驱动层,软件层,用户层等等都有各自需要解决的网络传输问题,而分层其实就是进行解耦,每一层都是功能比较集中,高内聚的模块,用于处理该层面临的网络传输问题,层与层之间是低耦合的。
并且每一层都有自己匹配的协议,每一层协议都用于处理当前层的传输问题。
虽然是七层模型,但实际使用时,将上三层压为一层,统称为应用层,所以我们平常所说的都是TCP/IP四层或五层模型,物理层我们不考虑。
TCP/IP五层(或四层)模型
TCP/IP是一组协议的代名词,它还包括许多协议,共同组成了TCP/IP协议簇。TCP/IP通讯协议采用了五层的层级结构,每一层都呼叫它的下一层所提供的网络来完成自己的需求。
- 物理层:负责光/电信号的传递方式。比如现在以太网通用的网线(双绞线)、早期以太网采用的同轴电缆(现在主要用于有线电视)、光纤,现在的WiFi无线网使用的电磁波等都属于物理层的概念。物理层的能力决定了最大传输速率、传输距离、抗干扰性等。集线器(Hub)就是工作在物理层的。
- 数据链路层: 负责设备之间的数据帧的传送和识别。例如网卡设备的驱动、帧同步、冲突检测(如果检测到冲突就自动重发)、数据差错校验等工作。数据链路层底层的网络通信标准有很多,如以太网、令牌环网、无线LAN等。交换机(Switch)就是工作在数据链路层的。
- **网络层:**负责地址管理和路由选择。例如在IP协议中,通过IP地址来标识一台主机,并通过路由表的方式规划出两台主机之间数据传输的线路(路由)。路由器(Router)就是工作在网络层的。
- 传输层: 负责两台主机之间的数据传输。例如传输控制协议(TCP),能够确保数据可靠的从源主机发送到目标主机。
- 应用层: 负责应用程序间沟通。比如简单电子邮件传输(SMTP)、文件传输协议(FTP)、网络远程访问协议(Telnet)等。我们的网络编程主要就是针对应用层的。
可以看到,它们的下面几层几乎是没有区别的,操作系统对应的是传输层和网络层,数据链路层和物理层都是对应在驱动层的,而TCP/IP协议当中的应用层就对应到OSI七层协议当中的应用层、表示层和会话层。
一般而言:
- 对于一台主机,它的操作系统内核实现了从传输层到物理层的内容。
- 对于一台路由器,它实现了从网络层到物理层的内容。
- 对于一台交换机,它实现了从数据链路层到物理层的内容。
- 对于集线器,它只实现了物理层的内容。
其实现在的网络各层设备早已突破了先前TCP/IP五层模型的限制。
二、认识MAC地址和IP地址
先来看看什么是报头?
一般数据在实际发送的时候都会多发一部分数据,这部分数据称为协议报头,由于模型的每层都有自己的协议,而数据在向下传递时必须携带上该层的协议报头,以便于数据流向到最底层的物理层之后,将数据传输给对方主机,对方主机将数据向上交付时,对方主机的每层都能看懂我的协议,所以数据在发送的时候一定是需要报头的,而具体的数据内容我们喜欢叫做报文。就相当于报纸,报头是该报刊社的协议规定,例如剧中排版,新华社报刊什么的类似协议,这些东西一般都会放在报纸的第一行而且是字体放大的那种,很醒目也就是报头。
同时协议报头阐述了该层协议的内容。
认识MAC地址
在局域网中的两台主机是可以直接通信的,因为每一台主机都有自己的"名字",每一台主机都有自己的网卡,而网卡都有自己的地址,这个地址就是MAC地址。MAC地址是48位的二进制数据,也就是6字节大小的数,可以用16进制来解释该MAC地址。例如我的网卡物理地址就是16进制表示的。
- MAC地址用来识别数据链路层中相连的节点。
- 长度为48位,及6个字节,一般用16进制数字加上冒号的形式来表示(例如:08:00:27:03:fb:19)。
- 在网卡出厂时就确定了,不能修改。MAC地址通常是唯一的(虚拟机中的MAC地址不是真实的MAC地址,可能会冲突,也有些网卡支持用户配置MAC地址)。
所以说MAC地址是数据链路层的地址,用于在同一网络中的主机之间进行通信。如果目标主机和发送主机在同一个网络中,那么数据包就可以直接发送到目标主机的MAC地址,所以MAC地址是在本地网络中分配的。不同的网络可能使用相同的MAC地址。
认识IP地址
IP地址是网络层的地址,用于在不同的网络之间进行路由和寻址,以便于不同网络之间的数据传输。
如果目标主机和发送主机不在同一个网络中,那么发送主机需要先将数据包发送到一个特定的路由器,路由器会通过路由表以及发送主机的ip地址确定出数据包的下一跳位置在哪里,路由表中记录了不同网络和主机的ip地址以及如何到达这些ip地址的信息。
那么ip地址在哪里呢?ip地址实际就在数据报的报头中,报头中的第三层网络层协议中包含了该数据报的ip地址位置,而路由器的核心工作位置也是在网络层,所以路由器可以看懂网络层的IP协议,确定发送主机的数据报下一跳应该发送到哪个网络当中。
传输层以上的协议都使用IP地址来标识主机的位置,IP地址是因特网上分配给主机的标识符,他是全球唯一的,可以在全球范围内进行路由寻址。而MAC地址是在本地网络中分配的,并且不同的网络可能使用相同的MAC地址,因此在跨网络的通信场景下,无法使用MAC地址,另外由于MAC地址是48比特位的,比32位比特位的IP地址长2个字节,这是不利于在通信协议中进行使用的,所以传输层向上的协议通常都使用IP地址来标识主机的位置,因为IP地址是跨网络的,而MAC地址仅仅是本地网络分配的。常见使用IP地址标识主机位置的协议有HTTP、FTP、SMTP、SSH等,在这些协议中,app之间通过IP地址来建立连接和交换数据,路由器使用IP地址进行数据报的转发和路由,以此来实现跨网络的通信。
上面说了这么多跨网路,不同的网络等等概念,那什么是不同的网络呢?该怎么分辨呢?
IP地址由网络地址和主机地址两部分构成,如果两个主机的ip地址中的网络地址相同,那么这两个主机就是在同一网络中,否则就不在同一网络中。子网掩码是一个与IP地址配对的掩码,用于将IP地址分为上述两部分,如果两个主机的IP地址和子网掩码进行按位与之后的结果相同,则两个主机就是在同一网络中。需要注意的是不同的网络有不同的子网掩码,和IP地址配对使用。
认识以太网和互联网
1.以太网是什么?
以太是古希腊神话中的宇宙空间,它常被认为是一切事物存在的基础。
以太网是使用电磁信号在以太中传播的数据链路层协议,它使用MAC地址来标识本地网络上的各个设备,每一块以太网卡在出厂时都会被assigned一个唯一的MAC地址,作为该以太网卡的永久标识。
以太网的数据传输依靠空气和电缆作为传输介质,这两种介质统称为以太。以太网线缆包括黑频线缆和同轴电缆这两种电缆。这些线缆可以将计算机和其他网络设备连接起来,如交换机和路由器,以此实现局域网内的互联。例如使用UTP(未纠错双绞线)将计算机与交换机连接,然后交换机再相互连接,形成局域网。
在局域网中,如果是需要高自由移动性和easier部署的环境中,还可以选择使用WIFI技术,无线信号通过空气(以太)作为传输媒介,将数据映射到高频电磁波上传播。例如WiFi IEEE 802.11a等标准,以及BlueTooth,ZigBee紫峰(与蓝牙类似)
有线以太通过电缆实现稳定高速的连接,无线以太可提供高自由和便捷性。
以太网是互联网的物理基础,互联网是由许多的局域网和广域网互连而成的,局域网中最常见的连接技术就是以太网。以太网定义了物理层和数据链路层的标准,通过以太电缆或以太无线信号为互联网提供高效的本地数据传输,也就是局域网内的数据传输。互联网在以太网建立好的局域网基础之上通过路由器等设备实现不同局域网之间的互联。而TCP/IP提供了网络层和传输层,以太网和TCP/IP协同工作实现了互联网。互联网使用IP地址标识网络设备,以太网使用MAC地址标识设备,两者通过ARP(Address Resolution Protocol)协议进行对应,实现互联网(因特网)的通信。
认识本地环回地址
127.0.0.1是一个类IP的特殊地址,叫做本地环回地址。他是IPV4地址段保留的特殊IP地址,只能用于当前计算机本身,其他计算机无法访问此地址。所以127.0.0.1就是计算机自己,对于访问该地址的请求,数据包会从发送主机走一圈协议栈然后又返回到主机自己本身。一般用于本地测试网络代码,或本地访问apache Web服务器软件。
三、数据包封装和解包分用(数据段,数据报,数据帧)
在传输层一般将数据包叫做数据段,网络层叫数据报,数据链路层叫数据帧,应用层叫请求与响应。数据在向下经过协议栈封装成帧之后会通过传输介质网线(很多种类)发送到目标主机,目标主机会剥离层层协议的报头,根据报头的信息再将有效载荷发送到上层指定的协议进行处理。
下图是封装和解包分用的示意图,尤其是解包分用的示意图,很形象的体现出协议报头的作用,即数据包向上该如何交付,交付给哪个协议。
实际上每个协议都要提供一种方法,让我们获取到报头的大小,这样我们才能在解包时将报头与有效载荷进行分离。
四、局域网和广域网的通信
局域网通信
首先需要明确的是,同一个局域网内的主机是能够直接进行通信的,因为最初局域网设计的目的,就是为了让局域网内的主机能够进行通信。
当用户要将文件传输给另一台主机前,该文件数据需要先通过网络协议栈进行封装:
- 文件数据先交给应用层,应用层添加上对应应用层协议的报头信息后,将数据再交给传输层。
- 传输层收到数据后,再添加上对应传输层协议的报头信息,并将数据继续向下进行交付。
- 网络层收到数据后,再添加上对应网络层协议的报头信息,接着将数据再交给链路层。
- 链路层收到数据后,最后再添加上对应链路层协议的报头信息,至此数据封装完毕。
数据封装完毕后就可以通过局域网将其发送给对端主机了,而当对端主机收到数据后,对应也需要通过网络协议栈对该数据进行解包与分用:
- 链路层收到数据后,先将数据中对应链路层协议的报头信息提取出来,然后将剩下的数据交给网络层。
- 网络层收到该数据后,再将数据中对应网络层协议的报头信息提取出来,然后将剩下的数据继续向上进行交付。
- 传输层收到该数据后,再将数据中对应传输层协议的报头信息提取出来,然后将剩下的数据再交付给应用层。
- 应用层收到数据后,最后将数据中对应应用层协议的报头信息提取出来,至此便完成了数据的解包与分用。
也就是说,任何一台主机在发送数据之前,该数据都要先自顶向下贯穿协议栈来完成数据的封装,在这个过程中,每一层协议都会添加上对应的报头信息;而任何一台主机收到数据后,都要先自底向上贯穿协议栈来完成数据的解包和分用,在这个过程中,每一层协议都会将对应的报头信息提取出来。
深入了解
下面是简易的一个局域网内部的主机通信图,例如MAC1主机问MAC7吃了没,只有MAC7才会收到对应的消息并作出响应,而其他的主机虽然收得到消息,但他们并不会做出响应,这是为什么呢?是因为MAC1发出的数据包中的以太网协议报头信息中包含了目标主机的MAC地址,其他收到该数据报的主机都会甄别自己的MAC地址是否与协议报头的地址相同,如果相同则会进行数据包的解包分用,如果不相同则什么都不会做。
- 局域网内传输数据时,该局域网内的所有主机都能收到
实际当主机1想要发数据给主机7的时候,该局域网内的其他主机也都收到了该数据,只不过除了主机7B以外,其他主机识别到该数据并不是发给自己的,此时其他主机就把收到的数据丢弃了。
也就是说,在局域网(以太网)通信时,该局域网内所有的主机在底层其实都收到了任何数据,只不过经过筛选后只提交上来了发给自己的数据。
-
什么是数据碰撞?
当主机1在向主机7发送数据时,其他主机彼此之间可能也正在进行通信,甚至主机1在和主机7通信的同时也在和其他主机进行通信。
但同一局域网中的所有主机在通信时,使用的都是一个共同的通信信道,因此如果局域网内的多台主机同时进行通信,此时这些数据之间就可能会相互干扰。
每一个局域网都可以看作是一个碰撞域,如果某个主机发送出去的数据与其他主机发送的数据之间产生了干扰,我们就称这两台主机在该碰撞域中发生了碰撞。 -
如何判断发送出去的数据是否发生了碰撞?如何避免?
因为发送到局域网当中的数据是所有主机都能够收到的,因此当一个主机将数据发送出去后,该主机本身也是能够收到这个数据的。当该主机收到该数据后就可以将其与之前发送出去的数据进行对比,如果发现收到的数据与之前发送出去的数据不相同,则说明在发送过程中发生了碰撞。
也就是说,主机实际是能够通过某种方式,知道曾经发送出去的数据是否发生了碰撞的。
当一个主机发现自己发送出去的数据产生了碰撞,此时该主机就要执行“碰撞避免”算法。“碰撞避免”算法实际很简单(具体实现其实蛮复杂的,我们就不深入学习了):当一个主机发送出去的数据产生了碰撞,那么该主机可以选择等一段时间后,再重新发送该数据。这就像现实生活中的两个人同时想要说话,此时对方就都会说“你先说吧”,这实际上就是一种碰撞避免。
需要注意的是,实际在网络通信压力不大的时候发生碰撞的概率是不大的,我们不要太小瞧计算机的处理速度,也不要太小瞧网线传播数据的速度。
- 那每个主机如何判断该数据是否是发送给自己的?
在局域网中发送的数据实际叫做MAC数据帧,在这个MAC数据帧的报头当中会包含两个字段,分别叫做源MAC地址和目的MAC地址。
每一台计算机都至少配有一张网卡,而每一张网卡在出厂时就已经内置了一个48位的序列号,我们将这个序列号称之为“MAC地址”,这个MAC地址是全球唯一的。
在局域网中进行通信的时候,每一个主机在收到一个MAC数据帧后,都会提取该MAC数据帧的报头,找到对应的目的MAC地址与自己的MAC地址进行比对。如果该MAC地址与自己的MAC地址不匹配,则直接将该MAC数据帧丢弃,只有MAC地址匹配时,该主机才会将该数据帧的有效载荷继续向上进行交付处理。
扩展一下:
- 单向数据发送: 主机发送数据帧时,将数据帧当中的目的MAC地址指定为某一台主机,此时每台主机对数据帧进行识别后,最终只有那台指定的主机会将该数据帧向上交付进行处理。
- 局域网内进行数据广播: 主机发送数据帧时,将数据帧当中的目的MAC地址设置为全1,此时所有主机收到该数据帧后都会对该数据帧进行处理。
跨网络通信
那跨局域网的两台主机之间是如何进行通信的呢?
其实每个局域网之间都是通过路由器连接起来的,因此一个路由器至少能够横跨两个局域网。而这些被路由器级联局域网都认为,该路由器就是本局域网内的一台主机,因此路由器可以和这些局域网内的任意一台主机进行直接通信。
比如局域网1当中的主机A想要和局域网2当中的主机H进行通信,那么主机A可以先将数据发送给路由器,然后路由器再将数据转发给局域网2当中的主机H。
那路由器为什么能够“认路”呢?
一个路由器可能会级联多个局域网,当路由器需要将一个局域网的数据转发到另一个局域网时,路由器如何知道该数据应该转发到哪一个局域网的呢?
路由器其实是通过IP地址来确定数据的转发方向的,因特网上的每台计算机都有一个唯一的IP地址,而在数据向下进行封装时,在网络层封装的报头当中就会包含两个字段,分别是源IP地址和目的IP地址。
当路由器需要将一个局域网的数据转发到另一个局域网时,在路由器的链路层会先将数据的在当前局域网对应的底层报头去掉,然后将剩下的数据向上交付给网络层,此时在网络层就可以获取到该数据对应的目的IP地址,然后路由器就可以根据该IP地址在路由表当中进行查找,最终就能够确认该数据应该发送到哪一个局域网。
下面是需要通过路由器参与进行ip地址路由的网络通信示意图,你可以暂时将其理解为广域网通信,但实际这是不准确的,后面的文章会详细解释这个地方,或者你可以理解为局域网和局域网之间进行通信的示意图。
网络层之上的传输层和应用层与同一局域网内的通信过程相同,与其不同的是,发送主机的数据包在到达数据链路层时,无法将数据包直接交付给目标主机的以太网协议,因为发送主机和目标主机并不在同一个网段内,无法通过MAC地址确认出数据包的下一跳位置,所以数据包首先要进行以太网协议层的解包分用,将数据包交付给网络层的路由器,路由器会通过自己的路由表确定出数据包要发送的主机的ip地址,然后再向下进行封装,将数据包向下交付给指定ip地址的目标主机的数据链路层令牌环驱动程序,之后的工作还是进行数据包向上的解包分用,直到数据包传输到应用层,目标主机拿到对应的数据。
网络层的路由器进行了数据包的解包分用和重新封装,目的就是屏蔽不同局域网的底层的网络差异,为用户提供更为快速稳定健康的网络通信。例如在下面的通信过程中,发送主机和目标主机底层使用的协议分别是以太网协议和令牌环网协议,但路由器可以在网络层屏蔽掉下层不同协议之间的差异,怎么屏蔽呢?通过ip地址确定不同网段的主机位置来屏蔽。(值得注意的是,目前令牌环网已经使用的很少了,数据链路层通常使用的都是Ethernet)
比如像平常生活中的同一个wifi下的几个设备进行聊天时,是不会经过路由器的,仅仅通过以太网协议MAC地址就可以确定不同设备的位置。
本节完
相关文章:

【Linux】网络基础
🍎作者:阿润菜菜 📖专栏:Linux系统网络编程 文章目录 一、协议初识和网络协议分层(TCP/IP四层模型)认识协议TCP/IP五层(或四层)模型 二、认识MAC地址和IP地址认识MAC地址认识IP地址认…...

小程序-接口概率性接收不到参数
在小程序上调用一个接口,传入筛选条件,但返回结果却没有进行筛选,概率性出现这种情况,频率较低。 然后在postman调用该接口,调用很多很多次,发现也出现这种问题,看了代码,接口的传参…...

合作客户销售数据可视化分析
以一个案例进行实际分析: 数据来源:【地区数据分析】 以此数据来制作报表。 技巧一:词云图 以城市名称来显示合同金额的分布,合同金额越大,则城市文字显示越大。 技巧二:饼图 下面制定一个,合…...

git仓库迁移场景
1.git仓库迁移 代码仓库从公网迁移内网,内外网网络不通,而且必须保证代码完整,包括分支以及提交记录。具体步骤如下 1.1 拉取所有分支镜像 1.2 现在本地电脑新建文件夹 mkdir newdir1.3 进入新建文件 newdir 执行下面命令拉取所有镜像代码…...

【RabbitMQ】之持久化机制
目录 一、RabbitMQ 持久化机制 1、RabbitMQ 持久化概述2、队列持久化3、消息持久化4、交换器持久化 二、RabbitMQ 知识扩展 1、内存告警与内存换页2、磁盘告警与配置3、数据写入磁盘时机4、磁盘消息格式5、磁盘文件删除机制 一、RabbitMQ 持久化机制 1、RabbitMQ 持久化概述…...

【项目6 UI Demo】前端代码记录
前端代码记录 1.GridListItem中的布局 在这个Item中的布局采用的是VBox和HBox相结合的方式。相关的代码如下: <VBox class"sapUiTinyMargin"><HBox justifyContent"SpaceBetween"><Titletext"{ToolNumber}"wrapping…...

【计算机网络】应用层协议 -- HTTP协议
文章目录 1. 认识HTTP协议2. 认识URL3. HTTP协议格式3.1 HTTP请求协议格式3.2 HTTP响应协议格式 4. HTTP的方法5. HTTP的状态码6. HTTP的Header7. Cookie和Session 1. 认识HTTP协议 协议。网络协议的简称,网络协议是通信计算机双方必须共同遵守的一组约定࿰…...

了解Unity编辑器之组件篇Layout(八)
Layout:用于管理和控制UI元素的排列和自动调整一、Aspect Ratio Fitter:用于根据宽高比自动调整UI元素的大小 Aspect Mode:用于定义纵横比适配的行为方式。Aspect Mode属性有以下几种选项: (1)None…...

如何使用Flask-Mail来发送电子邮件
你知道如何使用Flask-Mail来发送电子邮件吗 Flask-Mail是一个用于Flask框架的扩展,它简化了在Flask应用程序中发送电子邮件的过程。通过使用Flask-Mail,你可以轻松地创建邮件消息对象,设置发件人、收件人、主题和正文,并使用SMTP服…...

【笔记】Java并发编程
为什么不建议使用Executors创建线程池分析 不建议使用Executors来创建线程池,主要是有两大原因第一个是问题回溯的问题,使用Executors都可以使用默认的情况,无法用户自定义线程名称不利于排查问题,第二个原因也是最主要原因就是线…...

Hive内部表和外部表
表类型详解 表分类 在Hive中,表类型主要分为两种 第一种:内部表 也叫管理表表目录会创建在集群上的{hive.metastore.warehouse.dir}下的相应的库对应的目录中。默认创建的表就是内部表 第二种:外部表 外部表需要使用关键字"external"ÿ…...

【面试题】与通义千问的芯片前端设计模拟面试归纳
这里是尼德兰的喵芯片设计相关文章,欢迎您的访问! 如果文章对您有所帮助,期待您的点赞收藏! 让我们一起为芯片前端全栈工程师而努力! 前言 两个小时,与chatGPT进行了一场数字IC前端设计岗的面试_尼德兰的喵的博客-CSDN博客 和GPT-3.5的回答可以对比品尝,味道更好。 模…...

无法加载文件 C:\Program Files\nodejs\npm.ps1,因为在此系统上禁止运行脚本。npm.ps1 cannot be loaded
目录 原因 解决方法 提示 查看当前的执行策略命令 改回默认值 "Restricted"命令 这个错误提示是因为您的系统禁止执行 PowerShell 脚本。 原因 现用执行策略是 Restricted(默认设置) 解决方法 以管理员身份运行 PowerShell:右键…...

Flowable-服务-Http任务
目录 定义图形标记XML内容界面操作 定义 Http 任务不是 BPMN 2.0 规范定义的官方任务,在 Flowable 中,Http 任务是作为一种特殊的服务 任务来实现的,主要调用Http服务使用。 图形标记 由于 Http 任务不是 BPMN 2.0 规范的“官方”任务&…...

Hexo+GithubPages免费搭建个人博客网站
HexoGithubPages免费搭建个人博客网站 目录 一、前言二、Github配置 新建同名仓库配置Pages 三、安装Hexo四、配置hexo-deployer-git五、访问六、发布文章七、安装主题 一、前言 我之前开了好几年的云服务器了,实际上使用场景并不是很多,感觉有点浪费…...

应用无线鼠标中的2.4GHz无线收发芯片
无线键盘和无线鼠标作为现代办公环境中常见的工具,为我们的工作带来了便利。无线键盘和无线鼠标的工作原理都是基于无线技术实现的,其中常见的是2.4GHz无线技术。让我们一起来详细了解一下它们的工作原理。 无线鼠标的原理非常简单,鼠标部分工作与传统鼠…...

Oracle 时间多少秒以后 oracle interval 多少分钟之前 Oracle日期1小时后 Java时间多少秒以后 Java日期多少天之前
Oracle 时间多少秒以后 oracle interval 多少分钟之前 Oracle日期1小时后 Java时间多少秒以后 Java日期多少天之前 一、概述 在项目开发中,遇到一个类似于 超时关闭的订单(超过1分钟后关闭订单) 的需求,在数据的时间写入时&#x…...

自动驾驶之轨迹规划8——Apollo参考线和轨迹
1. abstract 本文主要讲解routing和planning模块中的reference line,我之前一直搞不明白这个reference line是如何生成的,有什么作用,和routing以及planning的关系。现在有了一些心得打算梳理一下: 决策规划模块负责生成车辆的行…...

ES6 - promise.all和race方法的用法详解
文章目录 一、前言二、Promise.all()1,第一句:Promise.all()方法接受一个数组作为参数,且每一个都是 Promise 实例2,第二句:如果不是,就会先调Promise.resolve方法,将参数转为 Promise 实例再进…...

CAD .NET 15.0 企业版 Crack
CAD .NET 15.0 企业版 企业版 企业版 企业版 企业版 Updated: June 14, 2023 | Version 15.0 NEW CAD .NET is a library for developing solutions in .NET environment. It supports AutoCAD DWG/ DXF, PLT and other CAD formats. The library can be used in a wide rang…...

苍穹外卖day07——缓存菜品套餐+购物车功能实现
缓存菜品——需求设计与分析 问题说明 用户访问量过大带来的一个直接效果就是响应速度慢,使用体验下降。 实现思路 使用redis缓存菜品数据,减少数据库查询操作。 页面展示上基本就是同一个分类在同一页,所以key-value结构可以使用不同的分…...

学习笔记|大模型优质Prompt开发与应用课(二)|第四节:大模型帮你写代码,小白也能做程序
文章目录 01软件开发产业趋势与技术革新软件开发产业趋势与技术革新技术性人才很受欢迎软件开发产业趋势与技术革新技术门槛越来越低 02 大模型驱动的软件开发需求分析prompt 产品设计开发和测试prompt输出回复promptpromptprompt回复 发布和部署promptprompt 维护和更新prompt…...

建造者设计模式 + 高阶函数 => DSL
该设计模式适用于创建复杂对象,该复杂对象通常是由各个部分的子对象用一定的算法或者步骤构成,针对每个子对象内部算法和步骤通常是稳定的,但是该复杂对象的确实由于不同的需求而选择使用不同的子对象进行组装。对于构建该复杂的对象…...

重学C++系列之智能指针简单介绍
一、什么是智能指针 在使用堆内存时,就像使用栈内存空间一样,可以实现自释放的功能,智能指针在C库中也是类模板之一。 二、智能指针有几种 有四种。auto_ptr, unique_ptr, shared_ptr, weak_ptr 其中后三个是C11支持,第一个已经被…...

LabVIEW开发航天器动力学与控制仿真系统
LabVIEW开发航天器动力学与控制仿真系统 计算机仿真是工程设计和验证的非常有用的工具。它节省了大量的时间、金钱和精力。航天器动力学与控制仿真系统由LabVIEW程序开发,它是模拟航天器等动态系统的有用工具。还可轻松与硬件连接并输出真实信号。 项目采用系统工…...

享元模式——实现对象的复用
1、简介 1.1、概述 当一个软件系统在运行时产生的对象数量太多,将导致运行代价过高,带来系统性能下降等问题。例如,在一个文本字符串中存在很多重复的字符,如果每个字符都用一个单独的对象来表示,将会占用较多的内存…...

【GreenDao】关联表实现,父表关联多个子表
要在GreenDao中实现温湿度采集器表和采集数据表的关联,并在删除温湿度表时同时删除对应的采集数据,可以按照以下步骤进行操作: 在GreenDao的实体类中定义温湿度采集器表(Parent Table)和采集数据表(Child …...

python网站创建005:数据交互
目标:本章讲解不同控件下, 数据在前端和后端之间的交互 控件有: 输入框 密码输入框 单选框 多选框 下拉框 多行文本框 不同控件中如何将数据传入后端?请看一下html代码 <!DOCTYPE html> <html> <head><meta …...

golang 字符串操作、处理
一、golang的字符串长度 1. len()内置系统函数,计算字符串结果是字符串的字节长度,不是字符长度 //1.ASCII字符串长度(字节长度) str1 : "wo ai zhong guo" fmt.Println(len(str1)) //15//2.带中文的字符串长度&…...

Nginx配置WebSocket反向代理
1、WebSocket协议 WebSocket协议相比较于HTTP协议成功握手后可以多次进行通讯,直到连接被关闭。但是WebSocket中的握手和HTTP中的握手兼容,它使用HTTP中的Upgrade协议头将连接从HTTP升级到WebSocket。这使得WebSocket程序可以更容易的使用现已存在的…...