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

scNET:整合scRNA-seq和PPI用于学习基因和细胞的embedding

scRNA-seq 技术的最新进展为深入了解各种组织的异质性提供了前所未有的视角。然而,仅靠基因表达数据往往无法捕捉和识别细胞通路和复合物的变化,因为这些变化在蛋白质水平上更容易被察觉。此外,由于scRNA-seq数据存在高噪声水平和零膨胀等固有特性,对其进行分析还面临着更多挑战。在本研究中,作者提出了一种通过将scRNA-seq数据集与蛋白质-蛋白质相互作用网络相结合来解决这些局限性的方法scNET。scNET利用了基于图神经网络的独特双视图架构,能够对基因表达数据和蛋白质-蛋白质相互作用网络数据进行联合表征。这种方法在特定的生物学背景下对基因与基因之间的关系进行建模,并使用注意力机制优化细胞与细胞之间的关系。接下来,全面的评估证明了scNET在更好地捕捉基因注释、通路特征以及基因与基因关系识别的同时,还能在不同细胞类型和生物学条件下改进细胞聚类和通路分析。

来源:Sheinin, R., Sharan, R. & Madi, A. scNET: learning context-specific gene and cell embeddings by integrating single-cell gene expression data with protein–protein interactions. Nat Methods (2025). https://doi.org/10.1038/s41592-025-02627-0

目录

  • 背景概述
  • scNET概览
  • 数据
    • 数据集
    • 数据预处理
  • scNET模型架构
    • 编码器
      • 图卷积层
      • 图注意力层
      • 基于注意力的KNN剪枝
    • 完整的自编码架构
    • 网络评估
    • 实现和训练
  • 结果
    • scNET的gene embedding捕捉功能注释
    • scNET的共嵌入网络捕捉生物学通路
    • 细胞聚类评估
    • 重建表达提高通路分析

背景概述

scRNA-seq 数据通过揭示细胞内在的异质性,彻底改变了我们对复杂生物系统的认知。通常,scRNA-seq分析包括基于图的聚类分析,以识别不同的细胞群体,随后进行差异基因表达分析。这种方法能够突出与特定细胞状态和功能相关的关键基因。

scRNA-seq数据的一个关键局限性在于其零膨胀的特性。这些零计数值是生物信号和技术局限性的混合体现,与bulkRNA-seq相比,其数据缺失率明显更高。这导致了相当比例的假零值,掩盖了真实信号,造成基因表达相关性的丧失,因此难以描绘复合物和通路的激活情况。为了解决这一问题,人们开发了多种用于单细胞RNA测序数据插补的方法。这些方法大体上包括零膨胀概率模型、基于最近邻的表达谱平滑处理,以及从隐表征生成观测的技术。尽管这些方法从理论上讲能够揭示基因与基因之间的相互作用,但大多数方法都侧重于对数据dropout事件的数值恢复。

还有其他几种专门针对解决单细胞RNA测序数据中相关性丧失问题而提出的方法。亚历山大等人提出的一个模型引入了一种细胞特异性相关模型,该模型考虑了测序深度和读取误差,以推断细胞类型特异性的共表达情况。然而,这些方法没有利用先前已有的补充性知识。

蛋白质-蛋白质相互作用(PPI)网络能够有效地捕捉基因的功能背景,包括通路和复合物的激活以及信号转导。这些网络的一个关键局限性在于,它们通常是在全局范围内构建的,捕捉的是生物体层面的相互作用,而没有反映出在不同细胞类型和生物学条件下发生的动态变化。因此,将蛋白质-蛋白质相互作用网络与单细胞RNA测序数据相结合具有巨大的潜力,因为它将单细胞RNA测序数据的动态特性蛋白质-蛋白质相互作用网络所提供的强大功能注释和背景信息结合起来,这能够增强单细胞RNA测序数据的下游分析。

在早期的研究中,作者已经展示了数据集特定的加权蛋白质-蛋白质相互作用(PPI)在识别细胞间相互作用后下游信号事件方面的潜力。从更广泛的角度来看,将蛋白质-蛋白质相互作用所代表的联系整合到特定数据集中,可能有助于识别特定条件下的基因与基因之间的关系。这一概念已在一些研究中得到探讨,比如Zand的研究,他们提出了在蛋白质-蛋白质相互作用的连线上传播基因表达信息的想法。另一项研究展示了如何将蛋白质-蛋白质相互作用网络与一组差异表达基因结合使用,以找到一组关键基因子集,这些基因子集能够解释非小细胞肺癌患者的生存率。进一步的研究表明,这种整合能够增强单细胞RNA测序的基础任务,例如降维、数据缺失插补以及细胞间相似性分析。

自然语言处理领域和大语言模型的最新进展也已被引入到单细胞RNA测序领域。像scBERT聚焦于有监督细胞注释等特定任务,而最近的一些研究则致力于开发在包含数千万个细胞的超大型单细胞RNA测序图谱上训练的基础模型。尽管这些模型在捕捉图谱规模的动态变化方面表现出色,但当应用于特定数据集时,它们往往需要使用有监督损失(通常使用细胞标签)进行微调,而在大多数新测序的数据集中可能并不具备这些细胞标签。因此,需要一种能够应用于无标签的中小规模单细胞RNA测序数据集的无监督框架。

最近,李等人引入了一种基于图神经网络(GNN)的方法(PINNACLE),通过整合单细胞RNA测序图谱和蛋白质-蛋白质相互作用网络来学习gene embedding。他们的研究展示了在图谱层面使用深度学习框架将单细胞RNA测序数据与蛋白质-蛋白质相互作用信息相结合的优势。在这里,作者旨在展示在数据集层面基于深度学习整合蛋白质-蛋白质相互作用信息的优势,同时利用细胞相似性来有效地增强所学习到的嵌入表示。

scNET:一种结合基因与基因、细胞与细胞之间关系,以同时学习基因和细胞嵌入表示的方法。scNET一方面基于蛋白质-蛋白质相互作用来学习图神经网络,另一方面基于细胞与细胞之间的表达相似性来学习。通过在这两个网络上交替传播基因表达信息,scNET旨在同时平滑噪声,并学习特定条件下的基因和细胞嵌入表示。它还引入了一种基于边注意力的机制来优化细胞间关系图(KNN),放宽了每个细胞连接数量固定的常见假设,因为这一假设可能与真实的生物系统不相符。研究结果表明:

  • scNET在阐明基因与基因之间的关系方面超越了传统的插补方法和先进的统计模型。
  • 还展示了scNET细胞嵌入表示的潜力,它能够实现更好的细胞聚类。
  • 最后,证明了scNET重建的基因表达在识别不同细胞类型和生物学条件下差异富集的通路方面具有明显优势。

scNET概览

scNET:一个深度学习框架,它采用双视图编码器将单细胞RNA测序(scRNA-seq)数据与蛋白质-蛋白质相互作用(PPI)信息相结合(图1)。这种方法旨在阐明基因与基因之间以及细胞与细胞之间的关系。补充图2至3提供了针对不同数据集规模的模型损失收敛情况和运行时间的分析。作者还证明了scNET能够依据基因表达数据捕捉蛋白质-蛋白质相互作用网络信息(补充图5)。
fig1

  • 图1:首先,将蛋白质-蛋白质相互作用(PPI)网络、K近邻(KNN)图以及基因表达数据输入到双视图编码器中(虚线部分)。随后,利用图注意力层来提取细胞和基因的潜在表征。接着,使用内积解码器来重建网络连接,而全连接层则负责重建基因表达。然后,利用注意力系数对K近邻图进行修剪,以优化模型性能。

supfig2

  • 补充图2:不同数据集规模下的网络重建损失和基因表达损失评估。评估了不同数据集规模(细胞周期数据集含300个细胞、小鼠胶质母细胞瘤(GBM)数据集含9000个细胞以及小鼠大脑皮层数据集含64000个细胞)下的网络重建损失和基因表达损失情况。评估在250个训练轮次(epoch)内进行。(a)网络重建损失:分析表明,更大的数据集往往会收敛到更低的损失值。此外,所有数据集的损失在大约第150个训练轮次时几乎都达到了收敛。(b)基因表达重建损失:结果显示,更大的数据集不仅能实现更低的损失值,而且收敛速度更快。对于含有9000个或64000个细胞的数据集,在第100个训练轮次之后,损失的减少幅度变得不那么明显了。

supfig3

  • 补充图3:scNET运行时间评估。对scNET在三个数据集(细胞周期数据集含300个细胞、小鼠胶质母细胞瘤(GBM)数据集含9000个细胞以及小鼠大脑皮层数据集含64000个细胞)上的运行时间进行评估。每个数据集都运行了250个训练轮次(epoch)。分析表明,scNET的运行时间与数据集的规模大致呈线性关系。具体来说,对于一个含有10000个细胞的数据集,运行时间约为100分钟,而对于更大的、含有64000个细胞的数据集,大约需要650分钟。这些结果表明,scNET对于处理更大规模的数据集仍然是可行的,尤其是因为更大的数据集往往在较少的训练轮次内就能收敛。

supfig5

  • 补充图5:scNET能够捕捉蛋白质-蛋白质相互作用(PPI)网络信息。在五个数据集上进行的PPI预测的曲线下面积(AUROC)得分情况。最后两列(以橙色突出显示)展示了在引入随机噪声或对基因表达数据进行置换后得到的性能指标。

数据

数据集

本研究使用了以下单细胞RNA测序(scRNA-seq)数据集:

  1. 人类疟疾相关B细胞:该数据集包含7044个细胞,涉及19374个基因。
  2. 小鼠视觉皮层:该数据集包含65540个细胞,涉及25187个基因。
  3. 人类细胞系:该数据集包含902个细胞,涉及来自三种不同人类细胞系(H1975、H2228、HCC827)的16468个基因。
  4. 小鼠胚胎干细胞(mES)细胞周期:该数据集包含275个细胞,涉及23506个基因,每个基因都根据其细胞周期状态(G1期、G2/M期、S期)进行了标记。
  5. 胶质母细胞瘤(GBM)小鼠模型:该数据集包含来自对照组和处理组(抑制P-选择素)样本的9175个细胞,涉及18531个基因。
  6. 乌索斯金(Usoskin)的背根神经节(DRG):该数据集包含799个细胞,涉及25334个基因,这些细胞来自小鼠的背根神经节,并通过与其功能相关的已知标记物进行了鉴定。
  7. 胶质瘤肿瘤反应性CD8+ T细胞:该数据集包含来自小鼠胶质瘤肿瘤微环境的4231个T细胞,涉及14202个基因。所有T细胞均为H-2Kb-SIINFEKL右旋糖酐四聚体阳性(Dext+)。

数据预处理

scRNA-seq 表达数据使用标准的Scanpy软件包(版本1.9.1)流程进行了预处理。简而言之,该流程包括以下步骤:

  1. 对数归一化:将每个细胞的特征计数除以该细胞的总计数,再乘以一个缩放因子,最后应用对数变换(log1p)。
  2. 基于方差的筛选:如下文所述,scNET学习重建数据集中表现出高方差的一部分表达基因。为了识别这些基因,作者使用了highly_variable_genes函数,该函数在进行均值归一化后计算每个基因的方差。采用默认的阈值来获得最终的高变基因子集。
  3. 降维:从经过缩放归一化的数据矩阵中计算PCA和UMAP,其中每个特征的归一化表达在所有细胞间进行缩放。用于聚类的主成分数量是根据一个 elbow plot 手动选择的,该图展示了每个额外向量对方差的贡献。
  4. K近邻(KNN)图:为数据中的每个细胞计算KNN,在降维后的主成分分析空间中构建K近邻图。
  5. 缩放:作者发现模型在经过缩放的基因表达数据上表现最佳。因此,作者对经过对数归一化的表达数据应用了标准缩放,使每个基因的表达均值为0,标准差为1。

作者使用了一个带权的人类蛋白质-蛋白质相互作用(PPI)网络,过滤掉得分低于0.5的边。过滤后的网络涵盖14136个蛋白质和111790个相互作用。作者进一步移除了所有与scRNA-seq数据中未表达的基因(在所有细胞中表达量均为零)相对应的节点。为了从归一化的基因表达矩阵构建节点特征矩阵,作者过滤掉了在网络中没有边表示或者在scRNA-seq数据中未表达的基因。

scNET模型架构

编码器

scNET通过学习基因和细胞嵌入表示,将scRNA-seq数据与蛋白质-蛋白质相互作用(PPI)数据相结合,这种嵌入表示能够有效捕捉网络结构和表达信息,同时降低数据的噪声水平。具体而言,编码器架构(图1)包括交替执行以下操作:首先应用一个卷积层,以在相似细胞之间聚合信息,从而填补缺失值并降低噪声水平;然后在转置矩阵上应用另一个卷积层,以在相互作用的蛋白质之间聚合信息。随后,将聚合后的信息通过一个图注意力层,以生成潜在表征。

图卷积层

卷积层会为每个节点聚合来自相邻节点的信息,以形成输出节点的特征向量。形式上,可以定义 G = ( V , E ) G=(V,E) G=(V,E) N = ∣ V ∣ N=|V| N=V,邻接矩阵 A ∈ R N × N A\in R^{N\times N} ARN×N,节点特征为 X ∈ R N × F X\in R^{N\times F} XRN×F。单个卷积层的输出为 σ ( A ^ δ ( X ) W ) \sigma(\widehat{A}\delta(X)W) σ(A δ(X)W),其中 σ \sigma σ是激活函数, δ \delta δ是dropout, A ^ = D ‾ − 0.5 A ‾ D ‾ 0.5 \widehat{A}=\overline{D}^{-0.5}\overline{A}\overline{D}^{0.5} A =D0.5AD0.5 D D D A ‾ = A + I \overline{A}=A+I A=A+I的对角度矩阵。

图注意力层

通过纳入注意力机制,模型通过学习图中每条边的权重来优化细胞间相似性图(K近邻图,KNN)。这些权重表示在重建细胞 i i i的基因表达时,模型赋予细胞 j j j的重要程度。作者认为,每个细胞都与固定数量K的其他细胞相似这一假设是随意的,并且可能会导致纳入错误的边。因此,scNET将学习到的注意力权重作为修剪低质量边的依据。

形式上,对于输入特征 X ∈ R N × F X\in R^{N\times F} XRN×F,注意力层会聚合来自所有节点的信息,以便对给定的节点进行评分,同时考虑到网络中的邻近关系。对于度数为 d d d的节点 i i i,定义如下:
eq1
其中, N ( i ) N(i) N(i)是节点 i i i的邻居,注意力为:
eq2
其中, W 1 , . . . , W 4 W_{1},...,W_{4} W1,...,W4都是可学习的矩阵。

在实现过程中,作者对原始的激活函数进行了修改,用一个 sigmoid 函数取代了逐节点的 softmax 函数。这一改动意味着边的得分不会按节点进行归一化处理,这样一来,就可以像下面所描述的那样,剔除全局得分较低的边。

基于注意力的KNN剪枝

使用KNN来平滑细胞间的表达情况,这一做法假定数据集中的每个细胞都与任意选取的 K K K个其他细胞相似。然而,这一假设在生物学上可能并不准确,因为来自不同细胞群体和状态的细胞在数据中的数量可能各不相同。为了解决这个问题,作者使用学习得到的注意力系数来修剪低质量的边。具体来说,计算并将图的新边集定义如下:
eq3
其中, P 10 P_{10} P10是第10个百分点, β \beta β取值在 ( 0 , P 10 ) (0,P_{10}) (0,P10)之间。

因此,注意力层的引入不仅有助于模型为细胞和基因学习到更有意义的潜在表征,还能让模型为K近邻(KNN)网络学习到一种新的拓扑结构,从而使该图能够更好地捕捉细胞与细胞之间的关系。

完整的自编码架构

最终的自编码器模型如图1所示。首先,将K近邻(KNN)图、蛋白质-蛋白质相互作用(PPI)网络和基因表达矩阵输入到一个三层双视图编码器中(细胞的图卷积网络三层和基因的图卷积网络三层)。接下来,利用单层图注意力机制来学习两种密集的潜在表征(细胞注意力层使用KNN图,基因注意力层使用PPI网络),一种用于基因,另一种用于细胞。最后,应用内积解码器来重建PPI网络,并使用一个三层全连接解码器来重建基因表达。

在训练过程中,还会按照固定的间隔时间,如上文所述对KNN图进行修剪。训练结束后,模型会输出基因和细胞的嵌入表示,以及修剪后的KNN图和重建的基因表达。损失函数综合了PPI网络重建损失和基因表达重建损失。

内积解码器定义为 A ^ = σ ( Z Z T ) \widehat{A}=\sigma(ZZ^{T}) A =σ(ZZT),其中, Z Z Z是gene的latent表征,记 Z p o s Z_{pos} Zpos为PPI的边集, Z n e g Z_{neg} Zneg为随机采样的负样本边集,并且 ∣ Z p o s ∣ = ∣ Z n e g ∣ |Z_{pos}|=|Z_{neg}| Zpos=Zneg,则:
eq4
如上文所述,我们首先选择数据集中表现出显著差异的一部分基因子集。我们将这个子集记为 M v M_v Mv。然后,对该子集中的基因使用均方误差(m.s.e.)损失函数来训练模型。具体来说,定义如下:
eq5
其中, M ^ v \widehat{M}_{v} M v是重建表达。

最后损失为两个损失之和。并用超参数加权。

网络评估

为了评估研究中各种网络的预测能力,作者聚焦于已知的功能组,比如在京都基因与基因组百科全书(KEGG)通路中所定义的那些功能组。一般来说,每个功能组都按照三分之二和三分之一的比例划分为训练集和测试集。然后,采用带重启的随机游走方法,将功能组成员关系从训练组传播到所有其他节点。这些传播分数被用作成员关系分数,以计算每个网络的曲线下面积(AUC)分数。具体而言,给定邻接矩阵 W W W和节点度矩阵 D D D,传播过程使用以下公式进行迭代计算:
eq6
其中 F 0 F^{0} F0表示输入二元成员向量, W ′ = D − 0.5 W D 0.5 W'=D^{-0.5}WD^{0.5} W=D0.5WD0.5是网络的归一化邻接矩阵。为了考虑节点的中心性,通过将最终得到的向量 F ∞ F^{\infty} F的每个元素除以用全为1的输入向量所得到的传播分数,来对该向量进行归一化处理。

此外,为了评估边数不同的网络,作者实施了一个无拓扑结构的评估框架,将每个网络的预测能力与一组随机排列图进行比较。为此,使用了一个包含230个与各种疾病相关的基因列表的数据库。对于每个网络,我们生成了30个保持度不变的随机网络,以建立一个背景分布。基因列表被划分为训练集和测试集,并且使用由训练集作为种子的网络传播来预测测试集。为每个网络计算一个曲线下面积(AUC)分数,并使用随机网络上的分数分布将其转换为z分数。

实现和训练

该模型使用Python和PyTorch(版本2.1.1)深度学习框架来实现。具体而言,图卷积层是使用torch-geometric软件包(版本2.1.1)来实现的。在训练过程中,为了优化模型,采用了学习率为0.0001的Adam优化器,并使用了 1 × 1 0 − 5 1×10^{-5} 1×105的L2正则化。

该模型在谷歌Colab Pro+平台上进行训练,使用的是NVIDIA A100 40GB GPU。训练过程包含250个训练轮次(epoch),并且每10个训练轮次后,就会计算曲线下面积与坐标点(AUROC)值。在每个阶段,都会保存模型以及在测试集上获得最高AUC分数的K近邻(KNN)网络。每30个训练轮次对KNN网络进行一次修剪,每次修剪的最大比例为10%。为了避免细胞图断开连接,在修剪后的图中每个细胞至少保留五条边。

为了确定超参数的值,使用了一个参考数据集,并以受试者工作特征曲线作为评估指标进行了交叉验证。发现平衡蛋白质-蛋白质相互作用(PPI)重建损失和基因表达损失是最佳的。修剪比例超过10%也会导致性能下降。最后,观察到表达解码器的三层结构产生了最佳结果。通过在更多数据集上对模型进行训练,得到了一致的结果,这进一步证明了该模型的稳健性。

编码器的维度由数据集中的基因数量和细胞数量决定。由于不同数据集之间的基因数量相对保持一致,所以主要的变量就变成了细胞数量。为了降低空间复杂度并在训练过程中引入更多的随机性,我们提出了一种将KNN图的边随机分割成小批次的策略。每一批使用原始边的一部分,通常是五分之一或十分之一,具体取决于数据集的大小。这种方法有效地降低了训练过程中的随机存取存储器使用量,同时保持了足够的性能。

对于细胞数量相对较多(超过10000个)的数据集,模型的规模对于标准图形处理单元来说变得太大了。因此,在这种情况下,将细胞划分为独立的子集(或小批次)以便进行迭代处理。在这种设置下,不会生成新的综合修剪后的KNN图,但模型仍然会学习将细胞嵌入到一个统一的空间中,并纳入优化后的细胞间关系。作者表明,在这个过程之后没有明显的批次效应(补充图1)。对于包含少于100000个细胞的数据集,通常将数据划分为十个子集。

supfig1

  • 补充图1:胶质母细胞瘤(GBM)数据集的scNET细胞嵌入的UMAP可视化,细胞分别按训练小批次(图a)和细胞类型(图b)进行着色。该数据集包含约9000个细胞,被划分为10个训练小批次,每个小批次有900个细胞。结果表明,scNET有效地将细胞嵌入到一个联合学习空间中,最大程度地减少了批次效应。

结果

在接下来的章节中,将验证scNET的基因和细胞嵌入表示、精简后的K近邻(pruned KNN)图以及重建的基因表达谱的优势和准确性。实验将表明,所学习到的基因嵌入空间能够有效地捕捉功能基团和共同注释信息,而细胞嵌入表示则能够捕捉到更精准的细胞间相似性。此外,还将证明,重建后的基因表达谱在单细胞RNA测序的标准差异通路富集分析中具有显著优势。

scNET的gene embedding捕捉功能注释

为了评估所获得的嵌入空间,首先测试了嵌入空间中的相关性是否能准确反映已知的生物学注释和功能。作者计算了每对基因的基因本体(GO)语义相似性值和共嵌入系数。然后,分析了这些值之间绝对相关性的分布情况,并将scNET的结果与其他单细胞RNA测序(scRNA-seq)数据插补工具的结果进行了比较,这些工具包括sct.transform、SAVER、Magic、DeepImpute、细胞类型特异性相关工具CSCORE、图嵌入工具scLINE以及新发布的基础模型scGPT。scNET嵌入空间具有显著更高的平均相关性,平均约为0.17,部分基因的相关性高达0.5。与未利用先前信息的方法相比,这一改进有力地表明了深度整合生物网络与基因表达数据的优势(图2a)。

接下来,作者通过对基因进行聚类来评估嵌入空间对功能注释的捕捉能力。使用k均值算法,聚类数量范围设定为20到80,测定显著富集一个或多个基因本体(GO)术语的聚类所占的百分比。富集分析使用基因集富集分析(GSEA)工具进行计算。在所有聚类范围内都观察到了显著的改善(图2b),这证实了scNET基因嵌入增强的聚类效果。相关结果见图2c-e,展示了基于计数法(图2c)、scLINE(图2d)和scNET(图2e)基因嵌入空间的基因UMAP降维图。基因根据k均值聚类(K = 30)的结果进行着色。与原始计数法和scLINE相比,scNET嵌入能够捕捉到更小、定义更明确的聚类。在补充图6中,展示了一项分析,旨在表明scNET的基因潜在空间能够捕捉不同细胞类型的不同动态变化。

最后,为了进一步证明scNET基因嵌入能更好地捕捉功能信息,作者训练了一个三层多层感知器分类器,以根据嵌入来预测基因本体注释。聚焦于在数据集中至少有50个基因表达的基因本体注释,以避免稀疏性问题。该分类器在五折交叉验证设置下,使用多标签交叉熵损失进行训练。对于每一折,计算受试者工作特征曲线下面积(AUROC)和精确召回率曲线下面积(AUPR)。作者还将scNET与其他三种方法(scGPT、scLINE和DeepImpute)进行了基准测试。结果表明,scNET嵌入在基因表示中有效地捕捉了功能注释信息(扩展数据图1)。
fig2

  • 图2:a,不同方法的基因本体(GO)语义相似性值分布,每个箱线图展示了第25、50和75百分位数。b,基因本体富集簇的百分比与簇数量的关系。c - e,根据不同方法(计数法-c、scLINE-d和scNET-e)得到的基因表示的 UMAP 图。基因按照30均值聚类的结果进行着色。

supfig6

  • 补充图6:已知免疫和癌症通路的评估。对于每条通路,展示了每个嵌入空间内所有基因簇中的最大富集程度(-log(P value) )。富集分数已使用最小最大规范化(MinMax scaler)进行了缩放处理。

edfig1

  • 扩展数据图1

scNET的共嵌入网络捕捉生物学通路

接下来,作者利用学习到的表征构建了一个共嵌入网络,该网络整合了蛋白质-蛋白质相互作用(PPI)和共表达信息。作者利用人类疟疾相关B细胞数据集,在原始空间和嵌入空间中计算成对的绝对值相关性,并将阈值分别设置在第50、75、95和99百分位数处。然后使用莱顿算法(Leiden algorithm)来估计每个网络的模块化值(图3a)。显然,在所有分辨率下,基于scNET嵌入空间的网络比其原始空间的对应网络具有更高的模块化程度。由于当以第99百分位数作为阈值时,两个网络都达到了最大模块化值,因此在后续分析中采用了这个特定的阈值。图3b展示了所得共嵌入网络的一个代表性子网络。
fig3a-b

  • 图3:a,不同相关性阈值下的模块化结果。b,带有注释的莱顿聚类的共嵌入基因网络的代表性子网络。

为了进一步评估所得网络,采用了先前描述的方法,该方法试图量化网络重建京都基因与基因组百科全书(KEGG)通路的能力。聚焦于数据集中包含至少30个表达基因的通路。每条通路都被分为训练集和测试集,训练集中的每个基因都被赋值为1。然后,利用这些成员值进行传播,为其余基因打分,并评估测试集的重建质量。结果如图3c所示,scNET的表现优于先前的方法。
fig3c

  • 图3c:不同方法预测KEGG的AUPR

在本文研究中,KEGG预测的输入主要包括特定的基因数据集、训练集基因成员值和网络结构信息,输出则是用于评估网络重建KEGG通路能力的相关分数,具体如下:

  • 输入
    • 基因数据集:聚焦于数据集中包含至少30个表达基因的KEGG通路。这些通路基因是后续分析的基础,为预测提供了基因数据来源 。
    • 训练集基因成员值:将每个KEGG通路分为训练集和测试集,训练集中的每个基因被赋值为1,这些成员值后续会用于传播,以对其他基因进行打分 。
    • 网络结构信息:构建的共嵌入网络等网络结构信息也作为输入。在评估过程中,网络的拓扑结构、节点连接关系等会影响基因成员值的传播,进而影响预测结果。
  • 输出:主要输出是用于评估网络重建KEGG通路能力的分数。具体通过将训练集基因成员值进行传播,为测试集中的基因打分,根据这些分数评估测试集的重建质量,得到如AUPR值(平均精度召回率曲线下面积)等评估指标 。文中图3c展示了不同方法在KEGG预测中的AUPR值,scNET在预测中表现更优,这些分数和指标就是KEGG预测的输出,用于衡量网络在重建KEGG通路方面的性能 。

细胞聚类评估

接下来,利用来自Usoskin等人的两个数据集(包含背根神经节(DRG)的各种感觉神经元)以及Tian等人的数据集(包含三种不同的癌细胞系),评估scNET优化细胞间相似性的能力。这些数据集包含真实标签(与分析流程确定的后处理注释不同),使其适合用于基准测试。

对于每个数据集,作者将scNET的性能与基于原始计数的聚类方法、scLINE、已有的插补方法MAGIC以及两个最先进的基础模型scGPT和GeneFormer进行比较。对于基础模型,作者使用预训练版本,不再进行更多微调,因为scNET和其他方法都是以无监督的方式运行(这一点很重要,因为对于新生成的单细胞RNA测序数据集,真实的细胞标签往往不可用)。为了系统地评估嵌入空间,我们在一系列分辨率(0到1)下使用莱顿聚类算法,并将最大调整兰德指数(ARI)与原始细胞标签进行比较(图4m-n)。观察到,与所有其他方法相比,scNET在两个数据集上都获得了最高的ARI。基础模型在这些数据集上的表现也相对较弱,这表明尽管它们旨在在大型图谱规模的数据集上表现良好,但在零样本设置下应用于未见过的数据集时,其区分细胞类型的能力会下降。这凸显了在单细胞RNA测序领域开发无监督的单数据集框架作为大型基础模型补充方法的必要性。
fig4m-n

重建表达提高通路分析

这里假设,重建的基因表达不仅能准确反映原始基因表达谱,还能整合来自蛋白质 - 蛋白质相互作用(PPI)网络的更多信息。这种整合有望更详细地描述单细胞数据中的通路激活和复杂生物过程。

为了验证重建的基因表达数据的质量,作者首先评估重建的基因表达是否能准确捕捉不同细胞群体(cluster)独特的表达动态。作者将scNET应用于GL261a小鼠脑肿瘤模型数据集,并对不同细胞群体的重建基因marker进行可视化(图5a)。重建后的细胞根据其细胞类型进行聚类,这表明scNET有能力区分不同的细胞类型。此外,标记基因的表达值与各自的细胞群体表现出很强的相关性。例如,Cd4和Cd8a的表达能准确对应各自的T细胞亚群;Cd14能有效地识别巨噬细胞;P2ry12能精确地识别小胶质细胞。

接下来,作者利用重建的基因表达数据评估差异基因表达分析的质量。假设通过整合蛋白质-蛋白质相互作用(PPI)网络,重建的基因表达能够更好地捕捉细胞簇和细胞群体之间的差异通路,从而改进生物学推断。聚焦于数据集中的四个主要细胞群体:T细胞、巨噬细胞、小胶质细胞和癌细胞。作者应用了标准的差异基因表达分析方法,并利用基因集富集分析(GSEA),根据每个细胞簇中差异表达的基因来计算富集的京都基因与基因组百科全书(KEGG)通路。

在图5b中,作者展示了每个细胞群体中富集程度最高的前20条通路。scNET重建的数据能够捕捉到与每个细胞群体相关的通路。例如,T细胞在 “T细胞受体信号通路”、“人类T细胞白血病病毒1感染” 和 “TH17细胞分化” 等通路中显著富集。小胶质细胞在与神经元相互作用相关的通路中富集,如 “谷氨酸能突触” 和 “逆行内源性大麻素信号传导”。癌细胞在增殖和代谢通路中富集,如 “细胞周期”、“氧化磷酸化” 和 “DNA复制”,同时也在与神经退行性疾病相关的通路中富集,如 “帕金森病”,这与胶质母细胞瘤(GBM)中已知的机制相似性相符。巨噬细胞在与其功能相关的通路中表达上调,如 “溶酶体”、“细胞因子 - 细胞因子受体相互作用” 和 “吞噬体”,这些通路也与小胶质细胞共享。
fig5ab

  • 图5:a,重建的细胞类型相关标记基因图。b,在对scNET重建的基因表达进行差异基因表达分析后,不同细胞类型中富集程度排名前20的通路热图。

相关文章:

scNET:整合scRNA-seq和PPI用于学习基因和细胞的embedding

scRNA-seq 技术的最新进展为深入了解各种组织的异质性提供了前所未有的视角。然而,仅靠基因表达数据往往无法捕捉和识别细胞通路和复合物的变化,因为这些变化在蛋白质水平上更容易被察觉。此外,由于scRNA-seq数据存在高噪声水平和零膨胀等固有…...

第四天 开始Unity Shader的学习之旅之Unity中的基础光照

Unity Shader的学习笔记 第四天 开始Unity Shader的学习之旅之Unity中的基础光照 文章目录 Unity Shader的学习笔记前言一、我们是如何看到这个世界的1. 光源2.吸收和散射3.着色 二、标准光照模型1. 自发光2. 高光反射① Phong模型② Blinn-Phong模型 3.漫反射4.环境光 总结 前…...

Lustre 语言的 Rust 生成相关的工作

目前 Lustre V6 编译器支持编译生成的语言为C语言。但也注意到,以 Rust 语言为生成目标语言,也存在若干相关工作。 rustre(elegaanz) 该项工作为 Lustre v6 语言的解析器,使用 Rust 语言实现。生成 Lustre AST。 项…...

std::endl为什么C++ 智能提示是函数?

在使用vscode 的C智能提示后&#xff0c;输入endl 后&#xff0c;提示的却是std::endl(basic_ostream<CharT, Traits> &os), 感觉比较奇怪&#xff0c;各种代码里都是直接用的std::endl 啊&#xff0c; 这里怎么变成函数了呢&#xff1f; 在 C 中&#xff0c;std::en…...

大模型在肺血栓栓塞症风险预测及临床方案制定中的应用研究

目录 一、引言 1.1 研究背景与意义 1.2 研究目的与创新点 二、肺血栓栓塞症概述 2.1 定义与流行病学 2.2 发病机制与病理生理 2.3 临床表现与诊断方法 三、大模型技术原理与应用现状 3.1 大模型技术基础 3.2 在医疗领域的应用进展 3.3 选择大模型进行肺血栓栓塞症预…...

用一颗红黑树同时封装出map和set

目录 1. 红黑树源代码 2. 红黑树模版参数的控制 3. 红黑树节点当中存储的数据 4. 模板参数中仿函数的增加 5. 正向迭代器的实现 6. set模拟实现 7. map的模拟实现 8. 封装后的代码 8.1 红黑树的代码 8.2 正向迭代器的代码 8.3 set的代码 8.4 map的代码 1. 红黑树源…...

C Sharp上位机需要掌握哪些知识?

学历不高就不要有进大厂的想法了&#xff0c;你就在上位机这一条路上走到底。 .NET桌面程序开发有WPF和Winform。Winform比较简单&#xff0c;拖拖控件&#xff0c;难度不大&#xff0c;这种级别的开发&#xff0c;新人上手一个月就够了&#xff0c;但是不会有哪家公司专门招聘…...

【自学笔记】Spark基础知识点总览-持续更新

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 Apache Spark基础知识点总览目录简介核心组件Spark SQLDataFrame与Dataset APIRDD&#xff08;弹性分布式数据集&#xff09;Spark StreamingMLlib&#xff08;机器…...

基于Spring Boot的智能停车计费系统的设计与实现(LW+源码+讲解)

专注于大学生项目实战开发,讲解,毕业答疑辅导&#xff0c;欢迎高校老师/同行前辈交流合作✌。 技术范围&#xff1a;SpringBoot、Vue、SSM、HLMT、小程序、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容&#xff1a;…...

数据不外传!通过内网穿透实现绿联NAS远程访问的安全配置方案

文章目录 前言1. 开启ssh服务2. ssh连接3. 安装cpolar内网穿透4. 配置绿联NAS公网地址 前言 大家好&#xff0c;今天要带给大家一个超级酷炫的技能——如何让绿联NAS秒变‘千里眼’&#xff0c;通过简单的几步操作就能轻松实现内网穿透。想象一下&#xff0c;无论你身处何地&a…...

地理信息可视化技术大全【WebGIS 教程一】

前言&#xff1a; 在当今数据驱动的时代&#xff0c;地理信息技术&#xff08;GIS&#xff09;和空间数据可视化已成为科学研究、商业决策和智慧城市建设的重要工具。随着Web技术的快速发展&#xff0c;基于浏览器端的地图渲染和地理信息处理能力显著增强&#xff0c;各类开源与…...

huggingface datasets库中的load_dataset方法-------deepseek问答记录

1. 基本介绍 Hugging Face 的 datasets 库中的 load_dataset 方法是用于加载数据集的核心工具&#xff0c;它支持从多种来源&#xff08;如本地文件、Hugging Face Hub、内存数据等&#xff09;加载数据集&#xff0c;并返回标准的 Dataset 或 DatasetDict 对象&#xff0c;方…...

网络故障排查

网络故障排查 导航 一、电脑端排查 引起网络故障的原因有很多&#xff0c;我按照实际处理遇到的问题的频率还有检测所需时间尽可能短开始进行排查&#xff0c;建议按下面的顺序来排查 电脑网口 首先&#xff0c;应该检查该网口是否正常闪烁黄灯 如果没有亮灯&#xff0c;抓…...

字符串匹配问题(strs)(信息学奥赛一本通-1355)

【题目描述】 字符串中只含有括号 (),[],<>,{},判断输入的字符串中括号是否匹配。如果括号有互相包含的形式&#xff0c;从内到外必须是<>,(),[],{}&#xff0c;例如。输入: [()] 输出:YES&#xff0c;而输入([])&#xff0c;([)]都应该输出NO。 【输入】 第一行为…...

MD2Card(markdown)

MD2Card 介绍&#xff1a; 1.小红书爆款神器&#xff0c;Markdown笔记秒转高颜值卡片 2.实时预览15种主题&#xff0c;自动拆长文&#xff0c;图片/SVG导出即用 3.零门槛不登录&#xff0c;免费无限生成&#xff0c;专治排版废和设计手残党 网站地址&#xff1a; https://md2…...

企业微信实现“关联外部选项“、“审批控件中的外部选项“

企业微信实现"关联外部选项"、"审批控件中的外部选项" 需求背景参考文档 需求背景 公司自定义了运营成本审批流程的模板&#xff0c;需要调用公司API获取小区列表(关联外部选项)&#xff0c;将选中的值带入到审批里面来。开通配置权限请参考下面参考文档&…...

[实操]MySQL8 读写分离后,配合redis的方法与步骤

之前的文章已经提供相关MySQL8的主从与读写分离操作&#xff0c;为了在高并发场景中有更多的实际用处&#xff0c;于是编写该文章说明MySQL8在实现读写分离后结合Redis的方法与步骤。 以下是文中提到的中间件及其版本&#xff1a; 以下是更新后的表格&#xff0c;包含了中间件…...

深度学习技术与应用的未来展望:从基础理论到实际实现

深度学习作为人工智能领域的核心技术之一&#xff0c;近年来引起了极大的关注。它不仅在学术界带来了革命性的进展&#xff0c;也在工业界展现出了广泛的应用前景。从图像识别到自然语言处理&#xff0c;再到强化学习和生成对抗网络&#xff08;GAN&#xff09;&#xff0c;深度…...

JavaScript中匿名函数与箭头函数之间的区别与联系

什么是匿名函数和箭头函数&#xff1f; 匿名函数&#xff1a;顾名思义&#xff0c;是没有名称的函数&#xff0c;通常在定义时立即使用或赋值给变量。它是JavaScript中传统的函数定义方式。 箭头函数&#xff1a;是ES6&#xff08;ECMAScript 2015&#xff09;引入的一种新语法…...

ARCGIS PRO SDK ProWindow自定义窗口DataGrid控件的应用

ProWindow 是ArcGIS Pro SDK中用于创建自定义窗口的关键类&#xff0c;帮助开发者扩展ArcGIS Pro的功能和用户界面。这些窗口可以嵌入到ArcGIS Pro的主界面中&#xff0c;提供与核心功能的无缝集成。 创建一个窗体xml&#xff1a; controls:ProWindowxmlns"http://schem…...

高效PDF翻译解决方案:多引擎支持+格式零丢失

软件介绍 在AI翻译工具大行其道的今天&#xff0c;传统翻译软件市场逐渐饱和&#xff0c;但专业领域的深度需求依然存在。本文推荐的PDF翻译工具凭借20余种专业翻译接口&#xff0c;为学术文献、技术文档等复杂内容提供更精准的翻译服务&#xff0c;在保留文档原始排版的同时…...

Spring Boot

一.SpringBoot配置文件 有三种种配置文件&#xff1a;application.yaml&#xff0c;application.yml&#xff0c;application.properties&#xff0c;但是我们一般使用yml结尾的配置文件其它一般不用。 1.properties 配置⽂件说明 ①基本语法和配置文件的读取 // 配置文件的…...

使用CSS3实现炫酷的3D翻转卡片效果

使用CSS3实现炫酷的3D翻转卡片效果 这里写目录标题 使用CSS3实现炫酷的3D翻转卡片效果项目介绍技术要点分析1. 3D空间设置2. 核心CSS属性3. 布局和定位 实现难点和解决方案1. 3D效果的流畅性2. 卡片内容布局3. 响应式设计 性能优化建议浏览器兼容性总结 项目介绍 在这个项目中…...

Excel 小黑第19套

对应大猫19 鼠标右键标签修改颜色 将文本文件导入工作表中&#xff1a;数据 -现有链接 -浏览更多 选择员工档案 &#xff08;若预览是乱七八糟的文字&#xff0c;将文件格式改成简体中文&#xff09;分隔符号看题目要求 注意&#xff1a;将身份证号设置为文本格式 将一列数…...

IDEA批量替换项目下所有文件中的特定内容

文章目录 1. 问题引入2. 批量替换项目下所有文件中的特定内容2.1 右键项目的根目录&#xff0c;点击在文件中替换2.2 输入要替换的内容 3. 解决替换一整行文本后出现空行的问题4. 增加筛选条件提高匹配的精确度 更多 IDEA 的使用技巧可以查看 IDEA 专栏&#xff1a; IDEA 1. 问…...

从零构建大语言模型全栈开发指南:第二部分:模型架构设计与实现-2.1.1自注意力机制(Scaled Dot-Product Attention)的逐行代码实现

👉 点击关注不迷路 👉 点击关注不迷路 👉 点击关注不迷路 文章大纲 2.1.1 自注意力机制(Scaled Dot-Product Attention)的逐行代码实现1. 自注意力机制的核心原理与数学表达1.1 注意力计算的三元组:`Q, K, V`2. 逐行代码实现与解析2.1 输入嵌入与权重矩阵初始化2.2 完…...

深入理解 Collections.emptyList():优雅处理空列表的利器!!!

&#x1f680; 深入理解 Collections.emptyList()&#xff1a;优雅处理空列表的利器&#xff01;&#x1f527; 大家好&#xff01;&#x1f44b; 今天我们来聊聊 Java 中一个非常实用但容易被忽视的小工具——Collections.emptyList()。&#x1f389; 如果你经常需要返回一个…...

数据结构-ArrayList

文章目录 1. 线性表2. 顺序表3. ArrayList4. ArrayList的问题以及思考4.2 增容的性能消耗问题4.3 空间浪费问题 1. 线性表 线性表&#xff08;Linear List&#xff09;是n个具有相同特性的数据元素的有限序列。线性表是一种在实际中广泛使用的数据结构&#xff0c;常见线性表&…...

[快乐学坊_2] 后端api测试

[快乐学坊management_1] With Cursor | Mysql设计 | 服务接口设计与开发 在 apifox 测试发现&#xff0c;500 报错&#xff0c;因为AI 辅助配置的数据库有点问题我们要来进行更改一下 重连一下我们上一篇文章中 配置好了的 mysql 然后就可以观察到&#xff0c;连接 成功了。我…...

盛铂科技国产SLMF315超低相位噪声频率综合器介绍

SLMF315频率综合器简介&#xff1a; 盛铂科技SLMF315超低相位噪声频率综合器的频率范围覆盖200MHz至15GHz。频率的最小步进仅为0.1Hz&#xff0c;在不考虑频率精度的情况下频率步进可达0.04Hz。SLMF315内部采用多环路设计从而获得极优秀的相位噪声特性&#xff0c;频率输出为1…...

用 pytorch 从零开始创建大语言模型(六):对分类进行微调

用 pytorch 从零开始创建大语言模型&#xff08;六&#xff09;&#xff1a;对分类进行微调 6 微调用于分类6.1 微调的不同类别6.2 准备数据集6.3 创建数据加载器6.4 使用预训练权重初始化模型6.5 添加分类头部6.6 计算分类损失和准确率6.7 在监督数据上微调模型6.8 使用LLM进…...

Android Compose 层叠布局(ZStack、Surface)源码深度剖析(十三)

Android Compose 层叠布局&#xff08;ZStack、Surface&#xff09;源码深度剖析 一、引言 在 Android 应用开发领域&#xff0c;用户界面&#xff08;UI&#xff09;的设计与实现一直是至关重要的环节。随着技术的不断演进&#xff0c;Android Compose 作为一种全新的声明式…...

计算机网络-2 物理层

【考纲内容】 &#xff08;一&#xff09;通信基础 信道、信号、带宽、码元、波特、速率、信源与信宿等基本概念&#xff1b; 奈奎斯特定理与香农定理&#xff1b;编码与调制&#xff1b; 电路交换、报文交换与分组交换&#xff1b;数据报与虚电路① 视频讲解 &#xff08;二…...

如何解决微服务调用链性能问题(优化 JVM 配置,降低 Full GC 频率)

1. 问题背景 在微服务架构中&#xff0c;服务之间的调用链较长&#xff0c;且频繁的远程调用可能导致性能瓶颈。同时&#xff0c;JVM 的 Full GC&#xff08;Full Garbage Collection&#xff09;频繁发生会导致应用暂停时间过长&#xff0c;影响用户体验。具体问题表现为&…...

深入理解 C# 反射 的使用

总目录 前言 反射是.NET框架中一个强大的特性&#xff0c;允许程序在运行时检查和操作类型信息。通过反射&#xff0c;开发者可以动态地创建对象、调用方法、访问属性等&#xff0c;为程序提供了极大的灵活性。本文将详细讲解C#反射的使用方法及其应用场景。 一、什么是反射&a…...

Java面试第十三山!《设计模式》

大家好&#xff0c;我是陈一。如果文章对你有帮助&#xff0c;请留下一个宝贵的三连哦&#xff5e; 万分感谢&#xff01; 一、设计模式入门指南 1. 什么是设计模式&#xff1f; 设计模式是可复用的解决方案模板&#xff0c;用于解决软件开发中常见的架构问题。如同建筑领域的…...

AI+视频赋能智慧农业:EasyCVR打造全域可视化农场监管平台

随着科技的飞速发展&#xff0c;传统农业正加速向智慧农业转型&#xff0c;农场管理也迎来了前所未有的变革机遇。在这一进程中&#xff0c;如何有效整合先进的信息技术&#xff0c;实现农场的精准化、智能化管理&#xff0c;成为了摆在农场主和农业管理者面前的关键课题。 基于…...

wsl2配置xv6全解(包括22.04Jammy)

文章目录 获取xv6源代码Ubuntu20.04 Version安装指令成功测试参考MIT2021年官方文档 24.04 Version安装指令成功测试参考MIT2024年官方文档 Ubuntu 22.04没有官方文档&#xff1f; 配置大体流程1. 卸载原本qemu&#xff08;如果之前安装了&#xff09;2. clone qemu官方源代码&…...

区块链技术的应用场景和优势

区块链技术是一种分布式数据库技术&#xff0c;它的应用场景和优势包括但不限于以下几点&#xff1a; 金融领域&#xff1a;区块链可以用于数字货币的交易和结算&#xff0c;实现去中心化的金融交易&#xff0c;提供更安全、透明和高效的支付方式&#xff1b;另外&#xff0c;也…...

基于深度学习的相位调制算法步骤

1.构建网络结构 2.制作数据集 3.训练网络 4.引入评价指标 5.迭代优化 总结 通过以上步骤&#xff0c;可以实现基于深度学习的相位调制算法&#xff1a; 使用 U-Net 构建神经网络。 生成数据集并训练网络。 使用训练好的网络预测相位分布。 通过相关系数 γ 评估调制效果&…...

Linux的I2C总线的原理和结构详解

Linux的I2C总线的原理和结构讲解 我前面基本已经吃透了Platform总线&#xff0c;关于Platform总线的原理和结构&#xff0c;详情见下面三篇博文&#xff1a; https://blog.csdn.net/wenhao_ir/article/details/145023181 https://blog.csdn.net/wenhao_ir/article/details/14…...

深入理解Linux中的SCP命令:使用与原理

在Linux系统中&#xff0c;文件传输是一个常见的操作。无论是将文件从本地传输到远程服务器&#xff0c;还是从远程服务器下载文件到本地&#xff0c;SCP&#xff08;Secure Copy Protocol&#xff09;都是一个非常实用的工具。本文将详细介绍SCP命令的使用方法&#xff0c;并深…...

【Android】VehiclePropertyAccess引起CarService崩溃

VehiclePropertyAccess引起CarService崩溃 VehiclePropertyAccess VehiclePropertyAccess属性&#xff0c;用于定义车辆属性的访问权限。权限包括 读&#xff1a;READ&#xff0c;只可以读取&#xff0c;不能写入。 VehiclePropertyAccess:READ写&#xff1a;WRITE&#xf…...

小米AX6000解锁ssh避坑笔记

经过网上教程不断尝试,终于解锁成功。 环境信息: Win10 笔记本 + AX210 WIFI6E网卡Vmware 16小米AX60000.可以先备份路由器的配置信息 1.首先降级小米AX6000到1.0.55 1.0.55下载路径 升级时注意: 清除当前所有用户配置升级完成后,选择不自动升级2.升级完成后,笔记本重新…...

论华为 Pura X 折叠屏性能检测

在科技浪潮中&#xff0c;折叠屏手机以其创新形态掀起市场热潮。华为 Pura X 作为华为最新折叠手机&#xff0c;承载前沿科技与精湛工艺&#xff0c;成为行业焦点。它融合先进折叠屏技术与优质材质&#xff0c;致力于打破传统手机使用边界&#xff0c;为用户开启全新体验。但产…...

关于极端场景下,数据库更新与 MQ 消息一致性保障方案的详细总结

目录 一、核心问题场景 二、RocketMQ 事务消息方案 1. 核心机制 2. 执行流程 3. 关键优势 4. 局限性 三、消息表方案 1. 核心机制 2. 执行流程 3. 关键优势 4. 局限性 四、方案对比与选择 五、实施建议 六、总结 一、核心问题场景 当数据库更新后,若 MQ 消息未…...

面试题精选《剑指Offer》:JVM类加载机制与Spring设计哲学深度剖析-大厂必考

一、JVM类加载核心机制 &#x1f525; 问题5&#xff1a;类从编译到执行的全链路过程 完整生命周期流程图 关键技术拆解 编译阶段 查看字节码指令&#xff1a;javap -v Robot.class 常量池结构解析&#xff08;CONSTANT_Class_info等&#xff09; 类加载阶段 // 手动加载…...

透析主流CSS预处理器的区别

Sass 和 Less 是两种主流的 CSS 预处理器&#xff08;CSS Preprocessor&#xff09;&#xff0c;它们通过扩展原生 CSS 的语法&#xff0c;提供了变量、嵌套、混合&#xff08;Mixins&#xff09;、函数等高级功能&#xff0c;帮助开发者编写更高效、可维护的样式代码。以下是它…...

Redis 本地安装

首先安装&#xff1a; https://redis.io/docs/latest/operate/oss_and_stack/install/install-redis/install-redis-from-source/ 进入root目录 tar -xzvf redis-stable.tar.gz cd redis-stable make然后 install sudo make install最后可以直接启动 redis-server但是此时启…...

Android Launcher3 首屏图标锁定技术方案解析

一、需求背景与技术挑战 在Android 13系统定制开发中&#xff0c;需实现Launcher首屏图标固定功能。该需求需在以下技术维度进行突破&#xff1a; 拖拽事件拦截机制&#xff1a;需精准识别拖拽目标区域 布局层级判定&#xff1a;准确识别第一屏的布局标识 跨屏操作限制&…...