首页
题库
面试
求职
学习
竞赛
More+
所有博客
搜索面经/职位/试题/公司
搜索
我要招人
去企业版
登录 / 注册
首页
>
试题广场
>
一般在大型系统中,都会为每个资源分配一个唯一的ID,在大型系
[问答题]
一般在大型系统中,都会为每个资源分配一个唯一的ID,在大型系统中这个并非易事,目前人人网一天产生新鲜事在千万量级,现在由你来设计一个产生新鲜事ID的模块。要求写出解题思路和伪代码。
拿分法宝:
1) 新鲜事ID绝对不能重复
2)你可以借助DB等辅助工具,提供InsertDB, UpdateDB, QueryDB三API供你使用, 假设访问DB不会有异常。
3) 高并发情况要考虑, 提供Lock, Unlock两个API供你使用。
4) 要求写出解题思路和伪代码出来。
添加笔记
求解答(1)
邀请回答
收藏(32)
分享
纠错
3个回答
添加回答
1
郎健
解题思路:
1、使用单例模式。定义一个sequenceGenerator单例类,
声明一个getSequence方法,将sequence序号依次相加
。
2、产生
ID
的规则是:将
ID设置为字符串。ID =
当前日期+整型
sequence。
伪代码:
public class SequenceGenerator {
private SequenceGenerator generatorInstance = null;
private long sequence = 0;
private SequenceGenerator (){}
public static SequenceGenerator getInstance(){
if(generatorInstance == null){
synchoronized(this){
generatorInstance = new SequenceGenerator ();
}
return generatorInstance ;
}
}
public synchronized int getSequence(){
if(++
sequence没有超过long型的最大值)return sequence;
}
}
发表于 2015-01-31 14:13:41
回复(0)
0
守牆待杏
uuid
发表于 2015-04-02 06:53:23
回复(0)
0
Vicky
分桶,可根据时间对10取余,分成10个桶并编号0...9,每个桶的ID以桶号开头,这样竞争分布到桶内。设置一个表,表中以桶号为主键,对应一个数值,每次获取对应桶号的数值并加上桶号前缀组成ID,获取时可对对应桶号的记录进行加锁。
发表于 2015-03-02 23:12:38
回复(0)
这道题你会答吗?花几分钟告诉大家答案吧!
提交观点
问题信息
人人网
系统设计
来自:
人人网2015研发笔试卷E
上传者:
牛客362377号
难度:
3条回答
32收藏
19809浏览
热门推荐
相关试题
用 js、html、css实现一...
人人网
2011
Javascript
前端工程师
评论
(6)
来自
人人网2011前端工程师笔试卷
有一台带一个千兆网卡的服务器A,会...
阿里巴巴
系统设计
评论
(34)
来自
阿里巴巴2015实习生笔试题
用代码实现在页面的固定区域内实现图...
人人网
2011
Javascript
前端工程师
评论
(17)
来自
人人网2011前端工程师笔试卷
一个含有 n 个顶点和 e 条边的...
人人网
图
评论
(10)
来自
人人网2015研发笔试卷E
有如下图所示(左)的一棵二叉树, ...
人人网
树
评论
(9)
来自
人人网2015研发笔试卷E
扫描二维码,关注牛客网
意见反馈
下载牛客APP,随时随地刷题