基于子口袋的分子生成

news2024/10/7 4:23:31

生成与靶蛋白具有高结合亲和力的分子(也称为基于结构的药物设计,structure-based drug design)是药物发现中的一项基本且具有挑战性的任务。最近,深度生成模型在生成以蛋白质口袋为条件的3D分子方面取得了显著成功。然而,大多数现有的方法独立地考虑蛋白质口袋的分子生成,而忽略了潜在的联系,如子口袋水平的相似性。子口袋是配体片段(ligand fragments)的局部蛋白质环境,具有相似子口袋的口袋可能结合相同的分子片段(基序,motif),即使它们的整体结构不同。因此,在实际应用中,训练的模型很难推广到看不见的蛋白质口袋。因此,作者提出了一种新的基于结构的药物设计方法DrugGPS。实验结果表明,在具有挑战性的分布外环境中,模型在生成具有高亲和力的现实候选药物方面表现优秀。

来自:Learning Subpocket Prototypes for Generalizable Structure-based Drug Design

目录

  • 背景概述
  • 方法
    • motif词汇表构建
    • 层次上下文编码
    • 全局交互
    • 基于原型的motif生成
    • 训练
  • 实验

背景概述

基于结构的药物设计(SBDD),即设计与靶蛋白口袋具有高亲和力的分子,是药物发现中一项关键且具有挑战性的任务。传统上,这是通过基于分子对接和分子动力学模拟等规则从分子数据库中识别候选分子的虚拟筛选。然而,这种详尽的搜索对于生成数据库中不存在的新分子来说是不可行的。最近,一系列工作利用深度生成模型直接在结合口袋内生成3D分子。

然而,现有的方法存在泛化问题。高质量蛋白质-配体复合物数据(protein-ligand complex data)的数量相当有限,并且靶蛋白质口袋可能不在训练数据集中。在实践中,当发生新冠肺炎等不可预测事件时,需要生成模型来生成新蛋白质靶点(例如SARS-CoV-2的主要蛋白酶)的分子。此外,在这些工作中只考虑和编码了原子级的相互作用,逐原子生成可能导致具有不切实际的3D结构的无效分子。

在本文中,作者提出了DrugGPS(Drug design method that is Generalizable with Protein Subpocket),这是一种基于结构的药物设计方法,可通过蛋白质子口袋原型进行泛化。首先,将原子级别的graph和残差级别的graph重建表达为结合上下文。其次,为了构建能推广到unseen靶蛋白口袋的SBDD模型,作者在模型设计中加入了一个有效的生信先验:尽管两个蛋白口袋总体上可能不同,但如果它们共享相似的子口袋,它们仍可能结合同一配体片段。子口袋被定义为蛋白质-配体复合物中配体片段的局部蛋白质环境。例如,在图1中,具有低序列相似性(≤10%)的两种蛋白质(PDB ID:2avd和1p1r)具有相似的子口袋,并与相似的配体片段结合。为了捕捉结合口袋之间的子口袋水平相似性或不变性,作者提出学习子口袋原型,并构建全局交互图来对训练过程中子口袋原型和分子基序(片段)之间的交互进行建模。

为了进一步加强子口袋基序相互作用,作者使用了一种有效的结合分析工具BINANA(Binana 2: Characterizing receptor-ligand interactions in python and javascript)来识别极性接触polar contacts(氢键hydrogen bonds)。在生成过程中,通过全局信息融合加强上下文表示,并按照基序生成配体分子。

在实验中,为了模拟真实世界,作者基于序列相似性和口袋相似性来分割数据集,并构建两个分布外(OOD)设置。实验结果表明,该方法可以很好地推广到测试集中看不见的口袋。所产生的分子不仅表现出更高的结合亲和力和药物相似性,而且比最先进的基线方法包含更真实的子结构。
fig1

  • 图1a:两种序列相似性低(≤10%)的蛋白质(PDB ID:2avd和1p1r)具有相似的子口袋,并与相似的配体片段结合。2avd为黄色,1p1r为白色。子口袋对齐并用红色虚线框突出显示。
  • 图1b:配体与蛋白质2avd和1p1r结合的分子图。子口袋中的相似分子片段用绿色椭圆标记。

极性接触和非共价键相互作用在蛋白质-配体相互作用中起着重要作用,两者之间有一定的关系。

  • 极性接触:极性接触在蛋白质-配体相互作用中通常指的是蛋白质和配体之间的极性残基(如氨基酸的羟基、氨基等)之间的相互作用。这种相互作用可以通过氢键等形式发生,使得蛋白质和配体之间在特定位置形成稳定的结合。极性接触在确定蛋白质-配体结合位点和增强结合亲和性方面具有关键作用。
  • 非共价键相互作用:非共价键相互作用是指蛋白质-配体相互作用中除了共价键外的其他相互作用形式。它包括范德华力、静电相互作用、氢键、疏水效应等。这些作用通常是临时的、非永久性的,但在蛋白质-配体相互作用中起到了稳定和增强结合的作用。

关系:

  • 极性接触和非共价键相互作用在蛋白质-配体相互作用中密切相关。极性接触通常通过氢键等形式在蛋白质的极性残基和配体之间建立特定的相互作用,从而促进结合的发生。而非共价键相互作用则可以包括极性接触,同时也包括其他非共价键作用,共同形成蛋白质-配体复合物的稳定结构

在配体-蛋白质复合物中,非共价键相互作用占计算的主导:
fig0


方法

首先将基于结构的药物设计问题形式化。给定蛋白质口袋配体复合物,配体分子的3D几何结构可以表示为一组原子 G m o l = { ( a i m o l , r i m o l ) } G^{mol}=\left\{(a_{i}^{mol},r_{i}^{mol})\right\} Gmol={(aimol,rimol)},蛋白质口袋(结合位点,binding site)表示为 G p r o = { ( a j p r o , r j p r o ) } G^{pro}=\left\{(a_{j}^{pro},r_{j}^{pro})\right\} Gpro={(ajpro,rjpro)}。其中, a i m o l a_{i}^{mol} aimol a j p r o a_{j}^{pro} ajpro为表示原子类型的one-hot向量, r i m o l ∈ R 3 r_{i}^{mol}\in R^{3} rimolR3 r j p r o ∈ R 3 r_{j}^{pro}\in R^{3} rjproR3为3D笛卡尔坐标矢量。形式上,目标是学习一个条件生成模型 p ( G m o l ∣ G p r o ) p(G^{mol}|G^{pro}) p(GmolGpro)

具体来说,将给定结合口袋的分子生成公式化为一个顺序决策过程。令 ϕ \phi ϕ为生成模型, G t m o l G^{mol}_{t} Gtmol为第 t t t步的中间分子,生成过程定义如下: G t m o l = ϕ ( G t − 1 m o l , G p r o ) , t > 1 G_{t}^{mol}=\phi(G^{mol}_{t-1},G^{pro}),t>1 Gtmol=ϕ(Gt1mol,Gpro),t>1 G t m o l = ϕ ( G p r o ) , t = 1 G_{t}^{mol}=\phi(G^{pro}),t=1 Gtmol=ϕ(Gpro),t=1注意,这是逐个基序生成分子,即在每一步中,来自新基序的一组原子都包含在 G t m o l G^{mol}_{t} Gtmol中。图2a展示了一个生成步骤中的四个主要部分,包括:a上下文编码和焦点基序选择,b下一个基序预测,c基序附着预测和d旋转角度预测。
fig2

  • 图2a:生成步骤的四个部分
  • 图2b:DrugGPS中的层次上下文编码器。全局交互信息通过加权GNN被进一步编码到子口袋嵌入 h c h_c hc中。

motif词汇表构建

基序词汇构建旨在从整个数据集中的配体分子中提取常见的分子基序,构建基序词汇表 V M = { M i } V_{M}=\left\{M_{i}\right\} VM={Mi}是为了后续的分子生成。为了便于提取基序,分子可以表示为2D图 G m o l = ( V , E ) G^{mol}=(V,E) Gmol=(V,E) V V V为原子集合, E E E为共价键集合。类似的,一个基序 M i = ( V i , E i ) M_{i}=(V_i,E_i) Mi=(Vi,Ei)表示分子的子图,每个分子可以表示为基序的集合 V = ∪ i V i V=\cup_{i}V_{i} V=iVi E = ∪ i E i E=\cup_{i}E_{i} E=iEi

图3a显示了切片分子和构建基序词汇表的程序。为了提取结构基序,首先分解分子 G m o l G^{mol} Gmol为分子子结构 G 1 , . . . , G n G_{1},...,G_{n} G1,...,Gn(通过提取和分离所有不会违反化学有效性的可旋转键)。如果切割分子中的键会产生分子的两个连接成分,每个成分至少有两个原子,那么分子中的一个键是可旋转的。如果 G i G_{i} Gi在整个训练集中的出现次数大于 τ \tau τ,则选择 G i G_{i} Gi作为基序。可以选择超参数 τ τ τ来控制 V M V_M VM的大小。如果 G i G_i Gi没有被选为基序,则进一步将其分解为更精细的环和键,再从中选择基序。由于基序中的键长和角度在很大程度上是固定的,作者使用RDkit来有效地确定基序的3D结构,并训练神经网络来预测可旋转键的扭转角。
fig3

  • 图3a:分子基序提取示意图。图3b:采样的子口袋原型。图3c:构建的子口袋原型-分子基序相互作用graph。

层次上下文编码

受蛋白质内在层次结构的启发,作者提出了一种基于graph Transformer的层次上下文编码器来捕获结合位点的上下文信息。具体地,它包括如下所述的原子级编码器和残基级编码器。

对于原子级编码,首先从 G t m o l ∪ G p r o G^{mol}_{t}\cup G^{pro} GtmolGpro中的 K a K_{a} Ka最近邻居原子构建一个上下文3D graph C t − 1 a C_{t-1}^{a} Ct1a。原子属性首先被线性变换层映射到节点嵌入 h k ( 0 ) h^{(0)}_k hk(0)。边的嵌入 e i j e_{ij} eij是通过用高斯函数对原子对距离进行编码而获得的。3D graph Transformer由 L L L个Transformer层组成。每个Transformer层有两个部分:多头自注意(MHA)模块和前馈网络(FFN)。对于第 l l l层的MHA,query由当前节点嵌入 h i ( l ) h_{i}^{(l)} hi(l)得到,key和value由邻居节点的关系信息 r i j ( l ) = C o n c a t ( h j ( l ) , e i j ) r^{(l)}_{ij}=Concat(h_{j}^{(l)},e_{ij}) rij(l)=Concat(hj(l),eij)得到: q i ( l ) = W Q h i ( l ) , k i j ( l ) = W K r i j ( l ) , v i j ( l ) = W V r i j ( l ) q_{i}^{(l)}=W_{Q}h_{i}^{(l)},k_{ij}^{(l)}=W_{K}r_{ij}^{(l)},v_{ij}^{(l)}=W_{V}r_{ij}^{(l)} qi(l)=WQhi(l),kij(l)=WKrij(l),vij(l)=WVrij(l)在每一个注意力头中,比如第 m m m个注意力头,注意力计算为: h e a d i m = ∑ j ∈ N ( i ) s o f t m a x ( q i ( l ) T ⋅ k i j ( l ) d ) v i j ( l ) head_{i}^{m}=\sum_{j\in N(i)}softmax(\frac{q_{i}^{(l)T}\cdot k_{ij}^{(l)}}{\sqrt{d}})v_{ij}^{(l)} headim=jN(i)softmax(d qi(l)Tkij(l))vij(l)其中, N ( i ) N(i) N(i)表示 C t − 1 a C_{t-1}^{a} Ct1a中原子 i i i的邻居, d d d为embedding的维数。最后,输出为: M H A i = C o n c a t ( h e a d i 1 , . . . , h e a d i M ) W O MHA_{i}=Concat(head_{i}^{1},...,head_{i}^{M})W_{O} MHAi=Concat(headi1,...,headiM)WO经过FFN,原子级编码器的输出是一组原子表示 { h i } \left\{h_{i}\right\} {hi}

残基级编码器只保留每个残基的 C α C_{\alpha} Cα原子,并在残基级构建 K r K_r Kr最近邻图 C t − 1 r e s C^{res}_{t−1} Ct1res。第 i i i个残基 r e s i res_{i} resi可以被一个向量 f i f_{i} fi表示(该向量描述了残基的几何和化学特征,包括二面角、体积、极性、电荷、亲水性和氢键相互作用),作者将残基特征和残基内的原子级嵌入 h k h_{k} hk的总和拼接,作为初始残基的表示: f ‾ i = C o n c a t ( f i , ∑ k ∈ r e s i h k ) \overline{f}_{i}=Concat(f_i,\sum_{k\in res_{i}}h_{k}) fi=Concat(fi,kresihk)然后为每个残基建立局部坐标系,并计算残基之间的边缘特征 e i j r e s e^{res}_{ij} eijres,描述相邻残基之间的距离、方向。最后,编码器将节点和边缘特征带入残基级graph Transformer,以计算残基的最终表示。残基级graph Transformer架构类似于原子级编码器。

总之,层次编码器的输出是一组残基的表示 { f i } \left\{f_i\right\} {fi}和原子的表示 { h i } \left\{h_i\right\} {hi}。考虑到口袋-配体相互作用的距离范围,作者将聚焦原子6˚A内的所有残基表示相加为子口袋表示(图3b)。由于编码器基于原子/残基属性和成对相对距离,因此它在旋转和平移上是等变的。

全局交互

大多数现有方法独立考虑蛋白质口袋的分子生成,而忽略了子口袋水平相似性的潜在联系,作者构建了一个全局交互graph,以对整个数据集中的子口袋和配体片段之间的相互作用进行建模。由于数据集中有许多子口袋,作者提出对子口袋嵌入进行聚类,并导出具有代表性的子口袋原型(图3b)。因此,在全局交互graph中有两种节点:子口袋原型节点和基序词汇中的分子基序节点(图3c)。子口袋原型和分子基序的嵌入在训练过程中动态更新。如果属于原型簇的子口袋与训练数据集中的基序结合,就在子口袋原型节点和分子基序节点之间添加一条边。由于相互作用的强度不同,我们将TF-IDF值计算为子
口袋原型 i i i和基序 j j j之间的边缘权重 W i j W_{ij} Wij W i j = C i j ( l o g 1 + N 1 + N i + 1 ) W_{ij}=C_{ij}(log\frac{1+N}{1+N_{i}}+1) Wij=Cij(log1+Ni1+N+1)其中, C i j C_{ij} Cij是基序 j j j与属于原型 i i i的子口袋结合的次数, N N N是子口袋原型的总数, N i N_i Ni是与基序 i i i结合的子口袋原型数量。如果基序 j j j与原型 i i i的共现率较高,并且与较少的其他原型结合(特异性较高),则边缘具有较大的权重。

为了进一步强调子口袋和分子基序之间的相互作用,作者使用了一种有效的结合分析工具BINANA,该工具能够分析详细的相互作用,包括氢键、π-π stacking、阳离子-π相互作用、静电吸引和相对于每个原子的疏水性。当计算相互作用图的边权 W i j W_{ij} Wij时,只计算具有至少一个氢键的子口袋-分子基序对,这对结合亲和力有很大贡献。在模型训练过程中,使用K-Means动态更新子口袋原型。

基于原型的motif生成

这种原型增强基序生成的直觉是根据相似性原理:源自相似子口袋的分子基序可能以高亲和力与靶蛋白口袋结合。

在生成过程中,首先从层次上下文编码器中获得原子和残基的嵌入,子口袋嵌入 h c h_c hc可以通过对聚焦原子6˚A内的所有残基嵌入进行求和来获得。为了利用来自全局交互graph的知识,作者在图2b中采取了全局信息融合步骤:在子口袋embedding和全局交互图中的 K p K_p Kp最相似子口袋原型之间添加边,边权重设置为1。然后,使用加权GNN来传播全局信息,并将输出的子口袋表示取为 h ^ c \widehat{h}_c h c。相关的子口袋原型-基序相互作用信息可以编码在 h ^ c \widehat{h}_c h c中,用于下一个基序预测。

Focal motif预测:在预测下一个基序之前,首先选择下一个基序所连接的聚焦基序。使用两个原子级MLP作为分类器:蛋白质原子分类器(对于 t = 1 t=1 t=1)和分子原子分类器(针对 t ≥ 2 t≥2 t2):

  • t = 1 t=1 t=1时,所有已知的上下文信息都是蛋白质口袋。蛋白质原子分类器将蛋白质原子的隐表示作为输入,并预测是否可以在4˚A内产生新的配体原子。
  • 对于 t ≥ 2 t≥2 t2,分子原子分类器从先前 t − 1 t−1 t1步骤中生成的配体原子中选择一个聚焦原子。选择聚焦原子所属的基序作为聚焦基序。如果没有选择原子/基序作为焦点,则生成过程完成。

Next Motif Prediction:给定聚焦motif M f M_{f} Mf,下一个motif的标签预测为: P m = s o f t m a x M ∈ V M ( M L P M ( e ( M f ) , ∑ i ∈ M f h i , h ^ c ) ⋅ e ( M ) ) P_{m}=softmax_{M\in V_{M}}(MLP^{M}(e(M_{f}),\sum_{i\in M_{f}}h_{i},\widehat{h}_{c})\cdot e(M)) Pm=softmaxMVM(MLPM(e(Mf),iMfhi,h c)e(M))其中 P m P_m Pm是基序词汇表 V M V_M VM上的概率分布, e ( M ) e(M) e(M)表示基序嵌入, ∑ i ∈ M f h i \sum_{i\in M_{f}}h_{i} iMfhi为聚焦基序中的原子嵌入之和, h ^ c \widehat{h}_{c} h c为增强后的子口袋表示。由于在第一步( t = 1 t=1 t=1)没有聚焦基序,作者将无基序视为一种特殊的基序类型,并在训练中学习其嵌入。

motif附着预测:对于预测的基序,下一步是将新的基序连接到生成的分子上。该步骤是不确定的,因为有多种连接方案,见图2a。这里的目标是选择最合适的附着点。具体来说,作者列举了不同的有效附着,并形成了一个候选集 C C C。使用GIN来编码候选分子图,并且挑选每个附着的概率 P a P_a Pa计算为: P a = s o f t m a x G ′ ∈ C ( M L P a ( G I N ( G ′ ) , h ^ c ) ) P_{a}=softmax_{G'\in C}(MLP^{a}(GIN(G'),\widehat{h}_{c})) Pa=softmaxGC(MLPa(GIN(G),h c))

旋转角度预测:由于分子结构的灵活性很大程度上取决于可旋转键的程度,此步骤专注于预测DrugGPS中的旋转角度。在附加新的基序并获得初始坐标后,再次应用编码器来获得更新的原子嵌入。设 X X X Y Y Y表示可旋转键的两个末端原子(设 Y Y Y表示连接新基序的原子)。预测扭转角的变化 ∆ α ∆α α ∆ α = M L P α ( h X , h Y , h G ) m o d 2 π ∆α=MLP^{\alpha}(h_{X},h_{Y},h_{G})mod2\pi α=MLPα(hX,hY,hG)mod2π其中 h X h_X hX h Y h_Y hY X X X Y Y Y的嵌入; h G h_G hG表示分子的嵌入,这是通过sum pooling获得的。 ∆ α ∆α α也是旋转和平移不变的,因为预测是基于等变编码器的表示。最后,通过绕 X − Y X-Y XY线旋转 ∆ α ∆α α来更新新基序中原子坐标。至于生成中的第一个基序,由于没有参考配体原子,作者对其坐标使用基于距离的初始化。

训练

在训练阶段,分子的基序被随机掩蔽,DrugGPS被训练以恢复掩蔽的基序。具体而言,对于每个口袋-配体对,从均匀分布中采样掩模比,并掩模相应数量的分子基序。对于聚焦原子/基序预测,使用二元交叉熵损失对聚焦原子进行分类。对于基序类型和附着预测,使用交叉熵损失进行分类。至于扭转角预测,用Von Mises分布拟合角度。

在模型训练过程中,作者随机掩盖训练集中配体分子的部分基序,训练模型从距离蛋白口袋最近的基序开始,以广度优先的方式生成被掩盖的基序。数据集为包含2250万个蛋白质分子对的CrossDocked。

实验

作者以PDB ID分别为4AAW和4M7T的两个靶蛋白为例,对DrugGPS的分子生成能力进行案例研究,结果如图8所示。可见DrugGPS针对两个特定靶标蛋白的口袋结构生成了具有高QED、SA以及合理的子结构的全新分子,进一步证明了DrugGPS在实际的药物设计任务中的性能。
fig4


对于一个待处理的靶蛋白,输入模型的是蛋白质活性位点的局部结构,这包括活性位点周围的氨基酸残基和其构成的空间结构。基于这些局部结构,分子生成算法可以通过模拟分子的构建和优化来生成与蛋白质口袋相互作用的分子配体。


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

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

相关文章

怎么绘制乡土中国思维导图?了解一下这个绘制步骤

怎么绘制乡土中国思维导图?乡土中国思维导图是一种将中国传统文化与现代思维方法相结合的思维导图。它是一种系统化的思考方法,可以帮助我们更好地理解乡土中国文化的内涵和特点,同时也能帮助我们更好地应对当下的社会和文化问题。那么今天就…

TZOJ 曹冲养猪 (扩展)中国剩余定理

求解: M a1 (b1) M a2 (b2) M a3 (b3) ........ 对于 上述式子我们可以拆成 : M b1 * p a1 b2 * q a2 左右移项得到: b1 * p - b2 * q a2 - a1 可以发现 这就是一个同余方程: a b1 , b b2 , x p , y q , c …

关于新手学习STM32开发应该如何入门?

对于新手来说,学习STM32开发可能会感到困惑,尤其是在拿到开发板后该如何入门。在这里有嵌入式学习路线,毕设,各种项目,需要留个6。以下是部分内容概述:硬件介绍:了解STM32开发板的基本硬件组成和…

Chatgpt API调用报错:openai.error.RateLimitError

Chatgpt API 调用报错: openai.error.RateLimitError: You exceeded your current quota, please check your plan and billing details. 调用OpenAI API接口 import openai import osopenai.api_key os.getenv("OPENAI_API_KEY")result openai.Chat…

欧科云链与华为云达成战略合作,开启Web3安全合规新时代

华为云——作为全球增速最快的主流云服务提供商; 欧科云链——作为全球领先的Web3链上数据及合规解决方案提供商; 今天,华为云 与 欧科云链 正式达成战略合作! 两者相加在一起,未来又将会碰撞出怎样的火花?…

01-向量究竟是什么?

文章作者:里海 来源网站:https://blog.csdn.net/WangPaiFeiXingYuan 向量究竟是什么 引入一些数作为坐标是一种鲁莽的行为 ——赫尔曼外尔 The introduction of numbers as coordinates is an act of violence - Hermann Weyl 向量的定义 向量&#xff0…

代码随想录算法训练营第50天|动态规划part08|139.单词拆分、关于多重背包,你该了解这些!、背包问题总结篇!

代码随想录算法训练营第50天|动态规划part08|139.单词拆分、关于多重背包,你该了解这些!、背包问题总结篇! 139. 单词拆分 139. 单词拆分 思路: 单词就是物品,字符串s就是背包 拆分时可以重…

【EI复现】考虑区域多能源系统集群协同优化的联合需求侧响应模型(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

远程桌面配置指南:保留TCP地址、配置隧道和使用固定TCP地址

远程桌面配置指南:保留TCP地址、配置隧道和使用固定TCP地址 文章目录 远程桌面配置指南:保留TCP地址、配置隧道和使用固定TCP地址第一步:保留TCP地址第二步:为远程桌面隧道配置固定的TCP地址第三步:使用固定TCP地址远程…

10. Docker Swarm(一)

目录 1、前言 2、Docker Swarm体系架构 2.1、简单介绍 2.2、体系架构 3、简单使用 3.1、环境准备 3.2、初始化master节点 3.3、建立worker节点 3.4、查看集群的节点信息 3.5、部署应用 3.5.1、创建Dockerfile文件 3.5.2、构建镜像 3.5.3、将镜像上传到Docker仓库 …

crypto-js中AES的加解密封装

在项目中安装依赖: npm i crypto-js在使用的页面引入: import CryptoJS from crypto-jscrypto-js中AES的加解密简单的封装了一下: //加密const KEY 000102030405060708090a0b0c0d0e0f // 秘钥 这两个需要和后端统一const IV 8a8c8fd8fe3…

栈和队列OJ题讲解

💓博主个人主页:不是笨小孩👀 ⏩专栏分类:数据结构与算法👀 刷题专栏👀 C语言👀 🚚代码仓库:笨小孩的代码库👀 ⏩社区:不是笨小孩👀 🌹欢迎大家三连关注&…

mysql事务隔离级别详细讲解

mysql事务讲解 MySQL事务处理(TransAction) 大家好,我是一名热爱研究技术并且喜欢自己亲手实践的博主。 工作这么多年,一直没有深入理解MySQL的事务,因为最近也在面试,准备复习mysql的相关知识&#xff0…

verilog 实现异步fifo

理论知识参考 异步FIFO_Verilog实现_verilog实现异步fifo_Crazzy_M的博客-CSDN博客 代码 /* 位宽8bit, 位深8 */ module async_fifo#(parameter FIFO_DEPTH 8,parameter FIFO_WIDTH 8 ) (input rst_n,input wr_clk,input wr_en,input [FIFO_WIDTH - 1:0…

数据结构之红黑树

二叉搜索树对于某个节点而言,其左子树的节点关键值都小于该节点关键值,右子树的所有节点关键值都大于该节点关键值。二叉搜索树作为一种数据结构,其查找、插入和删除操作的时间复杂度都为O(logn),底数为2。但是我们说这个时间复杂度是在平衡的…

C#小轮子 Debug,Release,发布模式如何运行不同的代码

文章目录 前言C#运行模式运行模式介绍三种模式区分代码 前言 编译模式和发布模式的代码不一样是非常正常的。比较常见的是数据库不一样。编译测试数据库和发布真实的数据库地址不一样。 C#运行模式 运行模式介绍 运行模式有三种: Debug 不进行优化,…

逆向破解学习-经典贪吃蛇大作战_1.00

试玩游戏 有支付取消关键字 找静态代码 找到关键字 ![在这里插入图片描述](https://img-blog.csdnimg.cn/5d9f3cc57d18477794197ea5fae8c5ba.png Hook代码 import de.robv.android.xposed.XC_MethodHook; import de.robv.android.xposed.XC_MethodReplacement; import de.r…

MyBatis操作数据库常用用法总结1

文章目录 1.单表查询1.1返回所有的表记录1.2根据id查找结果1.3根据名字查找结果 2.单表修改2.1修改密码 3.单表删除3.1根据id删除信息 4.单表增加(根据业务情况返回)4.1添加返回影响的行数4.2添加返回影响行数和id 5.多表查询(多)…

网易云信回声消除量化评估方法

背景 随着现代通信技术的发展,语音通信成为了人们生活中不可或缺的一部分。然而,环境噪声和回声等因素对语音通信质量产生了不良影响,降低了通信效率和用户体验,声学回声消除技术的应用变得越来越重要。如何评估回声消除的效果也变…

详解如何计算字符中的字节数

文章目录 字符概念转义 进制的表示前缀区分后缀区分 什么是ASCII产生表述局限性字节计算 什么是Unicode编码方式UCS-2UCS-4 实现方式UTF的字节序和BOM字节计算 JavaScript中使用字符字符使用缺陷规避字符使用缺陷 MIME 编码Base64编码字节计算QP(Quote-Printable) 总结 字符概念…