引子
在Qzone的“去年的今天”里,有这样一条说说,发现来北京一年一年了。
在这一年里,很充实。现进行反思和总结,给自己。
诚信,认真,专注,踏实
本文简书备份地址:微信红包随机算法初探
最近看了一篇文章,讲微信红包随机算法的。感觉很不错,所以自己实现了下,并进行了简单测试。
算法很简单,不是提前算好,而是抢红包时计算:
红包里的金额怎么算?为什么出现各个红包金额相差很大?
答:随机,额度在0.01和剩余平均值*2之间。
实现上述算法的逻辑主要是:
public static double getRandomMoney(RedPackage _redPackage) {
// remainSize 剩余的红包数量
// remainMoney 剩余的钱
if (_redPackage.remainSize == 1) {
_redPackage.remainSize--;
return (double) Math.round(_redPackage.remainMoney * 100) / 100;
}
Random r = new Random();
double min = 0.01; //
double max = _redPackage.remainMoney / _redPackage.remainSize * 2;
double money = r.nextDouble() * max;
money = money <= min ? 0.01: money;
money = Math.floor(money * 100) / 100;
_redPackage.remainSize--;
_redPackage.remainMoney -= money;
return money;
}
单例模式(Singleton
)也叫单态模式。
有时候需要内存中仅有一个某对象就足够了,出现多个就会出现内存浪费甚至逻辑错误。典型的有数据库连接池等,一个连接池就够了。
Initialization On Demand Holder
public class Singleton {
// 这个实例要不要不可变(final),一般不需要
private static Singleton singleton = new Singleton();
// 私有化构造器
private Singleton() {
}
public static Singleton getInstance() {
return singleton;
}
}
函数式接口是Java 8 对一类特殊类型的接口的称呼。
java.lang.Runnable
java.util.concurrent.Callable
java.security.PrivilegedAction
java.util.Comparator
java.io.FileFilter
java.io.file.pathMatcher
...
一直想找一款知识管理工具,但总不Match,从.txt开始,陆续使用、尝试了OneNote,WizNote,Typecho,WordPress,EverNote等,后来迷恋上了Markdown,又重新审视了许多工具,但总是不Match.
现在基本上使用Instapaper(Mac->iPad)做稍后读,筛选资料知识点,平时基本上用EverNote(全平台)记录,分享使用Roc`s随想录博客,该博客使用的是hexo,支持Markdown格式。
但是,没有好的Markdown编辑器。
于是,还不如自己动手做一个。
同步写:有时候并发写会造成数据出错,不一致,由于一般的写操作(如i++操作)是三个原子操作构成的:
取i;
temp = i+1;
i = temp;
//应该合并成一个操作的三步如果被中间执行污染数据的代码,那就造成错误。
由于需要同步的原因,引入锁的概念。但是锁也需要最小刻度。因为锁有性能开销。
CoffeeScript 是一门编译到 JavaScript 的小巧语言. 在 Java 般笨拙的外表下, JavaScript
其实有着一颗华丽的心脏. CoffeeScript 尝试用简洁的方式展示 JavaScript 优秀的部分.CoffeeScript 的指导原则是: “她仅仅是 JavaScript”. 代码一一对应地编译到 JS, 不会在编译过程中进行解释.
已有的 JavaScript 类库可以无缝地和 CoffeeScript 搭配使用, 反之亦然. 编译后的代码是可读的, 且经过美化,
能在所有 JavaScript 环境中运行, 并且应该和对应手写的 JavaScript 一样快或者更快.
优点:
总结就是,屏蔽掉不优雅的地方。
协同过滤推荐,其原理是利用人们共同的喜好和行为为相似的人推荐他 可能喜欢的信息,而用户的新的行为也会成为信息过滤的条件。1992 年,产 生了最早应用协同过滤系统的设计 Tapestry,主要是解决 Xerox 公司在 Palo Alto 的研究中心资讯过载的问题。1994 年,产生了里程碑式的 GroupLens, 这个系统主要是应用在新闻的筛选上,帮助新闻的阅听者过滤其感兴趣的新 闻内容,阅听者看过内容后给一个评比的分数,系统会将分数记录起来以备 未来参考之用。近年来,随着电子商务的兴起,电子商务的推荐系统也逐渐 成熟,最早的成熟代表应属亚马逊网络书店,这就是著名的“买了这本书的 人也买了什么”的算法。现在是一个信息严重过载的时代,从消息流中找寻 自己的爱好的信息也比较困难。协同过滤推荐过滤掉不喜欢的资讯,推荐用 户喜欢的资讯,节省时间提高效率。
本论文通过对推荐系统的研究,进一步的说明推荐系统在信息过载时代 的重要性以及处理信息模型的精巧之处。本论文主要研究多维空间向量相似 度的在推荐系统的应用。根据这个算法,结合 Java 的一些特性,设计一个类 库,更方便的使用该算法进行过滤推荐。
关键词:协同过滤
;Java
;Web
;反射
;数据格式化
;SpringMVC
;Spring
; Hibernate
附件:
好的原则可以让开发更规范,而且更好维护,易懂。现在主要想到的原则有:
REST将每个URI看做一个资源,websocket同样可以借鉴这个想法。
在项目中可以把每一个URI看做一个资源集合。
例如:
POST /api/workflow/changes
[ {} , {} ]
单个元素的信息传递可以看做只含有一个元素的集合。
同样的,登录和注销这种也可以看做资源:
POST /api/user/logins
DELETE /api/user/logins