当前位置: 首页 > 面试题库 >

在Java中生成全局唯一标识符

董飞航
2023-03-14
问题内容

简介: 我正在开发一个持久性Java Web应用程序,并且我需要确保持久化的所有资源都具有全局唯一标识符,以防止重复。

细则:

  1. 我没有使用RDBMS,所以没有任何特殊的序列生成器(例如Oracle提供的序列生成器)
  2. 我希望它速度很快,最好是全部在内存中-我宁愿不必打开文件并增加一些值
  3. 它必须是线程安全的(我预计一次只需要一个JVM即可生成ID)
  4. JVM的各个实例之间必须具有一致性。如果服务器关闭并启动,则ID生成器不应重新生成其与先前实例化中生成的ID相同的ID(或至少机会必须非常非常小-我预计会有数百万个现有资源)
  5. 我在EJB唯一ID模式文章中看到了示例。它们对我不起作用(我宁愿不完全依赖System.currentTimeMillis(),因为我们将每毫秒持久存储多个资源)。
  6. 我已经看过这个问题提出的答案。我对它们的担心是,随着时间的流逝,我有什么机会获得重复的ID?我对将java.util.UUID用作UUID的建议很感兴趣,但同样,重复的机会必须非常小。
  7. 我正在使用JDK6

问题答案:

可以肯定的是,UUID是“足够好”的。有340,282,366,920,938,463,463,374,607,431,770,000,000个UUID可用。

http://www.wilybeagle.com/guid_store/guid_explain.htm

“从这些数字来看,一个人每年被陨石撞击的风险估计为170亿次机会,这意味着该概率约为0.00000000006(6×10−11),等于产生几率的几率一年内有数十万亿个UUID,并且有一个重复项,也就是说,只有在接下来的100年中每秒生成10亿个UUID之后,才创建一个重复项的可能性约为50%。如果地球上每个人都拥有6亿个UUID,则大约为50%”

http://en.wikipedia.org/wiki/Universally_Unique_Identifier



 类似资料:
  • 唯一标识符 guid(length = 32, firstU = true, radix = 62) 该函数可以生产一个全局唯一、随机的guid,默认首字母为u,可以用于当做元素的id或者class名等需要唯一,随机字符串的地方,因为id或者class不能以数字开头。 length <Number | null> guid的长度,默认为32,如果取值null,则按rfc4122标准生成对应格式的随

  • 我想通过允许用户双击一个切片来向下钻取来使我的饼图交互式。我相信这样做的方法是在画布上创建一个onClick处理程序,并使用来确定单击了哪个切片。 不过,调用返回的段数据可能不明确。这是返回数据的示例: 在这些字段中,只有< code>value 、< code>fillColor 、< code>highlightColor和< code>label是由我提供的,它们都不一定是唯一的。我可以确保

  • 问题内容: 如何生成不猜测下一个数字的java中的整数的唯一ID? 问题答案: 它需要有多独特? 如果它仅在流程中唯一,则可以在每次需要新值时使用和调用。

  • 问题内容: 我想在0-500范围内创建10个随机数。但是问题是我希望这些数字是唯一的。对于2个随机数,我可以创建以下内容: 但是,如果我这样做10次,我认为它会堆叠。我之所以这样说是因为我正在尝试创建一个巨大的算法,该算法试图进行连续评估,我希望连续获取10个随机且唯一的数字。我不知道该怎么办。有什么想法或建议吗? 问题答案: 每当您使用Fisher-Yates shuffle 来使用数字时,请从

  • 问题内容: 我需要做一些实验,并且需要知道javascript中对象的某种唯一标识符,因此我可以查看它们是否相同。我不想使用相等运算符,我需要类似python中的id()函数的功能。 是否存在这样的东西? 问题答案: 更新 我下面的原始答案写在6年前,其风格与时代和我的理解相吻合。为了回应评论中的某些对话,一种更现代的方法如下: 如果您对旧版浏览器有要求,请在此处查看的浏览器兼容性。 原始答案保留

  • 问题 你想随机生成一个唯一的标识符。 解决方案 可以根据一个随机数值生成一个 Base 36 编码的字符串。 uniqueId = (length=8) -> id = "" id += Math.random().toString(36).substr(2) while id.length < length id.substr 0, length uniqueId() # =