持续总结中!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

相关文章

JAVA中安装多个JDK的方法

《JAVA中安装多个JDK的方法》文章介绍了在Windows系统上安装多个JDK版本的方法,包括下载、安装路径修改、环境变量配置(JAVA_HOME和Path),并说明如何通过调整JAVA_HOME在... 首先去oracle官网下载好两个版本不同的jdk(需要登录Oracle账号,没有可以免费注册)下载完

Spring StateMachine实现状态机使用示例详解

《SpringStateMachine实现状态机使用示例详解》本文介绍SpringStateMachine实现状态机的步骤,包括依赖导入、枚举定义、状态转移规则配置、上下文管理及服务调用示例,重点解... 目录什么是状态机使用示例什么是状态机状态机是计算机科学中的​​核心建模工具​​,用于描述对象在其生命

Spring Boot 结合 WxJava 实现文章上传微信公众号草稿箱与群发

《SpringBoot结合WxJava实现文章上传微信公众号草稿箱与群发》本文将详细介绍如何使用SpringBoot框架结合WxJava开发工具包,实现文章上传到微信公众号草稿箱以及群发功能,... 目录一、项目环境准备1.1 开发环境1.2 微信公众号准备二、Spring Boot 项目搭建2.1 创建

Java中Integer128陷阱

《Java中Integer128陷阱》本文主要介绍了Java中Integer与int的区别及装箱拆箱机制,重点指出-128至127范围内的Integer值会复用缓存对象,导致==比较结果为true,下... 目录一、Integer和int的联系1.1 Integer和int的区别1.2 Integer和in

SpringSecurity整合redission序列化问题小结(最新整理)

《SpringSecurity整合redission序列化问题小结(最新整理)》文章详解SpringSecurity整合Redisson时的序列化问题,指出需排除官方Jackson依赖,通过自定义反序... 目录1. 前言2. Redission配置2.1 RedissonProperties2.2 Red

IntelliJ IDEA2025创建SpringBoot项目的实现步骤

《IntelliJIDEA2025创建SpringBoot项目的实现步骤》本文主要介绍了IntelliJIDEA2025创建SpringBoot项目的实现步骤,文中通过示例代码介绍的非常详细,对大家... 目录一、创建 Spring Boot 项目1. 新建项目2. 基础配置3. 选择依赖4. 生成项目5.

JSONArray在Java中的应用操作实例

《JSONArray在Java中的应用操作实例》JSONArray是org.json库用于处理JSON数组的类,可将Java对象(Map/List)转换为JSON格式,提供增删改查等操作,适用于前后端... 目录1. jsONArray定义与功能1.1 JSONArray概念阐释1.1.1 什么是JSONA

Java JDK1.8 安装和环境配置教程详解

《JavaJDK1.8安装和环境配置教程详解》文章简要介绍了JDK1.8的安装流程,包括官网下载对应系统版本、安装时选择非系统盘路径、配置JAVA_HOME、CLASSPATH和Path环境变量,... 目录1.下载JDK2.安装JDK3.配置环境变量4.检验JDK官网下载地址:Java Downloads

Spring boot整合dubbo+zookeeper的详细过程

《Springboot整合dubbo+zookeeper的详细过程》本文讲解SpringBoot整合Dubbo与Zookeeper实现API、Provider、Consumer模式,包含依赖配置、... 目录Spring boot整合dubbo+zookeeper1.创建父工程2.父工程引入依赖3.创建ap

SpringBoot结合Docker进行容器化处理指南

《SpringBoot结合Docker进行容器化处理指南》在当今快速发展的软件工程领域,SpringBoot和Docker已经成为现代Java开发者的必备工具,本文将深入讲解如何将一个SpringBo... 目录前言一、为什么选择 Spring Bootjavascript + docker1. 快速部署与