gromacs教程练习1

news2024/11/23 1:58:07

gromacs能在win上运行,还是个开源的软件,这都很值得入手学习

记录下gromacs教程的练习情况:

Lysozyme in water

水中的溶菌酶,嗯,估计就是把蛋白处理后放在显试溶剂里跑MD这个模拟。

1、文件的准备:

1、先到PDB数据库下载1AKI的蛋白文件

2、用文本编辑器将water去掉,在VMD或者pymol里查看分子的结构,看是否有结构的缺失。

3、用gmx的pdb2gmx生成需要的文件:

  • 一个拓扑文件
  • 一个限制坐标信息文件
  • 一个坐标结构(预进程的结构)文件

拓扑文件(*.top)包含的信息:非键参数(原子类型和电荷信息)、键参数(键、键角和二面角)

gmx pdb2gmx -f .\1aki_delwat.pdb -o 1aki_processed.gro -water spce

#-f 后接pdb文件
#-water 选择要使用的水模型:none, spc, spce, tip3p, tip4p, tip5p,tips3p
#-o 输出的结构文件,gro格式
#-p 输出的拓扑文件

按下回车后,跳出系列力场进行选择

教程里选择15的all-atom OPLS力场,所以这里在光标处输入15,按下回车

然后结构文件gro、拓扑文件top就生成了

教程里介绍的几个gmx2pdb的关键字:

-ignh: #忽略pdb文件里的H原子,不去除,一般这种情况是需要pdb里H原子的坐标信息,但需要手动修改H原子的名字,让其符合gromacs的格式
-ter: #交互式地为N端和C端分配电荷状态。
-inter: #交互式地为 Glu、Asp、Lys、Arg 和 His 分配电荷状态;选择哪些Cys参与二硫键

2、检查拓扑文件:

3、定义盒子和填充溶剂:

这里主要的两个步骤:

  • 1、定义盒子的维度,通过editconf模块
  • 2、给盒子填上溶剂,使用solvate模块

使用命令:

gmx editconf -f 1AKI_processed.gro -o 1AKI_newbox.gro -c -d 1.0 -bt cubic

-f -o:#输入、输出坐标文件(*.gro)
-c: #让蛋白质放置在盒子中央(center)
-d:#指出盒子的尺寸,1nm
-bt:#指出盒子的类型,立方体

到盒子边缘的距离是一个重要的参数。由于我们将使用周期性边界条件,因此必须满足最小图像约定。也就是说,蛋白质永远不应该看到它的周期性图像,否则计算出的力将是虚假的。指定 1.0 nm 的溶质盒距离意味着蛋白质的任何两个周期图像之间至少有 2.0 nm。这个距离对于模拟中常用的任何截止方案来说都足够了。

gmx solvate -cp 1AKI_newbox.gro -cs spc216.gro -o 1AKI_solv.gro -p topol.top

-cp: #上一步editconf输出的gro文件
-cs: #gromacs自带的水模型,spc216.gro,这是一个通用的平衡3点溶剂模型。您可以使用它作为SPC、SPC/E 或TIP3P水的溶剂配置,因为它们都是三点水模型。

-o:#输出的更新的坐标文件
-p:#输出的更新的拓扑文件

检查拓扑文件的[moleucles]模块,里面的内容出现更新:

[ molecules ]
; Compound  #mols
Protein_A       1 
SOL         10832 

4、增加离子:

在拓扑文件中检查体系的电荷(蛋白的电荷)

在[atom]区域的信息里,有qtot的字眼,是原子电荷累计的总和,查看最后列的qtot数值就是体系的整体电荷。这个体系是8个正电荷。

Gromacs里增加离子的模块是genion

再用genion添加离子前,需要用grompp模块生成一个*.tpr文件

tpr是一个包含结构信息、拓扑信息和模拟参数的二进制输入文件

而用grompp之前,需要准备如下的*.mdp (molecular dynamics parameter file) 文件

; ions.mdp - used as input into grompp to generate ions.tpr
; Parameters describing what to do, when to stop and what to save
integrator  = steep         ; Algorithm (steep = steepest descent minimization)
emtol       = 1000.0        ; Stop minimization when the maximum force < 1000.0 kJ/mol/nm
emstep      = 0.01          ; Minimization step size
nsteps      = 50000         ; Maximum number of (minimization) steps to perform

; Parameters describing how to find the neighbors of each atom and how to calculate the interactions
nstlist         = 1         ; Frequency to update the neighbor list and long range forces
cutoff-scheme	= Verlet    ; Buffered neighbor searching 
ns_type         = grid      ; Method to determine neighbor list (simple, grid)
coulombtype     = cutoff    ; Treatment of long range electrostatic interactions
rcoulomb        = 1.0       ; Short-range electrostatic cut-off
rvdw            = 1.0       ; Short-range Van der Waals cut-off
pbc             = xyz       ; Periodic Boundary Conditions in all 3 dimensions

这些参数都是基于OPLS-AA力场设置的,跟换力场,参数可能不适用(来自教程的提示)。

gmx grompp -f ions.mdp -c 1AKI_solv.gro -p topol.top -o ions.tpr

-f #后接复制到的mdp文件
-c -f #后面是结构和拓扑文件
-o #是输出的*.tpr文件

这样,tpr文件就生成了

gmx genion -s ions.tpr -o 1AKI_solv_ions.gro -p topol.top -pname NA -nname CL -neutral

-s #加tpr文件
-o -p #更新的结构文件和拓扑文件
-pname -nname #增加的阴阳离子是什么元素
-neutral #让体系处于电中性
-conc #指出增加的离子浓度

然后选择13号组,嵌入离子

5、进行能量最小化(EM):

5.1、操作:

这一步和增加离子类似,要用grompp生成一个*.tpr文件,然后用gromacs的MD引擎mdrun进行能量最小化。

将上一步增加离子的ions.mdp拷贝一件,重命名为minim.mdp

gmx grompp -f minim.mdp -c 1AKI_solv_ions.gro -p topol.top -o em.tpr

-f: #后接模拟参数信息,这里的信息和增加离子的类似
-c -p: #后接结构、拓扑文件
-o: #后是输出的以上信息的组装的二进制文件

没有出错,接下来就是EM:

gmx mdrun -v -deffnm em

-v: #将细节输出到终端里
-deffnm: #后接所有的文件名(包括输出和输入)
-s: #后接输入文件,就是em.tpr

这里会得到系列输出文件,如果EM结束

  • em.log:文本文件,EM进程的日志文件
  • em.edr: 二进制的能量文件
  • em.trr: 二进制的精确的轨迹文件
  • em.gro: 能量最小化的结构

5.2、如何判断一个EM是否成功:

看两个因素:

①体系的势能Epot,对于一个水中的蛋白质,能量最小化后,其Epot应该在105-106之间。

②Fmax,在minim.mdp文件中,设置了一个参数:emtol = 1000.0,意思就是要Fmax<1000.0 kJ mol-1 nm-1

成功的最小化,要满足这两个条件。

提取em中的能量变化,进行分析:

gmx energy -f em.edr -o potential.xvg

输入命令后,会出现系列选项,这里选择10的potential

因为可以多选,在末尾输入0再回车

终端会返回poteintial的均值,和产生一个potential.xvg文件

xvg文件绘制图形,势能降至105-106kj/mol,说明最小化成功,可进行下一步的模拟。

 6、平衡模拟:

EM保证一个合理的起始结构(建立的体系中水分子和蛋白的位置是人为放置的,原子间可能存在很近的,不合理的距离,从而产生极大的、不稳定的、不合理的能量),EM的目的就是解决这个。

在正式模拟(成品模拟)之前,体系中没有建立真实的密度,需要提高温度、再给予压力,让体系达到真实的密度。

好久前用pdb2gmx生成的posre.itp文件现在派上用场了

posre.itp文件的作用是约束蛋白质的重原子(C、O、N),受能量约束的原子依然可以移动,但是要克服一个巨大的能量惩罚(penalty)。这方便我们整顿蛋白周围的溶剂分子,而蛋白本身的结构没有发生太大的变化。

约束需要一个原点(约束力就像弹簧力,原子在原点,跑越远,受到拉扯回的力越大,向外的阻力也越大),这个原点就是能力最小化后的结构坐标。

一个平衡模拟由两个时相组成

6.1、NVT系综(NVT ensemble)模拟

在恒定的粒子数、体积和温度下进行模拟。这种程序的时间范围取决于系统的内容,但在NVT中,系统的温度应该达到所需值的平台,如果温度尚未稳定,则需要额外的时间。一般地,50~100ps是足够的。这里,我们进行一个100ps的NVT模拟。

拷贝如下的nvt.mdp文件:

title                   = OPLS Lysozyme NVT equilibration 
define                  = -DPOSRES  ; position restrain the protein
; Run parameters
integrator              = md        ; leap-frog integrator
nsteps                  = 50000     ; 2 * 50000 = 100 ps
dt                      = 0.002     ; 2 fs
; Output control
nstxout                 = 500       ; save coordinates every 1.0 ps
nstvout                 = 500       ; save velocities every 1.0 ps
nstenergy               = 500       ; save energies every 1.0 ps
nstlog                  = 500       ; update log file every 1.0 ps
; Bond parameters
continuation            = no        ; first dynamics run
constraint_algorithm    = lincs     ; holonomic constraints 
constraints             = h-bonds   ; bonds involving H are constrained
lincs_iter              = 1         ; accuracy of LINCS
lincs_order             = 4         ; also related to accuracy
; Nonbonded settings 
cutoff-scheme           = Verlet    ; Buffered neighbor searching
ns_type                 = grid      ; search neighboring grid cells
nstlist                 = 10        ; 20 fs, largely irrelevant with Verlet
rcoulomb                = 1.0       ; short-range electrostatic cutoff (in nm)
rvdw                    = 1.0       ; short-range van der Waals cutoff (in nm)
DispCorr                = EnerPres  ; account for cut-off vdW scheme
; Electrostatics
coulombtype             = PME       ; Particle Mesh Ewald for long-range electrostatics
pme_order               = 4         ; cubic interpolation
fourierspacing          = 0.16      ; grid spacing for FFT
; Temperature coupling is on
tcoupl                  = V-rescale             ; modified Berendsen thermostat
tc-grps                 = Protein Non-Protein   ; two coupling groups - more accurate
tau_t                   = 0.1     0.1           ; time constant, in ps
ref_t                   = 300     300           ; reference temperature, one for each group, in K
; Pressure coupling is off
pcoupl                  = no        ; no pressure coupling in NVT
; Periodic boundary conditions
pbc                     = xyz       ; 3-D PBC
; Velocity generation
gen_vel                 = yes       ; assign velocities from Maxwell distribution
gen_temp                = 300       ; temperature for Maxwell distribution
gen_seed                = -1        ; generate a random seed

 上面的NVT参数以及EM后的结构和拓扑文件,利用grompp集合成一个二进制文件nvt.tpr:

gmx grompp -f nvt.mdp -c em.gro -r em.gro -p topol.top -o nvt.tpr

用MD引擎mdrun进行模拟:

gmx mdrun -deffnm nvt

CPU烧了6min,就好了。教程里说"如果在 16 个内核左右并行运行,则不到一个小时"

但我的机子没这么厉害......

分析模拟后的温度变化:

gmx energy -f nvt.edr -o temperature.xvg

 终端里输入16 0

对*xvg绘图的结果应该是:

 从图像中可见,体系的温度迅速达到目标温度(300K),然后在其附近稳定波动。

对于这样的体系,NVT只需要50ps的模拟就能达到

6.2、NPT系综(NPT ensemble)模拟:

稳定温度后,需要稳定体系的压力,让体系的密度达到稳定,更接近实验条件。

NPT模拟同样进行100ps

模拟的参数信息(文本格式)如下,拷贝成一个npt.mdp文件

title                   = OPLS Lysozyme NPT equilibration 
define                  = -DPOSRES  ; position restrain the protein
; Run parameters
integrator              = md        ; leap-frog integrator
nsteps                  = 50000     ; 2 * 50000 = 100 ps
dt                      = 0.002     ; 2 fs
; Output control
nstxout                 = 500       ; save coordinates every 1.0 ps
nstvout                 = 500       ; save velocities every 1.0 ps
nstenergy               = 500       ; save energies every 1.0 ps
nstlog                  = 500       ; update log file every 1.0 ps
; Bond parameters
continuation            = yes       ; Restarting after NVT 
constraint_algorithm    = lincs     ; holonomic constraints 
constraints             = h-bonds   ; bonds involving H are constrained
lincs_iter              = 1         ; accuracy of LINCS
lincs_order             = 4         ; also related to accuracy
; Nonbonded settings 
cutoff-scheme           = Verlet    ; Buffered neighbor searching
ns_type                 = grid      ; search neighboring grid cells
nstlist                 = 10        ; 20 fs, largely irrelevant with Verlet scheme
rcoulomb                = 1.0       ; short-range electrostatic cutoff (in nm)
rvdw                    = 1.0       ; short-range van der Waals cutoff (in nm)
DispCorr                = EnerPres  ; account for cut-off vdW scheme
; Electrostatics
coulombtype             = PME       ; Particle Mesh Ewald for long-range electrostatics
pme_order               = 4         ; cubic interpolation
fourierspacing          = 0.16      ; grid spacing for FFT
; Temperature coupling is on
tcoupl                  = V-rescale             ; modified Berendsen thermostat
tc-grps                 = Protein Non-Protein   ; two coupling groups - more accurate
tau_t                   = 0.1     0.1           ; time constant, in ps
ref_t                   = 300     300           ; reference temperature, one for each group, in K
; Pressure coupling is on
pcoupl                  = Parrinello-Rahman     ; Pressure coupling on in NPT
pcoupltype              = isotropic             ; uniform scaling of box vectors
tau_p                   = 2.0                   ; time constant, in ps
ref_p                   = 1.0                   ; reference pressure, in bar
compressibility         = 4.5e-5                ; isothermal compressibility of water, bar^-1
refcoord_scaling        = com
; Periodic boundary conditions
pbc                     = xyz       ; 3-D PBC
; Velocity generation
gen_vel                 = no        ; Velocity generation is off 

 用grompp对文件整合成二进制文件tpr:

gmx grompp -f npt.mdp -c nvt.gro -r nvt.gro -t nvt.cpt -p topol.top -o npt.tpr

-t: #检查点文件,来自上一步的NVT模拟

用md引擎开始跑:

gmx mdrun -deffnm npt

 同样也需要点时间

完成模拟后,用energy模块进行压力数据提取:

gmx energy -f npt.edr -o pressure.xvg

命令回车后,输入18 0

 压力的波动很大,图中红线是每10ps计算均值绘制出的曲线。

100ps模拟的压力均值是7.5 ± 160.5 bar,参考的压力设置为1bar,这在npt.mdp文件里可以找到

由于均值较大的RMSF(160.5 bar),尚不能从统计学上分析样本均值和参考均值有无差异。

用energy对密度进行提取:

gmx energy -f npt.edr -o density.xvg

输入24 0在光标处

 100ps内的平均密度是1019 ± 3 kg m-3,和实验值(1000 kg m-3)接近,使用的SPC/E model的预期密度是1008 kg m-3。

模拟过程中,密度、温度、压力达到稳定,体系达到平衡。

NPT模拟还需要延长点时间

7、成品模拟:

7.1、操作:

拷贝如下的模拟参数,命名为md.mdp

title                   = OPLS Lysozyme NPT equilibration 
; Run parameters
integrator              = md        ; leap-frog integrator
nsteps                  = 500000    ; 2 * 500000 = 1000 ps (1 ns)
dt                      = 0.002     ; 2 fs
; Output control
nstxout                 = 0         ; suppress bulky .trr file by specifying 
nstvout                 = 0         ; 0 for output frequency of nstxout,
nstfout                 = 0         ; nstvout, and nstfout
nstenergy               = 5000      ; save energies every 10.0 ps
nstlog                  = 5000      ; update log file every 10.0 ps
nstxout-compressed      = 5000      ; save compressed coordinates every 10.0 ps
compressed-x-grps       = System    ; save the whole system
; Bond parameters
continuation            = yes       ; Restarting after NPT 
constraint_algorithm    = lincs     ; holonomic constraints 
constraints             = h-bonds   ; bonds involving H are constrained
lincs_iter              = 1         ; accuracy of LINCS
lincs_order             = 4         ; also related to accuracy
; Neighborsearching
cutoff-scheme           = Verlet    ; Buffered neighbor searching
ns_type                 = grid      ; search neighboring grid cells
nstlist                 = 10        ; 20 fs, largely irrelevant with Verlet scheme
rcoulomb                = 1.0       ; short-range electrostatic cutoff (in nm)
rvdw                    = 1.0       ; short-range van der Waals cutoff (in nm)
; Electrostatics
coulombtype             = PME       ; Particle Mesh Ewald for long-range electrostatics
pme_order               = 4         ; cubic interpolation
fourierspacing          = 0.16      ; grid spacing for FFT
; Temperature coupling is on
tcoupl                  = V-rescale             ; modified Berendsen thermostat
tc-grps                 = Protein Non-Protein   ; two coupling groups - more accurate
tau_t                   = 0.1     0.1           ; time constant, in ps
ref_t                   = 300     300           ; reference temperature, one for each group, in K
; Pressure coupling is on
pcoupl                  = Parrinello-Rahman     ; Pressure coupling on in NPT
pcoupltype              = isotropic             ; uniform scaling of box vectors
tau_p                   = 2.0                   ; time constant, in ps
ref_p                   = 1.0                   ; reference pressure, in bar
compressibility         = 4.5e-5                ; isothermal compressibility of water, bar^-1
; Periodic boundary conditions
pbc                     = xyz       ; 3-D PBC
; Dispersion correction
DispCorr                = EnerPres  ; account for cut-off vdW scheme
; Velocity generation
gen_vel                 = no        ; Velocity generation is off

进行信息整合为一个二进制的tpr文件:

gmx grompp -f md.mdp -c npt.gro -t npt.cpt -p topol.top -o md_0_1.tpr

grompp 将打印 PME 负载的估计值,这将指示应将多少处理器专用于 PME 计算,以及有多少处理器专用于 PP 计算。

开始成品模拟:

gmx mdrun -deffnm md_0_1 -nt 4

-nt:#使用多少线程

我机子能开8个线程,但这里占了我60~70%的CPU

Gabba Gabba Hey! 

7.2、RMSD分析:

现在我们已经模拟了我们的蛋白质,我们应该对系统进行一些分析。哪些类型的数据很重要?这是运行模拟之前要问的一个重要问题,因此您应该对要在自己的系统中收集的数据类型有一些想法。在本教程中,将介绍一些基本工具。

第一个是trjconv,它被用作后处理工具,用于剥离坐标,校正周期性或手动更改轨迹(时间单位,帧频率等)。在本练习中,我们将使用 trjconv 来解释系统中的任何周期性。蛋白质将通过晶胞扩散,可能看起来“破碎”或可能“跳”到盒子的另一侧。要解释此类行为,请发出以下问题:

gmx trjconv -s md_0_1.tpr -f md_0_1.xtc -o md_0_1_noPBC.xtc -pbc mol -center

选择 1(“蛋白质”)作为要居中的组,选择 0(“系统”)作为输出。我们将对这种“修正”的轨迹进行所有分析。让我们先看一下结构稳定性。GROMACS有一个内置的RMSD计算实用程序,称为rms。要使用 rms,请发出以下命令:

 gmx rms -s md_0_1.tpr -f md_0_1_noPBC.xtc -o rmsd.xvg -tu ns

 选择 4(“主干”)作为最小二乘拟合和用于 RMSD 计算的组。-tu 标志将以 ns 为单位输出结果,即使轨迹是用 ps 写的。这样做是为了输出的清晰度(特别是如果你有一个长时间的模拟 - 1e + 05 ps看起来不如100 ns)。输出图将显示相对于最小化平衡系统中存在的结构的RMSD:

如果想要将能量最小化后的结构(晶体结构)作为RMSD计算的参考结构,可以用如下的命令:

gmx rms -s em.tpr -f md_0_1_noPBC.xtc -o rmsd_xtal.xvg -tu ns

 两个时间序列都显示RMSD水平降至~0.1 nm(1 Å),表明结构非常稳定。

图之间的细微差异表明t = 0 ns时的结构与该晶体结构略有不同。这是意料之中的,因为它已被能量最小化,并且因为位置约束不是 100% 完美的,如前所述。

7.3、Rg分析:

蛋白质的回转半径(Rg)是一种衡量它的紧凑性的参数。 如果一个蛋白质是稳定的折叠,它将有可能保持相对稳定的Rg。 如果一个蛋白质的在模拟过程中展开,其Rg将随着时间而改变。 

gmx gyrate -s md_0_1.tpr -f md_0_1_noPBC.xtc -o gyrate.xvg

 选择 1(“蛋白质”)作为分析的组

图形绘制如下:

我们可以看到从合理的不变Rg值的蛋白质仍然非常稳定,在其紧凑(折叠)的形式过程中1ns在300K.这种结果并不意外,但说明了一个先进的能力GROMACS分析,来建立 

 

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

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

相关文章

JVM虚拟机:初始化的介绍

本文重点 我们前面学习了三个步骤: 装载 连接 初始化 初始化 初始化的时候,会为静态成员变量赋值初始值,它有两种方式: ①声明类变量是指定初始值 ②使用静态代码块为类变量指定初始值 例子 最后输出的结果为3,它的过程是这样的: main方法中输出T.count,由于count是…

产品经理如何提高用户画像效果?SIKT模型

产品经理做用户画像&#xff0c;最担心被业务方反馈&#xff1a;没效果。这往往是由用户画像与业务场景脱节造成的。那么我们该如何从业务场景出发&#xff0c;让用户画像更有效&#xff1f;一般来说&#xff0c;我们可以采用SIKT模型解决这个问题。 用户画像 ​ 1、SIK…

使用CLI添加磁盘到VM

登录 https://portal.azure.com/#home&#xff0c;点击右上角的控制台图标 &#xff0c;打开CLI 在控制台中输入如下指令&#xff0c;在NetworkWatcherRG创建一个名字为TEST的虚拟机&#xff0c;使用的镜像是Win2019datacenter&#xff0c;username是aaa,password是1234567890A…

SpringBoot 操作Redis、创建Redis文件夹、遍历Redis文件夹

文章目录 前言依赖连接 RedisRedis 配置文件Redis 工具类操作 Redis创建 Redis 文件夹查询数据遍历 Redis 文件夹 前言 Redis 是一种高性能的键值存储数据库&#xff0c;支持网络、可基于内存亦可持久化的日志型&#xff0c;而 Spring Boot 是一个简化了开发过程的 Java 框架。…

JDBC Vertica Source Connector 使用文档

支持以下引擎 Spark Flink SeaTunnel Zeta 关键特性 批处理 精确一次性处理 列投影 并行处理 支持用户自定义拆分 支持查询 SQL 并实现投影效果 描述 通过 JDBC 读取外部数据源数据。 支持的数据源信息 DatasourceSupported versionsDriverUrlMavenVerticaDifferent depen…

SAP和APS系统超级BOM核对(SAP配置BOM攻略八)

2023年是华为自动驾驶上路元年&#xff0c;8月问界M5的自驾版已经开通了第一批五大城市的自动驾驶功能&#xff0c;年底逐步开放的城市会多达60个。问界M9会也会在年底发布&#xff0c;而M9的生产工厂也在紧锣密鼓的建设中。 APS (Advanced Planning Scheduling) 高级计划与排…

SD WebUI 扩展:prompt-all-in-one

sd-webui-prompt-all-in-one 是一个基于 Stable Diffusion WebUI 的扩展&#xff0c;旨在提高提示词/反向提示词输入框的使用体验。它拥有更直观、强大的输入界面功能&#xff0c;它提供了自动翻译、历史记录和收藏等功能&#xff0c;它支持多种语言&#xff0c;满足不同用户的…

【自用】云服务器 docker 环境下 HomeAssistant 安装 HACS 教程

一、进入 docker 中的 HomeAssistant 1.查找 HomeAssistant 的 CONTAINER ID 连接上云服务器&#xff08;宿主机&#xff09;后&#xff0c;终端内进入 root &#xff0c;输入&#xff1a; docker ps找到了 docker 的 container ID 2.config HomeAssistant 输入下面的命令&…

1 树 1.1 树的基本概念 1.1.1 什么是树&#xff1f; 树是n(n > 0)个结点的有限集。当n 0时&#xff0c;称为空树。在任意一颗非空树上应该满足&#xff1a; 有且仅有一个特定的称为根的结点当n>1时&#xff0c;其余结点可分为m&#xff08;m>0&#xff09;个互不相…

webrtc学习(六)重要信令级时序图

一.四个重要信令 1.用户登录信令 SignIn 2..用户登出信令 SignOut 3..用户等待信令 wait信令是指从服务器的消息队列中获取暂存的中转消息&#xff0c;比如说sdp消息&#xff0c;对于信令服务器来说&#xff0c;他没有办法给用户推送消息&#xff0c;只能是用户推送消息给…

Leetcode151 翻转字符串中的单词

给你一个字符串 s &#xff0c;请你反转字符串中 单词 的顺序。 单词 是由非空格字符组成的字符串。s 中使用至少一个空格将字符串中的 单词 分隔开。 返回 单词 顺序颠倒且 单词 之间用单个空格连接的结果字符串。 注意&#xff1a;输入字符串 s中可能会存在前导空格、尾随空格…

元素在div中水平居中

先看一下行级元素在div中水平居中&#xff1b; <!DOCTYPE html> <html> <head> <meta charset"utf-8"> <title>div demo </title> <style> body {background-color:#d0e4fe; }</style> </head><body>&…

Python基础语法入门(第二十一天)——异常处理

在Python中&#xff0c;异常处理是一种机制&#xff0c;用于捕获和处理在程序执行过程中发生的错误。 Python中的异常处理可以使用try-except语句块来实现。try语句块可能包含可能出现错误的代码段&#xff0c;而except语句块包含处理错误的代码段。当try语句块中的代码发生错…

【仿写tomcat】二、扫描java文件,获取带有@WebServlet注解的类

tomcat仿写 项目结构扫描文件servlet注解map容器servlet工具类启动类调用 项目结构 扫描文件之前当然要确定一下项目结构了&#xff0c;我这里的方案是tomcat和项目同级 项目的话就仿照我们平时使用的结构就好了&#xff0c;我们规定所有的静态资源文件都在webApp目录下存放…

数学建模之“灰色预测”模型

灰色系统分析法在建模中的应用 1、CUMCM2003A SARS的传播问题 2、CUMCM2005A长江水质的评价和预测CUMCM2006A出版社的资源配置 3、CUMCM2006B艾滋病疗法的评价及疗效的预测问题 4、CUMCM2007A 中国人口增长预测 灰色系统的应用范畴大致分为以下几方面: (1&#xff09;灰色关…

go 协程并发数控制

错误的写法&#xff1a; 这里的<-ch 是为了从channel 中读取 数据&#xff0c;为了不使channel通道被写满&#xff0c;阻塞 go 协程数的创建。但是请注意&#xff0c;go workForDraw(v, &wg) 是不阻塞后续的<-ch 执行的&#xff0c;所以就一直go workForDraw(v, &…

react使用antd的table组件,实现点击弹窗显示对应列的内容

特别提醒&#xff1a;不能在table的columns的render里面设置弹窗组件渲染&#xff0c;因为这会导致弹窗显示的始终是最后一行的内容&#xff0c;因为这样渲染的结果是每一行都会重新渲染一遍这个弹窗并且会给传递一个content的值&#xff0c;渲染到最后一行的时候&#xff0c;就…

水库工程标准化管理运行方案

水库工程标准化管理是指在水库建设、运行和维护过程中&#xff0c;按照一定的标准和规范进行管理&#xff0c;以确保水库工程的安全、高效运行。标准化管理可以提高水库工程的质量、节约资源、保护环境&#xff0c;并最大程度地减少事故风险。以下是水库工程标准化管理的几个重…

【Redis】Redis 的主从同步

【Redis】Redis 的主从同步 很多企业都没有使用 Redis 的集群&#xff0c;但是至少都做了主从。有了主从&#xff0c;当主节点(Master) 挂掉的时候&#xff0c;运维让从节点 (Slave) 过来接管&#xff0c;服务就可以继续&#xff0c;否则主节点需要经过数据恢复和重启的过程&a…

2.SpringMvc中Model、ModelMap和ModelAndView使用详解

1.前言 最近SSM框架开发web项目&#xff0c;用得比较火热。spring-MVC肯定用过&#xff0c;在请求处理方法可出现和返回的参数类型中&#xff0c;最重要就是Model和ModelAndView了&#xff0c;对于MVC框架&#xff0c;控制器Controller执行业务逻辑&#xff0c;用于产生模型数据…