GATK Germline_SNP_INDEL_2.0 分析遗传病(耳聋)

news2024/10/7 8:26:50

GATK Germline_SNP_INDEL_2.0 分析遗传病(耳聋)

一、本文是Gatk Germline spns-indels Pipeline 分析遗传病(耳聋)的升级版,目的是提供开箱即用的分析流程,尽可能简化部署和迁移。

更新内容如下:

  • 人类参考基因组以及其他引用数据库文件版本由GRCh37(hg19)升级为GRCh38(hg38)

  • 数据注释软件annovar更换为Ensemble vep(108.2),Annovar需要商业授权,vep为apache2.0 licence,可以随意使用

  • Pipeline用到的软件由预先安装改为docker+conda首次使用时安装,初次运行初始化环境下载必要文件,迁移更方便

二、 流程概览图如下

流程概览

流程输入SRR9993255_R1.fastq.gz SRR9993255_R2.fastq.gz

测试数据下载
[SRX6732499: Targeted NGS of human: blood sample
1 ILLUMINA (Illumina HiSeq X Ten) run: 679,472 spots, 203.8M bases, 80.8Mb downloads


如果下载数据是sra,可以用NCBI官方工具sra-toolkit拆分成fastq.gz文件
fastq-dump SRR9993255 --split-3 --gzip
得到SRR9993255_R1.fastq.gz SRR9993255_R2.fastq.gz

分析流程文件(可一键导入sliverworkspace运行)及报告文件,conda环境文件下载,导入操作
运行环境docker image based on ubuntu21.04 Conda Mamba(默认使用清华源) ssh
分析软件- bwa=0.7.17
- sambamba=0.8.2
- samtools=1.16.1
- bedtools=2.30.0
- fastp=0.23.2
- gatk 4.3.0.0
- ensembl-vep=108.2
输出结果SRR9993255.result.qc.xls 数据质控结果
SRR9993255.result.variants.xls 突变结果文件

环境搭建: 为了快速完成环境搭建,节省95%以上时间。

本文使用docker + conda (mamba) 作为基础分析环境,镜像获取:docker/docker-compoes 的安装及镜像构建见基于docker的生信基础环境镜像构建》,docker镜像基于ubuntu21.04构建,并安装有conda/mamba,ssh服务。并尝试初次运行时初始化安装所需软件下载所需文件(作为代价首次运行时间会较长,切需网络通畅),即实现自动初始化的分析流程。

备注:docker运行的操作系统,推荐为Linux,windows,macOS系统改下docker可能部分功能(网络)不能正常运行

# 拉取docker镜像
docker     pull     doujiangbaozi/sliverworkspace:latest

# 查看docker 镜像
docker     images

基础环境配置,docker-compose.yml 配置文件,可以根据需要自行修改调整

version: "3"
services:
  SarsCov2:
    image: doujiangbaozi/sliverworkspace:latest
    container_name: Germline
    volumes:
      - /media/sliver/Data/data:/opt/data:rw                               #挂载原始数据,放SC2目录下
      - /media/sliver/Manufacture/GL2/envs:/root/mambaforge-pypy3/envs:rw  #挂载envs conda环境目录
      - /media/sliver/Manufacture/GL2/config:/opt/config:rw                #挂载config conda配置文件目录
      - /media/sliver/Manufacture/GL2/ref:/opt/ref:rw                      #挂载reference目录
      - /media/sliver/Manufacture/GL2/result:/opt/result:rw                #挂载中间文件和输出结果目录
    ports:
      - "9024:9024"                                                        #ssh连接端口可以按需修改
    environment:
      - TZ=Asia/Shanghai                                                   #设置时区
      - PS=20191124                                                        #修改默认ssh密码
      - PT=2024                                                            #修改默认ssh连接端口

基础环境运行

# docker-compose.yml 所在目录下运行
docker-compose up -d

# 或者 
docker-compose up -d -f /路径/docker-compose.yaml

# 查看docker是否正常运行,docker-compose.yaml目录下运行
docker-compose ps

# 或者
docker ps

docker 容器使用,类似于登录远程服务器

# 登录docker,使用的是ssh服务,可以本地或者远程部署使用
ssh root@192.168.6.6 -p9024

# 看到如下,显示如下提示即正常登录
(base) root@SliverWorkstation:~# 

三. 分析流程

  1. 变量设置:

    #样本编号
    export sn=SRR9993255
    #数据输入目录
    export data=/opt/data
    #数据输出、中间文件目录
    export result=/opt/result
    #conda安装的环境目录
    export envs=/root/mambaforge-pypy3/envs
    #vep cache 版本
    export vep_version=108
    #设置可用线程数
    export threads=8
    #与耳聋相关基因及突变文件
    export whitelist=/opt/ref/whitelist.csv
    
  2. 数据过滤:

    #conda检测环境是否存在,首次运行不存在创建该环境并安装软件
    if [ ! -d "${envs}/fastp" ]; then
      mamba env create -f /opt/config/fastp.yaml
    fi
    
    conda activate fastp
    
    mkdir -p ${result}/${sn}/clean
    mkdir -p ${result}/${sn}/qc
    
    #使用默认参数
    fastp \
    	-w ${threads} \
    	-i ${data}/Germline/${sn}_R1.fastq.gz \
    	-I ${data}/Germline/${sn}_R2.fastq.gz \
    	-o ${result}/${sn}/clean/${sn}_fastp_R1.fastq.gz \
    	-O ${result}/${sn}/clean/${sn}_fastp_R2.fastq.gz \
    	-j ${result}/${sn}/qc/${sn}_fastp.json \
    	-h ${result}/${sn}/qc/${sn}_fastp.html
    
    conda deactivate
    
  3. 数据比对、排序、标记重复;质控

    #conda检测环境是否存在,首次运行不存在创建该环境并安装软件
    if [ ! -d "${envs}/align" ]; then
      mamba env create -f /opt/config/align.yaml
    fi
    
    conda activate align
    #参考基因组文件如果不存在,去broadinstitute下载
    if [ ! -f "/opt/ref/hg38/hg38.fasta" ]; then
    	mkdir -p /opt/ref/hg38
    	aria2c ftp://gsapubftp-anonymous@ftp.broadinstitute.org/bundle/hg38/Homo_sapiens_assembly38.fasta.gz -d /opt/ref/hg38 -o hg38.fasta.gz
    	cd /opt/ref/hg38 && gzip -d /opt/ref/hg38/hg38.fasta.gz
    	#如果索引文件不存在,创建索引
    	if  [ ! -f /opt/ref/hg38.fasta.amb ] ||
    		[ ! -f /opt/ref/hg38/hg38.fasta.ann ] ||
    		[ ! -f /opt/ref/hg38/hg38.fasta.bwt ] ||
    		[ ! -f /opt/ref/hg38/hg38.fasta.pac ] ||
        	[ ! -f /opt/ref/hg38/hg38.fasta.sa ]; then
        	bwa index /opt/ref/hg38/hg38.fasta
    	fi
    fi
    #如果samtools索引不存在,创建
    if [ ! -f "/opt/ref/hg38/hg38.fasta.fai" ]; then
    	samtools faidx /opt/ref/hg38/hg38.fasta
    fi
    
    cd       ${result}
    mkdir -p ${result}/${sn}/align
    #数据比对、排序
    bwa mem \
        -t ${threads} -M \
        -R "@RG\\tID:${sn}\\tLB:${sn}\\tPL:Illumina\\tPU:NextSeq550\\tSM:${sn}" \
        /opt/ref/hg38/hg38.fasta  \
        ${result}/${sn}/clean/${sn}_fastp_R1.fastq.gz \
        ${result}/${sn}/clean/${sn}_fastp_R2.fastq.gz \
        | sambamba view -S -f bam -l 0 /dev/stdin \
        | sambamba sort -t ${threads} -m 2G \
        	--tmpdir=${result}/${sn} \
            -o ${result}/${sn}/align/${sn}_sorted.bam /dev/stdin
    
    ulimit -n 10240
    
    #标记重复
    sambamba  markdup \
    	--tmpdir ${result}/${sn} \
    	-t ${threads} \
        ${result}/${sn}/align/${sn}_sorted.bam \
        ${result}/${sn}/align/${sn}_marked.bam 
    mv  ${result}/${sn}/align/${sn}_marked.bam.bai ${result}/${sn}/align/${sn}_marked.bai
    rm  -f ${result}/${sn}/align/${sn}_sorted.bam
    
    #数据文件没有附带bed文件,这里用bedtools反向计算一个
    bedtools genomecov -ibam ${result}/${sn}/align/${sn}_marked.bam -bg > ${result}/${sn}/align/${sn}_bedtools.bed
    bedtools merge     -i    ${result}/${sn}/align/${sn}_bedtools.bed   > ${result}/${sn}/align/${sn}_merged.bed
    
    if [ ! -f "${envs}/bamdst/bamdst" ]; then
    	apt-get update && apt-get install -y git make gcc zlib1g-dev
    	git clone https://github.com/shiquan/bamdst.git "${envs}/bamdst"
    	cd ${envs}/bamdst
    	make
    	cd ${result}
    fi
    
    ${envs}/bamdst/bamdst -p ${result}/${sn}/align/${sn}_merged.bed -o ${result}/${sn}/qc --cutoffdepth 20 ${sn}/align/${sn}_marked.bam &
    samtools flagstat --threads ${threads} ${result}/${sn}/align/${sn}_marked.bam > ${result}/${sn}/qc/${sn}_marked.flagstat &
    
    wait
    
    conda deactivate
    
  4. Gatk 获取碱基质量校准table

    #conda检测环境是否存在,首次运行不存在创建该环境并安装软件
    if [ ! -f "${envs}/gatk/bin/gatk" ]; then
    	mkdir -p ${envs}/gatk/bin
    	#替代下载地址
    	#https://github.com/broadinstitute/gatk/releases/download/4.3.0.0/gatk-4.3.0.0.zip
    	aria2c https://download.yzuu.cf/broadinstitute/gatk/releases/download/4.3.0.0/gatk-4.3.0.0.zip -d ${envs}/gatk/bin -o gatk.zip
    	apt-get install -y unzip
    	cd ${envs}/gatk/bin 
    	unzip -o gatk.zip 
    	mv ${envs}/gatk/bin/gatk-4.3.0.0/* ${envs}/gatk/bin/
    	rm -rf ${envs}/gatk/bin/gatk-4.3.0.0
    	#chmod +x ${envs}/bin/gatk
    	cd ${result}
    fi
    
    if [ ! -f "/opt/ref/hg38/dbsnp_146.hg38.vcf.gz" ]; then
    	aria2c ftp://gsapubftp-anonymous@ftp.broadinstitute.org/bundle/hg38/dbsnp_146.hg38.vcf.gz -d /opt/ref/hg38
    fi
    if [ ! -f "/opt/ref/hg38/dbsnp_146.hg38.vcf.gz.tbi" ]; then
    	aria2c ftp://gsapubftp-anonymous@ftp.broadinstitute.org/bundle/hg38/dbsnp_146.hg38.vcf.gz.tbi -d /opt/ref/hg38
    fi
    if [ ! -f "/opt/ref/hg38/Mills_and_1000G_gold_standard.indels.hg38.vcf.gz" ]; then
    	aria2c ftp://gsapubftp-anonymous@ftp.broadinstitute.org/bundle/hg38/Mills_and_1000G_gold_standard.indels.hg38.vcf.gz -d /opt/ref/hg38
    fi
    if [ ! -f "/opt/ref/hg38/Mills_and_1000G_gold_standard.indels.hg38.vcf.gz.tbi" ]; then
    	aria2c ftp://gsapubftp-anonymous@ftp.broadinstitute.org/bundle/hg38/Mills_and_1000G_gold_standard.indels.hg38.vcf.gz.tbi -d /opt/ref/hg38
    fi
    if [ ! -f "/opt/ref/hg38/1000G_phase1.snps.high_confidence.hg38.vcf.gz" ]; then
    	aria2c ftp://gsapubftp-anonymous@ftp.broadinstitute.org/bundle/hg38/1000G_phase1.snps.high_confidence.hg38.vcf.gz -d /opt/ref/hg38
    fi
    if [ ! -f "/opt/ref/hg38/1000G_phase1.snps.high_confidence.hg38.vcf.gz.tbi" ]; then
    	aria2c ftp://gsapubftp-anonymous@ftp.broadinstitute.org/bundle/hg38/1000G_phase1.snps.high_confidence.hg38.vcf.gz.tbi -d /opt/ref/hg38
    fi
    
    
    if [ ! -x "$(command -v python)" ]; then
    	mamba env create -f ${envs}/gatk/bin/gatkcondaenv.yml
    fi
    
    if [ ! -x "$(command -v java)" ]; then
    	mamba install -y openjdk=8.0.332
    fi
    
    conda activate gatk
    
    if [ ! -f "/opt/ref/hg38/hg38.dict" ]; then
    	gatk CreateSequenceDictionary -R /opt/ref/hg38/hg38.fasta -O /opt/ref/hg38/hg38.dict
    fi
    
    if [ ! -f "/opt/ref/hg38/hg38.exon.interval_list" ]; then
    	gatk BedToIntervalList \
    		-I /opt/ref/hg38/hg38.exon.bed \
    		-SD /opt/ref/hg38/hg38.dict \
    		-O /opt/ref/hg38/hg38.exon.interval_list
    fi
    
    
    
    gatk BaseRecalibrator \
    	--known-sites /opt/ref/hg38/dbsnp_146.hg38.vcf.gz \
    	--known-sites /opt/ref/hg38/Mills_and_1000G_gold_standard.indels.hg38.vcf.gz \
    	--known-sites /opt/ref/hg38/1000G_phase1.snps.high_confidence.hg38.vcf.gz \
    	-L /opt/ref/hg38/hg38.exon.interval_list \
    	-R /opt/ref/hg38/hg38.fasta \
    	-I ${result}/${sn}/align/${sn}_marked.bam \
    	-O ${result}/${sn}/align/${sn}_recal.table
    
    conda deactivate
    
  5. Gatk 应用碱基校准、获取insert size 统计信息

    conda activate gatk
    
    gatk ApplyBQSR \
        --bqsr-recal-file ${result}/${sn}/align/${sn}_recal.table \
        -L /opt/ref/hg38/hg38.exon.interval_list \
        -R /opt/ref/hg38/hg38.fasta \
        -I ${result}/${sn}/align/${sn}_marked.bam \
        -O ${result}/${sn}/align/${sn}_bqsr.bam &
    
    gatk CollectInsertSizeMetrics \
      -I ${result}/${sn}/align/${sn}_marked.bam \
      -O ${result}/${sn}/qc/${sn}_insertsize_metrics.txt \
      -H ${result}/${sn}/qc/${sn}_insertsize_histogram.pdf &
    
    wait
    
    conda deactivate
    
  6. Gatk HaplotypeCaller 获取snp/indel突变:

    conda activate gatk
    
    mkdir -p ${result}/${sn}/vcf
    
    gatk HaplotypeCaller \
        -R /opt/ref/hg38/hg38.fasta \
        -L /opt/ref/hg38/hg38.exon.interval_list \
        -I ${result}/${sn}/align/${sn}_bqsr.bam \
        -D /opt/ref/hg38/dbsnp_146.hg38.vcf.gz \
        -O ${result}/${sn}/vcf/${sn}.vcf
    	
    conda deactivate
    
  7. 单个样本数据不够运行VQSR,直接执行硬过滤,过滤参考数值见#https://gatk.broadinstitute.org/hc/en-us/articles/360035532412?id=11097

conda activate gatk
#https://gatk.broadinstitute.org/hc/en-us/articles/360035532412?id=11097
gatk VariantFiltration \
    -R /opt/ref/hg38/hg38.fasta \
    -V ${result}/${sn}/vcf/${sn}.vcf \
    -O ${result}/${sn}/vcf/${sn}_snp.vcf \
    --filter-name "SNP_DQ" \
    --filter-expression "DQ < 2.0" \
    --filter-name "SNP_MQ" \
    --filter-expression "MQ <40.0" \
    --filter-name "SNP_FS" \
    --filter-expression "FS > 60.0" \
    --filter-name "SNP_SOR" \
    --filter-expression "SOR > 3.0" \
    --filter-name "SNP_MQRankSum" \
    --filter-expression "MQRankSum < -12.5" \
    --filter-name "SNP_ReadPosRankSum" \
    --filter-expression "ReadPosRankSum < -8.0"

gatk VariantFiltration \
    -R /opt/ref/hg38/hg38.fasta \
    -V ${result}/${sn}/vcf/${sn}_snp.vcf \
    -O ${result}/${sn}/vcf/${sn}_filtered.vcf \
    --filter-name "INDEL_DQ" \
    --filter-expression "DQ < 2.0" \
    --filter-name "INDEL_FS" \
    --filter-expression "FS > 200.0" \
    --filter-name "INDEL_SOR" \
    --filter-expression "SOR > 10.0" \
    --filter-name "INDEL_ReadPosRankSum" \
    --filter-expression "ReadPosRankSum < -20.0" \
    --filter-name "INDEL_InbreedingCoeff" \
    --filter-expression "InbreedingCoeff < -0.8"
	
conda deactivate
  1. 使用vep注释突变结果:
#conda检测环境是否存在,首次运行不存在创建该环境并安装软件
if [ ! -d "${envs}/vep" ]; then
	mamba env create -f /opt/config/vep.yaml
fi

mkdir -p /opt/result/${sn}/vcf

if [ ! -d "/opt/ref/vep-cache/homo_sapiens/${vep_version}_GRCh38" ]; then
	aria2c https://ftp.ensembl.org/pub/release-${vep_version}/variation/indexed_vep_cache/homo_sapiens_vep_${vep_version}_GRCh38.tar.gz -d /opt/ref/
	tar -zxvf /opt/ref/homo_sapiens_vep_${vep_version}_GRCh38.tar.gz -C /opt/ref/vep-cache/
fi

conda activate vep

vep \
  -i /opt/result/${sn}/vcf/${sn}_filtered.vcf  \
  -o /opt/result/${sn}/vcf/${sn}_filtered_vep.xls \
  --offline \
  --cache \
  --cache_version ${vep_version} \
  --everything \
  --dir_cache /opt/ref/vep-cache \
  --dir_plugins /opt/ref/vep-cache/Plugins \
  --species homo_sapiens \
  --assembly GRCh38 \
  --hgvs \
  --fasta /opt/ref/hg38/hg38.fasta \
  --force_overwrite \
  --format vcf \
  --tab \
  --fork 8 \
  --offline

conda deactivate
  1. 编写脚本匹配whitelist基因,突变过滤后vcf文件,vep注释后的文件,得到最终结果

    #需借用gatk环境中的python来运行
    conda activate gatk 
    
    python ${envs}/GermlineVepAnnotationUtil.py \
    	--whitelist=${whitelist} \
    	-v ${result}/${sn}/vcf/${sn}_filtered.vcf \
    	-a ${result}/${sn}/vcf/${sn}_filtered_vep.xls \
    	-o ${result}/${sn}/${sn}.result.variants.xls
    
    conda deactivate
    
  2. 编写脚本从fastp、bamdst、gatk CollectInsertSize 输出获取数据质控信息

    conda activate gatk
    
    python ${envs}/GermlineQcUtil.py \
    	--out=/opt/result/${sn}/${sn}.result.qc.xls \
    	--sample-fastp=/opt/result/${sn}/qc/${sn}_fastp.json  \
    	--sample-bamdst=/opt/result/${sn}/qc/coverage.report \
    	--sample-insertsize=/opt/result/${sn}/qc/${sn}_insertsize_metrics.txt
    
    conda deactivate
    
    
  3. 结果确认,IGV bam文件和突变位置:

    IGV

  4. 输出报告(报告模板见流程压缩包):

    在这里插入图片描述

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

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

相关文章

RTSP 媒体协议流的录制方案及其覆盖策略详解

前言 在安防和监控领域&#xff0c;RTSP 媒体协议流有很广泛的使用。本文将介绍一种针对 RTSP 媒体流的录制方案及其相应的覆盖策略。据我所知&#xff0c;声网的实时录制功能支持三种模式&#xff0c;分别是云端录制、本地服务端录制和页面录制&#xff0c;今天我们介绍的录制…

[基因遗传算法]进阶之六:VRP的进阶经典问题的解码如何写

文章目录一、CVRP二、MDCVRP2.1 解的编码分析2.2 代码2.3 分割展示三、VRPTW四、MDVRPTW4. 1 解的编码分析4.2 解的代码4.3 结果展示4. 4 MDVRPTW的计算适应度4.5 MDVRPTWd的结果展示图一、CVRP 见博文《[基因遗传算法]进阶之三:实践CVRP》 二、MDCVRP 参考资料:《Python实现…

Qt的场景图Scene Graph

叫场景树更合适&#xff0c;本质不是图。QML场景中的Qt Quick项目将填充QSGNode实例树。 场景图是Qt Quick 2.0引入的&#xff0c;建立在要绘制的内容是已知的基础上。所有QML项目均使用场景图进行渲染&#xff0c;场景图的默认实现是与OpenGL紧密相关的低级高性能渲染堆栈。 …

谈谈前端性能优化-面试版

前言 当我们去面试的时候&#xff0c;很大概率会被面试官问这么一个问题&#xff1a;你有尝试过对项目做性能优化吗&#xff1f;或者你了解哪些性能优化的方法&#xff1f;听到这个问题的你可能是这样的&#xff1a; 似曾相识但又说不清楚&#xff0c;往往只能零散地说出那么几…

Go string原理简析

引入 当查看string类型的变量所占的空间大小时&#xff0c;会发现是16字节&#xff08;64位机器&#xff09;。 str : "hello"fmt.Println(unsafe.Sizeof(str)) // 16也许你会好奇&#xff0c;为什么是16字节&#xff0c;它的底层存储模型是什么样子的。 源码分析 …

焦脱镁叶绿酸-a修饰量子点/荧光/药物/小分子抑制剂/上转换纳米颗粒/树枝状聚合物

小编在这里为大家分享的科研内容是焦脱镁叶绿酸-a修饰量子点/荧光/药物/小分子抑制剂/上转换纳米颗粒/树枝状聚合物的相关研究&#xff0c;来看&#xff01; 焦脱镁叶绿酸-a简介&#xff1a; 焦脱镁叶绿素-a是产物叶绿素a通过脱甲氧羰基、去植物醇、去Mg后的产物。该类物质具有…

day19【代码随想录】删除字符串中的所有相邻重复项、逆波兰表达式求值、滑动窗口最大值、前 K 个高频元素、数组中的第K个最大元素

文章目录前言一、删除字符串中的所有相邻重复项&#xff08;力扣047&#xff09;二、逆波兰表达式求值&#xff08;力扣150&#xff09;三、滑动窗口最大值&#xff08;力扣239&#xff09;四、前 K 个高频元素&#xff08;力扣347&#xff09;五、数组中的第K个最大元素&#…

MyBatis系列---crud返回值

目录1. service与mapper2. 更新操作3. 查询操作3.1. 返回值存储3.2. 简单映射3.3. ResultSet 的预处理3.4. 确定 ResultMap3.5. 创建映射结果对象3.6. 自动映射3.7. 存储对象3.8. 返回结果为单行数据3.9. 返回结果为多行数据3.10. 结论1. service与mapper mybatis一般与spring…

深度活体模型带交互模型版

🍿*★,*:.☆欢迎您/$:*.★* 🍿

点击Tab标签切换不同查询数据,并选择数据存入缓存实现两个界面带参数跳转

项目场景&#xff1a; 在不同的tab标签页中点击不同的标签页查找不同的内容,然后选中其中一个页面中的一条数据将此数据某个信息选中然后存入session缓存当中然后另一个界面从session中取出,从而达到带参数跳转界面的需求 问题描述 可以做到跳转界面但是数据会显示到地址栏当…

做开发4年了,年薪还不如2年经验的测试。我该适应当下节奏吗...

代码码了这么些年&#xff0c;你年薪达到多少了&#xff1f; 我&#xff0c;4年码龄&#xff0c;薪资最高的时候16k*12薪&#xff0c;年薪不到20W。都说IT行业薪资高&#xff0c;但年薪百万的还是金字塔尖极少数&#xff0c;像我这样的才是普通的大多数&#xff0c;却也还要用…

电脑维护与故障处理

第一章 认识电脑的组成 1.1 硬件组成 1.1.1 CPU 1.1.2 主板 1.1.3 内存 1.1.4 硬盘 1.1.5 电源 1.1.6 显示器 1.1.7 键盘和鼠标 1.1.8 光驱 1.1.9 显卡 1.1.10 其他外部设备 1.2 软件组成 1.2.1 操作系统 Windows XP Windows 7 服务器操作系统 —— Windows Ser…

04-Nginx-conf配置文件基本了解

Nginx负载均衡&#xff0c;反向代理入门配置&#xff1a; nginx.conf整体结构 nginx入门基本配置 Nginx.conf配置文件详解&#xff08;upstream和location负载均衡和反向代理配置&#xff09;&#xff1a; #运行用户 user www-data; #启动进程,通常设置成和cpu的数量相等 wor…

基于边缘智能网关打造智慧体育场

运动健身是民众广泛存在的生活需求&#xff0c;体育场馆作为承载各种体育运动的基础设施&#xff0c;其运营管理效率、服务水平和智能化场景应用等都与用户体验紧密相关。 得益于物联网、边缘计算、AI智能等新技术的广泛应用&#xff0c;当前已有越来越多体育场馆通过部署基于…

数据结构与算法——Java实现稀疏数组和队列

目录 一、基本介绍 1.1 线性结构 1.2 非线性顺序结构 二、稀疏数组 2.1 基本介绍 2.1.1 应用场景 2.1.2 实现思路 2.2 代码实现 2.2.1 原始数组 2.2.2 原始数组转化为稀疏数组 2.2.3 稀疏数组转化为原始数组 三、队列的应用场景和介绍 3.1 数组模拟队列 3.1.1数组模拟队列的…

Find My资讯|Seinxon推出支持苹果 Find My 防丢卡

在美国&#xff0c;平均每个人每年丢失 3,000 件物品。而在 2021 年&#xff0c;Pixie 数据显示&#xff0c;丢失产品的更换成本超过 25 亿美元。每周超过两次&#xff0c;将近 1/4 的美国人丢失房门钥匙、钱包、宠物、电话、眼镜、耳机、遥控器、手提箱或孩子最喜欢的物品。 …

GIT系列(七)切换ssh连接,上传不再输入账号、密码

文章目录前言操作流程前言 使用HTTP连接方式时&#xff0c;上传代码总是需要登录&#xff0c;键盘都打坏了&#xff0c;切换SSH可以无需密码&#xff0c;直接上传。 操作流程 step 1 确保在git服务器已经部署本机公钥。 没有配置SSH的&#xff0c;戳这里 GIT系列&#xff08;…

k8s教程(18)-pod之DaemonSet(每个node上只调度一个pod)

文章目录01 引言02 DaemonSet2.1 应用场景2.2 举例2.3 注意事项03 文末01 引言 声明&#xff1a;本文为《Kubernetes权威指南&#xff1a;从Docker到Kubernetes实践全接触&#xff08;第5版&#xff09;》的读书笔记 DaemonSet是 Kubernetes1.2 版本新增的一种资源对象&#xf…

事件轮询机制 Event Loop、浏览器更新渲染时机、setTimeout VS setInterval

目录 1. 事件轮询机制&#xff08;Event Loop&#xff09;是什么 1.1 宏任务、微任务 1.2 Event Loop 循环过程 1.3 经典题目分析 1.3.1 第一轮事件循环 1.3.2 第二、三次事件循环 1.3.3 参考文章 2. async、await 在事件轮询中的执行时机 3. 浏览器更新渲染时机、Vue…

线上使用雪花算法生成id重复问题

项目中使用的是hutool工具类库提供的雪花算法生成id方式&#xff0c;版本使用的是5.3.1 <dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>5.3.1</version></dependency>雪花算法生成id…