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

开网店要建网站平台吗/安全优化大师下载

开网店要建网站平台吗,安全优化大师下载,中国古风网站模板,微信支付需要网站备案UNICORN: Runtime Provenance-Based Detector for Advanced Persistent Threats NDSS-2020 哈佛大学 Han X, Pasquier T, Bates A, et al. Unicorn: Runtime provenance-based detector for advanced persistent threats[J]. arXiv preprint arXiv:2001.01525, 2020. 源码&…

UNICORN: Runtime Provenance-Based Detector for Advanced Persistent Threats

NDSS-2020
哈佛大学
Han X, Pasquier T, Bates A, et al. Unicorn: Runtime provenance-based detector for advanced persistent threats[J]. arXiv preprint arXiv:2001.01525, 2020.
源码:UNICORN https://github.com/crimson-unicorn


目录

  • 0. 摘要
  • 1. 引言
  • 2. 背景
    • A. 系统调用跟踪的挑战
    • B. 全系统来源(Whole-System Provenance)
    • C. 总结和问题陈述
  • 3. 威胁模型
  • 4. 设计
    • A. 溯源图(Provenance Graph)
    • B. 构建直方图
    • C. 生成图摘要(graph sketch)
    • D. 学习进化模型
    • E. 异常检测
  • 5. 实现
  • 6. 评估


0. 摘要

  高级持续性威胁 (APT) 由于其 “低速” 攻击模式和频繁使用零日漏洞利用而难以检测。介绍了UNICORN,一种基于异常的 APT 检测器,可有效利用数据来源进行分析。

  • 通过广泛而高效的图分析,探索提供丰富上下文和历史信息的溯源图(provenance graphs),以识别没有预定义攻击签名的隐秘异常活动。
  • 使用图摘要(graph sketch)技术,它总结了长时间运行的系统执行和空间效率,以对抗发生在很长一段时间内的慢动作攻击。
  • 使用一种新颖的建模方法来进一步提高其检测能力,以了解系统演进时的长期行为。

  评估表明,UNICORN 优于现有的最先进的 APT 检测系统,并且可以高精度检测现实生活中的 APT 场景。




1. 引言

  传统的检测系统不太适合 APT。依赖于恶意软件签名的检测器对利用新漏洞的攻击视而不见;基于异常的系统通常分析一系列系统调用和日志相邻的系统事件,但其中大多数难以对长期行为模式进行建模。此外,它们容易受到规避技术的影响,因为它们通常只检查短序列的系统调用和事件。因此,他们在检测 APT 方面收效甚微。试图捕获长期程序行为的系统将其分析限制为事件共现(event co-occurrence ),以避免高计算和内存开销。

这个 “事件共现” 没太理解,应该是指:这些系统将分析行为限制在在事件高发时,以避免高开销。

  最近的工作表明数据来源可能是 APT 检测的更好数据源。

  数据来源将系统执行表示为有向无环图 (DAG),它描述了系统主体( subjects,例如进程)和对象(objects,例如文件和套接字)之间的信息流。它连接图中因果相关的事件,即使这些事件相隔很长时间。因此,即使受到 APT 攻击的系统通常表现得与未受攻击的系统相似,但溯源图中更丰富的上下文信息可以更好地区分良性和恶意事件。

  我们介绍了 UNICORN,一种基于来源的异常检测器。UNICORN 使用图摘要来构建可增量更新、固定大小的纵向图形数据结构,从而实现图形统计数据的高效计算。固定大小和可增量更新的图数据结构消除了溯源图对内存的依赖,它可以简洁地跟踪机器从启动到关机的整个来源历史(provenance history)。 UNICORN 在训练期间直接对系统的演化行为进行建模,但之后不会更新模型,从而防止攻击者毒化模型。

之前的基于溯源图的方案为了支持快速的图匹配,将溯源图放在内存。而溯源图是会随着系统行为而增长的,所以作者说固定的数据结构解决了溯源图对内存的依赖。

主要贡献如下:

  • 提出了一个针对 APT 攻击的基于起源的异常检测系统。
  • 引入了一种新颖的基于草图的时间加权起源编码,它紧凑并且能够有用地总结长期的起源图。
  • 根据模拟和真实的 APT 攻击场景评估 UNICORN。与之前的工作相比,UNICORN 将精确度和准确度分别显着提高了 24% 和 30%。



2. 背景

  传统的基于异常的入侵检测系统 (IDS) 分析来自审计系统的系统调用跟踪。然而,对于 APT 检测,全系统 provenance 是一个更好的数据源。

A. 系统调用跟踪的挑战

  系统调用抽象提供了一个简单的接口,用户级应用程序通过该接口请求操作系统的服务。作为调用系统服务的机制,系统调用接口通常也是攻击者试图破坏系统的切入点。因此,系统调用痕迹长期以来一直被视为入侵检测的事实上的信息来源。但是,现有系统捕获的系统调用审计日志的非结构化数据,需要进行分析才能理解。鉴于 APT 的低速和慢速特性,分析单个系统调用日志以检测逐点异常值通常是徒劳的,检查短系统调用序列也是如此。这种分析不反映每个系统调用事件的历史背景,导致高误报率和逃避检测的模仿攻击。相比之下, data provenance将历史背景编码为因果关系图。

   Data provenance可用于对计算中的各种事件序列建模,包括系统调用审计日志。事实上,存在从审计数据流中重建起源图结构的框架,以便更好地推理系统执行。然而,这种事后方法很难确保图的正确性;很难证明构建图形的系统调用跟踪的完整性、可信度或可靠性,因为许多系统调用插入技术都存在并发问题。此外,基于系统调用的起源框架生成的不是单一的系统执行图,而是许多断开连接的图,因为它们无法追踪不使用系统调用接口的内核线程之间的相互关系。因此,此类框架很少能检测到 APT 中发现的隐蔽恶意事件。

B. 全系统来源(Whole-System Provenance)

   全系统来源的收集在操作系统级别运行,捕获所有系统活动以及它们之间的交互。诸如 Hi-Fi、LPM和 CamFlow之类的操作系统级来源系统在信息流捕获方面提供了强大的安全性和完整性保证。这种完整性在 APT 场景中尤为可取,因为它可以捕获远距离因果关系,从而实现情境化分析,即使恶意代理操纵对安全敏感的内核对象以隐藏其存在也是如此。

   我们在整篇论文中使用 CamFlow 作为参考实现,并展示了 UNICORN 也可以与其他捕获机制无缝协作。

C. 总结和问题陈述

  先前的研究探讨了使用数据来源进行 APT 检测。然而,这些方法都受到以下限制的某些组合的影响:

  1. 预定义的边缘匹配规则过于敏感,难以检测 APT 中常见的零日攻击
  2. 溯源图仅提供对检测低调异常至关重要的信息上下文的有限理解
  3. 系统行为模型无法迎合APT攻击的独特特征。静态模型无法捕获长期运行系统的动态行为,而运行时的动态建模有被攻击者中毒的风险
  4. 溯源图仅在内存中存储和分析,从而牺牲了长期可扩展性

  UNICORN 解决了​​这些问题。我们将 APT 活动中的全系统入侵检测问题形式化为大型、属性、流式全系统溯源图上基于实时图的异常检测问题。在任何时间点,将从系统启动到当前状态捕获的整个溯源图与由已知良好溯源图组成的行为模型进行比较。如果系统的溯源图明显偏离模型,则系统被认为受到攻击。




3. 威胁模型

  我们假设用于主机入侵检测的 APT 场景:攻击者非法获得对系统的访问权限,并计划在不被发现的情况下长时间停留在那里。攻击者可以分几个阶段进行攻击,并在每个阶段使用各种技术。 UNICORN 的目标是通过解释主机生成的来源来检测任何阶段的此类攻击。

  我们假设,在攻击之前,UNICORN 在正常操作期间彻底观察了主机系统,并且在此初始建模期间没有攻击发生

  数据收集框架的完整性是 UNICORN 正确性的核心。我们假设 LSM 完整性是通过经过验证的启动序列提供的。我们对其他数据收集框架做出类似的完整性假设。

  对于本文的其余部分,我们假设内核、出处数据和分析引擎的正确性。




4. 设计

  UNICORN 是一种基于主机的入侵检测系统,能够同时检测对一组联网主机的入侵。图 1 说明了 UNICORN 的通用流程(general pipeline)。

  1. 获取流式溯源图
  2. 定期将图形特征汇总成直方图
  3. 创建固定大小的图摘要(graph sketches)
  4. 捕获系统执行的动态
    部署期间利用1、2、3创建模型,利用4检测

(1)将标记的流式溯源图作为输入
  UNICORN 接受由在一个或多个网络主机上运行的起源捕获系统产生的属性边缘流。起源系统构建了一个单一的、完整的系统起源 DAG,具有部分顺序保证,它允许高效的流计算和完全上下文化的分析。

(2)在运行时构建内存直方图(Builds at runtime an in-memory histogram)
  UNICORN 有效地构建一个流图的直方图,表示系统执行的整个历史。当新边到达图数据流时更新直方图元素的计数。通过迭代探索更大的图形邻域,以发现提供执行上下文的系统实体之间的因果关系。具体来说,直方图中的每个元素都描述了图的一个独特的子结构,同时包含了附加到子结构内的顶点和边的异构标签,以及这些边的时间顺序等信息。

  为了适应正常系统执行过程中预期的行为变化,UNICORN 会定期对与近期事件没有因果关系的直方图元素的影响进行衰减,并使用图中的信息流依赖关系来保持最新的重要相关上下文信息。慢慢地“忘记”不相关的过去事件使我们能够在整个系统正常运行期间(例如,系统启动、初始化、服务请求、故障模式等)有效地建模元状态。

(3)定期计算固定大小的图摘要(graph sketch)
  在纯的流式传输环境中,随着 UNICORN 汇总整个溯源图,唯一直方图元素的数量可以任意增长。这种大小的变化使得有效计算两个直方图之间的相似性变得具有挑战性。UNICORN 采用相似性保留散列技术将直方图转换为摘要。图摘要是可增量维护的且大小是恒定的,这意味着 UNICORN 不需要将整个溯源图保存在内存中。此外,图摘要保留了两个直方图之间的归一化 Jaccard 相似性,用于后面的聚类

(4)将摘要聚类到模型中
  UNICORN 构建一个正常的系统执行模型,并在没有攻击知识的情况下识别异常活动 。与传统的聚类方法不同,UNICORN 利用其流式处理能力来生成进化模型。该模型通过在执行的各个阶段对系统活动进行聚类来捕获单次执行中的行为变化,并且不会在运行期间动态修改模型,更适合在APT攻击风险下长期运行的系统。

A. 溯源图(Provenance Graph)

  审计日志分析通常依赖于时间关系,而来源分析则利用因果关系。起源图能够捕捉事件之间的因果关系,而因果连接有助于对时间上相距遥远的事件进行推理,因此有助于在 APT 的低速和缓慢攻击模式中导航,生成更有意义的系统行为模型。

  UNICORN 始终考虑整个溯源图来检测长期运行的攻击。存在许多图相似性度量,但许多方法(例如,图同构)限制性太强(即,要求两个图完全或大部分相同),因为即使是正常执行也经常会产生略有不同的溯源图。UNICORN 的图形相似性算法不会出现这些问题。

B. 构建直方图

  我们的目标是有效地比较起源图,同时容忍正常执行中的微小变化。我们对算法的两个标准是:1) 表示方法应考虑长期因果关系; 2) 我们必须能够在实时流图数据上实施该算法,以便我们可以在入侵发生时阻止它们(不仅仅是检测它们)

  我们采用基于同构的一维 WL 测试的线性时间、快速 Weisfeiler-Lehman (WL) 子树图核算法。我们对 WL 子树图形内核的使用取决于我们构建顶点直方图的能力,该直方图捕获每个顶点周围的图形结构。我们根据完全描述顶点 R-hop 邻域的增强顶点标签对顶点进行分类。我们通过迭代标签传播来构建这些增强的顶点标签

  假设我们有一个完整的静态图。在单个重新标记步骤中,首先我们将节点标签、其入边的标签以及所有这些边的源节点的标签作为输入,然后输出一个由所有输入标签聚合而成的该节点的新标签。我们对每个节点重复这个过程,然后将整个过程重复 R 次以构建描述 R-hop 邻域的标签。一旦我们为图中的每个节点构造了增强节点标签,我们就创建了一个直方图,直方图的每个柱对应于这些标签。同构的 WL 测试基于这些增强的顶点标签比较两个图;如果两个图在相似的标签集上具有相似的分布,则它们是相似的。

其实这个算法类似于标签传播策略,简单来说就是对于每一个节点,考虑其入边和入边的源节点,据此为该节点计算一个增强的标签,这个标签加入了其父亲节点的信息。重复执行R次之后,每个节点的增强标签就会携带其R代祖先的信息,以实现结合上下文的目的。

我们将静态图 G G G 定义为一个 5 元组 ( V , E , F v , F e , C ) , (V,E,{\mathcal{F}}^{v},{\mathcal{F}}^{e},{\mathcal{C}}), (V,E,Fv,Fe,C),,其中 V V V 是节点集, E E E 是有向边集,即 e = ( u , v ) ∈ E e=(u,v)\in E e=(u,v)E ( u , v ) ≠ ( v , u ) ∀ u , v ∈ V \mathbf(u,v)\neq(v,u)\forall u,v\in V (u,v)=(v,u)u,vV F v : V → Σ \mathcal{F}^v:V\to\Sigma Fv:VΣ 是一个函数,它将字母 Σ \Sigma Σ 中的标签分配给图中的每个节点,类似地, F e : E → Ψ {\mathcal{F}}^e : E → Ψ Fe:EΨ 将字母表 Ψ Ψ Ψ 中的标签分配给每条边。 C {\mathcal{C}} C 是记录每条边的时间戳的函数。在第 1 行中, R R R 是每个节点探索生成直方图元素的邻域跳数。 UNICORN 通过检查图中每个节点周围的有根子树来创建整个图的直方图。通过考虑这种非线性子结构,除了每个节点/边的属性之外,UNICORN 还保留了起源图的结构等价性,这已被证明优于随机游走等线性方法。 M M M 是节点 v v v 的相邻节点和/或边标签的列表,而 l i ( v ) l_i(v) li(v) 是节点 v v v 在第 i i i 次迭代(或 ( i − 1 ) (i-1) (i1) 跳邻域,其中 0-hop 邻域是顶点本身)。 T S TS TS 是相邻顶点的时间戳列表。在第 8 行中,函数 I n ( v ) In(v) In(v) 返回顶点 v v v 的所有入边,第 9 行中的函数 S o u r c e ( e ) Source(e) Source(e) 返回边 e e e 的源顶点。 T T T 记录每一个节点 v v v 的时间戳。在第 16 行中, N ( v ) = { w ∣ ( w , v ) ∈ E } \mathcal{N}(v)=\{w\mid(w,v)\in E\} N(v)={w(w,v)E} 是节点集, v v v 通过入边连接到这些节点。

  直方图的每个元素都对应一个唯一的顶点标签,该标签捕获顶点的 R-step 传入邻域。标签捕获有关邻域中的边和该邻域中顶点的身份的信息,包括揭示对象、主题和活动之间因果关系的复杂上下文信息。

  初始情况下,每个顶点都以其自己的初始标签为增强标签。然后,我们通过添加传入边的标签和这些边的源节点的初始顶点标签来合并 1-hop 邻居。在这个构建过程之后,每个顶点标签现在都代表顶点和边标签,这样当我们扩展到越来越大的邻域时,我们只需要为所有入边的源节点添加标签(因为这些标签已经包含了来自其传入边的边标签)。我们按照相应边的时间戳对所有标签进行排序,尊重系统中事件的顺序,然后对标签列表进行哈希处理,以方便快速查找和记录。一些顶点/边可能有多个标签,但相同的散列技巧允许以可忽略的成本进行多标签计算。

  流的可变性和算法复杂度。在流式传输环境中,我们仅在新到达的顶点和其传入邻域受新边影响的顶点上运行算法1。在每个溯源图实体或进程使用多个顶点来表示相应对象的不同版本或状态的起源图中,我们只需要计算/更新每个新边的目标顶点的邻域,因为所有传入边到一个顶点的时间在其到达任何传出边的顶点之前。 UNICORN 利用这种偏序来最小化计算开销(图 2)。因此,实际运行时复杂度大约等同于原始的一维 Weisfeiler-Lehman 算法:使用 R-hop 邻域,复杂度为 O ( R ∣ E ∣ ) O(R|E|) O(RE)

  虚线边在处理完所有实边后到达,虚线顶点是新到达的。如果起源图遵守偏序,则边 1 必须先于边 2 到达,并且只需要计算顶点 E 和 F 的局部结构。然而,在未观察到偏序的起源图中,我们可以在实边之后遇到边 3 和 4 以及新到达的顶点 G(红色虚线)。在这种情况下,R = 2,我们需要更新边 3 的顶点 C 和 E(D 的后代)以及边 4 的顶点 C、D 和 E(G 的后代)。
  这里没太懂这个偏序关系。

  概念漂移的削减。系统行为通常会随着时间的推移而发生变化,这会导致流式溯源图的底层统计属性发生变化。这种现象被称为概念漂移。

  UNICORN 根据年龄对现有数据的影响进行削减,通过在直方图元素计数上使用指数权重衰减来逐渐忘记过时的数据,从而解释系统行为的此类变化。分配的权重与数据的年龄成反比。对于直方图 H H H 中的每个元素 h h h,作为新数据项 x t x_t xt(即算法 1 第 23 行的散列标签 l i ( v ) l_i(v) li(v))在时间 t t t 流入,将 H h H_h Hh 计数为: H h = ∑ t w t 1 x t = h H_h=\sum_t w_t1_{x_t=h} Hh=twt1xt=h其中, w t = e − λ ∆ t w_t = e^{−λ∆t} wt=eλt。 UNICORN 随着添加到图中的边数单调递增 t t t

  在入侵检测场景中的适用性。逐渐遗忘的方法帮助 UNICORN 专注于系统执行的当前动态(即溯源图的最新部分),以及与当前执行有因果关系的图的部分(即R邻居) ,同时保持过去的“记忆”衰减,其速率由权重衰减因子 λ λ λ 控制。无论事件发生与系统执行的当前状态在时间上有多远,如果它与当前对象或活动有因果关系,则该事件及其周围的邻域将毫无折扣地对直方图做出贡献。因此,溯源图确保相关的上下文信息无论时间如何都保留在分析中。

C. 生成图摘要(graph sketch)

  与传统的基于直方图的相似性分析不同,UNICORN 在新边到达时不断更新直方图。测量流式直方图之间的相似性具有挑战性,因为直方图元素的数量不是先验的并且不断变化。此外,我们应该根据图特征的基本分布而不是绝对计数来衡量相似性。

  UNICORN 采用 HistoSketch ,一种基于一致加权采样的方法,可以有效地为流式直方图保持紧凑和固定大小的草图(sketch)。 HistoSketch 是一种恒定时间算法,因此它的速度足以支持对快速增长的起源图进行实时流分析。它还根据直方图的归一化、广义最小-最大 (Jaccard) 相似性无偏地近似直方图。

D. 学习进化模型

  UNICORN 在训练期间创建了一系列按时间顺序排列的草图。然后,它使用众所周知的 K-medoids 算法对来自单个服务器的草图序列进行聚类,使用轮廓系数来确定 K 的最佳值。簇代表系统执行的“元状态”,例如,启动、初始化、稳态行为。然后使用所有集群中草图的时间顺序和每个集群的统计数据(例如,直径、中心点)来生成系统演化的模型。

  算法2描述了进化模型的构建。每个草图 S ( t ) S(t) S(t) 属于索引为 k k k 的单个簇。演化 E E E 是集群索引的有序列表,其顺序由时间排序的草图 S ( t ) S(t) S(t) 确定。

  对于每个训练实例,UNICORN 创建一个模型,在其运行期间捕获系统执行状态的变化。直观上,这类似于跟踪系统执行状态的自动机。最终模型由来自训练数据中所有溯源图的许多子模型组成。通过进化建模,UNICORN 可以在多个时间点学习系统行为;使用逐渐遗忘方案,在任何时间点,UNICORN 都能够专注于最相关的活动。

其实这个进化建模是指会根据系统一段时间的行为而不是某一时刻的行为来建模,并不是说在运行过程中会不断演化。作者为了避免中毒,假设训练阶段是安全的。模型一经训练好便不再在运行中更改。

E. 异常检测

  随着直方图从流溯源图演变而来,UNICORN 会定期创建草图。给定一个溯源图的草图,UNICORN 将草图与建模期间学习的所有子模型进行比较,将其拟合到每个子模型中的一个簇。UNICORN 假设监控从系统启动开始,并跟踪每个子模型内的系统状态转换。要在任何子模型中被视为有效,草图必须适合当前状态或(其中之一)下一个状态(即,在草图捕获系统执行中的状态转换的情况下);否则,它被认为是异常的。因此,我们检测到两种形式的异常行为:不适合现有簇的草图和簇之间的无效转换。

简单来说,就是将建模期间的草图按时间排列,然后聚类成一个个簇,每个簇代表了一个元状态。由这些簇构成一个类似自动机的数据结构。检测期间的草图如果不属于任何一个簇或由当前状态进入了一个不可达状态,视为异常。




5. 实现

  GraphChi [75] 是一个基于磁盘的系统,可以在一台计算机上高效地计算具有数十亿条边的大型图。使用 GraphChi,UNICORN 无需将整个溯源图存储在内存中即可实现高效的分析性能。 UNICORN 依赖于 GraphChi 的两个重要特性:

  1. GraphChi 使用并行滑动窗口(PSW)算法将图拆分为碎片,每个碎片中的边数大致相同;它并行计算每个分片。该算法允许通过少量非顺序磁盘访问快速更新磁盘中的顶点和边。
  2. UNICORN 利用 GraphChi 对流图的高效计算。UNICORN 的保证偏序最小化了它访问的顶点数量,即使邻域跳跃参数 R 很大。批量添加边,而不是一次处理一条边,可以使处理速度更快。

[75] A. Kyrola, G. E. Blelloch, and C. Guestrin, “GraphChi: Large-scale graph computation on just a pc,” in Symposium on Operating Systems Design and Implementation. USENIX, 2012.

6. 评估

将UNICORN与StreamSpot进行了比较
三个真实的APT攻击数据集(CADETS、ClearScope、THEIA)来探索UNICORN的有效性
在受控的实验室环境中使用CamFlow创建了我们自己的模拟APT供应链攻击数据集(SC-1和SC-2)

相关文章:

【论文阅读】UNICORN:基于运行时来源的高级持续威胁检测器(NDSS-2020)

UNICORN: Runtime Provenance-Based Detector for Advanced Persistent Threats NDSS-2020 哈佛大学 Han X, Pasquier T, Bates A, et al. Unicorn: Runtime provenance-based detector for advanced persistent threats[J]. arXiv preprint arXiv:2001.01525, 2020. 源码&…...

Linux的基本介绍和常用命令

Linux和Windows的主要区别 Linux和Windows是两种具有不同特性的操作系统,它们具有各自的优点和适用场景。选择哪一个操作系统主要取决于用户的需求、技术背景及使用场景等。 Linux和Windows的主要区别如下: 开源VS闭源:Linux是开源的系统&…...

Flutter 中

在Get状态管理库中,GetxController是一个用于管理状态和逻辑的基类。它具有一系列的生命周期方法,用于在不同的阶段执行相关的操作。下面是GetxController的生命周期方法及其执行顺序: onInit(): 这个方法在GetxController创建并加入到管理器…...

可视化高级绘图技巧100篇-总论

前言 优秀的数据可视化作品可以用三个关键词概括:准确、清晰、优雅。 准确:精准地反馈数据的特征信息(既不遗漏也不冗余,不造成读者疏漏&误读细节) 清晰:获取图表特征信息的时间越短越好 优雅&…...

Android AOSP源码编译——AOSP下载(一)

一、电脑配置 Ubuntu16.04 16G,硬盘的大小最好大于300G (我这边是找了个win电脑装了双系统 没有使用虚拟机的方式) 二、基础环境配置 1、安装git sudo apt install git配置git email和name git config --global user.email "youexample.com" git conf…...

Qt 文件对话框使用 Deepin风格

当你在Deepin或UOS 上开发 Qt 程序时,如果涉及到文件对话框功能,那么就会遇到调用原生窗口的问题。 如果你使用的是官方的Qt版本,那么在Deepin或者UOS系统上,弹出的文件对话框会是如下这样: 而Deepin或UOS系统提供的默…...

.net core 配置swagger

要在 ASP.NET Core 中配置 Swagger,您需要遵循以下步骤: 添加 Swagger NuGet 包:将 Swashbuckle.AspNetCore NuGet 包添加到项目中。 在 Startup.cs 文件中进行配置: using Microsoft.OpenApi.Models;public class Startup {// 省…...

leetcode707. 设计链表(单链表+虚拟头指针+双指针遍历)

题目:leetcode707. 设计链表 描述: 你可以选择使用单链表或者双链表,设计并实现自己的链表。 单链表中的节点应该具备两个属性:val 和 next 。val 是当前节点的值,next 是指向下一个节点的指针/引用。 如果是双向链…...

电脑麦克风没声音?

这3招就可以解决! 在我们使用电脑录制视频时,有时会遇到一个令人头疼的问题:麦克风没有声音。那么,为什么会出现这种情况呢?更重要的是,我们应该如何解决这个问题呢?本文将介绍3种方法&#xf…...

React Native元素旋转一定的角度

mMeArrowIcon: {fontSize: 30, color: #999, transform: [{rotate: 180deg}]},<Icon name"arrow" style{styles.mMeArrowIcon}></Icon>参考链接&#xff1a; https://reactnative.cn/docs/transforms https://chat.xutongbao.top/...

LeetCode 1749. 任意子数组和的绝对值的最大值

【LetMeFly】1749.任意子数组和的绝对值的最大值 力扣题目链接&#xff1a;https://leetcode.cn/problems/maximum-absolute-sum-of-any-subarray/ 给你一个整数数组 nums 。一个子数组 [numsl, numsl1, ..., numsr-1, numsr] 的 和的绝对值 为 abs(numsl numsl1 ... nums…...

初学HTML:在线简易画板设计。

最近在HTML&#xff0c;记录下一点点成果。 设计了一个简易画板&#xff0c;通过HTML的Canvas元素实现一个在线画板&#xff0c;用户可以在上面绘制图形或涂鸦。 下面是运行效果&#xff1a; 下面是代码&#xff1a; <!DOCTYPE html> <html> <head><ti…...

IDEA项目实践——Spring框架简介,以及IOC注解

系列文章目录 IDEA创建项目的操作步骤以及在虚拟机里面创建Scala的项目简单介绍 IDEA项目实践——创建Java项目以及创建Maven项目案例、使用数据库连接池创建项目简介 IDEWA项目实践——mybatis的一些基本原理以及案例 IDEA项目实践——动态SQL、关系映射、注解开发 文章目…...

Scala(第一章Scala入门)

文章目录 1.1 概述 1.1.1 为什么学习Scala1.1.2 Scala发展历史1.1.3 Scala和Java关系1.1.4 Scala语言特点 1.2 Scala环境搭建1.3 Scala插件安装1.4 HelloWorld案例 1.4.1 创建IDEA项目工程1.4.2 class和object说明1.4.3 Scala程序反编译 1.5 关联Scala源码1.6官方编程指南 1.1…...

Linux tcpdump 命令详解

简介 用简单的话来定义tcpdump&#xff0c;就是&#xff1a;dump the traffic on a network&#xff0c;根据使用者的定义对网络上的数据包进行截获的包分析工具。 tcpdump可以将网络中传送的数据包的“头”完全截获下来提供分析。它支持针对网络层、协议、主机、网络或端口的…...

试卷擦除答案的工具,几个步骤轻松搞定

在学生的学习生活中&#xff0c;考试是必不可少的一部分。然而&#xff0c;有时候我们在做完试卷后发现自己填错了答案&#xff0c;或者想要更改答案&#xff0c;但是试卷上已经有了痕迹。这时候&#xff0c;我们就需要一些工具来擦除答案。以下是几个简单的步骤&#xff0c;让…...

vue3部署宝塔后请求接口404以及刷新页面404的问题解决方案

技术&#xff1a;vue3.2.13 UI框架:element-plus 2.1.1 服务器&#xff1a;腾讯云Centos系统宝塔面板 Nginx:1.22.1 前提&#xff1a;宝塔面板》网站PHP项目 已经新建了项目 1.处理vue页面刷新报错404 如上图&#xff0c;在PHP网站》设置》配置文件&#xff0c;新增如下代码…...

java.sql.Date java.util.Date

文章目录 两者关系两者在时间显示上区别 两者关系 sql包中Date是util包子类 public class Date extends java.util.Date 两者在时间显示上区别 /*** 解决sql包中日期和util包日期转换问题*/Testpublic void t3(){Date utilDate new Date();java.sql.Date sqlDate new java.…...

斗象科技-2023攻防演练必修高危漏洞集合百度网盘下载(2版本)

下载地址见最下端&#xff1a; 高危风险漏洞一直是企业网络安全防护的薄弱点&#xff0c;也成为 HW 攻防演练期间红队的重要突破口;每年HW 期间爆发了大量的高危风险漏洞成为红队突破网络边界防护的一把利器&#xff0c;很多企业因为这些高危漏洞而导致整个防御体系被突破甚至靶…...

分布式数据库视角下的存储过程

存储过程很好呀&#xff0c;那些用不好的人就是自己水平烂&#xff0c;不接受反驳&#xff01;我就有过这样念头&#xff0c;但分布式数据库&#xff0c;更倾向少用或不用存储过程。 1 我从C/S时代走来 C/S架构时代的末期最流行开发套件是PowerBuilder和Sybase数据库&#xf…...

深度学习常用的激活函数

深度学习的核心思想是通过多层次的神经网络结构&#xff0c;逐步抽取和表示数据中的高级特征&#xff0c;从而实现对复杂数据模式的学习和识别。 神经网络结构&#xff1a; 深度学习使用多层次的神经网络&#xff0c;包括输入层、隐藏层和输出层。这些网络结构允许模型自动学习…...

深度学习之用PyTorch实现逻辑回归

0.1 学习视频源于&#xff1a;b站&#xff1a;刘二大人《PyTorch深度学习实践》 0.2 本章内容为自主学习总结内容&#xff0c;若有错误欢迎指正&#xff01; 代码&#xff08;类比线性回归&#xff09;&#xff1a; # 调用库 import torch import torch.nn.functional as F#…...

04-4_Qt 5.9 C++开发指南_时间日期与定时器

文章目录 1. 时间日期相关的类2. 源码2.1 可视化UI设计2.2 dialog.h2.3 dialog.cpp 1. 时间日期相关的类 时间日期是经常遇到的数据类型&#xff0c;Qt 中时间日期类型的类如下。 QTime:时间数据类型&#xff0c;仅表示时间&#xff0c;如 15:23:13。 QDate:日期数据类型&…...

7个顶级开源数据集来训练自然语言处理(NLP)和文本模型

推荐&#xff1a;使用 NSDT场景编辑器快速助你搭建可二次编辑的3D应用场景 NLP现在是一个令人兴奋的领域&#xff0c;特别是在像AutoNLP这样的用例中&#xff0c;但很难掌握。开始使用NLP的主要问题是缺乏适当的指导和该领域的过度广度。很容易迷失在各种论文和代码中&#xff…...

计算机网络 网络层 边界网关协议BGP

...

GitHub上受欢迎的Android UI Library

内容 抽屉菜单ListViewWebViewSwitchButton按钮点赞按钮进度条TabLayout图标下拉刷新ViewPager图表(Chart)菜单(Menu)浮动菜单对话框空白页滑动删除手势操作RecyclerViewCardColorDrawableSpinner布局模糊效果TabBarAppBar选择器(Picker)跑马灯日历时间主题样式ImageView通知聊…...

cpm log2((cpm/10) + 1) nmf 1e6 1e5

Gene expression units explained: RPM, RPKM, FPKM, TPM, DESeq, TMM, SCnorm, GeTMM, and ComBat-Seq Read count、CPM、 RPKM、FPKM和TPM的区别 - 简书 (jianshu.com) http://zyxue.github.io/2017/06/02/understanding-TCGA-mRNA-Level3-analysis-results-files-from-fir…...

竞赛项目 深度学习的视频多目标跟踪实现

文章目录 1 前言2 先上成果3 多目标跟踪的两种方法3.1 方法13.2 方法2 4 Tracking By Detecting的跟踪过程4.1 存在的问题4.2 基于轨迹预测的跟踪方式 5 训练代码6 最后 1 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 基于深度学习的视频多目标跟踪实现 …...

如何避免用waveformRecord复制数组

这里描述如何使用数组字段内存管理特定。这使得数组数据能够被移入和移出waveform&#xff0c;aai和aao类型的值字段(BPTR)。 使用这种特定包括用另一个(用户分配的)字段替代存储在BPTR字段的指针。基本规则是&#xff1a; 1、BPTR以及它当前指向的内存&#xff0c;只能在这个…...

RocketMQ 延迟消息

RocketMQ 延迟消息 RocketMQ 消费者启动流程 什么是延迟消息 RocketMQ 延迟消息是指&#xff0c;生产者发送消息给消费者消息&#xff0c;消费者需要等待一段时间后才能消费到。 使用场景 用户下单之后&#xff0c;15分钟未支付&#xff0c;对支付账单进行提醒或者关单处理…...