0%

概述

SnowFlake算法生成id的结果是一个64bit大小的整数,它的结构如下图:

WXJabvMGsuF9NrD

  • 1位,不用。二进制中最高位为1的都是负数,但是我们生成的id一般都使用整数,所以这个最高位固定是0

  • 41位,用来记录时间戳(毫秒)。

    • 41位可以表示个数字,
    • 如果只用来表示正整数(计算机中正数包含0),可以表示的数值范围是:0 至 ,减1是因为可表示的数值范围是从0开始算的,而不是1。
    • 也就是说41位可以表示个毫秒的值,转化成单位年则是年
  • 10位,用来记录工作机器id。

    • 可以部署在个节点,包括5位datacenterId5位workerId
    • 5位(bit)可以表示的最大正整数是,即可以用0、1、2、3、….31这32个数字,来表示不同的datecenterId或workerId
  • 12位,序列号,用来记录同毫秒内产生的不同id。

    • 12位(bit)可以表示的最大正整数是,即可以用0、1、2、3、….4094这4095个数字,来表示同一机器同一时间截(毫秒)内产生的4095个ID序号

由于在Java中64bit的整数是long类型,所以在Java中SnowFlake算法生成的id就是long来存储的。

SnowFlake可以保证:

  • 所有生成的id按时间趋势递增
  • 整个分布式系统内不会产生重复id(因为有datacenterId和workerId来做区分)
阅读全文 »

问题

不同用户需要展示不同的登陆页

解决方案

修改web.xml欢迎页,跳转到index.mvc动态页面中

1
2
3
<welcome-file-list>
    <welcome-file>index.mvc</welcome-file>
</welcome-file-list>

创建controller

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
@Slf4j
@Controller
public class IndexController {

/**
* 页面跳转
*
* @return
*/
@RequestMapping(value = "/index", method = RequestMethod.GET)
public String index(@RequestParam Map map, Model model) {
if (map != null) {
model.addAllAttributes(map);
return (String) map.get("custom");
}
return "index";
}
}

效果

http://localhost:8080/hug_interview/?custom=ibd

http://localhost:8080/hug_interview/

修改service.xml文件

在tomcat安装目录下找到conf目录(tomcat/conf/service.xml)

path:虚拟路径,以 / 开头;

docBase:磁盘路径(绝对路径),Windows环境以盘符(D:/template)开始,linux环境如下;

reloadable:为 true 时 当web.xml或者class有改动的时候都会自动重新加载不需要从新启动服务;

1
<Context path="/hug_interview/informedConsent" docBase="/home/fllow/cloudFollowupImage/informedConsent" reloadable="true" />

PARQHTlYsId2u95

Java的List在删除元素时,一般会用list.remove(o)/remove(i)方法。在使用时,容易触碰陷阱,得到意想不到的结果。总结以往经验,记录下来与大家分享。

阅读全文 »

医院就诊凭条太多

挂号、抽血、B超、缴费等各个环节都能在自助机上完成操作,会产生很多凭条,凭条太多不方便,而且容易丢失。