Linux---计划任务

本章主要介绍如何创建计划任务

  • 使用 at 创建计划任务
  • 使用 crontab 创建计划任务

  有时需要在某个指定的时间执行一个操作,此时就要使用计划任务了。计划任务有两种: 一个是at计划任务,另一个是 crontab计划任务。

下面我们分别来看这两种计划任务的使用方法。


at 

  at计划任务是一次性的,到了指定的时间点就开始执行指定的命令,执行完成之后,不会重复执行这个命令。 

首先查看系统中是否存在at计划任务,命令是atq或at -1(字母1),命令如下。 

[root@rhel03 ~]# atq
[root@rhel03 ~]# 
[root@rhel03 ~]# at -l
[root@rhel03 ~]# 

  这两个命令都没有任何输出,说明当前系统中并不存在任何计划任务。下面开始创建at计划任务,at的用法如下。 

at 时间点  <按 【Enter】键>

> 输入要执行的命令

Ctrl+D 提交

例如,要在2025年12月12日执行hostname命令,命令如下。 

[root@rhel03 ~]# at 2025-12-12
warning: commands will be executed using /bin/sh
at> hostname  
at> <EOT>
job 1 at Fri Dec 12 11:48:00 2025
[root@rhel03 ~]#

  这里只是指定了日期,并没有指定在2025年12月12日的几点执行。那么,创建这个计划任务时是几点几分,例如,这里是在11点48分创建的at计划任务,那么到了2025年12月12 日的11点48分就要自动执行hostname命令了。 

如果要指定某个时间点,格式如下。

at 时间 日期  <按 【Enter】键>

> 输入要执行的命令

Ctrl+D 提交

例如,要在2025年12月12日上午10点执行 hostname命令,命令如下。 

[root@rhel03 ~]# at 10:00 2025-12-12
warning: commands will be executed using /bin/sh
at> hostname
at> <EOT>
job 2 at Fri Dec 12 10:00:00 2025
[root@rhel03 ~]#

注意:

  • 这里是24小时制的,所以10:00指的是上午10点,如果想指定下午10点,则要写成22:00。
  • 写时间最多只能精确到分,不能精确到秒。 

  这里上午用am表示,下午用pm表示。例如,要在2025年12月12日下午10点执行 hostname命令,命令如下。 

[root@rhel03 ~]# at 10pm 2025-12-12
warning: commands will be executed using /bin/sh
at> hostname
at> <EOT>
job 3 at Fri Dec 12 22:00:00 2025
[root@rhel03 ~]# 

  at也支持某天之后的某个时间点运行一个命令。例如,要在3天之后的下午4点执行, hostname命令,命令如下。 

[root@rhel03 ~]# at 4pm +3days
warning: commands will be executed using /bin/sh
at> hostname
at> <EOT>
job 4 at Mon Dec 11 16:00:00 2023
[root@rhel03 ~]# 

这里“+”两边有没有空格都可以,days可以换成weeks,表示3周之后的下午4点。 

如果想在第二天的下午4点执行hostname命令,命令如下。 

[root@rhel03 ~]# at 4pm +1days
warning: commands will be executed using /bin/sh
at> hostname
at> <EOT>
job 5 at Sat Dec  9 16:00:00 2023
[root@rhel03 ~]# 

或者用关键字tomorrow,如果使用关键字tomorrow,则不需要加“+”,命令如下。 

[root@rhel03 ~]# at 4pm tomorrow
warning: commands will be executed using /bin/sh
at> hostname
at> <EOT>
job 6 at Sat Dec  9 16:00:00 2023
[root@rhel03 ~]#

上面的两条命令都是表示第二天的下午4点执行hostname命令。 

  这样的关键字还包括today,表示“今天”。例如,要在今天下午10点执行hostname命令,命令如下。 

[root@rhel03 ~]# at 10pm today
warning: commands will be executed using /bin/sh
at> hostname
at> <EOT>
job 7 at Fri Dec  8 22:00:00 2023
[root@rhel03 ~]#

如果是今天执行一个命令,关键字today是可以不写的,不写日期默认就是“今天”。 

[root@rhel03 ~]# at 10pm
warning: commands will be executed using /bin/sh
at> hostname
at> <EOT>
job 8 at Fri Dec  8 22:00:00 2023
[root@rhel03 ~]#

  如果要表示几分钟或几小时之后,可以用关键字now。例如,要在2小时之后执行 hostname命令,命令如下。 

[root@rhel03 ~]# at now+2hours
warning: commands will be executed using /bin/sh
at> hostname
at> <EOT>
job 9 at Fri Dec  8 13:59:00 2023
[root@rhel03 ~]# 

如果想1分钟之后删除/opt下面所有的内容,命令如下。 

[root@rhel03 ~]# at now+1minutes
warning: commands will be executed using /bin/sh
at> rm -rf /opt/*
at> <EOT>
job 10 at Fri Dec  8 12:01:00 2023
[root@rhel03 ~]#

现在是点12点01分,等一会到12点02分时再次查看/opt中的内容

[root@rhel03 ~]# date ; ls /opt/
2023年 12月 08日 星期五 12:02:45 CST
[root@rhel03 ~]# 

可以看到,/opt中的内容已经被清空。 

  到现在为止已经做了很多个at计划任务了,现在来查看一下有多少个了。通过atq或at -1 都可以查看。 

[root@rhel03 ~]# atq
1	Fri Dec 12 11:48:00 2025 a root
2	Fri Dec 12 10:00:00 2025 a root
3	Fri Dec 12 22:00:00 2025 a root
4	Mon Dec 11 16:00:00 2023 a root
5	Sat Dec  9 16:00:00 2023 a root
6	Sat Dec  9 16:00:00 2023 a root
7	Fri Dec  8 22:00:00 2023 a root
8	Fri Dec  8 22:00:00 2023 a root
9	Fri Dec  8 13:59:00 2023 a root
[root@rhel03 ~]# 

可以看到,每个at计划任务前都有一个编号。如果要删除某个at计划任务,可以用如下命令。 

  • atrm N 或
  • at ‐d N 

这里N指的是atq查看结果中前面的编号。 

假设现在要删除编号为9的at计划任务,命令如下。 

[root@rhel03 ~]# atrm 9
[root@rhel03 ~]# 

如果删除编号为5到8的这些at计划任务,命令如下。 

[root@rhel03 ~]# atrm {5..8}
[root@rhel03 ~]#

查看现在还有的at计划任务,命令如下。 

[root@rhel03 ~]# atq
1	Fri Dec 12 11:48:00 2025 a root
2	Fri Dec 12 10:00:00 2025 a root
3	Fri Dec 12 22:00:00 2025 a root
4	Mon Dec 11 16:00:00 2023 a root
[root@rhel03 ~]#

可以看到,5到9都已经删除了,现在只剩下1到4了。 

查看at计划任务的具体内容,命令如下。 

  • at ‐c N

  这里N指的是 atq查看结果中前面的编号。例如,要查看第一个at计划任务的内容,可以通过如下命令。 

[root@rhel03 ~]# at -c 1 | tail -3
${SHELL:-/bin/sh} << 'marcinDELIMITER05cc464a'
hostname
marcinDELIMITER05cc464a
[root@rhel03 ~]#

   这里at -c 1的结果太多,所以通过管道传递给tail 命令,获取最后3行的内容。可以看到, 第一个at计划任务中执行的命令是hostname。

  任何用户都是可以创建at计划任务的,下面使用tom用户创建一个at计划任务。在第二个终端中使用tom登录,然后用atq查看是否有at计划任务。 

[tom@rhel03 ~]$ atq
[tom@rhel03 ~]$

  可以看到,tom用户并没有at计划任务。下面使用tom用户随便创建一个at计划任务,例如,要在3小时之后执行hostname命令。 

[tom@rhel03 ~]$ at now+3hours
warning: commands will be executed using /bin/sh
at> hostname
at> <EOT>
job 12 at Fri Dec  8 15:13:00 2023
[tom@rhel03 ~]$ 

  这里是可以正常创建的,如果要禁止哪个用户创建at计划任务,只要把这个用户名写 入/etc/at.deny中即可,一行一个用户。下面练习禁止 tom用户创建at计划任务,使用root 做如下操作。 

[root@rhel03 ~]# echo tom > /etc/at.deny 
[root@rhel03 ~]# cat /etc/at.deny 
tom
[root@rhel03 ~]#

  凡是出现在/etc/at.deny文件中的用户都是不允许创建at计划任务的。切换到tom用户创 建at计划任务。 

[tom@rhel03 ~]$ at now+1hours
You do not have permission to use at.
[tom@rhel03 ~]$

可以看到,tom用户已经没有权限创建了。 

如果想继续允许tom用户创建at计划任务,有以下两种方法。 

(1)把tom用户从/etc/at.deny中删除。 

(2)把 tom用户添加到/etc/at.allow中。 

  /etc/at.allow这个文件默认不存在,需要创建出来,且at.allow 的优先级要高于 at.deny,所以tom 如果同时出现在这两个文件中,那么at.allow生效。 

下面设置tom用户可以创建at计划任务,使用root做如下操作。 

[root@rhel03 ~]# echo tom > /etc/at.allow
[root@rhel03 ~]# cat /etc/at.allow 
tom
[root@rhel03 ~]# cat /etc/at.deny 
tom
[root@rhel03 ~]# 

  现在tom用户在at.allow 和 at.deny中都存在,at.allow生效,所以 tom用户是可以创建 at计划任务的。切换到tom用户创建at计划任务。 

[tom@rhel03 ~]$ at now+1hours
warning: commands will be executed using /bin/sh
at> hostname
at> <EOT>
job 13 at Fri Dec  8 13:18:00 2023
[tom@rhel03 ~]$ 

  这里可以看到at提示符,说明tom用户可以创建at计划任务了,按【Ctrl+C】组合键终止。


crontab 

  at计划任务是一次性的,执行完成就结束,不会重复执行。如果想定期执行某个任务,例如,每周日凌晨2点执行一个命令,这时就要用到crontab了。 

  查看当前用户是否有 crontab计划任务,可以用crontab-1命令。如果要查看其他用户是否有crontab计划任务,可以用“crontab -1-u用户名”命令,不过-u选项只有root才能 用。 

使用root用户查看自己有没有crontab计划任务,命令如下。 

[root@rhel03 ~]# crontab -l
no crontab for root
[root@rhel03 ~]# 

使用root用户查看tom用户是否有crontab计划任务,命令如下。 

[root@rhel03 ~]# crontab -l -u tom
no crontab for tom
[root@rhel03 ~]# 

  创建crontab计划任务的命令是crontab -e,如果为其他用户创建crontab计划任务,则用“crontab -e -u用户名”命令。当使用crontab-e命令时,会打开一个临时文件,用与 vim 一样的语法来编辑此文件即可。先按【i】键进入插入模式,编辑完成之后,按【Esc】 键退回到命令模式,在末行模式中输入“wq”保存退出。在此文件中凡是以“#”开头的,都 是注释行。 

crontab定义计划任务的语法如下。 

  • 分 时 天 月 周 命令 

注意:因为在crontab中使用的并非系统的PATH变量,所以此处语法中要执行的命令最好能加上路径, 例如,要执行ifconfig命令,则写作/sbin/ifconfig;要执行hostname命令,则写作 bin/hostname。命令的路径可以通过which命令来查询。 

几个时间单位的意义如下。 

  1. 分:几点几分的分。
  2. 时:几点,24小时制。
  3. 天:几号。
  4. 月:几月份。
  5. 周:星期几。 

这几个时间单位可以用空格,也可以用【Tab】键来分隔。 

  如果不考虑某个时间单位,例如,不管今天是几号,只要不是周末我们就上班,不考虑“天”的情况下,那么可以用*表示。 

  这里每个时间点都可以写多个值,用英文逗号“,”隔开,例如,在分的位置写“0,1.,5,10", 表示0分、1分、5分、10分。 

也可以用横杠“-”表示“到”的意思,例如,在分的位置写“0-10”,表示0到10分。 

  这里“0-10”的完整写法是“0-10/1”,表示从0分到10分的每一分钟,从0开始每次增加1,然后到10。如果表示“每N分钟”,则写成“0-10/N”,例如,0到10中每2分钟,则 写成“0-10/2”,表示0分、2分、4分、6分、8分、10分。 

练习1:每天上午7点整执行hostname命令,如果写成如下命令。 

# 分 时 天 月 周* 7 * * * /usr/bin/hostname

  这种写法是不对的,第一个位置是分,这里写成了*,表示7点的每一分,包括0分、1 分……但是所谓7点整的意思是7点0分,所以要写成如下命令。 

# 分 时 天 月 周0 7 * * * /usr/bin/hostname

练习2:每周一到周五的上午7点整执行hostname命令,命令如下。

# 分 时 天 月 周0 7 * * 1,2,3,4,5 /usr/bin/hostname

这里可以写成如下命令。

# 分 时 天 月 周0 7 * * 1-5 /usr/bin/hostname

这里1-5表示周一到周五,如果是周六的上午7点整,就不会执行hostname命令。 

练习3:第一季度中每周一到周五的上午7点整执行hostname命令,命令如下。

# 分 时 天 月 周0 7 * 1-3 1-5 /usr/bin/hostname

  一年的第一季度是1到3月份,这里分、时、月、周(没有天)是“和”的关系,这4个时间单位必须都满足才能执行hostname命令。 

所以,5月份的周三上午7点整是不会执行hostname命令的,因为“月”没有满足条件。 

练习4:第一季度中每月上旬的上午7点整执行hostname命令,命令如下。 

# 分 时 天 月 周0 7 1-10 1-3 * /usr/bin/hostname

  一年的第一季度是1到3月份,每月上旬是1到10日,这里分、时、天、月(没有周) 是“和”的关系,这4个时间单位必须都满足才能执行hostname命令。 

  所以,5月8日上午7点整是不会执行hostname命令的,因为“月”没有满足条件。大家 要记住,“天”和“周”是“或”的关系,即 

(1)分、时、月、周同时满足了,即使“天”不满足条件,也会执行指定的命令。 

(2)分、时、天、月同时满足了,即使“周”不满足条件,也会执行指定的命令。 

练习5:在5个时间点都写的情况,命令如下。 

# 分 时 天 月 周0 7 1-10 1-3 1-5 /usr/bin/hostname

  这里天和周的位置都写了,本句的意思并不是说每年1到3月份的上旬,且要满足周一到周五的上午7点整才执行hostname命令。 

  这句的意思是每年的1到3月份这3个月,每月1到10日或周一到周五(二者满足其一),上午 7点整都会执行hostname命令。这条其实综合了上面练习3和练习4中的意思。 

现在最终的crontab计划任务内容如下。

[root@rhel03 ~]# crontab -l
# 分 时 天 月 周0 7 * * * /usr/bin/hostname0 7 * * 1,2,3,4,5 /usr/bin/hostname0 7 * * 1-5 /usr/bin/hostname0 7 * 1-3 1-5 /usr/bin/hostname0 7 1-10 1-3 * /usr/bin/hostname0 7 1-10 1-3 1-5 /usr/bin/hostname
[root@rhel03 ~]#

  如果要编辑 crontab计划任务,通过crontab -e来重新编辑;如果要删除,执行 crontab - r命令即可,命令如下。 

[root@rhel03 ~]# crontab -r
[root@rhel03 ~]# crontab -l
no crontab for root
[root@rhel03 ~]# 

  普通用户也是可以创建crontab计划任务的,如果不想让这个用户创建crontab计划任务, 则把这个用户写入/etc/cron.deny中即可,一行一个用户。这个文件默认为空,命令如下。 

[root@rhel03 ~]# cat /etc/cron.deny 
[root@rhel03 ~]#

如果不希望tom用户创建crontab计划任务,则把tom用户写入这个文件中,命令如下。 

[root@rhel03 ~]# echo tom > /etc/cron.deny 
[root@rhel03 ~]# cat /etc/cron.deny 
tom
[root@rhel03 ~]#

在第二个标签中用tom登录,然后测试创建一个crontab计划任务,命令如下。 

[tom@rhel03 ~]$ crontab -e
You (tom) are not allowed to use this program (crontab)
See crontab(1) for more information
[tom@rhel03 ~]$

可以看到,tom用户现在无法创建crontab计划任务了。 

如果又想让 tom用户可以创建crontab计划任务,有以下两种方法。 

  • 把tom用户从/etc/cron.deny 中删除,这种方法大家自行练习。 
  • 创建/etc/cron.allow,这个文件默认不存在,把tom用户名写到此文件中,命令如下。 
[root@rhel03 ~]# ls /etc/cron.allow
ls: 无法访问'/etc/cron.allow': 没有那个文件或目录
[root@rhel03 ~]#  echo tom > /etc/cron.allow
[root@rhel03 ~]# 

现在tom既出现在/etc/cron.allow中,又出现在/etc/cron.deny中,命令如下。 

[root@rhel03 ~]# cat /etc/cron.allow 
tom
[root@rhel03 ~]# cat /etc/cron.deny 
tom
[root@rhel03 ~]#

此时cron.allow生效。 

在第二个标签中用tom登录,crontab计划任务是能够创建的。 

系统中也自带一些crontab计划任务,在/etc 中存在几个以cron开头的目录,命令如下。 

[root@rhel03 ~]# ls /etc/cron*
/etc/cron.allow  /etc/cron.deny  /etc/crontab/etc/cron.d:
0hourly  raid-check/etc/cron.daily:
logrotate/etc/cron.hourly:
0anacron/etc/cron.monthly:/etc/cron.weekly:
[root@rhel03 ~]# 

  每天都会执行一次/etc/crondaily中的脚本,每小时都会执行一次/etc/cron.hourly中的 脚本,每月都会执行一次/etc/cron.monthly中的脚本,每周都会执行一 次/etc/cron.weekly中的脚本。 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/216306.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

深度学习——第3章 Python程序设计语言(3.7 matplotlib库)

3.7 matplotlib库 目录 1 matplotlib库简介 2 pyplot的plot函数 3 matplotlib基础绘图函数示例 数据可视化有助于深度理解数据。 本节介绍绘制图形的基本方法。 1. matplotlib库简介 matplotlib官网 1.1 matplotlib库概述 matplotlib是Python优秀的数据可视化第三方库&a…

PyQt6 表单布局Form Layout (QFormLayout)

锋哥原创的PyQt6视频教程&#xff1a; 2024版 PyQt6 Python桌面开发 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili2024版 PyQt6 Python桌面开发 视频教程(无废话版) 玩命更新中~共计43条视频&#xff0c;包括&#xff1a;2024版 PyQt6 Python桌面开发 视频教程(无废话版…

easyexcel根据模板下载文件

为什么要使用EasyExcel easyExcel是阿里巴巴下在POI的基础上二次开发的开源api&#xff0c;以使用简单、节省内存著称。 POI由于在操作excel时是先将所有数据都读入内存后&#xff0c;再写入文件&#xff0c;比较消耗内存&#xff0c;特别是大数据量时&#xff0c;容易出现OOM…

(分页模拟)简单模拟操作系统分页管理

简单模拟一下内存分页&#xff0c;分配和回收。这里我就用最最最简化的方式没有技术含量。 每个进程维护一张页表&#xff0c;然后操作系统用位示图模拟内存分配情况(0: 未分配&#xff0c;1已经分配) import java.util.*;public class Main {public static int PAGE_COUNT …

Weblogic 数据库连接池溢出解决方法

引言 在信息运维工作中发现&#xff0c;由于部分应用系统编写的代码不够健壮&#xff0c;对于数据库连接没有及时进行回收处理&#xff0c;造成Weblogic数据库连接池溢出&#xff0c;影响系统的稳定运行。其实Weblogic提供了数据库连接的回收机制&#xff0c;可以将超过配置时…

基于redisson实现发布订阅(多服务间用避坑)

前言 今天要分享的是基于Redisson实现信息发布与订阅&#xff08;以前分享过直接基于redis的实现&#xff09;&#xff0c;如果你是在多服务间基于redisson做信息传递&#xff0c;并且有服务压根就收不到信息&#xff0c;那你一定要看完。 今天其实重点是避坑&#xff0…

【华为数据之道学习笔记】3-9以特征提取为核心的非结构化数据管理

随着业务对大数据分析的需求日益增长&#xff0c;非结构化数据的管理逐 渐成为数据管理的重要组成部分。非结构化数据包括无格式文本、各类格式文档、图像、音频、视频等多种异构的格式文件&#xff0c;较之结构化数据&#xff0c;其更难标准化和理解&#xff0c;因此在存储、检…

第二证券:结构性行情或将延续 泛科技有望继续走强

展望未来&#xff0c;当时已进入重要的方针窗口期&#xff0c;能否有超预期的新方针推出是改变商场的要害。但复盘2023年的行情来看&#xff0c;过早买卖方针预期的成功率并不高&#xff0c;因而主张该方位以防御性资产为主&#xff0c;高股息资产从本年9月份至今现已调整了2个…

MMdetection3.0 训练DETR问题分析

MMdetection3.0 训练DETR问题分析 针对在MMdetection3.0框架下训练DETR模型&#xff0c;验证集AP值一直为0.000的原因作出如下分析并得出结论。 条件&#xff1a; 1、NWPU-VHR-10数据集&#xff1a;共650张&#xff0c;训练&#xff1a;验证611&#xff1a;39&#xff1b; 2、…

K8S学习指南(11)-k8s中配置pod的服务质量(QOS)

文章目录 前言什么是服务质量&#xff08;QoS&#xff09;&#xff1f;如何配置服务质量&#xff1f;CPU资源配置示例 内存资源配置示例 服务质量等级的判断服务质量的最佳实践结论 前言 Kubernetes&#xff08;简称K8s&#xff09;是一种开源的容器编排平台&#xff0c;用于简…

Linux vmstat命令:监控系统资源

vmstat命令&#xff0c;是 Virtual Meomory Statistics&#xff08;虚拟内存统计&#xff09;的缩写&#xff0c;可用来监控 CPU 使用、进程状态、内存使用、虚拟内存使用、硬盘输入/输出状态等信息。此命令的基本格式有如下 2 种&#xff1a; [rootlocalhost ~]# vmstat [-a…

FFmpeg-基础组件-AVFrame

本章主要介绍FFmpeg基础组件AVFrame. 文章目录 1.结构体成员2.成员函数AVFrame Host内存的获取 av_frame_get_bufferAVFrame device内存获取av_hwframe_get_buffer&#xff08;&#xff09; 1.结构体成员 我们把所有的代码先粘贴上来&#xff0c;在后边一个一个解释。 typede…

SpringBoot中实现跨域的几种常用方式

在SpringBoot中实现跨域请求可以通过以下几种方式&#xff1a; 1. 使用CrossOrigin注解&#xff0c;可以直接在Controller层的方法上使用&#xff0c;用来指定允许跨域请求的来源、方法和头信息。例如&#xff1a; CrossOrigin(origins "http://localhost:8080") …

[MySQL]SQL优化之sql语句优化

&#x1f308;键盘敲烂&#xff0c;年薪30万&#x1f308; 目录 一、索引优化 回顾&#xff1a; &#x1f4d5;索引分类&#xff1a; &#x1f4d5;索引失效&#xff1a; &#x1f4d5;设计原则&#xff1a; &#x1f4d5;SQL性能分析 二、SQL优化 语句优化 &#x1f4d…

越南语翻译,人工翻译哪个值得信赖?

近年来&#xff0c;随着中越两国的交流日益频繁&#xff0c;为了促进双方的交流与理解&#xff0c;市场上对越南语翻译的需求也日益增加。那么&#xff0c;如何做好越南语翻译&#xff0c;人工翻译哪家公司值得信赖呢&#xff1f; 据了解&#xff0c;中文翻译越南语是一项颇具挑…

科技与艺术相结合,虚拟人裸眼3D动画亮相城市商圈

随着元宇宙概念的火爆&#xff0c;虚拟制作技术的快速发展&#xff0c;虚拟人可以将虚拟世界与现实世界相结合&#xff0c;为用户带来沉浸式体验。如虚拟人壬子希以裸眼3D动画的形式亮相城市商圈&#xff0c;助力文旅以科技与艺术相结合的形式&#xff0c;展现城市文化与科技成…

从运维角度去了解redis

一、介绍 1.简介 redis是一个开源的、使用C语言编写的、可基于内存也可持久化的Key-Value数据库&#xff0c;采用单线程基于epoll模型实现IO多路复用非阻塞的处理模式。 2.特点 1.丰富的数据结构 -----Redis支持五种数据类型&#xff1a;string&#xff08;字符串&#xf…

【数据结构(九)】顺序存储二叉树(2)

文章目录 1. 相关概念2. 顺序存储二叉树的遍历 1. 相关概念 从数据存储来看&#xff0c;数组存储方式和树的存储方式可以相互转换&#xff0c;即数组可以转换成树&#xff0c;树也可以转换成数组&#xff0c;看右面的示意图。 转换原则:     1.上图的二叉树的结点&#xff…

项目包管理工具_poetry

1 介绍 Poetry 是一个用于 Python 项目的包管理工具&#xff0c;它相对于传统的 pip 和 requirements.txt 的优势在于&#xff1a;使得项目依赖管理更加方便&#xff0c;且结合了更多新工具&#xff0c;还提供命令行进一步配置。 当在同一系统或在同一个 docker 中&#xff0…

Java对List<Map>进行合并去重

对List进行合并去重&#xff0c;首先创建一个新的 List 用于存储合并去重后的结果&#xff0c;遍历原始的 List&#xff0c;将每个 Map 对象中的键值对放入一个 Set 中进行去重&#xff0c;最后将去重后的键值对重新组装成一个新的 Map 对象&#xff0c;并添加到新的 List 中。…