持续总结中!2024年面试必问 100 道 Java基础面试题(三十五)

2024-05-09 03:28

本文主要是介绍持续总结中!2024年面试必问 100 道 Java基础面试题(三十五),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

上一篇地址:持续总结中!2024年面试必问 100 道 Java基础面试题(三十四)-CSDN博客

六十九、Java中的UUID是什么?

在Java中,UUID(Universally Unique Identifier)是一种用于生成唯一标识符的机制。UUID的标准形式由32个16进制数字组成,以5个“-”符号分隔,形成8-4-4-4-12的5组,每组分别表示不同的部分,例如:123e4567-e89b-12d3-a456-426614174000

UUID的特点

  1. 唯一性:UUID设计用来在全球范围内保持唯一,即使不是在同一时间生成,不同UUID冲突的概率也非常低。

  2. 无序性:UUID不包含顺序或时间戳信息,因此不能用来表示事件发生的顺序。

  3. 独立性:UUID的生成不依赖于网络或中央协调机构,可以在本地生成。

  4. 标准化:UUID是一个开放标准(ISO/IEC 11578:1996),被广泛应用于各种编程环境中。

UUID的用途

  • 分布式系统:在分布式系统中,UUID可以用来生成不会在不同节点间冲突的唯一标识符。
  • 数据库主键:UUID常被用作数据库表的主键,特别是在那些可能需要在多个数据库间同步数据的场景。
  • 消息标识:在消息队列和事件驱动的系统中,UUID用来唯一标识每条消息或事件。
  • 对象标识:在对象序列化或网络传输中,UUID可以用来唯一标识对象。

Java中生成UUID

Java提供了java.util.UUID类来生成UUID。以下是一些生成UUID的方法:

import java.util.UUID;public class UUIDExample {public static void main(String[] args) {// 生成一个新的随机UUIDUUID randomUUID = UUID.randomUUID();System.out.println("Random UUID: " + randomUUID);// 从当前时间戳生成UUID(版本1)UUID timeBasedUUID = UUID.fromString("00112233-4455-6677-8899-aabbccddeeff");long timestamp = timeBasedUUID.timestamp();System.out.println("Time-based UUID timestamp: " + timestamp);// 生成基于特定命名空间和名称的UUID(版本3和版本5)UUID basedOnNameUUID = UUID.nameUUIDFromBytes("www.example.com".getBytes());System.out.println("Based on name UUID: " + basedOnNameUUID);}
}

在这个示例中,randomUUID()方法生成了一个随机的UUID(版本4),UUID.fromString()方法根据字符串生成UUID(版本1,基于时间的),而nameUUIDFromBytes()方法基于特定的命名空间和名称生成UUID(版本3和版本5,基于散列的)。

注意事项

  • UUID生成算法有多个版本,Java的UUID.randomUUID()默认使用版本4,它是基于随机数生成的。
  • UUID的生成可能会有性能影响,尤其是在高并发环境下,因为它依赖于高质量的随机数生成器。
  • UUID的标准格式是36个字符,包括4个“-”符号,但也可以省略“-”符号以32个字符的紧凑格式表示。

总结来说,UUID在Java中是一种生成全局唯一标识符的方法,它在需要确保唯一性的场景下非常有用,如分布式系统、数据库主键生成等。Java的UUID类提供了生成和操作UUID的便利方法。

七十、Java类初始化顺序是怎样的?

在Java中,类的初始化顺序是一个重要的概念,它决定了类成员(包括静态成员和非静态成员)的初始化时机。以下是Java类初始化的顺序和相关规则:

类的初始化顺序

  1. 静态初始化块:类中的所有静态变量按照它们在代码中出现的顺序初始化。
  2. 实例初始化块:类中的所有实例变量按照它们在代码中出现的顺序初始化。
  3. 父类的构造器:如果子类有父类,那么在子类的任何代码执行之前,首先会调用父类不带参数的构造器(如果存在)。
  4. 子类的构造器:在父类的构造器执行完成后,接着执行子类的构造器。

示例代码

class Parent {public Parent() {System.out.println("Parent's no-arg constructor");}static {System.out.println("Parent's static initializer");}
}class Child extends Parent {public Child() {System.out.println("Child's no-arg constructor");}static {System.out.println("Child's static initializer");}
}public class InitializationOrderExample {public static void main(String[] args) {new Child();}
}

在这个示例中,当创建Child类的实例时,初始化顺序如下:

  1. Parent类的静态初始化块
  2. Child类的静态初始化块
  3. Parent类的构造器
  4. Child类的构造器

注意事项

  • 静态初始化块:用于初始化静态变量,只会在类第一次被加载到JVM时执行一次。
  • 实例初始化块:用于初始化实例变量,每次创建类的实例时都会执行。
  • 父类静态初始化:在子类静态初始化之前执行。
  • 父类实例初始化:在子类实例初始化之前执行。
  • 构造器:在实例初始化块之后执行,用于执行对象创建后的初始化操作。
  • 显式调用构造器:可以使用super()this()在子类的构造器中显式调用父类的构造器或同一类中的其他构造器,这会影响初始化的顺序。

显式调用构造器示例

class Parent {public Parent() {System.out.println("Parent's no-arg constructor");}
}class Child extends Parent {{System.out.println("Child's instance initializer");}public Child() {super(); // 显式调用父类的构造器System.out.println("Child's no-arg constructor");}
}public class ExplicitConstructorCallExample {public static void main(String[] args) {new Child();}
}

在这个示例中,Child类的实例初始化块先于Parent类的构造器执行,因为super()是在Child构造器的第一条语句中调用的。

总结来说,Java类的初始化顺序是先静态成员后实例成员,先父类后子类。理解这个顺序有助于编写正确的初始化代码,避免潜在的初始化错误。

这篇关于持续总结中!2024年面试必问 100 道 Java基础面试题(三十五)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/972254

相关文章

如何通过海康威视设备网络SDK进行Java二次开发摄像头车牌识别详解

《如何通过海康威视设备网络SDK进行Java二次开发摄像头车牌识别详解》:本文主要介绍如何通过海康威视设备网络SDK进行Java二次开发摄像头车牌识别的相关资料,描述了如何使用海康威视设备网络SD... 目录前言开发流程问题和解决方案dll库加载不到的问题老旧版本sdk不兼容的问题关键实现流程总结前言作为

0基础租个硬件玩deepseek,蓝耘元生代智算云|本地部署DeepSeek R1模型的操作流程

《0基础租个硬件玩deepseek,蓝耘元生代智算云|本地部署DeepSeekR1模型的操作流程》DeepSeekR1模型凭借其强大的自然语言处理能力,在未来具有广阔的应用前景,有望在多个领域发... 目录0基础租个硬件玩deepseek,蓝耘元生代智算云|本地部署DeepSeek R1模型,3步搞定一个应

SpringBoot中使用 ThreadLocal 进行多线程上下文管理及注意事项小结

《SpringBoot中使用ThreadLocal进行多线程上下文管理及注意事项小结》本文详细介绍了ThreadLocal的原理、使用场景和示例代码,并在SpringBoot中使用ThreadLo... 目录前言技术积累1.什么是 ThreadLocal2. ThreadLocal 的原理2.1 线程隔离2

springboot将lib和jar分离的操作方法

《springboot将lib和jar分离的操作方法》本文介绍了如何通过优化pom.xml配置来减小SpringBoot项目的jar包大小,主要通过使用spring-boot-maven-plugin... 遇到一个问题,就是每次maven package或者maven install后target中的ja

Java中八大包装类举例详解(通俗易懂)

《Java中八大包装类举例详解(通俗易懂)》:本文主要介绍Java中的包装类,包括它们的作用、特点、用途以及如何进行装箱和拆箱,包装类还提供了许多实用方法,如转换、获取基本类型值、比较和类型检测,... 目录一、包装类(Wrapper Class)1、简要介绍2、包装类特点3、包装类用途二、装箱和拆箱1、装

如何利用Java获取当天的开始和结束时间

《如何利用Java获取当天的开始和结束时间》:本文主要介绍如何使用Java8的LocalDate和LocalDateTime类获取指定日期的开始和结束时间,展示了如何通过这些类进行日期和时间的处... 目录前言1. Java日期时间API概述2. 获取当天的开始和结束时间代码解析运行结果3. 总结前言在J

Java深度学习库DJL实现Python的NumPy方式

《Java深度学习库DJL实现Python的NumPy方式》本文介绍了DJL库的背景和基本功能,包括NDArray的创建、数学运算、数据获取和设置等,同时,还展示了如何使用NDArray进行数据预处理... 目录1 NDArray 的背景介绍1.1 架构2 JavaDJL使用2.1 安装DJL2.2 基本操

最长公共子序列问题的深度分析与Java实现方式

《最长公共子序列问题的深度分析与Java实现方式》本文详细介绍了最长公共子序列(LCS)问题,包括其概念、暴力解法、动态规划解法,并提供了Java代码实现,暴力解法虽然简单,但在大数据处理中效率较低,... 目录最长公共子序列问题概述问题理解与示例分析暴力解法思路与示例代码动态规划解法DP 表的构建与意义动

Java多线程父线程向子线程传值问题及解决

《Java多线程父线程向子线程传值问题及解决》文章总结了5种解决父子之间数据传递困扰的解决方案,包括ThreadLocal+TaskDecorator、UserUtils、CustomTaskDeco... 目录1 背景2 ThreadLocal+TaskDecorator3 RequestContextH

关于Spring @Bean 相同加载顺序不同结果不同的问题记录

《关于Spring@Bean相同加载顺序不同结果不同的问题记录》本文主要探讨了在Spring5.1.3.RELEASE版本下,当有两个全注解类定义相同类型的Bean时,由于加载顺序不同,最终生成的... 目录问题说明测试输出1测试输出2@Bean注解的BeanDefiChina编程nition加入时机总结问题说明