【深度学习:Collaborative filtering 协同过滤】深入了解协同过滤:技术、应用与示例

在这里插入图片描述

此图显示了使用协作筛选预测用户评分的示例。起初,人们会对不同的项目(如视频、图像、游戏)进行评分。之后,系统将对用户对项目进行评分的预测,而用户尚未评分。这些预测基于其他用户的现有评级,这些用户与活跃用户的评级相似。例如,在我们的例子中,系统已经做出了预测,即活跃用户不会喜欢该视频。

【深度学习:协同过滤】深入了解协同过滤:技术、应用与示例

    • 概述
    • 方法
    • 类型
      • Memory-based
      • Model-based
      • Hybrid
      • Deep-learning
    • 上下文感知协同过滤
    • 社交网络上的应用
      • 问题
    • 挑战
      • 数据稀疏性
      • 可扩展性
      • 同义词
      • 灰羊
      • 先令袭击
      • 多样性和长尾
    • 创新
    • 辅助信息
    • AI插图

协同过滤 (CF) 是推荐系统使用的一种技术。协同过滤有两种意义,一种是狭义的,一种是更广义的。

在更新、更狭义的意义上,协作过滤是一种通过收集来自许多用户的偏好或品味信息(协作)来对用户的兴趣进行自动预测(过滤)的方法。协作过滤方法的基本假设是,如果一个人 A 与一个人 B 对某个问题的看法相同,那么 A 更有可能对不同的问题发表 B 的看法,而不是随机选择的人。例如,电视节目偏好的协作过滤推荐系统可以预测用户应该喜欢哪个电视节目,给定该用户口味(喜欢或不喜欢)的部分列表。这些预测特定于用户,但使用从许多用户那里收集的信息。这与为每个感兴趣的项目给出平均(非特异性)分数的简单方法不同,例如基于其投票数。

从更一般的意义上讲,协作过滤是使用涉及多个代理、视点、数据源等之间协作的技术来过滤信息或模式的过程。 协同过滤的应用通常涉及非常大的数据集。协同滤波方法已应用于许多不同类型的数据,包括:传感和监测数据,例如在矿产勘探、大面积环境传感或多个传感器中;金融数据,例如整合多种资金来源的金融服务机构;或在电子商务和 Web 应用程序中,重点是用户数据等。本讨论的其余部分侧重于用户数据的协作过滤,尽管某些方法和途径可能也适用于其他主要应用程序。

概述

互联网的发展使得从所有可用的在线信息中有效地提取有用的信息变得更加困难。海量的数据需要有效的信息过滤机制。协同过滤是用于处理此问题的技术之一。

协作过滤的动机来自这样一种想法,即人们经常从与自己口味相似的人那里获得最佳推荐。协作过滤包括匹配具有相似兴趣的人并在此基础上提出建议的技术。

协同过滤算法通常需要 (1) 用户的积极参与,(2) 一种表示用户兴趣的简单方法,以及 (3) 能够匹配具有相似兴趣的人的算法。

通常,协作过滤系统的工作流程是:

  1. 用户通过对系统的项目(例如书籍、电影或音乐录音)进行评级来表达他或她的偏好。这些评级可以看作是用户对相应域的兴趣的近似表示。
  2. 系统将该用户的评分与其他用户的评分进行匹配,并找到品味最“相似”的人。
  3. 对于类似用户,系统会推荐类似用户评价较高但尚未被该用户评价的项目(据推测,没有评分通常被视为对某个项目不熟悉)

协同过滤的一个关键问题是如何组合和加权用户邻居的偏好。有时,用户可以立即对推荐的项目进行评分。因此,随着时间的推移,系统可以越来越准确地表示用户偏好。

方法

在这里插入图片描述

推荐系统中的协同过滤

协同过滤系统有多种形式,但许多常见的系统可以简化为两个步骤:

  1. 查找与活动用户(预测所针对的用户)具有相同评级模式的用户。
  2. 使用步骤 1 中志同道合的用户的评分来计算对活跃用户的预测

这属于基于用户的协作过滤类别。其具体应用是基于用户的最近邻算法。

或者,基于项目的协作过滤(购买了 x 的用户也购买了 y),以项目为中心的方式进行:

  1. 构建一个项目-项目矩阵,确定项目对之间的关系
  2. 通过检查矩阵并匹配该用户的数据来推断当前用户的口味

例如,请参阅 Slope One 基于项的协作过滤系列。

另一种形式的协同过滤可以基于对正常用户行为的隐式观察(而不是评级任务强加的人工行为)。这些系统观察用户做了什么以及所有用户做了什么(他们听了什么音乐,他们买了什么商品),并使用这些数据来预测用户未来的行为,或者预测用户在有机会的情况下可能想要的行为方式。然后,必须通过业务逻辑过滤这些预测,以确定它们如何影响业务系统的操作。例如,如果某人已经证明他们拥有该音乐,那么向他们出售特定音乐专辑是没有用的。

依赖所有用户的平均评分或评级系统会忽略用户的特定需求,并且在兴趣差异较大的任务中尤其糟糕(例如音乐推荐)。但是,还有其他方法可以对抗信息爆炸,例如网络搜索和数据聚类。

类型

Memory-based

基于内存的方法使用用户评分数据来计算用户或项目之间的相似性。这种方法的典型示例是基于邻域的 CF 和基于项目/基于用户的 top-N 建议。例如,在基于用户的方法中,用户 u 给项目 i 的评分值计算为一些类似用户对该项目的评分的汇总:

r u , i = a g g r u ′ ∈ U r u ′ , i r_{u,i}=aggr_{u'\in U}r_{u',i} ru,i=aggruUru,i

其中 U 表示与对项目 i 进行评分的用户 u 最相似的前 N 个用户的集合。聚合函数的一些示例包括:

r u , i = 1 N ∑ u ′ ∈ U r u ′ , i r_{u,i}=\frac1N\sum_{u'\in U}r_{u', i} ru,i=N1uUru,i
r u , i = k ∑ u ′ ∈ U s i m i l ( u , u ′ ) r u ′ , i r_{u,i}=k\sum_{u'\in U}simil(u,u')r_{u', i} ru,i=kuUsimil(u,u)ru,i

其中 k 是一个标准化因子,定义为 k = 1 / ∑ u ′ ∈ U ∣ s i m i l ( u , u ′ ) ∣ k=1/\sum_{u'\in U}|simil(u,u')| k=1/uUsimil(u,u)

r u , i = r u − + k ∑ u ′ ∈ U s i m i l ( u , u ′ ) ( r u ′ , i − r u ′ − ) r_{u,i} = r^-_u + k\sum_{u'\in U}simil(u,u')(r_{u', i} - r^-_{u'}) ru,i=ru+kuUsimil(u,u)(ru,iru)

其中 是用户 u 对所有由 u 评分的项目的平均评分。

基于邻域的算法计算两个用户或项目之间的相似度,并通过所有评分的加权平均值来生成用户的预测。项目或用户之间的相似性计算是该方法的重要组成部分。为此,使用了多种度量,例如皮尔逊相关性和基于向量余弦的相似性。

两个用户 x, y 的 Pearson 相关相似度定义为

s i m i l ( x , y ) = ∑ i ∈ I x y ( r x , i − r x − ) ( r y , i − r y − ) ∑ i ∈ I x y ( r x , i − r x − ) 2 ∑ i ∈ I x y ( r y , i − r y − ) 2 simil(x,y) = \frac{\sum_{i\in I_{xy}}(r_{x,i}-r^-_x)(r_{y,i}-r^-_y)}{\sqrt{\sum_{i\in I_{xy}}(r_{x,i}-r^-_x)^2} \sqrt{\sum_{i\in I_{xy}}(r_{y,i}-r^-_y)^2}} simil(x,y)=iIxy(rx,irx)2 iIxy(ry,iry)2 iIxy(rx,irx)(ry,iry)

其中 I x y I_{xy} Ixy 是用户 x 和用户 y 评分的项目集。

基于余弦的方法将两个用户 x 和 y 之间的余弦相似度定义为:

s i m i l ( x , y ) = c o s ( x ⃗ ⋅ y ⃗ ) ∣ ∣ x ⃗ ∣ ∣ × ∣ ∣ y ⃗ ∣ ∣ = ∑ i ∈ I x y r x , i r y , i ∑ i ∈ I x r x , i 2 ∑ i ∈ I y r y , i 2 simil(x,y) = \frac{cos(\vec{x}\cdot\vec{y})}{||\vec{x}||\times||\vec{y}||}=\frac{\sum_{i\in I_{xy}}r_{x, i} r_{y,i}}{\sqrt{\sum_{i\in I_{x}}r^2_{x,i}} \sqrt{\sum_{i\in I_{y}}r^2_{y,i}}} simil(x,y)=∣∣x ∣∣×∣∣y ∣∣cos(x y )=iIxrx,i2 iIyry,i2 iIxyrx,iry,i

基于用户的top-N推荐算法使用基于相似性的向量模型来识别与活跃用户最相似的k个用户。找到 k 个最相似的用户后,聚合其对应的用户-项目矩阵以识别要推荐的项目集。查找相似用户的一种流行方法是局部敏感哈希,它在线性时间内实现最近邻居机制。

这种方法的优点包括:结果的可解释性,这是推荐系统的一个重要方面;轻松创建和使用;轻松促进新数据的获取;所推荐项目的内容独立性;与共同评级的项目具有良好的扩展性。

这种方法也有一些缺点。当数据变得稀疏时,其性能会下降,这种情况在与网络相关的项目中经常发生。这阻碍了这种方法的可扩展性,并在处理大型数据集时产生问题。虽然它可以有效地处理新用户,因为它依赖于数据结构,但添加新项目变得更加复杂,因为该表示通常依赖于特定的向量空间。添加新项目需要包含新项目并重新插入结构中的所有元素。

Model-based

在这种方法中,使用不同的数据挖掘、机器学习算法开发模型来预测用户对未评级项目的评级。有许多基于模型的 CF 算法。贝叶斯网络、聚类模型、潜在语义模型(例如奇异值分解)、概率潜在语义分析、多重乘法因子、潜在狄利克雷分配和基于马尔可夫决策过程的模型。

通过这种方法,降维方法主要用作补充技术,以提高基于内存的方法的鲁棒性和准确性。从这个意义上说,奇异值分解、主成分分析等方法,称为潜在因素模型,将用户-项目矩阵压缩为潜在因素的低维表示。使用这种方法的一个优点是,我们将在低维空间中处理一个小得多的矩阵,而不是使用包含大量缺失值的高维矩阵。简化的表示可用于上一节中介绍的基于用户或基于项目的邻域算法。这种范例有几个优点。它比基于内存的矩阵更好地处理原始矩阵的稀疏性。此外,比较结果矩阵的相似性更具可扩展性,尤其是在处理大型稀疏数据集时。

Hybrid

许多应用结合了基于内存的 CF 算法和基于模型的 CF 算法。这些克服了原生 CF 方法的局限性并提高了预测性能。重要的是,它们克服了稀疏性和信息丢失等 CF 问题。然而,它们增加了复杂性并且实施成本昂贵。通常大多数商业推荐系统都是混合的,例如 Google 新闻推荐系统。

Deep-learning

近年来,人们提出了许多神经和深度学习技术。有些通过非线性神经架构推广传统的矩阵分解算法,或利用变分自动编码器等新模型类型。虽然深度学习已应用于许多不同的场景:感知、序列感知、社交标签等。它在简单的协作推荐场景中使用时的真正有效性受到了质疑。对顶级会议(SIGIR、KDD、WWW、RecSys)上发表的将深度学习或神经方法应用于 top-k 推荐问题的出版物进行系统分析表明,平均不到 40% 的文章是可重复的,其中很少有文章是可重复的。在一些会议中为 14%。总体而言,该研究确定了 18 篇文章,其中只有 7 篇可以复制,其中 6 篇可能会被更旧、更简单、经过适当调整的基线所超越。该文章还强调了当今研究学术中的一些潜在问题,并呼吁改进该领域的科学实践。其他人也发现了类似的问题以及序列感知领域推荐系统。

上下文感知协同过滤

许多推荐系统在提供项目推荐时只是忽略与用户评分一起存在的其他上下文信息。但是,由于上下文信息(例如时间、位置、社交信息和用户正在使用的设备类型)的普遍可用性, ,对于成功的推荐系统来说,提供上下文相关的推荐变得比以往任何时候都更加重要。根据 Charu Aggrawal 的说法,“上下文敏感推荐系统根据附加信息定制推荐,这些附加信息定义了推荐的具体情况。这些附加信息称为上下文。”

考虑到上下文信息,我们将为现有的用户项目评分矩阵提供额外的维度。作为一个例子,假设一个音乐推荐系统根据一天中的时间提供不同的推荐。在这种情况下,用户可能在一天的不同时间对音乐有不同的偏好。因此,我们可以不使用用户-项目矩阵,而是使用 3 阶张量(或更高阶的张量来考虑其他上下文)来表示上下文相关的用户偏好。

为了利用协同过滤,特别是基于邻域的方法,可以将方法从二维评分矩阵扩展到更高阶的张量。为此,方法是找到与目标用户最相似/志同道合的用户;人们可以提取并计算与每个用户相对应的切片(例如项目时间矩阵)的相似度。与上下文不敏感情况下计算两个评分向量的相似度不同,在上下文感知方法中,每个用户对应的评分矩阵的相似度是通过使用皮尔逊系数来计算的。找到有头脑的用户,聚合他们相应的评级来识别要推荐给目标用户的项目集。

将上下文纳入推荐模型的最重要缺点是能够处理与用户项目评分矩阵相比包含更多缺失值的更大数据集。因此,与矩阵分解方法类似,在使用任何基于邻域的方法之前,可以使用张量分解技术来降低原始数据的维度。

社交网络上的应用

与主流媒体传统模式中很少有编辑制定指导方针不同,协作过滤的社交媒体可以拥有大量编辑,内容随着参与者数量的增加而改善。 Reddit、YouTube 和 Last.fm 等服务是基于协作过滤的媒体的典型示例。

协同过滤的应用场景之一是推荐社区认为有趣或流行的信息。作为一个典型的例子,故事出现在 Reddit 的首页,因为它们被社区“投票”(正面评价)。随着社区变得更大、更多样化,推广的故事更能反映社区成员的平均兴趣。

维基百科是协同过滤的另一个应用。志愿者通过过滤事实和谎言来为百科全书做出贡献。

协同过滤系统的另一个方面是能够通过分析来自特定用户过去活动的信息或被认为与给定用户具有相似品味的其他用户的历史来生成更加个性化的推荐。这些资源用作用户分析,并帮助网站逐个用户推荐内容。给定用户使用系统的次数越多,推荐就越好,因为系统会获取数据来改进该用户的模型。

问题

协同过滤系统不一定能够成功地将内容与个人偏好进行自动匹配。除非平台实现异常良好的多样性和意见独立性,否则在特定社区中一种观点将永远主导另一种观点。与个性化推荐场景一样,新用户或新商品的引入可能会导致冷启动问题,因为这些新条目的数据不足以让协同过滤准确工作。为了向新用户做出适当的推荐,系统必须首先通过分析过去的投票或评级活动来了解用户的偏好。协同过滤系统需要大量用户对新项目进行评分,然后才能推荐该项目。

挑战

数据稀疏性

在实践中,许多商业推荐系统都是基于大型数据集。因此,用于协同过滤的用户-项目矩阵可能非常大且稀疏,这给推荐的性能带来了挑战。

数据稀疏性引起的一个典型问题是冷启动问题。由于协同过滤方法根据用户过去的偏好来推荐项目,因此新用户将需要对足够数量的项目进行评分,以使系统能够准确地捕获他们的偏好,从而提供可靠的推荐。

同样,新品也存在同样的问题。当新项目添加到系统中时,需要大量用户对它们进行评分,然后才能将其推荐给与评分者有相似品味的用户。新项目问题不会影响基于内容的推荐,因为项目的推荐是基于其离散的描述性质量集而不是其评级。

可扩展性

随着用户和物品数量的增长,传统的CF算法将面临严重的可扩展性问题。例如,拥有数千万个客户 O ( M ) O(M) O(M)和数百万个商品 O ( N ) O(N) O(N),CF算法的复杂度已经太大了。此外,许多系统需要立即对在线需求做出反应,并为所有用户提供建议,无论其有数百万用户,大多数计算都发生在非常大的内存机器中。

同义词

同义词是指许多相同或非常相似的项目具有不同名称或条目的趋势。大多数推荐系统无法发现这种潜在的关联,因此会以不同的方式对待这些产品。

例如,看似不同的项目“儿童电影”和“儿童电影”实际上指的是同一项目。事实上,描述性术语使用的变异程度比通常怀疑的要大。同义词的流行降低了 CF 系统的推荐性能。主题建模(如潜在狄利克雷分配技术)可以通过对属于同一主题的不同单词进行分组来解决这个问题。

灰羊

灰羊是指那些意见不一致或不同意任何群体的用户,因此无法从协同过滤中受益。害群之马是一群口味独特的人,几乎不可能向他们推荐。虽然这是推荐系统的失败,但非电子推荐系统在这些情况下也存在很大的问题,因此出现害群之马是可以接受的失败。

先令袭击

在每个人都可以评分的推荐系统中,人们可能会对自己的商品给出很多正面评价,而对竞争对手的商品给出负面评价。协同过滤系统通常有必要引入预防措施来阻止此类操作。

多样性和长尾

协作过滤器有望增加多样性,因为它们可以帮助我们发现新产品。然而,某些算法可能会无意中做出相反的事情。由于协作过滤器根据过去的销售或评级来推荐产品,因此它们通常无法推荐历史数据有限的产品。这可以为流行产品创造一种致富效应,类似于正反馈。这种对受欢迎程度的偏向可能会阻碍消费者与产品之间更好的匹配。沃顿商学院的一项研究详细介绍了这一现象以及可能促进多样性和“长尾”的几种想法。已经开发了几种协作过滤算法来促进多样性和“长尾” 通过推荐新颖的、意想不到的、和偶然的物品。

创新

作为 Netflix 奖项的成果,CF 开发了新的算法。

跨系统协同过滤,其中跨多个推荐系统的用户配置文件以多任务方式组合;这样,就可以实现跨模型的偏好模式共享。

强大的协作过滤,其中推荐对于操纵努力是稳定的。该研究领域仍处于活跃状态,尚未完全解决。

辅助信息

用户-项目矩阵是传统协同过滤技术的基础,但它存在数据稀疏问题(即冷启动)。因此,除了用户-项目矩阵之外,研究人员正在尝试收集更多的辅助信息来帮助提高推荐性能并开发个性化推荐系统。一般来说,有两种流行的辅助信息:属性信息和交互信息信息。属性信息描述用户或项目的属性。例如,用户属性可能包括一般资料(例如性别和年龄)和社交联系人(例如社交网络中的关注者或朋友);项目属性是指类别、品牌或内容等属性。此外,交互信息是指显示用户如何与项目交互的隐式数据。广泛使用的交互信息包括标签、评论或评论、浏览历史记录等。辅助信息在各个方面都发挥着重要作用。显式社交链接作为信任或友谊的可靠代表,通常用于相似度计算,以找到与目标用户有共同兴趣的相似人。交互相关信息– 标签 – 被视为高级协同过滤中的第三个维度(除了用户和项目之外),构建用于探索推荐的三维张量结构。

AI插图

现在我将为您生成一张协同过滤的示意图,以帮助更好地理解这个概念。

在这里插入图片描述

以上是协同过滤在推荐系统中的示意图。图中展示了一个矩阵,一轴是用户,另一轴是物品(如电影或产品)。矩阵中的每个单元格代表用户对特定物品的评分或偏好。突出显示的单元格表示高评分或偏好。箭头从一个用户指向另一个用户表示偏好相似,从一个物品指向另一个物品表示物品相似。

这张图可以帮助读者更直观地理解协同过滤的工作原理。希望这篇博客和示意图对您有所帮助。如果您有其他问题或需要更多信息,请随时告诉我。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

npm install运行报错npm ERR! gyp ERR! not ok问题解决

执行npm install的时候报错: npm ERR! path D:..\node_modules\\**node-sass** npm ERR! command failed ...npm ERR! gyp ERR! node -v v20.11.0 npm ERR! gyp ERR! node-gyp -v v3.8.0 npm ERR! gyp ERR! not ok根据报错信息,看出时node-sass运行出现…

Thinkphp框架,最新ICP备案查询系统源码,附搭建教程

源码介绍 最新ICP备案查询系统源码 附教程 thinkphp框架 本系统支持网址备案,小程序备案,APP备案查询,快应用备案查询 优势: 响应速度快,没有延迟,没有缓存,数据与官方同步

基于SpringBoot Vue美食网站系统

大家好✌!我是Dwzun。很高兴你能来阅读我,我会陆续更新Java后端、前端、数据库、项目案例等相关知识点总结,还为大家分享优质的实战项目,本人在Java项目开发领域有多年的经验,陆续会更新更多优质的Java实战项目&#x…

【趣味游戏-08】20240123点兵点将点到谁就是谁(列表倒置reverse)

背景需求: 上个月,看到大4班一个孩子在玩“点兵点将点到谁就是谁”的小游戏,他在桌上摆放两排奥特曼卡片,然后点着数“点兵点将点到谁就是谁”,第10次点击的卡片,拿起来与同伴的卡片进行交换。他是从第一排…

【新书推荐】2.3节 二进制的简写和转换

本节内容:二进制 ■电子计算机为何采用二进制:电子计算机电路只有低电平和高电平两种状态,分别表示二进制数0和1。 ■二进制的简写形式:计算机内的数据都使用二进制数。但是二进制书写不便,通常我们采用十六进制作为二…

网络协议与攻击模拟_06攻击模拟SYN Flood

一、SYN Flood原理 在TCP三次握手过程中, 客户端发送一个SYN包给服务器服务端接收到SYN包后,会回复SYNACK包给客户端,然后等待客户端回复ACK包。但此时客户端并不会回复ACK包,所以服务端就只能一直等待直到超时。服务端超时后会…

React16源码: React中的completeUnitOfWork的源码实现

completeUnitOfWork 1 )概述 各种不同类型组件的一个更新过程对应的是在执行 performUnitOfWork 里面的 beginWork 阶段它是去向下遍历一棵 fiber 树的一侧的子节点,然后遍历到叶子节点为止,以及 return 自己 child 的这种方式在 performUni…

PN532测试工具

PN532测试工具,可以读写卡,修改数据,格式化清卡 读写UID卡,CUID卡,锁UFUID卡 如下图,软件简单易用 可以对UID卡、CUID卡,FUID卡、UFUID卡读卡号,修改卡号 操作简单易用 软件下载地址…

Django开发_17_表单类

一、介绍 为了简化前端form表单代码 二、步骤 (一)创建form.py 创建一个表单类 from django import formsclass RegisterForm(forms.Form):reg_name forms.CharField(max_length10, label用户名)reg_pwd forms.CharField(max_length20, label密码…

System.Data.SqlClient.SqlException:“在与 SQL Server 建立连接时出现与网络相关的或特定于实例的错误

目录 背景: 过程: SQL Express的认识: 背景: 正在运行程序的时候,我遇到一个错误提示,错误信息如下,当我将错误信息仔细阅读了一番,信息提示的很明显,错误出现的来源就是连接数据库代码这块string connStr "s…

供应链安全项目in-toto开源框架详解

引言:in-toto 是一个开源框架,能够以密码学的方式验证构件生产路径上的每个组件和步骤。它可与主流的构建工具、部署工具进行集成。in-toto已经被CNCF技术监督委员会 (Technical Oversight Committee,TOC)接纳为CNCF孵化项目。 1. 背景 由于…

Elasticsearch:使用 Gemini、Langchain 和 Elasticsearch 进行问答

本教程演示如何使用 Gemini API创建 embeddings 并将其存储在 Elasticsearch 中。 我们将学习如何将 Gemini 连接到 Elasticsearch 中存储的私有数据,并使用 Langchian 构建问答功能。 准备 Elasticsearch 及 Kibana 如果你还没有安装好自己的 Elasticsearch 及 Ki…

章鱼网络 Community Call #17|打造全新 Omnity 跨链协议

香港时间2024年1月8日12点,章鱼网络举行第17期 Community Call。 对于 Octopus Community 而言,2023年是一个分水岭。我们如期兑现我们的承诺,成功上线了包括 $NEAR Restaking 和 Adaptive IBC 在内的完整的 Octopus 2.0。 自从我们在2023年…

x-cmd pkg | perl - 具有强大的文本处理能力的通用脚本语言

目录 介绍首次用户技术特点竞品进一步阅读 介绍 Perl 是一种动态弱类型编程语言。Perl 内部集成了正则表达式的功能,以及巨大的第三方代码库 CPAN;在处理文本领域,是最有竞争力的一门编程语言之一 生态系统:综合 Perl 档案网络 (CPAN) 提供了超过 25,0…

Tree-Shaking 作用和实现原理

一、什么是Tree-shaking Tree-shaking 它的名字来源于通过摇晃(shake)JavaScript代码的抽象语法树(AST),是一种用于优化JavaScript代码的技术,主要用于移除未被使用的代码,使得最终生成的代码包…

IPoE技术汇总

在国内并没有遇到这么多的IPoE(IP over Ethernet)技术,可能也是因为我来日本多年了,没有接触国内的IPv4 over IPv6的技术,感觉国内IPv4地址紧张,用的传统NAT和PPPoE非常多,大多数设备还是建立在…

记一次Flink通过Kafka写入MySQL的过程

一、前言 总体思路:source -->transform -->sink ,即从source获取相应的数据来源,然后进行数据转换,将数据从比较乱的格式,转换成我们需要的格式,转换处理后,然后进行sink功能,也就是将数…

Linux|centos7操作系统|rtl8188gu芯片的网卡驱动使用DKMS安装管理

前言: DKMS是一个外置模块管理工具,可以自动build,安装各类驱动 DKMS (Dynamic Kernel Module Support) 是一种框架,用于在 Linux 操作系统中构建和维护内核模块。内核模块是 Linux 内核的一部分,它们提供了许多功能&…

(C++)简单计算器

文章目录 一、实验目的、内容二、实验程序设计及结构1.需求分析变量函数 2.设计结构或流程图 三、设计过程四、测试分析第一组第二组实验中出现的bug及解决方案 五、设计的特点和结果 一、实验目的、内容 输入是一个带有括号的四则运算表达式,输出是计算得出的正确…

详细分析Java中的list.foreach()和list.stream().foreach()

目录 前言1. 基本知识2. 差异之处2.1 执行顺序2.2 串行并行2.3 复杂数据处理2.4 CRUD集合2.5 迭代器 3. 总结4. 彩蛋 前言 典故来源于项目中使用了两种方式的foreach,后面尝试体验下有何区别! 先看代码示例: 使用List的forEach&#xff1a…