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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

记录: Python解析yml文件,顺序解析,带所有文件等号

记录: Python解析yml文件,顺序解析,带所有文件等号from yaml.composer import Composer from yaml.constructor import Constructor import yamlclass ParseYml:def __init__(self):passstaticmethoddef parse(yml_pathNone):try:loader yaml.Loader(op…

xhs 旋转滑块流程分析

声明 本文章中所有内容仅供学习交流,抓包内容、敏感网址、数据接口均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关,若有侵权,请联系我立即删除! 前言 本文首发于公众号…

近似消息传递算法(AMP)单测量模型(SMV)

1、算法解决问题 很多人致力于解决SLM模型的求逆问题,即知道观测值和测量矩阵(字典之类的),要求未知变量的值。SLM又叫做标准线性模型,后续又在此基础上进行升级变为广义线性模型。即SLM是yAxe,这里是线性…

STM32单片机实战开发笔记-独立看门狗IWDG

嵌入式单片机开发实战例程合集: 链接:https://pan.baidu.com/s/11av8rV45dtHO0EHf8e_Q0Q?pwd28ab 提取码:28ab IWDG模块测试 1、功能描述 STM32F10X内置两个看门狗,提供了更高的安全性,时间的精确下性和使用的灵活性…

【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 概述…

SparkSQL优化

SparkSQL优化 优化说明 缓存数据到内存 Spark SQL可以通过调用spark.sqlContext.cacheTable("tableName") 或者dataFrame.cache(),将表用一种柱状格式( an inmemory columnar format)缓存至内存中。然后Spark SQL在执行查询任务…

PotPlayer v1.7.22218 全格式影音播放器,无广绿色版!

软件介绍 PotPlayer是一款多功能且免费的媒体播放软件,兼容多种音频和视频格式。提供了丰富的功能性以及个性化设置,以迎合不同用户的需求。友好的用户界面,允许用户自定义皮肤和快捷键,提升了操作的便利性。 此外,Po…

DenseCLIP环境配置

直接看raoyongming/DenseCLIP: [CVPR 2022] DenseCLIP: Language-Guided Dense Prediction with Context-Aware Prompting (github.com) 但这里的环境配置可能和现在不太适配,自己配了好久没弄好 后面尝试了另外的版本的(但这个版本少了一些内容&#…

力扣打卡第二天

206. 反转链表 class Solution { public:ListNode* reverseList(ListNode* head) {// //迭代法// ListNode *pre nullptr;// ListNode *curr head;// while(curr){// ListNode *next curr -> next;// curr -> next pre;// pre curr;// curr next;/…

【吃透Java手写】1- Spring(上)-启动-扫描-依赖注入-初始化-后置处理器

【吃透Java手写】Spring(上)启动-扫描-依赖注入-初始化-后置处理器 1 准备工作1.1 创建自己的Spring容器类1.2 创建自己的配置类 ComponentScan1.3 ComponentScan1.3.1 Retention1.3.2 Target 1.4 用户类UserService Component1.5 Component1.6 测试类 2…

我独自升级崛起怎么下载 游戏下载教程分享

《我独自升级:崛起》这款游戏核心聚焦于激烈的战斗与角色的持续成长。新加入的玩家首要任务是熟悉基础攻击模式,随后深入探索技能组合策略与连贯招式的艺术,同时掌握防守与躲避技巧,这些都是战斗中不可或缺的关键。随着战斗的持续…

设计模式-06 设计模式-Facade Pattern门面模式

设计模式-06 设计模式-Facade Pattern门面模式 1.定义 门面模式(Facade Pattern)定义 门面模式为一个子系统提供了一个统一的接口,从而简化了对该子系统中多个组件的访问。 它通过为客户端提供一个单一的入口点来隐藏子系统的复杂性&#…

重写muduo之Thread、EventLoopThread、EventLoopThreadPool

目录 1、概述 2、Thread 2.1 Thread.h 3、EventLoopThread 3.1 EventLoopThread.h 3.2 EventLoopThread.cc 4、 EventLoopThreadPool 4.1 EventLoopThreadPool.h 4.2 EventLoopThreadPool.cc 1、概述 管理事件循环线程的调度的 打包了一个EventLoop和线程,…

项目经理【过程】原则

系列文章目录 【引论一】项目管理的意义 【引论二】项目管理的逻辑 【环境】概述 【环境】原则 【环境】任务 【环境】绩效 【人】概述 【人】原则 【人】任务 【人】绩效 【过程】概念 【过程】原则 一、质量管理水平、质量管理的发展 1.1 质量管理水平 1.2 质量管理的发展 …

NAS选购全方位解析,性价比才是硬道理 | 2024年618威联通NAS选购攻略

NAS选购全方位解析,性价比才是硬道理 | 2024年618威联通NAS选购攻略 哈喽小伙伴们好,我是Stark-C~,临近618,今天和大家谈谈NAS的选购问题。 关注我的小伙伴都知道,经过我手头折腾的NAS设备非常多,除了群晖…

如果出现一个工具,可以让前端开发彻底不用再手写UI,这个工具意义大吗?干货!

求这样的一个工具,可以让后端开发、嵌入式开发、产品经理、UI设计师都能用,注意,不是在一个简单的静态页生成,也不是类似飞冰那种 generator ,而是真正让设计师和开发者在各自的那侧达成自治,可以做到吗&am…

;【排列【

c语言中的小小白-CSDN博客c语言中的小小白关注算法,c,c语言,贪心算法,链表,mysql,动态规划,后端,线性回归,数据结构,排序算法领域.https://blog.csdn.net/bhbcdxb123?spm1001.2014.3001.5343 给大家分享一句我很喜欢我话: 知不足而奋进,望远山而前行&am…

C++进阶之路:深入理解编程范式,从面向过程到面向对象(类与对象_上篇)

✨✨ 欢迎大家来访Srlua的博文(づ ̄3 ̄)づ╭❤~✨✨ 🌟🌟 欢迎各位亲爱的读者,感谢你们抽出宝贵的时间来阅读我的文章。 我是Srlua小谢,在这里我会分享我的知识和经验。&am…

如何使用Tushare+ Backtrader进行股票量化策略回测

数量技术宅团队在CSDN学院推出了量化投资系列课程 欢迎有兴趣系统学习量化投资的同学,点击下方链接报名: 量化投资速成营(入门课程) Python股票量化投资 Python期货量化投资 Python数字货币量化投资 C语言CTP期货交易系统开…

【代码随想录算法训练营第37期 第二天 | LeetCode977.有序数组的平方、209.长度最小的子数组、59.螺旋矩阵II】

代码随想录算法训练营第37期 第二天 | LeetCode977.有序数组的平方、209.长度最小的子数组、59.螺旋矩阵II 一、977.有序数组的平方 解题代码C&#xff1a; class Solution { public:vector<int> sortedSquares(vector<int>& nums) {int len nums.size();fo…