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

【数据结构】_单链表_相关面试题(二)

在这里插入图片描述

本章重点

hello友友们~
今天我们将对单链表的后半部分的相关面试题进行详细解析,下面就跟着我一起开启吧~
really GO!

1.相交链表

题目:
在这里插入图片描述 输入两个链表,找出它们的第一个公共结点。

代码分析:

//找到相交结点,相交链表
SListNode* getIntersectionNode(SListNode* head_a, SListNode* head_b)
{//求两个链表的长度SListNode* cur_a = head_a;int la = 0;while (cur_a){la++;cur_a = cur_a->next;}SListNode* cur_b = head_b;int lb = 0;while (cur_b){lb++;cur_b = cur_b->next;}//默认任为a长b短SListNode* longList = head_a;SListNode* shortList = head_b;//上面假设错误就是b长a短if (lb > la){longList = head_b;shortList = head_a;}//求间距 abs表绝对值int gap = abs(la - lb);//先让长的走和短的之间相差的步数while (gap--){longList = longList->next;}//上面走完之后就一样长,然后随便以一个为准while (longList){//比较的是地址而非数值if (longList == shortList){return longList;}//否则longList = longList->next;shortList = shortList->next;}return NULL;
}void test4()
{SListNode* n1 = Great_SListNode(1);SListNode* n2 = Great_SListNode(2);SListNode* n3 = Great_SListNode(3);SListNode* n4 = Great_SListNode(4);SListNode* n5 = Great_SListNode(5);SListNode* n6 = Great_SListNode(6);SListNode* n7 = Great_SListNode(7);SListNode* n8 = Great_SListNode(8);//A:1 2 3 4 5 6 7 8SListNode* n9 = Great_SListNode(9);SListNode* n10 = Great_SListNode(10);//B:9 10 6 7 8n1->next = n2;n2->next = n3;n3->next = n4;n4->next = n5;n5->next = n6;n6->next = n7;n7->next = n8;n9->next = n10;n10->next = n6;//注意!!!printf("List A: ");SLPrint(n1);printf("List B: ");SLPrint(n9);// 查找交点并打印SListNode* intersect = getIntersectionNode(n1, n9);printf("Intersection node: ");SLPrint(intersect);  // 应输出6->7->8->NULL}
int main()
{test4();
}

详细解析:

  • 计算两个链表的长度:通过遍历两个链表,分别计算出它们的长度la lb
  • 确定长链表和链表:默认假设head_a是长链表,head_b 是短链表。如果 lb > la,则交换长链表和短链表。
  • 计算长度差:计算两个链表的长度差 gap
  • 让长链表先走gap:使长链表和短链表的剩余长度相等。
  • 同时遍历两个链表:比较长链表和短链表的节点,如果找到相同的节点,则返回该节点;如果遍历完都没有找到相同的节点,则返回 NULL

❗❗❗注意:

abs不是求绝对值吗?那是不是就不用判断la lb谁长谁短了?

abs函数只是计算差值的绝对值而判断la和lb的长短是为了确定哪个链表是长链表,哪个是短链表,从而正确地让长链表指针先移动 确保算法能够正确找到相交节点。 所以判断长短这一步骤是必不可少的。

打印结果:
在这里插入图片描述
🤔🤔🤔补充说明:

为什么比较地址而不是对应的数值呢⚙️⚙️⚙️

  • 💡在链表相交的问题里,我们要找的是两个链表共同拥有的节点,也就是在内存中是同一个节点的情况。因为两个链表相交意味着它们从某个节点开始会共享后续的所有节点,这些共享节点在内存里只有一份,不同链表的指针会指向这个相同的内存地址。
  • 💡要是比较节点存储的数值,即便两个节点的值相同,它们也可能是内存中不同位置的两个独立节点,并非真正的相交节点。所以,比较地址才能准确找出两个链表的相交节点。
  • if (longList == shortList):当longListshortList指向同一个节点时,意味着找到了相交节点,此时返回该节点的指针。由于是通过比较指针地址来判断是否为同一个节点,所以只要两个指针指向同一块内存,就表明找到了相交点。
    - longList = longList->next; shortList = shortList->next;:若当前节点不是相交节点,就将两个指针都向后移动一位,继续比较下一个节点。
  • return NULL;:若遍历完整个链表都没有找到相交节点,就返回 NULL

2.环形链表

题目:
在这里插入图片描述

代码分析:

/环形链表
//判断链表是否有环bool hasCycle(SListNode* head)
{//空链表不能有环if (head == NULL) {return false;}//快慢指针SListNode* slow = head;SListNode* fast = head;//让快指针可以走while (fast && fast->next){slow = slow->next;fast = fast->next->next ;if (slow == fast){return true;}}return  false;
}
void test5()
{SListNode* n1 = Great_SListNode(1);SListNode* n2 = Great_SListNode(2);SListNode* n3 = Great_SListNode(3);SListNode* n4 = Great_SListNode(4);SListNode* n5 = Great_SListNode(3);SListNode* n6 = Great_SListNode(2);SListNode* n7 = Great_SListNode(1);n1->next = n2;n2->next = n3;n3->next = n4;n4->next = n5;n5->next = n6;n6->next = n7;n7->next = n2;if (hasCycle(n1)) {printf("The linked list has a cycle.\n");}else {printf("The linked list does not have a cycle.\n");}
}int main()
{test5();
}

画图分析:
在这里插入图片描述
详细解析:

  • 初始化快慢指针:定义两个指针slow fast,都初始化为链表的头指针 head
  • 循环遍历链表:使用while循环,条件为fastfast->next都不为 NULL。这是因为快指针每次要移动两步,所以需要确保它的下一个节点也存在。
  • 移动快慢指针:在循环中,慢指针slow每次移动一步,即 slow = slow->next;快指针fast每次移动两步,即 fast = fast->next->next
  • 判断是否相遇:在每次移动指针后,检查slowfast是否相等。如果相等,说明快慢指针相遇了,也就意味着链表中存在环,此时返回 true
  • 循环结束条件:如果循环结束都没有出现slowfast相等的情况,说明链表中不存在环,返回 false

代码运行:
在这里插入图片描述

3.找到环点

题目:
在这里插入图片描述

画图分析:
在这里插入图片描述
代码分析:

 //找到环点//用于检测链表是否存在环,并找出环的起始节点SListNode* detectCycle(SListNode* head){//定义快慢指针SListNode* slow = head;SListNode* fast = head;//使用 while 循环来让快慢指针移动while (fast && fast->next){slow = slow->next;fast = fast->next->next;if (fast == slow){break;//相遇,链表存在环,跳出循环}}//判断链表是否有环if (fast==NULL || fast->next ==NULL){return NULL;//没有环}SListNode* meet = fast;//将相遇点赋值给meet指针//找到环的起点while (head != meet){head = head->next;meet = meet->next;}return meet;//若链表存在环,返回环的起始节点指针;若不存在环,返回 NULL}
void test5()
{SListNode* n1 = Great_SListNode(1);SListNode* n2 = Great_SListNode(2);SListNode* n3 = Great_SListNode(3);SListNode* n4 = Great_SListNode(4);SListNode* n5 = Great_SListNode(3);SListNode* n6 = Great_SListNode(2);SListNode* n7 = Great_SListNode(1);n1->next = n2;n2->next = n3;n3->next = n4;n4->next = n5;n5->next = n6;n6->next = n7;n7->next = n2;SListNode* cycleStart = detectCycle(n1);if (cycleStart) {printf("Cycle starts at node with value: %d\n", cycleStart->val);}else {printf("No cycle found.\n");}}int main()
{test5();
}

详细解析:

  • 初始化两个指针slowfast都指向链表的头节点。
  • 使用while循环,只要fast指针和fast->next不为空,就继续循环。在循环中,slow 指针每次移动一步,fast 指针每次移动两步。
  • 如果slow指针和fast指针相遇,说明链表存在环,跳出循环。
  • 检查fast指针和fast->next是否为空,如果为空,这表明快指针已经到达链表末尾,意味着链表不存在环,此时返回 NULL,说明链表没有环,返回 NULL
  • 将相遇点赋值给meet指针。
  • head指针和meet指针同时移动,每次移动一步,直到它们相遇。相遇点就是环的起始节点,返回该节点。

🤔🤔🤔思考一个问题
这里跳出第一个while循环后为什么还要if判断是否有环呢 ,不是相遇了就代表有环吗???

原因:
while (fast && fast->next) 这个循环存在两种跳出的情况:

  1. 快慢指针相遇:当 fast 指针和 slow 指针在环中相遇时,执行 break 语句跳出循环,这种情况表明链表存在环。
  2. 快指针走到链表末尾:当链表不存在环时,快指针 fast 或者 fast->next 最终会变为 NULL,此时循环条件不满足,循环自然结束,这种情况表明链表没有环。

总结:
while 循环结束后,我们无法直接确定是哪种情况导致循环结束。所以需要通过 if (fast == NULL || fast->next == NULL) 这个判断来区分

4.复杂链表的复制

题目:
在这里插入图片描述

在这里插入图片描述

这道题的核心目标是复制一个复杂链表,其中每个节点除了有指向下一个节点的 next 指针外,还有一个指向链表中任意节点或 NULL 的 random 指针。其核心原理是通过巧妙的链表结构调整,在不使用额外数据结构(如哈希表)的情况下,高效地完成复制。

代码分析:
注意这里结构体中新定义了一个random
在这里插入图片描述

💡💡💡整体思路
该函数主要通过三个步骤完成复杂链表的复制:

  1. 在原链表的每个节点后面插入一个复制节点。
  2. 设置复制节点的 random 指针。
  3. 拆分原链表和复制链表,得到独立的复制链表。
//复杂链表的复制
SListNode* copyRandomList(SListNode* head)
{if (head == NULL){return NULL;//如果原链表为空,直接返回 NULL,因为空链表没有节点需要复制。}//1.拷贝节点,链接到原节点的后面SListNode* cur = head;while (cur){SListNode* copy = (SListNode*)malloc(sizeof(SListNode));copy->next = NULL;copy->random = NULL;copy->val = cur->val;SListNode* next = cur->next;cur->next = copy;copy->next = next;cur = next;}//2.处理拷贝节点的randomcur = head;while (cur){SListNode* copy = cur->next;if (cur->random)//不为空{copy->random = cur->random->next;//copy的random等于cur的random的下一个}else{copy->random = NULL;}cur = cur->next->next;}//3.拆解出复制链表cur = head;SListNode* copyHead = head->next;while (cur){SListNode* copy = cur->next;SListNode* next = copy->next; cur->next = next;if (next)//next不为空{copy->next = next->next;}else{copy->next = NULL;}cur = next;}return copyHead;
}void test6()
{SListNode* n1 = Great_SListNode(1);SListNode* n2 = Great_SListNode(2);SListNode* n3 = Great_SListNode(3);SListNode* n4 = Great_SListNode(4);SListNode* n5 = Great_SListNode(5);n1->next = n2;n2->next = n3;n3->next = n4;n4->next = n5;n5->next = NULL;n1->random = NULL;n2->random = n1;n3->random = n5;n4->random = n3;n5->random = n1;SListNode* newnode = copyRandomList(n1);SLPrint(newnode);
}int main()
{test6();
}

详细解析:

  1. 拷贝节点,链接到原节点的后面
    在这里插入图片描述

  2. 处理拷贝节点的random
    在这里插入图片描述

  3. 拆解出复制链表
    在这里插入图片描述

运行结果:
在这里插入图片描述

(表示拷贝链表的每个节点的 val 和 random 指向与原链表完全一致。)

题目要求我们深度复制一个带有 next 和 random 指针的链表。关键在于:

  • 普通链表的复制:直接遍历并逐个拷贝节点即可。

  • random 指针的挑战:random 可能指向任意节点,拷贝时必须保持与原链表相同的指向关系。

问题:为什么复杂链表难以复制?

普通链表的复制只需遍历一次,逐个节点创建并连接即可。但复杂链表的难点在于 random 指针:

  • random 指针的任意性:它可能指向链表中的任意节点,无法在一次遍历时直接确定复制后的目标节点。
  • 传统方法的局限性:若用哈希表保存原节点与复制节点的映射关系,虽然可行,但空间复杂度为 (O(n))。本题的目标是优化到 (O(1)) 空间复杂度。

5.删除链表中重复的结点

题目:
在这里插入图片描述

代码分析:

//删除链表中重复的结点
SListNode* deleteDuplication(SListNode* head)
{//如果链表为空或者链表中只有一个节点 那么不存在重复节点 直接返回原链表头指针if (head == NULL || head->next == NULL){return head;//表示不需要处理}SListNode* prev = NULL;SListNode* cur = head;SListNode* next = cur->next;//遍历链表while (next)//只要next不为NULL就继续处理{//如果cur和next的值不相等 说明当前节点的值不重复if (cur->val != next->val){prev = cur;//将 prev 指向 curcur = next;//cur指向nextnext = next->next;//next指向下一个节点 继续向后遍历}//当前节点和下一个节点的值相同else{//找到第一个与当前节点值不同的节点while (next && cur->val == next->val){next = next->next;//不断将next指针向后移动 直到找到第一个与cur值不同的节点}//如果prev不为 NULL说明重复节点不是从链表头开始的if (prev){prev->next = next;}//为空else{//说明重复节点从链表头开始,将 head 指针指向 next,更新链表的头节点head = next;}//释放while (cur != next){//先保存cur,然后找到后面的一个节点,否则先释放的话就找不到后一个相同的结点SListNode* del = cur;cur = cur->next;free(del);}if (next)//如果next不为 NULL,将next指针向后移动一位{next = next->next;}}}return head;
}void test7()
{SListNode* n1 = Great_SListNode(1);SListNode* n2 = Great_SListNode(1);SListNode* n3 = Great_SListNode(1);SListNode* n4 = Great_SListNode(4);SListNode* n5 = Great_SListNode(5);SListNode* n6 = Great_SListNode(5);SListNode* n7 = Great_SListNode(5);n1->next = n2;n2->next = n3;n3->next = n4;n4->next = n5;n5->next = n6;n6->next = n7;n7->next = NULL;SLPrint(n1);SListNode*phead=deleteDuplication(n1);SLPrint(phead);
}int main()
{test7();
}

详细解析:
在这里插入图片描述

运行结果:
在这里插入图片描述

🎉🎉🎉

在这里本章就完结啦~

在这里插入图片描述

撒花~ 友友们 我们下期见!
★,°:.☆( ̄▽ ̄)/$:.°★

相关文章:

【数据结构】_单链表_相关面试题(二)

本章重点 hello友友们~ 今天我们将对单链表的后半部分的相关面试题进行详细解析,下面就跟着我一起开启吧~ really GO! 1.相交链表 题目: 输入两个链表,找出它们的第一个公共结点。 代码分析: //找到相交结点&#xf…...

深入理解指针(2)(C语言版)

文章目录 前言一、数组名的理解二、使用指针访问数组三、一维数组传参的本质四、冒泡排序五、二级指针六、指针数组七、指针数组模拟二维数组总结 前言 在上一篇文章中,我们初步了解了指针的基本概念和用法。今天,我们将继续深入探索指针在数组、函数传…...

二叉树相关算法实现:判断子树与单值二叉树

目录 一、判断一棵树是否为另一棵树的子树 (一)核心思路 (二)代码实现 (三)注意要点 二、判断一棵树是否为单值二叉树 (一)核心思路 (二)代码实现…...

redux ,react-redux,redux-toolkit 简单总结

Redux、React-Redux 和 Redux Toolkit 是协同工作的三个库,各自承担不同角色,相互协同。 Redux:基础底座 底层状态管理库,负责状态存储、Action 派发和 Reducer 执行 ​React-Redux:连接 React 组件与 Redux Store 通…...

5. 实现一个中间件

原文地址: 实现一个中间件 更多内容请关注:php代码框架 理解中间件 中间件(Middleware) 是一种在请求被路由到控制器方法之前或响应返回客户端之前执行的代码。它通常用于处理通用任务,如身份验证、日志记录、CORS 处理等。 在…...

数据库理论基础

数据库理论基础 1.1 什么是数据库 数据: 描述事物的符号记录, 可以是数字、 文字、图形、图像、声音、语言等,数据有多种形式,它们都可以经过数字化后存入计算机。 数据库: 存储数据的仓库,是长期存放在…...

STM32学习笔记之振荡器(原理篇)

📢:如果你也对机器人、人工智能感兴趣,看来我们志同道合✨ 📢:不妨浏览一下我的博客主页【https://blog.csdn.net/weixin_51244852】 📢:文章若有幸对你有帮助,可点赞 👍…...

SQL Server安装程序无法启动:系统兼容性检查失败

问题现象: 运行 SQL Server 2022 安装程序时,提示 “硬件或软件不满足最低要求”,安装向导直接退出或无法继续。 快速诊断 操作系统版本检查: # 查看 Windows 版本(需 20H2 或更高) winver 支持的系统&…...

C++20 中的std::c8rtomb和 std::mbrtoc8

文章目录 1. 引言2. std::c8rtomb 函数详解3. std::mbrtoc8 函数详解4. 使用示例5. 注意事项6. 总结 1. 引言 C20 标准引入了对 UTF-8 编码的更好支持,其中包括两个重要的函数:std::c8rtomb 和 std::mbrtoc8。这两个函数分别用于将 UTF-8 编码的字符转换…...

树形结构的工具类TreeUtil

这个地方是以null为根节点,相关以null或者0自己在TreeUtil中加代码,就行 基础类 package com.jm.common.entity;import lombok.Data;import java.util.ArrayList; import java.util.List;/*** Author:JianWu* Date: 2025/3/26 9:02*/ Data public clas…...

【零基础入门unity游戏开发——2D篇】2D物理系统 —— 2D刚体组件(Rigidbody2D)

考虑到每个人基础可能不一样,且并不是所有人都有同时做2D、3D开发的需求,所以我把 【零基础入门unity游戏开发】 分为成了C#篇、unity通用篇、unity3D篇、unity2D篇。 【C#篇】:主要讲解C#的基础语法,包括变量、数据类型、运算符、流程控制、面向对象等,适合没有编程基础的…...

人员进出新视界:视觉分析算法的力量

视觉分析赋能离岗检测新策略 随着时代的发展,失业率增加,社会安保压力也随之增大。企业为了提升管理效率,保障园区安全,对员工离岗检测的需求日益迫切。传统的离岗管理方式,如人工巡逻、打卡记录等,不仅效率…...

LabVIEW液压振动锤控制系统

在现代工程机械领域,液压振动锤的高效与精准控制日益显得重要。本文通过LabVIEW软件,展开液压振动锤启停共振控制技术的研究与应用,探讨如何通过改进控制系统来优化液压振动锤的工作性能,确保其在复杂工况下的稳定性与效率。 ​ …...

Slidev使用(一)安装

文章目录 1. **安装位置**2. **使用方式**3. **适用场景**4. **管理和维护** 全局安装1. **检查 Node.js 和 npm 是否已安装**2. **全局安装 Slidev CLI**3. **验证安装是否成功**4. **创建幻灯片文件**5. **启动 Slidev**6. **实时编辑和预览**7. **构建和导出(可选…...

浙大:DeepSeek技术溯源及前沿探索

浙江大学DS系列专题《DeepSeek技术溯源及前沿探索》由朱强教授主讲,内容主要包括 语言模型、Transformer、ChatGPT、DeepSeek及新一代智能体 等核心主题。 下载方式:关注“渡江客涂鸦板”,回复ds1253免费获取下载地址 语言模型:语…...

【八股】未知宽高元素水平垂直居中的三种方法

在笔试/面试中,经常出现的一个问题就是:如何实现元素水平垂直居中? 本文会直接使用代码,介绍未知宽高元素水平垂直居中的三种方法: 方法一:绝对定位absolute //绝对定位,将元素的左右位置设置…...

23种设计模式-中介者(Mediator)设计模式

中介者设计模式 🚩什么是中介者设计模式?🚩中介者设计模式的特点🚩中介者设计模式的结构🚩中介者设计模式的优缺点🚩中介者设计模式的Java实现🚩代码总结🚩总结 🚩什么是…...

(免费开源)图片去水印以及照片擦除功能,你会选择使用吗?

图片去水印以及相关人物擦除是一个非常小众的需求,就是将原本图片上的文字或者logo去除让变成一个干净的图片,但市面上很多都是付费的,今天就介绍一下这款免费工具。 工具演示效果 工具介绍 名称:lama-projct 利用AI模型训练LaM…...

Rust 学习笔记(一)

本文是博主学Rust的学习笔记,将学习经历整理下来,学习接收的内容更加条理且以便回顾。 参照学习资料为Rust官方文档,如内容中有误还请指点(一般没有☺) 一. 项目搭建 1.创建项目 cargo new hello_cargo cd hello_c…...

C++vector常用接口和模拟实现

C中的vector是一个可变容量的数组容器,它可以像数组一样使用[]进行数据的访问,但是又不像C语言数组空间是静态的,它的空间是动态可变的。 在日常中我们只需要了解常用的接口即可,不常用的接口查文档即可。 1.构造函数 //空构造…...

AI数据分析:一键生成数据分析报告

作为一名数据分析师,我们经常需要做一些数据分析报告,今天我就来手把手教你如何使用大模型一键生成高质量的数据分析报告,提高你的工作效率。 假设你是一家新零售企业的销售分析师,有一份销售数据,数据结构如数据结构…...

leetcode 2829. k-avoiding 数组的最小总和 中等

给你两个整数 n 和 k 。 对于一个由 不同 正整数组成的数组,如果其中不存在任何求和等于 k 的不同元素对,则称其为 k-avoiding 数组。 返回长度为 n 的 k-avoiding 数组的可能的最小总和。 示例 1: 输入:n 5, k 4 输出&…...

微信小程序登录和获取手机号

目录 准备工作 实现流程 实现代码 公共部分 通过code获取openid等信息 解密手机号 扩展 不借助工具类实现解密 借助工具类获取access_token 准备工作 需要小程序账号(可以去微信公众平台创建一个测试号或者正式号) appid:小程序id …...

漫画|基于SprinBoot+vue的漫画网站(源码+数据库+文档)

漫画网站 目录 基于SprinBootvue的漫画网站 一、前言 二、系统设计 三、系统功能设计 1系统功能模块 2管理员功能模块 3用户功能模块 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取: 博主介绍:✌️大…...

华鲲振宇天工TG225 B1国产服务器试装openEuler22.03 -SP4系统

今天测试了一下在华鲲振宇公司的天工TG225 B1国产服务器上进行openEuler22.03 -SP4操作系统的试装,本文记录整个测试过程。 一、服务器信息 1、服务器型号 Huakun TG225 B1 (D) 2、登录IPMI帐户信息 初始用户名Tech.ON 密码TianGong8000 二、磁盘RAID配置 测试…...

Graphpad Prism for Mac医学绘图

Graphpad Prism for Mac医学绘图 文章目录 Graphpad Prism for Mac医学绘图一、介绍二、效果三、下载 一、介绍 GraphPad Prism for Mac是一款功能强大、易于使用的科学和统计分析软件,适用于各种类型的数据处理和可视化需求。无论您是进行基础研究、临床试验还是学…...

单多表查询练习

课堂代码练习 mysql> select * from t_heros; ----------------------------- | id | name | books | ----------------------------- | 1 | 孙悟空 | 西游记 | | 2 | 猪八戒 | 西游记 | | 3 | 林黛玉 | 红楼梦 | | 4 | 贾宝玉…...

SICAR标准 汽车焊装生产线触摸屏操作说明

目录 SIMATIC HMI 是西门子工业自动化解决方案的核心组件,支持实时设备监控与交互,文档中展示了其在焊装生产线中以SICAR标准为基础的具体应用,包括车型切换(如 AY2/A26)、KMC 夹具配置及能源效率分析,适用…...

Photoshop 2025安装教程包含下载安装包,2025最新版图文安装教程

文章目录 前言一、Photoshop 2025下载二、Photoshop 2025安装教程1. 安装包解压2. 找到安装程序3. 以管理员身份运行4. 安装选项设置5. 选择安装路径6. 开始安装7. 安装完成8. 启动软件9. 软件主界面 前言 无论你是专业设计师,还是刚接触图像处理的新手&#xff0c…...

SylixOS 中 select 原理及使用分析

1、select接口简介 1.1 select接口使用用例 select 是操作系统多路 I/O 复用技术实现的方式之一。 select 函数允许程序监视多个文件描述符,等待所监视的一个或者多个文件描述符变为“准备好”的状态。所谓的”准备好“状态是指:文件描述符不再是阻塞状…...

F1C200S编译

一、查看荔枝派Nano的分区内容 分成了两个分区 将第一个分区通过mount进行挂载,查看到内容包括:主要是dtb设备树和zImage压缩的内核。由于u-boot不是是通过dd指令传输到指定的位置,因此这里不显示。还有一个scr,这是一个uboot启动…...

边缘计算 vs. 云计算,谁才是工业物联网的未来?

前言 在物联网(IoT)飞速发展的今天,边缘计算正在彻底改变数据的处理、存储和分析方式。传统的IoT设备数据通常需要发送到云端进行处理,但随着设备数量的激增,这种模式在延迟、带宽和安全性方面暴露出诸多局限。边缘计…...

vue 使用v-model实现父子组件传值——子父组件同步更新

基于vue2和vue3两个版本的框架略显不同&#xff0c;所以我分开的来讲&#xff1a; 1、vue2 子组件&#xff08;my-input.vue&#xff09;&#xff1a; <template><input type"text" :value"name" input"inputChange" /> </tem…...

监控易运维在北京某医药集团数字新基建项目中的应用

随着信息技术的快速发展&#xff0c;企业数字化转型已成为当今时代的趋势。北京某医药公司作为一家知名的中医药企业&#xff0c;也在积极推进数字化建设。在数字新基建招标项目中&#xff0c;监控易管理平台 6.0 凭借其强大的功能和特点&#xff0c;成功中标&#xff0c;为医药…...

小智AI音频开发 libopus + Eclipse C/C++ MinGW 编解码测试用例

小智AI音频开发 libopus Eclipse C/C MinGW 编解码测试用例 目录 小智AI音频开发 libopus Eclipse C/C MinGW 编解码测试用例前言移植编解码测试libopus编码器的控制参数信号类型比特率带宽编码复杂度前向纠错声道不连续传输位深帧持续时长码率VBR约束应用类型 示例代码 前言…...

Spring Boot定时任务设置与实现

Spring Boot定时任务设置与实现 在Spring Boot中&#xff0c;可以使用Scheduled注解来创建定时任务。以下是一个简单的示例&#xff0c;展示了如何在项目启动后每5秒调用一次指定的方法。 1. 添加依赖 首先&#xff0c;确保你的pom.xml文件中包含Spring Boot的依赖&#xff…...

海康/大华/宇视/华为/汉邦/天地伟业/英飞拓/科达/中星微/同为/天视通等主流监控设备RTSP地址

RTSP协议是TCP/IP协议体系中的一个应用层协议&#xff0c;该协议主要规定了一对多应用程序如何有效地通过IP网络传送多媒体数据&#xff0c;特别适用于音视频数据的实时传输和控制。 目前监控市场厂家众多&#xff0c;各个厂家的RTSP地址格式不尽一致 以下是海康威视、大华股份…...

FreeRTOS 队列结构体 xQUEUE 深度解析

一、核心成员与功能设计 FreeRTOS 的队列结构体 xQUEUE 是任务间通信&#xff08;IPC&#xff09;的核心数据结构&#xff0c;通过统一的设计支持队列、信号量、互斥量等多种同步机制。其设计体现了 ​**"数据拷贝 结构复用"** 的理念&#xff0c;兼顾轻量化与扩展…...

system V 消息队列信息量(了解)

目录 system V 消息队列 消息队列的基本原理 消息队列数据结构 消息队列接口介绍 消息队列相关函数 消息队列的释放 向消息队列发送数据 向消息队列接收消息 System V 信号量 信号量相关概念 信号量的数据结构 信号量相关函数 进程互斥 system V IPC联系 system V…...

CSS rem、vw/vh、less

目录 分辨率、视口与二倍图 一、分辨率与像素基础 1. 物理像素&#xff08;Physical Pixels&#xff09; 2. 逻辑像素&#xff08;CSS 像素&#xff09; 二、视口&#xff08;Viewport&#xff09;控制 1. 视口类型 2. 设置理想视口 三、二倍图&#xff08;Retina/HiD…...

CHI协议——retry

一、核心目标 防止请求阻塞&#xff1a;当Completer暂时无法处理请求(比如tracker不够被占满)时&#xff0c;通过retry机制避免请求在 REQ Channel堆积&#xff0c;确保系统流畅运行。 retry机制只存在于REQ Channel&#xff0c;在DAT/RSP/SNP Channel不存在 二、Retry Flow…...

在linux部署网站

在Linux部署网站&#xff0c;需要准备一个纯净的系统 一、系统环境准备 1.设置静态IP地址 ‌ 2.关闭默认防火墙 systemctl disable firewalld --now ‌ 3.配置SSH密钥登录 4.yum update -y && reboot # 更新系统内核 5.yum install -y wget curl unzip # 安装…...

语义网是什么

语义网&#xff08;Semantic Web&#xff09;是由万维网发明者 蒂姆伯纳斯-李&#xff08;Tim Berners-Lee&#xff09; 在20世纪90年代末提出的概念&#xff0c;目标是让互联网上的数据不仅对人类可读&#xff0c;还能被机器自动理解、关联和推理。它通过为数据添加明确的语义…...

51单片机

本文来源&#xff1a;腾讯元宝 51单片机是对所有兼容Intel 8031指令系统的8位单片机的统称&#xff0c;其技术起源于1981年Intel推出的8051内核微控制器(Micro Control Unit)。作为嵌入式系统领域的经典代表&#xff0c;它具有以下核心特点和应用价值&#xff1a; 一、技术特…...

初2数学-1.勾股定理

复习勾股定理&#xff1a; 1. ; 2. ; 3. ; 4. 后面3个式子都是根据相似三角形对应边成比例推出来的。 第4个式子来做例子&#xff1a; 三角形CBD与三角形 ACD相似&#xff0c;所以&#xff1a; h:c2 c1 : h. 【例题] ABCD为菱形&#xff0c;边长为…...

Java条码与二维码生成技术详解

一、技术选型分析 1.1 条码生成方案 Barbecue是最成熟的Java条码库&#xff0c;支持&#xff1a; Code 128EAN-13/UPC-AUSPS Inteligent Mail等12种工业标准格式 1.2 二维码方案对比 库名称维护状态复杂度功能扩展性ZXing★★★★☆较高强QRGen★★★☆☆简单一般BoofCV★…...

Spring Boot 集成 Quartz 实现定时任务(Cron 表达式示例)

Spring Boot 集成 Quartz 实现定时任务&#xff08;Cron 表达式示例&#xff09; 前言1. 添加 Quartz 依赖2. 创建 Quartz 任务3. 配置 Quartz 任务调度4. 启动 Spring Boot 观察定时任务执行5. Quartz Cron 表达式详解6. 结论 前言 在 Spring Boot 项目中&#xff0c;我们经常…...

数智读书笔记系列025《智能医疗:医学人工智能的未来》

一、书籍概述与核心价值 1.1 书籍定位与影响力 《智能医疗:医学人工智能的未来》在智能医疗领域占据着独特且重要的位置,作为首部由德勤管理咨询引进的 AI 医疗译著,它宛如一座桥梁,连接了人工智能与生物医学这两个看似独立却又紧密关联的领域。在当下智能医疗蓬勃发展但…...

SQL Server 2022常见问题解答

以下是SQL Server 2022的常见问题解答,按主题分类整理: 一、安装与升级 SQL Server 2022的系统要求是什么? 支持的操作系统:Windows Server 2016及以上、Linux(Ubuntu 20.04/22.04, RHEL 8/9等)。内存:至少4GB(建议8GB+)。磁盘空间:6GB以上,具体取决于安装组件。如何…...

SQLAlchemy关键词搜索技术深度解析:从基础过滤到全文检索

在数据驱动的应用开发中&#xff0c;基于关键词的模糊查询是常见的业务需求。SQLAlchemy作为Python生态中最流行的ORM框架&#xff0c;提供了多种实现关键词搜索的技术方案。本文将从性能、适用场景和技术复杂度三个维度&#xff0c;系统对比分析SQLAlchemy中关键词搜索的最佳实…...