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

链式结构二叉树(递归暴力美学)

在这里插入图片描述


在这里插入图片描述


文章目录

  • 1. 链式结构二叉树
    • 1.1 二叉树创建
  • 2. 前中后序遍历
    • 2.1 遍历规则
    • 2.2 代码实现
      • 图文理解
  • 3. 结点个数以及高度等
    • 二叉树结点个数
      • 正确做法:
  • 4. 层序遍历
  • 5. 判断是否完全二叉树

1. 链式结构二叉树

完成了顺序结构二叉树的代码实现,可以知道其底层结构是类似顺序表的结构;
因此,链式结构的二叉树类似于链表结构。

二叉树的结构一般由指数据域和左右指针域这三个域组成。

typedef char BTDataType;typedef struct BinaryTreeNode
{BTDataType data; //当前结点数据域struct BinaryTreeNode* left; //指向当前结点左孩⼦struct BinaryTreeNode* right; //指向当前结点右孩⼦
}BTNode;

1.1 二叉树创建

由于二叉树的代码实现过于复杂,因此这里采用手动创建一棵链式二叉树方便后续思路的代码实现。

单独封装一个函数可用来申请结点(和链表一样);
手动创建多个结点,并让其形成一棵二叉树。

BTNode* BuyNode(BTDataType x)
{BTNode* node = (BTNode*)malloc(sizeof(BTNode));if (node == NULL){perror("malloc fail!");exit(1);}//malloc成功node->data = x;node->left = node->right = NULL;return node;
}
//手动构造一颗二叉树
BTNode* CreaterTree()
{BTNode* newnodeA = BuyNode('A');BTNode* newnodeB = BuyNode('B');BTNode* newnodeC = BuyNode('C');BTNode* newnodeD = BuyNode('D');BTNode* newnodeE = BuyNode('E');BTNode* newnodeF = BuyNode('F');newnodeA->left = newnodeB;newnodeA->right = newnodeC;newnodeB->left = newnodeD;newnodeC->left = newnodeE;newnodeC->right = newnodeF;return newnodeA;
}

在这里插入图片描述

2. 前中后序遍历

既然是二叉树,那必然也离不开遍历。因此,我们有多种遍历方式。

2.1 遍历规则

按照规则,二叉树的遍历有:前序/中序/后序的递归结构遍历:

  1. 前序遍历(Preorder Traversal 亦称先序遍历):访问根结点的操作发生在遍历其左右子树之前
    访问顺序为:根结点、左子树、右子树(简称:根、左、右)
  2. 中序遍历(Inorder Traversal):访问根结点的操作发生在遍历其左右子树之中(间)
    访问顺序为:左子树、根结点、右子树(简称:左、根、右)
  3. 后序遍历(Postorder Traversal):访问根结点的操作发生在遍历其左右子树之后
    访问顺序为:左子树、右子树、根结点(简称:左、右、根)

以前序遍历为例如下图所示:
遵循前序遍历的规则:
1 先是访问A结点,然后进入左子树;
2. 在左子树中访问B根结点,进入B结点的左子树;
3. 在左子树中访问D根结点,而D中没有左子树和右子树,返回访问B的右子树;
4. B的右子树不存在,返回访问A的右子树;
5. 在右子树中访问C根结点,进入C结点的左子树;
6. 在左子树中访问E根结点,而E中没有左子树和右子树,返回访问C的右子树;
7. 在右子树中访问F根结点,F中没有左子树和右子树,遍历结束。

因此,前序遍历出来的数据是: A B D NULL NULL NULL C E NULL NULL F NULL NULL (NULL表示空)
在这里插入图片描述

图文理解

在这里插入图片描述

2.2 代码实现

为了方便理解,建议看完此二篇。
函数栈帧的创建和销毁.

函数递归的理解 <-- 详见此文


前序遍历
//前序遍历 --- 根左右
void PreOrder(BTNode* root)
{if (root == NULL){printf("NULL ");return;}printf("%c ", root->data);PreOrder(root->left);PreOrder(root->right);
}

图文理解

以上文的二叉树,前序遍历为例:
在这里插入图片描述


中序遍历
//中序遍历 --- 左根右
void InOrder(BTNode* root)
{if (root == NULL){printf("NULL ");return;}InOrder(root->left);printf("%c ", root->data);InOrder(root->right);
}
后序遍历
//后序遍历 --- 左右根
void PostOrder(BTNode* root)
{if (root == NULL){printf("NULL ");return;}PostOrder(root->left);PostOrder(root->right);printf("%c ", root->data);
}

3. 结点个数以及高度等

二叉树结点个数

错误示例1:

int BinaryTreeSize(BTNode* root)
{static int size = 0;if (root == NULL){return 0;}++size;BinaryTreeSize(root->left);BinaryTreeSize(root->right);return size;
}

我们开始的想法是通过调用该函数,在里面通过变量size计数,但每次递推调用函数的时候size又会重新置为0,因此我们又考虑用static修饰size延长其生命周期,使得每次递推的时候都能使size保存上一个函数调用的值最后返回size的值得到该二叉树的结点个数。

但是,这明显存在一个错误,如果我们再次计算这个二叉树结点个数会出现什么情况?
在这里插入图片描述
我们打断点调试会发现size的值是从6开始的,这是为什么呢?
很明显,size被static修饰延长了生命周期,使得该变量不再是因为栈空间的结束而销毁。因此,该做法是不可取的。
在这里插入图片描述

错误示例2:

void BinaryTreeSize(BTNode* root, int* psize)
{if (root == NULL){return 0;}++(*psize);BinaryTreeSize(root->left,psize);BinaryTreeSize(root->right,psize);
}

既然我们不能从函数内部计数,那么我们是否能在函数外部定义指针变量size(要使得形参的改变能影响实参)来计数呢?
虽然解决了生命周期被延长的做法,但下次调用函数依旧会出现问题,还是因为size没有从0开始(需要手动置为0)。

正确做法:

// ⼆叉树结点个数
int BinaryTreeSize(BTNode* root)
{if (root == NULL){return 0;}return 1 + BinaryTreeSize(root->left) + BinaryTreeSize(root->right);
}

深刻理解了递归和栈帧空间的创建销毁思想后,一棵二叉树是由根结点、左子树和右子树组成的,那么计算结点个数自然而然就是 1 + 左子树 + 右子树

4. 层序遍历

建议看完此篇。
栈和队列 <-- 详见此文

层序遍历:从所在二叉树的根结点出发,先访问第⼀层的树根结点,然后从左到右访问第2
层上的结点,接着是第三层的结点,以此类推,自上而下,自左至右逐层访问树的结点的过程。

实现层序遍历需要额外借助数据结构:队列

  1. 将二叉树的根节点传给队列(队列可根据根节点找到左子树和右子树);
  2. 取队头元素并打印,同时删除队头元素;
  3. 若存在左孩子或右孩子,依次入队列;
  4. 继续取队头元素并打印,删除队头元素同时将队头的左孩子和右孩子入队列(存在情况下);
  5. 如此循环下去,直到队列为空完成了层序遍历。

在这里插入图片描述

// 层序遍历
void LevelOrder(BTNode* root)
{//借助数据结构--队列Queue q;QueueInit(&q);QueuePush(&q, root);while (!QueueEmpty(&q)){//取队头,出队头BTNode* top = QueueFront(&q);QueuePop(&q);printf("%c ", top->data);//队头左右孩子入队列(不为空)if (top->left){QueuePush(&q, top->left);}if (top->right){QueuePush(&q, top->right);}}QueueDestroy(&q);
}

5. 判断是否完全二叉树

非完全二叉树:
在这里插入图片描述
完全二叉树:
在这里插入图片描述

// 判断⼆叉树是否是完全⼆叉树
bool BinaryTreeComplete(BTNode* root)
{Queue q;QueueInit(&q);QueuePush(&q, root);while (!QueueEmpty(&q)){BTNode* top = QueueFront(&q);QueuePop(&q);if (top == NULL){break;}//把不为空的队头节点的左右孩子入队列QueuePush(&q, top->left);QueuePush(&q, top->right);}//队列不一定为空,继续取队头出队头while (!QueueEmpty(&q)){BTNode* top = QueueFront(&q);QueuePop(&q);if (top != NULL){QueueDestroy(&q);return false;}}QueueDestroy(&q);return true;
}

在这里插入图片描述


在这里插入图片描述


相关文章:

链式结构二叉树(递归暴力美学)

文章目录 1. 链式结构二叉树1.1 二叉树创建 2. 前中后序遍历2.1 遍历规则2.2 代码实现图文理解 3. 结点个数以及高度等二叉树结点个数正确做法&#xff1a; 4. 层序遍历5. 判断是否完全二叉树 1. 链式结构二叉树 完成了顺序结构二叉树的代码实现&#xff0c;可以知道其底层结构…...

gc buffer busy acquire导致的重大数据库性能故障

&#x1f4e2;&#x1f4e2;&#x1f4e2;&#x1f4e3;&#x1f4e3;&#x1f4e3; 作者&#xff1a;IT邦德 中国DBA联盟(ACDU)成员&#xff0c;10余年DBA工作经验 Oracle、PostgreSQL ACE CSDN博客专家及B站知名UP主&#xff0c;全网粉丝10万 擅长主流Oracle、MySQL、PG、高斯…...

Unity中Spine骨骼动画完全指南:从API详解到避坑实战

Unity中Spine骨骼动画完全指南&#xff1a;从API详解到避坑实战 一、为什么要选择Spine&#xff1f; Spine作为专业的2D骨骼动画工具&#xff0c;相比传统帧动画可节省90%资源量。在Unity中的典型应用场景包括&#xff1a; 角色换装系统&#xff08;通过插槽替换部件&#xf…...

面经-C语言——堆和栈的区别,引用和指针区别,Linux的常用指令,RS232和RS485,TCP连接建立与断开

面经-C语言——堆和栈的区别&#xff0c;引用和指针区别&#xff0c;Linux的常用指令,RS232和RS485,TCP连接建立与断开 堆(Heap)和栈(Stack)的详细比较引用和指针区别对比表&#xff1a;Linux的常用指令RS232和RS485的详细比较&#xff1a;TCP连接建立与断开三次握手&#xff0…...

(2024|Nature Medicine,生物医学 AI,BiomedGPT)面向多种生物医学任务的通用视觉-语言基础模型

BiomedGPT: A generalist vision–language foundation model for diverse biomedical tasks 目录 1. 摘要 2. 引言 3. 相关研究 3.1 基础模型与通用生物医学 AI 3.2 生物医学 AI 的局限性 3.3 BiomedGPT 的创新点 4. 方法 4.1 架构及表示 4.1.1 模型架构选择 4.1.2 …...

python代码

python\main_script.py from multiprocessing import Process import subprocessdef call_script(args):# 创建一个新的进程来运行script_to_call.pyprocess Process(targetrun_script, args(args[0], args[1]))process.start()process2 Process(targetrun_script, args(arg…...

mongodb 使用内存过大分析

ps aux 内存使用 ps aux|head -1;ps aux|grep -v PID|sort -rn -k 4|head -10swap 使用 for i in $(ls /proc | grep "^[0-9]" | awk $0>100); do awk /Swap:/{aa$2}END{print "$i",a/1024"M"} /proc/$i/smaps;done| sort -k2nr | headmon…...

服务器虚拟化技术深度解析:原理、实践与未来趋势

文章目录 引言&#xff1a;数字化转型的核心引擎第一章 服务器虚拟化技术演进史1.1 虚拟化技术发展脉络1.2 虚拟化技术演进图谱 第二章 虚拟化核心技术解析2.1 Hypervisor架构类型2.1.1 Type 1 裸金属架构2.1.2 Type 2 宿主型架构 2.2 虚拟化实现方式对比2.3 关键技术创新2.3.1…...

C语言常见概念

目录 第一个C语言程序 main函数 写法&#xff1a; printf和库函数 printf()函数 库函数 关键字 字符和ASCII码表 字符串和\0 转义字符 语句 注释 注释的两种形式 第一个C语言程序 #include<stdio.h>//第一个c语言程序 int main() {printf("Hello World…...

sql字符串函数及字符拼接函数

concat(str1,str2)函数&#xff1a;拼接字符串 UPPER(str)&#xff1a;字符串变成大写 LOWER(str)&#xff1a;字符串变小写 LENGTH(str)&#xff1a;获取字符串的长度 left(str,len)&#xff1a;获取字符串左边len个字符 right(str,len)&#xff1a;获取字符串右边len个字符 s…...

Qt的QTableWidget类的声明定义和使用

QTableWidget类的声明定义 QTableWidget 是 Qt 框架中的一个类&#xff0c;它继承自 QAbstractItemView 并提供了用于显示和操作二维表格数据的接口。这个类不是由用户直接声明的&#xff0c;而是由 Qt 库提供的。你可以在你的 Qt 应用程序中通过包含相应的头文件来使用它。 …...

【kafka实战】06 kafkaTemplate java代码使用示例

在 Spring Boot 中使用 KafkaTemplate 可以方便地向 Kafka 发送消息。下面为你详细介绍使用步骤和示例代码。 1. 创建 Spring Boot 项目 你可以使用 Spring Initializr&#xff08;https://start.spring.io/ &#xff09;来创建一个新的 Spring Boot 项目&#xff0c;添加以下…...

使用C#开发一款通用数据库管理工具

由于经常使用各种数据库&#xff0c;笔者自己动手丰衣足食&#xff0c;使用C#开发了一款通用数据库管理工具&#xff0c;支持Mysql、Oracle、Sqlite、SQL Server等数据库的表、视图、存储过程、函数管理功能&#xff0c;并支持导入导出、数据字典生成、拖拽式跨机器跨库数据一键…...

90.子集||

要求所有可能的子集&#xff0c;不能重复&#xff0c;因此对于相同的数字&#xff0c;要考虑去重&#xff0c;去重的方式就是通过排序&#xff0c;排序后相同的数字相邻&#xff0c;这样进行实现迭代时&#xff0c;若没有选择上一个数&#xff0c;&#xff0c;其当前数字与上一…...

windows phpstudy python cgi配置

修改apache配置文件:httpd.conf 搜索’Define SRVROOT’&#xff0c; 查看cgi根目录&#xff0c;python脚本需要放在该 Define SRVROOT "D:/Program/phpstudy_pro/Extensions/Apache2.4.39解决中文乱码 文件最后添加AddDefaultCharset gbk 重启apache python脚本: #!py…...

Java 大数据与区块链的融合:数据可信共享与溯源(45)

&#x1f496;&#x1f496;&#x1f496;亲爱的朋友们&#xff0c;热烈欢迎你们来到 青云交的博客&#xff01;能与你们在此邂逅&#xff0c;我满心欢喜&#xff0c;深感无比荣幸。在这个瞬息万变的时代&#xff0c;我们每个人都在苦苦追寻一处能让心灵安然栖息的港湾。而 我的…...

Axure PR 9 动效 设计交互

大家好&#xff0c;我是大明同学。 这期内容&#xff0c;我们来用Axure制作一组动效。 动效 创建动效元件 1.打开一个新的 RP 文件并在画布上打开 Page 1。 2.选中画布&#xff0c;将画布填充颜色设置为蓝色(#0052D9)。 3.在元件库中拖出一个圆形元件&#xff0c;选中矩形元件&…...

element-plus+vue3前端如何根据name进行搜索查到符合条件的数据

界面如图&#xff0c;下面的区域是接口给的所有的&#xff0c;希望前端根据输入的内容自己去匹配。 我是使用的element-plusvue3ts的写法。 <el-input v-model"filters.region" placeholder"输入区域搜索" keyup"filterRegion(filters.region)&q…...

hot100-day1

1. 两数之和 - 力扣&#xff08;LeetCode&#xff09; class Solution { public:vector<int> twoSum(vector<int>& nums, int target) {unordered_map<int,int> map1;for(int i0;i<nums.size();i) map1[nums[i]] i;for(int i0;i<nums.size();i){…...

webrtc编译需要常用环境变量以及相关名词解释

set vs2022_installD:\\vs2022 set GYP_MSVS_OVERRIDE_PATHD:\\vs2022 set GYP_GENERATORSmsvs-ninja,ninja set WINDOWSSDKDIRD:\\Windows Kits\10 set DEPOT_TOOLS_WIN_TOOLCHAIN0 set GYP_MSVS_VERSION2022 这些环境变量是为了编译 WebRTC 时让 GYP/Depot Tools 正确找到 V…...

PostgreSQL函数自动Commit/Rollback所带来的问题

一、综述 今天在PostgreSQL遇到一个奇怪的现象&#xff0c;简而言之&#xff0c;是想用函数&#xff08;存储过程&#xff09;实现插入记录&#xff0c;整个过程没报错但事后却没找到记录&#xff01;忙活半天&#xff0c;才发现原因是PostgreSQL函数&#xff08;存储过程&…...

开源项目介绍-词云生成

开源词云项目是一个利用开源技术生成和展示词云的工具或框架&#xff0c;广泛应用于文本分析、数据可视化等领域。以下是几个与开源词云相关的项目及其特点&#xff1a; Stylecloud Stylecloud 是一个由 Maximilianinir 创建和维护的开源项目&#xff0c;旨在通过扩展 wordclou…...

VSCode设置——通过ctrl+鼠标滚动改变字体大小(新版本的vs)

"editor.mouseWheelZoom": true 第一步&#xff1a; 第二步&#xff1a;...

多种蝴蝶识别分割数据集labelme格式784张9类别

数据集格式&#xff1a;labelme格式(不包含mask文件&#xff0c;仅仅包含jpg图片和对应的json文件) 图片数量(jpg文件个数)&#xff1a;784 标注数量(json文件个数)&#xff1a;784 标注类别数&#xff1a;9 标注类别名称:["Monarch","Zebra Longwing"…...

DeepSeek R1本地化部署 Ollama + Chatbox 打造最强 AI 工具

&#x1f308; 个人主页&#xff1a;Zfox_ &#x1f525; 系列专栏&#xff1a;Linux 目录 一&#xff1a;&#x1f525; Ollama &#x1f98b; 下载 Ollama&#x1f98b; 选择模型&#x1f98b; 运行模型&#x1f98b; 使用 && 测试 二&#xff1a;&#x1f525; Chat…...

SqlSugar简单使用之Nuget包封装-Easy.SqlSugar.Core

SqlSugar官方文档 Nuget包开源地址 Nuget包是为了简化SqlSugar的使用步骤,增加一些基础的使用封装 引入分为两个版本&#xff0c;一个Ioc模式&#xff0c;另一个是注入模式&#xff0c;如果不想影响原本的仓储代码推荐使用Ioc模式&#xff0c;两者区别不到&#xff0c;方法通…...

论文解读 | NeurIPS'24 Spotlight ChronoMagic-Bench 评估文本到视频生成的质变幅度评估基准...

点击蓝字 关注我们 AI TIME欢迎每一位AI爱好者的加入&#xff01; 点击 阅读原文 观看作者讲解回放&#xff01; 作者简介 袁盛海&#xff0c;北京大学硕士一年级学生 内容简介 本文提出了一种新颖的文本到视频&#xff08;T2V&#xff09;生成基准ChronoMagic-Bench&#xff0…...

12.1 LangChain数据处理流Data Connection深度解析:构建高效数据管道的五大核心组件

LangChain数据处理流Data Connection深度解析:构建高效数据管道的五大核心组件 一、Data Connection模块的战略定位 LangChain的Data Connection模块是大模型应用的数据中枢,其核心价值在于将非结构化数据转化为大模型可理解的语义知识。传统数据处理的三大痛点在此得到完美…...

文件基础IO

理解"文件" 1-1 狭义理解 文件在磁盘里磁盘是永久性存储介质&#xff0c;因此文件在磁盘上的存储是永久性的磁盘是外设&#xff08;即是输出设备也是输入设备&#xff09;磁盘上的文件 本质是对文件的所有操作&#xff0c;都是对外设的输入和输出简称IO 1-2 广义理…...

ASP.NET Core筛选器Filter

目录 什么是Filter&#xff1f; Exception Filter 实现 注意 ActionFilter 注意 案例&#xff1a;自动启用事务的筛选器 事务的使用 TransactionScopeFilter的使用 什么是Filter&#xff1f; 切面编程机制&#xff0c;在ASP.NET Core特定的位置执行我们自定义的代码。…...

Java 中的 Spring 框架,以及 Spring Boot 和 Spring Cloud 的区别?

Spring框架是一个开源的Java平台&#xff0c;主要用于简化企业级应用程序的开发。 它通过提供一系列的功能模块&#xff0c;帮助开发者解决常见的编程难题&#xff0c;从而提高开发效率和代码质量。 Spring框架的核心思想是“控制反转”&#xff08;IoC&#xff09;和“面向切…...

Rplayer:手机上的本地音乐播放智能之选

在众多本地音乐播放器中&#xff0c;Rplayer凭借其卓越的功能脱颖而出。它不仅能够精准识别本地下载的音乐文件&#xff0c;更以其智能化的设计为用户带来极致的便捷体验。 Rplayer的真正亮点在于其强大的自动扫描功能。与市面上其他播放器不同&#xff0c;Rplayer无需用户手动…...

vue2-插槽slot

文章目录 vue2-插槽slot1. 什么是slot2. slot分类2.1 默认插槽2.2 具名插槽2.3 作用域插槽 vue2-插槽slot 1. 什么是slot 在vue中&#xff0c;slot翻译为插槽&#xff0c;简单点说&#xff0c;就是在子组件内放置一个插槽&#xff0c;等待父组件在使用子组件的时候决定放什么…...

二级C语言题解:整数序列奇偶个数、拼接数字字符、数组取偶数并加小数点

目录 一、程序填空&#x1f4dd; --- 整数序列奇偶个数 题目&#x1f4c3; 分析&#x1f9d0; 二、程序修改&#x1f6e0;️ --- 拼接数字字符 题目&#x1f4c3; 分析&#x1f9d0; 三、程序设计 &#x1f4bb; --- 数组取偶数并加小数点 题目&#x1f4c3; 分析&…...

VUE之组件通信(三)

1、$refs与$parent 1&#xff09;概述&#xff1a; $refs用于&#xff1a;父——>子。$parent用于&#xff1a;子——>父。 2&#xff09;原理如下&#xff1a; 属性说明$refs值为对象&#xff0c;包含所有被ref属性标识的DOM元素或组件实例。$parent值为对象&#x…...

Airflow:深入理解Apache Airflow Task

Apache Airflow是一个开源工作流管理平台&#xff0c;支持以编程方式编写、调度和监控工作流。由于其灵活性、可扩展性和强大的社区支持&#xff0c;它已迅速成为编排复杂数据管道的首选工具。在这篇博文中&#xff0c;我们将深入研究Apache Airflow 中的任务概念&#xff0c;探…...

【号码分离】从Excel表格、文本、word文档混乱文字中提取分离11位手机号出来,基于WPF的实现方案

应用场景 在市场调研过程中&#xff0c;可能会收集到大量的 Excel 表格、文本报告或 Word 文档&#xff0c;其中包含客户的联系方式。通过提取手机号&#xff0c;可以方便后续的市场推广和客户跟进。 当从不同渠道收集到的数据中包含混乱的文字信息时&#xff0c;需要从中提取…...

【分布式架构理论2】分布式架构要处理的问题及解决方案

文章目录 1. 应用服务拆分2. 分布式调用3. 分布式协同4. 分布式计算5. 分布式存储6. 分布式资源管理与调度7. 高性能与可用性优化8. 指标与监控 将分布式架构需要解决的问题按照顺序列举为如下几步 问题分类具体内容应用服务拆分分布式是用分散的服务和资源代替集中的服务和资…...

WPS计算机二级•幻灯片的输出、打印与分享

听说这是目录哦 打印界面讲解⭐所有页面 一键添加公司LOGO&#x1f31f;将多张幻灯片 打印在一张纸&#x1f320;将PPT内容 以讲义形式打印出来☄️打印 黑白色的幻灯片&#x1fa90;协作编辑模式&#x1f308;将PPT输出为图片&#x1f496;能量站&#x1f61a; 打印界面讲解⭐…...

Java数据结构与算法之“树”

目录 一、什么是树 ​编辑 二、树的相关组成 1. 常用名词 2.需要了解的名词 三、树的分类 &#xff08;一&#xff09;初级树 1.普通树 2.二叉树 &#xff08;二&#xff09;中级树 1.哈夫曼树HuffmanTree 2.二叉搜索树BST 3.平衡二叉树AVL &#xff08;三&#x…...

嵌入式八股文面试题(一)C语言部分

1. 变量/函数的声明和定义的区别&#xff1f; &#xff08;1&#xff09;变量 定义不仅告知编译器变量的类型和名字&#xff0c;还会分配内存空间。 int x 10; // 定义并初始化x int x; //同样是定义 声明只是告诉编译器变量的名字和类型&#xff0c;但并不为它分配内存空间…...

FPGA的IP核接口引脚含义-快解

疑问 手册繁琐&#xff0c;怎样快速了解IP核各输入输出接口引脚的含义。 答疑 不慌不慌&#xff0c;手册确实比较详细但繁琐&#xff0c;如何快速知晓该部分信息&#xff0c;涛tao道长给你们说&#xff0c;简单得很&#xff0c;一般新入门的道友有所不知&#xff0c;往往后面…...

Web3技术详解

Web3技术代表着互联网技术的最新进展&#xff0c;它致力于打造一个去中心化的互联网生态系统。以下是对Web3技术的详细解析&#xff1a; 一、Web3技术的核心概念 Web3是第三代互联网技术的代名词&#xff0c;代表着去中心化、区块链驱动和用户自有控制的理念。在Web3的世界中…...

计算机网络之物理层通信基础(电路交换、报文交换与分组交换)

一、电路交换 工作原理&#xff1a; 电路交换是在数据传输期间&#xff0c;源结点与目的结点之间建立一条由中间结点构成的专用物理连接线路&#xff0c;并在数据传输结束之前保持这条线路。整个报文的比特流连续地从源点直达终点&#xff0c;好像在一个管道中传送。 特点&am…...

Linux firewalld开启日志审计功能(2)

在Firewalld防火墙中启用和配置logdenied选项&#xff0c;记录被拒绝的数据包&#xff08;等同于开启日志功能&#xff09; 效果展示&#xff1a; 1.开启日志记录功能 firewall-cmd --set-log-deniedunicast #重新加载生效配置 firewall-cmd --reload 2.配置rsyslog捕获日志…...

线程池如何知道一个线程的任务已经执行完成

一、线程池内部任务执行状态监控 在线程池内部&#xff0c;当我们提交一个任务后&#xff0c;线程池会调度一个工作线程来执行该任务的run方法。确实&#xff0c;当run方法正常结束时&#xff0c;意味着任务已经完成。线程池中的工作线程是同步调用任务的run方法&#xff0c;并…...

09网络深入连贯篇(D1_彻底理解长连接 短连接(一))

目录 讲解一&#xff1a;长连接 & 短连接 一、初次见证长连接和短连接 1. 长连接 2. 短连接 二、如何区分当前连接是长连接还是短连接&#xff1f; 三、如何查询长连接和短连接&#xff1f; 四、那么长连接与短连接操作过程又是如何呢&#xff1f; 五、各自优缺点 …...

ElasticSearch学习笔记-解析JSON格式的内容

如果需要屏蔽其他项目对Elasticsearch的直接访问操作&#xff0c;统一由一个入口访问操作Elasticsearch&#xff0c;可以考虑直接传入JSON格式语句解析执行。 相关依赖包 <properties><elasticsearch.version>7.9.3</elasticsearch.version><elasticsea…...

网络计算机的五个组成部分

单个计算机是无法进行通信的。所以需要借助网络。 下面介绍一些在网络里常见的设备。 一、服务器 服务器是在网络环境中提供计算能力并运行软件应用程序的特定IT设备 它在网络中为其他客户机&#xff08;如个人计算机、智能手机、ATM机等终端设备&#xff09;提供计算或者应用…...

责任链模式(Chain Responsibility)

一、定义&#xff1a;属于行为型设计模式&#xff0c;包含传递的数据、创建处理的抽象和实现、创建链条、将数据传递给顶端节点&#xff1b; 二、UML图 三、实现 1、需要传递处理的数据类 import java.util.Date;/*** 需要处理的数据信息*/ public class RequestData {priva…...