Summary of recommended methods(1)

1.Metrics

  • RMSE
  • MAE
  • Coverage
  • Diversity
  • Recall
  • Precision

1.1 RMSE(均根方误差)

RMSE=∑u,i∈T(rui−r^ui)2∣T∣RMSE = \frac{\sqrt{\sum_{u, i \in T}(r_{ui} - \hat{r}_{ui}})^{2}}{\lvert T \rvert} RMSE=∣T∣∑u,i∈T​(rui​−r^ui​​)2​

  • uuu : 用户 uuu
  • iii : 物品 iii
  • ruir_{ui}rui​ : 用户 uuu 对 iii 的评分
  • r^ui\hat{r}_{ui}r^ui​ : 算法预测的评分

1.2 MAE(平均绝对值误差)

MAE=∑u,i∈T∣rui−r^ui∣∣T∣MAE = \frac{\sum_{u,i \in T} \lvert r_{ui} - \hat{r}_{ui} \rvert}{\lvert T \rvert} MAE=∣T∣∑u,i∈T​∣rui​−r^ui​∣​

RMSE vs MAE

  • RMSE : 增加的对预测物品评分不准的惩罚(平方项惩罚),系统更加苛刻
  • MAE : 对于整数评分系统,对预测分数取整会降低MAE误差

1.3 Coverage(覆盖率:推荐物品占物品集合的比例)

描述推荐算法对物品长尾的发掘能力(推荐结果中尽可能覆盖多的物品且出现次数差不多=长尾发掘能力强)

Coverage=∣⋃u∈UR(u)∣∣I∣Coverage = \frac{\lvert \bigcup_{u \in U} R(u) \rvert}{\lvert I \rvert} Coverage=∣I∣∣⋃u∈U​R(u)∣​

  • UUU : 用户的集合
  • R(u)R(u)R(u) : 推荐给用户 uuu 长度为NNN的物品列表
  • ∣I∣\lvert I \rvert∣I∣ : 物品总集合

1.3.1 信息熵(H),基尼系数(G)

H=−∑i=1np(i)log(p(i))H = - \sum_{i=1}^{n} p(i)log(p(i)) H=−i=1∑n​p(i)log(p(i))

  • p(i)p(i)p(i) : 物品 iii 的流行度/所有物品的流行度之和
  • 物品的流行度:对物品产生过行为的用户总数

G=1n−1∑j=1n(2j−n−1)p(ij)G = \frac{1}{n-1}\sum_{j=1}^{n}(2j - n - 1)p(i_{j}) G=n−11​j=1∑n​(2j−n−1)p(ij​)

  • iji_jij​ : 根据物品流行度 p()p()p() 从小到大排序的物品列表中的 jthj_{th}jth​ 个物品

1.3.2 马太效应

马太效应:强者更强,弱者更弱,在推荐问题中,会存在热门问题更热,长期霸占首页展示获得更多的曝光机会.

1.3.3 如何检测推荐算法是否存在马太效应

1.从原始的用户行为中计算出物品的流行度和基尼系数 G1G_1G1​

2.从推荐算法给出的推荐结果列表中计算出物品流行度的基尼系数 G2G_2G2​

3.如果 G2>G1G_2 > G_1G2​>G1​ ,推荐算法存在马太效应

1.4 Diversity(多样性)

用户的兴趣往往是多样的,但具体到用户访问推荐系统的某一刻兴趣往往是单一的,如果推荐结果也比较单一极有可能不能覆盖到用户此刻的兴趣.

Diversity=1−∑i,j∈R(u),i≠jS(i,j)12∣R(u)∣(∣R(u)∣−1)Diversity = 1 - \frac{\sum_{i,j\in R(u),i \neq j} S(i, j)}{\frac{1}{2}\lvert R(u)\rvert(\lvert R(u)\rvert -1)} Diversity=1−21​∣R(u)∣(∣R(u)∣−1)∑i,j∈R(u),i​=j​S(i,j)​

  • s(i,j)∈[0,1]s(i, j) \in [0, 1]s(i,j)∈[0,1] : 物品 $i, j $之间的相似度

D=1∣U∣∑u∈UDiversity(R(u))D = \frac{1}{\lvert U \rvert}\sum_{u\in U} Diversity(R(u)) D=∣U∣1​u∈U∑​Diversity(R(u))

1.5 Recall(召回率)

Recall=∑u∣R(u)⋂T(u)∣∑u∣T(u)∣Recall = \frac{\sum_{u} \lvert R(u) \bigcap T(u) \rvert}{\sum_{u} \lvert T(u) \rvert} Recall=∑u​∣T(u)∣∑u​∣R(u)⋂T(u)∣​

  • R(u)R(u)R(u) : 给用户 uuu 推荐的 NNN 个物品
  • T(u)T(u)T(u) : 用户 uuu 在测试集上的真实喜欢物品的集合

1.6 Precision

Precision=∑u∣R(u)⋂T(u)∣∑u∣R(u)∣Precision = \frac{\sum_{u} \lvert R(u) \bigcap T(u) \rvert}{\sum_{u} \lvert R(u) \rvert} Precision=∑u​∣R(u)∣∑u​∣R(u)⋂T(u)∣​

1.7 Novelty(新颖性)

新颖:推荐用户没有见过的,推荐结果的平均流行度,一定程度上可以比较粗犷的反映新颖性.

1.8 Serendipity(惊喜度)

令人惊喜的推荐结果:推荐的结果跟用户的喜好不相似,但是用户对推荐的结果很满意.

1.9 Trust(信任度)

推荐结果的让用户信任,会增加用户和推荐系统的交互行为

1.10 Real-time(实时性)

  1. 在用户和推荐系统交互的过程中可以实时的更新推荐列表

  2. 可以实时的将新的物品进行推荐

1.11 Robustness(健壮性:推荐系统抗击作弊的能力)

  1. 尽量使用代价较高的用户行为

  2. 对数据进行攻击检测,清洗异常数据

2.基于邻域的算法

2.1 UserCF

  1. 找到和目标用户相似的用户集合
  2. 从这个集合当中,推荐给用户没有见过的物品

2.1.1 相似度计算(基于物品集合计算相似度)

1. Jaccard

Wuv=∣N(u)⋂N(v)∣∣N(u)⋃N(v)∣W_{uv} = \frac{\lvert N(u) \bigcap N(v) \rvert}{\lvert N(u) \bigcup N(v) \rvert} Wuv​=∣N(u)⋃N(v)∣∣N(u)⋂N(v)∣​

2. 余弦相似度

Wuv=∣N(u)⋂N(v)∣∣N(u)∣∣N(v)∣W_{uv} = \frac{\lvert N(u) \bigcap N(v) \rvert}{\sqrt{\lvert N(u) \rvert \lvert N(v) \rvert}} Wuv​=∣N(u)∣∣N(v)∣​∣N(u)⋂N(v)∣​

  • N(u)N(u)N(u) : 表示用户 uuu 曾经有过正反馈的物品集合
  • N(v)N(v)N(v) : 表示用户 vvv 曾经有过正反馈的物品集合

3. 相似度计算的改进(用户相似度矩阵)

两用户计算相似度,时间复杂度:O(∣U∣∗∣U∣)O(\lvert U \rvert* \lvert U \rvert)O(∣U∣∗∣U∣)

事实上,很多用户之间并有交集,很多∣N(u)⋂N(v)∣=0\lvert N(u) \bigcap N(v) \rvert = 0∣N(u)⋂N(v)∣=0的情况.

所以,可以之计算出用户两两之间有交互的用的相似度.

  1. 构建物品到用户的倒排表
  2. 建立用户的相似度矩阵
item1 item2 item3
user
A a b d
B a c None
C b e None
D c d e
user1 user2
item
a A B
b A C
c B D
d A D
e C D

如何构造相似度矩阵WMat : 为余弦相似度中的分子

  • item.a : W[A][B],W[B][A]W_{[A][B]},W_{[B][A]}W[A][B]​,W[B][A]​位置权重加1
  • item.b : W[A][C],W[A][C]W_{[A][C]},W_{[A][C]}W[A][C]​,W[A][C]​位置权重加1
WMat
A B C D
A 0 1 1 1
B 1 0 0 1
C 1 0 0 1
D 1 1 1 1

4.计算对物品的喜爱度

P(u,i)=∑v∈S(u,K)⋂N(i)wuvrviP(u, i) = \sum_{v \in S(u, K) \bigcap N(i)} w_{uv} r_{vi} P(u,i)=v∈S(u,K)⋂N(i)∑​wuv​rvi​

  • S(u,K)S(u,K)S(u,K): 跟用户 uuu 最相似的top K个用户
  • N(i)N(i)N(i) : 对物品iii 有过行为的的用户集合
  • S(u,K)⋂N(i)S(u, K) \bigcap N(i)S(u,K)⋂N(i) : 在与iii有过交互行为的用户中取前top K个
  • WuvW_{uv}Wuv​ : 用户 u,vu, vu,v 的相似度
  • rvir_{vi}rvi​ : 用户 vvv ,对物品 iii 的喜好度(单一反馈:喜欢不喜欢,为1)

计算用例(根据WMat)

P(A,c)=WA,B+WA,D=16+13=0.7416P(A, c) = W_{A,B} + W_{A, D} = \frac{1}{\sqrt{6}}+\frac{1}{3}= 0.7416 P(A,c)=WA,B​+WA,D​=6​1​+31​=0.7416

  1. 计算用户AAA 对 物品 ccc,的喜爱程度
  2. 跟物品 ccc,有过交互行为的用户只有B,DB, DB,D

2.1.2 User-IIF

削弱两两用户之间共有的热门物品对相似度计算的影响.

Wuv=∑i∈N(u)⋂N(v)1log1+∣N(i)∣∣N(u)∣∣N(v)∣W_{uv} = \frac{\sum_{i\in N(u)\bigcap N(v)} \frac{1}{log1 + \lvert N(i) \rvert}}{\sqrt{\lvert N(u) \rvert \lvert N(v) \rvert}} Wuv​=∣N(u)∣∣N(v)∣​∑i∈N(u)⋂N(v)​log1+∣N(i)∣1​​

1log1+∣N(i)∣\frac{1}{log1 + \lvert N(i) \rvert}log1+∣N(i)∣1​ : 物品热度的倒数

2.1.3 相似度计算(基于用户-物品的评分矩阵)

RMat # 评分矩阵
user p1 p2 p3 p4 p5
0 a 5 3 4 4 NaN
1 b 3 1 2 3 3.0
2 c 4 3 4 3 5.0
3 d 3 3 1 5 4.0
4 e 1 5 5 2 1.0
  1. Pearson相关系数

sim(a,b)=∑p∈P(ra,p−rˉa)(rb,p−rˉb)∑p∈P(ra,p−rˉa)2∑p∈P(rb,p−rˉb)2sim(a, b) = \frac{\sum_{p\in P}(r_{a,p}-\bar{r}_a)(r_{b,p} - \bar{r}_b)}{\sqrt{\sum_{p\in P}(r_{a,p} - \bar{r}_a)^2}\sqrt{\sum_{p\in P}(r_{b,p} - \bar{r}_b)^2}} sim(a,b)=∑p∈P​(ra,p​−rˉa​)2​∑p∈P​(rb,p​−rˉb​)2​∑p∈P​(ra,p​−rˉa​)(rb,p​−rˉb​)​

  • PPP : 物品集合
  • a,ba,ba,b : 用户 a,ba,ba,b
  • ra,pr_{a,p}ra,p​ : 用户 aaa 对物品 ppp 的评分
  • rˉa\bar{r}_arˉa​ : 用户 aaa 对其评价过物品的平均分
  • sim(a,b)sim(a, b)sim(a,b) :相似度的取值区间在[-1, 1]
  1. 预测评分

pred(a,p)=rˉa+∑b∈Nsim(a,b)∗(rb,p−rˉb)∑b∈Nsim(a,b)pred(a,p) = \bar{r}_a + \frac{\sum_{b\in N}sim(a, b)*(r_{b,p} - \bar{r}_b)}{\sum_{b\in N}sim(a,b)} pred(a,p)=rˉa​+∑b∈N​sim(a,b)∑b∈N​sim(a,b)∗(rb,p​−rˉb​)​

  • NNN : topN个与 aaa 相似的用户

2.2 ItemCF

  1. 计算物品的相似度
  2. 根据物品的相似度和用户购买历史给用户推荐相似的物品

Wij=∣N(i)⋂N(j)∣∣N(i)∣W_{ij} = \frac{\lvert N(i)\bigcap N(j) \rvert}{\lvert N(i) \rvert} Wij​=∣N(i)∣∣N(i)⋂N(j)∣​

  • N(i)N(i)N(i) : 喜欢物品 iii 的用户数量
  • ∣N(i)⋂N(j)∣\lvert N(i) \bigcap N(j) \rvert∣N(i)⋂N(j)∣ : 同时喜欢物品 iii 和 jjj 的用户数量
  • WijW_{ij}Wij​ : 喜欢物品 iii 的用户中有多少比例也喜欢物品 jjj

2.2.1 针对热门物品的改进

如果物品很热门,很多人喜欢,那么热门物品会和其他物品的相似度增加.不利于对长尾物品的挖掘,增加了马太效应

Wij=∣N(i)⋂N(j)∣∣N(i)∣∣(N(j)∣W_{ij} = \frac{\lvert N(i) \bigcap N(j) \rvert}{\sqrt{\lvert N(i) \rvert \lvert(N(j)\rvert}} Wij​=∣N(i)∣∣(N(j)∣​∣N(i)⋂N(j)∣​

对分母增加了物品 jjj 的权重,减小热门物品对相似度的影响.

同理:ItemCF的计算和UserCF类似:

  1. 构建用户-物品的倒排表(避免没有用户交集的物品相似度计算)
  2. 构建物品的相似度矩阵W

P(u,j)=∑i∈N(u)⋂S(j,K)wjiruiP(u,j) = \sum_{i\in N(u) \bigcap S(j, K)} w_{ji}r_{ui} P(u,j)=i∈N(u)⋂S(j,K)∑​wji​rui​

2.2.2 针对过活跃用户的改进IUF(Inverse User Frequence)

ItemCF两个物品的相似度是基于共同喜它们的Users,所以每个用户的历史纪录都会影响到相似度计算,如果有的用户过于活跃,因为这一个用户产生很大的开销.

Wij=∑u∈N(i)⋂N(j)1log1+∣N(u)∣∣N(i)∣∣N(j)∣W_{ij} = \frac{\sum_{u\in N(i)\bigcap N(j)} \frac{1}{log1+\lvert N(u) \rvert}}{\sqrt{\lvert N(i) \rvert \lvert N(j) \rvert}} Wij​=∣N(i)∣∣N(j)∣​∑u∈N(i)⋂N(j)​log1+∣N(u)∣1​​

IUF是通过对两两物品的交集用户的活跃度进行变换,减小过活跃用户的影响.

2.2.3 物品相似度的归一化

ItemCF中对相似度矩阵进行最大值归一化,可以提高推荐的准确率,推荐结果的多样性.一般情况下,热门的类其类内的物品相似度一般比较大.如果不进行归一化,就会推荐热门类内的物品,增加马太效应.会降低模型覆盖率.

W′=WijMaxjWijW^{'} = \frac{W_{ij}}{Max_{j} W_{ij}} W′=Maxj​Wij​Wij​​

2.2.4 物品相似度计算(用户-物品评分矩阵)

RMat # 评分矩阵
user p1 p2 p3 p4 p5
0 a 5 3 4 4 NaN
1 b 3 1 2 3 3.0
2 c 4 3 4 3 5.0
3 d 3 3 1 5 4.0
4 e 1 5 5 2 1.0
  1. 余弦相似度

sim(a⃗⋅b⃗)=a⃗⋅b⃗∣a⃗∣∗∣b⃗∣sim(\vec{a}\cdot \vec{b}) = \frac{\vec{a}\cdot \vec{b}}{\lvert \vec{a}\rvert*\lvert \vec{b}\rvert} sim(a⋅b)=∣a∣∗∣b∣a⋅b​

  • a⃗\vec aa : 物品 aaa 对应的评分向量
  • b⃗\vec bb : 物品 bbb 对应的评分向量
  1. 改进余弦相似度(考虑了用户平均评分的差异)

sim(p1,p2)=∑u∈U(ru,p1−rˉu)(ru,p2−rˉu)∑u∈U(ru,p1−rˉu)2∑u∈U(ru,p2−rˉu)2sim(p_1, p_2) = \frac{\sum_{u\in U}(r_{u,p_1} - \bar{r}_u)(r_{u,p_2} - \bar{r}_u)}{\sqrt{\sum_{u\in U}(r_{u,p_1}-\bar{r}_u)^2}\sqrt{\sum_{u\in U}(r_{u,p_2} - \bar{r}_u)^2}}sim(p1​,p2​)=∑u∈U​(ru,p1​​−rˉu​)2​∑u∈U​(ru,p2​​−rˉu​)2​∑u∈U​(ru,p1​​−rˉu​)(ru,p2​​−rˉu​)​

预测评分

pred(a,p1)=∑pi∈ratedItems(u)sim(pi,p1)∗ra,pi∑pi∈ratedItems(a)sim(pi,p1)pred(a, p_1) = \frac{\sum_{p_i\in ratedItems(u)} sim(p_i, p_1)*r_{a,p_i}}{\sum_{p_i\in ratedItems(a)}sim(p_i, p_1)} pred(a,p1​)=∑pi​∈ratedItems(a)​sim(pi​,p1​)∑pi​∈ratedItems(u)​sim(pi​,p1​)∗ra,pi​​​

2.2.5 哈利波特问题

ItemCF算法对图书推荐问题中,很多图书都和<哈利波特>相关,主要是哈利波特太畅销了,大多数买书的人都会同时购买<哈利波特>.

wij=∣N(i)⋂N(j)∣∣N(i)∣∣N(j)∣w_{ij} = \frac{\lvert N(i)\bigcap N(j) \rvert}{\sqrt{\lvert N(i)\rvert \lvert N(j) \rvert }} wij​=∣N(i)∣∣N(j)∣​∣N(i)⋂N(j)∣​

如果 jjj 非常热门,∣N(i)⋂N(j)∣\lvert N(i)\bigcap N(j) \rvert∣N(i)⋂N(j)∣,会很接近 ∣N(i)∣\lvert N(i) \rvert∣N(i)∣,尽管分母已经 jjj的热度,但是实际应用中,热门商品仍会获得很高的相似度.

解决方法:增加对热门物品的惩罚

Wij=∣N(i)⋂N(j)∣∣N(i)∣1−α∣N(j)∣αW_{ij} = \frac{\lvert N(i)\bigcap N(j) \rvert}{\lvert N(i)\rvert^{1-\alpha}\lvert N(j)\rvert^{\alpha}}Wij​=∣N(i)∣1−α∣N(j)∣α∣N(i)⋂N(j)∣​

  • α\alphaα : α∈[0.5,1]\alpha \in [0.5, 1]α∈[0.5,1]
  • α=0.5\alpha = 0.5α=0.5 : 准确率和召回率最高
  • α越大\alpha 越大α越大 : 覆盖率越高,推荐结果的平均热度降低

2.3 UserCF vs ItemCF

UserCF ItemCF
Item
性能 用户少于物品 物品少于用户
领域 时效较强,个性化弱 长尾挖掘,个性化强
实时性 用户新行为不会立即反馈到推荐结果 用户的新行为会实时影响推荐结果
冷启动 新用户不友好,用户矩阵定时更新,新物品产生用户行为后才会被推荐给相似用户 新用户产生一个行为即可为其推荐,物品矩阵不能实时更新
推荐理由 推荐结果可解释性弱 根据用户的历史推荐,结果使用户比较信服

推荐方法-1:UserCFItemCF相关推荐

  1. 【C 语言】字符串拷贝 ( 函数形参使用推荐方法 | 凡是涉及 修改指针指向 的操作一律创建新的 指针变量 执行 | 引入 辅助 局部 指针变量 )

    文章目录 一.函数形参使用推荐方法 二.完整代码示例 一.函数形参使用推荐方法 在函数中 , 形参 中的 指针变量 , 不建议直接使用 ; 推荐 在 函数中 , 定义 局部 指针变量 , 接收 形参中 ...

  2. python单元测试的应用_单元测试pythongui应用程序的推荐方法是什么?

    我目前愚蠢到试图为Python桌面应用程序维护两个并行代码基,一个使用PyGObject introspection for GTK 3,另一个使用PyGTK for GTK 2.我主要在PyGObj ...

  3. 《软件需求分析(第二版)》第 3 章——需求工程的推荐方法 重点部分总结

    文章目录 前言 一.单选题 二.填空题 总结 前言 软件需求分析就是把软件计划期间建立的软件可行性分析求精和细化,分析各种可能的解法,并且分配给各个软件元素.需求分析是软件定义阶段中的最后一步,是确定 ...

  4. 【2】基于用户行为的推荐方法

    0.写在前面 基于用户行为数据的应用其实早在个性化推荐系统诞生之前就已经在互联网上非常流行了,其中最典型的就是各种各样的排行榜.这些排行榜包括热门排行榜和趋势排行榜等.尽管这些排行榜应用仅仅基友简单的 ...

  5. 格力关联公司公开“菜谱的推荐方法”相关专利

    据天眼查公开信息显示,4月2日,珠海格力电器股份有限公司.珠海联云科技有限公司公开"菜谱的推荐方法和装置.存储介质.电子装置"相关专利,申请日期为2020年12月28日,公开号为C ...

  6. TransFM:基于因子分解机的序列推荐方法

    ▌概述 今天解读的论文是由 Rajiv Pasricha 和 Julian McAuley 两位大佬提出的发表在 RecSys18 上的,是 TransRec 和 FM 的结合版本.论文下载地址: h ...

  7. PSRAM/SRAM与XMC硬件连接的推荐方法

    AN0068-PSRAM/SRAM与XMC硬件连接的推荐方法 1.概述 AT32系列的部分MCU产品集成XMC(外部存储器控制器)接口,支持外接PSRAM存储器扩展存储 空间.其中144引脚封装MCU ...

  8. 论文研读-AI4VIS-可视化推荐-VizML: 一种基于机器学习的可视化推荐方法

    VizML: 一种基于机器学习的可视化推荐方法 1 论文概述 1.1 摘要 1.2 引言 2 问题陈述 3 相关工作 3.1 基于规则的可视化推荐系统 3.2 基于机器学习的可视化推荐系统 4 数据 ...

  9. 抖音速上热门推荐方法和技巧

    抖音短视频怎么快速上热门推荐,方法和技巧都在这里,抖音很火,一下子催生了许多大小网红,想在抖音走红的人越来越多,但是任何一个平台,毕竟只是少数人能火起来,更多的人能参与到内容创作过程当中,并且去享受它 ...

  10. MindSpore首发:基于贝叶斯的图神经网络推荐方法,提升新用户和交互稀疏用户推荐的点击率

    BGCF背景简介 针对推荐系统中由于观察数据噪声或不足导致用户与物品的交互不确定性问题,华为诺亚方舟实验室和分布式与并行软件实验室MindSpore团队联合提出了一种基于贝叶斯的图神经网络协同过滤(B ...

最新文章

  1. Linux C++与Python混合编程(g++生成链接库与python调用)
  2. centos 7 单用户模式无法重置root密码 解决方法
  3. 基于meanshift的手势跟踪与电脑鼠标控制(手势交互系统)
  4. 线性表:4.结合顺序表和链表——静态链表及C语言实现
  5. unable to locate package gparted
  6. Java - package和import
  7. 确定一个整数是否是2的幂
  8. 阿酷三合一版_3DMax阿酷插件终极版下载-阿酷插件 v3.2 2009-2020 开源无限制版-简易下载站...
  9. 通用码头计算机管理系统,智慧港口码头货物管理解决方案_华测导航-华测导航...
  10. snappy格式解析
  11. SSM框架之数据分页,模糊查询
  12. 携手聚力 共赢数智未来丨物通博联招募生态合作伙伴
  13. 按住crtl单击MyEclipse的方法没有跳转的解决办法
  14. 了解如何使用 Mac 或 PC 同步音乐、影片(新系统不用iTunes)
  15. 邓应海:下周黄金走势分析,警惕直接跳高
  16. 目标检测2——借Detectron2源码理解Anchors与RPN
  17. 项目提测CheckList通用版
  18. GO Package、GOPATH、GOMOD、GOROOT、GOPROXY、版本迭代
  19. 用计算机弹奏音乐的数字乐谱,抖音计算器音乐
  20. obs源码分析【五】:音频采集线程

热门文章

  1. 阿里巴巴Java开发文档2020版学习-日期时间
  2. WPF中的相关属性含义
  3. vue-router 修改或添加新参数
  4. vue - webpack.dev.conf.js for FriendlyErrorsPlugin
  5. 怎么设置Linux swap分区?方法教程
  6. 解决进入XP系统无法响应故障
  7. 车轮轨迹原理_倒车轮子原理是什么 倒车原理动画演示很有用
  8. wordpress数据库表结构
  9. jni c java_使用JNI在C中调用java代码
  10. js小游戏---扫雷