持续总结中!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) {
        // 生成一个新的随机UUID
        UUID 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类的初始化顺序是先静态成员后实例成员,先父类后子类。理解这个顺序有助于编写正确的初始化代码,避免潜在的初始化错误。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/604330.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Linux进程——Linux进程间切换与命令行参数

前言:在上一篇了解完进程状态后,我们简单了解了进程优先级,然后遗留了一点内容,本篇我们就来研究进程间的切换,来理解上篇提到的并发。如果对进程优先级还有没理解的地方可以先阅读: Linux进程优先级 本篇…

【JAVA基础之时间API】自定义时间格式

🔥作者主页:小林同学的学习笔录 🔥mysql专栏:小林同学的专栏 目录 1.Date类 1.1 概述 1.2 构造方法 1.3 常用方法 2.SimpleDateFormat类 2.1 概述 2.2 构造方法 2.3 格式规则 2.4 常用方法 3.Calendar类 3.1 概述…

【算法】滑动窗口——将x减到0的最小操作数

本节博客主要是讲的我解“将x减到0的最小操作数”这道题的思路历程,从最开始的想法到代码提交的详细记录,有需要借鉴即可。 目录 1.题目2.代码示例3.细节3.1left越界3.2特殊情况 4.总结 1.题目 题目链接:LINK 看题目意思是就是给你一个数X&…

C++贪心算法

关于string的系统函数! (注:以下函数只可用于string,不适用其他类型的变量) ① a.size(); 这个系统函数是用来获取这个string变量的长度的,我们通常会新建一个变量来保存他,以便之后使用。 …

在java类前添加上文档注释

第一步: 第二步 第三步 将下面代码粘上 /** *Author Lnn *Date ${DATE}/${TIME} *ClassName ${NAME} *Description */

ios苹果App上架到应用商店的操作流程

哈喽,大家好呀,淼淼又来和大家见面啦,发现最近有许多想要上架App的小伙伴,但是又不知道要怎么操作,对于开发者而言,将精心打造的iOS应用程序成功上架到苹果的 App Store 是向全球用户展示咱们的产品和服务的…

《动手学深度学习》预备知识和安装环境

哈喽,欢迎来到自学深度学习小白的文章,本文将介绍anacoda是什么和有什么用,以及在win10环境下如何安装运行环境。 关于anaconda 1.环境 准备开始写代码了,教材总是先叫你配好环境,环境可以堪称一栋房子,…

MindSponge分子动力学模拟——软件架构

技术背景 在前面一篇文章中,我们介绍了MindSponge的两种不同的安装与使用方法,让大家能够上手使用。这篇文章主要讲解MindSponge的软件架构,并且协同mindscience仓库讲解一下二者的区别。 整体架构 首先我们来了解一下MindSponge独立仓库的…

Baidu Comate智能编码助手:提升软件生产力的高效工具使用教程

目录 一、前言 二、Comate助手概览 三、核心功能详解 智能推荐与自动补全 生成单元测试 代码注释生成 四、使用场景与优势 五、总结与展望 一、前言 随着信息技术的飞速发展,编程已经成为许多行业不可或缺的一部分。然而,编程过程中的繁琐和重复…

基于51单片机交通灯设计—汇编语言

基于51单片机的交通灯设计 (仿真+程序设计报告) 功能介绍 具体功能: 1.南北方向绿灯20s(最后3s闪烁)后转黄灯常亮5s,同时东西方向红灯25秒;东西方向绿灯20s(最后3s闪烁…

【三】DRF序列化进阶

序列化器的定义与使用 多表关联序列化 【1】准备工作 # settings.py DATABASES {default: {# 数据库引擎选择使用MySQLENGINE: django.db.backends.mysql,# 指定数据库名字,需提前创建NAME: books,# 指定数据库用户名USER: root,# 指定数据库用户密码PASSWORD: …

Redis 主从复制 初步认识

文章目录 定义拓扑拓扑定义单从拓扑多从拓扑树型拓扑 使用原理建立流程持续复制 定义 Redis主从复制技术的主要满足的需求是①数据恢复②负载均衡 ①数据恢复的理解:将数据同步到多个Redis服务器中,其中一个节点数据损毁,可通过复制其他节点…

FreeRTOS学习笔记-基于stm32(6)时间片调度实验

1、什么是时间片调度 在任务优先级相同的时候,CPU会轮流使用相同的时间去执行它,即时间片调度。这个相同的时间就是时间片。而时间片的大小就是SysTick的中断周期(SysTick的中断周期可以修改)。 比如有三个相同优先级的任务在运行…

一张贴纸50万,炒房炒币的怎么都来炒CSGO皮肤了

一张贴纸50万,为什么炒房炒币的都来炒CSGO饰品了? 一张贴纸50万,炒房炒币的怎么都来炒CSGO皮肤了? 经常有人问我,天天看你们买卖装备,买卖皮肤,说到底这都是虚拟产品,看得见摸不着的…

ue引擎游戏开发笔记(35)——为射击添加轨道,并显示落点

1.需求分析: 我们只添加了开枪特效,事实上并没有实际的效果产生例如弹痕,落点等等。所以逐步实现射击的完整化,先从实现落点开始。 2.操作实现: 1.思路:可以这样理解,每次射击的过程是一次由摄…

二层交换机与防火墙连通上网实验

防火墙是一种网络安全设备,用于监控和控制网络流量。它可以帮助防止未经授权的访问,保护网络免受攻击和恶意软件感染。防火墙可以根据预定义的规则过滤流量,例如允许或阻止特定IP地址或端口的流量。它也可以检测和阻止恶意软件、病毒和其他威…

Ansible-playbook剧本

目录 一、Ansible playbook简介 2.1 playbook格式 2.2 playbook组成部分 二、playbook示例 2.1 yaml文件编写 2.2 运行playbook 2.3 定义、引用变量 2.4 指定远程主机sudo切换用户 2.5 when条件判断 2.6 迭代 三、总结 Ansible中使用playbook脚本的作用和好处 一、A…

5月8日学习记录

_[FBCTF2019]RCEService(preg_match函数的绕过) 涉及知识点:preg_match函数绕过,json的格式,正则回溯 打开环境,要求用json的格式输入 搜索学习一下json的语法规则 数组(Array)用方括…

OpenMV 图像串口传输示例

注意:本程序根据 OpenMV采集图片通过串口发送,PC接收并保存为图片 更改。 一、例程说明 这个例程主要实现了以下功能: 1. OpenMV 端采集图像:使用OpenMV开发板上的摄像头采集实时图像数据。 2. 通过串口传输图像数据:将采集到的图像数据打包成字节流,…

智慧工地的5大系统是什么?SaaS化大型微服务架构(智慧工地云平台源码)可多端展示登录

智慧工地解决方案依托计算机技术、物联网、云计算、大数据、人工智能、VR&AR等技术相结合,为工程项目管理提供先进技术手段,构建工地现场智能监控和控制体系,弥补传统方法在监管中的缺陷,最终实现项目对人、机、料、法、环的全…
最新文章