首页
题库
面试
求职
学习
竞赛
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收藏
19874浏览
热门推荐
相关试题
实现 input 输入框的自动匹配。
人人网
2011
Javascript
前端工程师
评论
(11)
来自
人人网2011前端工程师笔试卷
大规模的字典中,需要词与词中间的搭...
查找
分布式
系统设计
百元难题
评论
(0)
有一台带一个千兆网卡的服务器A,会...
阿里巴巴
系统设计
评论
(34)
来自
阿里巴巴2015实习生笔试题
12个元素的排序数组进行二分查找,...
人人网
复杂度
评论
(20)
来自
人人网2015研发笔试卷E
无源晶振起振电容容量选择方法
元器件
评论
(1)
扫描二维码,关注牛客网
意见反馈
下载牛客APP,随时随地刷题