SoFiA 2 用户手册

一、 介绍

随着下一代厘米波射电望远镜(包括ASKAPASKAPASKAP、MeerKATMeerKATMeerKAT、WSRT/ApertifWSRT/ApertifWSRT/Apertif)将要进行新一代大规模盲中性氢测量以及快速、全自动、准确和可靠的寻找源,对这些测量对于科学来说至关重要。SoFiASoFiASoFiA(Serra et al.2015)的找源应用程序旨在满足中性氢社区的源查找需求,并已成为光谱线数据事实上的标准源查找工具。

虽然SoFiASoFiASoFiA引入了大量新的算法,这些算法彻底改变了中性氢源的查找,但仍有一些问题影响了其对大数据量的适用性及其长期可维护性:

  • SoFiASoFiASoFiA的很大一部分是用PythonPythonPython编写的,这导致了不必要的大量执行时间以及内存消耗。

  • SoFiASoFiASoFiA依赖于大量的第三方库,这些库往往由于不同库版本之间缺乏兼容性。

  • SoFiASoFiASoFiA的不同部分是用不同的编程语言编写的,包括PythonPythonPython,C++C++C++和CythonCythonCython,使得软件难以维护。

为了解决这些问题,特别是速度和内存问题,SoFiASoFiASoFiA团队决定用C语言重新实现软件中最关键、最强大的组件。这个新版本被命名为sofia2,和它的前一个版本一样,已经在GitHub1GitHub^1GitHub1上提供了。

1.1 安装

SoFiA2SoFiA2SoFiA2的安装非常简单,因为目前只有一个依赖项wcslib2wcslib^2wcslib2, 它是在基于像素的坐标和世界坐标之间转换所必需的。此外,GUNCGUN CGUNC编译器(gccgccgcc)必须可用,尽管其他支持C99C99C99标准的gccgccgcc兼容编译器(包括clangclangclang)也可以使用。SoFiA2SoFiA2SoFiA2可以通过运行compile.shcompile.shcompile.sh 基本目录中的shellshellshell脚本。这将编译源代码并生成名为sofiasofiasofia的可执行文件。通过将−fopenmp-fopenmp−fopenmp标志添加到compile.shcompile.shcompile.sh脚本调用。

重要的是要确保编译器在编译过程中不会产生错误消息,否则SoFiA2SoFiA2SoFiA2将无法正确编译并且可能无法运行。此外,应遵循安装过程结束时显示的说明,将全局别名或符号链接设置为sofiasofiasofia可执行文件。

SoFiA2SoFiA2SoFiA2使用OpenMPOpenMPOpenMP广泛使用多线程。由于OpenMPOpenMPOpenMP支持本机内置在GCCGCCGCC编译器中,因此不需要额外的库或依赖项,默认情况下启用多线程。如果用户没有另外指定,SoFiA2SoFiA2SoFiA2将使用环境变量OMP_NUM_THREADSOMP\_NUM\_THREADSOMP_NUM_THREADS来控制OpenMPOpenMPOpenMP使用的线程数。如果未设置,这通常会默认使用机器上所有可用的CPU内核,从而最小化管道的运行时间。SoFiA2SoFiA 2SoFiA2使用的最大核心数可以使用pipeline.threadspipeline.threadspipeline.threads 选项。这在某些情况下可能是可取的,以减少SoFiA2引起的CPU负载。


图1:SoFiA2的流程图,显示管道中的各个步骤(黄色)、SoFiA2接受的输入数据立方体(蓝色)和可以生成的不同输出文件(紫色)。图1:SoFiA 2的流程图,显示管道中的各个步骤(黄色)、SoFiA 2接受的输入数据立方体(蓝色)和可以生成的不同输出文件(紫色)。图1:SoFiA2的流程图,显示管道中的各个步骤(黄色)、SoFiA2接受的输入数据立方体(蓝色)和可以生成的不同输出文件(紫色)。

1.2 参数文件

SoFiA2SoFiA2SoFiA2通过所谓的参数文件进行控制,这些文件用于选择或取消选择SoFia2SoFia2SoFia2提供的不同算法,并控制它们各自的设置。因此,参数文件是由一个或多个参数设置组成的简单文本文件,每个参数设置必须位于单独的行上。每个参数设置必须采用以下形式:

$ module.parameter = value$

允许在赋值运算符(=)周围以及每行的开头或结尾使用任意数量的空白字符;解析器将忽略这些字符。

空行和任何以散列字符(#)开头的字符序列也将被忽略,并被视为注释。

SoFiA2SoFiA 2SoFiA2接受的控制参数的完整列表可在附录A中找到。由于未设置的参数将自动采用其默认值,用户可以选择仅在其参数文件中指定相关设置的子集,尤其是输入数据集的名称。

1.3 运行管道

创建并保存参数文件后,可以通过运行以下命令从终端启动管道:

sofia<parameter_file>sofia <parameter\_file>sofia<parameter_file>​

其中<parameter_file><parameter\_file><parameter_file>是SoFiA2SoFiA 2SoFiA2参数文件的名称。如果参数文件已保存到当前目录,只需提供其名称即可,否则需要包含完整路径。SoFiA2SoFiA 2SoFiA2管道的流程图如图1所示。

请注意,不必在用户参数文件中定义所有现有参数。任何未定义的参数都将仅采用其默认值。因此,通常只设置几个需要调整的参数就足够了,例如输入数据立方体的名称。也可以通过以下方式在命令行上指定各个设置:

sofia<parameter_file><parameter>=<value>sofia\ <parameter\_file>\ <parameter>=<value>sofia <parameter_file> <parameter>=<value>

它将首先读取用户参数文件并更新指定的参数设置。注意,和之间不能有空格。实际上,任何数量的参数文件和/或单个设置都可以在命令行上以任何顺序传递给SoFiA2SoFiA 2SoFiA2。所有文件和设置都将按照提供的顺序读取和处理,稍后的设置将覆盖先前的设置。例如,这可以用于在单独的文件中定义默认参数设置,同时在命令行上指定输入数据多维数据集名称。

二、 导入数据集

SoFiA2SoFiA 2SoFiA2接受多种类型的输入文件,包括要搜索的数据立方体。目前,SoFiA2SoFiA 2SoFiA2仅支持灵活图像传输系统(FITS)(FITS)(FITS)格式,所有输入和输出的图像数据文件必须是标准的FITSFITSFITS文件。

2.1 数据立方体

数据立方体通常是三维的,前两个轴包含空间坐标(赤道坐标或银河坐标),第三个轴包含光谱坐标(频率或速度)。SoFiA2SoFiA 2SoFiA2还可以处理二维图像(例如,无线电连续图像),在这种情况下,假设第三轴的大小为111。四维立方体也可以被接受,只要第四个维度的大小正好是1。在这种情况下,只需删除第四个轴(例如Stokes I)即可获得三维数据结构。最后,还支持第三个轴的大小为1,而第四个轴的大小大于1的四维立方体;在这种情况下,SoFiA2SoFiA 2SoFiA2假设第四个轴包含光谱信息,并且第三和第四个轴的头元素简单地交换。

使用SoFiA2SoFiA 2SoFiA2只能处理完整数据立方体的一个子区域。如果完整的多维数据集太大而无法放入内存,或者多维数据集的某些部分包含人造数据,那么这个功能将非常有用。这个input.regioninput.regioninput.region在这种情况下,可以使用选项以像素坐标(基于0)指定子区域,然后只将指定的区域读入内存并进行处理。需要注意的是,所有输出(如输出目录中的源质心)都将针对子区域而不是完整立方体指定,除非parameter.offsetparameter.offsetparameter.offset设置为truetruetrue。

为了简化带有负信号的数据立方体的处理,例如中性氢吸收线,SoFiA2SoFiA 2SoFiA2提供了在处理之前反转数据立方体的可能性。这可以通过input.invertinput.invertinput.invert选项。应该注意的是,启用此选项只需将数据立方体乘以−1,这样正信号就会变为负信号,反之亦然。因此,在这种情况下,所有与磁通相关的输出,如磁通测量或第0时刻,也将被反转并报告为正。

2.2 掩码立方体

除了输入数据立方体外,还可以将输入掩码立方体加载到SoFiA2SoFiA 2SoFiA2中。掩码多维数据集必须具有与输入数据多维数据集相同的维度,并且用于用非零值标记被认为是源的一部分的所有像素。SoFiA2SoFiA 2SoFiA2通常会在查找源期间生成一个新的掩码立方体。然而input.maskinput.maskinput.mask选项可用于加载现有的掩码多维数据集,例如从以前运行的SoFiA2SoFiA 2SoFiA2加载。源查找器检测到的任何附加像素将简单地添加到现有的掩码中。

2.3 噪声立方体

使用input.noiseinput.noiseinput.noise选项,可以向SoFiA2SoFiA 2SoFiA2提供一个噪声立方体,以便噪声在空间上或频谱上变化的情况下,对数据立方体上的噪声级进行归一化。SoFiA2SoFiA 2SoFiA2将在查找源之前将数据立方体除以噪声立方体。典型的用例是在SoFiA2SoFiA 2SoFiA2中实现局部噪声标准化(见第3.3节),并文件写出产生的噪声立方体。该噪声立方体可以在SoFiA2SoFiA 2SoFiA2的后续运行中加载,从而减少了反复运行计算代价高昂的噪声归一化算法的需要。请注意,将在数据立方体上执行源参数化,而不进行噪声归一化,以确保测得的通量密度是正确的。

2.4 权重立方体

使用input.weightsinput.weightsinput.weights选项,可以提供权重立方体。SoFiA2SoFiA 2SoFiA2将在源查找之前将数据立方体乘以权重立方体的平方根。请注意,源参数化将在数据立方体上执行,而不应用权重立方体,以确保测得的通量密度是正确的。还请注意,可以向SoFiA2SoFiA 2SoFiA2提供权重立方体或噪声立方体,但不能同时提供两者。

2.5 增益立方体

一些数据立方体,如无线电干涉镶嵌,可能会受到空间或光谱增益变化的影响。如果未进行校正,这些将导致参数化错误,特别是与基于磁通量的参数有关。SoFiA2SoFiA 2SoFiA2允许用户指定增益立方体,该增益立方体可用于在源参数化之前纠正增益变化。为此,输入数据立方体将被增益立方体分割,以使增益在整个多维数据集上法线化为1。与噪声变化不同,增益变化不一定会影响源查找,因此增益立方体仅在源查找之后和参数化之前应用。

三、 预处理

在查找源算法应用于数据立方体之前,可能还需要对这个立方体数据进行一系列预处理步骤,例如,去除那些可能被源查找器获取的伪影,或确保在应用源查找阈值之前穿过数据立方体的噪声电平是恒定的。SoFiA2SoFiA 2SoFiA2目前提供了本节概述的几个先决条件选项。

3.1 数据标记

受干扰或人工影响的数据可能需要在找源之前进行标记。SoFiA2SoFiA 2SoFiA2目前提供了三种方法来标记数据立方体的受影响区域。如果干扰或人工制作数据的位置已知,那么flag.regionflag.regionflag.region 选项可用于为SoFiA2SoFiA 2SoFiA2提供需要标记的区域列表。这些需要以像素为单位指定(基于0)。一旦数据立方体被加载,相关的标记就会被应用。需要注意的是,如果适用,标记区域应该相对于正在处理的子区域而不是整个数据立方体来指定。

SoFiA2SoFiA 2SoFiA2提供的另一个手动标记选项允许用户使用flag.catalogflag.catalogflag.catalog选项。文件必须包含两列,其中包含本机坐标系中天空位置坐标和输入数据立方体的单位(例如,右提升和小数度的斜角)。列可以用空格、表格或逗号分隔,并且可以使用#字符注释整行。如果位于数据立方体覆盖的区域内,则每个位置周围的圆形区域将在源查找之前标记。圆形标记区域的半径可以通过标志半径选项。基于目录的标记选项对于掩盖由于连续差分不足而导致的剩余连续源位置是有用的。

除了手动标记外,SoFiA2SoFiA 2SoFiA2还为受干扰影响的光谱通道和/或空间像素提供自动标记模式。此模式可以使用flag.autoflag.autoflag.auto选项。自动标记算法的工作原理是首先测量在每个光谱通道或空间像素iii中的均方根(RMSRMSRMS)噪声等级,σrms(i)\sigma_{rms}(i)σrms​(i),。然后计算均方根值的中位数μ\muμ和中位数的绝对偏差μ~\widetilde\muμ​,分别用作表示平均噪声级和该噪声级标准偏差。最后,用户指定的阈值ϑ\varthetaϑ已应用(flag.thresholdflag.thresholdflag.threshold)所有通道或像素iii当
∣σrms(i)−μ∣>Cϑμ~|\sigma_{rms}(i)-\mu| > C\vartheta\widetilde\mu ∣σrms​(i)−μ∣>Cϑμ​
将被标记。公式1中使用常数C≈1.4826,以转换中值绝对偏差转换为规则标准偏差,前提是均方根值中的基本散射遵循高斯分布。通过启用flag.logflag.logflag.log选项,可以将标记的通道和像素写入日志文件。

应注意确保数据立方体不包含扩展发射区域(例如来自银河系),因为通道或扩展发射像素可能会被算法标记。同样,如果在数据立方体中存在显著的噪声空间或光谱变化,噪声归一化滤波器(第3.3节)也必须启用,否则在本质上噪声级别较高的区域的通道或像素可能会被标记。

3.2 连续减法

如果输入数据立方体存在低水平的残留持续发射,那么SoFiA2SoFiA 2SoFiA2可以通过启用contsub.enablecontsub.enablecontsub.enable来帮助消除它。启用设置。然后,SoFiA2SoFiA 2SoFiA2将使用一种稳健的算法,在立方体的每个空间位置拟合一个低阶多项式到频谱,并从数据中减去该多项式。多项式阶数可以通过contsub.ordercontsub.ordercontsub.order进行参数控制。目前,只支持命令0(恒定偏移量)和命令1(偏移量+斜率)。需要注意的是,连续减法只会在找到源之前发生,而源参数化将在没有连续减法的原始数据立方体上发生。

该算法将提取数据立方体中每个空间位置的频谱。然后它将频谱对称移动±contsub.shiftcontsub.shiftcontsub.shift并将在一个方向上移动的频谱与在相反方向上移动的频谱相减。接下来,将测量减谱中的噪声以及信号绝对值超过contsub.thresholdcontsub.thresholdcontsub.threshold的所有通道。阈值乘以噪声水平将被标记并从多项式拟合中排除。±contsub.paddingcontsub.paddingcontsub.padding的附加填充。在标记信道周围填充信道可以作为安全裕度。最后,对原始谱的剩余信道拟合一个多项式,并从原始数据立方中减去。

多项式拟合算法是相当稳健的,通常不应该受到光谱线发射或其他伪影的影响,无论它们有多亮。然而,重要的是要确保相当一部分波段不受线发射和伪影的影响。作为一个一般的准则,这些扩展不应超过总带宽的20%,否则连续体将开始受到它们的影响。另一个问题可能出现在靠近光谱边缘的发射,或者是非常宽的、平滑的发射,这些可能无法被算法过滤掉。在这种情况下,增加contsub.shiftcontsub.shiftcontsub.shift的值。和contsub.paddingcontsub.paddingcontsub.padding转变。填充物可能有助于提高合身度。

3.3 噪声正则化

SoFiA2SoFiA 2SoFiA2提供的另一个重要的预处理滤波器是噪声归一化,当噪声水平沿频谱轴或在空间域随数据立方体变化时,就需要噪声归一化。由于SoFiA2SoFiA 2SoFiA2将对数据应用源发现阈值,在这种情况下,有必要首先将数据立方体除以局部噪声水平,以消除任何变化。

SoFiA2SoFiA 2SoFiA2提供了两种校正噪声变化的方法。如果噪声仅作为频率的函数变化,而不是空间的,SoFiA2SoFiA 2SoFiA2可以通过设置scaleNoise.mode=spectralscaleNoise.mode = spectralscaleNoise.mode=spectral选项在每个信道的基础上测量和修正噪声。如果噪声在空间平面上也发生变化,例如在干涉镶嵌中,则可以通过设置scaleNoise.mode=localscaleNoise.mode = localscaleNoise.mode=local来启用局部噪声缩放。

局部噪声缩放操作是通过移动一个给定大小的窗口(scaleNoise.windowXYscaleNoise.windowXYscaleNoise.windowXY和scaleNoise.windowZscaleNoise.windowZscaleNoise.windowZ)跨越网格上数据立方体的所有三个维度,也可以由用户指定(scaleNoise.gridXYscaleNoise.gridXYscaleNoise.gridXY和scaleNoise.gridZscaleNoise.gridZscaleNoise.gridZ)。如果没有指定网格大小,那么SoFiA2SoFiA 2SoFiA2将默认使用窗口大小的一半。然后,它将测量每个窗口的RMSRMSRMS噪声水平,并将相应网格单元中的数据除以噪声值。另外,插值可以启用(选项scaleNoise.interpolatescaleNoise.interpolatescaleNoise.interpolate)在网格中心之间线性插值噪声值,从而避免出现尖锐的边界。

3.4 波纹滤波器

有时,数据立方体会受到空间和光谱扩展的低层次人工因素的影响,但在天空中或随频率变化,例如由太阳干扰引起的光谱波纹。在S+C finder中,空间和光谱平滑后,这些弱特征会被提升到灵敏度阈值以上,可能导致误检。SoFiA2SoFiA 2SoFiA2提供了一个特殊的纹波过滤器,如果需要的话,可以通过激活rippleFilter.enablerippleFilter.enablerippleFilter.enable来移除这些痕迹。

过滤器通过计算一个运行窗口的平均值或中值(rippleFilter.statisticrippleFilter.statisticrippleFilter.statistic)运行,其空间和光谱大小可以由用户定义(rippleFilter.windowXYrippleFilter.windowXYrippleFilter.windowXY,rippleFilter.windowZrippleFilter.windowZrippleFilter.windowZ)。同样,窗口移动的空间和光谱步长也可以控制(rippleFilter.gridXYrippleFilter.gridXYrippleFilter.gridXY,rippleFilter.gridZrippleFilter.gridZrippleFilter.gridZ);默认情况下,它将被设置为窗口大小的一半。然后从网格单元内的每个像素中减去平均值或中值,除非插值被启用(rippleFilter.interpolaterippleFilter.interpolaterippleFilter.interpolate),在这种情况下,数值将首先在网格单元之间线性插值,然后再从数据中减去。

虽然该滤波器在默认情况下使用平均过程中的中值对异常值和真实源的存在具有相当的鲁棒性,但在使用时应该非常谨慎,因为它有可能从数据立方体中去除真实的天文信号。在空间上或光谱上扩展的天文源,如附近的星系存在时,风险尤其高。用户负责定义足够大的空间和光谱窗口大小,以确保即使在数据立方体中预期出现的最扩展源也不会影响窗口中的中值。

四、 寻找天体源

SoFiA2SoFiA 2SoFiA2自带两种不同的寻源算法:一个简单的阈值查找器和平滑+剪辑查找器(S+CS+CS+C查找器)。阈值查找器相当基本,只是将绝对通量密度超过指定阈值的所有像素添加到源掩模中。请注意,这明确包括显著的负通量密度,以避免产生正偏置。阈值可以是绝对的,也可以是相对于数据立方体中的全局RMSRMSRMS噪声水平的。阈值查找器是有用的,如果一个预滤波的立方体是搜索信号超过一定的重要程度。

4.1 S+C查找器

第二个算法是S+CS+CS+C查找器,它是SoFiA2SoFiA 2SoFiA2中最复杂的查找源算法,通常应该应用于数据集以实现盲查找源。S+CS+CS+C查找器通过空间和频谱平滑原始数据立方体在多个尺度上的工作,如用户定义的。在每次平滑迭代中,对数据应用平滑后相对于全局均方根噪声水平的用户指定的通量阈值,绝对通量密度超过该阈值的所有像素将被添加到源掩模中。注意,这将提取具有正通量密度和负通量密度的像素,以消除仅考虑正通量密度可能导致的偏差。

通过平滑相关尺度上的数据,与平滑尺度相匹配的源的信噪比将达到最大,使其能够检测到在非平滑数据立方体中仍然低于噪声水平的微弱扩展发射。任何来源的信噪比将最大空间和光谱卷积滤波器尺寸匹配源的空间和光谱范围,这是用户的责任,选择适当的过滤器尺寸的预计将出现在数据来源。

SoFiA2SoFiA 2SoFiA2将在空间域应用高斯滤波器,在光谱域应用箱形滤波器,以适应典型的河外H I源(如遥远的星系)具有指数径向表面亮度轮廓和带有陡峭侧翼的双角光谱轮廓的事实。空间高斯核的半宽限是用scfindscfindscfind指定的。kernelsXYkernelsXYkernelsXY选项,以像素为单位。假设高斯滤波器在二维空间上是对称的。光谱箱形滤波器的宽度用scfindscfindscfind指定。kernelsZkernelsZkernelsZ选项并以通道为单位定义boxcarboxcarboxcar过滤器的全宽度。光谱箱形滤波器尺寸必须是奇数(3,5,7,…)。

空间内核列表中的所有滤波器将与光谱内核列表中的所有滤波器组合,

SoFiA2用户手册自翻译相关推荐

  1. OpenVMS用户手册目录翻译

    OpenVMS操作系统很少有中文文档,在网上费了很大劲找到了中文用户手册,但是还是想看一下整个手册的概览,在官网上找到了英文版本,翻译了目录: HP OpenVMS操作系统文档 OpenVMS用户手册 ...

  2. 【原创】rabbitmq-echopid用户手册(翻译)

    2019独角兽企业重金招聘Python工程师标准>>> 为了方便工作中使用,周末抽空对 rabbitmq-echopid 用户手册进行了翻译,鉴于自己水平有限,翻译中难免有纰漏产生, ...

  3. NetXMS中文版用户手册部分翻译

    由于最近有些内网监控的需求,寻找了很多开源软件最后确定了使用NetXMS,鉴于相关的资料实在太少,下面列出一些自己翻译的部分手册内容. 转载请注明 2.1 所有网络监控的基础是一系列的objects, ...

  4. 【原创】rabbitmq-env.conf用户手册(翻译)

    官方原文:http://www.rabbitmq.com/man/rabbitmq-env.conf.5.man.html =============== 我是分割线 ================ ...

  5. 赛灵思的block memory generator用户手册pg058翻译和学习(AXI4 Interface Block Memory Generator Feature Summary)

    (1) 读赛灵思IP手册,block memory generator Product Guide,即内存memory系列(如RAM ROM等)的手册.本期介绍AXI4 Interface Block ...

  6. python 生成nc文件_NCLgt;Python用户手册V1.1(宗培书译)

    NCL官网(http://www.ncl.ucar.edu/)有NCL-to-Python Transition Guide,喜欢看原版的可以自行下载或在线阅读: http://www.ncl.uca ...

  7. Sqoop-1.4.5用户手册

    本文以Sqoop User Guide (v1.4.5)为主,对Sqoop-1.4.5的用户手册进行翻译,同时会结合一些实际操作中的注意事项一并写入.由于原文档很长,本文首先会以实际使用到的部分为主, ...

  8. VTK修炼之道5_Procedural Source Object

    1.编写的程序 #include <vtkAutoInit.h> VTK_MODULE_INIT(vtkRenderingOpenGL); /// #include "vtkCy ...

  9. 单变量特征选择:Univariate feature selection

    sklearn中的单变量特征选择 单变量的特征选择是通过基于一些单变量的统计度量方法来选择最好的特征,比如卡方检测等.Scikit-learn 将单变量特征选择的学习器作为实现了 transform方 ...

最新文章

  1. 音频编辑软件_Audacity2.12版
  2. 低版本系统兼容的ActionBar(四)添加Tab+添加自定义的Tab视图+Fragment
  3. python中str的索引、切片
  4. 解决WebClient或HttpWebRequest首次连接缓慢问题
  5. Zookeeper分布式一致性原理(八):Zookeeper典型应用场景
  6. 国际农化巨头战略转移-丰收节贸易会:未来农化发展之路
  7. Laravel_post访问【419】问题解决方法
  8. 常用UI模板,loading框,提醒框,弹框确认框
  9. Reactor中的Thread和Scheduler
  10. eclipse linux windows 乱码,Ubuntu下Eclipse打开Windows下的工程文件乱码解决办法
  11. 针对标签属性data-**的使用
  12. python 多次读取文件的细节
  13. snmp服务 2003 镜像_美国掌握全球70%根服务器,一旦对中国关闭,我们将无法上网?...
  14. VS中发布并调试IIS程序(非附加进程!!!)
  15. oracle database link创建
  16. Python操作Mysql实例代码教程(查询手册)
  17. python 系统管理_python系统管理
  18. php网站服务器工具,PHP网站服务器管理软件LuManager1.1.9发布
  19. iapp退出软件按钮代码_一师一优课视频专用转码软件的安装和使用教程
  20. 带你彻底搞懂Android启动速度优化!吐血整理

热门文章

  1. Kafka启用SASL_PLAINTEXT动态配置JAAS文件的几种方式
  2. 调研容易上岸的在职研究生
  3. 简易记账开发笔记之Fragment(后续)
  4. ROS2极简总结-文件系统
  5. MySQL错误:Value ‘0000-00-00 00:00:00‘ can not be represented as java.sql.Timestamp
  6. 计算机组成原理ACC MQ,计算机组成原理讲案第一章.ppt
  7. win10分屏快捷键无法使用_Win10 1909碰上多任务如何快速四分屏 Win10 1909分屏快捷键无效怎么办...
  8. python array类型取特定值
  9. 记一次在android使用fdisk
  10. React+阿里云Aliplayer播放器实现rtmp直播(推流时间差,重启播放器,计时观看)