Java 面试宝典

一份靠谱、强大、详细、经典的 Java 后端面试宝典。它不仅仅只是面试题,也是你 Java 知识点的扫盲贴。

  • 回答目前生成全局唯一ID比较常用的方式有5种:UUIDUUID是一种长度为128位的标识符,通常以32个字符串的十六进制字符串表示,它的生成依赖于当前的时间戳、随机数、MAC地址等信息。它保证了不同时间、不同机器生成的ID不会重复。它的优点就是实现过程简单,本地生成,无中心化需求。但是缺点也很明显,UUID是随机生成的,它不具备递增性,在某些场景下可能不是很适合,而且生成的ID是以32位十六进制字符串表示的,会给存储带来一定的压力。数据库自增id数据库自增ID是利用数据库管理系统的内部机制为每条新增记录自动生成唯一且递增的ID。它由于是利用数据库自身的功能,所以实现比较简单,性能也高效,但是由于它依赖数据库,且是单表,所以它无法跨表、跨库,存在单点瓶颈,所以它无法实现全局唯一ID。基于数据库的号段模式通过在数据库中维护一个号段表,应用系统每次获取一个号段后,能够从该号段中连续生成多个ID,

    2025-01-22
    阅读(1254)
  • 回答由于雪花算法高度依赖系统时钟,当时钟回拨发生时,基于时间戳的分布式ID生成器雪花算法就可能会出现重复ID或者全局递增性被破坏的问题,这就直接威胁到系统的一致性和稳定性。解决时钟回拨问题,有几种常见的方法:直接抛出异常。不管3*7=21,直接抛出异常,将问题交给调用方去处理。延迟等待。将当前阻塞,知道系统时间重新追回上之前的时间戳。切换机器。利用多节点部署特性,这台机器有问题,切换到其他正常的机器上。追赶时钟。你不是慢么?那我就加速追赶时间。详解为什么会有时钟回拨问题?从根本上来说,时钟回拨的根本原因在于服务器的物理时间不总是精确同步,完全可靠的,而雪花算法严重依赖时间戳这一生成ID的核心元素。常见的时钟回拨原因:NTP时间同步异常:NTP(网络时间协议)用于同步服务器时间。如果服务器与时间源同步时,检测到系统时间比当前标准时间快,则会将系统时间回调到正确的时间点。手动时间调整:运维人员

    2025-01-22
    阅读(424)
  • 回答雪花算法(SnowflakeAlgorithm)是分布式环境下非常经典的一种分布式唯一ID生成算法,由Twitter的工程师设计出来的。它的核心目标是高效生成全局唯一的、趋势递增的ID,而且生成速度快、并发性能好,完全可以满足大规模分布式系统的需求。雪花算法生成的ID是一个64位的长整型数字,里面的每一部分都编码了特定的信息,比如时间戳、机器ID和序列号,这让它既能保证全局唯一性,又不会出现重复。而且,ID是按照时间递增的,能在数据写入时优化索引性能。详解雪花算法生成的64为二进制Id,可以分为如下几个部分位数字段名说明1bit符号位恒为0,保证生成的ID是正数。41bits时间戳相对时间戳,记录从某个时间点到当前的毫秒数。41位可以支持69年的时间范围,(2^41/(1000*60*60*24*365)≈69)10bits机器ID标识当前生成ID的机器或节点。10位最多可以支持102

    2025-01-22
    阅读(385)