【Super-resolved q-space learning of diffusion MRI】

news2024/10/27 3:27:15

扩散MRI的超分辨q-空间学习

摘要:

背景:扩散磁共振成像 (dMRI) 提供了一种强大的工具,可以无创地研究活人大脑中的神经结构。然而,它对神经结构的重建性能依赖于 q 空间中扩散梯度的数量。高角度(HA)dMRI需要较长的扫描时间,限制了其在临床实践中的应用,而直接减少扩散梯度的数量会导致神经结构的低估。

目的:我们提出了一种基于深度压缩感知的 q 空间学习 (DCS-qL) 方法来根据低角度 dMRI 估计 HA dMRI。

方法:在 DCS-qL 中,我们通过展开解决压缩感知问题的近端梯度下降过程来设计深层网络架构。此外,我们利用提升方案来设计具有可逆变换特性的网络结构。为了实现,我们应用自监督回归来增强扩散数据的信噪比。然后,我们利用语义信息引导的基于补丁的映射策略进行特征提取,该策略引入多个网络分支来处理具有不同组织标签的补丁。

结果:实验结果表明,所提出的方法可以在重建 HA dMRI 图像、神经突取向分散和密度成像的微观结构指数、纤维取向分布和纤维束估计等任务上产生有希望的性能。

结论:所提出的方法比竞争方法实现了更准确的神经结构。

介绍:

      扩散磁共振成像 (dMRI) 提供了一种非侵入性方法来研究活人大脑中的底层微观信息。1 获取的 dMRI 信号反映了水分子在磁场梯度方向上的运动趋势,2 可以进行计算纤维定向分布 (FOD) 并实现纤维束成像。3 此外,一些先进的 dMRI 生物物理模型,例如神经突定向分散和密度成像 (NODDI)4,5 球面平均技术 (SMT),2 以及体细胞和神经突密度成像(SANDI)6 是为特定组织微观结构分析而开发的。 NODDI 是一种实用的扩散 MRI 技术,用于在临床 MRI 扫描仪上估计体内树突和轴突的微观结构复杂性。 SMT 是一种数学工具,用于使用梯度编码的每个壳内的扩散信号的粉末平均来获得多室模型的方向不变参数。 SANDI 方法利用将水扩散纳入细胞体和神经突的模型,从而能够表征细胞和神经突密度。这些技术是神经疾病诊断、术前计划和神经连接分析的有效工具。

     组织结构的准确估计通常需要大量的扩散梯度(即 q 空间中的角度测量)。否则,一些复杂的光纤结构,例如交叉、扇形、瓶颈等,可能无法可靠地重建。7高角分辨率扩散成像 (HARDI) 通过扫描大量扩散编码梯度来解析复杂的光纤配置。 8然而,dMRI 的总扫描时间随着扩散梯度的数量急剧增加,限制了其在临床实践中的使用。 9 另一方面,直接减少扩散梯度会导致重建的纤维束和组织微观结构的扭曲,如图所示图 1。因此,需要设计 q 空间超分辨方法,允许根据低角度 (LA) 扩散数据估计高角度 (HA) 扩散数据。

在这里插入图片描述

图 1 HA dMRI 数据(72 个梯度)和 LA dMRI 数据(18 个梯度)的图示,及其对 FOD 估计、纤维束成像和微观结构指数 (NODDI) 下游任务的影响。 NODDI 总结了细胞外液的体积分数(各向同性体积分数,ISO)、细胞内神经突分散度(方向分散指数,OD)和神经突密度(体积分数,IC)。球壳(q 空间)中的每个点对应于在该扩散梯度下测量的 dMRI 结果。 dMRI,扩散磁共振成像; FOD,纤维取向分布; HA,高角; LA,低角; NODDI,神经突定向分散和密度成像.

      q 空间超分辨方法解决了不适定反问题,该问题需要一些先验信息来约束空间解。先驱研究利用变换域中的稀疏性来重建 q 空间中的压缩扩散数据。例如,已提出采用球形脊波变换的压缩传感框架来减少扩散梯度的数量。10 Tristan 等人。引入球面小波变换来稀疏地表示 HARDI 的方向分布函数。11 Schwab 等人。利用扩散数据的可分离空间角度结构来构建一组全局稀疏 HARDI 基础。12 这些方法的稀疏解通常通过具有理论收敛保证的优化过程来求解。然而,这些预先指定的稀疏变换由于忽略了收集的数据信息而没有足够的能力提取q空间中的特征。

      最近,深度学习技术被引入来减少扩散梯度的数量。 13年的开创性工作首先建立了q空间深度学习(q-DL)框架,该框架利用具有三个隐藏层的端到端多层感知器(MLP)来估计12倍减少的扩散方向的微观结构组织图。考虑到 q-DL 仅在每个体素的基础上进行训练,文献 14 中的方法通过将周围体素与卷积层合并来利用空间连续性。 15 将采样的 4-D 扩散数据转换为 6 个 3-D 扩散数据并输入它们分别分成六个用于 q 空间超分辨率的 3-D 子网络。16 利用用于 q 空间学习的两级网络,在网络设计中集成了扩散信号的稀疏性和基于块的映射。后来,17 引入了一种注意力模型来利用其他模态的信息进行不确定性 q 空间学习。

      在本文中,我们的目标是通过减少扩散梯度的数量来提高 dMRI 的时间效率,同时保持重建神经结构的准确性。为了实现这一目的,我们提出了一种基于深度CS的超分辨率q空间学习(DCSqL)框架,其中网络架构是通过展开近端梯度下降(PGD)过程来设计的,用于解决CS重建问题。我们将基于块的映射策略与灵活的提升方案相结合,以实现自适应稀疏变换,其中正向变换和反向变换的权重可以联合学习。我们还利用高级语义信息来指导低级特征提取,首先对 T1 加权图像中的组织区室进行分类,然后对分类的组织斑块使用指定的网络分支。此外,考虑到LA扩散数据的信噪比较低,引入自监督回归算子对输入扩散数据进行预处理。综上所述,本文的贡献可概括如下:

1\. 我们提出从用于 q 空间超分辨率学习的 PGD 算法展开的 PGDNet。

2\. 我们在 PGDNet 中加入了提升方案来学习 q 空间扩散数据的可逆变换。

3.我们通过将分类的组织块输入到指定的网络分支来利用组织信息。

4.我们引入自监督回归来增强网络的特征提取能力。

在本文的其余部分安排如下。第 2 节给出了超分辨率 qspace 学习问题的背景。第 3 节详细介绍了所提出的方法,然后是第 4 节中的绩效评估。第 5 节和第 6 节分别介绍了讨论和结论。

背景:

dMRI 数据集是大小为 R(W×H×S×C )的 4D 信号,其中 W 、H、S 和 C 分别指宽度、高度、切片和梯度维度。每个 HA 扩散数据可以被视为在 q 空间中捕获的一组 W × H × S 大小的体积。如图 1 所示,q 空间中的每个球形网格点代表磁梯度的应用方向,对应于在指定扩散梯度参数下捕获的一个 dMRI 体积。

考虑到聚合矩阵 x ∈ R(C×(WHS) )等测量,测量过程可以表述为:

在这里插入图片描述

其中A和Ψ代表作用于扩散梯度维度(q空间)和空间维度(k空间)的测量算子;n是与y大小相同的采集噪声。当以Ψ为单位矩阵时,式(1)给出了q空间子采样过程:

在这里插入图片描述
本文重点关注方程(2)的 q 空间重建问题,因为仅仅减少扩散梯度的数量是 dMRI 采集的一般临床配置,以提高时间效率。存在满足方程(13)的多个解决方案,使得q 空间重建不适定反问题.

压缩感知理论表明,通过引入额外的先验知识,可以根据子采样测量准确地估计稀疏信号

在这里插入图片描述

其中 λ 是平衡保真度项(第一项)和正则化项(第二项)的正则化参数。通过解决这样的优化问题,可以从LA扩散数据y重建HA扩散数据x。

在方程(3)中,Qx 给出了 x 相对于某个可逆变换 Q 的变换系数。已经做出了一些努力,在傅里叶域、梯度域、 或脊波域中应用扩散信号的稀疏变换。 所选择的先验参数或优化参数通常是手工设计的,并且预定义起来非常困难。在本文中,我们将压缩传感理论与深度神经网络架构的设计并利用提升方案方法来学习可逆变换。

在这里插入图片描述

图 2 所提出的 DCS-qL 框架概述,用于从 LA dMRI 重建 HA dMRI。我们引入多个网络分支来处理具有不同组织标签的斑块。 dMRI,扩散磁共振成像; HA,高角; LA,低角。

方法和材料:

所提出的方案旨在根据 LA dMRI 估计 HA dMRI。我们首先使用自回归算子来预处理输入。然后,我们应用由分割信息引导的基于补丁的映射,从 LA 补丁中获取 HA 补丁。用于映射的端到端网络是基于PGD算法设计的。所提出方案的概述如图 2 所示。

自监督回归算子:

当使用有限数量的梯度时,测量的扩散数据通常面临低信噪比的约束。因此,我们引入了一种自回归算子作为线性降噪器来预处理输入的 LA dMRI.

在这里插入图片描述

其中 Φ 包含 C 部分 Φ={Φ1, ... , ΦC}。如图 3 所示,每个 Φi 从除第 i−th 之外的所有其他方向体积估计出第 i−th 扩散梯度方向体积,即

其中每个 Φi 包含一个大小为 m × m × m × (C − 1) × 1 的卷积层。 Φi 的参数通过最小化自监督损失来训练,如下所示,

在这里插入图片描述
在这里插入图片描述

                        图 3 自监督回归算子 Φ(⋅) 的图示。每个 Φ(⋅) 对应一个梯度方向。

仅依赖于输入 y。第 4.5 节中的消融研究表明,这种自监督回归算子可以有效提高重建 HA 扩散结果的准确性。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

图 4 基于补丁的映射策略的图示。 PGD​​Net 输出的中心体素被组合起来形成最终的 HA dMRI。 dMRI,扩散磁共振成像; HA,高角; PGD​​ 网;近端梯度下降网络。
  1. 由分割信息引导的基于补丁的映射:

    我们采用基于补丁的映射策略,如图 4 所示,该策略考虑空间邻近上下文来推断扩散梯度维度中缺失的信息。具体来说,我们将预处理后的LA扩散数据在空间上划分为N个重叠且连续的局部块{̄yi}N i=1,其空间和梯度大小分别为m*m*m和C。即滑动步长为1×1×1空间维度。我们的方法可以重建HA扩散斑块{xi}N i=1,其空间尺寸保持不变,而通道尺寸(即扫描角度尺寸)增长到C’。重建的 HA 块具有与输入 LA 块相同的空间位置。

    传统的基于深度的方法使用一个网络对扩散上采样进行建模,而不考虑底层的组织成分。在这项工作中,我们采用了斑块映射的集成策略,它利用组织信息来增强T特征提取能力。我们通过Python(DIPY)中的3D/4D+成像库中的隐马尔可夫随机场模型分割T1加权结构图像。分割将每个体素分为三种类型的组织,即灰质 (GM)、白质 (WM) 和脑脊液 (CSF)。因此,我们分别引入了 WM、GM 和 CSF 特有的三个网络分支,它们具有相同的网络结构但训练参数不同。设计的结构 PGDNet(⋅) 在 3.3 节中有详细介绍。整个端到端基于补丁的映射过程可以表述为:
    在这里插入图片描述

    其中Mask(⋅)给出组织类型,Ind(⋅)给出中心体素的位置索引,δ(⋅)是克罗内克函数。 PGD​​Net1(⋅)、PGDNet2(⋅) 和 PGDNet3(⋅) 分别用于处理 WM、GM 和 CSF。最后,我们提取并联系xi的中心体素以获得完整的HA扩散数据。

  2. 用于 q 空间超分辨学习的 PGD 网络:

2.1. PGD算法:

    我们的 PGDNet 的目标是使用给定的自回归 4D LA 数据 ̄ y 重建 HA 数据 x。从求解方程 (3) 的优化过程中展开的网络结构是我们方法的核心。为了方便起见,下面的符号̄x和̄y指代具有相同空间位置的某个HA斑块和LA斑块。

    可以通过在以下更新步骤之间迭代的 PGD 算法来求解方程 (3):

在这里插入图片描述

    其中 k 是迭代索引,ρ 是步长。形式上,正则化项 λ‖Q x‖1 的近端映射定义为

在这里插入图片描述

    其闭式解是严格凸的

在这里插入图片描述

    在方程(11)中, ηλ(⋅) 是收缩算子,由下式给出

    ̃ Q 是 Q 的倒数,满足

在这里插入图片描述

    一个令人满意的解决方案需要知道测量矩阵 A、合适的变换 Q 和优化参数,这些都是手动选择的挑战。为了实现自适应变换和参数,我们将 PGD 迭代映射到相关的网络结构。

在这里插入图片描述

    图 5 说明了所提议的 PGDNet 的一个阶段。 PGD​​ 网;近端梯度下降网络。

PGDNet structure:

    该网络由多个阶段组成,每个阶段对应一次 PGD 迭代。图 5 显示了所提出的 PGDNet 的一个阶段。在我们的网络中,每个阶段包含两个阶段,其中第一个阶段对应于与方程(8)相关的梯度下降操作,而第二个阶段对应于与方程(9)相关的近端操作。

    对于第一阶段,我们应用大小为 3 × 3 × 3 × C × C′ 的卷积和具有相同参数的转置卷积来模拟测量矩阵 A 及其转置矩阵 A⊤,在不同网络阶段中其参数相同。对于第二阶段,我们应用具有软阈值的基于提升的变换来实现可学习的稀疏先验,其中变换参数、步长和阈值是可学习的并且在不同的网络阶段中是不同的。

2.2. 基于提升的变换:

    提升方案是一种用于构建离散小波变换的灵活技术,可以进一步与神经层集成。在一个提升步骤中,输入信号 r 首先通过惰性小波分成不相交的分量 r1 和 r2 。 然后,利用适当的预测算子 P 和更新算子 U,可以通过以下方式获得正向和反向变换结果:

在这里插入图片描述

    其中变换矩阵 Q 和逆矩阵 ̃ Q 表示为

在这里插入图片描述

    由于Q和̃Q可以保证方程(13),因此我们根据方程(14)设计正变换和逆变换的网络组件。我们利用“Conv+Relu+Conv”层来模拟预测算子 P 和更新算子 U,其参数在一个网络阶段的正向和反向变换中共享。

Training loss:

    设χ={(̄y1,x1),...,(̄yn,xn)}为n对LA斑块和相关的HA斑块,其中LA斑块是从预处理的LA dMRI数据中提取的。自监督回归算子的训练如方程(14)所示。此外,我们将 χ 分为三个数据集 χ1、χ2 和 χ3,分别对应于 WM、GM 和 CSF 组织。我们利用 DIPY 中的隐马尔可夫随机场模型进行组织分割。

    我们使用以下损失分别训练三个网络分支

在这里插入图片描述

    其中 θk 指的是第 k−th 分支的网络参数。我们从训练数据中排除了任何完全位于颅内空间之外的补丁对,这些补丁对是由 MRtrix 中的颅骨剥离算法确定的。

实验设置:

所提出的方法与一些 q-DL 方法进行了比较,包括 MLP、13 高效亚像素卷积神经网络(ESPCN)、26 3D 卷积神经网络(3D-CNN)、14 SARNet、15 SR-q-DL、16 和概率 SR-q-DL (prob SR-q-DL)。16 我们测试了所提出的方法在原始 dMRI 数据和 dMRI 下游任务上的性能,包括 NODDI、FOD 和纤维束分割的微观结构成像。对于原始 dMRI 数据和 NODDI 的重建,我们应用峰值信噪比(PSNR)和结构相似性(SSIM)来评估重建的质量。通过凸优化加速微结构成像 (AMICO) 框架应用于 NODDI.5 中的参数估计。对于 FOD 估计任务,我们使用具有 642 个顶点的约束球形反卷积 (CSD) 提取 FOD 结果。利用三个指标来评估准确性,包括归一化平方和误差 (NSSE)、平均角度误差 (AAE) 和假峰率 (RFP)。 28 对于纤维束分割任务,纤维利用 TractSeg 框架根据 FOD 结果生成束。29 针对选定的 10 个区域计算 q 空间学习结果的分割掩模与黄金标准之间的 Dice 系数 (DSC),然后对所有测试对象进行平均。

NODDI:

显微结构成像是一类可以将原始扩散图像中的特定模式与神经元组织的特定属性相关联的技术。4 NODDI是一种用于量化细胞外液分数体积(各向同性体积分数, ISO)、细胞内神经突离散度(取向分散指数、OD)和神经突密度(体积分数, IC)的技术。在这一部分中,我们比较了不同深度q-空间学习方法从估计的HA扩散图像中计算的NODDI结果。

表2分别表示ISO、OD和IC的平均PSNR和SSIM结果。LA dMRI给出了没有使用任何q-空间学习方法的基线NODDI结果。所提出的方法在NODDI上获得了比其他竞争方法更高的PSNR和SSIM分数,表明了更好的估计质量。图7给出了降采样因子为1 / 3时估计的NODDI图的代表性轴视图,同时给出了参考的金标准。图7b还给出了SR - q - DL、3D - CNN、SARNet和本文提出的DCS - qL在图7a中的盒子区域的误差图。可以看出,所提出的方法与金标准很相似,一般比竞争方法的误差更小。

讨论:
结合扩散信号的稀疏性,我们提出了一种基于深度压缩感知的超分辨q-空间学习方法,通过减少扫描梯度的数量从LA扩散数据中估计HA扩散数据。与竞争方法相比,我们的方法在原始数据估计和FOD重建、纤维追踪和微结构指标的下游任务中取得了更好的结果。 我们进行了不同数量的扩散梯度的实验。结果表明,重建误差随着扩散梯度数量的增加而减小,并且在这些不同的实验设置中,所提出的方法优于竞争方法。我们还将所提出的方法独立地应用于不同b值的数据集,得到了相似的结果。对高b值的要求也会导致dMRI数据的信噪比降低,因为高b值需要更长的回波时间。10在这项工作中,我们探索了一种自监督回归算子来预处理输入的扩散数据。这些结果表明,所提出的方法适用于各种临床成像设置。 我们观察到重建误差具有异质性,表明靠近大脑边缘的扩散数据更难重建。可能的原因是大脑皮层附近的神经纤维直径在几微米左右,空间相关性很难被模型很好地学习。为了缓解这个问题,我们可以提取皮层周围的区域,使用独立网络学习相邻扩散方向之间的相关性,或者添加辅助损失函数来区分该区域是否靠近大脑皮层。 目前基于学习的方法所使用的d MRI数据来源于特定的采集协议,因此本文提出的q-空间超分辨率方法不能直接应用于一些不同协议的临床数据集。为了解决这个问题,一个可能的改进是收集来自不同采集设备的丰富数据来训练一个大模型,并对其进行微调以适应不同的设备。 所提出的方法隐式地基于这样的假设,即从训练集中的被试学到的信息可以传递给其他被试。然而,这种假设对于不同的患者可能并不一定成立,例如,来自病理受试者的体素可能表现出与健康受试者完全不同的微观结构。由于高质量的异常数据需要耗费大量的精力和时间来获取,因此对其在不同患者群体中的普遍适用性的评估仍是未来的研究方向。在具有多样性和良好分布的训练数据集的情况下,所提出的方法可能能够泛化多种情况,因为足够的样本可以包括各种类型的组织结构。此外,值得注意的是对训练数据的要求。

结论:
本文提出了一种基于深度压缩感知的超分辨q空间学习方法,以减少dMRI的扫描方向,同时保持重建神经结构的准确性。利用相邻体素与中心体素在空间上相关的先验知识,所提出的网络可以根据下采样的 dMRI 数据准确估计 HA dMRI 数据。网络架构是基于PGD过程设计的,嵌入提升方案以实现自适应和可逆变换。为了进一步提高特征提取能力,我们引入了自回归算子来增强扩散数据的信噪比,并利用不同的网络分支来处理具有不同组织标签的补丁。我们进行了大量的实验来测试所提出的方法在 dMRI 下游任务上的性能。 HCP 数据集上的结果表明,所提出的方法比竞争方法实现了更准确的神经结构。
在未来的工作中,我们将继续优化我们的方法,以提高大脑边缘区域的估计精度,并探索在临床疾病数据中重建病变部位的可行性。在临床 dMRI 重建中使用 DCS-qL 的流程可以作为从临床 dMRI 采集中进行高质量脑连接分析和脑疾病检测的有用工具,从而最终通过常规临床环境中的连接组分析来推动精准神经学。

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

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

相关文章

【北京迅为】《STM32MP157开发板嵌入式开发指南》-第六十七章 Trusted Firmware-A 移植

iTOP-STM32MP157开发板采用ST推出的双核cortex-A7单核cortex-M4异构处理器,既可用Linux、又可以用于STM32单片机开发。开发板采用核心板底板结构,主频650M、1G内存、8G存储,核心板采用工业级板对板连接器,高可靠,牢固耐…

(二十三)Java反射

1.反射概念 反射允许对成员变量,成员方法和构造方法的信息进行编程访问,通俗理解就是允许从类里面拿东西,用途有提示词等,如下所示都是通过反射实现的 所以,学习反射就是学习从字节码class文件中获取成员信息并且对其…

流媒体协议.之(RTP,RTCP,RTSP,RTMP,HTTP)(一)

闲着没事做,记录一下开发项目用过的协议,项目中,大多是是实时显示播放的,通过私有协议,传输到上位机,实时播放,延时小于200ms,仿照这些协议,定义的数据格式。如果用这些协…

C语言实现Go的defer功能

之前笔者写了一篇博文C实现Go的defer功能,介绍了如何在C语言中实现Go的defer功能,那在C语言中是否也可以实现这样的功能呢?本文就将介绍一下如何在C语言中实现Go的defer功能。 我们还是使用C实现Go的defer功能中的示例: void te…

一文彻底理解 JavaScript 解构赋值

一、基本概念 为什么需要解构呢,先来看一个例子: const student {name: ZhangSan,age: 18,scores: {math: 19,english: 85,chinese: 100} };function displayInfo(student) {console.log(name:, student.name);console.log(math:, student.scores.mat…

排序(二)快速排序的多种实现方法

目录 一.快速排序 1.左右指针法 2.挖坑法 3.前后指针法 4.非递归实现 5.快速排序特性总结 二.整体代码 1.Sort.h 2.Sort.c 3.Stack.h 4.Stack.c 5.test.c 一.快速排序 1.左右指针法 我们找到一个key,begin去找比key大的值,end去找比key小的值,找到了就将begin和end…

从头学PHP之运算符

关于运算符的图片均来自网络,主要是自己写太麻烦了,程序是个简化自己工作量的方式,能复制粘贴就不要手写了(建议初期还是多写写,加深下记忆)在这里我就偷个懒,图片涉及到侵权及时,请…

阻塞队列——Java

一、前言 阻塞队列也是队列的一种,但是带有阻塞性质。但是这种阻塞情况是极端情况,在生产、消费者模型中,当生产者与消费者不协调时,就会出现阻塞情况。 二、特性 线程安全 阻塞特性 若队列为空,当尝试出队列时&am…

深度解析跨境支付之跨境支付与国内支付对比

跨境支付和国内支付的不同点主要体现在5个方面: 1.交易币种不同 这一点其实有两层含义 第一层含义是二者的支付行为的交易币种不同,国内支付基本是人民币但是跨境支付可以是人民币也可以是外币,具体交易币种要取决于收款方要求的交易币种。…

数据结构(8.4_1)——简单选择排序

简单选择排序 每一趟在待排序元素中选取关键字最小的元素加入有序子序列 代码实现 //简单选择排序 void SelectSort(int A[], int n) {for (int i 0; i < n - 1; i) {//一共进行n-1趟int min i;//记录最小元素位置for (int j i 1; j < n; j)//在A[i...n-1中选择最…

RabbitMQ延迟消息插件安装(Docker环境)

背景&#xff1a;当我们需要使用RabbitMQ发送延迟消息的时候&#xff0c;为了简化延迟消息发送的实现&#xff0c;一般都会给RabbitMQ安装延迟插件"rabbitmq_delayed_message_exchange" 如下会说明使用Docker启动的RabbitMQ容器如何安装延迟消息插件。 1. Docker启动…

用接地气的例子趣谈 WWDC 24 全新的 Swift Testing 入门(一)

概述 从 WWDC 24 开始&#xff0c;苹果推出了全新的测试机制&#xff1a;Swift Testing。利用它我们可以大幅度简化之前“老态龙钟”的 XCTest 编码范式&#xff0c;并且使得单元测试更加灵动自由&#xff0c;更符合 Swift 语言的优雅品味。 在这里我们会和大家一起初涉并领略…

docker配置mysql8报错 ERROR 2002 (HY000)

通过docker启动的mysql&#xff0c;发现navicat无法连接&#xff0c;后来进入容器内部也是无法连接&#xff0c;产生以下错误 root9f3b90339a14:/var/run/mysqld# mysql -u root -p Enter password: ERROR 2002 (HY000): Cant connect to local MySQL server through socket …

LINUX1.5.1(vim编辑器)

vim: 1. vim 2.vim /PATTERN vi编辑器与三种常见的模式&#xff1a; 复制 粘贴 剪切 删除 编辑 退出 保存 行间跳转 显示行号 查找替换 命令模式&#xff1a;光标的移动&#xff0c;使用快捷键&#xff0c;复制&#xff0c;粘贴&#xff0c;删除等基础操作 编辑模式&…

【mysql进阶】4-7. 通用表空间

通⽤表空间 - General Tablespace 1 通⽤表空间的作⽤和特性&#xff1f; ✅ 解答问题 通⽤表空间是使⽤ CREATE tablespace 语法创建的共享InnoDB表空间 通⽤表空间能够存储多个表的数据&#xff0c;与系统表空间类似也是共享表空间&#xff1b; 服务器运⾏时会把表空间元数…

【C++】智能指针:解决内存泄漏、悬空指针等问题

⭐️个人主页&#xff1a;小羊 ⭐️所属专栏&#xff1a;C 很荣幸您能阅读我的文章&#xff0c;诚请评论指点&#xff0c;欢迎欢迎 ~ 目录 前言一、RAII二、智能指针原理三、auto_ptr四、unique_ptr五、shared_ptr第一步&#xff1a;实现出RAII的框架第二步&#xff1a;如何…

信息收集-shodan专题一

shodan介绍 一、shodan简介 1.工作原理解析&#xff1a; 2.优缺点 3.功能 二、安装shodan流程 三、shodan使用方法 1.搜索 1.1.search 搜索 1.2. count 总数 1.3. download 下载与解析 2. 指定查看 2.1 指定IP的详细信息 2.2 hostname: 搜索指定的域名 2.3 port:…

百度智能云推出11.11活动,各大云厂商香港服务器优惠活动汇总

2024年双十一活动就要来了&#xff0c;作为百度集团旗下的云智能服务平台——百度智能云今年率先开始了11.11狂欢购活动&#xff0c;上新促销活动的动作如此之快&#xff0c;难道是百度云要大发力了&#xff1f;感觉今年百度智能云要比阿里云、腾讯云、硅云、华为云等厂商更加卖…

k8s 综合项目笔记

综述 这篇笔记主要是为了记录下自己写 k8s 综合项目的过程。 由于自己之前已经写过简单的开发和运维项目&#xff0c;所以这里就结合一下&#xff0c;在搭建 k8s 集群后安装运维常用服务&#xff0c;比如 ansible 和 prometheus&#xff0c;用 NFS 实现数据存储同步&#xff0c…

[Ansible实践笔记]自动化运维工具Ansible(二):Ansible的playbook及角色

Ansible playbook&#xff08;剧本&#xff09; 详情请参考[Ansible实践笔记]自动化运维工具Ansible&#xff08;一&#xff09;&#xff1a;初探ansible&ansible的点对点模式 文章目录 Ansible playbook&#xff08;剧本&#xff09;介绍核心字段环境配置案例&#xff1…