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

基于qiime2的16S数据分析全流程:从导入数据到下游分析一条龙

目录

创建metadata

把数据导入qiime2

去除引物序列

双端合并 (dada2不需要)

质控 (dada2不需要)

使用deblur获得特征序列

使用dada2生成代表序列与特征表

物种鉴定

可视化物种鉴定结果

构建进化树(ITS一般不构建进化树)

生成多样性分析所需数据

α多样性分析

beta多样性分析

绘制稀释曲线

差异物种分析

如何把.qza格式文件导出?比如把特征表导出

演示单端数据导入qiime2


基于qiime2的16s测序数据分析分析
本文演示的是目前最长用的双端测序数据
激活qiime环境
alias activate_qiime='conda activate qiime2-amplicon-2024.2'
我已经把上面这句代码放在了.bashrc里面,因此激活qiime2环境只需要运行activate_qiime即可
按照下图策略分析
演示Illumina公司的16S rRNA基因区的V3到V4区
数据导入,需要首先准备好一个manifest.tsv文件,这个文件有三列,分别是 sample-id forward-absolute-filepath reverse-absolute-filepath,如图所示
生成manifest.tsv可以使用下面的代码,这个代码是my_script文件夹里面的create_manifest.sh
#!/bin/bash
# 设置目录路径
dir="/data3/sunjs/chenlina/69contorl47PDAC"
# 输出表头 echo -e "sample-id\tforward-absolute-filepath\treverse-absolute-filepath"
# 遍历_R1和_R2文件
for r1 in ${dir}/*_R1.fastq.gz; do # 检查R1文件是否存在
if [[ -f $r1 ]]; then
# 获取样本ID(去掉_R1.fastq.gz)
sample_id=$(basename "$r1" _R1.fastq.gz)
# 构建R2文件路径 r2="${dir}/${sample_id}_R2.fastq.gz"
# 检查R2文件是否存在 if [[ -f $r2 ]]; then
# 输出结果 echo -e "${sample_id}\t${r1}\t${r2}" fi fi done
这个脚本会在终端直接显示生成的内容,我们一般会把这些内容重定向到另一个文件去,所以通常运行代码
bash create_manifest.sh>manifest.tsv
这样就会在当前工作目录下生成一个manifest.tsv文件

创建metadata

还需要创建一个metadata,比如有这些列
不过我创建的meta.tsv如图所示,只有样本名和分组两列

把数据导入qiime2

export TMPDIR=/data3/sunjs/ cd ~/test/qiime2/
input_path=~/test/qiime2/manifest.tsv
qiime tools import \
--type 'SampleData[PairedEndSequencesWithQuality]' \
--input-path "${input_path}" \
--output-path "PDAC.qza" \
--input-format PairedEndFastqManifestPhred33V2

去除引物序列

v3到v4区域的引物序列是固定的,就是这两个参数指定的序列
cd /data3/sunjs/chenlina/69contorl_47PDAC_res
qiime cutadapt trim-paired \
--i-demultiplexed-sequences 69contorl_47PDAC.qza \
--p-cores 10 \
--p-no-indels \
--p-front-f ACTCCTACGGGAGGCAGCAG \
--p-front-r GGACTACHVGGGTWTCTAAT \
--o-trimmed-sequences primer-trimmed-demux.qza
双端的数据不需要拆分barcode,直接往下进行即可

双端合并 (dada2不需要)

如果接下来打算 使用deblur或OTU聚类方法,现在就合并序列。如果计划使用 dada2对序列进行去噪,则不要合并——dada2会在对每个序列进行去噪之后自动执行序列合并。
qiime vsearch merge-pairs \
--i-demultiplexed-seqs primer-trimmed-demux.qza \
--o-unmerged-sequences unmerged_demux-joined.qza \
--p-threads 16 \
--o-merged-sequences demux-joined.qza

质控 (dada2不需要

cd /data3/sunjs/chenlina/test qiime quality-filter q-score \
--p-min-quality 20 \ --i-demux demux-joined.qza \
--o-filtered-sequences demux-joined-filtered.qza \
--o-filter-stats demux-joined-filter-stats.qza

使用deblur获得特征序列

qiime deblur denoise-16S \
--i-demultiplexed-seqs demux-joined-filtered.qza \
--p-trim-length 400 \ --p-sample-stats \
--p-jobs-to-start 2 \ --p-min-reads 1 \
--o-representative-sequences repset-seqs.qza \
--o-table feature-table.qza \
--o-stats deblur-stats.qza
或者使用data2得到特征表和代表序列,可以直接替换掉质控+使用 deblur获得特征序列两步,但是不管用deblur还是dada2都要完成导入数据,去引物
使用dada2之前需要先获得 --p-trim四个参数,把下面这段代码生成的数据拖到qiime2的可视化网站里面可以看到两张图
qiime demux summarize \
--i-data primer-trimmed-demux.qza \
--o-visualization demux-summary.qzv

使用dada2生成代表序列与特征表

#p-trim-left-f正向序列左边
#p-trim-left-r 反向去列左边
#p-trunc-len-f正向序列x轴的值
#p-trunc-len-r反向序列x轴的值
# --p-retain-all-samples True保留所有样本
qiime dada2 denoise-paired \
--i-demultiplexed-seqs primer-trimmed-demux.qza \
--p-n-threads 20 \
--p-trim-left-f 0 --p-trim-left-r 0 \
--p-trunc-len-f 270 --p-trunc-len-r 187 \
--p-retain-all-samples True \
-o-table dada2-table.qza \
--o-representative-sequences dada2-rep-seqs.qza \
--o-denoising-stats denoising-stats.qza
其中
#p-trim-left-f正向序列左边
#p-trim-left-r 反向去列左边
#p-trunc-len-f正向序列x轴的值
#p-trunc-len-r反向序列x轴的值
这四个参数的取值要通过看上面那两张图来得到
一般来讲会去掉质量中位数小于20的位点。
上面两种方法选一个就行,推荐dada2

物种鉴定

生成代表序列之后可以进行物种鉴定了
export TMPDIR=/data3/sunjs/
input_path=/data3/sunjs/chenlina/qiime2/PDAC
output_path=/data3/sunjs/chenlina/qiime2/PDAC
db_path=~/Metagenome/database/silva-138-99-nb-classifier.qza
cd "${input_path}"
#全长引物注释,使用的数据库日期是2024.2
#要求输入代表序列,也就是dada2结果生成的那个
#--p-n-jobs如果设置为 -1,那么程序会尝试使用所有可用的 CPU 核心来执行任务
#--p-n-jobs指定的是进程而非线程,和threads不是一回事
qiime feature-classifier classify-sklearn \
--i-classifier "${db_path}" \
--i-reads dada2-rep-seqs.qza \
--p-n-jobs 20 \
--o-classification "${output_path}/taxonomy.qza" #过滤污染 叶绿体 线粒体 qiime taxa filter-table \ --i-table dada2-table.qza \
--i-taxonomy taxonomy.qza \
--p-exclude mitochondria,chloroplast \
--p-include p__ \
--o-filtered-table "${output_path}/feature-table-filt-contam.qza"
#过滤稀有ASV qiime feature-table filter-features \
--i-table feature-table-filt-contam.qza \
--p-min-frequency 50 \ --p-min-samples 1 \
--o-filtered-table "${output_path}/feature-table-final.qza"
#过滤掉ASV对应的序列 qiime feature-table filter-seqs \
--i-data dada2-rep-seqs.qza \
--i-table feature-table-final.qza \
--o-filtered-data "${output_path}/repset-seqs-final.qza"
这里需要提前下载好对应的数据库,下载的数据库理论上来讲是越新越好,但是需要和你用的qiime2软件版本一致,比如qiime2是2024.2的,那数据库也要下载2024.2的,下载数据库可以从这个网址下载 QIIME 2 Resources ,运行这段代码之后就得到了物种鉴定表也就是 taxonomy.qza,同时上面的代码还进行了一些过滤,然后我们可以使用下面的代码来对物种鉴定的结果进行可视化

可视化物种鉴定结果

qiime metadata tabulate \
--m-input-file taxonomy.qza \
--o-visualization taxonomy.qzv
#绘制柱状图
qiime taxa barplot \
--i-table feature-table-final.qza \
--i-taxonomy taxonomy.qza \
--m-metadata-file meta.tsv \
--o-visualization taxa-bar-plots.qzv
其中taxonomy.qzv文件拖到网站里面长这样子
taxa-bar-plots.qzv长这样子,网站允许把柱状图的数据导出成csv格式,推荐导出之后用R来绘制

构建进化树(ITS一般不构建进化树)

#构建进化树,ITS一般不构建进化树
export TMPDIR=/data3/sunjs/ input_path=/data3/sunjs/chenlina/qiime2/PDAC output_path=/data3/sunjs/chenlina/qiime2/PDAC
cd "${input_path}"
qiime phylogeny align-to-tree-mafft-fasttree \
--i-sequences repset-seqs-final.qza \
--o-alignment aligned-repset-seqs.qza \
--p-n-threads 40 \
--o-masked-alignment masked-aligned-repset-seqs.qza \
--o-tree ${output_path}/unrooted-tree.qza \
--o-rooted-tree "${output_path}/rooted-tree.qza"
下面这段代码用于生成代表序列和特征表的qzv格式文件,在网址 view.qiime2.org可以可视化,需要先导出然后拖进去
cd /data3/sunjs/chenlina/84contorl_50PDAC_res
# 特征表和特征序列汇总
qiime feature-table summarize \
--i-table feature-table-final.qza \
--m-sample-metadata-file meta.tsv \
--o-visualization table.qzv qiime feature-table tabulate-seqs \
--i-data repset-seqs-final.qza \
--o-visualization rep-seqs.qzv
把table.qzv拖到网站里面是这样的
点击detail这个,拖到最下边,出现这样的界面
后续将选择53这个数量进行抽平,当然51也可以

生成多样性分析所需数据

#53是把上一步生成的table.qzv文件拖到qimme2网站查看来确定的
qiime diversity core-metrics-phylogenetic \
--i-phylogeny rooted-tree.qza \
--i-table feature-table-final.qza \
--p-sampling-depth 53 \
--m-metadata-file meta.tsv \
--output-dir ./diversity
生成一个名为diversity的目录,里面有一堆文件,其中有四个是qzv格式的,这四个qzv格式的可以直接拖到网站进行可视化,都是beta多样性的比如PCA图,PCoA图这种的
比如下面这样子

α多样性分析

cd /data3/sunjs/chenlina/84contorl_50PDAC_res/
#α多样性分析
qiime diversity alpha-group-significance \
--i-alpha-diversity diversity/faith_pd_vector.qza \
--m-metadata-file meta.tsv \
--o-visualization faith-group-significance.qzv
输入是上一步生成的faith_pd_vector.qza,生成文件如图所示

beta多样性分析

#beta多样性分析
cd /data3/sunjs/chenlina/67contorl_50PDAC_res
qiime diversity beta-group-significance \
--i-distance-matrix diversity/unweighted_unifrac_distance_matrix.qza \
--m-metadata-file meta.tsv \
--m-metadata-column group \
--p-pairwise \
--o-visualization unweighted-unifrac-group-significance.qzv
生成了一个文件,拖到网页里面是这样的,代表了其中某个分组与其他分组有没有差别,使用的方法是置换多因素方差分析
画图,实际上前面已经有过这个图了
#qiime diversity core-metrics-phylogenetic这一步已经生成的结果
cd /data3/sunjs/chenlina/69contorl_47PDAC_res
qiime emperor plot \
--i-pcoa diversity/unweighted_unifrac_pcoa_results.qza \
--m-metadata-file meta.tsv \ --p-custom-axes days-since-experiment-start \
--o-visualization unweighted-unifrac-emperor-group.qzv
这里--i输入的是前面
qiime diversity core-metrics-phylogenetic
这一步已经生成的结果,最后得到的结果也是跟前面
qiime diversity core-metrics-phylogenetic运行得到的那个结果是一样的,尚不清楚这个有啥用处。

绘制稀释曲线

#稀释曲线
cd /data3/sunjs/chenlina/69contorl_47PDAC_res
qiime diversity alpha-rarefaction \
--i-table feature-table-final.qza \
--i-phylogeny rooted-tree.qza \
--p-max-depth 9000 \
--m-metadata-file meta.tsv \
--o-visualization alpha-rarefaction.qzv
我这里选择了取样是9000条,结果如图所示
可以看到后面基本平了,说明测序饱和了,如果发现后面还在往上升,说明测序没饱和,很多东西测不到,这种数据发出去会被拒稿,因为说不定再多测点就结果不一样了。

差异物种分析

有时候可能会先过滤部分数据,比如我先按照频率和特征数过滤 掉一些低质量数据
#过滤部分特征表的数据
cd /data3/sunjs/chenlina/69contorl_47PDAC_res
#--p-min-frequency:样本必须具有的最小总频率,才能被保留
#--p-min-features:样本必须具有的最小特征数,才能被保留
qiime feature-table filter-samples \
--i-table feature-table-final.qza \
--m-metadata-file meta.tsv \
--p-min-features 10 \
--p-min-frequency 1500 \
--o-filtered-table filter-table.qza
可以查看qiime feature-table filter-samples的帮助文档来查看其他过滤参数,比如我可以使用参数--p-where只保留meta.tsv中的某一个分组。
接下来使用 ANCOM-BC方法来进行差异物种分析
#差异分析 cd /data3/sunjs/chenlina/69contorl_47PDAC_res
#--p-formula描述了微生物的绝对丰度是如何依赖于元数据中的变量的
#使用ANCOM-BC方法来进行差异物种分析
qiime composition ancombc \
--i-table filter-table.qza \
--m-metadata-file meta.tsv \
--p-formula group \
--o-differentials ancombc-group.qza
#生成差异丰富度分析结果的条形图可视化
qiime composition da-barplot \
--i-data ancombc-group.qza \
--p-significance-threshold 0.001 \
--o-visualization da-barplot-group.qzv

如何把.qza格式文件导出?比如把特征表导出

cd /data3/sunjs/chenlina/84contorl_50PDAC_res
qiime tools export \
--input-path feature-table-final.qza \
--output-path exported-feature-table biom convert \
-i exported-feature-table/feature-table.biom \
-o feature-table.tsv \
--to-tsv
这就把特征表导出成了tsv这种表格形式的文件

演示单端数据导入qiime2

先使用fastp对下载的数据进行质控
input_path=/data3/sunjs/chenlina/contorl_data output_path=/data3/sunjs/chenlina/contorl_clean_data
cd "$input_path" #SRR15884889.fastq for file in *.fastq; do
sample_id=$(echo "$file" | cut -d'.' -f1)
echo "sample_id是$sample_id
输入文件是$file"
echo "输出文件为${sample_id}.fastp.json和${sample_id}.fastp.html"
fastp -i "${file}" -o "${output_path}/${file}" \ -
-qualified_quality_phred 20 \
--length_required 50 \
--cut_front \
--cut_tail \
--trim_poly_g \
--html "${output_path}/${sample_id}.html" \
--json "${output_path}/${sample_id}.json" done
然后运行代码自动构建一个manifest.tsv文件
cd /data3/sunjs/chenlina/contorl_data
echo -e "sample-id\tabsolute-filepath" > contorl_manifest.tsv for file in *.fastq; do
echo -e "${file%.fastq}\t$(pwd)/$file" >> contorl_manifest.tsv done
解释下上面这段代码
上面的命令是用来生成一个清单文件(manifest file),这个文件将每个样本的ID和对应的绝对文件路径关联起来。这个文件随后可以被用来将单端FASTQ文件导入到QIIME 2中。
数据来源于文章 Dysbiosis of human gut microbiome in young onset colorectal cancer,他的数据中扩增子测序文件里面是单端测序文件,所以构建的manifest长这样子
然后把健康人的feces数据导入qiime2,由于是单端的所以
--type 参数是'SampleData[SequencesWithQuality]'
export TMPDIR=/data3/sunjs/
input_path=/data3/sunjs/chenlina/contorl_data/contorl_manifest.tsv
qiime tools import \
--type 'SampleData[SequencesWithQuality]' \
--input-path "${input_path}" \
--output-path contorl_demux-single-end.qza \
--input-format SingleEndFastqManifestPhred33V2

相关文章:

基于qiime2的16S数据分析全流程:从导入数据到下游分析一条龙

目录 创建metadata 把数据导入qiime2 去除引物序列 双端合并 (dada2不需要) 质控 (dada2不需要) 使用deblur获得特征序列 使用dada2生成代表序列与特征表 物种鉴定 可视化物种鉴定结果 构建进化树(ITS一般不构建进化树…...

【软件测试开发】:软件测试常用函数1.0(C++)

1. 元素的定位 web⾃动化测试的操作核⼼是能够找到⻚⾯对应的元素,然后才能对元素进⾏具体的操作。 常⻅的元素定位⽅式⾮常多,如id,classname,tagname,xpath,cssSelector 常⽤的主要由cssSelector和xpath…...

vue2项目修改浏览器显示的网页图标

1.准备一个新的图标文件,通常是. ico格式,也可以是. Png、. Svg等格式 2.将新的图标文件(例如:faviconAt.png)放入项目的public文件夹中。如下图 public文件夹中的所有文件都会在构建时原样复制到最终的输出目录(通常是dist) 3. 修改vue项目…...

开源、创新与人才发展:机器人产业的战略布局与稚晖君成功案例解析

目录 引言 一、开源:机器人产业的战略布局 促进技术进步和生态建设 吸引人才和合作伙伴 建立标准和网络效应 降低研发风险与成本 二、稚晖君:华为"天才少年计划"的成功典范 深厚的技术积累与动手能力 强烈的探索和创新意识 持续公开…...

线程相关作业

1.创建两个线程,分支线程1拷贝文件的前一部分,分支线程2拷贝文件的后一部分 #include "head.h"#define BUFFER_SIZE 1024// 线程参数结构体,包含文件名和文件偏移量 typedef struct {FILE *src_file;FILE *dest_file;long start_o…...

通义万相2.1开源版本地化部署攻略,生成视频再填利器

2025 年 2 月 25 日晚上 11:00 通义万相 2.1 开源发布,前两周太忙没空搞它,这个周末,也来本地化部署一个,体验生成效果如何,总的来说,它在国内文生视频、图生视频的行列处于领先位置&#xff0c…...

【模拟CMOS集成电路设计】带隙基准(Bandgap)设计与仿真(基于运放的电流模BGR)

【模拟CMOS集成电路设计】带隙基准(Bandgap)设计与仿真 前言工程文件&部分参数计算过程,私聊~ 一、 设计指标指标分析: 二、 电路分析三、 仿真3.1仿真电路图3.2仿真结果(1)运放增益(2)基准温度系数仿真(3)瞬态启动仿真(4)静态…...

如何选择国产串口屏?

目录 1、迪文 2、淘晶驰 3、广州大彩 4、金玺智控 5、欣瑞达 6、富莱新 7、冠显 8、有彩 串口屏,顾名思义,就是通过串口通信接口(如RS232、RS485、TTL UART等)与主控设备进行通信的显示屏。其核心功能是显示信息和接收输入…...

Solana中的程序派生地址(PDAs):是什么,为什么,以及如何?

程序派生地址 (PDA) 在 Solana 中的应用:什么、为什么和如何? 在学习 Solana 时,你会经常听到关于 程序派生地址 (PDAs) 的讨论。它们就像这样 —— 强大、多功能,而且最重要的是,稍微被误解。如果你是一个开发者&…...

利用FatJar彻底解决Jar包冲突(一)

利用FatJar彻底解决Jar包冲突 序FatJar的加载与隔离⼀、 FatJar概念⼆、FatJar的加载三、FatJar的隔离四、隔离机制验证五、 FatJar的定位六、 打包注意点 序 今天整理旧电脑里的资料,偶然翻到大概10年前实习时写的笔记,之前经常遇到Java依赖冲突的问题…...

Spring MVC笔记

01 什么是Spring MVC Spring MVC 是 Spring 框架中的一个核心模块,专门用于构建 Web 应用程序。它基于经典的 MVC 设计模式(Model-View-Controller),但通过 Spring 的特性(如依赖注入、注解驱动)大幅简化了…...

BurpSuite插件jsEncrypter使用教程

一、前言 在当今Web应用安全测试中,前端加密已成为开发者保护敏感数据的常用手段。然而,这也给安全测试人员带来了挑战,传统的抓包方式难以获取明文数据,测试效率大打折扣。BurpSuite作为一款强大的Web安全测试工具,其…...

【C#实现手写Ollama服务交互,实现本地模型对话】

前言 C#手写Ollama服务交互,实现本地模型对话 最近使用C#调用OllamaSharpe库实现Ollama本地对话,然后思考着能否自己实现这个功能。经过一番查找,和查看OllamaSharpe源码发现确实可以。其实就是开启Ollama服务后,发送HTTP请求&a…...

Android Glide 框架线程管理模块原理的源码级别深入分析

一、引言 在现代的 Android 应用开发中,图片加载是一个常见且重要的功能。Glide 作为一款广泛使用的图片加载框架,以其高效、灵活和易用的特点受到了开发者的青睐。其中,线程管理模块是 Glide 框架中至关重要的一部分,它负责协调…...

每天记录一道Java面试题---day32

MySQL索引的数据结构、各自优劣 回答重点 B树:是一个平衡的多叉树,从根节点到每个叶子节点的高度差不超过1,而且同层级的节点间有指针相互连接。在B树上的常规检索,从根节点到叶子节点的搜索效率基本相当,不会出现大…...

Vue3 Pinia 符合直觉的Vue.js状态管理库

Pinia 符合直觉的Vue.js状态管理库 什么时候使用Pinia 当两个关系非常远的组件,要传递参数时使用Pinia组件的公共参数使用Pinia...

深度学习与大模型基础-向量

大家好!今天我们来聊聊向量(Vector)。别被这个词吓到,其实向量在我们的生活中无处不在,只是我们没注意罢了。 1. 向量是什么? 简单来说,向量就是有大小和方向的量。比如你从家走到学校&#x…...

【网络编程】完成端口 IOCP

10.11 完成端口 10.11.1 基本概念 完成端口的全称是I/O 完成端口,英文为IOCP(I/O Completion Port) 。IOCP是一个异 步I/O 的 API, 可以高效地将I/O 事件通知给应用程序。与使用select() 或是其他异步方法不同 的是,一个套接字与一个完成端口关联了起来…...

《苍穹外卖》SpringBoot后端开发项目重点知识整理(DAY1 to DAY3)

目录 一、在本地部署并启动Nginx服务1. 解压Nginx压缩包2. 启动Nginx服务3. 验证Nginx是否启动成功: 二、导入接口文档1. 黑马程序员提供的YApi平台2. YApi Pro平台3. 推荐工具:Apifox 三、Swagger1. 常用注解1.1 Api与ApiModel1.2 ApiModelProperty与Ap…...

管理网络安全

防火墙在 Linux 系统安全中有哪些重要的作用? 防火墙作为网络安全的第一道防线,能够根据预设的规则,对进出系统的网络流量进行严格筛选。它可以阻止未经授权的外部访问,只允许符合规则的流量进入系统,从而保护系统免受…...

DockerHub与私有镜像仓库在容器化中的应用与管理

哈喽,大家好,我是左手python! Docker Hub的应用与管理 Docker Hub的基本概念与使用方法 Docker Hub是Docker官方提供的一个公共镜像仓库,用户可以在其中找到各种操作系统、软件和应用的镜像。开发者可以通过Docker Hub轻松获取所…...

【HarmonyOS 5.0】DevEco Testing:鸿蒙应用质量保障的终极武器

——全方位测试解决方案与代码实战 一、工具定位与核心能力 DevEco Testing是HarmonyOS官方推出的​​一体化测试平台​​,覆盖应用全生命周期测试需求,主要提供五大核心能力: ​​测试类型​​​​检测目标​​​​关键指标​​功能体验基…...

土地利用/土地覆盖遥感解译与基于CLUE模型未来变化情景预测;从基础到高级,涵盖ArcGIS数据处理、ENVI遥感解译与CLUE模型情景模拟等

🔍 土地利用/土地覆盖数据是生态、环境和气象等诸多领域模型的关键输入参数。通过遥感影像解译技术,可以精准获取历史或当前任何一个区域的土地利用/土地覆盖情况。这些数据不仅能够用于评估区域生态环境的变化趋势,还能有效评价重大生态工程…...

【学习笔记】深入理解Java虚拟机学习笔记——第4章 虚拟机性能监控,故障处理工具

第2章 虚拟机性能监控,故障处理工具 4.1 概述 略 4.2 基础故障处理工具 4.2.1 jps:虚拟机进程状况工具 命令:jps [options] [hostid] 功能:本地虚拟机进程显示进程ID(与ps相同),可同时显示主类&#x…...

laravel8+vue3.0+element-plus搭建方法

创建 laravel8 项目 composer create-project --prefer-dist laravel/laravel laravel8 8.* 安装 laravel/ui composer require laravel/ui 修改 package.json 文件 "devDependencies": {"vue/compiler-sfc": "^3.0.7","axios": …...

技术栈RabbitMq的介绍和使用

目录 1. 什么是消息队列?2. 消息队列的优点3. RabbitMQ 消息队列概述4. RabbitMQ 安装5. Exchange 四种类型5.1 direct 精准匹配5.2 fanout 广播5.3 topic 正则匹配 6. RabbitMQ 队列模式6.1 简单队列模式6.2 工作队列模式6.3 发布/订阅模式6.4 路由模式6.5 主题模式…...

springboot整合VUE之在线教育管理系统简介

可以学习到的技能 学会常用技术栈的使用 独立开发项目 学会前端的开发流程 学会后端的开发流程 学会数据库的设计 学会前后端接口调用方式 学会多模块之间的关联 学会数据的处理 适用人群 在校学生,小白用户,想学习知识的 有点基础,想要通过项…...

【C++特殊工具与技术】优化内存分配(一):C++中的内存分配

目录 一、C 内存的基本概念​ 1.1 内存的物理与逻辑结构​ 1.2 C 程序的内存区域划分​ 二、栈内存分配​ 2.1 栈内存的特点​ 2.2 栈内存分配示例​ 三、堆内存分配​ 3.1 new和delete操作符​ 4.2 内存泄漏与悬空指针问题​ 4.3 new和delete的重载​ 四、智能指针…...

Linux系统部署KES

1、安装准备 1.版本说明V008R006C009B0014 V008:是version产品的大版本。 R006:是release产品特性版本。 C009:是通用版 B0014:是build开发过程中的构建版本2.硬件要求 #安全版和企业版 内存:1GB 以上 硬盘&#xf…...

OD 算法题 B卷【正整数到Excel编号之间的转换】

文章目录 正整数到Excel编号之间的转换 正整数到Excel编号之间的转换 excel的列编号是这样的:a b c … z aa ab ac… az ba bb bc…yz za zb zc …zz aaa aab aac…; 分别代表以下的编号1 2 3 … 26 27 28 29… 52 53 54 55… 676 677 678 679 … 702 703 704 705;…...