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

Linux之信号

目录

一、预备知识

二、信号的产生

一、键盘产生信号

二、系统调用

三、调用系统命令向进程发信号 kill

四、硬件异常

五、软件条件

三、信号的保存

四、信号的处理


一、预备知识

1.信号!=信号量。两者没有任何关系

2.什么是信号?

定义一:它是一种信号的异步通知机制

定义二:信号是一种给进程发送的、用来进行事件异步通知的机制

注:信号的产生与进程的运行是异步的。

3.基本结论

<1>信号的处理:进程在信号还未产生的时候就知道该如何处理信号

<2>信号的处理不是立即处理的,而是可以等一会儿在合适的时候进行信号处理

<3>进程能识别信号,这是因为它提前被“教育”过的。进程早已内置了对信号的识别和处理方式

<4>信号源是非常多的

4.键盘产生的信号只能发给前台进程(前台进程介绍看下方)

二、信号的产生

一、键盘产生信号

1.例子

ctrl+c:给目标进程发送信号

注:相当一部分的信号处理动作是让自己终止

2.信号有哪些?

<1>kill -l:查看全部的信号列表

<2>信号列表中的1-31是普通信号,可以不立即处理;34-64是实时信号,需要立即处理

3.查看信号处理的过程

查看更改进程的默认信号处理动作函数:signal()

函数:sighandler_t signal(int  signum, sighandler_t  handler);

头文件:<signal.h>

参数:

signum:信号编号,表示要处理的信号类型(如 SIGINTSIGTERM 等),就是信号列表中的宏

handler:指向信号处理函数的指针。如果为 SIG_DFL,表示使用默认处理方式;如果为 SIG_IGN,表示忽略信号;如果为自定义函数,则调用该函数处理信号

返回值:返回先前的信号处理函数指针。如果出错,返回 SIG_ERR。

4.什么是目标进程?

<1>前台进程:前台进程是用户当前直接交互的进程,通常占据用户的注意力焦点

本质:从键盘上获取数据

例子:命令行的shell进程

<2>后台进程:后台进程是用户未直接交互的进程,通常在后台执行任务

例子:孤儿进程

注:后台进程不对ctrl+c做处理,只能用  kill -9 目标进程id号  命令行来杀掉目标进程

特性前台进程后台进程
用户交互直接交互,实时响应间接交互,自动运行
优先级高优先级,资源优先分配低优先级,资源受限
可见性窗口或界面始终显示无界面或隐藏在系统托盘中
典型场景文本编辑、浏览器、游戏系统服务、下载管理、自动更新
控制方式用户直接操作(如关闭窗口)用户通过设置或通知栏管理

<3>前台进程和后台进程的相互转换

1)前台进程到后台进程:用户通过最小化窗口、切换任务(如Alt+Tab)或后台运行命令(如nohup)实现

./xxx     #执行前台进程
./xxx &   #将进程切换成后台进程

2)后台进程到前台进程:用户通过任务管理器、通知栏或特定命令(如fg)恢复前台

jobs                   #查看所有后台进程
fg  任务号             #将特定进程提到前台
ctrl+z                #进程切换到后台
bg  任务号            #让后台进程恢复运行

<4>前台进程只能有一个,但是后台进程可以有多个

5.什么叫给进程发送信号?

<1>发送信号的本质是向目标进程写信号,修改位图

<2>不管信号怎么产生,发送信号在底层有OS发送,OS提供发送信号的系统调用函数kill()

函数:int  kill(pid_t  pid, int  sig);

参数:

pid:目标进程的进程 ID (PID)

sig:要发送的信号编号

头文件:<signal.h>

功能:向指定进程或进程组发送信号

返回值:成功返回0;失败时返回 -1,并设置 errno 以指示错误类型

<3>信号产生后并不是立即处理,而是将信号记录下来在合适的时候处理。将信号记录在一个结构体里

<4>处理信号的三种做法

1)默认处理路径

2)自定义信号处理动作,但是9号和19号信号无法自定义捕捉

3)忽略处理

二、系统调用

1.int  kill(pid_t  pid, int sig);

参数:

pid:目标进程的进程 ID (PID)

sig:要发送的信号编号

头文件:<signal.h>

功能:向指定进程或进程组发送信号

返回值:成功返回0;失败时返回 -1,并设置 errno 以指示错误类型

2.int  raise(int  sig);

参数:sig:要发送的信号编号

头文件:<signal.h>

功能:在程序内部向当前进程发送信号

返回值:成功返回0;失败时返回 非零值,并设置 errno 以指示错误类型

3.void  abort(void);

头文件:<stdlib.h>

功能:用于异常终止当前进程

三、调用系统命令向进程发信号 kill

四、硬件异常

1.程序崩溃的原因是硬件异常

2.除0:SIGFPE  

3.野指针:SIGSEGV   段错误

五、软件条件

1.例子:进程1具有写权限,通过管道向进程2写数据,进程2的读权限关闭,此时会报错SIGPIPE,这个信号就是软件条件

2.unsigned  int  alarm(unsigned  int  seconds);

功能:为发送信号设置一个闹钟,该信号的默认处理动作为终止进程

3.int  pause(void);

功能:等待信号

4.小结:

程序主动触发:如 raisekillabort

异常或错误:如非法内存访问、除以零。

定时器或异步事件:如 alarm

用户交互:如终端信号。

进程间通信:如 kill 系统调用。

库函数或系统调用错误:如 exec 失败。

自定义信号:如 SIGRTMIN 系列信号

三、信号的保存

1.预备知识

<1>信号递达:实际执行信号的处理动作(默认、自定义、忽略)

<2>信号未决:信号从产生到递达之间的状态,即信号还在位图中,还未来得及处理

<3>阻塞/屏蔽信号:信号被阻塞后就不会递达

<4>三张表:让进程识别信号

1)pending表:保存收到信号的位图

比特位的位置:表示是第几个信号

比特位的内容:是否收到

2)block表:也是位图

比特位的位置:表示的是第几个信号

比特位的内容:是否阻塞

3)handler表:sighandler_t  handler[31],函数指针数组,数组下标是信号编号

2.Linux提供信号的操作

<1>int  sigprocmask(int  how, const  sigset_t*  set, sigset_t*  oldest);

功能:操作进程信号屏蔽字

参数:

  1. how
    • 指定如何修改信号屏蔽字。
    • 取值可以是以下之一:
      • SIG_BLOCK:将 set 中的信号添加到当前信号屏蔽字中(阻塞这些信号)。
      • SIG_UNBLOCK:从当前信号屏蔽字中移除 set 中的信号(解除阻塞这些信号)。
      • SIG_SETMASK:用 set 中的信号完全替换当前信号屏蔽字。
  2. set
    • 指向一个 sigset_t 类型的信号集,指定需要阻塞或解除阻塞的信号。
    • 如果为 NULL,则不对信号屏蔽字进行修改。
  3. oldset
    • 指向一个 sigset_t 类型的信号集,用于存储修改前的信号屏蔽字。
    • 如果为 NULL,则不保存修改前的信号屏蔽字。

头文件:<signal.h>

返回值:成功返回0;失败时返回 -1,并设置 errno 以指示错误类型

<2>int  sigpending(sigset_t*  set);

功能:获取当前进程的未决信号集

参数:set:指向一个 sigset_t 类型的信号集,用于存储当前进程的未决信号集。调用成功后,set 将包含所有未决信号的集合。

头文件:<signal.h>

返回值:成功返回0;失败时返回 -1,并设置 errno 以指示错误类型

3.Core  VS  Term

1>Core:会在当前路径下形成一个文件,进程退出时进程会在内存中的核心数据从内存拷贝到磁盘形成一个文件,即核心转储

注:核心转储是为了支持Debug

2>Term:进程退出

四、信号的处理

1.在合适的时候处理信号,合适的时候是什么时候?

进程从内核态返回到用户态的时候进行信号检查

2.如果信号处理操作是忽略呢?

将pending表由1->0,返回用户层

3.重谈捕捉过程

<1>在执行自定义方法时,OS必须以用户身份执行

<2>流程(重点,需要牢记)

<3>硬件中断:由外部设备触发的,导致系统停止运行

注1:信号的本质就是用软件模拟实现硬件中断

注2:操作系统在硬件时钟终端的驱动下进行调度,操作系统是基于中断进行工作的软件

<4>软件中断:由软件原因触发中断

例如:缺页中断、内存碎片处理、除零错误、野指针错误都会被转化成CPU内部的软件中断

4.用户和内核都在同一个[0,4GB]的地址空间上

<1>用户态:以用户身份只能返回自己的[0,3GB]

<2>内核态:以内核身份运行,通过系统调用的方式访问OS的[3,4GB]

5.系统调用的过程是在进程地址空间上进行的,所用的函数调用都是地址空间之间的跳转

注:OS只提供系统调用号,不提供任何系统调用接口

6.可重入函数

<1>定义:可以被多个任务(或线程)安全调用,且在调用过程中不会破坏函数内部或外部数据的函数

<2>特点:在函数未执行完毕时,允许再次被调用,且不会导致数据竞争或程序崩溃。

<3>特性:

1)不使用全局或静态变量

2)不依赖外部不可重入函数

3)使用局部变量

4)不使用动态内存分配

5)不使用I/O操作

特性可重入函数不可重入函数
全局变量使用不使用使用全局或静态变量
线程安全性安全不安全
调用方式可被多次中断并重新调用调用时可能破坏数据
示例int add(int a, int b) { return a + b; }int counter = 0; void increment() { counter++; }

相关文章:

Linux之信号

目录 一、预备知识 二、信号的产生 一、键盘产生信号 二、系统调用 三、调用系统命令向进程发信号 kill 四、硬件异常 五、软件条件 三、信号的保存 四、信号的处理 一、预备知识 1.信号&#xff01;信号量。两者没有任何关系 2.什么是信号&#xff1f; 定义一&…...

微软Edge浏览器字体设置

前言 时间&#xff1a;2025年4月 自2025年4月起&#xff0c;微软Edge浏览器的默认字体被微软从微软雅黑替换成了Noto Sans&#xff0c;如下图。Noto Sans字体与微软雅黑风格差不多&#xff0c;但在4K以下分辨率的显示器上较微软雅黑更模糊&#xff0c;因此低分辨率的显示器建议…...

Java中 关于编译(Compilation)、类加载(Class Loading) 和 运行(Execution)的详细区别解析

以下是Java中 编译&#xff08;Compilation&#xff09;、类加载&#xff08;Class Loading&#xff09; 和 运行&#xff08;Execution&#xff09; 的详细区别解析&#xff1a; 1. 编译&#xff08;Compilation&#xff09; 定义 将Java源代码&#xff08;.java文件&#x…...

[python] set

1.添加元素 在 Python 中&#xff0c;向 set 添加一个元素可以使用 add() 方法。如果添加的元素已经存在于 set 中&#xff0c;add() 不会重复添加&#xff08;因为 set 具有自动去重的特性&#xff09;。 方法 1&#xff1a;add(element)&#xff08;添加单个元素&#xff0…...

转化率提升47%?亚马逊用户行为预测模型深度解读

在亚马逊运营的战场上&#xff0c;谁能更精准地读懂用户行为&#xff0c;谁就更可能赢得转化率的胜利。近年来&#xff0c;越来越多卖家借助“用户行为预测模型”来优化Listing布局、广告投放策略、甚至库存管理&#xff0c;而这些数据驱动的决策也确确实实地带来了质的提升。 …...

C++计算 n! 中末尾零的数量

* 详细说明* 给定一个整数作为输入。目标是找出该数的阶乘结果中末尾零的数量。 一个数 N 的阶乘是范围 [1, N] 内所有数的乘积。* * 我们知道&#xff0c;只有当一个数是 10 的倍数或者有因数对 (2, 5) 时&#xff0c;才会产生末尾零。 在任何大于 5 的数的阶乘中&#xff0c;…...

大模型中超参数TopK是什么

大模型中的超参数Top-K是文本生成过程中的关键控制参数,主要用于平衡生成结果的确定性与多样性。以下从定义、工作原理、应用场景及与其他参数的协同关系进行详细阐述: 一、Top-K的定义与核心机制 基本定义 Top-K(Top-K Sampling)是一种基于概率采样的文本生成策略。其核心…...

NetApp ONTAP 9 故障磁盘更换操作指南

以前写过一篇7-mode的磁盘更换文档&#xff0c;好几个朋友反馈说命令都没有&#xff0c;都不对。主要原因是客户现在的环境都是ontap 9的cluster-mode环境了&#xff0c;所以很多命令都不一样了。为此&#xff0c;这里专门就ontap 9的cluster-mode写一篇磁盘更换操作指南&#…...

leetcode day 35 01背包问题 416+1049

0-1背包问题 &#xff08;1&#xff09;第一种情况&#xff1a;二维dp[i][j]数组 dp[i][j]表示[0,i]的物品放入容量为j背包的最大价值 不放物品i,dp[i][j]dp[i-1][j] 放物品i,dp[i][j]dp[i-1][j-w[i]]v[i] 递推公式为&#xff1a; dp[i][j]dp[i-1][j];//不放 if(w[i]<j)dp…...

MySQL的基本操作

显示所有数据库&#xff1a; SHOW DATABASES; 系统默认数据库&#xff1a; 数据库名用途information_schema存储 MySQL 服务器元数据&#xff08;如数据库、表、列信息&#xff09;&#xff0c;只读mysql存储用户权限、密码、日志等核心数据&#xff08;不要随意修改&#xff…...

CSS伪类、clip-path实现三角形、箭头绘制

<template><div :class"$options.name"><div class"triangle-container1"><!-- 伪类三角形&#xff1a;向右 --><div class"triangle-RM"></div><!-- 伪类三角形&#xff1a;向下 --><div class&q…...

基于大模型的腹股沟疝全流程预测与诊疗方案研究报告

目录 一、引言 1.1 研究背景与目的 1.2 研究方法与创新点 二、大模型在腹股沟疝术前评估中的应用 2.1 腹股沟疝概述与诊断方法 2.2 术前评估指标与数据收集 2.3 大模型预测原理与实现 2.4 预测结果与传统评估对比 三、基于大模型预测的手术方案制定 3.1 手术方式选择…...

零基础上手Python数据分析 (20):Seaborn 统计数据可视化 - 轻松绘制精美统计图表!

写在前面 —— 告别 Matplotlib 繁琐定制,拥抱 Seaborn 便捷之美,让统计可视化更高效 在前面两篇博客中,我们学习了 Python 数据可视化的基石 Matplotlib,掌握了绘制基础图表和进行高级定制的技巧。 Matplotlib 功能强大且灵活,能够满足几乎所有的二维绘图需求。 然而,…...

elasticsearch7.15节点磁盘空间满了迁移数据到新磁盘

一.数据安全迁移 在 Elasticsearch 中设置某个节点临时不可用&#xff08;例如进行维护或升级&#xff09;&#xff0c;可以通过以下步骤安全地操作&#xff0c;避免数据丢失或集群状态异常 1: 排除节点分片分配&#xff0c;触发分片迁移到其他节点 PUT /_cluster/settings {&…...

MCP案例—客户端和服务端

MCP简介 Model Context Protocol (模型上下文协议)&#xff0c;简称MCP&#xff0c;MCP是一种协议&#xff0c;用于LLM与外部拓展资源交互的协议。 想了解具体细节可参考作者本篇文章MCP理论指南 准备 本篇文章将带你通过python创建MCP客户端及服务端&#xff0c;并连接到本…...

排序模型(Learning to Rank)

排序模型&#xff08;Learning to Rank&#xff09; 要解决的问题 排序模型旨在解决信息检索中的排序优化问题。例如&#xff1a; 搜索引擎中对候选网页的排序推荐系统中物品的展示顺序广告系统中广告位的分配 核心挑战&#xff1a;根据上下文特征&#xff0c;将最相关/最有…...

L1-1、Prompt 是什么?为什么它能“控制 AI”?

*Prompt 入门 L1-1 想象一下&#xff0c;你只需输入一句话&#xff0c;AI 就能自动为你写一篇文案、生成一份报告、甚至规划你的创业计划。这种“对话即编程”的背后魔法&#xff0c;就是 Prompt 的力量。 &#x1f50d; 一、Prompt 的定义与由来 Prompt&#xff08;提示词&am…...

RolmOCR重磅开源:基于Qwen2.5-VL,速度提升40%,手写/倾斜文档识别准确率超92%

向大家介绍一款全新的开源OCR模型——RolmOCR&#xff01;这款由Reducto AI团队基于阿里巴巴强大的Qwen2.5-VL-7B-Instruct视觉语言模型微调而来的利器&#xff0c;不仅在速度和效率上实现了显著提升&#xff08;据称处理速度相比其前身olmOCR提升了约40%&#xff09;&#xff…...

系统架构设计(二):基于架构的软件设计方法ABSD

“基于架构的软件设计方法”&#xff08;Architecture-Based Software Design, ABSD&#xff09;是一种通过从软件架构层面出发指导详细设计的系统化方法。它旨在桥接架构设计与详细设计之间的鸿沟&#xff0c;确保系统的高层结构能够有效指导后续开发。 ABSD 的核心思想 ABS…...

[langchain教程]langchain03——用langchain构建RAG应用

RAG RAG过程 离线过程&#xff1a; 加载文档将文档按一定条件切割成片段将切割的文本片段转为向量&#xff0c;存入检索引擎&#xff08;向量库&#xff09; 在线过程&#xff1a; 用户输入Query&#xff0c;将Query转为向量从向量库检索&#xff0c;获得相似度TopN信息将…...

Android 图片加载框架 Glide 详细介绍

一、简单使用 1、加载图片 导入依赖 implementation("com.github.bumptech.glide:glide:4.16.0")编写代码 private static final String url = "http://cn.bing.com/az/hprichbg/rb/Dongdaemun_ZH-CN10736487148_1920x1080.jpg";btnPic.setOnClickList…...

vue2解析html中的公式,使用vue-katex

文本是markdown格式&#xff0c;需要解析markdown <p v-html"md.render(text)"></p>import MarkdownIt from markdown-it ...const mdRender MarkdownIt(); ...data中md: new MarkdownIt(),现在文本中会出现数学公式&#xff0c;解析使用vue-katex 1.…...

使用Unity Cache Server提高效率

2021年1月20日19:04:28 1 简介 Unity Cache Server,翻译过来就是Unity缓存服务器 1.1 缓存服务器の官方介绍 Unity 有一个完全自动的资源管线。每当修改 .psd 或 .fbx 文件等源资源时,Unity 都会检测到更改并自动将其重新导入。随后,Unity 以内部格式存储从文件导入的数…...

【C++】模板2.0

最近学习了一些模板的知识&#xff0c;速写本博客作为学习笔记&#xff0c;若有兴趣&#xff0c;欢迎垂阅读&#xff01; 1.非类型模板参数 模板参数分类类型形参与非类型形参。 类型形参即&#xff1a;出现在模板参数列表中&#xff0c;跟在class或者typename之类的参数类型名…...

深入解析 Linux 文件系统中的软硬链接:从原理到实践

引言 在 Linux 系统中&#xff0c;软链接&#xff08;Symbolic Link&#xff09; 和 硬链接&#xff08;Hard Link&#xff09; 是文件管理的两大核心机制。它们如同文件系统的“快捷方式”与“分身术”&#xff0c;既能节省存储空间&#xff0c;又能实现灵活的文件管理。但两…...

JumpServer多用户VNC桌面配置指南:实现多端口远程访问

在当今的云计算和远程工作环境中,高效且安全地管理多用户远程桌面访问变得越来越重要。本文将详细介绍如何在JumpServer中配置多个VNC桌面,以满足不同用户的远程访问需求。我们将以创建第二个桌面为例,为用户user2配置VNC访问。 一、背景说明 JumpServer作为一款优秀的开源…...

【数据结构入门训练DAY-19】总结数据结构中的栈

文章目录 前言一、栈的思想二、栈的解题思路结语 前言 本次训练内容&#xff1a; 栈的复习。总结栈的基本操作 一、栈的思想 在数据结构中&#xff0c;栈是一种很常见的算法。栈——就像你往桶里放东西似的&#xff0c;要取出桶内的物体就得先把桶顶的物品取出来&#xff…...

MyBatis-Plus 防止 SQL 注入最佳实践指南

&#x1f6ab; MyBatis-Plus 防止 SQL 注入最佳实践指南 作者&#xff1a;William Dawson 标签&#xff1a;Java、MyBatis-Plus、安全、SQL 注入、防护 &#x1f4a5; 什么是 SQL 注入&#xff1f; SQL 注入是一种常见的安全漏洞&#xff0c;攻击者通过恶意构造 SQL 输入参数&…...

AI之pdf解析:Tesseract、PaddleOCR、RapidPaddle(可能为 RapidOCR)和 plumberpdf 的对比分析及使用建议

目录标题 Tesseract、PaddleOCR、RapidPaddle&#xff08;可能为 RapidOCR&#xff09;和 plumberpdf 的对比分析1. Tesseract类型: 开源 OCR 引擎特点:缺点:适用场景: 2. PaddleOCR (推荐)类型:特点:缺点:适用场景: 复杂版式文档、多语言混合文本、需要高精度识别的场景&#…...

经典文献阅读之--Kinematic-ICP(动态优化激光雷达与轮式里程计融合)

0. 简介 传统的激光雷达里程计系统通过点云配准来计算移动机器人的自运动&#xff08;ego-motion&#xff09;&#xff0c;但它们通常没有考虑机器人的运动学特性&#xff0c;这可能导致不准确的运动估计&#xff0c;特别是在机器人不可能发生某些运动&#xff08;如沿z轴的小…...

【显卡占用】kill程序后,显卡仍被占用

如果 kill 程序执行了&#xff0c;但显卡仍然显示被占用&#xff0c;咋个办&#xff1f; 如图所示&#xff0c;GPU-Util占用为0%&#xff0c;但显示占用48G&#xff0c;且无法再上程序&#xff1a; 执行命令&#xff1a; fuser -v /dev/nvidia* kill pid若上述方法无法解决&am…...

在 macOS 上合并 IntelliJ IDEA 的项目窗口

在使用 IntelliJ IDEA 开发时&#xff0c;可能会打开多个项目窗口&#xff0c;这可能会导致界面变得混乱。为了提高工作效率&#xff0c;可以通过合并项目窗口来简化界面。本文将介绍如何在 macOS 上合并 IntelliJ IDEA 的项目窗口。 操作步骤 打开 IntelliJ IDEA: 启动你的 I…...

IO流--字节流详解

IO流 用于读写数据的&#xff08;可以读写文件&#xff0c;或网络中的数据&#xff09; 概述&#xff1a; I指 Input&#xff0c;称为输入流&#xff1a;负责从磁盘或网络上将数据读到内存中去 O指Output&#xff0c;称为输出流&#xff0c;负责写数据出去到网络或磁盘上 因…...

6N60-ASEMI机器人功率器件专用6N60

编辑&#xff1a;ll 6N60-ASEMI机器人功率器件专用6N60 型号&#xff1a;6N60 品牌&#xff1a;ASEMI 封装&#xff1a;TO-220F 批号&#xff1a;最新 最大漏源电流&#xff1a;6A 漏源击穿电压&#xff1a;600V RDS&#xff08;ON&#xff09;Max&#xff1a;1.20Ω …...

实现侧边栏点击标题列表,和中间列表区域联动效果

左侧边栏标题列表实现&#xff1a; -------------------html-----------------------<divclass"uav":class"{ hidden: !isVisible, visible: isVisible }"><ul id"toc"><liv-for"(item, index) in HotList":key"…...

基于MuJoCo物理引擎的机器人学习仿真框架robosuite

Robosuite 基于 MuJoCo 物理引擎&#xff0c;能支持多种机器人模型&#xff0c;提供丰富多样的任务场景&#xff0c;像基础的抓取、推物&#xff0c;精细的开门、拧瓶盖等操作。它可灵活配置多种传感器&#xff0c;提供本体、视觉、力 / 触觉等感知数据。因其对强化学习友好&am…...

kafka监控kafka manager(CMAK)部署配置

一、准备工作 1.1、服务器信息梳理 角色IP操作系统安装服务监控机10.45.19.20Linux CentOS 7.9CMAK3.0.0.5、ZooKeeper3.9.0、JDK11、JDK1.8被监控机 Kafka broker.id 050.50.50.101Linux CentOS 7.9Kafka、ZooKeeper&#xff08;任意版本&#xff09;被监控机 Kafka broker.…...

线程池的介绍

目录 一、什么是线程池 二、线程池的详细内容 三、线程池的简化 一、什么是线程池 提到线程池&#xff0c;我们可能想到 常量池&#xff0c;可以先来说说常量池&#xff1a; 像是字符串常量&#xff0c;在Java程序最初构建的时候&#xff0c;就已经准备好了&#xff0c;等程…...

day33和day34图像处理OpenCV

文章目录 一、图像预处理12 图像梯度处理12.3 Sobel算子12.4 Laplacian算子1.原理&#xff1a;2.语法&#xff1a; 13 图像边缘检测思路13.1 高斯滤波去噪点13.2 计算图像的梯度与方向13.3 非极大值抑制13.4 双阈值筛选13.5 Canny方法和使用 14 绘制图像轮廓14.1 什么是轮廓14.…...

电脑硬盘常见的几种接口类型

一、传统接口&#xff08;机械硬盘为主&#xff09; 1. SATA 接口&#xff08;Serial ATA&#xff09; 特点&#xff1a; 最主流的机械硬盘&#xff08;HDD&#xff09;接口&#xff0c;广泛用于台式机和笔记本电脑。传输速度较慢&#xff0c;理论最大带宽为 6 Gbps&#xff…...

Windows网络及服务:制作系统盘

今天我要介绍的是一个比较有意思且好玩的一个小玩意儿&#xff1a;关于系统盘的制作&#xff1b; 注明&#xff1a;对于系统盘的制作&#xff0c;以及接下来的课程&#xff0c;基本是作为动手课业来进行的&#xff0c;这也是作为程序员的必要进行的一项活动。 对于系统盘&…...

Docker Compose 使用实例

文章目录 一、Docker Compose 简介二、安装 Docker Compose三、基础配置文件示例&#xff08;docker-compose.yml&#xff09;四、关键配置解析五、常用命令六、完整项目示例&#xff08;Node.js MySQL Nginx&#xff09;七、高级功能八、最佳实践九、调试技巧 一、Docker Co…...

系统架构师2025年论文《论基于UML的需求分析》

论基于 UML 的需求分析 摘要: 2018 年 3 月 1 日至 12 月 20 日,我参加了 “某市医院预约挂号系统” 项目的开发,担任系统架构师的工作。该项目是某市医院信息化建设的重要组成部分,目标是:优化医院挂号流程,提高患者就医体验,规范医院号源管理,实现患者预约挂号、医…...

Uniapp 自定义TabBar + 动态菜单实现教程(Vuex状态管理详解)

大家好&#xff0c;我是一诺。今天跟大家分享一下uniapp 封装自定义底部导航栏&#xff08;TabBar&#xff09; 过程中的思考和实践。通过本文&#xff0c;你将学会如何打造一个功能完善、可自由定制的TabBar组件&#xff01; 先看效果&#xff1a; 支持自定义图标和样式动态…...

4月21日日记

新的一周开始了&#xff0c;好消息是未来这两周都每周只用上3天课&#xff0c;因为这周四五是运动会&#xff0c;下周四五是五一&#xff01; 非常好的周一&#xff01;收到了wxx和san还有小林的礼物&#xff01;&#xff01; wxx的是一个定制的有小排球的蓝牙影响&#xff0…...

2025高频面试算法总结篇【其他】

文章目录 直接刷题链接直达LRU Cache买卖股票的最佳时机系列实现一个HashMap环形链表寻找重复数缺失的第一个正数螺旋矩阵字符串相乘分发糖果 直接刷题链接直达 LRU Cache 头尾两个伪节点&#xff08;避免判断&#xff09; 双向链表146. LRU 缓存 买卖股票的最佳时机系列 121…...

vue项目中使用antvX6(可拖拽,vue3)

参考 先知demons 这位大佬的这篇文章&#xff1a;https://blog.csdn.net/wzy_PROTEIN/article/details/136305034?utm_mediumdistribute.pc_relevant.none-task-blog-2defaultbaidujs_baidulandingword~default-0-136305034-blog-136032209.235v43pc_blog_bottom_relevance_ba…...

文档处理控件Aspose.Words 教程:在 Word 中删除空白页完整指南

Word 文档中的空白页总是令人烦恼。如果您想从 Word 文档中删除空白页&#xff0c;以获得更清晰的演示文稿或整理文件&#xff0c;那么您来对地方了。本指南涵盖了使用 Aspose.Words编码解决方案和在 Microsoft Word 中手动删除方案&#xff0c;让您可以灵活地选择最适合自己的…...

自动驾驶最新算法进展

自动驾驶技术的算法进展迅速&#xff0c;涵盖感知、预测、规划、端到端学习等多个领域。以下是2023年至2024年的关键进展及实例&#xff1a; 1. ‌感知与融合‌ ‌BEVTransformer的进化‌&#xff1a;特斯拉的Occupancy Networks升级至支持动态场景建模&#xff0c;结合NeRF技术…...

OpenCV训练题

一、创建一个 PyQt 应用程序&#xff0c;该应用程序能够&#xff1a; 使用 OpenCV 加载一张图像。在 PyQt 的窗口中显示这张图像。提供四个按钮&#xff08;QPushButton&#xff09;&#xff1a; 一个用于将图像转换为灰度图一个用于将图像恢复为原始彩色图一个用于将图像进行…...