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

【Linux笔记】——进程信号的产生

🔥个人主页🔥:孤寂大仙V
🌈收录专栏🌈:Linux
🌹往期回顾🌹:【Linux笔记】进程间通信——system v 共享内存
🔖流水不争,争的是滔滔不


  • 一、进程信号简介
  • 二、引入信号
  • 三、信号的产生
    • 3.1 自定义捕捉动作
    • 3.2 前台进程与后台进程
    • 3.2 理解给进程发信号
      • 信号产生,硬件异常
      • 信号产生,软件产生

一、进程信号简介

Linux信号:程序世界的“紧急通知”机制

在Linux系统中,信号(Signal) 是一种简单而强大的通信机制,如同程序之间的“紧急通知”。当进程遇到外部事件(如用户按下Ctrl+C)、程序错误(如内存越界)或定时任务触发时,系统会通过发送信号快速打断进程当前操作,要求其立即响应。

信号的设计初衷是处理异步事件——这些事件可能在程序运行的任何时刻发生,无法预测。例如:

  • 用户中断:SIGINT(Ctrl+C)通知进程终止。

  • 致命错误:SIGSEGV(段错误)意味着程序访问了非法内存。

  • 进程控制:SIGTERM请求进程优雅退出,SIGKILL则强制终止。

  • 后台任务:SIGCHLD通知父进程子任务状态变化。

开发者可以为信号绑定自定义处理逻辑,比如保存数据后退出,或直接忽略某些信号。但信号处理需谨慎——不当操作可能导致程序崩溃或资源泄漏。

为什么理解信号至关重要?

它是实现可靠服务(如优雅退出、防止僵尸进程)的基石。帮助开发者调试程序崩溃、理解系统底层行为。在多进程协作、系统管理中广泛应用。信号机制如同程序的“神经系统”,虽轻量却贯穿系统运行的每个角落。

二、引入信号

生活中的信号:闹钟、红绿灯、上课铃声、狼烟、电话闹铃等等。
信号就是中断正在做的事情,是一种事件的异步通知机制,信号是一种给进程发送的,用来进行事件异步通知的机制。注意信号的产生相对于进程的进程是异步的。信号是发给进程的。

基本结论

  • 信号处理,进程在信号没有产生的时候,早就知道信号该如何处理了。
  • 信号的处理,不是立即处理而是等一会再处理,合适的时候进行信号的处理。
  • 人能认识信号,是提前被"教育"过的,进程也是如此,进程是人设计的进程已经内置了对于信号的识别和处理方式。
  • 信号源非常多给进程的产生信号的信号源也非常多。

三、信号的产生

当我们杀掉一个进程用ctrl+c进程操作,其实当我们按下ctrl+c的时候就是给目标进程发送信号的,这个信号的处理动作就是让进程终止。其实还有好多信号,通过kill -l进行查看
每个信号都有一个编号和一个宏定义名称,这些宏定义可以在signal.h中找到,例如其中有定义 #define
SIGINT 2。编号34以上的是实时信号,本章只讨论编号34以下的信号,不讨论实时信号。这些信号各自在什么条件下产生,默认的处理动作是什么,在signal(7)中都有详细说明: man 7 signal

kill -l命令可以察看系统定义的信号列表
在这里插入图片描述

3.1 自定义捕捉动作

进程收到信号,处理信号的动作有三种

  1. 默认处理动作
  2. 自定义信号处理动作
  3. 忽略处理

我们用ctrl+c杀掉进程,采用的是信号的默认处理动作,但是系统给我们提供了函数可以自定义信号处理动作

  #include <signal.h>typedef void (*sighandler_t)(int);sighandler_t signal(int signum, sighandler_t handler);

在这里插入图片描述
自定义把二号信号SIGINT自定义修改为打印获得一个信号,运用后发现在用ctrl+c之前终止进程的组合键现在变为了打印是几号信号。

#include<iostream>
#include<signal.h>
using namespace std;void handler(int sig)
{cout<<"获得一个信号"<<sig<<endl;
}
int main()
{signal(SIGINT,handler);int cnt=0;while(true){cout<<"haha"<<cnt++<<endl;sleep(1);}return 0;
}

在这里插入图片描述
执行自定义信息处理的动作,叫为自定义捕捉动作。

3.2 前台进程与后台进程

前台进程与后台进程是操作系统中管理任务执行的两种模式,尤其在命令行环境(如Linux/Unix)中广泛应用。它们的核心区别在于 是否占用终端控制权 以及 与用户的交互方式。

键盘产生的信号,只能发送给前台进程。而键盘产生的信号给后台进程,后台进程不做处理。所以前台进程能从键盘中获取标准输入,后台进程无法从标准输入中获取内容,但是这二者都能向标准输入中打印。键盘只有一个,输入数据一定是给一个确定的进程的,前台进程必须只有一个,后台进程可以有多个。前台进程的本质就是从键盘获取数据。
在这里插入图片描述
刚才写的那个自定义捕捉的程序,我们输入其他的Linux的指令发现没反应,这是因为当这个可执行程序已经变成了前台进程,前台进程只能有一个,bash进程自动被放到后台进程了。


ctrl+z 前台进程切换到后台

在这里插入图片描述
jobs 查看所有的后台进程
在这里插入图片描述
fg+任务号将特定的进程提到前台
在这里插入图片描述
bg + 任务号 让后台进程也运行

这时发现用ctrl+c没反应,把这个后台进程先提到前台在试就可以了。
在这里插入图片描述

对上面的的命令进行一下总结

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

3.2 理解给进程发信号

信号产生之后,不是立即处理的,所以进程必须把信号记录下来等到合适的时候进行处理。记录在一个叫struct_task_struct 的结构体中,(位图结构)比特位的位置表示信号标号,比特位的内容表示是否收到。发送信号本质就是向目标进程写信号,修改位图。上面提到的struct_task_struct 是操作系统内的数据结构对象,修改位图的本质就是修改操作系统内核的数据,所以这就表明不管信号怎么产生发送信号在底层必须让操作系统发送,操作系统发送信号就是进行进行系统调用

举一个例子,发送kill信号

#include <iostream>
#include <string>
#include <sys/types.h>
#include <signal.h>int main(int argc, char *argv[])
{if (argc != 3){std::cout << "./mykill signumber pid" << std::endl;return 1;}int signum = std::stoi(argv[1]);pid_t target = std::stoi(argv[2]);int n = kill(target, signum);if (n == 0){std::cout << "send " << signum << "to" << target << " success.";}return 0;
}
#include <iostream>
#include <unistd.h>
#include <signal.h>
#include <sys/types.h>void handlerSig(int sig)
{std::cout << "获得了一个信号: " << sig << std::endl;exit(13);
}int main()
{signal(SIGINT, handlerSig);int cnt = 0;while (true){std::cout << "hello world, " << cnt++ << " ,pid: " << getpid() << std::endl;sleep(1);}
}

手动实现和测试“信号发送与接收”机制,也就是在验证 kill 命令和 signal 信号处理机制。

信号产生,硬件异常

硬件异常被硬件以某种方式被硬件检测到并通知内核,然后内核向当前进程发送适当的信号。例如当前
进程执行了除以0的指令, CPU的运算单元会产生异常, 内核将这个异常解释为SIGFPE信号发送给进
程。再比如当前进程访问了非法内存地址, MMU会产⽣异常,内核将这个异常解释为SIGSEGV信号发送
给进程。

信号全是操作系统发送的,程序出错了,操作系统识别到程序犯错了。在一方面操作系统通过硬件方式知道。

  1. CPU执行指令时随时在“检测”CPU每条指令在执行时,都会自动进行检查,包括:除法时检查除数是不是0。访存时检查地址是否合法(分页机制、段机制)。特权指令检查当前运行级别(用户态不能干内核的事。这些检查是CPU电路里直接完成的,不需要程序参与,速度是纳秒级。

  2. 一旦发现问题 → 异常信号(Exception)比如除0时:
    CPU内部“除法单元”发现除数为0。立刻触发一个“除法错误异常”(通常是#DE异常)。再比如访问了不存在的虚拟地址:CPU查页表发现PTE无效。立刻触发一个“缺页异常”(#PF Page Fault)。
    ⚡ 本质上:这些“异常”就是一种特殊的“中断”,区别只是来源不同(内部检测 vs 外部中断引脚)。

  3. CPU 触发异常后会干嘛?(硬件动作)
    挂起当前指令流。把当前上下文信息(寄存器、EIP、标志寄存器)压栈。跳转到IDT(中断描述符表)里登记的对应异常处理函数。例如,#DE异常会跳到“除0异常”的处理入口。这个处理函数是操作系统写好的内核代码(用户写不了)。➡️ 硬件到这里的活儿就干完了,后续接力棒交给内核。

信号产生,软件产生

在操作系统中,信号的软件条件指的是由软件内部状态或特定软件操作触发的信号产生机制。这些条
件包括但不限于定时器超时(如alarm函数设定的时间到达)、软件异常(如向已关闭的管道写数据
产⽣的SIGPIPE信号)等。当这些软件条件满足时,操作系统会向相关进程发送相应的信号,以通知
进程进行相应的处理。简而言之,软件条件是因操作系统内部或外部软件操作而触发的信号产⽣。

调用 alarm 函数可以设定⼀个闹钟,也就是告诉内核在 seconds 秒之后给当前进程发SIGALRM 信号,该信号的默认处理动作是终止当前进程。
这个函数的返回值是0或者是以前设定的闹钟时间还余下的秒数。打个比方,某人要小睡⼀觉,设定闹钟为30分钟之后响,20分钟后被⼈吵醒了,还想多睡一会儿,于是重新设定闹钟为15分钟之后响,“以前设定的闹钟时间还余下的时间”就是10分钟。如果seconds值为0,表示取消以前设定的闹钟,函数的返回值仍然是以前设定的闹钟时间还余下的秒数。

在这里插入图片描述
系统闹钟,其实本质是OS必须自身具有定时功能,并能让用户设置这种定时功能,才可能实现闹钟这
样的技术。
现代Linux是提供了定时功能的,定时器也要被管理:先描述,在组织。内核中的定时器数据结构是:

struct timer_list {struct list_head entry;unsigned long expires;void (*function)(unsigned long);unsigned long data;struct tvec_t_base_s *base;
}

操作系统管理定时器,采勇的是时间轮的做法,但是我们为了简单理解,可以把它在组织成为"堆结构"。

相关文章:

【Linux笔记】——进程信号的产生

&#x1f525;个人主页&#x1f525;&#xff1a;孤寂大仙V &#x1f308;收录专栏&#x1f308;&#xff1a;Linux &#x1f339;往期回顾&#x1f339;&#xff1a;【Linux笔记】进程间通信——system v 共享内存 &#x1f516;流水不争&#xff0c;争的是滔滔不 一、进程信号…...

Java后端文件类型检测(防伪造)

在 Spring Boot 项目中&#xff0c;为了防止用户伪造 Content-Type&#xff08;例如将 .txt 文件改为 image/jpeg 上传&#xff09;&#xff0c;可以通过检查文件的 Magic Number&#xff08;文件头签名&#xff09;来验证文件的真实类型。以下是 详细实现步骤 和 完整代码示例…...

知名人工智能AI培训公开课内训课程培训师培训老师专家咨询顾问唐兴通AI在金融零售制造业医药服务业创新实践应用

AI赋能未来工作&#xff1a;引爆效率与价值创造的实战营 AI驱动的工作革命&#xff1a;从效率提升到价值共创 培训时长&#xff1a; 本课程不仅是AI工具的操作指南&#xff0c;更是面向未来的工作方式升级罗盘。旨在帮助学员系统掌握AI&#xff08;特别是生成式AI/大语言模型…...

VUE3基础样式调整学习经验

首先创建一个vue项目最好要把不属于自己的样式都删除掉&#xff0c;以面出现css难以调整的情况&#xff1a; 1.assets目录下的main.css、base.css等样式全部删除 2.app.vue下的样式也全部删除 3.使用element plus一定要加入样式包&#xff1a; import element-plus/dist/in…...

AI与IoT携手,精准农业未来已来

AIoT:农业领域的变革先锋 在科技飞速发展的当下,人工智能(AI)与物联网(IoT)的融合 ——AIoT,正逐渐成为推动各行业变革的关键力量,农业领域也不例外。AIoT 技术通过将 AI 的智能分析能力与 IoT 的设备互联能力相结合,为农业生产带来了前所未有的精准度和智能化水平。 …...

物联网驱动的共享充电站系统:智能充电的实现原理与技术解析!

随着新能源汽车的快速普及&#xff0c;共享充电站系统作为其核心基础设施&#xff0c;正通过物联网技术的深度赋能&#xff0c;实现从“传统充电”到“智能充电”的跨越式升级。本文将从系统架构、核心技术、优化策略及实际案例等角度&#xff0c;解析物联网如何驱动共享充电站…...

MCP 入门实战:用 C# 开启 AI 新篇章

MCP 入门实战&#xff1a;用 C# 开启 AI 新篇章 一、什么是 MCP&#xff1f; MCP&#xff0c;全称为 Model Context Protocol&#xff08;模型上下文协议&#xff09;&#xff0c;是一个开放的协议&#xff0c;它为应用程序向大型语言模型&#xff08;LLM&#xff09;提供上下…...

ES常识7:ES8.X集群允许4个 master 节点吗

在 Elasticsearch&#xff08;ES&#xff09;中&#xff0c;4 个 Master 节点的集群可以运行&#xff0c;但存在稳定性风险&#xff0c;且不符合官方推荐的最佳实践。以下从选举机制、故障容错、资源消耗三个维度详细分析&#xff1a; 一、4 个 Master 节点的可行性&#xff1…...

WebRTC:去中心化网络P2P框架解析

在互联网的世界里&#xff0c;数据的传输就像一场永不停歇的 “信息快递”。当我们使用 WebRTC 实现视频通话时&#xff0c;背后支撑的网络框架至关重要。今天&#xff0c;我们将深入探索 WebRTC 开发中视频通话的前置基础 ——P2P&#xff08;点对点&#xff09;框架&#xff…...

Linux 上安装RabbitMQ

&#x1f407; 安装 Erlang/OTP 27.3.4&#xff08;最新稳定版&#xff09; 1. 下载 Erlang 源码 cd /usr/local/src wget https://erlang.org/download/otp_src_27.3.4.tar.gz2. 解压源码 tar -zxvf otp_src_27.3.4.tar.gz cd otp_src_27.3.43. 安装依赖 sudo apt update …...

Service Mesh实战之Istio

Service Mesh&#xff08;服务网格&#xff09;是一种专为微服务架构设计的网络代理层&#xff0c;用于处理服务间的通信、管理和监控。Istio 是一个流行的开源 Service Mesh 实现&#xff0c;通过提供流量管理、观测性和安全性等功能&#xff0c;帮助开发者应对分布式系统的复…...

BGP练习

一、要求拓扑图 二、要求 完成上图内容&#xff0c;要求五台路由器的环回地址均可以相互访问 三、需求分析 1. 网络连通性目标 - 需求明确要求五台路由器&#xff08;AR1 - AR5 &#xff09;的环回地址能够相互访问。环回地址是路由器上用于测试、管理及作为BGP等协议中Ro…...

【Redis】分布式锁的实现

目录 一、本地锁存在的问题 二、redis实现分布式锁原理 三、使用示例 四、锁误删问题 解决思路 获取锁和释放锁代码优化 五、锁释放的原子性问题 解决思路&#xff08;Lua脚本&#xff09; 使用流程 总结 大家好&#xff0c;我是千语。上期给大家讲了使用悲观锁来解决…...

【vue】全局组件及组件模块抽离

一、全局组件 只要是实例化过的区域都可以使用 Vue.component("组件名",{ template: 内容} ) 二、组件模块抽离 抽离就是把template的内容写到body里面&#xff0c;然后建立id写到变量下的template里&#xff0c;id变量写到component里 body{ template&#xff1a; …...

手写 vue 源码 === watch 实现

目录 1. watch 的基本使用 2. watch 的整体架构 3. doWatch 函数的实现 3.1 处理不同类型的监听源 3.2 清理副作用的机制 3.3 创建响应式效果 3.4 初始化执行 3.5 返回停止函数 4. watch 如何基于 ReactiveEffect 实现 4.1 依赖收集过程详解 4.2 更新触发过程详解 …...

STM32核心机制解析:重映射、时间片与系统定时器实战——从理论到呼吸灯开发

知识点1【重映射的概念】 1、引入 默认&#xff1a; **定义&#xff1a;**系统或硬件在未经用户修改时的预设配置或行为 STM32的引脚功能、外设配置、中断向量表等默认由芯片设计或库函数预设。 部分重映射 **定义&#xff1a;**仅修改部分资源或地址的映射关系&#xff…...

【Linux网络编程】HTTPS协议原理

目录 一&#xff0c;HTTPS是什么&#xff1f; 1&#xff0c;什么是加密&#xff1f; 2&#xff0c;为什么需要加密&#xff1f; 3&#xff0c;常见的加密方式 对称加密 非对称加密 4&#xff0c;数据摘要&&数据指纹 二&#xff0c;HTTPS协议加密方案 方案一&a…...

【idea】快捷键ctrl+shift+F(Find in files)不起作用

问题描述 在idea中使用快捷键CtrlShiftF&#xff0c;进行内容的搜索&#xff0c;但是弹不出对话框、或有时候能弹出有时候又弹不出。 原因分析 1.怀疑是缓存问题&#xff1f;--清空缓存重启也没什么作用 2.怀疑是idea的问题&#xff1f;--有时行、有时不行&#xff0c;而且…...

「光域」系列激光测距传感器:以光为尺,重构空间认知边界

在150米深的地下矿井中&#xff0c;无人矿卡需要精准识别前方3厘米的落石&#xff1b;在千米高空的风电塔筒检测现场&#xff0c;工程师手持设备要穿透50米雾霭锁定0.1毫米的形变&#xff1b;在智能仓储的立体库房里&#xff0c;穿梭车需在0.3秒内完成货架间距的毫米级校准………...

http和https的区别

HTTP&#xff08;超文本传输协议&#xff09;和HTTPS&#xff08;超文本传输安全协议&#xff09;是互联网上用于传输数据的两种协议&#xff0c;它们的主要区别如下&#xff1a; 1. 安全性 HTTP&#xff1a;明文传输&#xff0c;数据在传输过程中不加密&#xff0c;容易被窃…...

Dapp开发-如何开发一个dapp

DApp开发全流程指南&#xff1a;从需求到落地的技术实践与生态构建 ——2025年去中心化应用开发方法论与未来趋势解析 一、需求定位与架构设计&#xff1a;构建DApp的技术地基 需求精准定位 功能定义&#xff1a;明确DApp的核心场景&#xff08;如DeFi借贷、NFT交易、DAO治理&…...

Python邮件处理(使用imaplib和email库实现自动化邮件处理)

在日常工作中&#xff0c;我们经常需要自动化处理电子邮件&#xff0c;比如自动下载附件、解析邮件内容、处理特定格式的数据等。本文将通过一个实际案例&#xff0c;详细介绍如何使用Python的imaplib和email库来实现邮件的自动化处理。 目录 环境准备与库介绍IMAP邮件服务器连…...

时空注意力机制深度解析:理论、技术与应用全景

时空注意力机制作为深度学习领域的关键技术&#xff0c;通过捕捉数据在时间和空间维度上的依赖关系&#xff0c;显著提升了时序数据处理和时空建模能力。本文从理论起源、数学建模、网络架构、工程实现到行业应用&#xff0c;系统拆解时空注意力机制的核心原理&#xff0c;涵盖…...

鸿蒙 UIAbility组件与UI的数据同步和窗口关闭

使用 EventHub 进行数据通信 根据 Stage 模型概念图 UIAbility 先于 ArkUI Page 创建 所以&#xff0c;事件要先 .on 订阅 再 emit 发布 假如现在有页面 Page1 和他的 UIAbility // src/main/ets/page1ability/Page1Ability.ets onCreate(want: Want, launchParam: Ability…...

UI-TARS: 基于视觉语言模型的多模式代理

GitHub&#xff1a;https://github.com/bytedance/UI-TARS 更多AI开源软件&#xff1a;发现分享好用的AI工具、AI开源软件、AI模型、AI变现 - 小众AI 基于视觉语言模型&#xff08;Vision-Language Model&#xff09;的 GUI 代理应用&#xff0c;允许用户通过自然语言控制电脑操…...

C++多态讲解

1. 多态的概念 通俗来说&#xff0c;就是多种形态。多态分为编译时多态(静态多态)和运行时多态(动态多态)。编译时多态就是函数重载和函数模板&#xff0c;他们传不同的类型的参数就可以调用不同的函数&#xff0c;通过参数的不同达到多种形态&#xff0c;之所以叫编译时多态&…...

QuecPython+蜂窝模组基础开发

开发准备 硬件&#xff1a; 一块 QuecPython_EC2X_EVB 开发板 (以该开发板为例&#xff0c;更多开发板介绍参见下文开发板列表)USB 数据线 (USB-A TO USB-C)PC (Windows10) 蜂窝模组开发板列表: EC2X_EVBEC600X_EVBEC800X_EVBEC600X/EC800X_CORE_EVBBG95_EVBEC200X_EVBEG91…...

-MAC桢-

MAC桢和IP的关系&#xff1a; 主机A想跨网络和B通信需要IP地址进行路由选择&#xff0c;但一个局域网&#xff0c;比如路由器进行路由选择之前&#xff0c;首先要将数据包发送给路由器B&#xff0c;也就是局域网通信也就是同一个网段的主机进行通信&#xff0c;所以必须通过mac…...

反转链表 - 简单

************* C topic: 206. 反转链表 - 力扣&#xff08;LeetCode&#xff09; ************* Give the topic an inspection. It seems really easy. At very first, I think that I will use reverse cammand to kill this topic. But a few seconds later I found that…...

负载均衡 ELB 在 zkmall开源商城高流量场景下的算法优化

在电商大促、直播带货等高频交易场景下&#xff0c;流量突发增长对系统稳定性提出严峻挑战。ZKmll 开源商城通过对负载均衡 ELB&#xff08;Elastic Load Balancer&#xff09;算法的深度优化&#xff0c;结合业务场景特性设计动态加权轮询 地域感知 热点分流的混合策略&…...

YOLOv5推理代码解析

代码如下 import cv2 import numpy as np import onnxruntime as ort import time import random# 画一个检测框 def plot_one_box(x, img, colorNone, labelNone, line_thicknessNone):"""description: 在图像上绘制一个矩形框。param:x: 框的坐标 [x1, y1, x…...

创建三个网络,分别使用RIP、OSPF、静态,并每个网络10个电脑。使用DHCP分配IP

DHCP 自动分配IP&#xff0c;集中管理&#xff0c;提高效率 在路由器中设置 Router>en Router#conf t Router(config)#ip dhcp pool ip30 //创建DHCP地址池 Router(dhcp-config)#network 192.168.30.0 255.255.255.0 // 配置网络地址和子网掩码 Router(dhcp-config)#defa…...

[网络层]网络层设备路由器

路由表 路由器能进行路由转发&#xff0c;所依靠的核心数据结构就是路由表&#xff0c;那么路由表是怎么来的&#xff0c; 静态路由和动态路由&#xff1a; 说的是表项&#xff0c;这个表项是静态的还是动态的&#xff0c;就跟ARP缓存表的表项静态动态是一回事&#xff0c; …...

Maven 项目中将本地依赖库打包到最终的 JAR 中

文章目录 前言详细步骤 前言 在现代后端开发中&#xff0c;构建高效且可扩展的 Web 应用程序通常依赖于多种第三方库和内部依赖。这些依赖可以来自公共仓库&#xff0c;也可能是公司内部自研的库或尚未发布到公共仓库的 JAR 包。本文将详细介绍如何在 Maven 项目中处理本地依赖…...

大模型的Lora如何训练?

大模型LoRA(Low-Rank Adaptation)训练是一种参数高效的微调方法,通过冻结预训练模型权重并引入低秩矩阵实现轻量化调整。以下是涵盖原理、数据准备、工具、参数设置及优化的全流程指南: 一、LoRA的核心原理 低秩矩阵分解 在原始权重矩阵$ W 旁添加两个低秩矩阵 旁添加两个…...

CSS3 伪类和使用场景

CSS3 伪类&#xff08;Pseudo-classes&#xff09;大全 CSS3 引入了许多新的伪类&#xff0c;以下是完整的 CSS3 伪类分类列表&#xff08;包括 CSS2 的伪类&#xff09;&#xff1a; 一、结构性伪类&#xff08;Structural Pseudo-classes&#xff09; 这些伪类根据元素在文…...

GitDiagram - GitHub 仓库可视化工具

GitDiagram - GitHub 仓库可视化工具 项目链接&#xff1a;https://github.com/ahmedkhaleel2004/gitdiagram 将任何 GitHub 仓库转换为交互式架构图&#xff0c;只需替换 URL 中的 hub 为 diagram。 ✨ 核心功能 即时可视化&#xff1a;将代码库结构转换为系统设计/架构图…...

[特殊字符] 本地大模型编程实战(29):用大语言模型LLM查询图数据库NEO4J(2)

本文将基于langgraph框架&#xff0c;用LLM查询NEO4J图数据库&#xff0c;构建可定制、能应对复杂场景的工作流&#xff01; &#x1f31f; 核心亮点 是否用户提问是否电影相关?生成Cypher查询直接回答执行查询生成最终答案 &#x1f9e9; 模块化实现 1️⃣ 定义状态机 from …...

Python中操作Neo4j图数据库

在当今数据驱动的时代&#xff0c;关系型数据库在处理高度关联的数据时常常显得力不从心。图数据库&#xff0c;尤其是Neo4j&#xff0c;以其独特的图结构和高效的关系查询能力&#xff0c;成为了解决这一问题的利器。结合Python的简洁与强大&#xff0c;我们可以更高效地构建和…...

人工智能时代:解锁职业新身份,从“认证师”到“工程师”的进阶之路

在人工智能技术浪潮席卷全球的今天,技术的飞速迭代正在重塑职业版图。从算法优化到伦理决策,从系统测试到应用开发,AI技术不再只是程序员的专属领域,而是成为各行各业从业者必须掌握的“生存技能”。当企业争相布局AI赛道,个人如何在这场变革中抢占先机?答案或许藏在两个…...

浙江大学 deepseek 公开课 第三季 第3期 - 陈喜群 教授 (附PPT下载) by 突破信息差

浙江大学DeepSeek系列公开课第三季重磅开启&#xff0c;特邀该校多领域权威学者联袂主讲。课程聚焦AI技术如何重构基础学科研究范式&#xff0c;深度解码以DeepSeek为代表的智能模型在交叉学科中的创新应用。在"XAI"融合浪潮下&#xff0c;学术大咖将剖析传统学科与人…...

企业级商城系统容器化部署技术方案

容器化部署已成为企业级商城系统构建高可用、弹性架构的核心技术。结合行业实践与技术趋势&#xff0c;以下从架构设计、工具链选型、关键挑战及解决方案等维度&#xff0c;提供一套完整的实施技术方案&#xff1a; 一、架构设计与技术选型 微服务架构拆分 服务拆分原则&#x…...

Java设计模式之适配器模式:从入门到精通

适配器模式(Adapter Pattern)是Java中最常用的结构型设计模式之一,它像一座桥梁连接两个不兼容的接口,使得原本由于接口不兼容而不能一起工作的类可以协同工作。本文将全面深入地解析适配器模式,从基础概念到高级应用,包含丰富的代码示例、详细注释、使用场景分析以及多维对…...

Spark,RDD中的转换算子

RDD中的转换算子 map算子 对数字1-10进行乘除&#xff0c;*2 filter算子 对数字1-10进行过滤&#xff0c;过滤出偶数 filatMap算子 对单词进行拆分 reduceByKey算子 对具有相同键的所有值进行聚合操作 统计词频词频统计简洁写法 ———————————————— 版权声明…...

牛客周赛 Round 92(再现京津冀蓝桥杯???)

1. 小红的签到题 现在小红希望你写出一个长度为 nnn 的、使用了下划线命名法命名的变量。为了显出特征&#xff0c;请保证该变量至少由两个单词组成。 输入描述: 输入一个正整数 n(3≦n≦100)&#xff0c;代表需要构造的变量长度。 输出描述: 输出一个长度为 n 的字符串&#x…...

React 18 的新功能:构建高性能应用的革新之道

React 18 的发布标志着前端开发进入了一个全新的并发时代。作为 React 历史上最重要的版本之一&#xff0c;它不仅带来了底层架构的深度重构&#xff0c;更通过一系列创新功能重新定义了现代 Web 应用的开发范式。这些特性在保持向后兼容的同时&#xff0c;为开发者提供了前所未…...

Python-Flask-Dive

Python-Flask-Dive 适用Python编写一个Flask的快速上手模板&#xff0c;后续如果需要使用Python快速进行we端的验证可以直接下载使用 1-项目创建 本项目仓库代码地址&#xff1a;https://gitee.com/enzoism/python_flask_dive 1-Python环境 ## 1-空工程初始化环境 mkdir my_pr…...

热门CPS联盟小程序聚合平台与CPA推广系统开发搭建:助力流量变现与用户增长

一、行业趋势&#xff1a;CPS与CPA模式成流量变现核心 在移动互联网流量红利见顶的背景下&#xff0c;CPS&#xff08;按销售付费&#xff09;和CPA&#xff08;按行为付费&#xff09;模式因其精准的投放效果和可控的成本&#xff0c;成为企业拉新与用户增长的核心工具。 CPS…...

16.three官方示例+编辑器+AI快速学习webgl_buffergeometry_lines_indexed

本实例主要讲解内容 这个Three.js示例展示了如何使用**索引几何体(Indexed Geometry)**创建复杂的分形线条图案。通过递归算法生成科赫雪花(Koch Snowflake)曲线&#xff0c;并利用索引缓冲区优化顶点数据存储&#xff0c;实现高效的线条渲染。 核心技术包括&#xff1a; 索…...

PowerBI基础

一、前言 在当今数据驱动的时代&#xff0c;如何高效地整理、分析并呈现数据&#xff0c;已成为企业和个人提升决策质量的关键能力。Power BI 作为微软推出的强大商业智能工具&#xff0c;正帮助全球用户将海量数据转化为直观、动态的可视化洞察。数据的世界充满可能性&#xf…...