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

STP详解

STP

STP全称为“生成树协议”(Spanning Tree Protocol),是一种网络协议,用于在交换机网络中防止网络回路产生,保证网络的稳定和可靠性。它通过在网络中选择一条主路径(树形结构),并阻塞其他可能形成回路的路径,以避免数据包在网络中产生无限循环,从而实现网络的高效和可靠传输。STP在交换机之间进行通信和协调,确保网络拓扑结构的稳定和可用性,并且能够自动适应网络拓扑结构的变化。STP是一种基于链路层的协议,广泛应用于各种类型的局域网和数据中心网络中。

文章目录

    • STP
      • 技术背景
      • 作用:
        • BPDU
      • 原理
      • 生成树算法 —— 选举根交换机
        • 生成树算法 —— 选举根端口
        • 生成树算法 —— 选举指定端口并阻塞备用端口
        • 端口状态(Port States):
      • cost(成本值)的计算公式是
      • 案例

技术背景

在一个有多个交换机或者桥接器的网络中,当存在多条路径连接同一组设备时,可能会发生环路,数据包会不断循环在这些路径上传递,导致网络堵塞或者数据包丢失。这时候STP就可以检测并消除环路,保证数据包能够正确地传输。

一个缺乏冗余性设计的网络:任何一个网络节点出现故障,会造成单链路故障、单设备故障,使整个网络瘫痪。

引入冗余性的同时也引入了二层环路:网络的冗余性增强了,但是却出现了二层环路。

常见的二层环路的原因有:错误地连接设备之间的互联线缆、配置错误等。

STP用于构建一个无环的网络拓扑结构,防止数据包在网络中出现环路并造成广播风暴。STP的主要作用是在网络中选择一个最优的路径,以避免广播风暴和冗余数据包的产生,同时提高网络的可靠性和稳定性。

假设有一个大公司,公司的总部和各个分部之间需要进行通信和数据传输。为了保证通信的可靠性和安全性,每个分部都建立了多个交换机,这些交换机通过不同的链路连接着不同的主机和服务器。

然而,由于链路的冗余和网络的复杂性,可能会出现链路环路的情况,也就是说,某些交换机之间会存在多条路径,而这些路径上又连接了多个交换机,形成了一个环路。这样一来,数据包就可能在环路上不停地循环,无法到达目的地,从而导致通信故障。

为了解决这个问题,公司决定使用 STP 技术来避免链路环路的出现。通过在交换机之间建立逻辑上的拓扑结构,STP 可以选择一条最佳的路径,同时屏蔽其他的路径,从而避免数据包在环路上不停地循环,保证了数据的可靠传输。这样一来,公司的通信和数据传输就更加可靠和高效了。

作用:

用于在网络中防止数据包在交换机之间形成环路,从而导致网络故障和拥塞。在一个具有冗余链路的网络中,如果不进行处理,数据包就会在多个路径上无限制地循环发送,最终导致网络崩溃。

STP的基本思想是通过选择一条最优路径,从而构建一棵树形结构,从而消除环路。在这个树形结构中,只有一条路径连接任何两个设备,这保证了数据包不会形成环路,从而确保网络的正常运行。

STP的实现需要交换机之间的通信,它们需要交换信息来建立树形结构并确定根桥(Root Bridge),即网络中所有桥中最顶层的桥。在这个过程中,每个桥都会根据所接收到的信息计算出最短路径,并将这个信息向其他桥广播。如果一个桥接收到了另一个桥发送的更优信息,它将更新它自己的信息,并向其他桥广播这个新的信息。

当所有桥都收到了足够的信息后,它们将会选择一个桥作为根桥,并选择一条路径到根桥的最短路径,其余的路径都将被阻止。这个过程称为“生成树算法”。通过STP,网络管理员可以更好地控制网络,减少故障和拥塞,并提高网络的可靠性和稳定性。

  • 生成树算法(Spanning Tree Algorithm)是一种网络算法,其目的是在一个连通图中选择一棵生成树,使得该生成树包含原图的所有节点,且不存在环。

    在计算机网络中,生成树算法通常用于构建一个树形拓扑结构,以避免网络中的环路和冗余链路。生成树算法的实现通常通过网络设备上的协议来完成,其中最常用的就是Spanning Tree Protocol(STP)。

    STP是一种生成树算法,它通过将所有节点的连接关系看作一个图来计算生成树。首先,在该图中选取一个节点作为根节点,然后依次对每个非根节点进行计算,找到连接该节点的链路中的最短路径,将该链路加入生成树。如果该链路导致生成树中出现了环路,则通过从生成树中删除一条链路来解决环路问题。这个过程一直重复,直到所有的非根节点都被加入了生成树中。

    STP算法的实现可以通过以下步骤来完成:

    1. 选定一个根节点:在网络中选定一个根节点,将其作为生成树的根。
    2. 计算最短路径:对于每个非根节点,计算连接该节点的链路中的最短路径,将该链路加入生成树。
    3. 检测环路:检测生成树中是否存在环路,如果存在,则通过删除一条链路来解决环路问题。
    4. 计算端口状态:根据生成树的计算结果,对网络设备上的端口进行状态计算,决定哪些端口需要开启或关闭。

    STP算法的实现可以保证网络中不存在环路和冗余链路,从而提高网络的可靠性和稳定性。

例子:

假设有一个局域网,其中有5台交换机,它们分别是Switch1、Switch2、Switch3、Switch4和Switch5,它们通过多条链路相互连接。为了保证数据的传输不出现环路,我们需要在交换机之间构建一棵生成树。假设在这个局域网中,Switch1是根交换机,那么生成树的过程如下:

  1. Switch1作为根交换机,将所有的端口都设为根端口,并发送BPDU(Bridge Protocol Data Unit)报文,通知其他交换机它是根交换机。
  2. Switch2、Switch3和Switch4收到BPDU报文后,比较自己的参数与BPDU报文的参数,发现Switch1的参数更优,因此它们都将自己的根端口设为与Switch1相连的端口,并将自己的非根端口设为指向根端口的端口,然后再向其他交换机发送BPDU报文,以便其他交换机更新生成树的信息。
  3. Switch5收到BPDU报文后,发现Switch1的参数更优,因此它将自己的根端口设为与Switch1相连的端口,并将自己的非根端口设为指向根端口的端口,然后向其他交换机发送BPDU报文。
  4. 在上述过程中,如果有多条链路具有相同的参数,那么根据STP算法中的端口优先级和端口号来决定哪条链路是根端口,哪些是指向根端口的非根端口。
  5. 经过以上步骤,生成树构建完成,其中Switch1作为根交换机,Switch2、Switch3、Switch4和Switch5成为根交换机的子节点。这样,在数据传输过程中,就可以通过生成树来保证数据只能按照一个方向流动,避免了出现环路和数据丢失等问题。

需要注意的是,STP有多个版本,包括STP、RSTP、MSTP等,它们都有不同的特点和用途。此外,由于STP需要进行广播和计算,因此它可能会对网络性能产生一定的影响,因此在设计网络时需要权衡STP的优点和缺点,选择适当的版本和配置。

BPDU

BPDU是指桥接协议数据单元(Bridge Protocol Data Unit),是在网络中由网桥或交换机发送的信息单元,用于进行交换机之间的通信,以实现网络拓扑的自动发现和动态调整。

当交换机启用STP协议(Spanning Tree Protocol)时,交换机会通过发送BPDU来交流网络拓扑信息,并利用这些信息计算生成一个树型的拓扑结构,从而避免出现网络环路而导致的广播风暴和网络故障。BPDU包含了发送者的标识、端口的标识、桥的标识和优先级、BPDU类型以及其他必要的信息。

交换机通过BPDU实现以下功能:

  1. 发现交换机之间的链路关系。
  2. 选举根交换机,确定整个网络的拓扑结构。
  3. 计算最短路径,防止出现环路。
  4. 监控链路状态,检测链路故障。
  5. 动态调整网络拓扑结构,实现快速恢复。

BPDU包括以下内容:

  1. Protocol Identifier(2 bytes):协议标识符,表示该BPDU是由哪种协议生成的,STP的标识符为0x0000。
  2. Protocol Version Identifier(1 byte):协议版本标识符,表示生成BPDU的STP版本,STP版本1为0x00,STP版本2为0x02。
  3. BPDU Type(1 byte):BPDU类型,包括配置BPDU(0x00)、TCN BPDU(Topology Change Notification,0x80)、RST BPDU(Rapid Spanning Tree,0x02)等。
  4. Flags(1 byte):标志位,包括TCA(Topology Change Acknowledgment)、Proposal、Port Role、Learning、Forwarding和Agreement等。
  5. Root Identifier(8 bytes):根桥的优先级和MAC地址,用于在网络中选举根桥。
  6. Root Path Cost(4 bytes):从发送BPDU的桥到根桥的路径代价。
  7. Bridge Identifier(8 bytes):发送BPDU的桥的优先级和MAC地址。
  8. Port Identifier(2 bytes):发送BPDU的端口编号。
  9. Message Age(2 bytes):BPDU已经存在的时间,以BPDU为单位计算,最大值为0x1FFF。
  10. Maximum Age(2 bytes):BPDU在网络中的最大生存时间,达到该时间BPDU会被认为是过期的,以BPDU为单位计算,最大值为0x1FFF。
  11. Hello Time(2 bytes):发送两个连续BPDU之间的时间间隔,以BPDU为单位计算,最大值为0x1FFF。
  12. Forward Delay(2 bytes):收到TCN BPDU后,等待网络稳定的时间,以BPDU为单位计算,最大值为0x1FFF。

原理

STP(Spanning Tree Protocol)是一种用于创建环路无环路网络拓扑结构的协议。其主要原理是通过选举一个根桥(root bridge)和将其他桥连接到这个根桥的方式来消除网络中的环路。

在STP中,每个桥的端口会被分为两种类型:根端口(root port)和指定端口(designated port)。其中,根端口是连接到根桥的端口,而指定端口是连接到其他桥的端口。通过选举根桥以及为每个桥分配根端口和指定端口,可以实现一个无环路的拓扑结构。

具体实现过程如下:

  1. 选举根桥:在网络中,所有的桥会通过发送BPDU(Bridge Protocol Data Unit)来选举根桥。BPDU包含了桥的ID和优先级等信息,其中ID是由优先级和MAC地址组成的,优先级越高的桥被选为根桥。选举完成后,根桥会向其他桥发送BPDU,其他桥也会将其接收到的BPDU向其他桥转发,以保持网络拓扑的更新和同步。
  2. 计算根端口和指定端口:每个桥根据收到的BPDU计算出到根桥的距离(path cost),距离越短的桥被选为根端口。同时,每个桥还需要选出一个或多个设计端口,这些设计端口会将数据帧转发到其他桥。
  3. 收敛过程:在网络拓扑发生变化时,STP会通过重新选举根桥和重新计算端口的方式重新构建拓扑结构,直到网络达到一个无环路的状态。这个过程被称为收敛过程,需要一定的时间来完成。

STP的主要作用是保证网络中不会出现环路,从而避免数据包的不必要循环和丢失。同时,STP还能够自动适应网络拓扑的变化,确保网络拓扑结构的稳定和可靠。

生成树算法 —— 选举根交换机

  1. 根交换机的选举条件:网桥ID(BID)最小者当选。
  2. 网桥ID(BID)由以下两部分构成:
    • 优先级
      • 范围 0 - 61440
      • 步长 4096
      • 默认值 32768
    • 交换机的基本MAC地址
  3. 网桥ID(BID)的比较方法
    • 优先级取值越小,则网桥ID(BID)就越小。

生成树算法 —— 选举根端口

  1. 在一个非根交换机上选举出一个根端口RP(Root Port)。并且只能是一个。
  2. 根端口RP用于接收根交换机发来的BPDU。也用于转发普通流量。
  3. 根端口RP的选举条件:
    • BPDU接收端口到根交换机的路径成本最小。
    • 对端的网桥ID(BID)最小。
    • 对端的端口ID(PID)最小。
      • 优先级
        • 范围 0 - 240
        • 步长 16
        • 默认值:128
      • 端口号
  • 链路带宽成本值
    4MB/s250
    10MB/s100
    16MB/s62
    100MB/s19
    1GB/s4
    10GB/s2

生成树算法 —— 选举指定端口并阻塞备用端口

  1. 在每个段上选出一个指定端口DP(Designated Port)并且只能是一个。
  2. 指定端口DP用于转发根交换机发来的BPDU,也用来转发普通流量。
  3. 指定端口DP的选举条件:
    • 根交换机的所有端口都是指定端口DP。
    • 根端口的对端端口一定是指定端口DP。
    • BPDU转发端口到根交换机的路径成本最小。
    • 本端的网桥ID(BID)最小。
  4. 剩余端口成为备用端口AP(Alternate Port),将它们阻塞。

端口状态(Port States):

端口状态是指在一个交换机的端口与跟桥之间的关系。STP确保在一个桥接网络中只有一条活动的路径,从而避免了环路问题。端口状态共有5种:

  1. Disabled(禁用状态):禁用状态的端口不会参与 STP 的计算,处于物理层断开状态。
  2. Blocking(阻塞状态):端口接收到 BPDU (Bridge Protocol Data Unit) 数据帧后,端口进入阻塞状态,不会转发数据,但会继续监听网络中的 BPDU,阻止环路的产生。
  3. Listening(监听状态):端口接收到 BPDU 数据帧后,进入监听状态。此时,端口仍然不会转发数据,但会继续监听 BPDU,此状态通常持续 15 秒。
  4. Learning(学习状态):端口在监听状态一段时间后,进入学习状态,开始学习与之相连的设备 MAC 地址,但不会转发数据。
  5. Forwarding(转发状态):学习完毕后,端口进入转发状态,开始转发数据。在这个状态下,端口将正常工作,将数据帧从一个端口转发到另一个端口。
  • 在阻塞状态下,端口只能接收bpdu报文。从这种状态转变可能需要20秒;
  • 在监听状态下,交换机判断是否有其他路径到达根桥。向前延迟,持续
    15秒。监听状态:用户数据不被转发,MAC地址不被学习;
  • 在学习状态下,用户数据不会被转发,但MAC地址会从看到的任何流量
    中学习。学习状态持续15秒,也称为前向延迟;
  • 转发状态转发用户数据,继续学习MAC地址。bpdu仍在处理;

cost(成本值)的计算公式是

cost = 200000 Kbps / port_speed

因此,可以看出 Cisco 交换机默认的 cost 值是由带宽决定的,而带宽越大,成本值越小,这也符合了生成树算法的本质,即选择最短路径。同时,由于交换机的速度越来越快,所以在一些新型的 Cisco 交换机中,可能会将默认的 reference bandwidth 值提高到 100Gbps 或更高的数值,以适应新的硬件环境。

其中,port_speed是指端口速率。对于各种常见的端口速率,对应的成本值如下:

  1. 端口号
链路带宽成本值
4MB/s250
10MB/s100
16MB/s62
100MB/s19
1GB/s4
10GB/s2

案例

案例1:
在这里插入图片描述
案例2:
在这里插入图片描述
案例3:
在这里插入图片描述

相关文章:

STP详解

STP STP全称为“生成树协议”(Spanning Tree Protocol),是一种网络协议,用于在交换机网络中防止网络回路产生,保证网络的稳定和可靠性。它通过在网络中选择一条主路径(树形结构),并…...

linux AWK常用命令 —— 筑梦之路

搜集整理awk常用命令,以便使用查询 # 打印文件第一列awk {print $1} rumenz.txt# 打印文件前两列awk {print $1,$2} rumenz.txt# 打印文件最后一列awk {print $NF} rumenz.txt# 打印文件总行数awk END{print NR} rumenz.txt# 打印文件第一行awk NR1{print} rumenz.…...

SpringCloud:服务拆分及远程调用

目录 SpringCloud:服务拆分及远程调用 1、服务拆分 2、远程调用 SpringCloud:服务拆分及远程调用 SpringCloud是目前国内使用最广泛的微服务框架。 官网地址: Spring Cloud SpringCloud集成了各种微服务功能组件,并基于SpringBoot实现了…...

网络应用之javascript函数定义和调用

函数定义和调用学习目标能够写出函数的定义和调用方式1. 函数定义函数就是可以重复使用的代码块, 使用关键字 function 定义函数。<script type"text/javascript">// 函数定义function fnAlert(){alert(hello!);} </script>2. 函数调用函数调用就是函数名…...

使用VNC远程连接Ubuntu - 内网穿透实现公网远程办公

写在前面&#xff1a;博主是一只经过实战开发历练后投身培训事业的“小山猪”&#xff0c;昵称取自动画片《狮子王》中的“彭彭”&#xff0c;总是以乐观、积极的心态对待周边的事物。本人的技术路线从Java全栈工程师一路奔向大数据开发、数据挖掘领域&#xff0c;如今终有小成…...

JavaScript Date 日期对象

文章目录JavaScript Date 日期对象Date 对象Date 对象属性Date 对象方法创建日期设置日期两个日期比较JavaScript Date 日期对象 日期对象用于处理日期和时间。 Date 对象 Date 对象用于处理日期与实际。 创建 Date 对象&#xff1a; new Date(). 以上四种方法同样可以创建…...

婴幼儿常见八大疾病及护理方法

在1岁之前&#xff0c;婴儿的体质还没有完全发育&#xff0c;很容易生病&#xff0c;大多数婴儿在1岁之后都会更好。今天&#xff0c;新的稀有婴儿育儿专家组织了一些婴儿最容易患的疾病和护理方法。1、新生儿黄疸宝宝出生后&#xff0c;你可能会注意到他的皮肤发黄。别担心&am…...

UVa 817 According to Bartjens 数字表达式 DFS ID 迭代加深搜 逆波兰表达式

题目链接&#xff1a;According to Bartjens 题目描述&#xff1a; 给定一个由数字和一个组成的字符串&#xff0c;你需要在数字之间添加,−,∗,-,*,−,∗三种符号&#xff0c;在保证表达式合法的情况下&#xff08;同时形成的新的数字不能有前导零&#xff09;&#xff0c;使表…...

c++基础/类和对象

c基础 2.1名字空间 namespace 防止命名冲突 说明&#xff1a;名字空间可以在全局作用域或其他作用域&#xff08;另一个名字空间&#xff09;内部定义&#xff0c;但不能在函数或类的内部定义。 使用&#xff1a; #include<iostream> using namespace std; //std中包…...

2023年中国人工智能产业趋势报告

易观&#xff1a;尽管2022年人工智能市场发展活跃度不及预期&#xff0c;但2022年对人工智能产业来说无疑是令人激动的一年。年中由DALL-E 2以及其后Stable Diffusion和Midjourney等文本-图像生成模型引起公众对人工智能生成内容的大量关注&#xff0c;年末ChatGPT的横空出世刷…...

STM32定时器的配置,解析预分频系数和重装载值与时钟频率的关系

&#x1f38a;【蓝桥杯嵌入式】专题正在持续更新中&#xff0c;原理图解析✨&#xff0c;各模块分析✨以及历年真题讲解✨都在这儿哦&#xff0c;欢迎大家前往订阅本专题&#xff0c;获取更多详细信息哦&#x1f38f;&#x1f38f;&#x1f38f; &#x1fa94;本系列专栏 - 蓝…...

解决Sql WorkBench中数据库不能重命名的问题

解决Sql WorkBench中数据库不能重命名的问题mysql不支持直接重命名数据库1. 连接到数据库2. 打开菜单&#xff0c;选择迁移向导3. 点击Start Migration4. 填写源数据库的相应参数5. 填写目标数据库的响应参数6. 稍等片刻&#xff0c;点击Next7. 选择你要迁移的数据库。8. 进入一…...

REFL: 联邦学习中智能的设备选择方法

原创 齐天宇 隐私计算研习社 收录于合集#联邦学习54个现有的FL方案使用随机的参与者选择来提高选择过程的公平性&#xff0c;但是这会导致资源的低效利用和较低的训练质量。本文系统地解决了FL中资源效率低效的问题&#xff0c;展示了智能参与者选择和合并来自落后参与者的更新…...

Linux:NFS服务器

目录NFS服务器的介绍例NFS服务器的介绍 1&#xff0c;NFS&#xff08;网络文件系统&#xff09;&#xff0c;主要用于服务器分享提供文件或文件系统等服务&#xff0c;与其他服务器有所不同&#xff0c;主打的是分享&#xff0c;所以没有配置文件&#xff0c;只需要在 /etc/ex…...

电子技术——数字逻辑反相器

电子技术——数字逻辑反相器 在学习完如何通过CMOS数字电路实现组合逻辑&#xff0c;接下来我们评估这种数字CMOS电路的性能。首先&#xff0c;我们考虑最基本的部件——反相器。 电压传导特性 下图是一个反相器的原理图&#xff1a; 在之前&#xff0c;我们已经介绍了MOSFE…...

python的多线程编程之锁

1、 背景概述 在上篇文章中&#xff0c;主要讲述了python中的socket编程的一些基本方面&#xff0c;但是缺少关于锁的相关概念&#xff0c;从而在这篇文章中进行补充。 由于在python中&#xff0c;存在了GIL&#xff0c;也就是全局解释器锁&#xff0c;从而在每次进行获得cpu的…...

Android Framework-进程间通信——Binder

我们知道&#xff0c;同一个程序中的两个函数之间能直接调用的根本原因是处于相同的内存空间中。 比如有以下两个函数A和B&#xff1a; /*Simple.c*/ void A() { B(); } void B() { }因为是在一个内存空间中&#xff0c;虚拟地址的映射规则完全一致&#xff0c;所以函数A和B之…...

有趣的小知识(二)浏览器内的秘密:了解Cookie基础知识

一、简介 Cookie是一种小型的文本文件&#xff0c;由Web服务器发送给Web浏览器&#xff0c;并存储在用户的计算机硬盘上。它通常用于记录用户的偏好、登录状态、购物车信息等&#xff0c;以便在用户下次访问该网站时能够提供更好的用户体验。Cookie通常包含网站的名称、Cookie的…...

Spring框架

DI:依赖注入IOC:控制反转AOP:面向切面IOC容器&#xff1a;存放管理各种对象Spring优势&#xff1a;低耦合。&#xff08;降低组件之间的关联性&#xff0c;实现软件各层之间的解耦&#xff09;声明式事务管理&#xff08;基于AOP来管理&#xff09;和其他框架的整合&#xff08…...

mysql8的表锁排查

information_schema.innodb_trx ##正在运行的事务信息。 sys.innodb_lock_waits ##处于锁等待的关联事务信息。 performance_schema.threads ##SQL线程及线程号、进程号、OS线程号等信息 # 查询锁的情况 select * from performance_schema.data_locks where object_name =t_xxx…...

[2025CVPR]DeepVideo-R1:基于难度感知回归GRPO的视频强化微调框架详解

突破视频大语言模型推理瓶颈,在多个视频基准上实现SOTA性能 一、核心问题与创新亮点 1.1 GRPO在视频任务中的两大挑战 ​安全措施依赖问题​ GRPO使用min和clip函数限制策略更新幅度,导致: 梯度抑制:当新旧策略差异过大时梯度消失收敛困难:策略无法充分优化# 传统GRPO的梯…...

【Zephyr 系列 10】实战项目:打造一个蓝牙传感器终端 + 网关系统(完整架构与全栈实现)

🧠关键词:Zephyr、BLE、终端、网关、广播、连接、传感器、数据采集、低功耗、系统集成 📌目标读者:希望基于 Zephyr 构建 BLE 系统架构、实现终端与网关协作、具备产品交付能力的开发者 📊篇幅字数:约 5200 字 ✨ 项目总览 在物联网实际项目中,**“终端 + 网关”**是…...

Maven 概述、安装、配置、仓库、私服详解

目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...

Java 二维码

Java 二维码 **技术&#xff1a;**谷歌 ZXing 实现 首先添加依赖 <!-- 二维码依赖 --><dependency><groupId>com.google.zxing</groupId><artifactId>core</artifactId><version>3.5.1</version></dependency><de…...

LINUX 69 FTP 客服管理系统 man 5 /etc/vsftpd/vsftpd.conf

FTP 客服管理系统 实现kefu123登录&#xff0c;不允许匿名访问&#xff0c;kefu只能访问/data/kefu目录&#xff0c;不能查看其他目录 创建账号密码 useradd kefu echo 123|passwd -stdin kefu [rootcode caozx26420]# echo 123|passwd --stdin kefu 更改用户 kefu 的密码…...

GitFlow 工作模式(详解)

今天再学项目的过程中遇到使用gitflow模式管理代码&#xff0c;因此进行学习并且发布关于gitflow的一些思考 Git与GitFlow模式 我们在写代码的时候通常会进行网上保存&#xff0c;无论是github还是gittee&#xff0c;都是一种基于git去保存代码的形式&#xff0c;这样保存代码…...

【JVM面试篇】高频八股汇总——类加载和类加载器

目录 1. 讲一下类加载过程&#xff1f; 2. Java创建对象的过程&#xff1f; 3. 对象的生命周期&#xff1f; 4. 类加载器有哪些&#xff1f; 5. 双亲委派模型的作用&#xff08;好处&#xff09;&#xff1f; 6. 讲一下类的加载和双亲委派原则&#xff1f; 7. 双亲委派模…...

LLMs 系列实操科普(1)

写在前面&#xff1a; 本期内容我们继续 Andrej Karpathy 的《How I use LLMs》讲座内容&#xff0c;原视频时长 ~130 分钟&#xff0c;以实操演示主流的一些 LLMs 的使用&#xff0c;由于涉及到实操&#xff0c;实际上并不适合以文字整理&#xff0c;但还是决定尽量整理一份笔…...

Web中间件--tomcat学习

Web中间件–tomcat Java虚拟机详解 什么是JAVA虚拟机 Java虚拟机是一个抽象的计算机&#xff0c;它可以执行Java字节码。Java虚拟机是Java平台的一部分&#xff0c;Java平台由Java语言、Java API和Java虚拟机组成。Java虚拟机的主要作用是将Java字节码转换为机器代码&#x…...

在树莓派上添加音频输入设备的几种方法

在树莓派上添加音频输入设备可以通过以下步骤完成&#xff0c;具体方法取决于设备类型&#xff08;如USB麦克风、3.5mm接口麦克风或HDMI音频输入&#xff09;。以下是详细指南&#xff1a; 1. 连接音频输入设备 USB麦克风/声卡&#xff1a;直接插入树莓派的USB接口。3.5mm麦克…...