当前位置: 首页 > news >正文

教育企业网站源码高品质网站开发

教育企业网站源码,高品质网站开发,网站怎么做盈利,网站怎么做才能赚钱吗以下是 Java 实现 MongoDB ObjectId 算法的完整代码,该实现严格遵循其 12字节 结构规范,包含时间戳、机器标识、进程ID和计数器四部分。import java.lang.management.ManagementFactory; import java.lang.management.RuntimeMXBean; import java.net.Ne…

以下是 Java 实现 MongoDB ObjectId 算法的完整代码,该实现严格遵循其 12字节 结构规范,包含时间戳、机器标识、进程ID和计数器四部分。


import java.lang.management.ManagementFactory;
import java.lang.management.RuntimeMXBean;
import java.net.NetworkInterface;
import java.security.SecureRandom;
import java.time.Instant;
import java.util.Enumeration;
import java.util.concurrent.atomic.AtomicInteger;public class MongoObjectId {private static final int COUNTER_MAX = 0xFFFFFF; // 3字节最大值private static final AtomicInteger counter = new AtomicInteger(new SecureRandom().nextInt());private static final byte[] machineId = createMachineId();private static final byte[] processId = createProcessId();// 生成12字节ObjectIdpublic static byte[] generate() {byte[] objectId = new byte[12];// 4字节时间戳(秒级)int timestamp = (int) Instant.now().getEpochSecond();objectId[0] = (byte) (timestamp >> 24);objectId[1] = (byte) (timestamp >> 16);objectId[2] = (byte) (timestamp >> 8);objectId[3] = (byte) timestamp;// 3字节机器标识System.arraycopy(machineId, 0, objectId, 4, 3);// 2字节进程IDSystem.arraycopy(processId, 0, objectId, 7, 2);// 3字节计数器(线程安全)int cnt = counter.incrementAndGet() & COUNTER_MAX;objectId[9] = (byte) (cnt >> 16);objectId[10] = (byte) (cnt >> 8);objectId[11] = (byte) cnt;return objectId;}// 生成16进制字符串表示public static String toHexString(byte[] bytes) {StringBuilder sb = new StringBuilder();for (byte b : bytes) {sb.append(String.format("%02x", b));}return sb.toString();}// 获取3字节机器标识(MAC地址哈希)private static byte[] createMachineId() {try {Enumeration<NetworkInterface> interfaces = NetworkInterface.getNetworkInterfaces();while (interfaces.hasMoreElements()) {NetworkInterface ni = interfaces.nextElement();if (!ni.isLoopback() && ni.getHardwareAddress() != null) {byte[] mac = ni.getHardwareAddress();return new byte[]{mac[0], mac[1], mac[2]};}}} catch (Exception e) {// 失败时使用随机数}return new byte[]{(byte) new SecureRandom().nextInt(),(byte) new SecureRandom().nextInt(),(byte) new SecureRandom().nextInt()};}// 获取2字节进程IDprivate static byte[] createProcessId() {RuntimeMXBean runtimeMxBean = ManagementFactory.getRuntimeMXBean();String processName = runtimeMxBean.getName();System.out.println("当前进程: " + processName);int pid = Integer.parseInt(processName.split("@")[0]);System.out.println("当前进程ID: " + pid);return new byte[]{(byte) (pid >> 8), (byte) pid};}public static void main(String[] args) {byte[] objectId = generate();System.out.println("生成的ObjectId: " + toHexString(objectId));objectId = generate();System.out.println("生成的ObjectId: " + toHexString(objectId));objectId = generate();System.out.println("生成的ObjectId: " + toHexString(objectId));}
}

实现特点:

1. 时间戳部分:采用Unix秒级时间戳,确保时间有序性
2. 机器标识:通过MAC地址哈希生成,保证分布式环境唯一性
3. 进程ID:通过ManagementFactoryRuntimeMXBean实现,这是最可靠且跨平台的方式
4. 原子计数器:确保单进程高并发下的唯一性
5. 最终输出符合MongoDB标准的24位十六进制格式

该实现严格遵循MongoDB ObjectId的规范:

  • 总长度:12字节
  • 组成结构:4字节时间戳 + 3字节机器标识 + 2字节进程ID + 3字节计数器
  • 唯一性保证:同一进程、同一秒内最多可生成16777216(2^24)个不重复ID

实际应用场景:

  • 分布式系统主键生成
  • 日志追踪标识
  • 需要时间排序的数据记录
  • 替代UUIDv4的更高性能方案
http://www.dtcms.com/a/425775.html

相关文章:

  • 做网站数据分析架构建设一个网站首先需要
  • 西宁市建设网站公司电话优化排名推广技术网站
  • 哈尔滨市住房和城乡建设局网站松原做网站的公司
  • 建设银行信用卡网站下载wordpress替换dede
  • 医院网站建设的意义公司文化墙图片大全
  • 阿里云网站建设认证答案网站开源代码模版
  • 网上怎么做网站赚钱制作网站什么制作
  • 虎丘做网站价格我是一条龙怎么停更了
  • 网站备案号密码珠海市官网网站建设平台
  • 常熟做网站需要做网站的企业资源
  • 手怎么搭建网站怎么爬虫做网站
  • 手机怎么自己做网站软件开发文档通用要求
  • 网站绑定多个域名物业建设网站
  • 济南建站联系企汇优网站对接微信接口
  • 网站寄生虫怎么做wordpress中文安装教程视频教程
  • 建设部网站官网办事大厅网站流量分析系统
  • 浏览器正能量网站免费网站推广应该坚持( )策略。
  • 制作百度移动网站钟落潭有没有做网站的
  • 2015年网站设计app开发公司哪家好 上海
  • 芦苞建网站公司做外包的网站
  • 万网 安装wordpress百度快照优化排名
  • 河南省住房城乡和建设厅网站扬州国土资源局网站开发区分局
  • 通化公司做网站自己的网站建设
  • 信阳网站建设策划方案制作网页的网站有哪些
  • 网站建设背景上传自己做的网站
  • 手机版网站怎么做的做珠宝商城网站
  • 购物网站开发参考文献购物网站价格
  • 长春网站建设方案咨询设计网站哪个
  • 商城微网站建设多少钱wordpress小工具开发
  • 福建网站建设培训班wordpress 红色主题