设计模式学习之——单例模式
单例模式(Singleton Pattern)是一种创建型设计模式,它确保一个类只有一个实例,并提供一个全局访问点来获取该实例。这个模式的主要目的是控制对象的创建,确保在程序的整个生命周期中,某个类只有一个实例被创建和使用。
(单例模式应该也是我们最熟悉的设计模式之一了,多少次面试环节中必问的问题之一,懒汉式、饿汉式、双重检查锁、线程安全、应用场景,等等....)
工作原理
-
私有构造函数:通过将类的构造函数声明为私有,防止外部代码通过
new
关键字创建类的实例。 -
静态变量:在类内部定义一个静态变量来存储类的唯一实例。这个变量是私有的,以防止外部直接访问。
-
静态方法:提供一个公共的静态方法,用于返回类的唯一实例。如果实例尚未创建,则在该方法中创建实例;如果实例已经存在,则直接返回该实例。
适用场景
- 当一个类只能有一个实例时,例如配置管理类、线程池等。
- 当需要控制资源的使用,并且希望资源在全局范围内共享时。
- 当需要实现全局唯一的服务或功能时,例如日志记录、数据库连接池等。
注意事项
- 单例模式可能会引入全局状态,导致测试和维护变得更加困难。
- 在多线程环境中,需要特别注意线程安全问题,确保实例的唯一性。
- 在某些情况下,单例模式可能会导致内存泄漏,特别是当单例对象持有大量资源或引用其他生命周期较短的对象时。因此,在不再需要单例对象时,应该考虑如何正确地释放资源。
实现方式
单例模式的实现有多种方式,包括懒汉式、饿汉式、双重检查锁(Double-Checked Locking)等。以下是几种常见实现的简要说明:
- 懒汉式(Lazy Initialization):
- 在第一次调用
getInstance()
方法时创建实例。 - 需要在方法中添加同步块以确保线程安全,但可能会影响性能。
- 在第一次调用
public class Singleton {private static Singleton instance;// 私有构造函数private Singleton() {}// 公共静态方法,提供全局访问点public static synchronized Singleton getInstance() {if (instance == null) {instance = new Singleton();}return instance;}
}
注意:上面的代码在每次调用getInstance()
时都会进行同步,这可能会导致性能问题。可以使用双重检查锁来优化。
- 饿汉式(Eager Initialization):
- 在类加载时就创建实例。
- 线程安全,因为JVM在加载类时会自动进行同步。
public class Singleton {// 类加载时就创建实例private static final Singleton instance = new Singleton();// 私有构造函数private Singleton() {}// 公共静态方法,提供全局访问点public static Singleton getInstance() {return instance;}
}
- 双重检查锁(Double-Checked Locking):
- 结合了懒汉式和饿汉式的优点,既延迟了实例化,又提高了性能。
- 通过两次检查
instance
是否为null
,并在第二次检查时添加同步块来确保线程安全。
public class Singleton {// 使用volatile关键字确保instance变量的可见性和有序性private static volatile Singleton instance;// 私有构造函数private Singleton() {}// 公共静态方法,提供全局访问点public static Singleton getInstance() {if (instance == null) { // 第一次检查synchronized (Singleton.class) {if (instance == null) { // 第二次检查instance = new Singleton();}}}return instance;}
}
- 静态内部类(Bill Pugh Singleton Design)
- 特点:利用类加载机制保证线程安全,同时实现延迟加载。
- 实现:将单例实例放在静态内部类中,通过静态内部类的加载机制来确保实例的唯一性。
public class Singleton {// 私有构造函数private Singleton() {}// 静态内部类,负责创建单例实例private static class SingletonHelper {// 静态变量存储实例,类加载时初始化private static final Singleton INSTANCE = new Singleton();}// 公共静态方法,提供全局访问点public static Singleton getInstance() {return SingletonHelper.INSTANCE;}
}
- 枚举(Enum Singleton)
- 特点:使用枚举来实现单例模式是最简洁且线程安全的方式,由JVM提供保障,防止通过反射破坏单例。
- 实现:定义一个包含单个实例的枚举。
public enum Singleton {INSTANCE;// 其他方法和属性可以定义在这里public void someMethod() {// 实现方法逻辑}
}
实现注意事项
- 饿汉式适合在类加载时就创建实例的场景,但如果实例创建开销较大且不需要立即使用,则可能浪费资源。
- 懒汉式 + 同步方法虽然简单,但每次调用
getInstance()
都会进行同步,性能较差。 - 双重检查锁定通过减少同步块的执行次数来提高性能,但实现相对复杂。
- 静态内部类结合了饿汉式和懒汉式的优点,既实现了延迟加载,又保证了线程安全。
- 枚举是最推荐的方式,因为它不仅简洁且线程安全,还能防止通过反射和序列化攻击破坏单例。
枚举线程安全单例的疑问
枚举(Enum)实现的线程安全的单例模式在Java中是一种既简洁又高效的方式。
为什么枚举单例是线程安全的?
-
JVM保障:
Java中的枚举类型是由JVM特别处理的。当枚举类被加载到JVM时,JVM会确保枚举实例的唯一性。这意味着枚举实例在创建时就被JVM锁定,任何尝试通过反射或其他手段来修改枚举实例的行为都会被JVM阻止。 -
创建时机:
枚举实例是在类加载阶段由JVM创建的。由于类加载是线程安全的(类加载器在加载类时会使用同步机制),因此枚举实例的创建也是线程安全的。 -
不可变性:
枚举类型默认是不可变的(immutable)。这意味着枚举实例一旦创建,其状态(字段值)就不能被改变。这种不可变性进一步增强了枚举单例的线程安全性。
为什么枚举能保证单例?
-
实例的唯一性:
在枚举中,每个枚举常量都是该枚举类型的一个实例。由于枚举常量是在类加载时由JVM创建的,并且JVM保证了枚举常量的唯一性,因此我们可以确信枚举类型中只有一个指定的常量实例。 -
防止反射攻击:
在Java中,通过反射机制可以绕过私有构造函数来创建类的实例。然而,对于枚举类型,JVM提供了额外的保护,以防止通过反射来创建新的枚举实例。如果尝试通过反射来修改枚举实例的字段或创建新的枚举实例,JVM会抛出异常。 -
防止序列化攻击:
如果一个类实现了Serializable
接口,那么在反序列化时可能会创建新的实例。但是,对于枚举类型,JVM在反序列化时会确保返回的是枚举类型中已有的实例,而不是创建新的实例。这是因为枚举的序列化机制是由JVM特别处理的,它会使用枚举常量的名称来恢复枚举实例,而不是通过默认的序列化机制。
示例代码(实现方式中已有)
下面是一个使用枚举实现单例模式的示例代码:
public enum Singleton {INSTANCE;// 可以在这里添加枚举实例的方法public void doSomething() {// 实现方法逻辑}
}// 使用枚举单例
public class Main {public static void main(String[] args) {Singleton singleton = Singleton.INSTANCE;singleton.doSomething();}
}
在这个示例中,Singleton
枚举只有一个实例INSTANCE
。由于枚举的上述特性,我们可以确信INSTANCE
是唯一的,并且它的创建和访问都是线程安全的。
综上所述,枚举实现的单例模式在Java中是一种非常强大且简洁的方式。它利用了JVM对枚举的特殊处理来确保实例的唯一性和线程安全性,同时防止了通过反射和序列化来破坏单例的攻击。
常见面试题
在面试中,关于单例模式的问题通常涵盖其定义、实现方式、线程安全性、应用场景以及可能的攻击方式和防御措施等方面。以下是一些常见的问题及其答案:
1、定义与特点
问题:什么是单例模式?它用于解决什么问题?
答案:
- 单例模式是一种创建型设计模式,它确保一个类只有一个实例,并提供一个全局访问点来获取这个实例。
- 它用于解决在系统中需要控制某个类的实例数量,确保全局只有一个实例被创建和使用的问题。
2、实现方式
问题:单例模式常见写法有几种?请列举并解释。
答案:
- 懒汉式:在第一次调用
getInstance()
方法时创建实例,需要处理多线程安全问题。 - 饿汉式:在类加载时就创建实例,简单但不提供延迟初始化。
- 双重检查锁定(Double-Checked Locking):在懒汉式的基础上增加了锁,用于在多线程环境中保护单例的唯一性。
- 静态内部类:利用类加载机制保证初始化实例时只有一个线程,同时实现延迟加载。
- 枚举:使用枚举方式实现单例模式是最简洁的方法,由JVM提供保障,防止通过反射破坏单例。
3、线程安全性
问题:如何保证单例模式的线程安全?
答案:
- 对于懒汉式单例,可以通过在
getInstance()
方法上添加synchronized
关键字来保证线程安全,但可能会影响性能。 - 双重检查锁定可以减少加锁的次数,提高性能,同时保证线程安全。但需要注意使用
volatile
关键字来确保实例变量的可见性和有序性。 - 饿汉式单例在类加载时就创建实例,因此是线程安全的。
4、应用场景
问题:单例模式适用于哪些场景?
答案:
- 单例模式适用于需要全局共享的资源或服务,例如配置管理类、线程池、日志记录器、数据库连接池等。
- 它还适用于控制资源的使用,确保资源在全局范围内被唯一访问和管理的场景。
5、可能的攻击方式与防御措施
问题:如何通过反射或序列化攻击单例模式?如何防御?
答案:
- 反射攻击:通过Java反射机制可以绕过私有构造函数创建类的实例。为了防御这种攻击,可以在私有构造函数中抛出异常或进行其他安全检查。
- 序列化攻击:如果单例类实现了
Serializable
接口,在反序列化时可能会创建新的实例。为了防御这种攻击,可以在readResolve()
方法中返回单例的唯一实例。
6、其他问题
问题:
- 单例模式的两次检查锁是什么?
- 你如何阻止使用
clone()
方法创建单例实例的另一个实例? - Java中的单例模式什么时候是非单例?
答案:
- 双重检查锁(Double-Checked Locking)是在懒汉式单例的基础上,通过两次检查实例是否为空来减少加锁的次数,提高性能。第一次检查在同步块外,第二次检查在同步块内。
- 可以通过在单例类中重写
clone()
方法并抛出异常来阻止使用clone()
方法创建新的实例。 - 在Java中,如果单例类没有正确处理反射或序列化攻击,或者在多线程环境中没有正确实现同步机制,那么单例模式可能会失效,导致创建多个实例。
以上是一些关于单例模式在面试中常见的问题及其答案。在面试中,除了回答这些问题外,还可以根据面试官的要求进一步讨论单例模式的优缺点、与其他设计模式的比较以及在实际项目中的应用等话题。
相关文章:
设计模式学习之——单例模式
单例模式(Singleton Pattern)是一种创建型设计模式,它确保一个类只有一个实例,并提供一个全局访问点来获取该实例。这个模式的主要目的是控制对象的创建,确保在程序的整个生命周期中,某个类只有一个实例被创…...
Linux Vi/Vim使用 ⑥
掌握 CentOS 7 下的 Vi/Vim 编辑器:从安装到精通 在 CentOS 7 系统的日常运维、编程开发以及各类文本处理场景中,Vi/Vim 编辑器都是不可或缺的得力工具。它以轻量、高效、功能强大著称,虽然初次上手有一定学习门槛,但掌握之后便能…...
【5G】5G技术组件 5G Technology Components
5G的目标设置非常高,不仅在数据速率上要求达到20Gbps,在容量提升上要达到1000倍,还要为诸如大规模物联网(IoT, Internet of Things)和关键通信等新服务提供灵活的平台。这些高目标要求5G网络采用多种新技术…...
Java 学习,字符串比较
Java 字符串比较通常使用 equals() 方法,而不是使用 运算符。因为 运算符,比较的是字符串对象的引用是否相同,而 equals() 方法比较的是字符串的内容是否相同。 使用equals()等方法,比较两个字符串: public class …...
普通算法——二维前缀和
二维前缀和 题目链接:https://www.acwing.com/problem/content/798/ 题目描述: 输入一个 n n n 行 m m m 列的整数矩阵,再输入 q q q 个询问,每个询问包含四个整数 ** x 1 , y 1 , x 2 , y 2 x1,y1,x2,y2 x1,y1,x2,y2 &…...
2024年API接口发展趋势:智能化、自动化引领潮流
随着信息技术的飞速发展,应用程序编程接口(API)已成为现代软件开发的核心组成部分。API作为不同系统之间的桥梁,使得数据、功能和服务能够在各种平台和设备之间无缝流动。在2024年,API接口正经历着一系列显著的变革和发…...
SQL中的通配符:使用LIKE操作符进行模式匹配
在SQL中,LIKE 操作符用于在查询中进行模式匹配。它常用于 WHERE 子句中,以便根据特定模式查找数据。与直接进行精确匹配的 操作符不同,LIKE 允许你使用通配符来对数据进行模糊查询,从而使查询更加灵活和强大。 常见的SQL通配符 …...
数据结构:数组
线性表: 线性表就是数据排成像一条线一样的结构.每个现行表上的数据最多只有前和后两个方向.常见的线性表结构:数组,链表、队列、栈等。 什么是数组: 数组(Array)是一种线性表数据结构。它用一组连续的内存空间,来存储…...
2022 年“泰迪杯”数据分析技能赛A 题竞赛作品的自动评判
2022 年“泰迪杯”数据分析技能赛A 题竞赛作品的自动评判 完整代码请私聊 博主 一、背景 在各类学科竞赛中,常常要求参赛者提交 Excel 或/和 PDF 格式的竞赛作品。 本赛题以某届数据分析竞赛作品的评阅为背景,要求参赛者根据给定的评分准则和标准答案&a…...
java+ssm+mysql美妆论坛
项目介绍: 使用javassmmysql开发的美妆论坛,系统包含超级管理员,系统管理员、用户角色,功能如下: 用户:主要是前台功能使用,包括注册、登录;查看论坛板块和板块下帖子;…...
MySQL | 尚硅谷 | 第13章_约束
MySQL笔记:第13章_约束 文章目录 MySQL笔记:第13章_约束第13章_约束 1. 约束(constraint)概述1.1 为什么需要约束1.2 什么是约束1.3 约束的分类演示代码 2. 非空约束2.1 作用2.2 关键字2.3 特点2.4 添加非空约束2.5 删除非空约束演示代码 3. 唯一性约束3…...
【Ubuntu】Ubuntu的Desktop(学习/用户使用)和Bit版本(工作)
这篇文章似乎没什么必要写,但想了想还是决定记录一下,也许对新手入坑Ubuntu会有帮助, 事实上也很简单,一个是桌面版本,另一个是字符界面版本。 桌面版:拥有图形桌面 字符界面,易上手ÿ…...
面试之MySQL自增ID耗尽问题的解决方案详解
自增ID耗尽问题的解决方案详解 目录 引言切换到BIGINT分表分库UUID雪花算法(Snowflake)回收已删除的ID其他策略策略选择和实施总结 引言 在现代数据库应用中,自增ID作为主键被广泛使用。随着数据量的不断增长,自增ID耗尽问题逐…...
数据结构第一弹-平衡树
大家好,今天和大家一起分享一下数据结构中的平衡树~ 平衡树是一种特别重要的数据结构,它通过维持树的高度来保证操作的效率,从而在众多数据结构中脱颖而出。我们今天深入探讨平衡树的概念、种类、工作原理以及应用实例。 1. 平衡树简介 平衡…...
k8s二进制部署集群报错
k8s二进制部署的集群 添加node节点之后 部署服务之后出现报错 在该节点上telnet 172.30.0.1 443也不通 其他正常节点telnet是通的 解决办法: 修改kube-proxy的服务配置 systemctl daemon-reload systemctl restart kube-proxy再次telnet通了...
深入了解架构中常见的4种缓存模式及其实现
4种缓存模式 随着应用程序的复杂性日益增加,缓存管理变得至关重要。缓存不仅能有效减轻数据库负载,还能显著提升数据访问速度。选择合适的缓存模式能够在不同的业务场景下发挥出最佳效果。 本文将详细介绍四种常见的缓存模式:Cache-Aside (…...
python pyqt5 优秀的开源项目
目录 1. Qutebrowser 2. Anki 3. Calibre 4. Spyder 5. Leo Editor 6. Trelby 7. Eric IDE 8. Fman 9. Gramps 10. OpenShot 使用 PyQt5 开发的优秀开源项目涵盖了各种应用领域,包括桌面应用、开发工具、教育软件等。以下是一些值得关注的 PyQt5 开源项目: 1. Qut…...
【C++】关系操作符的全面解析与高级应用
博客主页: [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: C 文章目录 💯前言💯关系操作符1.关系操作符的分类与语义2.关系操作符的连用问题3.浮点数比较的精度问题问题示例解决方案 💯总结核心要点 💯小结 💯前言 在…...
Git进行版本控制的VS项目中特定配置
在使用Git进行版本控制的VS(Visual Studio)项目中,通常有一些文件和目录是不需要提交到仓库中的。这些文件通常是编译生成的输出、临时文件、用户特定配置等。为了告诉Git忽略这些文件,你应该编辑或创建一个.gitignore文件&#x…...
Linux Ubuntu 安装配置RabbitMQ,springboot使用RabbitMQ
rabbit-Ubuntu 一篇文章学会RabbitMQ 在Ubuntu上查看RabbitMQ状态可以通过多种方式进行,包括使用命令行工具和Web管理界面。以下是一些常用的方法: 1-使用systemctl命令: sudo systemctl start rabbitmq-server sudo systemctl status ra…...
MongoDB数据建模小案例
MongoDB数据建模小案例 朋友圈评论内容管理 需求 社交类的APP需求,一般都会引入“朋友圈”功能,这个产品特性有一个非常重要的功能就是评论体系。 先整理下需求: 这个APP希望点赞和评论信息都要包含头像信息: 点赞列表,点赞用户的昵称,头像;评论列表,评论用户的昵称…...
基于MATLAB野外观测站生态气象数据处理分析实践应用
1.本课程基于MATLAB语言 2.以实践案例为主,提供所有代码 3.原理与操作结合 4.布置作业,答疑与拓展 示意图: 以野外观测站高频时序生态气象数据为例,基于MATLAB开展上机操作: 1.不同生态气象要素文件的数据读写与批处理…...
《三角洲行动》游戏安全组件运行时发生异常1-0-0,是什么原因?以及要如何解决?
《三角洲行动》游戏安全组件异常1-0-0深度探讨 今天你们安全撤离了吗?在《三角洲行动》这款经典射击游戏里,游戏安全组件运行时发生异常1-0-0的原因及解决方案,并借此机会分享一些有关文件丢失、文件损坏和系统报错等问题的通用解决策略。希…...
VAS1260Q奇力LED驱动芯片DCDC降压恒流可替代Diodes8860
VAS1260Q是一款专为车规级LED照明设计的连续模式电感降压驱动器,能够高效地驱动单个或多个串联LED。它集成了高端输出电流检测电路,并通过外部电阻设置标称平均输出电流,具有高可靠性和宽广的应用场景。 核心技术参数 1. 输入电压范围…...
leetcode-88.合并两个有序数组(易理解)
双指针 为了合并两个已排序的数组 nums1 和 nums2,并将结果存储在 nums1 中,我们可以采用双指针的方式从后向前进行合并。这种方法的好处是可以避免在nums1中移动元素,从而提高效率。 算法步骤 初始化三个指针: p1 指向 nums1 的…...
github操作学习笔记
git开源的分布式版本控制系统: 每次修改文件提交后,都会自动创建一个项目版本 查看git版本看有没有安装成功:git --version 把默认编辑器设置成vim:git config --global core.editor "vim" 1、设置昵称和邮箱ÿ…...
基于Hadoop大数据音乐推荐系统的设计与实现
摘 要 各种主流的音乐平台都为用户提供了的大量的音乐,让他们时刻都能沉浸在音乐的海洋之中。然而,过多的音乐往往使用户眼花缭乱,很难发现他们真正所需要的。一套优秀的推荐系统,可以很好地解决这个问题,既能帮助用户…...
【Linux】冯诺依曼体系结构
目录 一、冯诺依曼体系结构二、冯诺依曼体系结构的基本组成三、关于冯诺依曼体系结构的一些问题结尾 一、冯诺依曼体系结构 冯诺依曼体系结构,也称为普林斯顿结构,是现代计算机设计的基础框架。这一体系结构由数学家冯诺依曼在20世纪40年代提出…...
2025计算机毕设选题推荐【小程序方向】【基础功能+创新点设计】
✅博主介绍:CSDN毕设辅导博主、CSDN认证 Java领域优质创作者 ✅技术范围:主要包括Java、Vue、Python、爬虫、小程序、安卓app、大数据、机器学习等设计与开发。 ✅主要内容:免费功能设计、开题报告、任务书、功能实现、代码编写、论文编写和…...
CSS系列(3)-- 定位与文档流详解
前端技术探索系列:CSS 定位与文档流详解 📍 致读者:掌握页面布局的精髓 👋 前端开发者们, 今天我们将深入探讨 CSS 定位与文档流,这是掌握页面布局的关键所在。通过本文,你将全面理解各种定位…...
【书生大模型实战营】Linux 基础知识-L0G1000
前言:书生大模型实战营是上海人工智能实验室开展的大模型系列实践活动,提供免费算力平台,学员通过闯关式任务,可获得免费算力和存储,助力项目实践。本期是第4期,时间从十一月份开始,持续到十二月…...
小程序IOS安全区域优化:safe-area-inset-bottom
ios下边有一个小黑线,位于底部的元素会被黑线阻挡 safe-area-inset-bottom 一 用法及作用: IOS全面屏底部有小黑线,位于底部的元素会被黑线阻挡,可以使用以下样式: .model{padding-bottom: constant(safe-area-ins…...
STM32-C语言基础知识
C语言基础知识 stdint.h简介 给寄存器某个位赋值 给位6赋值为1流程:先清0,再赋值 带参数的宏定义 建议使用do {…}while(0)来构造宏定义 条件编译 条件编译后面必须跟宏语句,如#if _LED_H 指针使用常见的2大问题 1、未初始化 2、越界使…...
深度和法线纹理
屏幕后期处理效果的基本原理就是当游戏画面渲染完毕后通过获取到该画面的信息进行额外的效果处理 之前的边缘检测、高斯模糊、Bloom、运动模糊等效果都是基于获取当前屏幕图像中的像素信息进行后期处理的 如果仅仅根据像素信息来进行一些效果处理,存在以下问题&…...
21天掌握javaweb-->第11天:前端性能优化与响应式设计
前端性能优化与响应式设计 1. 前端性能优化技巧 1.1 代码分割(Code Splitting) 代码分割是一种将代码拆分成多个较小的包,并在需要时按需加载的技术,这有助于减少初始加载时间,并提高应用程序的响应速度。 实现方法…...
java+ssm+mysql校园物品租赁网
项目介绍: 使用javassmmysql开发的校园物品租赁网,系统包含管理员、用户角色,功能如下: 管理员:用户管理;物品管理(物品种类、物品信息、评论信息);订单管理࿱…...
C#常见错误—空对象错误
System.NullReferenceException:未将对象引用设置到对象的实例 在C#编程中,System.NullReferenceException是一个常见的运行时异常,其错误信息“未将对象引用设置到对象的实例”意味着代码试图访问一个未被初始化或已被设置为null的对象的成…...
GPT系列模型简要概述
GPT-1:(0.117B参数量,0.8B words预训练数据) 动机: 在RNN和Transformer之间,选择了后者。 和《All your need is Attention》翻译模型的Encoder-Decoder架构相比,只保留Decoder,因此去掉了Cross…...
关于睡懒觉
我们经常听到一个词:睡懒觉。 我认为,睡懒觉这个词,是错误的。 人,是需要睡眠的,睡不够,就不会醒。睡够了,自然会醒,也不想继续睡。不信你试试,睡够了,你…...
Spring Data JPA 入门
文章目录 前言、Spring Data JPA 是什么?1、背景2、优势3、Spring Data JPA 和 MyBatis-Plus 对比4、Spring Data JPA 与 JPA 的关系是什么? 一、准备1、依赖引入Spring Boot 框架依赖引入:非 Spring Boot 框架依赖引入: 2、定义实…...
操作系统用户界面
实验目的: LINUX操作系统提供了图形用户界面和命令行界面,本实验主要熟悉命令行界面,为后续的实验编程做准备。 二、实验内容: 写出每个命令的功能及格式 1、有关目录和文件操作的命令 1.1cat 功能: 1.一次显示整…...
区块链dapp 开发详解(VUE3.0)
1、安装metamask 插件。 2、使用封装的工具包: wagmi . 3、 wagmi 操作手册地址:connect | Wagmi 4、注意事项: 因为最初是react 版本,所以在VUE版的官方文档有很多地方在 import 用的是 wagmi,需要改为 wagmi/vue 。 连接成功后打印的内容如下&…...
BTC密码学原理
文章目录 比特币的密码学基础哈希函数(Hash Function)非对称加密(Asymmetric Cryptography)数字签名(Digital Signature) 工作量证明(Proof of Work)区块链技术的密码学保障区块链的…...
【NLP 9、实践 ① 五维随机向量交叉熵多分类】
目录 五维向量交叉熵多分类 规律: 实现: 1.设计模型 2.生成数据集 3.模型测试 4.模型训练 5.对训练的模型进行验证 调用模型 你的平静,是你最强的力量 —— 24.12.6 五维向量交叉熵多分类 规律: x是一个五维(索引)向量ÿ…...
Linux -文件系统的备份
本文为Ubuntu Linux操作系统- 第九弹~~ 今天接着上文的内容,讲Linux磁盘存储管理最后一部分内容~ 上期回顾:Linux 图形界面工具管理磁盘分区和文件系统 😎黑犀铠甲合体,流星枪之狂瀑扎帖,碎魔伏暴,灭于狂瀑…...
【Linux基础五】Linux开发工具—上(apt和vim)
【Linux基础五】Linux开发工具—上(apt和vim) 1.apt包管理工具2.Linux中的编辑器vim2.1命令模式2.2插入模式2.3底行模式2.4替换模式2.5视图模式2.6多线程操作2.7配置vim 1.apt包管理工具 在 Linux 系统中,软件包管理工具是用户安装、更新和管…...
力扣--LCR 134.Pow(x,n)
题目 实现 pow(x, n) ,即计算 x 的 n 次幂函数(即,xn)。 示例 1: 输入:x 2.00000, n 10 输出:1024.00000 示例 2: 输入:x 2.10000, n 3 输出:9.2610…...
java抽奖系统(一)2.0
1. 项⽬介绍 1.1 背景 随着数字营销的兴起,企业越来越重视通过在线活动来吸引和留住客⼾。抽奖活动作为⼀种有效的营 销⼿段,能够显著提升⽤⼾参与度和品牌曝光率。于是我们就开发了以抽奖活动作为背景的Spring Boot项⽬,通过这个项⽬提供⼀…...
读取电视剧MP4视频的每一帧,检测出现的每一个人脸并保存
检测效果还不错,就是追踪有点难做 import cv2 import mediapipe as mp import os from collections import defaultdict# pip install msvc-runtime# 初始化OpenCV的MultiTracker # multi_tracker = cv2.MultiTracker_create() # multi_tracker = cv2.legacy.MultiTracker_cre…...
【MySQL 进阶之路】事务并发情况分析
MySQL事务并发控制分析笔记 在数据库系统中,事务并发控制至关重要,能够确保多个事务并发执行时的数据一致性、隔离性和正确性。MySQL通过不同的锁机制控制并发操作,以确保事务的隔离性。以下是对事务A和事务B并发行为的详细分析,…...