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

Linux:systemd进程管理【1】

整体理解

要快速掌握Linux的systemd并覆盖80%的使用场景,以下是最重要的20%知识点:

  1. Systemd简介与核心功能

    • Systemd是一个系统和服务管理器,作为Linux系统的PID 1进程,负责启动和管理其他系统组件。
    • 它提供并行启动服务的能力,显著加快系统启动时间。
    • Systemd使用socket和D-Bus激活服务,按需启动守护进程,并跟踪使用Linux控制组的进程。
    • 它还维护挂载和自动挂载点,实现基于依赖的服务控制逻辑,并支持SysV和LSB init脚本。
  2. 核心组件

    • systemctl:Systemd的主命令行工具,用于控制服务和系统状态。
    • systemd-journald:负责日志数据的收集和存储。
    • systemd-analyze:用于分析系统启动性能和诊断性能问题。
    • systemd-tmpfiles:创建、删除、清理临时和易失文件。
  3. 服务管理

    • 服务是systemd中代表后台进程或守护进程的单元,通过systemctl命令管理服务的启动、停止、重启和状态检查。
  4. 日志管理

    • Systemd集成了journald日志系统,提供了统一的日志管理解决方案,可以通过journalctl命令进行日志查询。
  5. 依赖管理和并行化处理

    • Systemd自动处理服务间的依赖关系,并并行启动服务,加快系统启动。
  6. 配置文件格式

    • Systemd使用unit文件(如.service)来·管理服务配置,这些文件位于/etc/systemd/system/lib/systemd/system目录下。
  7. 系统启动和目标

    • Systemd支持多个运行级别(targets),如multi-user.targetgraphical.target,用于定义不同的系统启动状态。
  8. 网络管理

    • systemd-networkd用于网络接口的设置和管理,而systemd-resolved提供网络名称解析服务。

掌握这些核心概念和工具,你将能够有效地管理和优化Linux系统上的服务和资源。

unit概念的理解

要快速掌握systemd中的unit并覆盖80%的使用场景,以下是最重要的20%知识点:

  1. Unit的概念

    • Unit是systemd管理系统资源的基本单元,每个系统资源就是一个Unit,并使用一个Unit文件定义。
  2. Unit的类型

    • Service unit(.service):用于定义系统服务。
    • Target unit(.target):用于模拟实现“运行级别”。
    • Device unit(.device):用于定义内核识别的设备。
    • Mount unit(.mount):定义文件系统挂载点。
    • Socket unit(.socket):用于标识进程间通信用到的socket文件。
    • Snapshot unit(.snapshot):管理系统快照。
    • Swap unit(.swap):用于标识swap设备。
    • Automount unit(.automount):定义文件系统自动挂载点。
    • Path unit(.path):用于定义文件系统中的一个文件或目录。
  3. Unit文件结构

    • Unit文件通常包含三个配置区段:Unit和Install段(所有Unit文件通用),Service段(仅服务类型的Unit文件特有)。
    • Unit段包含服务的描述、依赖等信息,如DescriptionAfterRequires等。
    • Service段包含服务的具体管理和操作方法,如ExecStartExecStop等。
    • Install段定义了Unit如何随系统启动,如WantedBy指定启动目标。
  4. Unit文件的位置

    • Unit文件通常位于/etc/systemd/system/run/systemd/system/usr/lib/systemd/system三个目录中,其中/etc/systemd/system中的文件具有最高优先级。
  5. 管理Unit的命令

    • systemctl start|stop|restart|reload <unit>:启动、停止、重启、重载服务。
    • systemctl enable|disable <unit>:设置服务开机自启或不自启。
    • systemctl status <unit>:查看服务状态。
    • systemctl list-units:列出所有已加载的units。

掌握这些核心概念和操作,你将能够有效地管理和配置Linux系统中的systemd units。

UNIT示例

编写一个systemd service unit文件需要遵循一定的格式和包含必要的指令。下面是一个基本的systemd service unit文件的编写步骤和示例:

1. 确定文件位置和名称

通常,自定义的service unit文件应该放在/etc/systemd/system/目录下。文件名通常以.service结尾,例如myapp.service

2. 编写Unit文件

一个典型的systemd service unit文件包含三个部分:[Unit]、[Service]和[Install]。以下是每个部分的基本指令和说明:

[Unit] 部分
  • Description:服务的描述。
  • After:指定服务启动的顺序,依赖于哪些服务。
  • Requires:指定服务必须依赖的服务,如果这些服务失败,则当前服务也会失败。
  • Wants:指定服务希望启动的服务,但不是必需的。
[Service] 部分
  • Type:服务类型,如simpleforkingoneshot等。
  • ExecStart:启动服务时执行的命令。
  • ExecStop:停止服务时执行的命令(可选)。
  • Restart:服务失败时的重启策略,如on-failure
  • User:运行服务的用户。
  • WorkingDirectory:服务的工作目录。
[Install] 部分
  • WantedBy:指定服务应该被哪些target依赖,通常是multi-user.targetgraphical.target

3. 示例

下面是一个简单的systemd service unit文件示例,它定义了一个名为myapp.service的服务:

[Unit]
Description=My Custom Application Service
After=network.target[Service]
Type=simple
ExecStart=/usr/bin/myapp
Restart=on-failure
User=myappuser
WorkingDirectory=/home/myappuser[Install]
WantedBy=multi-user.target

4. 启用和启动服务

编写完unit文件后,你需要执行以下命令来启用服务,并在系统启动时自动启动:

sudo systemctl daemon-reload
sudo systemctl enable myapp.service
sudo systemctl start myapp.service
  • systemctl daemon-reload:重新加载systemd的配置文件,使新添加的unit文件生效。
  • systemctl enable myapp.service:将服务设置为开机自启。
  • systemctl start myapp.service:启动服务。

5. 检查服务状态

使用以下命令检查服务的状态:

sudo systemctl status myapp.service

通过遵循这些步骤,你可以创建自己的systemd service unit文件,并管理自定义服务。

守护进程

守护进程(Daemon)是Linux系统中的一种后台运行的特殊进程,通常用于提供持续的服务或等待处理某些请求。以下是掌握守护进程最重要的20%知识点,帮助你快速学习并覆盖80%的使用场景:

  1. 守护进程的定义和作用

    • 守护进程是一种在后台运行的进程,不与任何终端相关联,通常用于执行特定的系统任务或服务。
  2. 守护进程的特点

    • 它们通常在系统启动时启动,并一直运行直到系统关闭。
    • 守护进程通常在后台运行,不与用户直接交互。
    • 它们通常被设计为长时间运行,并且能够处理多个请求。
  3. 常见的守护进程

    • sshd:提供SSH服务,允许远程登录。
    • httpdnginx:提供Web服务。
    • crond:定时执行任务。
    • syslogd:日志系统服务。
  4. 守护进程的启动方式

    • 守护进程可以通过init系统(如System V init)、systemdUpstart等系统和服务管理器启动。
    • 它们也可以通过配置文件(如/etc/init.d/下的脚本)启动。
  5. 守护进程的进程管理

    • 守护进程通常在/var/run目录下创建一个PID文件,记录其进程ID。
    • 使用pstophtop命令可以查看守护进程的状态。
  6. 守护进程的日志记录

    • 守护进程通常将日志发送到syslog或直接写入到特定的日志文件中。
  7. 守护进程的配置文件

    • 守护进程的配置文件通常位于/etc目录下,例如/etc/httpd/conf/httpd.conf
  8. 守护进程的安全性

    • 守护进程需要正确配置权限,以防止未授权访问。
    • 使用防火墙和安全策略来保护守护进程。
  9. 守护进程的调试

    • 使用strace跟踪系统调用,帮助调试守护进程。
    • 查看守护进程的日志文件以诊断问题。
  10. 守护进程的监控和维护

    • 使用systemctlservice命令管理守护进程的启动、停止和重启。
    • 定期检查守护进程的状态和日志,确保其正常运行。

掌握这些关键知识点,你将能够理解和管理Linux系统中的守护进程,以及如何配置和维护它们以提供持续的服务。

unit的service中service部分type类型

在systemd的unit文件中,Service部分的Type指令定义了服务的启动类型,这对于服务的行为至关重要。以下是Type指令最重要的20%知识点,帮助你快速掌握并覆盖80%的使用场景:

  1. simple

    • 这是默认的类型,适用于大多数服务。ExecStart指定的命令会直接启动服务,systemd会监控其主进程。
  2. forking

    • 适用于传统的Unix服务,这些服务会fork出一个子进程来运行实际的服务,而父进程会立即退出。systemd需要知道服务已经forked,因此需要在服务启动后发送一个SIGTERM信号来通知systemd
  3. oneshot

    • 用于那些只执行一次的服务,比如某些初始化脚本。systemd会在ExecStart命令执行完成后立即认为服务已经启动。
  4. dbus

    • 用于依赖于D-Bus的服务。systemd会等待D-Bus上指定的名字出现后才认为服务已经启动。
  5. notify

    • 类似于simple,但是服务需要在启动后发送一个通知信号给systemd,告知它已经准备好接收请求。
  6. idle

    • 服务只有在系统中没有其他任务执行时才会运行。
  7. background

    • 类似于simple,但是systemd会立即返回,不会等待服务的启动。
  8. foreground

    • 服务必须保持在前台运行,类似于simple,但是systemd会等待服务的控制终端变为前台进程。

了解这些Type类型及其适用场景,可以帮助你正确配置systemd服务,确保服务按照预期行为启动和运行。每种类型都有其特定的用途和配置要求,正确选择和配置Type对于服务的稳定性和可靠性至关重要。

sigterm信号

要快速掌握SIGTERM信号的80%使用场景,以下是最重要的20%知识点:

  1. SIGTERM的定义

    • SIGTERM(Signal Termination)信号是一个请求进程终止的信号。它是kill命令的默认信号,用于告诉进程优雅地结束。
  2. SIGTERM的作用

    • SIGTERM允许进程有机会执行清理操作,如关闭文件描述符、释放资源和保存状态,然后退出。
  3. SIGTERM与SIGKILL的区别

    • SIGKILL不同,SIGTERM是可以被捕获和处理的,允许进程有机会执行清理操作。SIGKILL是不能被捕获的,用于立即终止进程。
  4. SIGTERM的默认行为

    • 如果进程没有处理SIGTERM信号,其默认行为是终止进程,但不会生成core dump文件。
  5. 处理SIGTERM信号

    • 进程可以通过定义信号处理函数来响应SIGTERM信号,执行特定的清理代码后退出。
  6. 优雅关闭服务

    • 在许多Unix系统中,init在关闭电源前会向所有不重要的进程发送SIGTERM,等待几秒后,再发送SIGKILL以强制终止剩余进程。
  7. 编程中的SIGTERM处理

    • 在C/C++中,可以使用signal()sigaction()函数来设置SIGTERM的信号处理函数,例如:signal(SIGTERM, handler_function);
  8. 守护进程中的SIGTERM

    • 守护进程通常会捕获SIGTERM信号以优雅地关闭服务,执行必要的清理工作。

掌握这些关键点,你将能够理解SIGTERM信号的重要性以及如何在实际应用中处理它,确保进程能够优雅地终止并进行适当的资源清理。

Linux信号

SIGTERM
中文名一般叫“终止信号”,用于终止进程。
SIGTERM最常见的一个应用场景是,执行命令 kill ,该命令会终止进程号为PID的进程。注意,这里kill没有-9之类的额外参数。
进程捕捉到SIGTERM信号后,通常会做些善后工作然后退出,这个过程通常被叫做“优雅退出”。当然,进程也可以不做任何处理,忽略该信号,继续运行下去。信号可能被忽略了,这就是为啥有时候kill 根本不起作用。
除了kill命令,SIGTERM还有很多其他使用场景。比如,docker stop、supervisorctl stop背后的实现机制就是给进程发送SIGTERM信号。

SIGKILL
SIGKILL,名字明显比SIGTERM霸气,字面意思就是“杀死”进程。最常见的应用场景就是大名鼎鼎的kill -9 命令。
SIGKILL最大的特点是,被杀的进程根本无法捕获处理该信号,操作系统会负责直接杀掉进程,进程没有任何反抗的余地。这个大杀器效果立竿见影,但是也有副作用,就是经常来不及做任何善后工作,可能引起数据丢失等问题。比如说,一个进程可能会把接收到的数据先临时放到内存里,攒到若干MB后再一次性写入磁盘,从而避免频繁的磁盘IO操作(比如迅雷就是这么干的),如果进程被突然杀掉,那么它根本来不及把内存里的数据写入磁盘,进而导致这些数据丢失。

SIGINT
SIGINT的字面意思是“打断”,和SIGTERM类似,区别在于,该信号通常被用于前台进程(可以简单理解为可以在shell上长期存在,不会后台运行的程序)。
当我们使用命令行程序时,按下CTRL + C时,进程便会收到SIGINT信号。一般进程会捕获处理这个命令并退出。当然,跟处理SIGTERM信号一样,进程也可以选择忽略信号并继续运行。

systemd中环境变量的问题

在处理systemd服务中的环境变量问题时,以下是最重要的20%知识点,可以帮助你快速理解和解决大部分问题:

  1. 使用Environment指令设置环境变量
    在systemd的服务文件中,可以通过Environment指令直接设置环境变量。例如:

    [Service]
    Environment="PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
    

    这样设置后,指定的变量将在服务启动时被设置。

  2. 使用EnvironmentFile导入环境变量文件
    如果你有多个环境变量需要设置,可以使用EnvironmentFile指令指向一个包含环境变量的文件。该文件中的每行格式为VarName=VarValue。例如:

    [Service]
    EnvironmentFile=/etc/test_env_service/var_file
    

    其中/etc/test_env_service/var_file文件包含:

    FILE_VAR1="Variable 1 from environment file"
    FILE_VAR2="Variable 2 from environment file"
    

    这样,文件中的变量将被导入到服务的环境中。

  3. 通过脚本来设置环境并启动服务
    另一种方法是编写一个包装脚本,在该脚本中设置所需的环境变量,然后启动服务。例如:

    #!/bin/bash
    export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
    exec /path/to/your/service
    

    然后在systemd服务文件中引用这个脚本:

    [Service]
    ExecStart=/path/to/start-service.sh
    

    这样,当systemd启动服务时,实际上是启动了这个脚本。

  4. 理解systemd服务中的环境变量限制
    systemd启动的服务通常不会加载用户的环境变量,尤其是/etc/profile下的环境变量。因此,你需要在服务文件中明确设置所需的环境变量。

  5. 使用systemctl edit进行配置覆盖
    为了避免修改原始的服务文件,可以使用systemctl edit <servicename>命令创建一个override文件,在其中设置环境变量。例如:

    [Service]
    Environment="Foo=bar"
    

    这将在/etc/systemd/system/<servicename>.service.d/目录下创建一个override.conf文件,其中的设置将覆盖原始服务文件中的设置。

掌握这些关键点,你将能够有效地管理和解决systemd服务中的环境变量问题。


总结:
1、systemd是一个用来编写系统后台服务的工具
2、Unit是其服务单元,通常由.service文件,当然也有不同的服务类型
3、unit的文件分为几个段,来描述启动和停止命令,依赖等
4、systemctl status xx,xx是service的名字,来查看service的状态

相关文章:

Linux:systemd进程管理【1】

整体理解 要快速掌握Linux的systemd并覆盖80%的使用场景&#xff0c;以下是最重要的20%知识点&#xff1a; Systemd简介与核心功能&#xff1a; Systemd是一个系统和服务管理器&#xff0c;作为Linux系统的PID 1进程&#xff0c;负责启动和管理其他系统组件。它提供并行启动服…...

【Maven】继承和聚合

5. Maven的继承和聚合 5.1 什么是继承 Maven 的依赖传递机制可以一定程度上简化 POM 的配置&#xff0c;但这仅限于存在依赖关系的项目或模块中。当一个项目的多个模块都依赖于相同 jar 包的相同版本&#xff0c;且这些模块之间不存在依赖关系&#xff0c;这就导致同一个依赖…...

【线上问题记录 | 排查网络连接问题】

问题描述 现在有我们程序是部署在服务器A的&#xff0c;A链接的是B。程序从B的redis进行存储和取数据的。 我们的业务是: 信息展示&#xff0c;也就是如果发现机器有异常了&#xff0c;实时进行监控。突然发现有一天&#xff0c;信息显示延迟了。 然后我们就开始排查究竟什么原…...

springboot车辆管理系统设计与实现(代码+数据库+LW)

摘要 随着信息技术在管理上越来越深入而广泛的应用&#xff0c;管理信息系统的实施在技术上已逐步成熟。本文介绍了车辆管理系统的开发全过程。通过分析车辆管理系统管理的不足&#xff0c;创建了一个计算机管理车辆管理系统的方案。文章介绍了车辆管理系统的系统分析部分&…...

独家|京东调整职级序列体系

原有的M、P、T、S主序列将正式合并为新的专业主序列P。 作者|文昌龙 编辑|杨舟 据「市象」独家获悉&#xff0c;京东已在近日在内部宣布对职级序列体系进行调整&#xff0c;将原有的M、P、T、S主序列正式合并为新的专业主序列P&#xff0c;合并后的职级体系将沿用原有专业序…...

Arrays.copyOfRange(),System.arraycopy() 数组复制,数组扩容

Arrays.copyOfRange() 当需要将数组中的 长度扩容时, 数组复制 使用 需要用到Arrays 类提供的的 参数解析 * param original the array from which a range is to be copied * param from the initial index of the range to be copied, inclusive * param to the final ind…...

Python学习37天

# 魔术方法 # 创建类Monster,默认为object的子类 class Monster: name None age None gender None def __init__(self, name, age, gender): self.name name self.age age self.gender gender # 重写魔术方法__str__输出实例对象信息…...

flask的第一个应用

本文编写一个简单的实例来记录下flask的使用 文章目录 简单实例flask中的路由 简单实例 flask的依赖包都安装好之后&#xff0c;我们就可以写一个最简单的web应用程序了&#xff0c;我们把这个应用程序命名为first.py: from flask import Flaskapp Flask(__name__)app.route(/…...

【论文格式】同步更新中

1横向和纵向坐标的坐标密度不能太大&#xff0c;显示太多看起来不好看&#xff0c;本课题组采用emf&#xff0c;目前使用页面内紧凑&#xff0c;600dpi 2Force(kN):k小写 3涉及到变量的&#xff0c;变量本身斜体...

Java-GUI(登录界面示例)

简述&#xff1a; 步骤&#xff1a; (1)构造界面(将组件对象加入容器对象,注意&#xff1a;应设定对容器对象的布局策略&#xff09; (2)为界面加入事件响应处理(如单击按钮&#xff09; 实现&#xff1a; 两种方式实现&#xff0c;只有用户名为"admin"且密码为…...

看华为,引入IPD的正确路径

目录 前言 引发重视 作者简介 前言 华为将 IPD 的引入过程归结为三步&#xff1a; 先僵化、后优化、再固化。 如果只是单纯模仿&#xff0c;在不清楚底层逻辑的情况下&#xff0c; 就开始走先僵化的流程&#xff0c;去搞削足适履式的引入。 开始执行后&#xff0c;你就…...

计算机毕业设计Spark+大模型知识图谱中药推荐系统 中药数据分析可视化大屏 中药爬虫 机器学习 中药预测系统 中药情感分析 大数据毕业设计

温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 作者简介&#xff1a;Java领…...

pcb线宽与电流

三十年一路高歌猛进的中国经济&#xff0c; 中国经历了几个三十年&#xff1f; 第一个三十年&#xff1a;以计划为导向。 第二个三十年&#xff1a;以经济为导向。 现在&#xff0c;第三个三十年呢&#xff1f; 应该是以可持续发展为导向。 传统企业摇摇欲坠&#xff0c; 新兴企…...

w~视觉~合集26

我自己的原文哦~ https://blog.51cto.com/whaosoft/12663170 #InternVL 本文设计了一个大规模的视觉-语言基础模型&#xff08;InternVL&#xff09;&#xff0c;将视觉基础模型的参数扩展到60亿&#xff0c;并逐步与LLM对齐&#xff0c;利用来自不同来源的网络规模的图像-文…...

Qt支持RKMPP硬解的视频监控系统/性能卓越界面精美/实时性好延迟低/录像存储和回放/云台控制

一、前言 之前做的监控系统&#xff0c;已经实现了在windows上硬解码比如dxva2和d3d11va&#xff0c;后续又增加了linux上的硬解vdpau的支持&#xff0c;这几种方式都是跨系统的硬解实现方案&#xff0c;也是就是如果都是windows系统&#xff0c;无论X86还是ARM都通用&#xf…...

【Qt】图片绘制不清晰的问题

背景 实现一个图片浏览器&#xff0c;可以支持放大/缩小查看图片。主要组件如下&#xff1a; // canvaswidget.h #ifndef CANVASWIDGET_H #define CANVASWIDGET_H#include <QWidget>class CanvasWidget : public QWidget {Q_OBJECT public:explicit CanvasWidget(QImag…...

2008年IMO几何预选题第3题

设有两个圆凸内接四边形 A B Q D ABQD ABQD 和 B P Q C BPQC BPQC, 在线段 P Q PQ PQ 上存在一点 E E E, 使得, ∠ E A P ∠ E D Q \angle EAP\angle EDQ ∠EAP∠EDQ, ∠ E B P ∠ E C Q \angle EBP\angle ECQ ∠EBP∠ECQ. 求证: A A A, B B B, C C C, D D D 四点共…...

NAT拓展

NAT ALG&#xff08;NAT应用级网&#xff09; 为某些应用层协议&#xff0c;因为其报文内容可能携带IP相关信息&#xff0c;而普通NAT转化无法将这些IP转化&#xff0c;从而导致协议无法正常运行 例如FTP&#xff0c;DHCP&#xff0c;RSTP&#xff0c;ICMP&#xff0c;IPSEC…...

Flink四大基石之State

State state 可以理解为-- 历史计算结果 有状态计算和无状态计算 无状态计算: 不需要考虑历史数据, 相同的输入,得到相同的输出!如:map, 将每个单词记为1, 进来一个hello, 得到(hello,1),再进来一个hello,得到的还是(hello,1) 有状态计算: 需要考虑历史数据, 相同的输入,可…...

Spacy小笔记:zh_core_web_trf、zh_core_web_lg、zh_core_web_md 和 zh_core_web_sm区别

Spacy小笔记 最近频繁用到spacy&#xff0c;就小记一下。 2024.11.29 zh_core_web_trf、zh_core_web_lg、zh_core_web_md 和 zh_core_web_sm区别 首先&#xff0c;它们都是预训练的中文模型&#xff1a; zh_core_web_trf:395M 架构: 基于 Transformer 架构&#xff08;bert…...

第六届智能控制、测量与信号处理国际学术会议 (ICMSP 2024)

重要信息 2024年11月29日-12月1日 中国陕西西安石油大学雁塔校区 大会官网&#xff1a;www.icmsp.net 大会简介 第六届智能控制、测量与信号处理国际学术会议&#xff08;ICMSP 2024&#xff09;由西安石油大学、中海油田服务股份有限公司、浙江水利水电学院与中国石油装备…...

docker服务容器化

docker服务容器化 1 引言2 多个容器间网络联通2.1 单独创建关联2.2 创建时关联 3 服务搭建3.1 镜像清单3.2 容器创建 4 联合实战4.2 flink_sql之kafka到starrocks4.2 flink_sql之mysql到starrocks 5 文献借鉴 1 引言 ​ 利用docker可以很效率地搭建服务&#xff0c;本文在win1…...

【QT】控件8

1.QDial 通过调节旋钮位置来控制窗口的不透明度&#xff1a; void Widget::on_dial_valueChanged(int value) {qDebug()<<value;this->setWindowOpacity((double)value/100); }效果演示&#xff1a; 2.Date/Time Edit 计算两个日期的差值 ui界面设计 计算按钮按下…...

漫谈推理谬误——错误因果

相关文章 漫谈推理谬误——错误假设-CSDN博客文章浏览阅读736次&#xff0c;点赞22次&#xff0c;收藏3次。在日常生活中&#xff0c;我们会面临各种逻辑推理&#xff0c;有些看起来一目了然&#xff0c;有些非常的科学严谨&#xff0c;但也有很多似是而非&#xff0c;隐藏了陷…...

【数据结构】队列实现剖析:掌握队列的底层实现

在计算机科学中&#xff0c;**队列&#xff08;Queue&#xff09;**是一种常见的数据结构&#xff0c;它遵循先进先出&#xff08;FIFO&#xff0c;First In First Out&#xff09;的原则。队列的应用非常广泛&#xff0c;例如任务调度、资源管理、进程通信等。本篇文章旨在为计…...

【C++】IO库(二):文件输入输出

8.2 文件输入输出 头文件 fstream 定义了三个类型来之支持文件IO&#xff0c;分别是&#xff1a; ifstream&#xff1a;从一个给定文件读取数据&#xff1b;ofstream&#xff1a;向一个给定文件写入数据&#xff1b;fstream&#xff1a;读写给定文件。 在 C 当中&#xff0c…...

105.【C语言】数据结构之二叉树求总节点和第K层节点的个数

目录 1.求二叉树总的节点的个数 1.容易想到的方法 代码 缺陷 思考:能否在TreeSize函数内定义静态变量解决size的问题呢? 其他写法 运行结果 2.最好的方法:分而治之 代码 运行结果 2.求二叉树第K层节点的个数 错误代码 运行结果 修正 运行结果 其他写法 1.求二…...

力扣637. 二叉树的层平均值

给定一个非空二叉树的根节点 root , 以数组的形式返回每一层节点的平均值。与实际答案相差 10-5 以内的答案可以被接受。 提示&#xff1a; 树中节点数量在 [1, 104] 范围内-231 < Node.val < 231 - 1 代码&#xff1a; /*** Definition for a binary tree node.* stru…...

【前端】Next.js 服务器端渲染(SSR)与客户端渲染(CSR)的最佳实践

关于Next.js 服务器端渲染&#xff08;SSR&#xff09;与客户端渲染&#xff08;CSR&#xff09;的实践内容方面&#xff0c;我们按下面几点进行阐述。 1. 原理 服务器端渲染 (SSR): 在服务器上生成完整的HTML页面&#xff0c;然后发送给客户端。这使得用户在首次访问时能够…...

路径规划之启发式算法之一:A-Star(A*)算法

A*算法是一种启发式搜索算法&#xff0c;常用于解决路径规划问题。 一、A*算法的定义与原理 A*算法是一种用于在图形或网格中查找最短路径的算法。它在搜索过程中综合考虑了每个节点的实际距离&#xff08;g值&#xff09;和预估距离&#xff08;h值&#xff09;&#xff0c;以…...

石家庄市网站建设培训班/微信引流的十个方法

在此博客中&#xff0c;我将讨论 EDI 和 IDOC 之间的区别。 IDOC 代表中间文档。它是一个 SAP 对象&#xff0c;将业务事务的数据 从一个系统传送到另一个系统。从 SAP 到非 SAP 系统的传输是通过 EDI&#xff08;电子数据交换&#xff09;子系统完成的&#xff0c;而对于两个…...

室内设计速成班学费/福州360手机端seo

1. scroll-view在android下需要设置容器overflow-x&#xff1a;scroll才能正常滚动&#xff0c;例如(华为P9不可用)&#xff0c;要注意各种兼容性&#xff1b;2. 页面间跳转的大坑&#xff1a;问题描述&#xff1a;小程序中&#xff0c;当使用navigatorTo达到5层(或更多&#x…...

业务员自己掏钱做网站可以吗/网络营销这个专业怎么样

修改jquery validatebox为英文校验提示为中文提示 by:授客 QQ&#xff1a;1033553122 测试环境 jquery-easyui-1.5.3 问题描述&#xff1a; 如图&#xff0c;想把校验提示由英文改成中文 解决方案 编辑jquery.easyui.min.js 文件&#xff0c;搜索以下内容&#xff0c; missingM…...

访问网站出现目录/网络营销的优势包括

流控规则-关联 名词解释 资源名&#xff1a;唯一名称&#xff0c;默认请求路径针对来源&#xff1a;Sentinel可以针对调用者进行限流&#xff0c;填写微服务名&#xff0c;默认default&#xff08;不区分来源&#xff09;阈值类型/单机阈值&#xff1a; QPS&#xff08;每秒钟…...

福州企业网站建设/北京百度推广优化排名

前期回顾 windows下载安装anacondapycharm   Pycharm Professional 永久activate   Pycharm软件设置   Pycharm终端运行python文件   Pycharm 可视化 Tensorboard   Pycharm设置注释的颜色及其字体   Pycharm快捷键批量注释/取消注释、缩进/取消缩进 Python安装、…...

wordpress 主题位置/杭州网站设计公司

文件的属性可以通过ls -l 文件名来获取。改命令将得到9列的内容。 第一列&#xff1a;包含文件的类型、所有者、所属组、其他人对文件的权限&#xff0c;一共11位。 第一位描述文件的类型&#xff0c;取取值范围为&#xff1a;b、c、d、l、s、-。 > b表示块设备&#xff0c…...