知识图谱辅助的个性化推荐系统

知识图谱辅助的个性化推荐系统

将从下面4个方面展开:

推荐系统的基础知识知识图谱辅助的推荐方法介绍基于embedding的知识图谱推荐方法混合型知识图谱推荐方法

推荐系统的基础知识

1、什么是推荐系统

在当前互联网时代,推荐系统是所有面向用户的互联网产品的核心技术,只要产品是面向用户的,那么就有推荐系统的需求。

推荐系统是解决信息爆炸问题,给用户推荐一个用户感兴趣的小规模集合。用户在大量商品中,不知道如何选择,推荐系统是替用户做这个选择,猜用户的兴趣,然后给用户推荐一个小规模的商品集合,这样用户就不会迷失在大量商品中。

举几个推荐系统的例子。如下图是imdb系统中的电影推荐,imdb会推荐用户可能更感兴趣的电影。

img

如下图是亚马逊系统中的图书推荐,给用户推荐和用户更相关,用户更感兴趣的书籍。

img

如下图是booking.com系统中旅游景点的推荐,给用户推荐更感兴趣景点。

img

如下图是我们更为熟悉的推荐系统的例子,知乎,抖音,头条等系统,都有推荐功能。

img

2、推荐系统的实现方法

推荐系统主要有2个任务,一个是评分预测(Rating Prediction)。如下图左边是评分预测的例子,横坐标是物品,纵坐标是用户。表格是用户对物品的打分,这个评分可以显示的反应用户对物品的喜好层度,1表示很不喜欢,5表示很喜欢。推荐系统就是预测表格中问好处的缺失值,这就叫评分,这个评分叫显示反馈(Explicit feedback)。

另一个是点击预测(CTR Prediction)。右边是点击预测的例子,表格中只有0和1,0表示用户没有点击过,1表示用户点击过,这类数据叫隐式反馈(Implicit feedback),点击预测只能反映用户的非常弱的偏好层度,用户点击了不一定说明用户喜欢,比如逛淘宝,用户只是点击了某个物品就退出了,所以点击物品并不能代表用户的真实感受。

img

推荐系统有一个非常经典的方法叫协同过滤(Collaborative Filtering, CF),CF的核心是假设相似的用户有相似的偏好。

如下图为4个用户对4个物品的打分情况,来预测用户u4对物品i1的评分。通过这4个用户在其他3个商品(i2,i3,i4)的打分,计算出其他3个用户和u4用户的相似度,分别是0.7,0.1,0.2,然后用相似度加权平均其他3个用户在i1物品的打分,这样就得到了u4对i1的评分为2.1。

img

协同过滤CF是根据历史物品评分记录,计算出用户相似度,从而预测分数。CF是一种常见的方法,但存在以下2类问题。

img

第一类是稀疏性问题(Sparsity),一般情况下评分分布是相当稀疏的,比如一个用户一辈子可能只会看几百部电影,但电影总数达百万量级,所以在计算相似度的时候会有困难。

第二类更进一步,冷启动问题(Cold start),当来了一个新的用户,这个新的用户没有历史记录,所以没法计算相似性,就没法做推荐。当注册新的app时,比如读书类的app,系统一开始会问你对哪些主题感兴趣,因为系统没有你的历史记录,刚开始没法给你推荐。

知识图谱辅助的推荐方法介绍

针对推荐系统出现的问题,我们的思路是既然用户和物品交互很稀少,甚至没有,那可以引入其他的一些信息,这些引入的信息叫辅助信息(Side Information)。如下图是4类非常常见的辅助信息:社交网络;用户或商品属性特征;多媒体信息,比如电影的海报,文本信息,视频音频信息等;上下文信息,假设一个用户购买了一个商品,购买记录的一些信息,比如时间、地点、当前用户购物车的其他物品信息等。

img

1、什么是知识图谱

知识图谱(Knowledge Graphs, KG)也是一种辅助信息。KG是一个有向异构图(heterogeneous graph),图中节点表示实体(entity),边表示关系(relation)。

一个KG通常包含很多对三元组triple(head,relation,tail),其中head和tail是2个实体(entity),relation就是边。

如下图,推荐系统的item是电影,所以Forrest Gump是推荐系统的item,同时也是KG中的实体,KG中其他的实体并不是推荐系统的item, Forrest Gump这部电影的主演是Tom Hanks,虽然Tom Hanks是KG的实体(entity),但并不是item。把图中左边这些三元组(triples)组合起来,就变成了右边的一个很大的KG。

img

2、为什么要在推荐系统中使用KG

如下图,假设一个用户(最左边)看过3部电影(item),Cast Away, Back to the Future, TheGreen Mile,在KG中,可以将这3部电影连接到其他的一些事情上,比如Cast Away 这部电影的类别(genre)是冒险形(Adventure),Back to the Future的导演(directed)是Robert Zemeckis等,可以连接到很多其他non-item实体上,再从这些non-item实体又连接到item电影实体上,比如最右边的Interstellar, Forrest Gump,Raiders of the Lost Ark。

img

KG建立一个从用户已经看过的电影到没看过的电影的连接,而这些连接不是由用户的观看记录得来的。在CF里,实际上是把中间这块替换成了其他用户,用其他用户历史观看记录得到这些连接。KG提供了另外一种关于物品连接的信息来源的方法。

img

如上图是一个新闻推荐的例子,假设某个用户看过一条新闻,这个新闻的内容是:Boris Johnson Has Warned Donald Trump To Stick ToThe Iran Nuclear Deal。

从这条新闻中提取了4个实体,在KG中,可以对这些实体做进一步的扩展,做2次,做3次扩展,又会发现这些实体都指向另外一条新闻:North Korean EMP Attack Would Cause Mass U.S.Starvation, Says Congressional Report。

这2条新闻在字面上没有任何相似度,新闻的单词都不一样,但他们是很相关的,这个相关性体现在KG上,他们在低层是相关的,但这种相关性没法从字面意义上得到,这也是为什么要用KG,KG提供了一种item相似度的计算方式。

3、KG能给推荐系统带来什么

第1个提高推荐系统的精度(Precision),更准确的发现item之间的相似性,如下图2部电影,能通过Tom Hanks做个连接。

img

第2个提高推荐系统的多样性(Diversity),可以通过主演扩展,可以通过电影类别扩展,也可以通过导演扩展,总有一款是用户非常喜欢的。

img

第3个是可解释性(Explainability),可以用KG的path来解释系统为什么会推荐这部电影,如下图某个用户喜欢Cast Away这部电影,系统会推荐The Terminal这部电影,因为他们有相同的主演。

img

4、知识图谱处理方法

KG 的处理方法中有一类方法叫KnowledgeGraph Embedding,KGE。KGE主要是对KG的每个实体(entity)和每个关系(relation)学习一个低维的特征。在KGE中有一个基于翻译的距离模型,Translational distancemodels。

img

如上公式为TransE算法模型,对KG中的每一个tuple(h,r,t),学习到的entity embedding,relation embedding,使h+r约等于t,这的r相当于翻译作用,把h翻译成t,f函数对每个tuple的真实分值越小越好。

img

如图(a)是TransE模型,假设head对应的embedding加上relation对应的embedding等于tail对应的embedding。基于TransE有很多扩展模型,比如TransH, TransR。

TransH解决的是一对多的问题,某一个head和relation可能会对应多个tail,如图(b),把head和tail都投影到一个平面上,然后让它们在相对应的平面上做转换。TransR是把head和tail都投影到另外一个空间中,在新的空间里让h+r=t。 KG-aware Recommender Systems正式方法大概可以分为3类。

第一类是Embedding-based methods,基于embedding的方法,embedding是前面介绍的KG embedding,关于这类方法,下图列举了5篇论文,今天将会介绍第2篇和第5篇。

img

第二类是Path-based methods,基于KG计算路径的推荐方法,今天不会涉及这类方法。

img

第三类是Hybrid methods,结合embedding和path的方法,今天将介绍一下第1、3、4篇,第3、4是比较统一的方法。

img

5、知识图谱辅助的推荐系统问题定义

img

已知一个用户的集合Users,一个物品的集合Items,用户和物品之间的交互(relations,yuv),一个包括很多non-item实体的KG。图中yuv表示用户u对物品v的一个隐式反馈,即用户有没有点击过这个物品,目标是给定一个新的u-v对,预测点击率yuv。

img

公式定义如上图。用户集合U={u1,u2,...},物品集合V={v1,v2,...},交互矩阵(隐式反馈)Y矩阵Y={yuv ? {0,1} | u?U, v?V},KG包括实体(entity)和关系(relation),由很多三元组组成。

img

每个物品v在KG中可能对应一个或多个实体。物品是实体的一个子集。
目的是学习一个预测函数F,给定一对u,v,可以输出一个预测分值?uv,θ是目前的一个参数。

基于embedding的知识图谱推荐方法

1、DKN方法

DKN: Deep knowledge-aware network for newsrecommendation, 属于基于embedding的知识图谱推荐方法,是2018年发表的论文,这篇论文是关于新闻推荐。

img

如上图,给出一段新闻,提取新闻中的实体,根据这些实体,构建一个知识图谱的子图,对知识图谱做embedding映射,得到每个实体的embedding,最后就得到每个实体的特征向量。

img

如上图,对于某个实体Fight Club,只有其对应的embedding还不够,在KG中每个实体,连接着好多其他的实体,那这些临近实体就是该实体的上下文,将这些上下文中的每个实体的embedding相加平均,就得到该实体的上下文embedding。如上图公式中ē就是实体ei的上下文embedding。

img

在NLP中有一个模型叫KimCNN,主要是给定一个sentence,返回一个特征向量。如上图给定一个n个单词的sentence(图中n为7),对每个单词做embedding映射,embedding的长度为d(图中d为5),得到一个d*n的wordembedding矩阵。用7个卷积核做卷积进行featuremaps,得到7个1维向量,对每个向量做池化(Max pooling),得到该sentence的word embedding。

img

前面介绍中已有3种特征向量,分别是实体embeddings, 上下文embeddings, word embedings,我们的方法是把这3种embeddings做一个累加,卷积,池化,最后得到这个sentence的embeddings,这种方法叫KCNN。

img

接下来介绍基于KCNN做推荐的方法。如上图假设某个用户已经点击过了3条新闻,来了一个候选新闻,预测该用户对候选新闻的点击率。对这4条新闻做KCNN的embedding映射,得到4个特征向量。因为用户看过的新闻的重要性对候选新闻是不一样的,用Attention Net计算用户看过的每一条新闻和候选新闻的决策分值。用得到的分值加权观看记录,得到User embedding。将user embedding和candidate news embedding拼接,输出一个预测的点击概率,这个就是做预测的DKN模型。

2、MKR方法

MKR:Multi-TaskFeature Learning for Knowledge Graph Enhanced Recommendation,属于基于embedding的知识图谱推荐方法,是2019年发表在WWW的论文,是一个多任务的模型。

img

如上图为MKR框架,包括3个模块,一个是推荐模块,一个是knowledge graph embedding, KGE模块,还有一个是以上2个模块的桥梁,cross&compress units,交叉压缩单元,下面将分别阐述这3个模块。

img

推荐系统模块,输入是user, item,输出是用户对物品的点击率。模块分2块,一个是low-level的部分,一个是high-level的部分。在low-lever部分,用了一个MLP(multi-layer perceptron)来处理用户的特征UL,item是cross&compressunits做的处理,返回一个物品的特征VL,把UL和VL拼接起来,用一个recommendation system函数fRS,输出一个点击预测值。

img

KGE模块,也分成low-lever和high-level部分,输入head,用cross&compress unites来做特征处理,relation用MLP做特征处理,把这2个处理结果拼接起来,经过一个K层的MLP,得到一个predictedtail,预测的tail和真实的tail用一个函数fKG算一个分值,这样就可以优化这个score值。

img

这个多任务之所以能做起来,主要是推荐系统模块的物品(item)和KGE模块的实体(entity)是对应的,很多item可以在KGE中找到对应的entity,item和entity是对同一个物品的描述,他们的embedding在某种层度上是相似的,是可以被连接的。中间的cross&compressunits就是这个连接结合,这个模块是在每一层都有,在l层,输入是item的embedding vl和entity的embedding el,输出是下一层的embedding。

这个模块计算分2步,第一步是cross,第二步是compress。

cross操作是将vl,el做一个cross,vl是一个d*1的向量,elT是1*d的向量,矩阵相乘后得到一个d*d的矩阵Cl。

compress是将交叉后的矩阵Cl重新压缩回embedding space,这块细节部分可以参考论文。通过参数wl压缩输出vl+1,el+1。

img

学习算法中loss的计算公式如上图。LRS是推荐系统的loss,预测user-item的分值uv和真实分值yuv的差距。LKG是KG的loss,对于真实tuple(h,r,t),预测分值score越大越好,而对于随机替换tuple(h’, r, t’)(负样本),预测的分值越小越好。LREG是正则项。

算法实现第1块是推荐系统的任务,第2块是KGE任务,交替训练2者。在每次循环里面,做t次的RS的任务训练,做1次的KGE任务训练,做t次RS训练是因为更关注RS任务,这个t是可以调整的,这就是MKR模型。

混合型知识图谱推荐方法

1、RippleNet方法

RippleNet: Propagating User Preferenceson the Knowledge Graph for Recommender Systems,属于混合型知识图谱推荐方法,是2018发表在CIKM的一篇论文。

img

Ripple从名字上理解是水波的意思,水波是一层一层的,那这个算法是指在KG中某个实体,和该实体相连的其他实体也有一跳,二跳,三跳的关系,如上图列出了ForrestGump这部电影对应的3跳的临近实体。

img

如上图是RippleNet框架,输入是一对user-item,输出是用户对物品的点击预测值。

img

对输入用户u,获取用户的点击记录Vu,在KG中找到对应的Vu,比如图中有2个对应实体,获取这些实体对应的tuple,把实体一跳的集合拿出来。对输入物品v做embedding映射。如上公式,将item embedding v和这些head hi在R空间中做一个softmax,得到v相对于每个head的分值pi。

img

如上图公式,用pi加权平均对应的tail embedding ti,得到输出ou1,即当前用户u的一跳的特征,对应图中绿色竖条,可以看成该用户对当前物品的一阶响应(User's1-order response)。

img

继续拿ou1特征重复之前的操作,拿ou1和物品二跳的tuple算一个p值,加权对应的tail embedding,得到ou2。

重复做下去,得到很多跳的响应值oui,把这些响应值加起来,得到用户最终的embedding。

img

用这个用户embedding和物品最初的embedding做内积,再用一个sigmoid函数得出点击预测值。

img

学习算法如上图,在已知KG和RippleNet系统情况下,学习参数,最大化后验概率。通过贝叶斯定理,可以把该公式拆成3个值。第1项是参数的先验分布,用上面这个公式来刻画这个先验概率分布p(θ),这项对应的是正则项loss。

img

第2项给定参数θ,KG的概率,这项对应的是KG的embedding部分。当(h,r,t)是正样本,Ih,r,t接近1,反之为0,希望hTRt能接近真实的tuple值。

img

第3项已知参数θ和KG,用户和物品交互的似然函数。这个似然函数是一个伯努利分布,关于用户和物品内积的伯努力分布。

img

把这3项用负log做处理,得到loss函数,优化这个模型。

2、KGCN和KGCN-LS方法

KGCN:Knowledge GraphConvolutional Networks for Recommender Systems,是发表在2019年WWW上的一篇论文。KGNN-LS:Knowledge-awareGraph Neural Networks with Label Smoothness Regularization for RecommenderSystems,是发表在2019年KDD上的一篇论文,这篇是基于第1篇的扩展,这2篇论文一块讲解。核心思想是基于KG辅助的推荐,但引入了一个新的模型GCN(图神经网络),方法是基于GCN对KG扩展一个模型。

img

在KG中的边没有显示权值,只是一个关系类型。引入一个relation scoring function su(r),对每个relation打分,从而把KG转换成weightedgraph。函数su(r)的输入是user和relation,输出一个分值。核心思想是识别用户关注的类型,比如有些用户偏好同种类的电影,有些用户偏好某个主演的电影。su(r)用来刻画不同用户对不同relation的偏好层度,将user embeding和relation embedding内积,算出相应的分值。把异构KG转换成weighted graph,这样一个graph对应邻接矩阵Au,下标为u是因为每个用户对应的邻接矩阵是不一样的,su(r)是取决于用户。

img

把KG中实体信息通过GNN做一个融合,如上图公式是一个标准的GNN的公式,Au是用户对应的邻接矩阵。

img

Du是Au的三角对称矩阵diagonal degree matrix。

img

Wl就是训练传输参数矩阵。

img

Hl,Hl+1是entity对应的embedding矩阵。

img

σ是一个非线性函数。

img

这个式子本质是在KG上做了一个多跳的message passing,把实体周围的那些临近点的特征向中间聚集,最后一层学到的特征是融合了多跳的临近点的特征。当得到最后一层embedding Hl后,就可以做点击预测。

img

上图公式中u对应的是Userembedding。

img

vu是根据前面KGNN计算得出的关于用户的entity embedding。

img

通过f函数得到预测值,f函数可以取内积,或MLP等。到这是第1篇论文的KGCN模型。

img

如上公式,在传统GNN模型中,Au是固定的,只需要训练Wl。

img

但在我们的模型中,Au和Wl都需要训练,Au是通过relation scoring function计算,图的结构需要训练,导致模型参数很多,容易过拟合。

img

为了防止过拟合的问题,引入一个正则项,给模型一个约束。用label做约束,user engagement labels,指的是用户对物品的打分值,yuv是用户对某个物品的评分,这个评分是一个已知值,所以可以在KG中对这些点打一个标签。用户看过某部电影,对应的标签是1,没看过的电影对应的标签是0,对non-item实体没有标签。

img

下一步是预测某个点的label,有一类算法叫标签传播算法(label propagation algorithm, LPA),这个算法是优化下面这个函数。

img

遍历所有的边,Au是边的权值。如果i,j节点有边,说明这2个节点联系比较强,那这2个节点的label会比较相近。这2个节点的边权值越大,那这2个节点的label就越一致。这是算法LPA的一个假设,标签过度是平滑的。

img

预测一个无标签的节点,将其周围节点的label加权平均,重复该操作直到收敛,这就是label propagation。

img

利用label propagation做正则项,对于一个节点v,其真实lable是yuv(图中为0)。

img

利用LPA算法预测这个v的label,得到预测值?uv,算出预测值和真实值之间的损失J。

img

在做label propagation时,标签传播是取决于边权值,所以最终预测值是关于边权值的函数,损失J也是一个关于边权值的函数。损失函数R(A)是一个关于A的函数,所以可以把梯度往这个损失函数中传播,起到一个正则项的作用。

img

如上图,回顾一下整个模型,把原始异构KG转成weighted graph,学习边的权值,得到一个邻接矩阵,用GNN得到entity embedding,用这个entity embedding 和user embedding来做这个预测,得到预测值?uv,用?和真实值y得到一个loss,反向传播,将误差梯度向前传播,更新Au和参数W。

下面部分是正则项,邻接矩阵为参数,做一个labelpropagation,得到预测值?uv,用?和y得到一个loss,反向传播,更新Au。

img

的作用。

[外链图片转存中…(img-BLPPLJFH-1709548985930)]

如上图,回顾一下整个模型,把原始异构KG转成weighted graph,学习边的权值,得到一个邻接矩阵,用GNN得到entity embedding,用这个entity embedding 和user embedding来做这个预测,得到预测值?uv,用?和真实值y得到一个loss,反向传播,将误差梯度向前传播,更新Au和参数W。

下面部分是正则项,邻接矩阵为参数,做一个labelpropagation,得到预测值?uv,用?和y得到一个loss,反向传播,更新Au。

[外链图片转存中…(img-EGarVJfB-1709548985931)]

总结一下,本文主要介绍了3个部分的内容,第1部分介绍了知识图谱是推荐系统的一种新的辅助信息。另外2个部分介绍了两类知识图谱推荐方法,一类是基于embedding的知识图谱推荐方法,包括DKN和MKR,一类是混合型知识图谱推荐方法,包括RippleNet、KGCN和KGNN-LS。

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

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

相关文章

【深度学习笔记】计算机视觉——多尺度目标检测

多尺度目标检测 在 sec_anchor中,我们以输入图像的每个像素为中心,生成了多个锚框。 基本而言,这些锚框代表了图像不同区域的样本。 然而,如果为每个像素都生成的锚框,我们最终可能会得到太多需要计算的锚框。 想象一…

【PHP】PHP实现与硬件串口交互,向硬件设备发送指令数据(下)

目录 一、前言 二、 效果图 三、安装PHP扩展 四、添加模拟串口 五、PHP发送数据给硬件 PHP代码 前端代码 一、前言 上篇文章写到PHP怎么与硬件串口交互之实时接收硬件发送的数据,这里同样是以天平为例,介绍怎么向硬件设备发送数据, 需…

深度学习500问——Chapter02:机器学习基础(3)

文章目录 2.10 主成分分析(PCA) 2.10.1 主成分分析(PCA)思想总结 2.10.2 图解PCA核心思想 2.10.3 PCA算法推理 2.10.4 PCA算法流程总结 2.10.5 PCA算法主要优缺点 2.10.6 降维的必要性及目的 2.10.7 KPCA与PCA的区别 2.11 模型评估…

利用excel文件增量同步一个库的数据并自动校正两端数据库条数不一致

利用excel文件增量同步一个库的数据并自动校正两端数据库条数不一致 现在有sqlserver和mysql两个库上的表在进行同步,sqlserver上的是源表,mysql上是目标表。 我们就把sqlserver上的数据同步到mysql上 mysql 是没有数据的。 sqlserver的三个表只是创建了…

利用Python自动化日常任务

在快节奏的现代生活中,时间就是一切。幸运的是,Python提供了一系列强大的库和工具,可以帮助我们自动化那些乏味且重复的任务,从而释放我们的时间,让我们可以专注于更有创造性和有意义的工作。下面,我们将探…

6、Linux-服务管理、权限管理和授权(sudo权限)

一、服务管理 systemctl list-unit-files:查看服务systemctl start 服务名:启动服务systemctl stop 服务名:关闭服务systemctl restart 服务名:重启服务systemctl status 服务名:查看服务状态systemctl enable 服务名…

BioTech - 药物晶型预测与剂型设计 概述

欢迎关注我的CSDN:https://spike.blog.csdn.net/ 本文地址:https://blog.csdn.net/caroline_wendy/article/details/136441046 药物晶型预测与剂型设计是指利用计算机模拟和优化药物分子在固态形式下的结构、性质和稳定性,以及与制剂工艺和质…

Python实现微信电脑版微信支付收款监听及支付回调通知

摘要 为什么要监听收款?那是因为现在还有人在使用微信的收款码、商业码、赞赏码实现免签支付,这类实现方法的最终方案还是监听收款结果。 技术原理 通过Python实时解析微信电脑版控件的文本内容来获取信息。不需要Hook和抓包,也不是走任何…

[DevOps云实践] 跨AWS账户及Region调用Lambda

[DevOps云实践] 跨AWS账户及Region调用Lambda 本文將幫大家理清一下幾個問題: 如何跨不同AWS賬戶,不同Region來調用Lambda? 不同Lambda之間如何互相調用?有時我們希望我們的Lambda脚本能夠運行在多個AWS賬戶中的不同Region下,但是,我們還不希望每個下面都去建立一個運行…

温湿度传感器SHT21

SHT21是一款基于IIC的温湿度传感器,它的引脚及定义如下: 标准的IIC器件,没有其他多余的引脚,应用框图如下: 温度的测量范围是-40到125℃,湿度测量范围0-100%RH,具体参数及采样精度见下图&#x…

HM_2019在面积不变情况下编辑网格

首先,应该保存其形状,计算他的面积。让面积不变作为一个约束,然后进行网格的形变。

【网站项目】154大学生创新创业平台竞赛管理子系统

🙊作者简介:拥有多年开发工作经验,分享技术代码帮助学生学习,独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。🌹赠送计算机毕业设计600个选题excel文件,帮助大学选题。赠送开题报告模板&#xff…

d2-crud-plus 使用小技巧(二)—— 路由跳转查询

需求 项目中要在a.vue界面点击表格中数据,携带参数跳转到b.vue界面,并进行查询。需要在d2-crud-plus框架下实现。 解决方法 使用插槽将要点击的数据添加上点击事件,在点击事件中添加路由跳转,并携带参数。 在目标界面使用对外…

GIN与Echo:选择正确Go框架的指南

您是否在Go中构建Web应用?选择正确的框架至关重要!GIN和Echo是两个热门选择,每个都有其优势和特点。本指南将详细介绍每个框架的特性、速度、社区热度以及它们各自擅长的项目类型。最后,您将能够为您的下一个Web项目选择完美的框架…

C++11常用知识分享(一)【列表初始化 || 简化声明 || 范围for || 左右值 || 可变参数模板】

目录 一. 列表初始化 1)用法 2) initializer_list 小节: 二,简化声明 1) ,auto 2) ,decltype类 3),nullptr 三,范围for 四,C11后,STL容器变化 五&#xff0c…

一篇文章教会你如何在IOS真机上完美运行React Native

一篇文章教会你如何在IOS真机上完美运行React Native 项目初始化项目配置可能遇到的问题没有账号也没有Team设备上没有打开开发者模式,也没有信任开发者证书 无线调试 项目初始化 在终端使用**npx react-native init ProjectName**初始化React Native项目。 进入项…

力扣550 游戏玩法分析 IV

目录 题目描述 思路整理 1. 首次登录日期 2. 第二天登录 3. 计算比率 实现思路 完整代码及解释 题目描述 Table: Activity ----------------------- | Column Name | Type | ----------------------- | player_id | int | | device_id | int | | ev…

117.移除链表元素(力扣)

题目描述 代码解决 class Solution { public:ListNode* removeElements(ListNode* head, int val) {//删除头节点while(head!NULL&&head->valval){ListNode*tmphead;headhead->next;delete tmp;}//删除非头节点ListNode*curhead;while(cur!NULL&&cur-&g…

安卓虚拟机ART和Dalvik

目录 一、JVM和Dalvik1.1 基于栈的虚拟机字节码指令执行过程 1.2 基于寄存器的虚拟机 二、ART与Dalvikdex2aotAndroid N的运作方式 三、总结 一、JVM和Dalvik Android应用程序运行在Dalvik/ART虚拟机,并且每一个应用程序对应有一个单独的Dalvik虚拟机实例。 Dalvik…

Vue.js 实用技巧:深入理解 Vue.set 方法

🤍 前端开发工程师、技术日更博主、已过CET6 🍨 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 🕠 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 🍚 蓝桥云课签约作者、上架课程《Vue.js 和 E…