EMBER:用于训练静态 PE 恶意软件机器学习模型的开放数据集##

摘要

本文描述了 EMBER:一个标记的基准数据集,用于训练机器学习模型以静态检测恶意 Windows 可移植可执行文件。该数据集包括从 1.1M 二进制文件中提取的特征:900K 训练样本(300K 恶意,300K 良性,300K 未标记)和 200K 测试样本(100K 恶意,100K 良性)。为了配合数据集,我们还发布了用于从其他二进制文件中提取特征的开源代码,以便可以将其他示例特征附加到数据集中。这个数据集填补了信息安全机器学习社区的一个空白:一个良性/恶意的数据集,它足够大、开放且通用,足以涵盖几个有趣的用例。我们列举了在构建数据集时考虑的几个用例。此外,我们演示了一个用例,其中我们将使用 LightGBM 训练的基线梯度增强决策树模型与默认设置与 MalConv 进行比较,MalConv 是最近发布的用于恶意软件检测的端到端(无特征)深度学习模型。结果表明,即使没有超参数优化,基线 EMBER 模型也优于 MalConv。作者希望 EMBER 提供的数据集、代码和基线模型将有助于激发恶意软件检测的机器学习研究,就像基准数据集具有先进的计算机视觉研究一样。

引言

机器学习可以成为主要检测能力或补充检测启发式的有吸引力的工具。监督学习模型自动利用训练数据中文件属性之间的复杂关系来区分恶意样本和良性样本。此外,适当的正则化机器学习模型可以推广到新样本,其特征和标签遵循与训练数据相似的分布。

然而,在开放研究社区中,使用机器学习进行恶意软件检测并没有像其他应用程序那样受到几乎相同的关注,因为其他应用程序存在丰富的基准数据集。这些包括手写数字分类(例如,MNIST [17])、图像标记(例如,CIFAR [16] 或 ImageNet [10])、交通标志检测 [13]、语音识别 Phil Roth Endgame, Iproth@endgame.com (例如,TIMIT [32])、情感分析(例如,Sentiment140 [12])以及许多其他适合训练模型以模拟人类感知和认知任务的数据集。发布用于恶意软件检测的基准数据集的挑战很多,可能包括以下内容:

  • 法律的限制。恶意二进制文件通过 VirusShare [24] 和 VX Heaven [2] 等网站大量共享,但良性二进制文件通常受版权法保护,禁止共享。良性和恶意二进制文件都可以通过 VirusTotal [1] 等付费服务大量获取供内部使用,但禁止后续共享。
  • 标签挑战。与图像、文本和语音(可能相对较快地标记,并且在许多情况下由非专家 [6]标记工作可以通过反恶意软件扫描程序实现自动化,这些扫描程序编码了大部分人类专业知识,但结果可能是专有的或受保护的。像 VirusTotal 这样的聚合服务专门限制了供应商反恶意软件标签的公开共享 [1]。
  • 安全责任和预防措施。向不习惯采取适当预防措施(例如沙盒托管)的一般非信息安全受众推广包含恶意二进制文件的大型数据集可能存在风险。

我们通过发布 Endgame Malware BEnchmark for Research (EMBER) 数据集1来解决这些问题,该数据集从 Windows 可移植可执行 (PE) 恶意和良性文件的大型语料库中提取。这允许在没有法律或安全问题的情况下自由传播恶意和良性实体。样本与原始文件的 sha256 哈希以及一个标签一起发布,以表示该文件被认为是恶意文件还是良性文件。特征的预选自然限制了研究人员比较特征集的灵活性。我们发布了用于计算 PE 特征以进行特征比较研究的开源代码,这在一定程度上有所改善。缺乏原始二进制文件也排除了使用无特征深度学习恶意软件检测器的实验(例如,[22])。

但是,我们希望通过发布 sha256 哈希、特征提取 1Data 和代码,可在 https://github.com/endgameinc/ember arXiv:1804.04637v2 [cs.CR] 2018 年 4 月 16 日源代码中获得执行从特征子集计算的基线分类器,该数据集和模型代码库仍将成为机器学习恶意软件检测研究的相关基线,并且可以与无特征深度学习研究进行比较。我们在第 4 节中展示了这样的比较。

我们从第 2 节开始,介绍有关 PE 文件格式的相关背景,以及相关数据集和静态恶意软件分类方法的摘要。在第 3 节中,我们描述了数据集及其格式的方法。我们在第 4 节展示了在此数据集上训练的基线模型的功效。源代码和数据可以在 https://github.com/endgameinc/ember 找到。

2.背景

我们在 2.1 节总结了可移植可执行 (PE) 文件格式中的重要上下文。在第 2.2 节中,我们回顾了使用机器学习对恶意软件进行分类的特征提取的相关工作。最后,我们在 2.3 节总结了其他相关的静态恶意软件数据集。

2.1PE 文件格式

PE 文件格式描述了 Microsoft Windows 操作系统的主要可执行格式,包括可执行文件、动态链接库 (DLL) 和 FON 字体文件。该格式目前支持 Intel、AMD 和 ARM 指令集架构的变体。

文件格式排列有许多标准标题(PE-32 格式参见图 1),然后是一个或多个部分 [20]。标头包括通用对象文件格式 (COFF) 文件标头,其中包含重要信息,例如文件所针对的机器类型、文件的性质(DLL、EXE、OBJ)、节数、符号等。可选头标识链接器版本、代码大小、初始化和未初始化数据的大小、入口点的地址等。可选头中的数据目录提供指向其后面部分的指针。这包括用于导出、导入、资源、异常、调试信息、证书信息和重定位表的表。因此,它提供了对可执行文件内容的有用总结 [30]。最后,节表概述了 PE 文件中每个节的名称、偏移量和大小。

PE 部分包含 Windows 加载程序将分别映射到可执行或可读/可写内存页面的代码和初始化数据,以及文件定义的导入、导出和资源。每个部分都包含一个指定大小和地址的标题。导入地址表指示加载器静态导入哪些功能。资源部分可能包含用户界面所需的资源:光标、字体、位图、图标、菜单等。基本 PE 文件通常包含 .text 代码部分和一个或多个数据部分(.data、.rdata 或.bss)

重定位表通常存储在 .reloc 部分,由 Windows 加载程序用于从可执行文件的首选基址重新分配基址。

2.2静态 PE 恶意软件检测

静态恶意软件检测尝试在不执行样本的情况下将样本分类为恶意或良性样本,而动态恶意软件检测则根据其运行时行为检测恶意软件,包括用于分析的时间相关的系统调用序列 [4, 9, 18]。尽管众所周知静态检测通常是不可判定的 [7],但它是安全套件中的一个重要保护层,因为当成功时,它允许在执行之前检测到恶意文件。

基于机器学习的静态 PE 恶意软件检测器至少从 2001 年就开始使用 [27],并且很大程度上由于结构化文件格式和向后兼容性要求,许多概念在后续工作中仍然惊人地相似 [9,15,23,26, 29]。舒尔茨等人。 [27] 通过运行 McAfee 病毒扫描程序组装数据集并生成标签。 PE 文件由包括导入函数、字符串和字节序列的特征表示。在坚持集上训练和验证了各种机器学习模型。模型包括从 RIPPER [8]、朴素贝叶斯和集成分类器导出的规则。科尔特等人。 [15] 通过包含字节级 N-gram 扩展了这种方法,并采用了自然语言处理的技术,包括字符串的 tf-idf 加权。沙菲克等人。 [29] 提出仅使用 PE 标头中的七个特征(在第 2.3 节中描述),其动机是因为他们研究中的大多数恶意软件样本通常都表现出这些元素。 Saxe 和 Berlin 利用新颖的二维字节熵直方图,将其输入多层神经网络进行分类 [26]。

端到端深度学习的最新进展极大地提高了技术水平,尤其是在对象分类、机器翻译和语音识别方面。在许多这些方法中,原始图像、文本或语音波形被用作机器学习模型的输入,该模型为手头的任务推断出最有用的特征表示。然而,尽管在其他领域取得了成功,手工制作的特征显然仍然代表了已发表文献中恶意软件检测的最新技术。在接下来的几个月或几年内,最先进的技术可能会转变为端到端深度学习,但由于结构化格式的原因,从解析 PE 文件中衍生的手工制作的特征可能会无限期地继续相关。 [22] 中讨论了最近的恶意软件分类端到端深度学习示例,我们重新实现了该示例,并与第 4 节中的基线模型进行了比较。

2.3恶意和良性数据集

PE-Miner 旨在生产一种基于机器学习的恶意软件检测器,该检测器的真阳性率 (TPR) 超过 99%,假阳性率 (FPR) 低于 1%,其运行时间可与当时基于签名的扫描仪相媲美 [30 ]。

它在操作系统上的 1、447 个良性文件(从未发布)、来自 VX Heaven [2] 的 10、339 个恶意 PE 文件和来自 Malfease 的 5、586 个恶意 PE 文件的数据集上进行了训练。 PE-Miner 使用了 189 个特性,包括引用的特定 DLL 的二进制指标、各个部分的大小、来自 COFF 部分的摘要信息、资源表的摘要等。不幸的是,许多特性没有公开披露,有些在 NDA [28] 下被视为敏感和保护。在数据集上评估了几种模型类型,其中发现 J48 决策树算法提供了最佳性能。值得注意的是,尽管许多论文将这项工作列为第一个基于非签名的高性能(速度和 TP/FP 率)方法,但缺乏公共数据集导致没有真正的比较研究。

不久之后,Adobe Malware Classifier 旨在仅从七个特征生成恶意软件分类器2:调试大小、图像版本、导入地址表的相对虚拟地址、导出大小、资源大小、第二部分的虚拟大小和总数[23] 节。训练了决策树算法,并将生成的分类器作为免费提供的工具发布3。然而,有人建议,由于良性数据集主要由 Windows 二进制文件组成,因此生成的模型强烈偏向于非 Windows 与 Windows,而不是恶意与良性问题 [28]。事实上,在评估 EMBER 测试集上的预训练模型时,我们观察到非常大的误报率和低检测率(见第 4 节)。不幸的是,由大约 100K 恶意文件和 16K 良性文件组成的数据集从未发布用于比较研究。

相比之下,微软恶意软件分类挑战赛于 2015 年 4 月结束 [25]。该数据集包括一个 500MB 的大型数据集,由来自 9 个家族的大约 20K 恶意样本的反汇编和字节码组成。最大的家族包含来自 3K 个样本的特征(Kelihos 后门),而最小的家族仅包含 42 个样本(Simda 后门)。自竞赛结束以来,已有 50 多篇研究论文和论文引用了该数据集。 [25] 中列出了其中许多工作的贡献摘要。不幸的是,反汇编功能是 IDA Pro 反汇编程序特有的(不容易重现),并且数据集不包含良性文件。

VXHeaven 等恶意软件共享服务提供了大量恶意二进制文件 [2]。 VirusTotal 可以使用关于供应商参与者检测数量的启发式方法来挖掘假定的良性文件 [1]。但是,VirusTotal 中的大规模文件访问速率需要付费订阅。无论如何,迄今为止不存在用于机器学习基准测试目的的一致同意的恶意和良性文件集。

3.数据说明

在制作 EMBER 数据集时,我们考虑了几个实际用例和研究,包括以下内容。

  • 比较用于恶意软件检测的机器学习模型。
  • 量化模型退化和概念随时间的漂移。
  • 研究可解释的机器学习。
  • 比较恶意软件分类的特征,特别是 EMBER 数据集中未表示的新特征。这需要一个可扩展的数据集。
  • 与无特征的端到端深度学习相比。这可能需要代码从新数据集中提取特征,或使用 shas256 哈希构建原始二进制数据集以匹配 EMBER
  • 研究针对机器学习恶意软件的对抗性攻击以及随后的防御策略。
  • 通过用于 PE 文件表示的无监督学习或用于分类的半监督学习来利用未标记的样本。

对这些用例的考虑导致了本节中所述的数据结构。

3.1 数据布局

EMBER 数据集由 JSON 行文件的集合组成,其中每行包含一个 JSON 对象。每个对象都包含以下数据类型:

-原始文件的 sha256 哈希作为唯一标识符;

  • 粗略的时间信息(月分辨率),用于估计文件首次出现的时间;
  • 一个标签,可能是 0 表示良性,1 表示恶意或 -1 表示未标记;和
  • 八组原始特征,包括解析值和与格式无关的直方图。

下面更详细地描述了每种特征类型的详细信息,示例如图 2 所示

为方便起见,我们的数据集由人类可读的原始特征组成。我们提供从原始特征生成模型构建所需的数字特征向量的代码。这允许研究人员将原始特征与矢量化策略分离。在我们的代码中,我们提供了一种默认方法,该方法可以生成用于训练基线模型的特征矩阵,并且应该适用于大多数用例。然而,原始特征的可用性可能允许研究可解释的机器学习或特征重要性,如 [29]。我们还在训练集中包含了未标记的样本,以鼓励研究半监督学习方法(见图 3),这在已发表的文献中似乎是恶意软件分类的一个相对未探索的领域。作为另一个考虑,我们暂时拆分训练/测试集(参见图 4)以模拟恶意软件和良性软件的世代依赖性。

恶意和良性文件一年的粗略时间戳也可以进行简单的纵向研究。包含原始文件的 sha256 哈希允许研究人员将功能链接到原始二进制文件,包括可能通过 VirusShare 或 VirusTotal [1, 24] 等文件共享站点提供的其他元数据。为方便起见,我们确保 EMBER 中标记为良性的文件在 VirusTotal 中可用,并且在收集时,没有供应商检测到它们是恶意的。同样,我们确保 EMBER 中标记为恶意的文件在 VirusTotal 中可用,并且有 40 多家供应商报告为恶意文件。因此,EMBER 是一个相对“简单”的数据集。

3.2功能集描述

EMBER 数据集由八组原始特征组成,包括解析特征和与格式无关的直方图和字符串计数。在下文中,我们区分了原始特征(提供的数据集)和从数据集派生的模型特征(或矢量化特征)。模型特征表示用于训练模型的固定大小的特征矩阵,表示原始特征的数字摘要,其中字符串、导入名称、导出名称等是使用特征散列技巧 [31] 捕获的。发布的数据集中没有明确提供特征矩阵,但提供了代码将原始特征转换为模型特征以训练基线模型。

为方便起见,我们使用 scikit-learn [19] 提供的实现。在适当的情况下,在下面的特征描述中,我们会注意到用于特征散列技巧的 bin 数量。

3.2.1 解析特征

该数据集包括五组特征,这些特征是在解析 PE 文件后提取的。我们利用库来检测可执行格式 [21] 作为方便的 PE 解析器。 LIEF 名称用于表示符号对象的字符串,例如特征和属性。对于这些字符串的一些示例,读者可以参考图 2。下面将更详细地描述每种解析的特征类型。

一般文件信息。通用文件信息组中的特征集包括从PE头获取的文件大小和基本信息:文件的虚拟大小、导入导出函数的个数、文件是否有调试段、线程本地存储、资源、重定位或签名,以及符号的数量。

标头信息。 从 COFF 标头中,我们报告标头中的时间戳、目标机器(字符串)和图像特征列表(字符串列表)。从可选的头文件中,我们提供目标子系统(字符串)、DLL 特征(字符串列表)、作为字符串的文件魔法(例如,“PE32”)、主要和次要映像版本、链接器版本、系统版本和子系统版本,以及代码、标头和提交大小。为了创建模型特征,在训练模型之前使用特征散列技巧总结字符串描述符,如 DLL 特征、目标机器、子系统等,为每个噪声指标向量分配 10 个 bin。

***导入函数。***我们解析导入地址表,按库上报导入的函数。要为基线模型创建模型特征,我们只需收集一组独特的库并使用散列技巧来绘制集合(256 个 bin)。类似地,我们使用散列技巧(1024 个 bin)来捕获单个函数,将每个函数表示为一个字符串,例如 library:FunctionName 对(例如 kernel32.dll:CreateFileMappingA)。

***导出的函数。***原始特征包括导出函数的列表。使用 128 个 bin 的散列技巧将这些字符串汇总为模型特征。

部分信息(Section information. )。提供了每个部分的属性,包括名称、大小、熵、虚拟大小和表示部分特征的字符串列表。入口点由名称指定。为了转换为模型特征,我们对(部分名称,值)对使用散列技巧来创建包含部分大小、部分熵和虚拟大小(每个 50 个 bin)的向量。我们还使用散列技巧来捕获入口点的特征(字符串列表)。

3.2.2 与格式无关的特性。

EMBER 数据集还包括三组与格式无关的特征,因为它们不需要解析 PE 文件以进行提取:原始字节直方图、基于先前在 [26] 中发表的工作的字节熵直方图和字符串提取。

***字节直方图。***字节直方图包含 256 个整数值,表示文件中每个字节值的计数。当生成模型特征时,这个字节直方图被归一化为一个分布,因为文件大小在一般文件信息中被表示为一个特征。

字节熵直方图。 字节熵直方图近似于熵 H 和字节值 X 的联合分布 p(H,X)。这是按照 [26] 中所述完成的,通过计算固定长度窗口的标量熵 H 并将其与每个字节配对窗口内发生。当窗口在输入字节上滑动时重复此操作。在我们的实现中,我们使用 2048 的窗口大小和 1024 字节的步长,使用 16 × 16 个 bin 来量化熵和字节值。在训练之前,我们将这些计数归一化以求和。

字符串信息。该数据集包括有关至少五个可打印字符长的可打印字符串(由 0x20 到 0x7f 范围内的字符组成)的简单统计信息。特别是,报告的是字符串的数量、它们的平均长度、这些字符串中可打印字符的直方图以及所有可打印字符串中的字符熵。可打印字符分布提供了与上述字节直方图信息不同的信息,因为它仅来自包含至少五个连续可打印字符的字符串。此外,字符串特征组包括以 C:\(不区分大小写)开头的可能表示路径的字符串数量,http:// 或 https://(不区分大小写)可能表示路径的出现次数。 URL、可能指示注册表项的 HKEY_ 的出现次数,以及可能提供 Windows PE 释放程序或捆绑可执行文件的弱证据的短字符串 MZ 的出现次数。通过提供字符串的简单统计摘要而不是原始字符串列表,我们减轻了某些良性文件可能存在的隐私问题。

4 实验

EMBER 包含的代码演示了如何使用训练集中的原始特征(仅标记样本)来构建监督学习模型,我们将其作为基线模型的真阳性率提供。如前所述,模型构建过程包括将原始特征向量化(每个对象到一个维度为 2351 的向量),在必要时使用特征散列技巧。在 2015 款 MacBook Pro i7 上,将原始特征向量化为模型特征需要 20 个小时。根据矢量化特征,我们使用具有默认参数(100 棵树,每棵树 31 个叶子)的 LightGBM 训练了梯度提升决策树 (GBDT) 模型,从而得到少于 10K 的可调参数 [14]。模型训练耗时 3 小时。通过适当的超参数优化,基线模型的性能可能会得到很大改善,我们在这项工作中不太感兴趣。

结果模型的ROC曲线如图5所示,测试集中恶意和良性样本的分数分布如图6所示。ROC AUC超过0.99911。模型分数的阈值为 0.871 导致 FP 率低于 0.1%,检测率超过 92.99%。在 FP 率低于 1% 时,该模型的检测率超过 98.2%。

正如第 2 节中所讨论的,有人建议,由于它所训练的数据集,Adobe 恶意软件分类器偏向于非 Windows 与 Windows 分类,而不是真正的恶意与良性问题 [28]。我们在测试集上评估了预训练的 J48 模型,发现它表现出惊人的 53% 误报率和 8% 误报率。这似乎证实了先前关于数据集偏差的说法。然而,这种糟糕的表现是否可以归因于过时的训练数据或数据集偏差或两者兼而有之,这超出了本文的范围。但很明显,这是一个不合适的基线模型。

作为一项比较研究,我们在数据集底层的 104 103 102 0.0 0.2 0.4 Score 0.6 0.8 1.0 原始二进制文件上训练了 MalConv [22]。我们使用作者规定和验证的模型架构和训练设置,除了由于 GPU 内存限制,我们使用 100 的批量大小而不是 256 进行训练。我们在两个 Titan X (Pascal) GPU 上使用数据并行进行训练。每个 epoch 需要 25 小时,我们训练了 10 个 epoch(10 天)。生成的模型大约有 1M 参数。应用于与 EMBER 测试集对应的原始二进制文件,Malconv ROC AUC 为 0.99821,对应于 92.2% 的检测率(误报率小于 0.1%)或 97.3% 的检测率(误报率小于 1%)速度。这比使用没有超参数调整的 LightGBM 的性能略低。显然,尽管模型大小和计算负担增加,但无特征的深度学习模型尚未超越通过解析特征利用领域知识的模型的性能。

5 讨论

据我们所知,EMBER 数据集代表了第一个用于机器学习恶意软件检测的大型公共数据集(必须包含良性文件)。作者希望该数据集有助于促进机器学习恶意软件检测的创新。我们在第 3 节中考虑了许多研究用例,包括比较模型性能、对抗性机器学习攻防、恶意软件检测的半监督学习以及更多研究领域。

通过该数据集,我们还发布了一个简单的非优化基准 LightGBM 模型。立即提高模型性能的简单方法包括通过网格搜索消除噪声特征的特征选择和超参数优化。尽管如此,我们证明了在这些特征上训练的开箱即用的 LightGBM 模型优于最近发表的用于恶意软件检测的端到端深度学习的工作 [22]。因此,除了基准数据集之外,我们希望 EMBER 可以提供一种简单的方法来对包括端到端深度学习在内的新颖架构的模型性能进行基准测试。

数据集和源代码可在 https://github.com/endgameinc/ember 获得。

EMBER-网络安全恶意软件公开数据集,论文的翻译,自己的笔记相关推荐

  1. On the Generality of Facial Forgery Detection论文原文翻译以及阅读笔记

    论文题目及原文地址:On the Generality of Facial Forgery Detection 2019IEEE第16届移动特设和传感器系统研讨会国际会议 摘要: 摘要-针对面部伪造检 ...

  2. 神经网络语音分离必读论文、代码、教程、公开数据集整理分享

    语音分离的目标是把目标语音从背景干扰中分离出来.在信号处理中,语音分离属于很基本的任务类型,应用范围很广泛,包括听力假体.移动通信.鲁棒的自动语音以及说话人识别.人类听觉系统能轻易地将一个人的声音和另 ...

  3. 写英文论文时,数据集应如何翻译?Dataset 或者 Data set,看完你就知道!

    写英文论文时,数据集应如何翻译?Dataset 或者 Data set,看完你就知道! No.1:Dataset表示特定的数据集:Data set通常表示为任何数据集的数据集.在特定的上下文中,数据集 ...

  4. NILM非侵入式负荷识别(papers with code、data)带代码的论文整理——(公开数据集、工具、和性能指标篇) 全网最全

    说在最前面 这篇文章主要介绍用于非侵入式负荷识别领域目前的公开数据集.工具和其它等,如果需要看论文及具体代码实现,看我上一篇的文章. 其外,不是所有数据集我都用过,我只用过UK-DALE,所以其它数据 ...

  5. 【毕设记录日记】深度学习|铝型材表面缺陷视觉检测算法:相关课程、论文及公开数据集

    2022.2.10 1.机器学习|目标检测|计算机视觉|python入门课程 (1)谷歌机器学习经典课程 [经典课程]机器学习-入门与实战[中英字幕]_哔哩哔哩_bilibili [谷歌教程]机器学习 ...

  6. AVA数据集论文1705.08421部分翻译

    AVA数据集论文1705.08421部分翻译 0 Abstract 1 Introduction 3 Data Collection 3.1 Action vocabulary generation ...

  7. 论文中文翻译——VulDeePecker: A Deep Learning-Based System for Vulnerability Detection

    本论文相关内容 论文下载地址--Engineering Village 论文中文翻译--VulDeePecker: A Deep Learning-Based System for Vulnerabi ...

  8. 【各个领域公开数据集查找和下载】【定期更新】

    各个领域公开数据集查找和下载 写在前面的话 网站 博客 领域 金融 交通 商业 推荐系统 医疗健康 图像数据 综合图像 场景图像 Web标签图像 人形轮廓图像 视觉文字识别图像 特定一类事物图像 材质 ...

  9. 论文中文翻译——Vulnerability Dataset Construction Methods Applied To Vulnerability Detection A Survey

    本论文相关内容 论文下载地址--Web Of Science 论文中文翻译--Vulnerability Dataset Construction Methods Applied To Vulnera ...

  10. 23个优秀的机器学习训练公开数据集,一文全知道!

    作者 | Nikola M. Zivkovic   转自AI前线 译者 | 王强 策划 | 凌敏 对于学习机器学习的朋友,一般都会用到那些常用的机器学习数据集,这里一篇文章一网打尽,大家可以一次性下载 ...

最新文章

  1. 解读目标检测新范式:Segmentations is All You Need
  2. Spring整合Hibernate中自动建表
  3. .Net软件工程师必备面试题134道
  4. 炸锅了!Google称2029年人类开始实现永生不死!疾病,衰老,痛苦将彻底消失!?
  5. intel编译器_Intel编译器编译并行版lammps
  6. ListView和SlidingDrawer
  7. 英伟达推出全新DPU处理器 透露未来三年DPU发展路线图
  8. LDA模型,主题聚类模型
  9. Matplotlib:科研绘图利器(写论文、数据可视化必备)
  10. 网页动画--鲜花爱心表白动画
  11. Python——Fraction类处理分数
  12. 【资源】资源分享(一)
  13. “139邮箱”练好内功比发电影票更重要
  14. 流程图基础绘制方法和流程图制作软件功能详解
  15. SpringBoot整合(四)整合Ehcache、Redis、Memcached、jetcache、j2cache缓存
  16. 由平庸到崛起:细数那些为三星打下半壁江山的经典“Galaxy”智能机型
  17. 大学生选课抢课如何提高选中概率
  18. VR眼镜连接android设备,如何将VR眼镜的屏幕投影到计算机或电视上?
  19. 以太坊:快速入门 Truffle
  20. 玩转华为ENSP模拟器系列 | 配置OSPF的DR选择示例

热门文章

  1. java 使用Lambda对集合排序
  2. java 双三次线性插值_三种常见的图像处理双三次插值算法
  3. 微信内跳转支付宝App、跳转淘宝App方案
  4. MTK平台Camera驱动流程分析
  5. Sklearn中的二分类模型可以进行多分类的原理
  6. 第九届蓝桥杯单片机省赛
  7. VS2015社区版MFC安装
  8. 【系统分析师之路】原创章节 重构与改善设计思维导图
  9. 计算机视觉CV目标检测综述
  10. DIY实用工具——看看大神手下的示波器