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

[Linux] 信号(singal)详解(一)

标题:[Linux] 信号(singal)详解

@水墨不写bug

(图片来源于网络)

目录

一、认识信号

1、认识信号

2、信号特点

3、基本概念

二、信号的产生(5种方式)

 三、信号的保存


正文开始:

一、认识信号

1、认识信号

        信号,联系生活,比如你看到钟表知道现在的时间,于是提醒自己这会儿要要干啥了;再比如,在过马路时,看到信号灯是红色,你会停下来等待,直到信号灯变绿。这都是信号的例子,其实信号简而言之,就是一种简易的信息传递方式。

2、信号特点

        随时可能产生,信号的产生是没有预告的,与你的生活是异步的。

        你能识别信号(可以想想一下,如果不能识别信号,生活会变得怎么样),并且知道得到这个信号之后该怎么做。

        当你收到信号的时候,你可能正在做更加重要的事(比如在期末考),这时需要把信号保存起来,暂不处理。

         转到OS层面:

        在进程中,信号可能随时产生,(这意味着OS需要不停的检测信号是否产生),信号的产生和进程异步。

        进程能够识别信号,并且知道得到这个信号之后该怎么做(处理信号)。

        进程可能正在做更加重要的事情,于是可能会把信号暂不处理。

综上,OS需要组织信号,并且需要在合适的时候处理信号。

3、基本概念

        信号是LINUX OS 提供的一种,向指定进程发送特定信息的方式。目的是让进程做识别和处理。

二、信号的产生(5种方式)

        1.通过kill指令,向特定的进程发送信号。

        首先可以通过   kill -l   查看所有的信号类型:

         对于不同种类的信号,OS会有不同的处理方式(后文将会有详细解释)

         2.键盘可以产生信号。

ctrl + c :SIGINT(2号信号)

ctrl + \ = | : SIGQUIT(3号信号)

(见上图)

        3.系统调用可以产生信号。

int kill(pid_t id,int sig);——kill命令的底层

void abort(void); ——产生 SIGABRT; 

        4.软件条件可以产生信号。

比如:

        管道read fd关闭,write fd还在写入,OS发送SIGPIPE (13号信号)来杀死write进程。

        alarm系统调用可以产生信号:

 

        5.异常可以产生信号。

         对于非法访问操作,被OS检测到,OS会发送信号。


OS为什么可以检测到信号?

        以发生除0错误为例,当发生除0时,CPU内部的eflag(寄存器)的溢出标记位被置1,表明本次运算的结果发生溢出,计算结果不可信。

        CPU是硬件,OS要管理硬件,于是OS会检测到CPU的这个标记位的错误信息,并通过发送信号的方式,终止发生错误的进程。

        总结:OS通过检测硬件的标记位信息,来判断是否发生了错误。


 三、信号的保存

        信号的保存和处理其实是密切联系的。信号的保存通过三张表实现的——block位图、pending位图、handler函数指针表。

 概念引入:

        信号递达:实际执行信号的过程称为信号的递达(Delivery)。

        信号未决:信号从产生到递达之间状态称为信号未决(pending)。

        信号阻塞:进程可以阻塞某一信号,意味着这个信号一旦产生,永远不递达,一直是未决状态,直到主动解除阻塞为止,才执行递达的动作。

注意:

        信号的阻塞与其是否未决无关。

        阻塞和忽略是不同的,只要信号被阻塞就不会递达,而忽略是在递达之后可选的一种处理动作。


 通过查看kill -l:

 发现:

        普通信号一共31个。如果用一个位图来存储,需要31个bit位,于是Linux OS提供了一个专门的数据类型用作位图:sigset_t 。


        本章开头所说的2张位图和一张函数指针表实际就是存储在进程的task_struct中的:

         每个信号都有两个标志位分别表示阻塞(block)未决(pending),和函数指针表(handler)表示处理动作。信号产生时,内核在进程控制块中设置该信号的未决标志(设置为1),直到信号递达才清除该标志(设置为0)。

        在上图的例子中:

  •         SIGHUP信号未阻塞也未产生过;当它递达时执行默认处理动作。
  •         SIGINT信号产生过,但正在被阻塞,所以暂时不能递达;虽然它的处理动作是忽略,但在没有解除阻塞之前不能忽略这个信号,因为进程仍有可能会对SIGINT进行自定义处理,进而解除阻塞之后可能会产生意想不到的结果。
  •         SIGQUIT信号未产生过;SIGQUIT产生之后,一旦产生SIGQUIT信号将被解除阻塞,它的处理动作是用户自定义函数sighandler。

到这里,我们可以总结:

        两张位图和一张函数指针数组,可以实现让进程识别信号!! 

实验:检测信号的保存 

          注意:常规信号在递达之前产生多次只计一次,而实时信号在递达之前产生多次可以依次放在一个队列里。如何验证(常规信号在递达之前产生多次只记一次)呢?

        通过下面的这一份实验测试,可以验证。但是你可能会对实验中使用的关于信号的函数接口有疑惑,鉴于此,我会在注释中尽可能详细注明;并在后续的文章内容中详细讲解系统的信号部分的接口的使用。       

#include <signal.h>
#include <unistd.h>
#include <iostream>using std::cout;
using std::endl;
bool loop = true;void Print(sigset_t &pending)
{for (int sig = 31; sig > 0; sig--) // 没有0号信号,信号的范围1——31,两闭{if (sigismember(&pending, sig)){cout << 1;}else{cout << 0;}}cout << endl;
}
/*一旦检测到3号信号,会走这里的处理逻辑,此时吧loop置false,使得对2号信号的处理逻辑结束。*/
void donesig2(int sig)
{cout << "get sig 3" << endl;cout << "loop = false, done sig2" << endl;loop = false;
}
void sigcb(int sig)
{loop = true;cout << "get a sig:" << sig << endl;while (loop){sigset_t pending;sigpending(&pending);//函数接口:获取目前的pending位图Print(pending);//打印出pending位图,便于观察sleep(1);signal(3, donesig2);//检测3号信号——在处理信号的同时依然可以接受并处理信号}
}int main()
{struct sigaction ac, oac;//一个结构体类型,内部存储有维护信号系统的一系列变量ac.sa_flags = 0;//暂时设为0/*sa_mask是一个sigset_t类型的位图(sigset_t是一个专门用于维护31个信号位的类型)此处这个函数的作用是把这个位图的所有位置全置0(初始化)但是这个位图目前还没有被设置进操作系统的信号位图*/sigemptyset(&ac.sa_mask);/*sa_handler是结构体内部的一个成员,是一个函数指针类型,需要用户自定义实现,也就是当进程接受到特定信号之后需要做的处理动作*/ac.sa_handler = sigcb;while (true){//这是一个和上述的结构体类型同名称的一个函数//参数:(需要屏蔽的信号,需要设置结构体类型,老的结构体类型,目的是为了保存设置之前的数据,防止用户想要撤回操作)sigaction(2, &ac, &oac);//对2号信号进行特殊处理sleep(1);cout << "I am process:" << getpid() << endl;}return 0;
}

完~

未经作者同意禁止转载

相关文章:

[Linux] 信号(singal)详解(一)

标题&#xff1a;[Linux] 信号(singal)详解 水墨不写bug &#xff08;图片来源于网络&#xff09; 目录 一、认识信号 1、认识信号 2、信号特点 3、基本概念 二、信号的产生&#xff08;5种方式&#xff09; 三、信号的保存 正文开始&#xff1a; 一、认识信号 1、认识信…...

【设计模式系列】备忘录模式(十九)

目录 一、什么是备忘录模式 二、备忘录模式的角色 三、备忘录模式的典型应用场景 四、备忘录模式在Calendar中的应用 一、什么是备忘录模式 备忘录模式&#xff08;Memento Pattern&#xff09;是一种行为型设计模式&#xff0c;它允许在不暴露对象内部状态的情况下保存和恢…...

书生大模型实战营第4期——3.3 LMDeploy 量化部署实践

文章目录 1 基础任务2 配置LMDeploy环境2.1 环境搭建2.2 模型配置2.3 LMDeploy验证启动模型文件 3 LMDeploy与InternLM2.53.1 LMDeploy API部署InternLM2.53.1.1 启动API服务器3.1.2 以命令行形式连接API服务器3.1.3 以Gradio网页形式连接API服务器 3.2 LMDeploy Lite3.2.1 设置…...

11.28深度学习_bp算法

七、BP算法 多层神经网络的学习能力比单层网络强得多。想要训练多层网络&#xff0c;需要更强大的学习算法。误差反向传播算法&#xff08;Back Propagation&#xff09;是其中最杰出的代表&#xff0c;它是目前最成功的神经网络学习算法。现实任务使用神经网络时&#xff0c;…...

U盘文件夹变打不开的文件:深度解析、恢复策略与预防之道

一、U盘文件夹变打不开的文件现象解析 在日常使用U盘的过程中&#xff0c;我们时常会遇到这样的困扰&#xff1a;原本存储有序、可以轻松访问的文件夹&#xff0c;突然之间变成了无法打开的文件。这些文件通常以未知图标或乱码形式显示&#xff0c;双击或右键尝试打开时&#…...

软件工程中的需求分析流程详解

一、需求分析的定义 需求分析&#xff08;Requirements Analysis&#xff09;是指在软件开发过程中&#xff0c;通过与用户、相关人员的沟通与讨论&#xff0c;全面理解和确定软件需求的过程。需求分析的最终目标是清晰、准确地定义软件系统应具备的功能、性能、用户界面、约束…...

springboot369高校教师教研信息填报系统(论文+源码)_kaic

毕 业 设 计&#xff08;论 文&#xff09; 题目&#xff1a;高校教师教研信息填报系统的设计与实现 摘 要 如今社会上各行各业&#xff0c;都喜欢用自己行业的专属软件工作&#xff0c;互联网发展到这个时候&#xff0c;人们已经发现离不开了互联网。新技术的产生&#xff0c…...

Docker Buildx 与 CNB 多平台构建实践

一、Docker Buildx 功能介绍 docker buildx 是 Docker 提供的一个增强版构建工具&#xff0c;支持更强大的构建功能&#xff0c;特别是在构建多平台镜像和高效处理复杂 Docker 镜像方面。 1.1 主要功能 多平台构建支持 使用 docker buildx&#xff0c;可以在单台设备上构建…...

VBA字典与数组第二十一讲:文本转换为数组函数Split

《VBA数组与字典方案》教程&#xff08;10144533&#xff09;是我推出的第三套教程&#xff0c;目前已经是第二版修订了。这套教程定位于中级&#xff0c;字典是VBA的精华&#xff0c;我要求学员必学。7.1.3.9教程和手册掌握后&#xff0c;可以解决大多数工作中遇到的实际问题。…...

开源项目 - 人脸关键点检测 facial landmark 人脸关键点 (98个关键点)

开源项目 - 人脸关键点检测 facial landmark 人脸关键点 &#xff08;98个关键点&#xff09; 示例&#xff1a; ​​​​ 助力快速掌握数据集的信息和使用方式。 数据可以如此美好&#xff01;...

【Postgres_Python】使用python脚本批量导出PG数据库

示例代码说明&#xff1a; 有多个数据库需要导出为.sql格式&#xff0c;数据库名与sql文件名一致,读取的数据库名需要根据文件名进行拼接 import psycopg2 import subprocess import os folder_path D:/HQ/chongqing_20241112 # 获取文件夹下所有文件和文件夹的名称 filename…...

嵌入式Linux(SOC带GPU树莓派)无窗口系统下搭建 OpenGL ES + Qt 开发环境,并绘制旋转金字塔

树莓派无窗口系统下搭建 OpenGL ES Qt 开发环境&#xff0c;并绘制旋转金字塔 1. 安装 OpenGL ES 开发环境 运行以下命令安装所需的 OpenGL ES 开发工具和库&#xff1a; sudo apt install cmake mesa-utils libegl1-mesa-dev libgles2-mesa-dev libdrm-dev libgbm-dev2. 安…...

MySQL事物

目录 何谓事物&#xff1f; 何谓数据库事务? 并发事务带来了哪些问题? 脏读(Dirty read) 丢失修改(Lostto modify) 不可重复读(Unrepeatable read) 幻读(Phantom read) 不可重复读和幻读有什么区别? 并发事务的控制方式有哪些? SQL 标准定义了哪些事务隔离级别?…...

在 CentOS 上安装 Docker:构建容器化环境全攻略

一、引言 在当今的软件开发与运维领域&#xff0c;Docker 无疑是一颗璀璨的明星。它以轻量级虚拟化的卓越特性&#xff0c;为应用程序的打包、分发和管理开辟了崭新的高效便捷之路。无论是开发环境的快速搭建&#xff0c;还是生产环境的稳定部署&#xff0c;Docker 都展现出了…...

基于Spring Boot的宠物咖啡馆平台的设计与实现

私信我获取源码和万字论文&#xff0c;制作不易&#xff0c;感谢点赞支持。 基于Spring Boot的宠物咖啡馆平台的设计与实现 摘要 随着信息技术在管理上越来越深入而广泛的应用&#xff0c;管理信息系统的实施在技术上已逐步成熟。本文介绍了基于Spring Boot的宠物咖啡馆平台的设…...

JAVAWeb之javascript学习

1.js引入方式 1. 内嵌式&#xff1a;在head中&#xff0c;通过一对script标签引入JS代码&#xff1b;cript代码放置位置有一定的随意性&#xff0c;一般放在head标签中&#xff1b;2.引入外部js文件 在head中&#xff0c;通过一对script标签引入外部JS代码&#xff1b;注意&…...

电脑与优傲协作机器人(实体)的TCP通讯(操作记录)

目录 一、UR通信端口 二、电脑&#xff08;客户端&#xff09;连接协作机器人&#xff08;服务端&#xff09; 1.设置网络方法 2.检查设置 3.示教器切换远程控制&#xff08;注&#xff09; 4.客户端与协作机器人建立连接 5.连接测试 三、电脑&#xff08;服务端&#…...

C++初阶——动态内存管理

目录 1、C/C内存区域划分 2、C动态内存管理&#xff1a;malloc/calloc/realloc/free 3、C动态内存管理&#xff1a;new/delete 3.1 new/delete内置类型 3.2 new/delete自定义类型 4、operator new与operator delete函数 5、new和delete的实现原理 5.1 内置类型 5.2 自定…...

Python 【图像分类】之 PyTorch 进行猫狗分类功能的实现(Swanlab训练可视化/ Gradio 实现猫狗分类 Demo)

Python 【图像分类】之 PyTorch 进行猫狗分类功能的实现(Swanlab训练可视化/ Gradio 实现猫狗分类 Demo) 目录 Python 【图像分类】之 PyTorch 进行猫狗分类功能的实现(Swanlab训练可视化/ Gradio 实现猫狗分类 Demo) 一、简单介绍 二、PyTorch 三、CNN 1、神经网络 2、卷…...

Attention显存统计与分析

Attention显存估计 简单的Attention函数 import torch import torch.nn as nn import einops class Attention(nn.Module):def __init__(self, dim, num_heads8, qkv_biasFalse, qk_scaleNone, attn_drop0., proj_drop0.):super().__init__()self.num_heads num_headshead_d…...

java反射

反射 Java 反射是 Java 提供的一种强大特性&#xff0c;它允许程序在运行时动态地获取类的信息&#xff0c;并操作类的属性和方法。这为编写灵活、可扩展的 Java 应用程序提供了强有力的支持 获取Class对象 package ref;public class Person {private String name ;private …...

Spring Boot入门

1、Spring Boot是什么 Spring Boot 帮我们简单、快速地创建一个独立的、生产级别的 Spring 应用&#xff08;说明&#xff1a;Spring Boot底层是Spring&#xff09; 大多数 Spring Boot 应用只需要编写少量配置即可快速整合 Spring 平台以及第三方技术 特性&#xff1a; 快速…...

Spring Web:深度解析与实战应用

概述 大家好&#xff0c;欢迎来到今天的技术分享。我是你们的老朋友&#xff0c;今天&#xff0c;我们要深入探讨的是Spring Web模块&#xff0c;这个模块为Java Web应用程序提供了全面的支持&#xff0c;不仅具备基本的面向Web的综合特性&#xff0c;还能与常见框架如Struts2无…...

学习日志019--初识PyQt

使用pyqt创建一个登录界面 from PyQt6.QtCore import Qt # 引入pyqt6包 from PyQt6.QtGui import QIcon, QMovie from PyQt6.QtWidgets import QApplication, QWidget, QPushButton, QLabel, QLineEdit import sysclass MyWidget(QWidget):# 构造函数&#xff0c;继承父类的构造…...

Swift 宏(Macro)入门趣谈(五)

概述 苹果在去年 WWDC 23 中就为 Swift 语言新增了“其利断金”的重要小伙伴 Swift 宏&#xff08;Swift Macro&#xff09;。为此&#xff0c;苹果特地用 2 段视频&#xff08;入门和进阶&#xff09;颇为隆重的介绍了它。 那么到底 Swift 宏是什么&#xff1f;有什么用&…...

Linux 35.6 + JetPack v5.1.4@DeepStream安装

Linux 35.6 JetPack v5.1.4DeepStream安装 1. 源由2. 步骤Step 1 安装Jetpack 5.1.4 L4T 35.6Step 2 安装依赖组件Step 3 安装librdkafkaStep 4 安装 DeepStream SDKStep 5 测试 deepstream-appStep 6 运行 deepstream-app 3. 总结3.1 版本问题3.2 二进制help 4. 参考资料 1. …...

C++基础:list的底层实现

文章目录 1.基本结构2.迭代器的实现2.1 尾插的实现2.2 迭代器的实现 3.打印函数(模版复用实例化)4.任意位置的插入删除1. 插入2. 删除 5.析构与拷贝构造5.1 析构函数5.2 拷贝构造5.3 赋值重载 1.基本结构 与vector和string不同list需要: 一个类来放入数据和指针也就是节点 一…...

Spring中@Transactional注解与事务传播机制

文章目录 事务传播机制事务失效的场景 事务传播机制 事务的传播特性指的是 当一个事务方法调用另一个事务方法时&#xff0c;事务方法应该如何执行。 事务传播行为类型外部不存在事务外部存在事务使用方式REQUIRED(默认)开启新的事务融合到外部事务中Transactional(propagati…...

实验七 用 MATLAB 设计 FIR 数字滤波器

实验目的 加深对窗函数法设计 FIR 数字滤波器的基本原理的理解。 学习用 Matlab 语言的窗函数法编写设计 FIR 数字滤波器的程序。 了解 Matlab 语言有关窗函数法设计 FIR 数字滤波器的常用函数用法。 掌握 FIR 滤波器的快速卷积实现原理。 不同滤波器的设计方法具有不同的优…...

Linux - selinux

七、selinux 1、说明 SELinux是Security-Enhanced Linux的缩写&#xff0c;意思是安全强化的linux。 SELinux是对程序、文件等权限设置依据的一个内核模块。由于启动网络服务的也是程序&#xff0c;因此刚好也 是能够控制网络服务能否访问系统资源的一道关卡。 传统的文件权…...

【STL】C++ vector类模板

文章目录 基本概念vector的使用定义和初始化构造函数赋值操作容量和大小插入和删除数据存取 互换容器vector的迭代器vector储存自定义数据类型 基本概念 vector是类型相同的对象的容器&#xff0c;vector的大小可以变化&#xff0c;可以向数组中增加元素。因此&#xff0c;vec…...

物联网——WatchDog(监听器)

看门狗简介 独立看门狗框图 看门狗原理&#xff1a;定时器溢出&#xff0c;产生系统复位信号&#xff1b;若定时‘喂狗’则不产生系统复位信号 定时中断基本结构&#xff08;对比&#xff09; IWDG键寄存器 独立看门狗超时时间 WWDG(窗口看门狗) WWDG特性 WWDG超时时间 由于…...

从零开始写游戏之斗地主-网络通信

在确定了数据结构后&#xff0c;原本是打算直接开始写斗地主的游戏运行逻辑的。但是突然想到我本地写出来之后&#xff0c;也测试不了啊&#xff0c;所以还是先写通信模块了。 基本框架 在Java语言中搞网络通信&#xff0c;那么就得请出Netty这个老演员了。 主要分为两个端&…...

【智能控制】实验,基于MATLAB的模糊推理系统设计,模糊控制系统设计

关注作者了解更多 我的其他CSDN专栏 过程控制系统 工程测试技术 虚拟仪器技术 可编程控制器 工业现场总线 数字图像处理 智能控制 传感器技术 嵌入式系统 复变函数与积分变换 单片机原理 线性代数 大学物理 热工与工程流体力学 数字信号处理 光电融合集成电路…...

Vega Editor 基于 Web 的图形编辑器

Vega Editor 是一个强大的基于 Web 的图形编辑器&#xff0c;专为 Vega 和 Vega-Lite 可视化语法设计。它提供了一个交互式的环境&#xff0c;用户可以在其中编写、预览和分享他们的 Vega 和 Vega-Lite 可视化作品。Vega 和 Vega-Lite 是用于声明性可视化的开源语法&#xff0c…...

SQL 中SET @variable的使用

在 SQL 中&#xff0c;SET variable 用于声明和赋值用户定义的变量。具体来说&#xff0c; 符号用于表示一个局部变量&#xff0c;可以在 SQL 语句中存储和使用。它通常在存储过程、函数或简单的 SQL 查询中使用。 1. 声明并赋值给变量 你可以使用 SET 语句给一个变量赋值。例…...

基于 Vite 封装工具库实践

项目背景&#xff1a;公司在多个项目中频繁使用相同的工具函数。为了避免每次开发新项目时都重复复制代码&#xff0c;决定通过 Vite 封装一个时间函数组件库。该库将被发布到 Verdaccio 供团队其他项目使用。 项目介绍 本项目封装了一个时间函数工具库&#xff0c;使用 Momen…...

Oracle DataGuard 主备正常切换 (Switchover)

前言 众所周知&#xff0c;DataGuard 的切换分为两种情况&#xff1a; 系统正常情况下的切换&#xff1a;这种方式称为 switchover&#xff0c;是无损切换&#xff0c;不会丢失数据。灾难情况下的切换&#xff1a;这种情况下一般主库已经启动不起来了&#xff0c;称为 failov…...

[Redis#13] cpp-redis接口 | set | hash |zset

目录 Set 1. Sadd 和 Smembers 2. Sismember 3. Scard 4. Spop 5. Sinter 6. Sinter store Hash 1. Hset 和 Hget 2. Hexists 3. Hdel 4. Hkeys 和 Hvals 5. Hmget 和 Hmset Zset 1. Zadd 和 Zrange 2. Zcard 3. Zrem 4. Zscore cpp-redis 的学习 主要关注于…...

青海摇摇了3天,技术退步明显.......

最近快手上的青海摇招聘活动非常火热&#xff0c;我已经在思考是否备战张诗尧的秋招活动。开个玩笑正片开始&#xff1a; 先说一下自己的情况&#xff0c;大专生&#xff0c;20年通过校招进入杭州某软件公司&#xff0c;干了接近4年的功能测试&#xff0c;今年年初&#xff0c…...

Flask+Minio实现断点续传技术教程

什么是MinIO MinIO是一个高性能的分布式对象存储服务&#xff0c;与Amazon S3 API兼容。它允许用户存储和检索任意规模的数据&#xff0c;非常适合于使用S3 API的应用程序。MinIO支持多租户存储&#xff0c;提供高可用性、高扩展性、强一致性和数据持久性。它还可以作为软件定义…...

Java中Logger定义的三种方式

在 Java 项目中&#xff0c;日志记录是开发中的一个重要部分&#xff0c;用于跟踪系统运行状态、排查问题以及记录重要事件。在定义日志记录器时&#xff0c;经常会遇到一些写法上的选择&#xff0c;比如 Logger 的作用域、是否使用静态变量&#xff0c;以及如何命名变量。本篇…...

模型压缩技术

目录 模型压缩技术 权重剪枝: 量化技术: 知识蒸馏: 低秩分解: 一、权重剪枝 二、量化技术 三、知识蒸馏 四、低秩分解 模型压缩技术 权重剪枝: 描述:通过删除模型中不重要的权重来减少参数数量和计算量。举例说明:假设我们有一个神经网络模型,其中某些神经元的…...

面试题整理

1 spring使用中有哪些设计模式 工厂模式-beanFactory,代理模式-aop,单例模式-每个bean默认都是单例的,原型模式-当将bean的作用域改为prototype时每次获取bean时使用了原型模式创建对象,责任链模式-dispatchServle查找url对应的处理器映射器时使用了,观察者模式-spring的…...

Linux

1、显示系统中所有进程 ps -ef运行效果&#xff1a; [rootredhat-9 ~]# ps -ef UID PID PPID C STIME TTY TIME CMD root 1 0 0 19:01 ? 00:00:01 /usr/lib/systemd/systemd rhgb --switched-r root 2 0 0…...

力扣_2389. 和有限的最长子序列

力扣_2389. 和有限的最长子序列 给你一个长度为 n 的整数数组 nums &#xff0c;和一个长度为 m 的整数数组 queries 。 返回一个长度为 m 的数组 answer &#xff0c;其中 answer[i] 是 nums 中 元素之和小于等于 queries[i] 的 子序列 的 最大 长度 。 子序列 是由一个数组…...

UI设计从入门到进阶,全能实战课

课程内容&#xff1a; ├── 【宣导片】从入门到进阶!你的第一门UI必修课!.mp4 ├── 第0课&#xff1a;UI知识体系梳理 学习路径.mp4 ├── 第1课&#xff1a;IOS设计规范——基础规范与切图.mp4 ├── 第2课&#xff1a;IOS新趋势解析——模块规范与设计原则(上).mp4…...

Formality:等价性检查的流程与模式(Guide、Setup、Preverify、Match与Verify)

相关阅读 Formalityhttps://blog.csdn.net/weixin_45791458/category_12841971.html?spm1001.2014.3001.5482 等价性检查的流程 图1概述了使用Formality进行等效性检查的具体步骤。 图1 等价性检查流程 启动Formality(Start Formality) 要启动Formality&#xff0c;请…...

【Linux】————(日志、线程池及死锁问题)

作者主页&#xff1a; 作者主页 本篇博客专栏&#xff1a;Linux 创作时间 &#xff1a;2024年11月29日 日志 关于日志&#xff0c;首先我们来说一下日志的作用&#xff0c; 作用&#xff1a; 问题追踪&#xff1a;通过日志不仅仅包括我们程序的一些bug&#xff0c;也可以在…...

【自动化】配置信息抽取

公共基本信息配置文件抽取 公共基本信息比如卖家、买家、管理员&#xff0c;验证码等基本信息&#xff0c;再比如数据库、redis、各个服务的域名&#xff0c;这些目前是写死在代码之中的&#xff0c;为了能够更好的维护他们&#xff0c;我们将他们放入配置文件进行管理 公共的…...