【网络】数据链路层知识梳理
全是通俗易懂的讲解,如果你本节之前的知识都掌握清楚,那就速速来看我的笔记吧~
自己写自己的八股!让未来的自己看懂! (全文手敲,受益良多)
数据链路层
我们来重新理解一下这个图:
把数据从A主机送到B主机,我们要先把数据交到路由器A吧。IP解决的是AB之间跨网络传输的问题,再怎么跨网络,得先达到下一跳吧,一步一步走。
数据链路层解决的是:直接相连的主机(也包括路由器),进行数据交付的问题。
Mac地址
每一个网卡都有自己的mac地址,mac地址的作用:在同一局域网中,区分不同的主机。
我们来看一看mac帧的报头:
这个数据部分,大部分情况就是IP交给该层的IP报文。Mac帧就是这个报文,数据部分称为有效载荷。
问题1:Mac帧如何做到解包和封装
Mac帧解包用到的是定长报文,收到报文的时候就可以把报头和有效载荷进行分离
问题2:Mac帧如何做到分用(交给上层的谁)
通过类型,如果是0800说明数据是IP数据报…
目的地址: 就是要去的下一跳主机对应的mac地址
源地址:当前主机的mac地址
局域网的通信原理
发送方把mac报头填好目的地址,源地址。然后发到局域网中,局域网中每一台机器都看到了这个报头然后进行比较,如果是给自己的才拿上来。
数据碰撞
局域网中有很多数据的时候,就会发生数据碰撞。要进行数据碰撞避免算法,本质就是让主机停发,避免过多数据碰撞。局域网中,主机数越多,发生数据碰撞的概率越大。
如何看待局域网??
局域网被多台主机共享,又要避免数据碰撞,所以我们可以将其看作多台主机的临界资源。通过网络层的IP协议,知道要去哪个路由器,然后在Mac帧上填上目标Mac地址(IP地址转Mac地址ARP协议)。到达这个路由器的时候,再根据Mac帧的类型向上交付给网络层,网络层去掉Mac的报头,然后再找到下一个要去的路由器,再由Mac帧重新填上目标Mac地址。依次类推,直到找到目标主机!
Mac帧只在局域网中有效!Mac帧的源地址和目的地址一直在变化的!
局域网中,主机数越多,发生数据碰撞的概率越大。怎么办呀?
随着局域网的主机变多,我们引入新的设备——交换机。交换机可以识别到碰撞发生在哪一侧,如果左边发生碰撞,就不把数据给右边了,防止右边也发生碰撞。交换机可以划分碰撞域,减少局域网碰撞。
反正局域网都会发生碰撞,那我发生长一点的数据帧好呢?还是短一点的好呢?
数据越长,时间就越长,发生碰撞概率就变大了。所以要求数据大小有范围【46,1500】字节。
数据链路层最多允许上层传1500字节(MTU),这会逼着网络层进行分片,可是分片不太好。我们要在协议里减少分片,我们如何减少分片呢?而IP传多少由TCP决定。所以减少分片的问题根源在TCP。IP报头为20字节,所以TCP最多只能传1480字节,TCP报头标准大小为20字节,所以真正的数据为1460。因为TCP有自己的发送缓冲区,所以每次最多取1460来发就可以了。这个1460就称为MSS(最大发送的数据段)。MMS双方三次握手的时候也会相互交互。
所谓的数据发送到目标网络,本质是通过无数个连续的子网实现的
ARP协议
也是局域网协议,它要做到:在局域网中,将目标主机的IP地址转化为Mac地址!!!才可以实现路由器的跳转。
如何让入口路由器R得到,主机B的Mac地址呢?
1.先谈ARP原理:
在局域网中广播一条消息:我是主机A,要找某某IP地址,它的Mac地址是什么?这个消息被主机B收到了,然后告诉其自己的Mac地址。
ARP报文:
ARP协议,属于MAC帧上层,但是归属到数据链路层。
硬件类型:表示链路层网络类型,1为以太网(固定写法)
协议类型:要传换的地址类型,0x0800为IP地址(固定写法)
硬件地址长度:对于以太网为6字节(固定写法)
协议地址长度:对于IP地址为4字节(固定写法)
op字段:1表示ARP请求,2表示ARP应答
目的以太网地址不知道,填为全F
2.模拟ARP过程
当主机R要找目的主机B的Mac地址的时候,先填ARP 报头:
,然后向下交付给数据链路层。再添加Mac帧报头,
填写之后如下:
然后流向局域网,每台主机都会收到处理这个ARP报文。对于非目的主机,先对Mac帧报头的分离,发现目的地址为全F(广播地址),要受理这个报文,根据0806(类型)交付给该机器的ARP软件层,然后分析报文,发现目的IP地址并不是自己的IP地址,然后就把报文丢弃了。可是任何一台主机都可以发起ARP请求,所以任何一台主机都会收到ARP应答,和别人的ARP请求。所以我们要看op字段(1为请求,2为应答)。只有目的主机(B主机)的IP地址才可以对上,然后进行ARP应答~
重新写APR报文,把请求变为应答
然后再把应答的报文,广播给局域网,然后被主机R拿到,这样就可以拿到主机B的Mac地址啦。
结论:先看op,为1,看目的IP地址。为2看,源Mac地址。主机的mac地址和IP地址会被主机临时缓存起来。
ARP的周边问题
- ARP 工作机制:ARP(地址解析协议)用于将 IP 地址解析为 MAC 地址。主机通常会缓存 IP - MAC 映射关系。只有当缓存中的对应记录失效(比如缓存超时 、对应网络设备更改等情况 )时,才会再次发起 ARP 请求来重新获取 MAC 地址。
- 获取主机 IP 和 MAC 方法(理论设想):通过自身 IP 地址和子网掩码可确定所在网络号。理论上可通过拼接该网络号内的 IP 地址,然后使用 ping 命令探测网络内主机。在 ping 过程中,主机间交互会触发 ARP 过程,从而获取到对应主机的 MAC 地址。但实际中,这种操作可能受网络权限(如防火墙限制 )、广播域等因素影响。
- ARP 应答处理:当主机收到多次相同 IP 地址的 ARP 应答时,一般会以最新收到的应答为准更新自身的 ARP 缓存。这是因为最新应答可能反映了网络中设备当前真实的 MAC 地址情况,确保后续通信能正确寻址。
ARP 欺骗是针对 ARP 协议的攻击技术 。利用 ARP 协议无验证机制的漏洞,攻击者发送伪造 ARP 数据包,使目标主机将攻击者 MAC 地址错当成网关或目标主机 MAC 地址 。
DNS协议
实际上访问的网站是IP地址,因为IP地址不方便记忆。所以用域名,进行域名解析成IP地址就可以了。
浏览器中输入url后,发生的事情(就是输入一个域名后)
分三个阶段:
- http过程+域名解析
先域名解析,拿到目标IP地址,浏览器会构建http请求,填充请求行,请求报头空行,如果需要的话,还可以带正文。在构建http请求之前要三次握手。进行网络转发,到达目的主机,构建http应答,还有响应报文,再通过TCP链接,把响应返回,浏览器得到之后对报文做解析,提取正文,对正文进行解释,再由浏览器渲染就可以看到结果了。 - https提一下
刚刚的都是最简单的,现在都是https,双方在通信之前除了建立链接,在正常通信之前进行密钥协商… - 谈论细节
我们底层http的数据其实就是数据流,最后拷贝到TCP的发送缓冲区,那些策略,流量控制,拥塞控制,超时重传,三次握手,面向连接,还问就是IP层,子网划分,查路由表,IP分片,分片和组装,再往下就是Mac帧…
ICMP协议
ICMP是网络层的协议。可以对网络当中出现问题时,对IP报文进行应答的。
ping 命令基于 ICMP, 是在网络层. 而端口号, 是传输层的内容. 在 ICMP 中根本就不关
注端口号这样的信息.
NAT技术(重点)
我们之前讲过,源IP地址在经过路由器的时候会被替换成WAN口地址。NAT技术本质还是缓解IP地址不足的问题。
可是怎么把收回来的数据,从路由器到源主机呢??
我们有NAPT,NAT转化表
内网中源地址一定是唯一的,我们提前建立映射关系。即使将来通过路由器转换后的地址都相同,但是收回数据的时候,可以根据映射关系来区分是哪个主机的数据。
NAT在替换的时候不仅仅会替换。会加端口号,通过端口号找到源地址~
NAT的缺陷
- 无法从NAT外部向内部建立连接
- 转换表的生成和销毁都需要额外开销
- 如果NAT路由器异常了,所有的TCP连接都会断开
内网穿透:通过一个公共的服务器,实现2个局域网主机的相互通信
代理服务器
正向代理(Forward Proxy)是一种常见的网络代理方式,它位于客户端和目标
服务器之间,代表客户端向目标服务器发送请求。正向代理服务器接收客户端的请
求,然后将请求转发给目标服务器,最后将目标服务器的响应返回给客户端。通过这
种方式,正向代理可以实现多种功能,如提高访问速度、隐藏客户端身份、实施访问
控制等。
工作原理
• 客户端将请求发送给正向代理服务器。
• 正向代理服务器接收请求,并根据配置进行处理,如缓存查找、内容过滤等。
• 正向代理服务器将处理后的请求转发给目标服务器。
• 目标服务器处理请求,并将响应返回给正向代理服务器。
• 正向代理服务器将响应返回给客户端。
反向代理
概述
• 反向代理服务器是一种网络架构模式,其作为 Web 服务器的前置服务器,接收
来自客户端的请求,并将这些请求转发给后端服务器,然后将后端服务器的响应返回
给客户端。这种架构模式可以提升网站性能、安全性和可维护性等基本原理
• 反向代理服务器位于客户端和 Web 服务器之间,当客户端发起请求时,它首先
会到达反向代理服务器。反向代理服务器会根据配置的规则将请求转发给后端的 Web
服务器,并将 Web 服务器的响应返回给客户端。在这个过程中,客户端并不知道实际
与哪个 Web 服务器进行了交互,它只知道与反向代理服务器进行了通信。
下篇文章我将更新——多路转接~期待你的关注👉【A charmer】
相关文章:
【网络】数据链路层知识梳理
全是通俗易懂的讲解,如果你本节之前的知识都掌握清楚,那就速速来看我的笔记吧~ 自己写自己的八股!让未来的自己看懂! (全文手敲,受益良多) 数据链路层 我们来重新理解一下这个图:…...
2.2 BackgroundWorker的使用介绍
BackgroundWorker 是 .NET Framework 中一个简化异步操作的组件,它位于 System.ComponentModel 命名空间下。它为开发人员提供了一种简单的方式在后台执行耗时操作,同时保持与 UI 线程的交互 主要属性以及任务如下: DoWork 事件:…...
Java从入门到“放弃”(精通)之旅——类和对象全面解析⑦
Java从入门到“放弃”(精通)之旅🚀——类和对象全面解析⑦ 一、面向对象初探 1.1 什么是面向对象? Java是一门纯面向对象的语言(OOP),在面向对象的世界里,一切皆为对象。面向对象是解决问题的一种思想&a…...
无回显RCE
在CTF和实战渗透中,不是每一个命令执行点都有回显,有时我们审了半天代码,却发现好不容易找到的命令执行没有回显,但是这并不代表这段代码不能被我们利用,在无回显的情况下也是可以利用的 首先我们来写一个最简单的php…...
DQN在Gym的MountainCar环境的实现
DQN on MountainCar 引言 在本次实验里,我构建了DQN和Dueling DQN,并在Gymnasium库的MountainCar环境中对它们展开测试。我通过调整训练任务的超参数,同时设计不同的奖励函数及其对应参数,致力于获取更优的训练效果。最后&#…...
typescript判断是否为空
1 判断数据类型 1.1 基础数据类型 比如number,string,boolean,使用typeof,返回值是string类型: 例如: if("number" typeof(item)) {egret.log("item的类型是number"); } else if(&…...
JavaScript forEach介绍(JS forEach、JS for循环)
文章目录 JavaScript forEach 方法全面解析基本概念语法详解参数说明 工作原理与其他循环方法的比较forEach vs for循环forEach vs map 实际应用场景DOM元素批量操作数据处理 性能考量常见陷阱与解决方案无法中断循环异步操作问题 高级技巧链式调用(不使用 forEach …...
C语言之图像文件的属性
🌟 嗨,我是LucianaiB! 🌍 总有人间一两风,填我十万八千梦。 🚀 路漫漫其修远兮,吾将上下而求索。 图像文件属性提取系统设计与实现 目录 设计题目设计内容系统分析总体设计详细设计程序实现…...
Java链表反转方法详解
一、理解链表结构 假设链表节点定义为: class ListNode {int val;ListNode next;ListNode(int x) { val x; } } 二、迭代法反转链表 核心思路 逐步反转每个节点的指针方向,最终使整个链表反向。 步骤拆解 初始化三个指针: prev…...
lmm-r1开源程序是扩展 OpenRLHF 以支持 LMM RL 训练,用于在多模态任务上重现 DeepSeek-R1
一、软件介绍 文末提供程序和源码下载学习 lmm-r1开源程序是扩展 OpenRLHF 以支持 LMM RL 训练,用于在多模态任务上重现 DeepSeek-R1。 二、简介 小型 3B 大型多模态模型(LMMs)由于参数容量有限以及将视觉感知与逻辑推理相结合的固有复杂性…...
Java学习笔记(数组,方法)
一,数组 1.数组初始化 1.1动态初始化 格式:数据类型[] 数组名 new 数据类型[数组长度]; int[] arr new int[3]; // 定义长度为3的int数组,元素默认值为0 double[] scores new double[5]; // 长度5,元素默认0.0 String[…...
嵌入式---零点漂移(Zero Drift)
一、零点漂移的定义与本质 零点漂移(简称“零漂”)指传感器在输入信号为零(或理论上应输出固定零值)时,输出信号随时间、温度、环境等因素变化而偏离初始零点的现象。 核心特征:无输入时输出非零且缓慢变…...
健身房管理系统设计与实现(springboot+ssm+vue+mysql)含万字详细文档
健身房管理系统设计与实现(springbootssmvuemysql)含万字详细文档 健身房管理系统是一个全面的解决方案,旨在帮助健身房高效管理日常运营。系统主要功能模块包括个人中心、会员管理、员工管理、会员卡管理、会员卡类型管理、教练信息管理、解聘管理、健身项目管理、…...
C语言if
一、题目引入 如果从键盘输入58,则以下程序输出的结果是多少? 二、运行结果 三、题目分析 因为这道题中的多个if是并列结构 所以只要条件满足都会执行 这一题58满足所有的条件 所以可以运行出来 也就是说每个if里面的条件都满足 所以都会打印出来 而下面的这种情况就是 if e…...
XSS学习1之http回顾
1. HTTP的基本结构与工作流程 HTTP是一个请求-响应协议,基于客户端与服务器之间的交互。每次用户通过浏览器请求某个资源时,HTTP协议都会完成一系列的步骤。 HTTP请求: HTTP请求由以下几个部分构成: 请求行: 请求方…...
小迪抓包技术算法加密(6-9天)
抓包技术 https://blog.csdn.net/2301_81015455/article/details/147014382 算法加密入门(了解) 在实际测试中安全性高一些得采用得都是AES等高安全加密,遇到这种,放弃你啥都不知道测个毛啊,所以直接run!!! 大部分解密时碰撞式…...
Tkinter与ttk模块对比:构建现代 Python GUI 的进化之路
在 Python GUI 开发中,标准库 tkinter 及其子模块 ttk(Themed Tkinter)常被同时使用。本文通过功能对比和实际案例,简单介绍这两个模块的核心差异。 1. 区别 Tkinter:Python 标准 GUI 工具包(1994年集成&…...
【数据结构入门训练DAY-18】信息学奥赛一本通T1331-后缀表达式的值
文章目录 前言一、题目二、解题思路总结 前言 本次训练内容: 栈的复习。栈模拟四则运算计算问题的练习。训练解题思维。 一、题目 从键盘读入一个后缀表达式(字符串),只含有0-9组成的运算数及加()、减…...
时序预测 | Transformer-LSTM-SVM时间序列预测(Matlab完整源码和数据,适合基础小白研究)
时序预测 | Transformer-LSTM-SVM时间序列预测(Matlab完整源码和数据,适合基础小白研究) 目录 时序预测 | Transformer-LSTM-SVM时间序列预测(Matlab完整源码和数据,适合基础小白研究)效果一览基本介绍代码…...
【HarmonyOS 5】makeObserved接口详解
【HarmonyOS 5】makeObserved接口详解 一、makeObserved接口是什么? makeObserved 接口(API version 12 起可用)用于将非观察数据转为可观察数据,适用于三方包类、Sendable 装饰的类、JSON.parse 返回的对象、collections.Array…...
色谱图QCPColorMap
一、QCPColorMap 概述 QCPColorMap 是 QCustomPlot 中用于绘制二维颜色图的类,可以将矩阵数据可视化为颜色图(热力图),支持自定义色标和插值方式。 二、主要属性 属性类型描述dataQCPColorMapData存储颜色图数据的对象interpol…...
【数据结构_12】二叉树(4)
一、二叉树的层序遍历 思路:可以按照先序的方式来遍历这个树,递归的时候,给递归方法,加上辅助的参数,level表示当前层数,递归过程中,根据level的值,决定当前整个节点要放到哪个list中…...
HCIA-Datacom高阶:vlan、vlanif、单臂路由、静态路由、ospf综合实验
本实验拓扑图如下:实验包含 AR1、AR2、AR3 路由器,LSW1(三层交换机)、LSW2、LSW3 交换机,以及 PC1-4 和 Server1。AR1 与 LSW2 通过单臂路由连接,AR2 与 AR3、LSW1 构成 OSPF 网络,AR1 与 AR2 间…...
HTTP 1.0 和 2.0 的区别
HTTP 1.0 和 2.0 的核心区别体现在性能优化、协议设计和功能扩展上,以下是具体对比: 一、核心区别对比 特性HTTP 1.0HTTP 2.0连接方式非持久连接(默认每次请求新建 TCP 连接)持久连接(默认保持连接,可复用…...
如何一键批量删除多个 Word 文档中的页眉和页脚
在工作中,许多 Word 文档的页眉页脚中包含公司名称、Logo、电话等信息,用于对外宣传。但有时我们需要批量删除这些页眉页脚信息,尤其当信息有误时,手动逐个删除会增加工作量,导致效率低下。本文将介绍一种便捷的方法&a…...
关于编译树莓派内核系统的总结
1.首先获取官方的内核系统源码: 然后在源码根目录执行命令: 🌟ARCHarm64 CROSS_COMPILEaarch64-linux-gnu- KERNELkernel8 make bcm2712_defconfig (注意这里的是树莓派5的64位的) 🌟ARCHarm CROSS_COM…...
AIGC赋能插画创作:技术解析与代码实战详解
文章目录 一、技术架构深度解析二、代码实战:构建AIGC插画生成器1. 环境配置与依赖安装2. 模型加载与文本提示词构建3. 图像生成与参数调优4. 风格迁移与多模型融合 三、进阶技巧:参数调优与效果增强四、应用场景代码示例1. 游戏角色设计2. 广告海报生成…...
平衡二叉树(leetcode刷题)
题目描述: 给定一个二叉树,判断它是否是 平衡二叉树 (平衡二叉树 是指该树所有节点的左右子树的高度相差不超过 1。) 示例 1: 输入:root [3,9,20,null,null,15,7] 输出:true示例 2࿱…...
【数据结构 · 初阶】- 带环链表
目录 一.基本结构 二.判断一个单链表带不带环 三.2个问题 1.为什么 slow 走 1 步,fast 走 2 步,他们会相遇,会不会错过?请证明。 2.为什么 slow 走 1 步,fast 走 X 步 ( X > 3 ),他们会相遇&#x…...
ClickHouse简介
OLAP与ClickHouse的定位 OLAP的核心概念 OLTP:服务于高并发、低延迟的短事务操作(如银行转账、订单支付),强调数据的增删改查(CRUD)和事务一致性(ACID)。 OLAP:专注于大…...
强制重装及验证onnxruntime-gpu是否正确工作
#工作记录 我们经常会遇到明明安装了onnxruntime-gpu或onnxruntime后,无法正常使用的情况。 一、强制重新安装 onnxruntime-gpu 及其依赖 # 强制重新安装 onnxruntime-gpu 及其依赖 pip install --force-reinstall --no-cache-dir onnxruntime-gpu1.18.0 --extra…...
分布自定义shell脚本(详写)附带全代码
涉及知识全排列 常见指令 小知识点 操作系统 什么是进程 进程控制 步骤 1:项目准备 在开始编写代码之前,你需要创建一个新的项目文件夹,并在其中创建一个 .cpp 文件,例如 my_shell.cpp。同时,确保你已经安装了 C…...
windows拷贝文件脚本
1、新建脚本文件xxx.bat,名字任意,后缀未.bat即可,将以下内容拷贝进去,修改src和des为自己文件的目录即可。 echo off :: 设置字符集为UTF-8,命令窗口能正确显示中文字符。 chcp 65001 rem 读取当前目录并进入当前目…...
Arduino编译和烧录STM32——基于J-link SWD模式
一、安装Stm32 Arduino支持 在arduino中添加stm32的开发板地址:https://github.com/stm32duino/BoardManagerFiles/raw/main/package_stmicroelectronics_index.json 安装stm32开发板支持 二、安装STM32CubeProgrammer 从stm32网站中安装:https://ww…...
Java表达式2.0
1 .数据类型转换 自动类型转换的规则 自动类型转换遵循一定的规则,这些规则确保了转换的合理性和安全性。以下是自动类型转换的主要规则: 容量小的类型自动转换为容量大的类型 Java中,数据类型的容量从小到大依次为:byte → shor…...
【概率论,算法】排列的峰值期望
Surtr1 的珂学难题 题目链接:https://ac.nowcoder.com/acm/contest/107965/E 给定一个长度为 n n n 的排列 p p p,排列中任一位置如果满足以下条件,则称该位置为 峰值: 位置 1:若存在元素,满足 p [ 1 ] > p […...
清理C盘组合拳:最高释放空间80GB+
分享一套系统化的C盘清理方案,涵盖从基础清理到深度优化的8个关键步骤,结合安全性与效率,可快速释放5-50GB空间: 一、精准定位空间占用源(必备工具) 空间可视化分析 使用 TreeSize Free 或 WizTree 扫描C…...
容器中的对象切片问题
C 容器(如 std::vector、std::list 等) 通常存储对象的副本,而非指向对象的指针。因此,当与继承结合使用时,可能导致 切片(Object Slicing) 问题,即仅存储基类部分,丢失派…...
SpringBoot编写单元测试
pom.xml引入单元测试的坐标 <!--单元测试坐标--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency>编写单元测试类 测试类…...
二、在springboot 中使用 AIService
在上一篇文章中,我们介绍了如何使用langchain4j实现简单的问答功能,本篇文章我们将介绍如何在springboot中使用AIService。 1.实现原理 先看下AiService注解所在的依赖langchain4j-spring-boot-starter中包含什么内容: 1.1 event.AiServi…...
拼多多面经,暑期实习Java一面
项目中的设计模式 mysql连接过程,索引,分库分表场景,路由策略 redis使用场景,分片集群怎么搭建与路由,数据一致性 分布式锁怎么用的,具体使用参数 线程池怎么用的,过程 sql having 分布式事务 如…...
Function calling LLMs 的 MCP:AI开发的双剑合璧
🧠 向所有学习者致敬! “学习不是装满一桶水,而是点燃一把火。” —— 叶芝 我的博客主页: https://lizheng.blog.csdn.net 🌐 欢迎点击加入AI人工智能社区! 🚀 让我们一起努力,共创AI未来! 🚀 在 MCPs 成为主流(或者像现在这样火得一塌糊涂)之前,大多数 AI …...
数字系统与编码
1. 数字系统(Number Systems) 1.1 常见数字系统 系统基数符号集示例应用场景二进制20, 11010计算机底层电路、数据存储八进制80-717Unix文件权限(如chmod 755)十进制100-942日常计算十六进制160-9, A-F0x1F内存地址、颜色编码&a…...
Pytorch实战
1、安装 安装 conda, Python工具大全,方便管理多个 Python 环境,必须选择跟自己环境配套的版本。 https://www.anaconda.com 网速慢的,可以参考国内源,也可以去这里看看: torch PyPI Index of /anaconda/miniconda…...
如何高效利用呼叫中心系统和AI语音机器人
要更好地使用呼叫中心系统和语音机器人,需要结合两者的优势,实现自动化、智能化、高效率的客户服务与业务运营。以下是优化策略和具体实践方法: 一、呼叫中心系统优化 1. 智能路由与IVR优化 智能ACD(自动呼叫分配) …...
LeetCode[232]用栈实现队列
思路: 一道很简单的题,就是栈是先进后出,队列是先进先出,用两个栈底相互对着,这样一个队列就产生了,右栈为空的情况,左栈栈底就是队首元素,所以我们需要将左栈全部压入右栈ÿ…...
using用法整理
using 的极简新手教程,用最直白的语言和代码解释: 美图美图 一、核心作用:给类型起别名 目的:让复杂类型名变短、变好记。 例子: // 原名:std::vector<std::string> // 起个别名就叫 StringList…...
《猎豹夕阳》
年少时很喜欢的一篇文章,曾和挚友一遍又一遍的记诵,今天又偶然遇到他,转载如下: 我第一次见到它,是在风雪的夜里。我不会抱怨这种天气,因为我是个优秀的登山探险者,我必须在这种天气下工作。我…...
【AI训练环境搭建】在Windows11上搭建WSL2+Ubuntu22.04+Tensorflow+GPU机器学习训练环境
一、安装Ubuntu 拿到该文件Ubuntu-22.04.tar 通过wsl导入该虚拟机镜像,然后查看wsl虚拟机列表。 wsl --import Ubuntu-22.04-tensorflow D:\wsl-data\Ubuntu-22.04-tensorflow D:\wsl-data\temp\Ubuntu-22.04.tarwsl -l 进入虚拟机 wsl -d Ubuntu-22.04-tensorfl…...
如何轻松实现用户充值系统的API自动化测试
在现代软件开发中,API(应用程序编程接口)作为连接不同系统和模块的关键组件,其重要性日益凸显。随着软件应用的互联性不断增强,API的数量和复杂度也在不断增加。传统的API测试方法面临着诸多挑战: 1.手动测…...