V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  superadmin  ›  全部回复第 1 页 / 共 1 页
回复总数  6
2018-07-06 14:52:33 +08:00
回复了 wdy3334 创建的主题 职场话题 有没有什么软件,可以实现离开某个位置后提醒你干什么
其实你要的就是一个电子围栏,离开了,告警,进入了,通知
2018-07-06 14:51:45 +08:00
回复了 wdy3334 创建的主题 职场话题 有没有什么软件,可以实现离开某个位置后提醒你干什么
额~ 每天都是自动打开,时间在一个范围内随机
2017-05-22 17:41:46 +08:00
回复了 yuhuan66666 创建的主题 Java Java 生成的 UUID 出现了重复?! 什么鬼??
Twitter-Snowflake
参考:
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
* tweeter 的 snowflake 移植到 Java:
* (a) id 构成: 42 位的时间前缀 + 10 位的节点标识 + 12 位的 sequence 避免并发的数字(12 位不够用时强制得到新的时间前缀)
* 注意这里进行了小改动: snowkflake 是 5 位的 datacenter 加 5 位的机器 id; 这里变成使用 10 位的机器 id
* (b) 对系统时间的依赖性非常强,需关闭 ntp 的时间同步功能。当检测到 ntp 时间调整后,将会拒绝分配 id
*/

public class IdWorker {

private final static Logger logger = LoggerFactory.getLogger(IdWorker.class);

private final long workerId;
private final long epoch = 1403854494756L; // 时间起始标记点,作为基准,一般取系统的最近时间
private final long workerIdBits = 10L; // 机器标识位数
private final long maxWorkerId = -1L ^ -1L << this.workerIdBits;// 机器 ID 最大值: 1023
private long sequence = 0L; // 0,并发控制
private final long sequenceBits = 12L; //毫秒内自增位

private final long workerIdShift = this.sequenceBits; // 12
private final long timestampLeftShift = this.sequenceBits + this.workerIdBits;// 22
private final long sequenceMask = -1L ^ -1L << this.sequenceBits; // 4095,111111111111,12 位
private long lastTimestamp = -1L;

private IdWorker(long workerId) {
if (workerId > this.maxWorkerId || workerId < 0) {
throw new IllegalArgumentException(String.format("worker Id can't be greater than %d or less than 0", this.maxWorkerId));
}
this.workerId = workerId;
}

public synchronized long nextId() throws Exception {
long timestamp = this.timeGen();
if (this.lastTimestamp == timestamp) { // 如果上一个 timestamp 与新产生的相等,则 sequence 加一(0-4095 循环); 对新的 timestamp,sequence 从 0 开始
this.sequence = this.sequence + 1 & this.sequenceMask;
if (this.sequence == 0) {
timestamp = this.tilNextMillis(this.lastTimestamp);// 重新生成 timestamp
}
} else {
this.sequence = 0;
}

if (timestamp < this.lastTimestamp) {
logger.error(String.format("clock moved backwards.Refusing to generate id for %d milliseconds", (this.lastTimestamp - timestamp)));
throw new Exception(String.format("clock moved backwards.Refusing to generate id for %d milliseconds", (this.lastTimestamp - timestamp)));
}

this.lastTimestamp = timestamp;
return timestamp - this.epoch << this.timestampLeftShift | this.workerId << this.workerIdShift | this.sequence;
}

private static IdWorker flowIdWorker = new IdWorker(1);
public static IdWorker getFlowIdWorkerInstance() {
return flowIdWorker;
}



/**
* 等待下一个毫秒的到来, 保证返回的毫秒数在参数 lastTimestamp 之后
*/
private long tilNextMillis(long lastTimestamp) {
long timestamp = this.timeGen();
while (timestamp <= lastTimestamp) {
timestamp = this.timeGen();
}
return timestamp;
}

/**
* 获得系统当前毫秒数
*/
private static long timeGen() {
return System.currentTimeMillis();
}

public static void main(String[] args) throws Exception {
System.out.println(timeGen());

IdWorker idWorker = IdWorker.getFlowIdWorkerInstance();
// System.out.println(Long.toBinaryString(idWorker.nextId()));
System.out.println(idWorker.nextId());
System.out.println(idWorker.nextId());
}

}
2017-05-22 09:45:09 +08:00
回复了 sghcel 创建的主题 程序员 电脑能访问手机里面的服务吗?
小米手机文件管理有开启 FTP 功能
2017-05-10 13:52:45 +08:00
回复了 superadmin 创建的主题 程序员 SpringCloud + SpringBoot Restful 架构重构
额~ 换行不行吗?? md 支持吗? 一下测试
aaa
</br>
bbb
2017-05-10 09:36:17 +08:00
回复了 superadmin 创建的主题 程序员 SpringCloud + SpringBoot Restful 架构重构
自顶一下
关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1427 人在线   最高记录 6679   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 14ms · UTC 17:20 · PVG 01:20 · LAX 09:20 · JFK 12:20
Developed with CodeLauncher
♥ Do have faith in what you're doing.