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

Linux systemd 服务全面详解

在这里插入图片描述

一、systemd 是什么?

systemd 是 Linux 系统的现代初始化系统(init)和服务管理器,替代传统的 SysVinit 和 Upstart。它不仅是系统启动的“总指挥”,还统一管理服务、日志、设备挂载、定时任务等。


核心作用

  1. 服务管理:启动、停止、重启服务,设置开机自启。
  2. 并行启动:根据依赖关系并行启动服务,大幅缩短系统启动时间。
  3. 日志管理:通过 journalctl 集中管理所有服务的日志。
  4. 资源控制:限制服务的 CPU、内存等资源使用。
  5. 按需启动:通过套接字或总线激活服务,节省资源。

二、核心概念与配置

1. 单元(Unit)

systemd 通过单元文件(Unit File)管理系统资源,文件扩展名表示类型:

单元类型作用常见示例
.service管理后台服务(如 Nginx、MySQL)nginx.service
.socket管理套接字(按需启动服务)docker.socket
.timer定时任务(替代 crondaily-backup.timer
.target逻辑分组(类似运行级别)multi-user.target
.mount文件系统挂载home.mount

2. 服务文件(.service)详解

服务文件通常位于 /usr/lib/systemd/system/(系统默认)或 /etc/systemd/system/(自定义覆盖)。
一个典型服务文件分为三个部分:

示例:Python Web 应用服务
[Unit]
Description=My Web Application
After=network.target  # 确保网络就绪后启动[Service]
Type=simple
User=www-data
Group=www-data
WorkingDirectory=/opt/myapp  # 指定工作目录(避免路径错误)
ExecStart=/usr/bin/python3 /opt/myapp/app.py
Restart=on-failure
Environment="APP_ENV=production"  # 设置环境变量(如配置生产模式)[Install]
WantedBy=multi-user.target  # 关联到多用户命令行模式
关键参数解析
  • [Unit] 部分

    • Description:服务描述(用于日志和状态显示)。
    • After/Before:定义启动顺序(如 After=network.target)。
    • Requires:强依赖服务(依赖失败则当前服务失败)。
    • Wants:弱依赖服务(依赖失败不影响当前服务)。
  • [Service] 部分

    • Type:服务类型(见下文详解)。
    • ExecStart:启动命令(必须用绝对路径)。
    • Restart:重启策略(noon-failurealways)。
    • User/Group:以指定用户/组运行(提升安全性)。
    • Environment:设置环境变量(如数据库密码)。
  • [Install] 部分

    • WantedBy:定义服务所属的目标(target),控制开机启动场景。

3. 服务类型(Type)详解

类型行为适用场景
simple主进程启动即视为服务已就绪(默认类型)。简单脚本或后台程序。
forking主进程 fork 子进程后退出,systemd 通过 PIDFile 跟踪子进程。传统守护进程(如 Nginx)。
oneshot执行一次性任务后退出,需配合 RemainAfterExit=yes 维持状态。初始化脚本或备份任务。
notify服务通过 sd_notify 发送就绪信号后,systemd 才认为服务启动完成。需要明确初始化完成的服务。
为什么需要 forking 类型?
  • 历史兼容性:传统守护进程(如 Nginx)会自行 fork 子进程并退出父进程。
  • 脱离终端:子进程脱离终端控制,避免被 Ctrl+C 或终端关闭信号终止。
  • 资源消耗:父进程短暂存在后退出,实际资源由子进程占用,与 simple 类型无显著差异。

4. 目标(Target)

target 是 systemd 的逻辑分组单位,定义系统的不同运行状态(类似传统运行级别):

Target 名称作用
multi-user.target多用户命令行模式(无图形界面)。
graphical.target图形界面模式。
rescue.target单用户救援模式(用于系统修复)。
timers.target定时任务关联的目标。

关联服务
[Install] 部分设置 WantedBy=multi-user.target,表示系统进入该目标时服务自动启动。


三、常用命令速查

1. 服务管理

# 启动/停止/重启服务
systemctl start <服务名>
systemctl stop <服务名>
systemctl restart <服务名># 查看服务状态
systemctl status <服务名># 启用/禁用开机自启
systemctl enable <服务名>
systemctl disable <服务名># 重新加载修改后的服务文件
systemctl daemon-reload

2. 日志管理

# 查看服务日志
journalctl -u <服务名># 实时追踪日志
journalctl -fu <服务名># 按时间筛选日志
journalctl --since "09:00" --until "10:00"

3. 系统状态

# 列出所有运行中的服务
systemctl list-units --type=service# 分析系统启动时间
systemd-analyze

四、典型案例与场景

1. 部署 Python Web 应用

需求:将脚本 /opt/myapp/app.py 设为后台服务,开机自启。
步骤

  1. 创建服务文件 /etc/systemd/system/myapp.service
    [Unit]
    Description=My Python Web App
    After=network.target[Service]
    User=www-data
    Group=www-data
    WorkingDirectory=/opt/myapp  # 确保脚本能读取同目录下的文件
    ExecStart=/usr/bin/python3 /opt/myapp/app.py
    Restart=always
    Environment="APP_ENV=production"  # 传递环境变量[Install]
    WantedBy=multi-user.target
    
  2. 启用并启动服务:
    systemctl daemon-reload
    systemctl enable myapp
    systemctl start myapp
    

2. 定时备份文件(替代 cron)

需求:每天凌晨 3 点执行备份脚本 /opt/scripts/backup.sh
步骤

  1. 创建服务文件 /etc/systemd/system/backup.service
    [Unit]
    Description=Daily File Backup[Service]
    Type=oneshot
    ExecStart=/bin/bash /opt/scripts/backup.sh
    
  2. 创建定时器文件 /etc/systemd/system/backup.timer
    [Unit]
    Description=Run backup daily at 3 AM[Timer]
    OnCalendar=*-*-* 03:00:00  # 每日 3 点执行
    Persistent=true            # 如果错过时间,开机后补执行[Install]
    WantedBy=timers.target
    
  3. 启用定时器:
    systemctl enable backup.timer
    systemctl start backup.timer
    

关联逻辑

  • .timer.service 文件必须同名(或通过 Unit= 显式指定)。
  • 定时器触发时,systemd 执行对应的服务。

3. 限制服务资源

需求:限制服务最多使用 512MB 内存和 50% CPU。
服务文件配置

[Service]
...
MemoryMax=512M  # 最大内存限制
CPUQuota=50%    # CPU 时间配额

五、常见问题排查

1. 服务启动失败

  • 查看日志journalctl -u <服务名>
  • 检查路径和权限:确保 ExecStart 的命令路径正确,且 User 有权限访问相关文件。
  • 手动测试命令:直接运行 ExecStart 的命令验证是否报错。

2. 服务无法开机自启

  • 确认服务已启用:运行 systemctl is-enabled <服务名>
  • 检查 [Install] 配置:确保 WantedBy 指向正确的 target(如 multi-user.target)。

3. 环境变量未生效

  • 显式设置变量:在服务文件中使用 Environment="KEY=value"
  • 避免 Shell 变量:systemd 不读取用户 Shell 的环境变量。

六、高级功能

1. 按需启动(Socket Activation)

通过 .socket 单元监听端口,当有请求时启动服务:

# /etc/systemd/system/myservice.socket
[Socket]
ListenStream=8080  # 监听 TCP 端口 8080[Install]
WantedBy=sockets.target

2. 服务依赖与顺序

[Unit]
Requires=postgresql.service  # 强依赖
After=postgresql.service     # 确保 PostgreSQL 先启动

七、总结

systemd 的核心优势

  1. 统一管理:服务、日志、定时任务等通过单一工具管理。
  2. 高效并行:依赖驱动的启动机制大幅优化启动速度。
  3. 灵活配置:通过单元文件实现细粒度控制。

学习建议

  • 从简单服务文件入手,逐步实践定时任务和资源限制。
  • 善用 journalctlsystemctl status 排查问题。
  • 参考官方文档:systemd.io

附:速查表

# 查看服务依赖关系
systemctl list-dependencies <服务名># 杀死服务进程
systemctl kill <服务名># 查看所有定时器
systemctl list-timers

相关文章:

Linux systemd 服务全面详解

一、systemd 是什么&#xff1f; systemd 是 Linux 系统的现代初始化系统&#xff08;init&#xff09;和服务管理器&#xff0c;替代传统的 SysVinit 和 Upstart。它不仅是系统启动的“总指挥”&#xff0c;还统一管理服务、日志、设备挂载、定时任务等。 核心作用 服务管理…...

Linux系统调用编程

目录 1.Linux下进程和线程进程线程区别查看进程pid终止进程pid 2.Linux虚拟内存管理与stm32内存映射设计目标与架构差异地址空间管理机制对比内存使用与性能特性 3.Linux系统调用函数fork()wait()exec() 4.树莓派环境下练习创建账号1创建用户账号2.配置用户权限3.查看用户 登录…...

AWS Langfuse AI用Bedrock模型使用完全教程

AWS Langfuse AI使用完全教程 推荐超级课程: 本地离线DeepSeek AI方案部署实战教程【完全版】Docker快速入门到精通Kubernetes入门到大师通关课AWS云服务快速入门实战目录 AWS Langfuse AI使用完全教程Langfuse是什么?准备工作创建Langfuse账户1.创建LLM应用程序启用Bedrock…...

【Docker项目实战】使用Docker部署MediaCMS内容管理系统

【Docker项目实战】使用Docker部署MediaCMS内容管理系统 前言一、MediaCMS介绍1.1 MediaCMS 简介1.2 主要特点1.3 使用场景二、本次实践规划2.1 本地环境规划2.2 本次实践介绍三、本地环境检查3.1 检查Docker服务状态3.2 检查Docker版本3.3 检查docker compose 版本四、下载Med…...

OpenHarmony子系统开发 - DFX(一)

OpenHarmony子系统开发 - DFX&#xff08;一&#xff09; 一、DFX概述 简介 在OpenHarmony中&#xff0c;DFX(Design for X)是为了提升质量属性的软件设计&#xff0c;目前包含的内容主要有&#xff1a;DFR&#xff08;Design for Reliability&#xff0c;可靠性&#xff09…...

深入解析:使用Python爬取Bilibili视频

深入解析&#xff1a;使用Python爬取Bilibili视频 引言 Bilibili&#xff0c;作为中国领先的年轻人文化社区&#xff0c;拥有海量的视频资源。对于想要下载Bilibili视频的用户来说&#xff0c;手动下载不仅费时费力&#xff0c;而且效率低下。本文将介绍如何使用Python编写一…...

详解数据结构线性表 c++实现

线性表 线性表是一种非常基础且重要的数据结构&#xff0c;它是具有相同数据类型的 n&#xff08;n≥0&#xff09;个数据元素的有限序列。这里的 “有限” 意味着元素的数量是确定的&#xff0c;“序列” 则表示元素之间存在着顺序关系。 顺序表 顺序表是线性表的一种顺序存…...

Prolog语言的网络协议栈

Prolog语言的网络协议栈 引言 网络协议栈是现代计算机网络的重要组成部分&#xff0c;它负责在网络中的各个节点之间以标准化的方式传输数据。在这一体系中&#xff0c;不同层次的协议相互协作&#xff0c;以实现从物理传输到应用层数据处理的功能。Prolog是一种以符号逻辑为…...

音视频基础(音频常用概念)

文章目录 **1. 比特率&#xff08;Bitrate&#xff09;****概念****影响****音频比特率****视频比特率** **2. 码率&#xff08;Bitrate&#xff09;****3. 帧&#xff08;Frame&#xff09;****概念****视频帧****音频帧** **4. 帧长&#xff08;Frame Length&#xff09;****…...

洛谷题单3-P5725 【深基4.习8】求三角形-python-流程图重构

题目描述 模仿例题&#xff0c;打印出不同方向的正方形&#xff0c;然后打印三角形矩阵。中间有个空行。 输入格式 输入矩阵的规模&#xff0c;不超过 9 9 9。 输出格式 输出矩形和正方形 输入输出样例 输入 4输出 01020304 05060708 09101112 13141516010203040506 …...

【数据结构】邻接表 vs 邻接矩阵:5大核心优势解析与稀疏图存储优化指南

邻接表法 导读一、邻接矩阵的不足邻接表二、存储结构三、算法评价3.1 时间复杂度3.2 空间复杂度 四、邻接表特点4.1 特点解读特点3特点4特点5 结语 导读 大家好&#xff0c;很高兴又和大家见面啦&#xff01;&#xff01;&#xff01; 图作为一种复杂的数据结构&#xff0c;其…...

编程能力的跃迁时刻:技术革命与认知重构的交响曲

在软件开发领域,从业者常将"一万小时定律"视为能力增长的圭臬,但真正的能力跃迁往往发生在特定技术范式转换的临界点。当开发者首次理解递归算法的本质,当面向对象编程替代过程式思维,当自动化工具链重塑开发流程,这些认知地震时刻往往成为技术生涯的分水岭。 …...

PostIn V1.0.8版本发布,IDEA 插件支持一键扫描上报,让接口定义不再繁琐

PostIn是一款国产开源免费的接口管理工具&#xff0c;包含项目管理、接口调试、接口文档设计、接口数据MOCK等模块&#xff0c;支持常见的HTTP协议、websocket协议等&#xff0c;支持免登陆本地接口调试&#xff0c;同时可以对项目进行灵活的成员权限、消息通知管理等。本周Pos…...

删除Linux服务器上多余的系统启动项,并重装Ubuntu系统

问题描述 2024年6月&#xff0c;Centos团队终止维护Centos7系统&#xff0c;Ubuntu成了我的替换方案。正好有一台闲置的服务器&#xff0c;于是我临危受命给这台服务器重装系统。 经过我一番研究&#xff0c;Ubuntu系统初步安装成功了&#xff0c;但是存在一大堆问题&#xff…...

在亚马逊云科技上使用n8n快速构建个人AI NEWS助理

前言&#xff1a; N8n 是一个强大的工作流自动化工具&#xff0c;它允许您连接不同的应用程序、服务和系统&#xff0c;以创建自动化工作流程&#xff0c;并且采用了开源MIT协议&#xff0c;可以放心使用&#xff0c;他的官方网站也提供了很多的工作流&#xff0c;大家有兴趣的…...

JSON介绍及使用

1.JSON 1.JSON简介 JSON&#xff08;JavaScript Object Notation&#xff09;是一种轻量级的数据序列化协议&#xff0c;基于文本&#xff0c;完全独立于语言。 JSON由键值对组成&#xff0c;支持以下几种数据类型&#xff1a; 字符串&#xff1a;用双引号括起来的文本。 数…...

AOP 的织入过程是怎样的?

AOP&#xff08;面向切面编程&#xff09;的织入&#xff08;Weaving&#xff09;是将切面&#xff08;Aspect&#xff09;应用到目标对象&#xff08;Target Object&#xff09;并创建代理对象&#xff08;Proxy Object&#xff09;的过程。这个过程可以发生在不同的阶段&…...

链路聚合配置命令

技术信息 加入捆绑组&#xff0c;加大链路间带宽等 配置命令 华三 静态聚合 将接口加入聚合口后再进行配置 //创建静态链路聚合口1&#xff0c;不启用lacp[SWB]interface Bridge-Aggregation 1 [SWB-Bridge-Aggregation1]port link-type trunk [SWB-Bridge-Aggregation…...

为什么有的深度学习训练,有训练集、验证集、测试集3个划分,有的只是划分训练集和测试集?

在机器学习和深度学习中&#xff0c;数据集的划分方式取决于任务需求、数据量以及模型开发流程的严谨性。 1. 三者划分&#xff1a;训练集、验证集、测试集 目的 训练集&#xff08;Training Set&#xff09;&#xff1a;用于模型参数的直接训练。验证集&#xff08;Validati…...

【读书笔记·VLSI电路设计方法解密】问题61:扫描插入的目的是什么

如问题60所述,要构建可测试电路,必须确保电路中每个节点都具有可控性和可观测性。但对于包含时序元件(如触发器、锁存器等存储元件)的电路,若不采取特殊设计则难以实现这两项特性。这是因为时序元件关联节点的逻辑状态不仅取决于当前输入,还受其先前存储状态影响——它们…...

通信数据记录仪-产品概念ID

总结: 1、支持高速CAN、支持容错CAN、支持单线CAN(理解是支持不同的协议,CANFD、CAN2.0和LIN?) 2、 通过上位机设计时间...

【数据分享】2002-2023中国湖泊水位变化数据集(免费获取)

湖泊水位变化是研究水资源动态、生态系统演变和气候变化影响的重要指标。湖泊水位的升降不仅反映了降水、蒸发和入流水量的变化&#xff0c;还与人类活动、气候波动及地质过程密切相关。因此&#xff0c;高精度、长时间序列的湖泊水位数据对于水资源管理、洪水预测以及生态环境…...

SQL注入重新学习

前话 sql注入一般就是构造闭合&#xff0c;在查询语句中构造恶意语句&#xff0c;因为过滤并不严格导致信息泄露&#xff0c; 后台登陆语句&#xff1a;SELECT * FROM admin WHERE Username‘user’ and Password‘pass’ 万能密码&#xff1a;‘or ’1‘ ’1‘ # ; sql常用…...

修改Jupyter Notebook主目录文件夹

1、找到Jupyter Notebook配置文档 在anaconda prompt终端输入以下命令&#xff0c;可以显示配置文档所在位置&#xff1a; jupyter notebook --generate-config2、修改Jupyter Notebook主目录文件夹 用记事本打开文件夹中的jupyter_notebook_config.py文件。 在记事本中使用…...

玩转JSONObject:使用方法详解与Map对比

一、初识JSONObject 什么是JSONObject&#xff1f; JSONObject是Java中处理JSON数据的核心工具类&#xff0c;主流JSON库均提供类似实现&#xff1a; org.json&#xff08;原生包&#xff09;com.alibaba.fastjson.JSONObjectnet.sf.json.JSONObject 基础创建姿势 <JAV…...

LC416 vector<bool> 和 bool[] 的异同

LeetCode 416 1. 报错代码 // 01背包&#xff0c;从n个数字里面选&#xff0c;能否凑出和为s的方案 class Solution { public:bool canPartition(vector<int>& nums) {int m accumulate(nums.begin(), nums.end(), 0);if(m & 1) return false;m >> 1;…...

(51单片机)矩阵按键密码锁表白(C语言代码编撰)(矩阵按键教程)(LCD1602浅教程)

目录 源代码 main.c MatrixKey.c MatrixKey.h LCD1602.c LCD1602.h Delay.c Delay.h 运行效果图&#xff1a; 第一步&#xff1a; 第二步&#xff1a; 第三步&#xff1a; 第四步&#xff1a; 代码解析与教程&#xff1a; 延时函数Delay LCD1602 MatrixKey模块 源代…...

C++20新增内容

C20 是 C 语言的一次重大更新&#xff0c;它引入了许多新特性&#xff0c;使代码更现代化、简洁且高效。以下是 C20 的主要新增内容&#xff1a; 1. 概念&#xff08;Concepts&#xff09; 概念用于约束模板参数&#xff0c;使模板编程更加直观和安全。 #include <concept…...

思维链、思维树、思维图与思维森林在医疗AI编程中的应用蓝图

在医疗AI编程中,思维链(Chain of Thought, CoT)、思维树(Tree of Thoughts, ToT)、思维图(可能指知识图谱或逻辑图)以及思维森林(Forest-of-Thought, FoT)等技术框架通过模拟人类认知和推理过程,显著提升了AI在复杂医疗场景中的决策能力和可解释性: 1. 思维链(CoT)…...

[GN] Python3基本数据类型 -- 与C的差异

文章目录 前言Python3的基本数据类型6个标准的数据类型NumbersStringListtupleSetsDictionaries Python运算符逻辑 运算符成员运算符身份运算符 Python3 数字Python3 序列序列切片序列相加序列相乘序列相关内置函数 Python3 列表访问列表的值更新列表删除列表元素拼接列表嵌套列…...

TCP基础篇(一)

文章目录 1.TCP 是如何保证可靠性的?2. 滑动窗口机制3 超时重传4.TCP 报文格式5. 什么是 TCP 协议5.1 如何唯一确定一个 TCP 连接 6.TCP 三次握手过程6.1 可以两次握手吗? 7.TCP 的四次挥手7.1 为什么客户端要等待2MSL&#xff1f; 8.linux 中查看 TCP 的连接9.TCP 为什么要有…...

Spring-IOC部分

Spring-IOC部分 1.SpringBean的配置详解&#xff08;Bean标签&#xff09; &#xff08;1&#xff09;scope 默认情况下&#xff0c;单纯的Spring环境Bean的作用范围有两个&#xff1a;Singleton和Prototype singleton&#xff1a;单例&#xff0c;默认值&#xff0c;Spring…...

使用GitHub Actions构建CI/CD流程

GitHub Actions 简介 GitHub Actions 是一种自动化软件开发工作流的方式&#xff0c;与 GitHub.com 深度集成。开发人员可以通过配置 GitHub Actions 来实现基于事件触发的自动工作流&#xff0c;比如&#xff0c;当有任意用户向 master 分支提交代码时&#xff0c;自动执行一…...

Ubuntu服务器 无法正常启动redis

当我们在阿里云服务器上启动redis服务 运行下述命令时 service redis-server start 会出现如下报错 Failed to start redis-server.service: Unit redis-server.service not found. 如图&#xff1a; 解决方案&#xff1a; 通过以下命令重新安装Redis&#xff1a; sudo apt…...

MySQL 索引原理

一、索引基础概念 1. 索引是什么&#xff1f; 定义&#xff1a;索引是帮助MySQL高效获取数据的有序数据结构&#xff0c;类似书籍的目录。核心作用&#xff1a;减少磁盘I/O次数&#xff0c;提升查询速度&#xff08;以空间换时间&#xff09;。 2. 索引的优缺点 优点缺点加…...

前端快速入门学习3——CSS介绍与选择器

1.概述 CSS全名是cascading style sheets,中文名层叠样式表。 用于定义网页样式和布局的样式表语言。 通过 CSS&#xff0c;你可以指定页面中各个元素的颜色、字体、大小、间距、边框、背景等样式&#xff0c;从而实现更精确的页面设计。 HTML与CSS的关系&#xff1a;HTML相当…...

WPF 免费UI 控件HandyControl

示例效果和代码 直接可以用 Button 按钮 | HandyOrg 1.安装 , 输入 HandyControl 2.<!--配置HandyControl--> <!--配置HandyControl--> <ResourceDictionary Source"pack://application:,,,/HandyControl;component/Themes/SkinDefault.xaml"/> …...

【代码艺廊】pyside6桌面应用范例:homemade-toolset

在研发测试日常工作中&#xff0c;通常会遇到很多琐碎的事情&#xff0c;占用我们工作的时间和精力&#xff0c;从而导致我们不能把大部分的注意力放在主要的工作上面。为了解决这个问题&#xff0c;除了加人之外&#xff0c;我们通常会开发一些日常用的效率工具&#xff0c;比…...

Hive 常见面试 300 问

一、Hive 基础概念 什么是 Hive?它的主要用途是什么? Hive 与传统关系型数据库有什么区别? 简述 Hive 的架构,各个组件的作用是什么? 解释 Hive 中的元数据,它存储在哪里? Hive 支持哪些数据格式?各自的特点是什么? 什么是 Hive 表的分区?为什么要使用分区? 什么是 …...

OpenMinus 源码深度解析:从 React 模式到多智能体架构实现

OpenMinus 源码深度解析&#xff1a;从 React 模式到多智能体架构实现 本文基于 2024 年 3 月 9 日最新代码版本解析&#xff0c;完整代码已上传至 GitHub&#xff08;附项目地址https://github.com/mannaandpoem/OpenManus&#xff09; 一、项目背景与核心价值 1.1 项目定位 …...

【Linux网络与网络编程】04.TCP Socket编程

一、TCP Socket编程接口 // 创建套接字 int socket(int domain, int type, int protocol); // 参数&#xff1a; // domain&#xff1a;域&#xff08;协议家族&#xff09;&#xff0c;这里使用 AF_INET 表示进行网络编程 // type&#xff1a;网络通信传输的类型&#xff0…...

初识数据结构——算法效率的“两面性”:时间与空间复杂度全解析

&#x1f4ca; 算法效率的“两面性”&#xff1a;时间与空间复杂度全解析 1️⃣ 如何衡量算法好坏&#xff1f; 举个栗子&#x1f330;&#xff1a;斐波那契数列的递归实现 public static long Fib(int N) {if(N < 3) return 1;return Fib(N-1) Fib(N-2); }问题&#xf…...

CCF GESP C++编程 八级认证真题 2025年3月

C 八级 2025 年 03 月 题号 1 2 3 4 5 6 7 8 答案 B C B A D D D 一、单选题 第 1 题 国家“以旧换新”政策仍在继续&#xff0c;小杨家决定在家里旧的冰箱、电视、洗衣机、微波炉中选两种换新。其中&#xff0c;冰箱有4种型号可选&#xff0c;电视有6种型号可选&#xff0c…...

React: hook相当于函数吗?

一、Hook 是一个函数&#xff0c;但不仅仅是函数 函数的本质 Hook 确实是一个 JavaScript 函数&#xff0c;例如 useState、useEffect 或自定义 Hook 都是函数。它们可以接受参数&#xff08;如初始状态值或依赖项数组&#xff09;&#xff0c;并返回结果&#xff08;如状态值和…...

Git 从入门到精通(开源协作特别版)

&#x1f9e0; Git 从入门到精通&#xff08;开源协作特别版&#xff09; ✅ 基础命令 &#x1f9f0; 高级用法 &#x1f6e0;️ 开源实战技巧 &#x1f30d; GitHub 社区协作 适合&#xff1a;从0开始 → 熟练开发者 → 参与/维护开源项目 &#x1f530; 第1章&#xff1a;…...

《探索边缘计算:重塑未来智能物联网的关键技术》

最近研学过程中发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击链接跳转到网站人工智能及编程语言学习教程。读者们可以通过里面的文章详细了解一下人工智能及其编程等教程和学习方法。下面开始对正文内容的…...

什么是缓存穿透、缓存雪崩、缓存击穿?

什么是缓存&#xff1f; 缓存就是数据交换的缓冲区&#xff0c;是存贮数据的临时地方&#xff0c;一般读写性能较高。 怎么防止缓存穿透&#xff1f; 缓存穿透是指客户端请求的数据在缓存中和数据库中都不存在&#xff0c;这样缓存永远不会生效&#xff0c;这些请求都会打到…...

洛谷题单3-P4956 [COCI 2017 2018 #6] Davor-python-流程图重构

题目描述 在征服南极之后&#xff0c;Davor 开始了一项新的挑战。下一步是在西伯利亚、格林兰、挪威的北极圈远征。 他将在 2018 年 12 月 31 日开始出发&#xff0c;在这之前需要一共筹集 n 元钱。 他打算在每个星期一筹集 x 元&#xff0c;星期二筹集 xk 元&#xff0c;……...

解决浏览器报错Mixed Content

前端代码写死了访问后端的请求为&#xff1a;http://service.xxx.com:8080/api/&#xff0c;前端代码中混合内容&#xff08;Mixed Content&#xff09; 导致的。浏览器使用https访问站点时&#xff0c;这个请求会被拦截&#xff0c;并且浏览器打印 login.vue:151 Mixed Conten…...

HCIP【BGP协议(详解)】

目录 1 BGP协议产生背景 2 BGP协议特性 2.1 自治系统间路由传播 2.2 路由矢量协议 2.3 防环机制 2.4 基于TCP传输 2.5 路由更新机制 2.6 丰富的路由属性 2.7 支持CIDR和路由聚合 2.8 路由过滤和策略控制 2.9 动态对等体功能 3 BGP基本术语 4 BGP规划问题 4.1 路…...