进程信号(上)【Linux操作系统】
文章目录
- 进程信号
- 信号引入
- 进程要如何识别信号?
- 进程接收到信号的时候,不一定马上处理信号
- 进程处理信号的情况
- 信号相关概念
- 信号产生
- 键盘产生
- 通过指令向进程发送信号
- 系统调用向进程发送信号
- 软件条件
- 异常错误
- 操作系统如何知道进程出现了异常错误?
- 除0等数据运算出现错误
- 野指针等段错误
- 信号相关函数,系统调用,指令
- 系统调用:signal
- 系统调用:sigaction
- 指令:kill -信号编号 pid
- 系统调用:kill
- 系统调用:raise
- 系统调用:alarm
- 系统调用:pause
进程信号
信号引入
生活中的信号:
狼烟,闹钟,上下课铃声等都是信号
狼烟四起便知敌人来犯,闹钟响起,就知道要做对应的事情了
信号是操作系统/用户/其他进程向目标进程发送异步事件
的一种方式
[异步事件即:出乎意料,突然发生的事件
]
异步事件指的是
在没有预先定义的时间点发生的事件,这些事件与程序执行的正常流程无关,它们可以在任何时候发生,通常是由外部条件或系统内部的其他进程触发的。
进程要如何识别信号?
类比我们人识别信号,我们是通过学习知识,就知道红绿灯红灯亮了要停
进程也是如此,但是它不需要学习,因为程序员通过代码把"知识"直接塞进了进程的脑子里
本质就是:操作系统的进程模块中编写了信号的种类和对应信号的默认处理函数
也就是
进程能识别的大部分信号都是内置的,是进程出生就有的
要识别新的信号,就要编写对应代码,进程就能识别对应信号
进程在信号产生之前,就已经知道要怎么处理信号了
因为可能收到的信号的种类和其对应的处理方式是写进操作系统源代码里面的,都运行起来了自然知道
就比如
我们就算面前没有红绿灯,我们也知道如果遇到红灯应该停下
我们定了一个明天的闹钟,我们定闹钟是时候,就知道它明天会响,响了要干嘛
进程接收到信号的时候,不一定马上处理信号
因为一般信号都是突然出现的,进程在信号出现的时候可能正在做一些任务
所以进程一般会做完任务再处理信号,或者等到合适的时机
再处理信号
所以为了能在合适的时机处理信号,进程要把接收到的信号保存起来
不然的话,进程就会"记不得"有信号要处理,要处理什么信号了
进程处理信号的情况
-
默认行为:
直接按照内置的处理方式对信号进行处理
例如:红灯停绿灯行 -
忽略信号:
直接不管该信号了,不对该信号进行处理 -
自定义行为:
即有些进程可能比较特殊,它接收到某一信号时,会调用用户自定义的函数
信号相关概念
-
进程对信号
执行信号处理方法
时,称为信号递达
-
进程接收到信号到处理信号之间的状态,称为
信号未决
-
进程可以阻塞(屏蔽)某个信号,屏蔽那个信号之后,即使进程接收到了这个信号,这个信号将
一直处于信号未决状态
,也永远不会处理它
除非解除对这个信号的阻塞(屏蔽) -
阻塞信号和忽略信号的区别:
1.阻塞信号a,a就会一直处于信号未决状态
2.忽略信号a,表示a已经处理(递达)了,因为忽略就是一种信号处理的方式
信号产生
键盘产生
即用户从键盘输入字符给一个终端的前台进程,其中有一些特定字符就会被操作系统解释成信号
例如:
用户键盘输入ctrl c
,前台进程就会接收到ctrl c,操作系统识别到之后,就会把ctrl c解释成2号信号
并发送给前台进程
通过指令向进程发送信号
例如
kill 信号编号
指令,就可以给指定的进程发送信号指定信号
系统调用向进程发送信号
比如kill系统调用
和raise系统调用
软件条件
某个软件没有准备好,或者具备/不具备某个条件,或者软件已经不能使用了等
如果此时进程还要使用软件,那么操作系统就会发送信号,直接杀掉进程
比如
管道读端关闭,进程却还要向管道写入,此时操作系统就会给进程发送13号信号,杀掉这个进程
定时器(闹钟)也是软件
它的软件条件即:闹钟响了,操作系统就给目标进程发送信号
异常错误
进程因为野指针,除0等异常错误,而导致的进程崩溃的本质其实是:
操作系统识别到进程的异常,向进程发送了信号,进程接收信号之后才退出
操作系统如何知道进程出现了异常错误?
除0等数据运算出现错误
CPU执行代码时,遇到数据运算的时候
会把参与运算的数据,放进对应寄存器中,然后再进行计算
但是数据运算的结果可能出问题,比如遇到了除0
所以
CPU中有一个寄存器,叫做状态寄存器(Eflags)
,它用来衡量CPU的数据运算是否有问题
①如果它里面的比特位都为0,那就没问题
②有一个比特位为1就说明有问题
所以一旦CPU数据计算出现问题,状态寄存器里面对应的标志位就会被0→1
比如
如果除0了,状态寄存器里面的溢出标志位就0→1
此时CPU就会通过内部中断向操作系统报告错误
所以操作系统就知道有进程出现了数据运算类的异常错误
操作系统就要处理这个错误:即用信号杀掉进程
这个进程是谁呢?
当然就是当时正在CPU上跑的进程
如果此时这个出现数据运算异常的进程把对应的信号捕捉了,把它的默认处理方法改了,进程没有被杀掉,此时会怎样?
操作系统会死循环地使用信号杀它
因为出现数据运算异常的进程再操作系统看来是必死无疑的,所以没必要对清除它的上下文数据,等下一个进程上来直接覆盖就行
所以这个进程再CPU中对应的上下文数据不会改变
也就是状态寄存器中的标志位一直都在
所以这个进程就算没有退出,CPU只要执行它的代码,就会发现状态寄存器有标志位为1,就会告诉操作系统,操作系统又会发信号杀它
所以数据运算异常的进程就算捕捉信号了,不会退出,它后面的代码也跑不了了
因为CPU看见它就内部中断,就只会上报操作系统,根本不跑代码了。
野指针等段错误
进程产生野指针等段错误,多半就是虚拟地址在页表中没有对应的物理地址,无法完成虚拟到物理的转换
虚拟到物理的转换是由硬件MMU实现的,MMU也是在CPU内部的
当MMU发现无法做到虚拟地址→物理地址时,就会报错
此时就和上面的一样,CPU内部中断,把错误告知操作系统,操作系统通过信号杀掉进程
综上:
进程内部产生的各种异常错误,都会在对应的硬件上有所表现
操作系统作为硬件的管理者,当硬件出现问题时,就会向操作系统发送硬件中断,操作系统就自然会知道了
信号相关函数,系统调用,指令
系统调用:signal
-
头文件:signal.h
-
参数表:
- 1.
signum:信号编号
以下是Linux支持的常见信号以及其对应编号
其中前31个普通信号我们需要了解,之后的信号是实时信号不需要了解
使用man 7 signal
即可查看Linux常见信号的作用和基本信息
- 1.
[上图中的信号名称(SIGINT等)其实就是宏,宏值就是它们自己的编号]
-
2.
void(*p)(int)类型的函数指针
:表示要替换上来的方法
1.第2个参数如果是SIG_IGN
,就表示把默认处理方法改成忽略
2.第2个参数如果是SIG_DFL
,就表示执行默认处理方法
SIG_IGN和SIG_DFL本质是一个函数指针类型的宏
int类型的参数的作用是:
信号被触发(接收到信号)的时候,操作系统会把接收到的信号的编号,自动传给这个int类型的形参 -
作用:把进程对捕捉到的信号的默认处理方法,修改成我们传入的指定方法
-
注意:
- ①系统调用signal的作用就只是修改进程对信号的默认处理方法
所以只需要设置一次即可
其他的,信号识别之类的工作不需要它做
信号识别/信号接收等动作进程自己就内置了 - ②9号信号永远无法被捕捉,默认处理方式也无法被修改
因为使用signal捕捉信号之后,可以修改它们的默认处理方法
那么如果一个进程把所有的信号都捕捉了,并且把所有信号的默认处理方法全部都修改掉
那岂不是没有任何方法能够杀死这个进程的了?[因为进程异常退出的方法只有通过信号实现
]这个进程一旦启动就可以肆无忌惮地搞破坏了?
操作系统怎么可能允许这样的事情发生!
- ①系统调用signal的作用就只是修改进程对信号的默认处理方法
系统调用:sigaction
-
头文件:
signal.h
-
参数:
-
int signum
:信号编号 -
s
truct sigaction*act
:输入型参数,作为修改源
struct sigaction中我们要在意的成员变量:- 1.viod(*)(int)sa_handler
:要修改成的函数方法
2.sigset_t sa_mask
:执行该信号的信号处理方法时,除了默认会屏蔽的信号以外要新增的屏蔽的信号列表
例:
如果sa_mask为00001101
进程a执行2号信号的处理方法时,1,2,3,4信号都会被block表屏蔽
其中2号信号默认一定会被屏蔽,其他的则是因为sa_mask而屏蔽的 -
struct sigaction*old:输出型参数,把被该函数修改前结构体,带出来
(防止用户修改了之后后悔,可以保存修改前的结构体)
-
-
作用:
修改一个进程对于某个信号的处理方法
指令:kill -信号编号 pid
给对应进程发送对应编号的信号
系统调用:kill
-
头文件:
sys/types.h
和signal.h
-
返回值:
- 成功,返回0
- 失败,返回-1
-
参数:
- pid_t pid:对应要发送给的进程的pid
- int sig:信号编号
-
作用:把指定信号发送给指定进程
系统调用:raise
-
头文件:
signal.h
-
返回值:
- 成功,返回0
- 失败,返回-1
-
参数:
int sig:信号编号 -
作用:把指定信号发送给,调用raise的进程自己
系统调用:alarm
-
头文件:
unistd.h
-
返回值:unsigned int
闹钟距离响起还剩多少时间
①如果闹钟正常响了,那么就返回0
②如果设置了闹钟之后,过了一会儿又取消或者重新设置了闹钟(alarm(0)是取消闹钟,alarm(n)就是重置闹钟)
那么alarm就会返回上一次的闹钟距离响起还剩多少时间
例如:
alarm(3)→过了2秒→alarm(0)→返回值为3-2=1
alarm(3)→过了2秒→alarm(5)→返回值为3-2=1
所以一个进程只能有一个闹钟 -
参数:
unsigned int seconds:秒数 -
作用:给进程定一个闹钟[定时器],时间到了就会给自己这个进程发送14号信号
-
注意:
alarm设置的闹钟是一次性闹钟
即设置了之后,只会响一次不是每隔n秒响一次的永久闹钟。
响一次之后就会取消闹钟
除非再调用alarm设置闹钟,才有可能继续响
系统调用:pause
-
头文件:
unistd.h
-
参数:没有参数
-
作用:阻塞等待信号的到来,如果没有信号来就一直阻塞着
相关文章:
进程信号(上)【Linux操作系统】
文章目录 进程信号信号引入进程要如何识别信号?进程接收到信号的时候,不一定马上处理信号进程处理信号的情况 信号相关概念信号产生键盘产生通过指令向进程发送信号系统调用向进程发送信号软件条件异常错误 操作系统如何知道进程出现了异常错误ÿ…...
全方位详解微服务架构中的Service Mesh(服务网格)
一、引言 随着微服务架构的广泛应用,微服务之间的通信管理、流量控制、安全保障等问题变得日益复杂。服务网格(Service Mesh)作为一种新兴的技术,为解决这些问题提供了有效的方案。它将服务间通信的管理从微服务代码中分离出来&a…...
bi工具是什么意思?bi工具的主要功能有哪些?
目录 一、BI 工具是什么意思? 1. 基本概念 2. 发展历程 编辑二、BI 工具的主要功能 1. 数据连接与整合 2. 数据存储与管理 3. 数据分析与挖掘 4. 可视化呈现 5. 报表生成与分享 6. 实时监控与预警 三、BI 工具的应用场景 1. 销售与营销 2. 财务与会计…...
cocos creator使用jenkins打包微信小游戏,自动上传资源到cdn,windows版运行jenkins
cocos 版本2.4.11 在windows上jenkins的具体配置和部署,可参考上一篇文章cocos creator使用jenkins打包流程,打包webmobile_jenkins打包,发布,部署cocoscreator-CSDN博客 特别注意,windows上运行jenkins需要关闭windows自己的jenkins服务&a…...
PaddleOCR的Pytorch推理模块
概述 在项目中,遇到文字识别OCR的使用场景。 然而,目前效果最好的PaddleOCR只能用百度的PaddlePaddle框架运行。 常见项目中,往往使用更普遍的Pytorch框架,单独安装PaddlePaddle不仅会让项目过于臃肿,而且可能存在冲…...
操作系统期末复习(一)
一、选择 1.从用户的观点看,操作系统是() A.用户与计算机之间的接口 B.控制和管理计算机资源的软件 C.合理地组织计算机工作流程的软件 由若干层次的程序按一定的结构组成的有机体 答案:A 2.操作系统在计算机系统中位于&#x…...
今日行情明日机会——20250521
上证指数缩量收阳线,个股跌多涨少,整体处于日线上涨末端,注意风险。 深证指数,出现60分钟的顶分型,需要观察方向的选择。 2025年5月21日涨停股主要行业方向分析 并购重组 涨停家数:9家。 代表标的&am…...
传统Spring MVC + RESTful 与 Vue3 结合 JWT Token 验证的示例
以下是针对非Spring Boot项目(传统Spring MVC)的示例 一、项目结构 src/ ├── main/ │ ├── java/ │ │ └── com/ │ │ └── example/ │ │ ├── config/ # 配置类目录 │ │ │ ├─…...
使用Redis的Bitmap实现了签到功能
思路分析 我们可以把 年和月 作为BitMap的key,然后保存到一个BitMap中,每次签到就到对应的位上把数字从0 变为1,只要是1,就代表是这一天签到了,反之咋没有签到。 关键问题 问题一: 什么叫做连续签到天数…...
Unity-编辑器扩展-其二
今天我们来基于之前提到的编辑器扩展的内容来做一些有实际用处的内容: 检查丢失的组件 首先是一个比较实际的内容:当我们在做项目时,经常会涉及到预设体在不同项目或者不同文件路径下的转移,这个时候很容易在某个具体的prefab对…...
项目中Warmup耗时高该如何操作处理
1)项目中Warmup耗时高该如何操作处理 2)如何在卸载资源后Untracked和Other的内存都回收 3)总Triangles的值是否包含了通过GPU Instancing画的三角形 4)有没有用Lua来修复虚幻引擎中对C代码进行插桩Hook的方案 这是第432篇UWA技术知…...
php://filter的trick
php://filter流最常见的用法就是文件包含读取文件,但是它不止可以用来读取文件,还可以和RCE,XXE,反序列化等进行组合利用 filter协议介绍 php://filter是php独有的一种协议,它是一种过滤器,可以作为一个中…...
STM32 I2C硬件读写
一、I2C外设简介 STM32内部集成了硬件I2C收发电路,可以由硬件自动执行时钟生成、起始终止条件生成、应答位收发、数据收发等功能,减轻CPU的负担支持多主机模型(固定多主机、可变多主机)支持7位/10位地址模式支持不同的通讯速度&a…...
Qt+线段拖曳示例代码
Qt线段拖曳示例代码,功能见下图。 代码如下: canvaswidget.h #ifndef CANVASWIDGET_H #define CANVASWIDGET_H#include <QWidget> #include <QPainter> #include <QMouseEvent> #include <QVector>class CanvasWidget : publi…...
计算机网络相关面试题
一、HTTP1.1和HTTP2的区别 HTTP/1(主要指 HTTP/1.1)和 HTTP/2 是 Web 协议发展中的两个重要版本,二者在性能、协议机制和功能特性上有显著差异。以下从多个维度对比分析,并结合具体案例说明: 一、连接与请求处理方式 1…...
docker中部署Universal Media Server (UMS)
Universal Media Server (UMS) 本身主要是作为桌面服务程序开发的(主要面向 Java GUI DLNA 播放),但确实可以通过 Docker 进行部署。虽然官方没有提供 Docker 镜像,但社区有一些可用的方式可以在 Docker 中运行它。 下面是一个可…...
WordPress Elementor零基础教程
一、WordPress Elementor 是什么?—— 可视化网站搭建 “积木工具箱” 基础定义 Elementor 是 WordPress 的一款可视化页面构建插件,就如同网站搭建领域的 “PPT 编辑器”。它能让你无需编写代码,仅通过拖放模块(像图片、文本、…...
鸿蒙UI开发——实现一个上拉抽屉效果
1、概 述 在项目开发中,我们可能会遇到临时交互的场景(即:弹出一个临时交互框,交互完毕后继续用户的主流程),效果如下: 在ArkUI中,此类弹出窗被称为“半模态页面”,ArkU…...
详细介绍Qwen3技术报告中提到的模型架构技术
详细介绍Qwen3技术报告中提到的一些主流模型架构技术,并为核心流程配上相关的LaTeX公式。 这些技术都是当前大型语言模型(LLM)领域为了提升模型性能、训练效率、推理速度或稳定性而采用的关键组件。 1. Grouped Query Attention (GQA) - 分组…...
docker面试题(3)
如何临时退出一个正在交互的容器的终端,而不终止它 按ctrlp,后按ctrlq ,如果按ctrlc会使容器内的应用进程终止,进而会使容器终止 很多应用容器都默认是后台运行的,怎么查看它们输出的日志信息 使用docker logs &#…...
2025年二级等保实施全攻略:传统架构与云等保方案深度解析
2025年,随着《网络安全法》的深化落实和等保2.0标准的全面推行,二级等保已成为中小企业及非核心业务系统的合规基线。如何在高效满足监管要求的同时,兼顾成本与安全效能?本文将结合最新政策与实战经验,从传统架构到云等…...
技术点对比
数据库 数据库程序在线访问与ORM访问的对比 数据库程序在线ORM访问优点性能好性能差可以处理复杂sql缺点 性能: 复杂sql支持: 开发成本: 架构风格 管道-过滤器风格与数据仓库风格对比 管道-过滤器风格数据仓储风格备注交互方式顺序结构…...
自监督学习与监督学习
🔍 一、监督学习 vs 自监督学习:核心区别 维度监督学习(Supervised Learning)自监督学习(Self-Supervised Learning)是否需要人工标注的标签✅ 需要,如分类标签、边界框等❌ 不需要,…...
Java操作数据库,JDBC
package myjdbc; import com.mysql.jdbc.Driver; import java.sql.Connection; import java.sql.SQLException; import java.sql.Statement; import java.util.Properties; /*** 练习JDBC,完成一些简单的操作。*/ public class jdbc01 {public static void main(Str…...
UML 活动图 (Activity Diagram) 使用案例
UML 活动图使用案例 UML 活动图 (Activity Diagram) 使用案例活动图的主要元素典型使用案例1. 用户登录流程2. 在线购物流程3. 订单处理系统4. 文件审批流程 活动图的优势何时使用活动图 UML 活动图 (Activity Diagram) 使用案例 活动图是UML中用于描述业务流程或系统工作流程…...
回溯法求解N皇后问题
目录 前言 一、回溯法是什么? 二、N皇后问题描述 分析解题思路 三、算法设计 1、递归法 2、非递归法 总结 前言 本文将从递归形式和非递归形式两种方法来介绍求解N皇后问题的回溯法,后续也会更新更多有关算法分析这方面的问题欢迎大家关注~🤩…...
网络流量分析工具ntopng的安装与基本使用
网络流量分析工具ntopng的安装与基本使用 一、ntopng基本介绍1.1 ntopng简介1.2 主要特点1.3 使用场景 二、本地环境介绍2.1 本地环境规划2.2 本次实践介绍 三、安装ntopng工具3.1 官网地址3.2 配置软件源3.3 添加软件源3.4 安装ntopng 四、ntopng的基本配置4.1 修改配置文件4.…...
新导游入行规范与职业发展指导
随着旅游行业的蓬勃发展,导游作为旅游服务的重要环节,其职业素养和专业能力备受关注。对于新入行的导游而言,了解行业规范,明确职业发展方向,是开启职业生涯的重要一步。 一、严格遵守行业规范 持证上岗…...
数据结构与算法——堆
堆 树树的概念与结构树的相关术语树的表示树形结构实际运用场景 二叉树概念与结构特殊的二叉树满二叉树完全二叉树 二叉树存储结构顺序结构链式结构 实现顺序结构二叉树堆的概念与结构堆的实现向上调整算法(插入数据)向下调整算法 堆的应用堆排序(建堆)向…...
【写在创作纪念日】基于SpringBoot和PostGIS的各省东西南北四至极点区县可视化
目录 前言 一、空间检索简介 1、空间表结构 2、四至空间检索 二、前后端实现 1、后端实现 2、前端集成 三、成果展示 1、东部省份 2、西部省份 3、南部省份 4、北部省份 5、中部省份 四、总结 前言 在当今数字化时代,地理信息数据的分析与可视化对于众…...
AI驱动新增长:亚马逊Rufus广告点击率提升300%的奥秘
在生成式人工智能迅速融入商业应用的背景下,全球跨境电商巨头亚马逊(Amazon)正以前所未有的速度重构其广告生态。2024年第一季度,据亚马逊官方披露,通过部署内部开发的AI购物助手“Rufus”,其平台部分广告点…...
osgEarth中视角由跟随模式切换到漫游模式后没有鼠标拖拽功能问题分析及解决方法
遇到了一个棘手的问题,就是在由跟随模式切换到漫游模式的时候,鼠标无法实现拖拽功能。后来发现是前面给自己挖的坑。 因为要实现鼠标点选某个模型后,模型需要变红色显示,所以添加了一个事件处理程序。 // 创建 场景中模型的点选功能 事件处理程序 ModelSelectionHandler* …...
网页 HTML布局(详解)
本篇讲的是:构成网页的三要素中的HTML HTML的基本结构标签: html标签:网页的整体 head标签:网页的头部 body标签:网页的身体 title标签:网页的标题 一般我们新建一个HTML就会带有这些基本的标签:…...
为什么可以不重写m1方法
在 Java 中,当一个类继承另一个类并同时实现接口时,如果接口中的方法签名与父类中的方法签名完全相同(包括方法名、参数列表和返回类型),那么父类的方法会自动满足接口的实现要求,子类无需显式重写该方法。…...
深入解析应用程序分层及 BaseDao 的封装策略
目录 1. 应用程序分层 1.1. 应用程序分层简介 1.1.1. 三层结构 1.1.2. 分层的优点 1.1.3. 分层命名 1.2. 应用程序分层实现 1.3. 在分层项目中实现查询业务 2. 封装通用的BaseDao 2.1. 封装通用的DML操作 2.2. 封装通用的查询操作 3. 总结 前言 本文讲解JDBC中的应用…...
物理机做完bond后network服务重启失败
问题描述: 物理机通过systemctl status network.service查看网络服务情况,服务状态为failed,报错:Failed to start LSB: Bring up/down netw 问题分析: 1、network服务于NetworkManager服务冲突 2、未使用的网卡没…...
AGI大模型(30):LangChain链的基本使用
为开发更复杂的应用程序,需要使用Chain来链接LangChain中的各个组件和功能,包括模型之间的链接以及模型与其他组件之间的链接。 链在内部把一系列的功能进行封装,而链的外部则又可以组合串联。 链其实可以被视为LangChain中的一种基本功能单元。 API地址:https://python.…...
什么导致ERP系统中BOM表频繁出错?关键因素与解决路径
企业引入 ERP 系统后,常因 BOM(物料清单)维护不规范导致计划混乱、成本失控等问题。部分工厂依赖手工录入 BOM 数据,存在版本管理缺失、替代物料未标注等现象,使得 MRP 计划出错率高,生产效率与质量双降。解…...
(vue)前端实现下载后端提供的URL文件
(vue)前端实现下载后端提供的URL文件 动态创建: function downloadFile(url, filename) {const a document.createElement(a)a.href urla.download filename || download // 设置下载文件名document.body.appendChild(a)a.click()document.body.removeChild(a) …...
Axure通过下拉框选项改变,控制字段显隐藏
要求:要求选择钢铁行业时,字段1显示,字段2、字段3隐藏,选择水泥行业时,字段2显示,字段1、字段3隐藏,选择发电行业时,字段3显示,字段1、字段2隐藏。 1、首先Axure拖入一个…...
Axure应用交互设计:动态面板嵌套实现超强体验感菜单表头
亲爱的小伙伴,在您浏览之前,烦请关注一下,在此深表感谢!如有帮助请订阅专栏! Axure产品经理精品视频课已登录CSDN可点击学习https://edu.csdn.net/course/detail/40420 课程主题:动态面板嵌套 主要内容:利用动态面板多层嵌套实现菜单表头 应用场景:广泛应用于表单表…...
CICD遇到npm error code EINTEGRITY的问题
场景 CICD编译时抛出npm error code EINTEGRITY的错误 npm error code EINTEGRITY npm error sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA integrity checksum failed when using sha512: wanted sha512-PlhdFcillOINfeV…...
C# AI(Trae工具+claude3.5-sonnet) 写前后端
这是一个AI 写的前后端分离项目,通过AI编程,开发电商管理系统(登陆、注册) 使用的AI工具为 Trae工具(字节国际版)claude3.5-sonnet(目前代码最强模型) 前端为 vue3Bootstrap 后端为 C# net5.0(因为我电脑里面已经安装了这个新版更好) do…...
leetcode 25. Reverse Nodes in k-Group
25. Reverse Nodes in k-Group 递归法: /*** Definition for singly-linked list.* struct ListNode {* int val;* ListNode *next;* ListNode() : val(0), next(nullptr) {}* ListNode(int x) : val(x), next(nullptr) {}* ListNode(int x, L…...
PHP伪随机数
在我们现实生活中由于一些物理原因产生的随机数才是真正的随机数,比如掷钱币、骰子、转轮、使用电子元件的噪音、核裂变等等。而对于计算机来说,真正的随机数是不存在的,因为无法通过电信号来实现上面提到的物理过程,对于计算机来…...
vue3 threejs 物体发光描边
threejs官网案例: three.js examples 我的代码(标注了重点代码,加上即可) <template><div class"greenhouse" ref"canvasContainerRef"></div></template><script setup> im…...
java的synchronized 原理及功能
简介: Java中的synchronized关键字是一种同步机制,用于控制多个线程对共享资源的访问。 原理: 在Java锁有一个内部锁 Intrinsic Lock,也称为监视器锁或管程锁,每个Java对象都有一个关联的监视器锁,隐式锁…...
【Leetcode 每日一题】3356. 零数组变换 II
问题背景 给你一个长度为 n n n 的整数数组 n u m s nums nums 和一个二维数组 q u e r i e s queries queries,其中 q u e r i e s [ i ] [ l i , r i , v a l i ] queries[i] [l_i, r_i, val_i] queries[i][li,ri,vali]。 每个 q u e r i e s [ i ]…...
LangChain入门和应用#1
LangChain 是一个全方位的、基于大语言模型这种预测能力的应用开发工具,它的灵活性和模块化特性使得处理语言模型变得极其简便。不论你在何时何地,都能利用它流畅地调用语言模型,并基于语言模型的“预测”或者说“推理”能力开发新的应用 La…...
[每日一题] 3356. 零数组变换ii
文章目录 1. 题目链接2. 题目描述3. 题目示例4. 解题思路5. 题解代码6. 复杂度分析 1. 题目链接 3356. 零数组变换 II - 力扣(LeetCode) 2. 题目描述 给你一个长度为 n 的整数数组 nums 和一个二维数组 queries,其中 queries[i] [li, ri, va…...