为豆瓣电影实现Item-based协同过滤的推荐系统

前面的两篇文章分别使用Spark mllib ALS实现了Model-based协同过滤推荐系统和使用Mahout实现了User-based的协同过滤推荐系统。
我们再来回顾一下item-base CF算法的特点:

  • 物品数明显小于用户数的场合,否则物品相似度矩阵计算代价很大
  • 适合长尾物品丰富,用户个性化需求强的领域
  • 对新用户友好,对新物品不友好,因为物品相似度矩阵不需要很强的实时性
  • 利用用户历史行为做推荐解释,比较令用户信服

所以item-base挺适合做电影的推荐。当用户浏览某个电影的时候,我们可以推荐给他类似的电影,或者根据用户以前的观影记录,推荐他感兴趣的电影。
本文还是以mahout 非分布式计算的方式实现。因为电影的记录比较少(166条),计算量不是很大。

阅读全文

为豆瓣电影实现User-based协同过滤的推荐系统

协同过滤(Collaborative Filtering),简单来说是利用某兴趣相投、拥有共同经验之群体的喜好来推荐使用者感兴趣的信息,个人透过合作的机制给予信息相当程度的反馈(如评分)并记录下来以达到过滤的目的进而帮助别人筛选信息,反馈不一定局限于特别感兴趣的,特别不感兴趣信息的纪录也相当重要,比如浏览信息,收藏,分享,点击等。

阅读全文

使用Spark MLlib给豆瓣用户推荐电影

推荐算法就是利用用户的一些行为,通过一些数学算法,推测出用户可能喜欢的东西。
随着电子商务规模的不断扩大,商品数量和种类不断增长,用户对于检索和推荐提出了更高的要求。由于不同用户在兴趣爱好、关注领域、个人经历等方面的不同,以满足不同用户的不同推荐需求为目的、不同人可以获得不同推荐为重要特征的个性化推荐系统应运而生。

阅读全文

Spymemcached的一个坑

Spymemcached 是 Memcached 的一个流行的Java client库(另一个比较著名的是原淘宝的 伯岩/庄晓丹 开发的XMemcached, 他也开发另一个Taobao开源的项目 Metamorphosis),性能表现出色,广泛应用于Java + Memcached 项目中。
Spymemcached 最早由 Dustin Sallings 开发,Dustin 后来和别人一起创办了Couchbase (原NorthScale),职位为首席架构师。2014加入Google。

阅读全文

Java8 简明教程

这是Benjamin Winterberg写的英文教程Modern Java - A Guide to Java 8,最早发表于2014年三月,当时由 ImportNew - 黄小非翻译成中文: Java 8简明教程。离原文初次发表已经快两年了,作者又陆陆续续提交多个commit,所以我根据原文以及黄小非的译文又做了修正。实际绝大部分的内容和小非翻译的一样,只有些许的变化。

Java并没有没落,人们开始认识到这一点

欢迎阅读我编写的Java 8介绍。本教程将带领你一步步认识这门语言的所有新特性。通过简单明了的代码示例,你将会学习到如何使用默认接口方法,Lambda表达式,方法引用和可重复注解。在这篇教程的最后,你还将对最新推出的API有一定的了解,例如:流控制,函数式接口,map扩展和新的时间日期API等等。
没有大段的废话,只是一些带注释的代码片段,望君喜欢。

本文最早发表在我的博客上。 你可以在Twitter上加我

阅读全文

Java RESTful框架的性能比较

在微服务流行的今天,我们会从纵向和横向分解代码的逻辑,将一些独立的无状态的代码单元实现为微服务,可以将它们发布到一些分布式计算单元或者Docker中,并在性能需要的时候及时地创建更多的服务单元。
微服务是一个概念,并没有规定服务的格式,但是很多厂商和框架都不约而同的采用RESTful的架构,尽管也有一些其它的性能很好的RPC框架。
如何在Java生态圈选择一个轻量级的RESTful框架?可以参考一些其他人的经验, 比如我翻译的: 最好的8个 Java RESTful 框架
就我个人而言,我选择框架的理由很简单:

  • 简单,轻量级
  • 性能好
  • 稳定,可靠
  • 易于开发和维护

我会首选遵循Java规范(JSR339)的框架,轻量级,便于发布到Docker容器中。 所以我不会选择Spring boot, Spring MVC, CXF等比较重的框架,也不会选择纯netty这样的太过底层,还得实现路由等基本功能框架。
因为追求轻量级,便于发布到docker容器中,我也不会考察JBOSS, Tomcat这样的JEE容器, 而是选用jetty, undertow这样的嵌入式容器。

所以,这里我挑选了几个候选者:

  1. Jersey + Grizzly
  2. Jersey + Jetty
  3. Dropwizard
  4. RESTEasy + Netty
  5. RESTEasy + Undertow

[Updated on 2015/11/18]
我增加了更多的 RESTful 框架,有些不是Jax-RS的实现,但是也有很活跃的社区。

  1. Jersey + Jetty4
  2. Spring Boot
  3. 纯Netty
  4. Vert.x
    你会发现一些有趣的测试结果。

Jersey 是Jax-RS的官方参考实现,可以很好的和其它JEE容器集成。RESTEasy是JBoss出品的框架,也很容易的和其它容器集成。Dropwizard实际上集成了Jersey, Jetty以及其它的第三方库比如它的Metrics,提供了一站式的开发,略微有些厚重。

测试相关的代码已经放在了GITHUB上: 代码

阅读全文

最好的8个 Java RESTful 框架

原文: Top 8 Java RESTful Micro Frameworks
过去的每一年,涌现出越来越多的Java框架。就像JavaScript,每个人都认为他们知道一个好的框架的功能应该是怎么样的。连我的老祖母现在也使用一个我从来没有听说过而且可能永远不会使用的框架。玩笑归玩笑,可以做几乎任何事的臃肿的框架市场已经饱和,,但是如何评判呢?

这篇文章旨在提供目前最好的 Java RESTfulful 框架。我只介绍轻量级的产品, 略过了那些臃肿的过度设计的框架。同时,我只想要他们稳定和成熟,提供简单,轻量级的特点。我只在介绍Play frameworks时打破这条规则,理由稍后给出。

在将来的项目中使用哪个 Java RESTful框架完全取决于你当前的需求。为了便于你取舍,我将列出最突出的框架功能,希望这能节省一些你的时间。

阅读全文

uriDB网站的可扩展的技术栈

背景

uriDB本身不生产干货,uriDB技术流网站只是大自然的搬运工。
Hacker News诞生依赖,已经有多个中文技术头条的网站了,比如开发者头条极客头条,为什么还要做这样一个雷同的头条网站呢?

有两个原因:
一是我想做一个分类头条的网站,按照技术领域对文章进行分类,这样只对前端感兴趣的同学可以只跟踪最新的前端文章。 同时uriDB只会筛选最新的技术干货,不会将问答,闲聊等技术层次低的文章收录。
二是这么多年来,我涉及的领域包括后台,大数据,前端和移动端的技术也是我感兴趣的领域。心中那份对技术的持久的热情,促使我将多年的技术积累以某种具体的形式呈现出来,籍此展示并能持久的进行技术架构的演化。

因此,uriDB技术流网站也就孵化出来了。虽然目前的访问量比较少,但是看的用户数和访问量在逐步的提升,也是一件令人欣慰的事。至少,这个网站收集的干货也为那些执着学习的同学带来些许的便利和技能提升。

与其说uriDB类似Hacker News网站, 还不说说它类似今日头条, 只不是今日头条上全是新闻类的内容,而uriDB上全是技术干货。今日头条会将目标网站上的内容抓去过来进行重新排版,更加适合阅读。我也抓去了目标文章的内容,却没有进行重新排版显示,主要是考虑到了版权的问题,还是老老实实的做Hacker News一样的转发。

这个网站是2015年国庆节期间开始启动的,也是作为我的side project在维护。我会时不时的将我的新的想法,技术灵感应用于这个网站上。

阅读全文