数据分析:扩增子分析(qiime2平台全流程分析)

Amplicon sequencing analysis pipeline through qiime2 platform

qiime2是扩增子数据分析的最佳平台之一,其提供了大量从原始data到统计分析的插件,尤其是它的可重复分析且可扩展插件的理念使得其成为扩增子分析首选的平台。

Platform

qiime2是扩增子数据分析的最佳平台之一,其提供了大量从原始data到统计分析的插件,尤其是它的可重复分析且可扩展插件的理念使得其成为扩增子分析首选的平台。对于如何安装该平台,个人建议使用conda安装,并且官网也提供了conda安装的yaml文件,但为了快速安装,我们需要把conda镜像重新设置修改一下。

step1: download the yaml file
wget https://data.qiime2.org/distro/core/qiime2-2020.8-py36-linux-conda.yml
step2: update the conda version
conda update conda -y
step3: modify the .condarc and yaml file
# reset the conda channels 
channels:- conda-forge- bioconda- biobakery- qiime2- ohmeta- defaults
show_channel_urls: true
channel_alias: https://mirrors.bfsu.edu.cn/anaconda
default_channels:- https://mirrors.bfsu.edu.cn/anaconda/pkgs/main- https://mirrors.bfsu.edu.cn/anaconda/pkgs/free- https://mirrors.bfsu.edu.cn/anaconda/pkgs/r
custom_channels:conda-forge: https://mirrors.bfsu.edu.cn/anaconda/cloudbioconda: https://mirrors.bfsu.edu.cn/anaconda/cloudbiobakery: https://mirrors.bfsu.edu.cn/anaconda/cloudqiime2: https://mirrors.bfsu.edu.cn/anaconda/cloudohmeta: https://mirrors.bfsu.edu.cn/anaconda/cloudknights-lab: https://conda.anaconda.orgalienzj: https://conda.anaconda.org# change the yaml channel- qiime2/label/r2020.8+ qiime2
step4: create the qiime2-2020.8 conda environment
conda env create -n qiime2-2020.8 --file qiime2-2020.8-py36-linux-conda_update.yml -y
step5: activate environment and test installation
# actiavate 
conda activate qiime2-2020.8 
# test 
qiime --help
# deactivate 
conda deactivate # Note: if you have trouble with no activate command, you need use *eval "$(conda shell.bash hook)"*

Analysis pipeline

Check the fastq phred score

通过fastqc软件处理fastq获取原始数据的reads质量分布等情况,为后续设置碱基质量阈值做好准备。

fastqc --noextract -f fastq input.fq.gz  -o result/outdir
Get the positions of primer in the fastq

DADA2算法需要提供forward和reverse引物序列在reads上的位置信息,我们可以通过使用usearch和vsearch软件获取引物的位置信息,并将其作为参数配置给qiime2 dada2插件。获取primer_hits.txt文件的开始和结束10个reads的primer信息,找到引物的位置信息。

# step1: merge fq
echo "step1: mkdir result and merger all PE fq files"
mkdir result
./usearch -fastq_mergepairs rawdata/*_R1.fq -fastqout result/all_samples_merged.fq -relabel @# step2: sampling sequence
echo "step2: sampling sequence for primer check"
./usearch -fastx_subsample result/all_samples_merged.fq -sample_size 20000 -fastqout result/all_sub_for_primer_check.fq# step3: search primer position
echo "step3: search primer position of the sequence"
./usearch -search_oligodb result/all_sub_for_primer_check.fq -db primers.fasta -strand both -userout result/primer_hits.txt -userfields query+qlo+qhi+qstrand# step4: obtain the position information of primer
head primer_hits.txt  # head 23  tail 19
#HTN1.182        452     471     -
#HTN1.182        7       23      +
#HTN1.183        447     466     -
#HTN1.183        7       23      +
#HTN1.233        428     447     -
#HTN1.233        7       23      +
#HTN1.570        430     449     -
#HTN1.570        7       23      +
#HTN1.219        448     467     -
#HTN1.219        7       23      +
tail primer_hits.txt # head 23  tail 19
#Normal6.996134  429     448     -
#Normal6.996134  7       23      +
#Normal6.996331  430     449     -
#Normal6.996331  7       23      +
#Normal6.996257  448     467     -
#Normal6.996257  7       23      +
#Normal6.996360  429     448     -
#Normal6.996360  7       23      +
#Normal6.961965  430     449     -
#Normal6.961965  7       23      +
Convert fastq into qza

step1: 准备符合import格式的文件 manifest.tsv(包含样本ID以及forward和reverse fq路径的文件)和sample-metadata.tsv(样本的分组信息)

# generate manifest.tsv 
find /rawdata/ -name "*gz" | grep '1_' | sort | perl -e 'print"sampleid\tforward-absolute-filepath\treverse-absolute-filepath\n"; while(<>){chomp; $name=(split("\/", $_))[-1]; $name1=$name; $name2=$_; $name1=~s/_[1|2]_.fq.gz//g; $name2=~s/1_/2_/; print "$name1\t$_\t$name2\n";}'  > pe-33-manifest-trimmed.tsv# sample-metadata.tsv details
#sampleid        Treatment
#HTN1    HTN
#HTN2    HTN
#Normal1 Normal

step2: import fastq into qza,双端和单端数据的import参数不同,并且不同的phred score使用的参数也不一样

# PE mode 
qiime tools import \--type 'SampleData[PairedEndSequencesWithQuality]' \--input-path pe-33-manifest-trimmed.tsv \--output-path result/paired-end-demux.qza \--input-format PairedEndFastqManifestPhred33V2# SE mode 
qiime tools import \--type "SampleData[SequencesWithQuality]" \--input-path single-33-manifest.tsv \--output-path result/single-end-demux.qza \--input-format SingleEndFastqManifestPhred33V2 
Sequence quality control

Step1: 为了更加准确地过滤低质量的碱基,可以再使用qiime2自带summarize插件查看低质量碱基的位置分布,最后再结合第二步usearch和vsearch的primer位置信息设置适合过滤的参数。

qiime demux summarize \--i-data result/paired-end-demux.qza \--o-visualization result/paired-end-demux-summary.qzv

Step2: DADA2算法相比常用的OTU算法,其计算的amplicon variant sequences(ASV)的feature会更好一些,feature代替OTU是一种趋势。在此之后,Usearch的开发者Robert C Edgar迅速开发了更好的unoise2算法,该算法已更新到unoise3,并放话unoise2比DADA2更准确。

DADA2是R的一个软件包,可以进行过滤,去重,嵌合体过滤,reads的拼接,可以修正扩增子的测序错误,确定更多的真实变异。扩增子测序本身就具有内在的限制,但是聚类OTU的方式进一步限制了它的发展。OTU不是物种,它们不应该成为错误的一部分,DADA2可以具有更高的分辨率

DADA(Divisive Amplicon Denoising Algorithm)含义为区分扩增子降噪方程可以确定真实的变异在454测序扩增子数据输出更少的假阳性。DADA2是DADA的扩展和增强可以应用于Illumina测序数据

  • 特点:DADA2最重要的优势是它用了更多的数据。DADA2的错误模型包含了质量信息,而其他的方法都在过滤低质量之后把序列的质量信息忽略。而且DADA2的错误模型也包括了定量的丰度,而且该模型也计算了各种不同转置的概率A->C。而且DADA2以自身数据的错误模型为参数,不用依赖于其他参数分布模型。
    DADA2算法:一种分列式算法
  • 原理:
    • 1 首先将每个reads全部看作单独的单元,Sequence相同的reads被纳入一个sequence,reads个数即成为该sequence的丰度(abundance)(其实就是去冗余的过程)
    • 2 计算每个sequence丰度的p-value。当最小的p-value低于设定的阈值时, 将产生一个新的partition。每一个sequence将会被归入最可能生成该sequence的partition。
    • 3 依次类推,完成分割归并。
# DADA2 denosie
qiime dada2 denoise-paired \--i-demultiplexed-seqs result/paired-end-demux.qza \--p-trim-left-f 23 \--p-trim-left-r 19 \--p-trunc-len-f 0 \--p-trunc-len-r 0 \--p-n-threads 20 \--o-table result/table.qza \--o-representative-sequences result/rep-seqs.qza \--o-denoising-stats result/stats.qza# summary feature tableqiime feature-table summarize \--i-table result/table.qza \--o-visualization result/table.qzv \--m-sample-metadata-file sample-metadata.tsv
Taxonomic annotation

step1: 通过比对已知分类学组成的参考数据库的序列,可以获知feature table的代表序列的物种注释情况。在qiime2通常可以使用已经搭建好的分类学分类器:silva132和Greengene 13_8等。

GreenGene数据库比较明显的问题就是属种水平注释低,所以很多条目里,g和s下划线后面都是空的,如果关注属种水平的注释,则不建议使用该数据库。

结合相关专业人士的反馈意见,个人建议使用silva数据库作为物种注释的首选参考数据库。

# downlaod silva classifier data 
wget https://data.qiime2.org/2020.8/common/silva-138-99-nb-classifier.qza # annotation
qiime feature-classifier classify-sklearn \--i-classifier database/silva-138-99-nb-classifier.qza  \--i-reads result/rep-seqs.qza \--o-classification result/taxonomy-dada2-sliva.qza \--p-n-jobs 20 \--verbose \--output-dir result/

step2: 可通过将某些代表序列与扩增子数据库在blast软件下再进行物种注释,该结果与qiime2提供的分类学分类器结果比较,从而可以评估分类学分类器的性能,这适合在构造新的分类学分类器时候使用。

# extract the validated sequences by qiime2 view network site
qiime feature-table tabulate-seqs \--i-data result/rep-seqs.qza \--o-visualization result/rep-seqs.qzv
Filter the unsuitable ASV
step1: remove low occurrence ASVs

根据table的结果设置过滤threshold,阈值有frequency和samples,即ASV在所有样本的总reads和出现在样本数目。计算平均采样深度(对所有ASV的count加和并求平均值),设置采样阈值后再乘以平均采样深度即获得frequency阈值,另外也可以设置ASV出现在多少样本内。

qiime feature-table filter-features \--i-table result/table.qza \--p-min-frequency 10 \--p-min-samples 1 \--o-filtered-table result/table_filter_low_freq.qza
step2: remove contamination and mitochondria, chloroplast sequence.

16s扩增子常见污染序列是来自于线粒体和叶绿体等16s序列,另外也存在一些未注释的序列,均需要去除。

qiime taxa filter-table \--i-table result/table_filter_low_freq.qza \--i-taxonomy result/taxonomy-dada2-sliva.qza \--p-exclude mitochondria,chloroplast \--o-filtered-table  result/table_filter_low_freq_contam.qza 
step3: drop the low depth samples:

经过上述处理后,某些样本含有较少的ASV总量,因此可以将其剔除。通常使用的threshold的范围是1,000 - 4,000 reads。

# summarise all the ASV counts in each sample 
qiime feature-table summarize \--i-table result/table_filter_low_freq_contam.qza \--o-visualization result/table_filter_low_freq_contam_summary.qzv
# remove samples
qiime feature-table filter-samples \--i-table  result/table_filter_low_freq_contam.qza \--p-min-frequency 4000 \--o-filtered-table  result/final_table.qza 
# representative sequence
qiime feature-table filter-seqs \--i-data result/rep-seqs.qza \--i-table result/final_table.qza \--o-filtered-data result/final_rep_seqs.qza
# reannotate
qiime feature-classifier classify-sklearn \--i-classifier database/silva-138-99-nb-classifier.qza  \--i-reads result/final_rep_seqs.qza \--o-classification result/final_taxonomy_sliva.qza \--p-n-jobs 20 \--verbose \--output-dir result/
# core features
qiime feature-table core-features \--i-table result/final_table.qza \--p-min-fraction 0.6 \--p-max-fraction 1 \--p-steps 11 \--o-visualization result/final_table_cores.qzv \--output-dir result

Downstream analysis

Constructing phylogenetic tree and diversity analysis
step1: 系统发育树能够服务于后续多样性分析
qiime phylogeny align-to-tree-mafft-fasttree \--i-sequences result/final_rep_seqs.qza \--o-alignment result/final_rep_seqs_aligned.qza \--o-masked-alignment result/final_rep_seqs_masked.qza \--p-n-threads 20 \--o-tree result/unrooted-tree.qza \--o-rooted-tree result/rooted-tree.qza
step2: rarefication curve:

稀疏曲线可以了解测序深度与ASV的关系

qiime diversity alpha-rarefaction \--i-table result/final_table.qza \--i-phylogeny result/rooted-tree.qza \--p-max-depth 60000 \--m-metadata-file sample-metadata.tsv \--o-visualization result/p-max-depth-60000-alpha-rarefaction.qzv
step3: diversity analysis

根据ASV的最小测序深度设置sampling参数

# all diversity index and distance 
qiime diversity core-metrics-phylogenetic \--i-phylogeny result/rooted-tree.qza \--i-table result/final_table.qza \--p-sampling-depth 60000 \--m-metadata-file sample-metadata.tsv \--output-dir result/sample-depth-60000-core-metrics-results 	
step4: faith_pd diversity parameters
# example for faith_pd_vector of group analysis
qiime diversity alpha-group-significance \--i-alpha-diversity result/sample-depth-60000-core-metrics-results/faith_pd_vector.qza \--m-metadata-file sample-metadata.tsv \--o-visualization result/sample-depth-60000-core-metrics-results/faith-pd-group-significance.qzv
# example for alpha diversity of group analysis
qiime diversity alpha-group-significance \--i-alpha-diversity result/sample-depth-60000-core-metrics-results/shannon_vector.qza \--m-metadata-file sample-metadata.tsv \--o-visualization result/shannon_compare_groups.qzv 
# beta diversity 
qiime diversity beta-group-significance \--i-distance-matrix result/sample-depth-60000-core-metrics-results/unweighted_unifrac_distance_matrix.qza \--m-metadata-file sample-metadata.tsv \--m-metadata-column Treatment \--p-pairwise false \--p-permutations 999 \--o-visualization result/unweighted-unifrac-subject-significance.qzv 
# three dimensions to show beta diversity
qiime emperor plot \--i-pcoa result/sample-depth-60000-core-metrics-results/unweighted_unifrac_pcoa_results.qza \--m-metadata-file sample-metadata.tsv \--p-custom-axes Treatment \--o-visualization result/unweighted-unifrac-emperor-height.qzv
visualizing taxonomic composition
qiime taxa barplot \--i-table result/final_table.qza \--i-taxonomy result/final_taxonomy_sliva.qza \--m-metadata-file sample-metadata.tsv \--o-visualization result/final_taxa_barplots_sliva.qzv
Analysis of composition of microbiomes (ANCOM)

ANCOM(可以了解下sparse compositional correlation (SparCC) to analyze correlation networks among taxa)可用于比较微生物在组间差异的分析方法, 结果与LEfse类似。该方法基于成分对数比的方法,即先对count数据进行对数转换,再通过简单的秩和检验(stats包内的aov, friedman.test, lme等函数)进行比较,最后计算统计量w。ANCOM的结果用W值来衡量组间差异显著性。W值越高代表该物种在组间的差异显著性越高。ANCOM的R代码(推荐!!!)。

# add pseudocount for log transform
qiime composition add-pseudocount \--i-table result/final_table.qza \--p-pseudocount 1 \--o-composition-table result/final_table_pseudocount.qza
# ANCOM 
qiime composition ancom \--i-table result/final_table_pseudocount.qza \--m-metadata-file sample-metadata.tsv \--m-metadata-column Treatment \--output-dir result/ancom_output
export qza into other format type data

qza数据文件

QIIME2为了使分析流程标准化,分析过程可重复,制定了统一的分析过程文件格式.qza;qza文件类似于一个封闭的系统,里面包括原始数据、分析的过程和结果;这样保证了文件格式的标准,同时可以追溯每一步的分析,以及图表绘制参数。这一方案为实现将来可重复的分析提供了基础。

# representative sequences
qiime tools export \--input-path result/final_rep_seqs.qza \--output-path final_result
# features table
qiime tools export \--input-path result/final_table.qza \--output-path final_result
biom normalize-table \-i final_result/feature-table.biom \-r \-o final_result/feature-table-norm.biom
biom convert \-i final_result/feature-table-norm.biom \-o final_result/feature-table-norm.tsv \--to-tsv \--header-key taxonomy
LEfse

LEfse是LDA Effect Size分析,其本质是一类判别分析。其结果一般配合进化分支图使用,也即是展示差异物种在进化上的关系。推荐使用yintools的LEfse的R脚本。remotes::install_github(“ying14/yingtools2”)

**原理:**首先使用non-parametric factorial Kruskal-Wallis (KW) sum-rank test(非参数因子克鲁斯卡尔—沃利斯和秩验检)检测具有显著丰度差异特征,并找到与丰度有显著性差异的类群。最后,LEfSe采用线性判别分析(LDA)来估算每个组分(物种)丰度对差异效果影响的大小。

**进化分支图:**由内至外辐射的圆圈代表了由门至属(或种)的分类级别。在不同分类级别上的每一个小圆圈代表该水平下的一个分类,小圆圈直径大小与相对丰度大小呈正比。着色原则:无显著差异的物种统一着色为黄色,差异物种Biomarker跟随组进行着色,红色节点表示在红色组别中起到重要作用的微生物类群,绿色节点表示在绿色组别中起到重要作用的微生物类群,若图中某一组缺失,则表明此组中并无差异显著的物种,故此组缺失。图中英文字母表示的物种名称在右侧图例中进行展示。

step1: install lefse through conda
conda create -n lefse -c biobakery lefse -y 
conda activate lefse 
which format_input.py
step2: collapse the table.gza to the L6 level
qiime taxa collapse \--i-table result/final_table.qza \--o-collapsed-table collapse/collapse.table.qza \--p-level 6 \--i-taxonomy result/final_taxonomy_sliva.qza
step3: calculate relative-frequency for the collapsed table (relative abundance instead of counts)
qiime feature-table relative-frequency \--i-table collapse/collapse.table.qza \--o-relative-frequency-table collapse/collapse.frequency.table.qza \--output-dir collapse/ 
step4: export biom file
qiime tools export \--input-path collapse/collapse.frequency.table.qza \--output-path collapse/
step5: convert biom to text file
biom convert \-i collapse/feature-table.biom \-o collapse/collapse.frequency.table.tsv \--header-key "taxonomy" \--to-tsv
step6: filter tax
sed 's/;/\|/g' collapse/collapse.frequency.table.tsv | \awk '{split($1, a, "|");if( a[6] != "__"){print $0}}' | \#sed 's/d\_\_Bacteria|//g' | \grep -vE "g__uncultured|d__Archaea|p__WPS-2|p__SAR324_clade|Constructed" | \sed 's/#OTU ID/Group/g;s/taxonomy//g' > collapse/collapse.frequency.table.lefse.tsv
step7: run lefse
conda activate lefse
# convert text file into lefse.input file 
format_input.py \collapse/collapse.frequency.table.lefse.tsv \result/collapse.frequency.table.lefse.in \-c 1 \-m f \-o 100000
# run lefse
run_lefse.py \result/collapse.frequency.table.lefse.in \result/collapse.frequency.table.lefse.res 
# select significant result Lefse
grep -E "HTN|Normal" \result/collapse.frequency.table.lefse.res \> result/collapse.frequency.table.lefse_signif.res
# plot lda 
plot_res.py \result/collapse.frequency.table.lefse_signif.res \result/lefse_final_lda.pdf \--format pdf \--autoscale 0
# plot cladogram 
plot_cladogram.py \result/collapse.frequency.table.lefse_signif.res \result/lefse_total_clado.pdf \--format pdf
Functional prediction: picrust2

Picrust是Phylogenetic Investigationof Communities by Reconstruction of Unobserved States的简称,是一款基于16s rRNA基因序列预测微生物群落功能的软件。

其原理:

(1)基因内容预测(gene content inference)。该步先对Greengenes数据库的“closed reference”序列划分OTU后构建进化树,通过祖先状态重构(Ancestralstate reconstruction)算法并结合IMG/M数据库,预测出树中未进行全基因组测序OTU的基因组信息。

(2)宏基因组预测(metagenome inference)。将16SrDNA测序结果与Greengenes数据库进行比对,挑选出与“closed reference”数据库相似性高的(默认为≥97%)OTU;根据OTU对应基因组中16SrDNA的拷贝数信息,将每个OTU对应序列数除以其16S拷贝数来进行标准化;最后,将标准化的数据乘以其对应的基因组中基因含量从而实现宏基因组预测的目的。获得的预测结果可以通过KEGG Orthology、COGs或Pfams等对基因家族进行分类。

qiime2-2020.8版本暂时无法安装q2-picrust插件,因此使用picurst2软件做微生物功能预测分析。

# install picrust2
conda create -n picrust2 -c bioconda -c conda-forge picrust2=2.3.0_b -y 
# export representative sequences
conda activate qiime2-2020.8
qiime tools export --input-path result/final_rep_seqs.qza --output-path ./ 
conda deactivate 
# run picrust2
conda activate picrust2
picrust2_pipeline.py -s dna-sequences.fasta -i feature-table.biom -o picrust2_out_pipeline -p 30
conda deactivate

The key output files are:

  • EC_metagenome_out - Folder containing unstratified EC number metagenome predictions (pred_metagenome_unstrat.tsv.gz), sequence table normalized by predicted 16S copy number abundances (seqtab_norm.tsv.gz), and the per-sample NSTI values weighted by the abundance of each ASV (weighted_nsti.tsv.gz).
  • KO_metagenome_out - As EC_metagenome_out above, but for KO metagenomes.
  • pathways_out - Folder containing predicted pathway abundances and coverages per-sample, based on predicted EC number abundances.

Reference

  1. qiime2 docs
  2. fastqc tutorial
  3. usearch tutorial
  4. vsearch tutorial
  5. import data in qiime2
  6. 扩增子分析软件qiime2必知必会
  7. 扩增子数据库整理
  8. Greengene数据库整理
  9. SILVA 数据库整理
  10. 差异检验
  11. lefse after qiime2
  12. lefse scripts github
  13. picrust2安装及对16s数据进行功能预测
  14. picrust2 wiki

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

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

相关文章

Airmail 5 for Mac:高效电子邮件管理软件

Airmail 5 for Mac作为一款功能强大的电子邮件客户端软件&#xff0c;为Mac用户带来了全新的邮件管理体验。其高效、直观的操作界面&#xff0c;使得用户可以轻松管理各类邮件&#xff0c;提升工作效率。 Airmail 5 for Mac v5.7.4中文激活版 首先&#xff0c;Airmail 5支持多个…

若依前后端部署系统--详细附图

一、后端部署 1、在ruoyi项目的Maven中的生命周期下双击package.bat打包Web工程&#xff0c;生成jar包文件。 提示打包成功 2、多模块版本会生成在ruoyi/ruoyi-admin模块下target文件夹,我们打开目录ruoyi-admin/taget&#xff0c;打开cmd&#xff0c;运行java -jar jar包名称…

Windows Server 评估版转换(升级)为完整版

临时方法 获取 Windows Server 的剩余宽限期 Slmgr /dliWindows Server免费试用期可以使用以下命令合法延长5次&#xff0c;共180天&#xff1a; slmgr /rearm这意味着所评估的 Windows Server 的最长可用时间为 3 年 ( 180 days * 6)。 试用期到期后&#xff0c;Windows S…

为什么有些3D模型导入总是渲染不出来?---模大狮模型网

在使用3D建模软件时&#xff0c;有时候会遇到一些导入模型后无法正确渲染的问题&#xff0c;这给用户带来了不便和困扰。本文将探讨一些可能导致3D模型无法渲染的原因&#xff0c;并提供解决方案&#xff0c;帮助您顺利渲染模型。 一、文件格式不兼容某些3D建模软件只支持特定的…

共赢闽企数字生态,2024纷享销客福建生态伙伴会圆满成功

4月26日&#xff0c;2024纷享销客福建生态伙伴会在厦门顺利举行&#xff0c;大会以“共赢闽企数字生态&#xff0c;共绘数智发展蓝图“为主题&#xff0c;特邀纷享销客创始人&CEO罗旭、建发旅游集团信息中心总经理高勇、金蝶&#xff08;厦门&#xff09;市场总监王鹭鸣、纷…

一加Ace3/12/Ace2pro手机ColorOS14刷KernelSU内核ROOT-解决无限重启变砖

一加Ace3/一加12/一加11等手机升级了安卓14底层&#xff0c;并且ColorOS版本也更新到了14版本界面和功能都比之前的系统表现更加优秀&#xff0c;但刷机方面&#xff0c;相对之前存在一些差异&#xff0c;特别是KernelSU内核级别root权限&#xff0c;不再支持一键刷入KernelSU通…

七、OSPF特殊区域及其特性

目录 OSPF区域分类 hello报文中option字段 1.末节区域&#xff08;Stub区域&#xff09; 2.完全末节区域&#xff08;Toally Stub区域&#xff09; 3.七类LSA 4.非完全末节区域&#xff08;NSSA区域&#xff09; 5.完全非完全末节区域&#xff08;Toally NSSA区域&#…

vue使用pdfjs-dist在电脑上展示PDF文件

安装 安装的时候一定要带上版本号,这里采用的是2.0.943(因为这个版本对于我目前的项目比较合适可以正常使用,其他版本大概率会报错),当前项目使用的是vue2,vue的版本是2.5.10 npm install pdfjs-dist@2.0.943 查看版本发现这玩意版本非常之多 使用 在使用pdfjs-dist库…

CSS Position定位(详解网页中的定位属性)

目录 一、Position介绍 1.概念 2.特点 3.作用 4.应用 二、Position用法 1.position属性 2.static定位 3.fixed定位 4.relative定位 5.absolute定位 6.sticky定位 7.重叠的元素 三、CSS定位属性 四、总结 一、Position介绍 1.概念 文档流&#xff08;Document Fl…

uniapp 微信小程序 分享海报的实现

主页面 <template><view class"page"><!-- 自定义导航栏--><Navbar title"我的海报"></Navbar><view class"container"><poster ref"poster" :imageUrl"image" :imageWidth"7…

NGINX发布动态页面的方法

一、建立 [rootserver100 html]# vim index.php [rootserver100 html]# pwd /usr/share/nginx/html 二、下载PHP文件 [rootserver100 conf.d]# dnf install php.x86_64 -y 正在更新 Subscription Management 软件仓库。 无法读取客户身份 本系统尚未在权利服务器中注册。可…

Latex入门教学——常用语句介绍

目录 一、导言 二、正文 三、图片 四、公式 五、表格 六、参考文献 LaTex模板下载 IEEE模板&#xff1a;IEEE Article Templates - IEEE Author Center Journals通用模板&#xff1a;Overleaf, Online LaTeX Editor其他方法&#xff1a;百度&#xff0c;CSDN等。 一、导…

力扣题目:寻找数组的中心下标

力扣题目&#xff1a;寻找数组的中心下标 题目链接: 724.寻找数组的中心下标 题目描述 代码思路 根据题目内容&#xff0c;维护好前后缀和&#xff0c;然后从左到右遍历寻找合适的下标 代码纯享版 class Solution {public int pivotIndex(int[] nums) {int sumleft 0, su…

Go 语言数组

Go 语言提供了数组类型的数据结构。 数组是具有相同唯一类型的一组已编号且长度固定的数据项序列&#xff0c;这种类型可以是任意的原始类型例如整型、字符串或者自定义类型。 相对于去声明 number0, number1, ..., number99 的变量&#xff0c;使用数组形式 numbers[0], num…

【踩坑日记】SpringBoot集成Kafka,消息没有按照顺序消息问题【已解决】

背景 作为一个合格的码农&#xff0c;当然要学会CV大法了&#xff0c;可是CV也是有风险的&#xff0c;别以为前任写的已经上线那么久了没有问题… 我们需要将埋点信息上报到一个三方平台&#xff08;S2S&#xff09;接口&#xff0c;三方平台对时间有要求&#xff0c;同一个用…

Oracle 数据迁移同步优化(三)

简述 CloudCanal 最近再次对其 Oracle 源端数据同步进行了一系列优化&#xff0c;这些优化基于用户在真实场景中的反馈&#xff0c;具备很强的生产级别参考意义。 本文将简要介绍这些优化项&#xff0c;希望带给读者一些收获。 增量事件 SCN 乱序问题MISSING_SCN 事件干扰新…

clickhouse与oracle传输数据

参考 https://github.com/ClickHouse/clickhouse-jdbc-bridge https://github.com/ClickHouse/clickhouse-jdbc-bridge/blob/master/docker/README.md clickhouse官方提供了一种方式&#xff0c;可以实现clickhouse与oracle之间传输数据&#xff0c;不仅仅是oracle&#xff0…

使用JavaScript及HTML、CSS完成秒表计时器

案例要求 1.界面为一个显示计时面板和三个按钮分别为:开始&#xff0c;暂停&#xff0c;重置 2.点击开始&#xff0c;面板开始计时&#xff0c; 3.点击暂停&#xff0c;面板停止 4.点击重置&#xff0c;计时面板重新为0 案例源码 <!DOCTYPE html> <html lang"…

淘宝(天猫)|京东|1688商品详情数据接口在自有电商平台的应用!

在电商市场的日益成熟下&#xff0c;越来越多的电商参与者上线了自主研发的电商平台。这主要是因为&#xff0c;在电商销售中&#xff0c;品牌在自有电商平台售卖商品的优势颇多&#xff1a; 自有的电商平台能够赋予品牌更大的灵活性和自由度等&#xff0c;品牌商品销售时无需…

Linux驱动开发——(九)platform设备驱动

目录 一、Linux驱动的分离 二、Linux驱动的分层 三、platform平台驱动模型简介 3.1 platform_driver结构体 3.2 device_driver结构体 3.3 platform驱动API函数 四、驱动代码 一、Linux驱动的分离 对于Linux这种庞大而复杂的系统&#xff0c;需要非常注重代码的重用性&a…