位运算、位图法以及状态管理

背景 前几天读某个框架的代码,一路下来读着挺顺畅的,唯有读到某处的时候卡顿了,这个地方主要判断是否属于某种状态,但是有点不直观,主要是它使用了位运算中的或运算。虽然不是很直观,但是觉得特别的,因为平常就是四则运算比较多,涉及位运算确实少。于是记了下来,后来回忆其实JDK里面也有不少涉及位运算来管理判断状态的,比如JDK的线程池就有使用。 位运算 在 Java 语言中,位运算有如下这些: 左移(&l … 继续阅读

图论基础-图的遍历

图的遍历 图的遍历指的是从图中的任一顶点出发,对图中的所有顶点访问一次且只访问一次。 图的遍历分两种,深度优先和广度优先。 深度优先 深度优先搜索法是树的先根遍历的推广,它的基本思想是:从图G的某个顶点v0出发,访问v0,然后选择一个与v0相邻且没被访问过的顶点vi访问,再从vi出发选择一个与vi相邻且未被访问的顶点vj进行访问,依次继续。如果当前被访问过的顶点的所有邻接顶点都已被访问,则退回到已 … 继续阅读

一个系统设计:给所有当天生日的用户发一封生日邮件

问题描述 以前曾经思考过类似的问题,比如腾讯公司,每逢生日,都会给用户发一封邮件。按QQ的用户规模,假设全国每人一个QQ,那么用户表有14亿条。如何给当天生日的人发送祝福邮件?这问题其实挺有意思的,很多可以思考和优化的点,于是我也想了一个初步方案。 一个系统设 系统总人数为Total。 假设,用户用户生日是分布均匀的,也就是说,每天的生日人数=1/365 * Total = 1/365 * 14亿 … 继续阅读

高性能队列:Disruptor介绍以及使用场景 (一)

最近看了一些关于Disruptor的介绍,觉得这个新的消息队列非常厉害,单机性能就非常高。于是搜索并整理了一些资料,寻找往后可能使用的场景。 Disruptor 介绍 Disruptor 是LMX开源出来的java编写的一个并发消息处理器,在队列中一边生产者放入消息,另外一边消费者并行取出处理,其核心是根据现代CPU硬件缓存特点发明不同于通用LinkedList或Queue的新型数据结构RingB … 继续阅读

API接口签名生成算法和签名验证算法

为了接口安全,需要做API接口校验。 接口安全问题 请求身份是否合法? 请求参数是否被篡改? 请求是否唯一? 1.请求身份 为开发者分配AppKey(开发者标识,确保唯一)和AppSecret(用于接口加密,确保不易被穷举,生成算法不易被猜测)。 2.防止篡改 参数签名 按照请求参数名的字母升序排列非空请求参数(包含AppKey),使用URL键值对的格式(即key1=value1&key2 … 继续阅读