0%

Java并发编程最常用和易用的技术莫过于synchronized关键字,而Scala的并发编程之旅也可以从synchronized开始。而synchronized的背后其实是monitor技术。

什么是Monitor

Monitor是解决并发编程问题的一种常用技术,可以有效解决互斥和同步两大常见问题,通常翻译为‘监视器’或‘管程’。个人认为‘管程‘更能表达monitor的含义,指的是管理共享变量以及对共享变量的操作过程,让他们支持并发。

依赖范围(scope)不同选项的区别

依赖范围参数的作用是控制依赖在不同阶段与classpath的关系,具体区别如下图所示。

依赖范围图

表中没有列出的值是import,这个选项是用于引入dependencyManagement,下文会有介绍。

依赖调解,调解同一依赖的不同版本

假设你的项目有如下的依赖树

POM
|-- A
| `-- B 1.0
|-- C
| `-- D
| `-- B 2.0
`-- E
`-- B 3.0

Maven的所有实际操作都是由插件完成的,如果没有插件,Maven什么都不会干。
(即时你没有在POM中配置<plugin>元素,Super POM中也已经帮你引入了若干核心插件)

那么问题来了,项目构建过程中,Maven是怎么知道应该在什么时候调用哪个插件的呢?

插件的调用时机,跟’生命周期’和’插件目标’有很大关系。

本文将介绍使用Hive强大的窗口函数,解决实际问题的方法,仅供参考。

连续登陆/活跃/访问问题

假设有一张登陆日志表:

CREATE TABLE user_login (
uid int comment '用户ID',
dt int comment '日期yyyymmdd'
) STORED AS PARQUET

简介

《黑客与画家》是硅谷创业之父Paul Graham的文集,这里的黑客指的是优秀的软件工程师,作者将黑客与画家作比较,认为与黑客最接近的职业是画家,这便是这本书书名的由来了。
Paul Graham在1995年创办了Viaweb,帮助个人用户方便的开设网上商店,1998年以5千万美元的价格卖给Yahoo公司。
2005年他创建了风投公司YC,被称为全世界最牛的创业孵化器,YC帮助了大量的创业公司(到2018年投资了1450家公司),比较成功的案例有:Airbnb,Stripe,Dropbox,Docker,GitLab等等。

简介

从 spark 2.0 开始,我们可以使用DataFrameReader 和 DataFrameWriter来读写MySQL。

SparkSession.read 返回 DataFrameReader.
Dataset.write 返回 DataFrameWriter.

煮几个栗子

其中spark是SparkSession

算法设计与实现

基于物品的协同过滤又称Item-Based CF.
基于Spark的Item-Based CF算法其实现原理和步骤与经典方法基本一致,不同的地方主要在于具体步骤内的并行化计算。

相似度算法

在Spark MLlib中提供了余弦相似度的分布式实现,org.apache.spark.mllib.linalg.distributed包中的IndexedRowMatrix是一个分布式矩阵类,其中提供了一个columnSimilarities方法用于计算该矩阵各列之间的余弦相似度。

基于用户的协同过滤

基于用户的协同过滤,即User-Based CF (User-Based Collaborative Filtering),是基于一个这样的假设“跟你爱好相同的人喜欢的物品,你很可能也喜欢”,所以User-Based CF主要的任务就是找出用户的最近邻居,从而根据最近邻居的喜好做出未知项的评分预测。
User-Based CF算法可以分为4个步骤:数据表示、最近邻查询、评分预测、推荐结果产生。

个性化推荐系统简介

个性化推荐系统的定义在 1997 年由 Resnick 和 Varian 提出:利用互联网向用户提供信 息和建议,帮助用户选择产品,或模拟售货员帮助用户完成购买行为的系统 。通常推荐 由三个要素组成:推荐算法、用户、候选推荐项目。简单来说,一次推荐过程就是推荐算 法从候选推荐项目中挑出某些项目给用户。

提出需求

实时统计业务系统(web,APP之类)的访问人数,即所谓UV,或者DAU指标.

这个需求怕是流计算最最最常见的需求了.

计算UV的关键点就在于去重,即同一个人访问两次是只计一个UV的.在离线计算中统计UV比较容易想到的方法就是用group或distinct机制来去重.但是在实时计算场景,还用group就不太科学了,一个是全量数据的group是比较费时的,第二个是全量数据的group是很费内存和CPU的.特别是当用户量巨大的时候,还要做到秒级更新就更难了.