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

数据结构——队列

1. 概念与结构

队列(Queue)是一种先进先出(FIFO, First In First Out)的数据结构,即最先被插入队列的数据会最先被删除。队列广泛应用于计算机科学中,特别是在任务调度、缓冲区管理、网络数据传输等领域。

入队列:进行插入操作的一端称为队尾

出队列:进行删除操作的一端称为队头

2. 队列的底层结构分析

使用数组以及队列来实现队列的对比

1. 数组实现队列的基本原理

使用数组来实现队列时,可以借用一个固定大小的数组,维护两个指针:frontrear

  • front:指向队列的头部,表示第一个元素。
  • rear:指向队列的尾部,表示下一个插入元素的位置。

当队列为空时,front == rear,而当队列满时,rear 达到数组的末尾。

Array: [  1,  2,  3,  4,  5]
Front: 0, Rear: 5 (Queue is full)

2. 链表实现队列的基本原理

使用链表实现队列时,我们可以通过 头指针(front)尾指针(rear) 来维护队列。

  • front:指向队列的头部(即第一个元素)。
  • rear:指向队列的尾部(即最后一个元素)。

链表的每个节点包含数据部分和指向下一个节点的指针。队列的 入队 操作将元素添加到链表的尾部,出队 操作从链表的头部移除元素。

Head → [Data|Next] → [Data|Next] → [Data|Next] → NULL
Front →      ↑
Rear  →  指向尾部

3. 数组队列与链表队列的对比

4.对比数组队列和链表队列的时间复杂度

总结

数组实现队列

  • 适用于队列大小已知或变化不大的情况,尤其在内存空间有限的情况下,简单且高效。但如果队列频繁增长,或者存在大量空间浪费,则不适合。
  • 常见操作的时间复杂度为 O(1),但在扩容时会有 O(n) 的时间复杂度,因为需要重新分配和复制数组。

链表实现队列

  • 适用于队列大小动态变化的场景,链表不需要预先分配大小,不会发生空间浪费,插入和删除操作高效。但链表实现需要更多的内存用于存储指针,操作也相对复杂。
  • 常见操作的时间复杂度都是 O(1),不涉及扩容问题,因此性能在这些操作上更加稳定。

综上 使用链表来实现队列

3. 队列的实现

//定义结点的结构
typedef int QDataTpe;
typedef struct QueueNode
{QDataTpe data;struct QueueNode* next;
}QueueNode;//定义队列的结构
typedef struct Queue {QueueNode* phead;//队头QueueNode* ptail;//队尾int size;//记录有效数据个数
}Queue;

3.1 入队列

1. 创建新节点

  • 每当我们将一个新的元素加入队列时,需要首先创建一个新的节点。这个节点会存储数据并且需要指向链表中的下一个节点。

  • 需要分配内存来存储新节点,并将其 data 字段设置为要入队的数据,next 字段设置为 NULL(因为它是当前链表的最后一个节点)。

2. 检查队列是否为空

  • 在进行入队操作之前,我们需要检查队列是否为空。队列为空时,新节点将成为队列的唯一元素,它既是头部节点也是尾部节点。
  • 如果队列不为空,新节点将被添加到队列的尾部。

3. 将新节点添加到队列尾部

  • 如果队列为空,直接将新节点赋给队列的 pq->phead 和 pq->ptail(即头指针和尾指针都指向新节点)。
  • 如果队列不为空:
    • 更新当前队列尾部节点的 next 指针,指向新节点。
    • 更新队列的 pq->ptail 指针,指向新的尾部节点(新加入的节点)。

4. 确保尾指针正确更新

  • 入队后,新的节点成为队列的尾部,因此需要更新队列的 pq->ptail 指针,确保它指向新的尾部节点。

//入队---队尾
void QueuePush(Queue* pq, QDataTpe x)
{assert(pq);//newnodeQueueNode* newnode = (QueueNode*)malloc(sizeof(QueueNode));if (newnode == NULL){perror("malloc fail!");exit(1);}newnode->data = x;newnode->next = NULL;//队列为空,newnode是队头也是队尾if (pq->phead == NULL){pq->phead = pq->ptail = newnode;}else {//队列非空,直接插入到队尾pq->ptail->next = newnode;pq->ptail = pq->ptail->next;}pq->size++;
}

3.2 出队列

//判断队列是否为空
bool QueueEmpty(Queue* pq)
{assert(pq);return pq->phead == 0;
}

pq->phead == 0:这部分代码在检查 phead 是否为空。0 在 C 语言中等价于 NULL,即表示指针没有指向任何有效的内存地址。

  • 如果 phead 为 NULL,意味着队列为空,函数将返回 true(队列为空)。
  • 如果 phead 不为 NULL,说明队列中至少有一个元素,函数将返回 false(队列非空)。

步骤说明:

假设我们有一个队列 Queue,它是通过链表实现的,其中 phead 指向队列的头部,ptail 指向队列的尾部。每个节点包含数据和指向下一个节点的指针。

1. 检查队列是否为空:

在进行出队操作之前,我们需要检查队列是否为空。如果队列为空,则不能出队,因为没有元素可供删除。

2. 保存头部元素的数据:

我们需要保存 phead 指针指向的元素数据,因为在删除节点时,我们将失去对该数据的引用。如果要返回出队的元素数据,必须先保存它。

3. 更新 phead 指针:

phead指向队列的下一个节点,即 phead = phead->next。这样,队列头部的元素就被“删除”了。phead 指针现在指向新的队头元素。

4. 处理队列为空的情况:

如果 phead 变为 NULL,即队列中没有元素时,需要将 ptail 指针也设置为 NULL,因为队列为空时,pheadptail 都应该为 NULL

5. 释放已删除节点的内存:

如果我们使用动态内存分配(例如 malloc),需要释放 phead 指向的节点的内存,以避免内存泄漏。

//出队---队头
void QueuePop(Queue* pq)
{assert(!QueueEmpty(pq));//只有一个结点的情况if (pq->phead == pq->ptail){free(pq->phead);pq->phead = pq->ptail = NULL;}else {QueueNode* next = pq->phead->next;free(pq->phead);pq->phead = next;}pq->size--;
}

3.3 取队头数据

在确定队列不为空的情况下,取队头数据非常简单。

  1. 检查队列是否为空:

    在访问队头元素之前,我们需要检查队列是否为空。如果队列为空(即 phead == NULL),表示没有元素可以访问,此时应返回一个错误信息或者错误值。
  2. 访问队头数据:

    如果队列不为空,可以直接访问 phead 节点的数据。队列的头部数据就是 phead->data
  3. 返回队头数据:

    返回 phead 节点中的数据,这个数据是队列头部的元素,且队列结构不发生变化。

//取队头数据
QDataTpe QueueFront(Queue* pq)
{assert(!QueueEmpty(pq));return pq->phead->data;
}

3.4 取队尾数据

  1. 检查队列是否为空:

    在访问队尾元素之前,我们需要检查队列是否为空。如果队列为空(即 ptail == NULL),表示没有元素可以访问,此时应返回一个错误信息或者错误值。
  2. 访问队尾数据:

    如果队列不为空,可以直接访问 rear 节点的数据。队列的尾部数据就是 ptail->data
  3. 返回队尾数据:

    返回 ptail 节点中的数据,这个数据是队列尾部的元素,且队列结构不发生变化。

QDataTpe QueueBack(Queue* pq)
{assert(!QueueEmpty(pq));return pq->ptail->data;
}

3.5 队列有效元素个数

通常情况下,使用计数器(方法一)更加高效,即在每次入队列和出队列时,都会对pq->size进行改变,  在入队列时则   pq->size++,在出队列时则 pq->size--。

这使我们可以直接得出队列的有效元素个数,避免了遍历链表(这种方法在计算队列大小时需要遍历整个链表,因此时间复杂度是 O(n)。在每次查询时,性能较差)。

//队列有效元素个数
int QueueSize(Queue* pq)
{return pq->size;
}

完整代码:

Queue.h:

#pragma once
#include<stdio.h>
#include<stdlib.h>
#include<assert.h>
#include<stdbool.h>//定义结点的结构
typedef int QDataTpe;
typedef struct QueueNode
{QDataTpe data;struct QueueNode* next;
}QueueNode;//定义队列的结构
typedef struct Queue {QueueNode* phead;//队头QueueNode* ptail;//队尾int size;//记录有效数据个数
}Queue;void QueueInit(Queue* pq);
//销毁队列
void QueueDestroy(Queue* pq);//入队---队尾
void QueuePush(Queue* pq, QDataTpe x);
//出队---队头
void QueuePop(Queue* pq);//取队头数据
QDataTpe QueueFront(Queue* pq);
//取队尾数据
QDataTpe QueueBack(Queue* pq);bool QueueEmpty(Queue* pq);
//队列有效元素个数
int QueueSize(Queue* pq);

Queue.c:

#include"Queue.h"void QueueInit(Queue* pq)
{assert(pq);pq->phead = pq->ptail = NULL;
}
//销毁队列
void QueueDestroy(Queue* pq)
{assert(pq);QueueNode* pcur = pq->phead;while (pcur){QueueNode* next = pcur->next;free(pcur);pcur = next;}pq->phead = pq->ptail = NULL;
}
//入队---队尾
void QueuePush(Queue* pq, QDataTpe x)
{assert(pq);//newnodeQueueNode* newnode = (QueueNode*)malloc(sizeof(QueueNode));if (newnode == NULL){perror("malloc fail!");exit(1);}newnode->data = x;newnode->next = NULL;//队列为空,newnode是队头也是队尾if (pq->phead == NULL){pq->phead = pq->ptail = newnode;}else {//队列非空,直接插入到队尾pq->ptail->next = newnode;pq->ptail = pq->ptail->next;}pq->size++;
}
bool QueueEmpty(Queue* pq)
{assert(pq);return pq->phead == 0;
}
//出队---队头
void QueuePop(Queue* pq)
{assert(!QueueEmpty(pq));//只有一个结点的情况if (pq->phead == pq->ptail){free(pq->phead);pq->phead = pq->ptail = NULL;}else {QueueNode* next = pq->phead->next;free(pq->phead);pq->phead = next;}pq->size--;
}
//取队头数据
QDataTpe QueueFront(Queue* pq)
{assert(!QueueEmpty(pq));return pq->phead->data;
}
//取队尾数据
QDataTpe QueueBack(Queue* pq)
{assert(!QueueEmpty(pq));return pq->ptail->data;
}//队列有效元素个数
int QueueSize(Queue* pq)
{return pq->size;
}

以上为队列结构的介绍,感谢敢看!

相关文章:

数据结构——队列

1. 概念与结构 队列&#xff08;Queue&#xff09;是一种先进先出&#xff08;FIFO, First In First Out&#xff09;的数据结构&#xff0c;即最先被插入队列的数据会最先被删除。队列广泛应用于计算机科学中&#xff0c;特别是在任务调度、缓冲区管理、网络数据传输等领域。…...

GaussianCity:实时生成城市级数字孪生基底的技术突破

在空间智能领域,如何高效、大规模地生成高质量的3D城市模型一直是一个重大挑战。传统方法如NeRF和3D高斯溅射技术(3D-GS)在效率和规模上存在显著瓶颈。GaussianCity通过创新性的技术方案,成功突破了这些限制,为城市级数字孪生的构建提供了全新路径。 一、核心创新:突破传…...

【AGI】智谱开源2025:一场AI技术民主化的革命正在到来

智谱开源2025&#xff1a;一场AI技术民主化的革命正在到来 引言&#xff1a;开源&#xff0c;一场技术平权的革命一、CogView4&#xff1a;中文AI生成的里程碑1. 破解汉字生成的“AI魔咒”2. 开源协议与生态赋能 二、AutoGLM&#xff1a;人机交互的范式跃迁1. 自然语言驱动的跨…...

【算法学习之路】5.贪心算法

贪心算法 前言一.什么是贪心算法二.例题1.合并果子2.跳跳&#xff01;3. 老鼠和奶酪 前言 我会将一些常用的算法以及对应的题单给写完&#xff0c;形成一套完整的算法体系&#xff0c;以及大量的各个难度的题目&#xff0c;目前算法也写了几篇&#xff0c;题单正在更新&#xf…...

C++11中的右值引用和完美转发

C11中的右值引用和完美转发 右值引用 右值引用是 C11 引入的一种新的引用类型&#xff0c;用 && 表示。它主要用于区分左值和右值&#xff0c;并且可以实现移动语义&#xff0c;避免不必要的深拷贝&#xff0c;提高程序的性能。左值通常是可以取地址的表达式&#xf…...

Leetcode 1477. 找两个和为目标值且不重叠的子数组 前缀和+DP

原题链接&#xff1a; Leetcode 1477. 找两个和为目标值且不重叠的子数组 class Solution { public:int minSumOfLengths(vector<int>& arr, int target) {int narr.size();int sum0;int maxnINT_MAX;vector<int> dp(n,maxn);//dp[i]表示以索引i之前的满足要求…...

koa-session设置Cookie后获取不到

在谷歌浏览器中请求获取不到cookie问题之一&#xff08;谷歌安全策略&#xff09; 场景 前端使用 axios 请求&#xff0c;项目地址&#xff1a;http://192.168.8.1:5173 import axios from axiosconst request axios.create({baseURL: http://127.0.0.1:3001/,timeout: 60000,…...

Linux三种网络方式

前言 发现运维啥都得会&#xff0c;这周就遇到了网络问题自己无法解决&#xff0c;因此痛定思痛学一下。 参考文献 你管这破玩意叫网络&#xff1f; 桥接模式、NAT模式、仅主机模式&#xff0c;原来是这样工作的 交换机 构成局域网&#xff0c;实现所有设备之间的通信。 …...

android_viewtracker 原理

一、说明 我们业务中大部分场景是用 RecyclerView 实现的列表&#xff0c;而 View 的曝光通常是直接写在 adapter 的 onBindViewHolder 中&#xff0c;这样就会导致 item 还没显示出来的时候就会触发曝光。最近业务提出需要实现根据 View 显示在屏幕上面积大于 80% 才算曝光。…...

Object.defineProperty()

**Object.defineProperty()** 方法会直接在一个对象上定义一个新属性&#xff0c;或者修改一个对象的现有属性&#xff0c;并返回此对象。 plain const object1 {}; Object.defineProperty(object1, ‘property1’, { value: 42, writable: false }); object1.property1 77…...

大模型+知识图谱:重塑企业制度标准管理

在数字化转型的浪潮中&#xff0c;制度标准管理领域正迎来一场革命性的变革。借助大模型和知识图谱等前沿人工智能技术&#xff0c;制度标准管理不再仅仅是简单的文档存储和检索&#xff0c;而是演变为一个智能化、高效化、精准化的管理体系。 1.关键技术 我们的制度标准管理…...

ubuntu20系统下conda虚拟环境下安装文件存储位置

在 Conda 虚拟环境中执行 pip install 安装软件后&#xff0c;安装的文件会存储在该虚拟环境专属的 site-packages 目录中。具体路径取决于你激活的 Conda 环境路径。以下是定位步骤&#xff1a; 1. 确认 Conda 虚拟环境的安装路径 查看所有环境&#xff1a; conda info --env…...

深度学习编译器(整理某survey)

一、深度学习框架 TensorFlow PyTorch MXNet ONNX:定义了一个统一的表示&#xff0c;DL models的格式方便不同框架之间的转换模型 二、深度学习硬件 通用硬件&#xff08;CPU、GPU&#xff09;&#xff1a;通过硬件和软件优化支持深度学习工作负载 GPU:通过多核架构实现高…...

Python学习第八天

查看函数参数 操作之前给大家讲一个小技巧&#xff1a;如何查看函数的参数&#xff08;因为python的底层源码是C语言并且不是开放的&#xff0c;也一直困扰着刚学习的我&#xff0c;这个参数叫什么名之类的看doc又总是需要翻译挺麻烦的&#xff09;。 比如我们下面要说到的op…...

SpringBoot为什么默认使用CGLIB?

大家好&#xff0c;我是锋哥。今天分享关于【SpringBoot为什么默认使用CGLIB?】面试题。希望对大家有帮助&#xff1b; SpringBoot为什么默认使用CGLIB? 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 Spring Boot 默认使用 CGLIB&#xff08;Code Generation Li…...

【消息队列】数据库的数据管理

1. 数据库的选择 对于当前实现消息队列这样的一个中间件来说&#xff0c;具体要使用哪个数据库&#xff0c;是需要稍作考虑的&#xff0c;如果直接使用 MySQL 数据库也是能实现正常的功能&#xff0c;但是 MySQL 也是一个客户端服务器程序&#xff0c;也就意味着如果想在其他服…...

pytest中pytest.ini文件的使用

pytest.ini 是 pytest 测试框架的配置文件,它允许你自定义 pytest 的行为。通过在 pytest.ini 中设置各种选项,可以改变测试用例的发现规则、输出格式、插件行为等。以下详细介绍 pytest.ini 文件的使用。 1. 文件位置 pytest.ini 文件通常位于项目的根目录下,pytest 在运…...

docker学习笔记(1)从安装docker到使用Portainer部署容器

docker学习笔记第一课 先交代背景 docker宿主机系统&#xff1a;阿里云ubuntu22.04 开发机系统&#xff1a;win11 docker镜像仓库&#xff1a;阿里云&#xff0c;此阿里云与宿主机系统没有关系&#xff0c;是阿里云提供的一个免费的docker仓库 代码托管平台&#xff1a;github&…...

Vue.js侦听器

侦听器​ 基本示例​ 计算属性允许我们声明性地计算衍生值。然而在有些情况下,我们需要在状态变化时执行一些“副作用”:例如更改 DOM,或是根据异步操作的结果去修改另一处的状态。 在组合式 API 中,我们可以使用 watch 函数在每次响应式状态发生变化时触发回调函数: …...

【C++学习篇】智能指针

目录 1. 智能指针的使用场景分析 2. RAII和智能指针的设计思路 3. C标准库智能指针的使用 4.shared_ptr和weak_ptr 4.1shared_ptr的循环引用问题 4.2 weak_ptr 1. 智能指针的使用场景分析 下⾯程序中我们可以看到&#xff0c;new了以后&#xff0c;我们也delete了&#xff0c…...

数字电子技术基础(二十四)——TTL门电路的高、低电平的输出特性曲线

目录 1 TTL门电路的特性曲线 1.1 高电平输出特性 1.1.2 高电平输出特性的实验过程 1.1.2 TTL门电路的输出特性的实验结果 1.2 低电平的输出特性 1 TTL门电路的特性曲线 1.1 高电平输出特性 1.1.2 高电平输出特性的实验过程 现在想要测试TTL门电路的输出特性&#xff0c…...

linux进程通信之共享内存

在 Linux 系统中&#xff0c;共享内存&#xff08;Shared Memory&#xff09; 是一种高效的进程间通信&#xff08;IPC&#xff09;方式&#xff0c;允许多个进程直接访问同一块物理内存区域。以下是关于 Linux 共享内存的详细讲解&#xff1a; 一、共享内存的核心特点 高速通信…...

学习第十一天-树

一、树的基础概念 1. 定义 树是一种非线性数据结构&#xff0c;由 n 个有限节点组成层次关系集合。特点&#xff1a; 有且仅有一个根节点其余节点分为若干互不相交的子树节点间通过父子关系连接 2. 关键术语 术语定义节点包含数据和子节点引用的单元根节点树的起始节点&#…...

场景题:10亿QQ用户,如何统计在线人数?

现在卷的环境下&#xff0c;面试除了八股文算法项目外&#xff0c;场景题也是问的越来越多了。一方面是就业市场竞争者较多所带来的必然结果&#xff1b;另一方面是公司对于应聘者的技术要求也越来越高了。 今天继续介绍Java面试常见的场景题&#xff1a;在线人数统计 现在用户…...

学习工具的一天之(burp)

第一呢一定是先下载 【Java环境】&#xff1a;Java Downloads | Oracle 下来是burp的下载 Download Burp Suite Community Edition - PortSwigger 【下载方法二】关注的一个博主 【BurpSuite 安装激活使用详细上手教程 web安全测试工具】https://www.bilibili.com/video/BV…...

归并排序:分治哲学的完美演绎与时空平衡的艺术

引言&#xff1a;跨越世纪的算法明珠 在计算机科学的璀璨星河中&#xff0c;归并排序犹如一颗恒久闪耀的明星。1945年&#xff0c;现代计算机之父冯诺伊曼在EDVAC计算机的研发过程中首次系统性地提出了这一算法&#xff0c;其精妙的分治思想不仅奠定了现代排序算法的理论基础&…...

蓝桥杯4T平台(串口打印电压值)

知识点&#xff1a;串口(单片机发送数据)按键ADC 题目 配置 代码 adc.c uint16_t getadc2(void) {uint16_t adc0;HAL_ADC_Start(&hadc2);adcHAL_ADC_GetValue(&hadc2);return adc; } adc.h uint16_t getadc2(void); main.c #include "lcd.h" #include…...

Stable Diffusion Prompt编写规范详解

Stable Diffusion Prompt编写规范详解 一、语法结构规范 &#xff08;一&#xff09;基础模板框架 [质量强化] [主体特征] [环境氛围] [风格控制] [镜头参数]质量强化&#xff1a;best quality, ultra detailed, 8k resolution‌主体特征&#xff1a;(1girl:1.3), long …...

es6常见知识点

官方文档&#xff1a;[https://es6.ruanyifeng.com/](https://es6.ruanyifeng.com/) 一、Class 1、Class Class只是一个语法糖,其功能用es5也能实现,但是比es5更符合类的期待 定义: constructor代表构造方法,而this指向new 生成的实例 定义类方法时,可以不使用function 注…...

leetcode1 两数之和 哈希表

什么时候使用哈希法&#xff0c;当我们需要查询一个元素是否出现过&#xff0c;或者一个元素是否在集合里的时候&#xff0c;就要第一时间想到哈希法。 242. 有效的字母异位词 (opens new window)这道题目是用数组作为哈希表来解决哈希问题&#xff0c;349. 两个数组的交集 (o…...

Java中lombok的@Data注解【布尔类型】字段定义方式

文章目录 背景第一步、场景复现第二步、分析问题第三步、实现方案总结 背景 在Data注解的bean中添加Boolean字段时&#xff0c;set方法正常&#xff0c;get方法无法获取。 第一步、场景复现 在OrderInfo的实体中&#xff0c;新增布尔类型的字段&#xff1a;支付过【hasPaid】…...

理解数学概念——稠密性(density)

目录 1. 定义 2. 等价定义 3. 直观理解 1. 定义 在拓扑学(topology)和数学相关领域中&#xff0c;对于一个拓扑空间 X 的一个子集 A&#xff0c;若 X的每一个点要么属于A &#xff0c;要么无限“接近”X的某个成员&#xff0c;则称这个子集 A 是稠密的(dense)或称A具有稠密性…...

【Spring AOP】_切点类的切点表达式

目录 1. 根据方法签名匹配编写切点表达式 1.1 具体语法 1.2 通配符表达规范 2. 根据注解匹配编写切点表达式 2.1 实现步骤 2.2 元注解及其常用取值含义 2.3 使用自定义注解 2.3.1 编写自定义注解MyAspect 2.3.2 编写切面类MyAspectDemo 2.3.3 编写测试类及测试方法 在…...

通过多线程获取RV1126的AAC码流

目录 一RV1126多线程获取音频编码AAC码流的流程 1.1AI模块的初始化并使能 1.2AENC模块的初始化 ​​​​​​​1.3绑定AI模块和AENC模块 ​​​​​​​1.4多线程获取每一帧AAC码流 ​​​​​​​1.5每个AAC码流添加ADTSHeader头部 ​​​​​​​1.6写入具体每一帧AAC的…...

HDFS 为什么不适合处理小文件?

目录 一、HDFS 是什么&#xff1f; 1. 核心目标 2. 基本架构 二、HDFS 为什么不适合处理小文件&#xff1f; 1. 元数据管理问题 2. 存储效率低下 3. 访问性能问题 4. 计算框架效率问题 5. 其他限制 一、HDFS 是什么&#xff1f; HDFS&#xff08;Hadoop 分布式文件系统…...

网络空间安全(14)编辑器漏洞

一、概述 网页在线编辑器允许用户在网页上进行文本的编辑&#xff0c;并设置字体样式、段落行间距等&#xff0c;类似于使用Word进行编辑。然而&#xff0c;由于编辑器在处理用户输入、文件上传、权限控制等方面可能存在安全缺陷&#xff0c;因此容易成为攻击者利用的目标。 二…...

SpringMvc与Struts2

一、Spring MVC 1.1 概述 Spring MVC 是 Spring 框架的一部分&#xff0c;是一个基于 MVC 设计模式的轻量级 Web 框架。它提供了灵活的配置和强大的扩展能力&#xff0c;适合构建复杂的 Web 应用程序。 1.2 特点 轻量级&#xff1a;与 Spring 框架无缝集成&#xff0c;依赖…...

Avalonia 打包成deb

参考 https://www.cnblogs.com/Fengyinyong/p/13346642.html 安装工具 dotnet tool install --global dotnet-deb 还原包 dotnet restore -r linux-x64 dotnet deb install 打包&#xff0c;其中/p:SelfContainedtrue是独立运行 dotnet msbuild XXXCore.csproj /t:Creat…...

服务器数据恢复—raid5阵列中硬盘掉线导致上层应用不可用的数据恢复案例

服务器数据恢复环境&故障&#xff1a; 某公司一台服务器&#xff0c;服务器上有一组由8块硬盘组建的raid5磁盘阵列。 磁盘阵列中2块硬盘的指示灯显示异常&#xff0c;其他硬盘指示灯显示正常。上层应用不可用。 服务器数据恢复过程&#xff1a; 1、将服务器中所有硬盘编号…...

除了合并接口,还有哪些优化 Flask API 的方法?

除了合并接口&#xff0c;还有许多其他方法可以优化 Flask API&#xff0c;以下从性能优化、代码结构优化、安全性优化、错误处理优化等方面详细介绍&#xff1a; 性能优化 1. 使用缓存 内存缓存&#xff1a;可以使用 Flask-Caching 扩展来实现内存缓存&#xff0c;减少对数…...

制服小程序的“滑手”:禁用页面左右滑动全攻略

哈哈&#xff0c;看来你已经很聪明地发现了小程序中左右滑动的“顽皮”行为&#xff01;&#x1f604; 没错&#xff0c;我们可以通过设置 disableScroll 属性来“管教”它&#xff0c;同时结合 CSS 样式让页面既禁得住横向“乱跑”&#xff0c;又能顺畅地上下滚动。你的方案已…...

学习日记-250305

阅读论文&#xff1a;Leveraging Pedagogical Theories to Understand Student Learning Process with Graph-based Reasonable Knowledge Tracing ps:代码逻辑最后一点还没理顺&#xff0c;明天继续 4.2 Knowledge Memory & Knowledge Tracing 代码研究&#xff1a; 一般…...

DeepSeek R1模型医疗机构本地化部署评估分析(Discuss V1版上)

为了确保医疗机构在部署和应用DeepSeek R1模型时的成功,可以根据各个步骤设计一套综合的评估和评测体系。该体系将帮助医疗机构在实施过程中持续跟踪效果、识别潜在问题并进行优化调整。以下是对各步骤的详细评估和评测体系设计。 1. 确定模型需求 在医疗机构上线DeepSeek R…...

java 查找连个 集合的交集部分数据

利用了Java 8的Stream API&#xff0c;代码简洁且效率高 import java.util.stream.Collectors; import java.util.List; import java.util.HashSet; import java.util.Set;public class ListIntersection {public static List<Long> findIntersection(List<Long> …...

Hadoop管理页看不到任务的问题

这个yarn分配任务了但是为空 在$HADOOP_HOME/conf/mapred-site.xml 原来的配置文件基础之上添加&#xff1a; <property><name>mapreduce.framework.name</name><value>yarn</value></property> 重启之后就好了...

cmake、CMakeLists.txt、make、ninja

文章目录 一、概念0.cmake官网1.什么是cmake2.为什么使用cmake3.CMakeLists.txt 二、CMakeLists.txt语法&#xff1a;如何编写CMakeLists.txt&#xff0c;语法详解(0)语法基本原则(1)project关键字(2)set关键字(3)message关键字(4)add_executable关键字(5)add_subdirectory关键…...

PHP之Cookie和Session

在你有别的编程语言的基础下&#xff0c;你想学习PHP&#xff0c;可能要了解的一些关于cookie和session的信息。 Cookie 参数信息 setcookie(name,value,expire, path, domain); name : Cookie的名称。 value : Cookie的值。 expire : Cookie的过期时间&#xff0c;可以是一…...

学习记录-用例设计编写

黑马测试视频记录 目录 一、 软件测试流程 二、测试用例编写格式 1、等价类法 2、边界值分析法 3、 判定表法 4、场景法​编辑 5、错误推荐法 一、 软件测试流程 二、测试用例编写格式 1、等价类法 2、边界值分析法 3、 判定表法 4、场景法 5、错误推荐法 时间紧任务重…...

【Docker】容器安全之非root用户运行

【Docker】容器安全之非root用户运行 1. 场景2. 原 Dockerfile 内容3. 整改结果4. 非 root 用户带来的潜在问题4.1 文件夹读写权限异常4.2 验证文件夹权限 1. 场景 最近有个项目要交付&#xff0c;第三方测试对项目源码扫描后发现一个问题&#xff0c;服务的 Dockerfile 都未指…...

CVE-2025-0392:JeeWMS graphReportController.do接口SQL注入漏洞复现

文章目录 CVE-2025-0392:JeeWMS graphReportController.do接口SQL注入漏洞复现0x01 前言0x02 漏洞描述0x03 影响版本0x04 漏洞环境0x05 漏洞复现1.构造POC2.复现CVE-2025-0392:JeeWMS graphReportController.do接口SQL注入漏洞复现 0x01 前言 免责声明:请勿利用文章内的相…...