当前位置: 首页 > news >正文

Java:单例模式(Singleton Pattern)及实现方式

一、单例模式的概念

单例模式是一种创建型设计模式,确保一个类只有一个实例,并提供一个全局访问点来访问该实例,是 Java 中最简单的设计模式之一。该模式常用于需要全局唯一实例的场景,例如日志记录器、配置管理、线程池、数据库连接池等。

注意:单例模式的构造方法必须要声明为private类型。

欢迎关注工 众号:ItBeeCoder,查看更多高质量技术文章,发送“后端”获取资料

二、实现方式

在Java中,单例模式有多种实现方式,每种方式都有其适用场景和优缺点。下面主要从每种方式的特点、Java代码实现方式及优缺点三个方面介绍几种常见的实现方式。

1.饿汉式(Eager Initialization)

1)特点

类加载时立即创建并初始化实例,是线程安全的,但由于有些类的实例并不会立即用到,这种方式可能会浪费资源,尤其是创建占用资源较多的大对象时,尤为明显。

2)代码实现

public class EagerSingleton {// 类加载时直接创建实例private static final EagerSingleton instance = new EagerSingleton();// 私有构造函数防止外部实例化,这里构造函数必须为私有的private EagerSingleton() {}public static EagerSingleton getInstance() {return instance;}
}

3)优缺点
使用这种方式创建单个示例的优缺点都比较明显。
优点:简单、线程安全。
缺点:实例在类加载时创建,若从未使用会导致资源浪费。

对于计算机技术感兴趣的读者,可以加入下裙,和更多行业爱好者分享、交流最新的技术。

在这里插入图片描述

2. 同步方法懒汉式(Lazy)(线程安全,性能差)

1)特点
这种方法通过在实例创建方法getInstance()前加synchronized关键字保证多线程环境下只能创建一个实例对象,这种方法保证线程安全,但性能较低(使用了synchronized 关键字,会导致操作系统用户态和内核态的切换,耗费时间和性能,深层原因后面会在介绍synchronized 关键字的文章里详细介绍)。

2)代码实现

public class SynchronizedSingleton {private static SynchronizedSingleton instance;private SynchronizedSingleton() {}public static synchronized SynchronizedSingleton getInstance() {if (instance == null) {instance = new SynchronizedSingleton();}return instance;}
}

3)优缺点
优点:这种方法是线程安全的,synchronized关键字保证多线程环境下只能创建一个实例对象。
缺点:每次调用getInstance()都需要同步,性能差。

欢迎关注工 众号:ItBeeCoder,查看更多高质量技术文章,发送“后端”获取资料

3. 懒汉式(Lazy Initialization,不推荐,了解即可)

1)特点

该种实现方式延迟初始化实例对象,存在多线程安全问题。

2)代码实现

public class LazySingleton {private static LazySingleton instance;private LazySingleton() {}public static LazySingleton getInstance() {Aif (instance == null) {B)      instance = new LazySingleton();}return instance;}
}

3)优缺点
优点:延迟加载,节省资源。
缺点:这里instance实例前未加volatile关键字,并且getInstance()方法未加同步关键字或者加锁,这种方法是非线程安全的,多线程环境下可能创建多个实例。

例如:有两个线程a和b同时要创建LazySingleton 类的实例对象,a、b线程执行到 A) 处时,满足if中的判断条件,就会创建一个LazySingleton 类的实例对象。b线程这时也满足if条件,同样会创建一个实例,所以这种方法并不能保证多线程环境下只创建一个对象。

笔者注:这种方式建议了解即可,真正项目中不要用这种方式。

4. 双重检查锁定(Double-Checked Locking,DCL,推荐该种方法)

1)特点
减少同步次数,兼顾性能与线程安全。
欢迎关注工 众号:ItBeeCoder,查看更多高质量技术文章,发送“后端”获取资料

2)代码实现

public class DCLSingleton {// 这里使用volatile的作用是禁止指令重排序,因为JAVA中创建对象包括几步:如果不使用volatile,private static volatile DCLSingleton instance;private DCLSingleton() {}public static DCLSingleton getInstance() {Aif (instance == null) { // 第一次检查Bsynchronized (DCLSingleton.class) {Cif (instance == null) { // 第二次检查D)             instance = new DCLSingleton();}}}return instance;}
}

3)优缺点
优点:这种方法是线程安全的,并且在真正用到对象的时候,才会进行对象的创建(懒汉式,延迟创建),避免了提前创建对象导致的资源浪费,性能较好。
缺点:volatile关键在JDK 1.5及以后的版本才支持,JDK1.5以前的版本并不支持该种写法,需要注意,另外代码实现方式稍微复杂一些。

4)该方法使用Volatile关键字的原因
假设当前有两个线程1和2都要获取DCLSingleton 类的实例,线程1执行到A)处,满足条件进入到if判断中,接着进入到同步代码块,执行到B)行代码后,线程1的CPU执行时间片用完,让出CPU,线程2开始执行,线程2满足A)、C)处的判断条件,一直执行到D)处,并开始创建对象。Java中对象的创建主要分为几个步骤:1)声明一个引用变量(值为null);2)创建对象并为对象分配内存空间;3)初始化对象4)将对象的内存地址赋给引用变量。JVM在执行代码指令时,会根据情况对指令进行重排序。如果JVM将创建对象的指令重排序为2)、3)、1)、4),线程2执行完2)和3)后时间片用完,这些对象的引用仍为NULL。线程1)接着执行,会重新创建一个对象。最终导致多线程环境下创建多个实例。

volatile关键字可以防止指令重排序,所以这里在instance实例声明前加了该关键字,创建对象的时候会完全按照1)、2)、3)、4)的步骤执行,避免多线程环境下线程不安全的问题。

5. 静态内部类(Holder模式)

1)特点
利用类加载机制保证线程安全,延迟加载且无需同步。

2)代码实现

public class HolderSingleton {private HolderSingleton() {}// 静态内部类持有实例private static class Holder {private static final HolderSingleton INSTANCE = new HolderSingleton();}public static HolderSingleton getInstance() {return Holder.INSTANCE;}
}

3)优缺点
优点:线程安全、延迟加载、无同步开销。
缺点:无法传递参数初始化实例。

6. 枚举(Enum)

1)特点
枚举是最简洁、安全的单例实现方式,天然防反射和序列化破坏。

2)代码实现

public enum EnumSingleton {INSTANCE; // 单例实例// 添加其它业务方法public void doSomething() {System.out.println("Singleton method");
// 其它业务代码}
}

3)优缺点
优点:线程安全、防止反射攻击、自动处理序列化。
缺点:无法继承其他类(枚举类已继承Enum)。

Java中单例模式有多种实现方式,包括饿汉式、懒汉式、同步方法懒汉式、双重检查锁定、静态内部类和枚举。每种方式都有其优缺点和适用场景:饿汉式简单但可能浪费资源;懒汉式延迟加载但非线程安全;同步方法懒汉式线程安全但性能低;双重检查锁定和静态内部类都提供了线程安全和延迟加载的解决方案;枚举是最简洁安全的单例实现,防止反射和序列化破坏。文章总结了对不同场景的选择建议,并提醒谨慎使用单例模式,以防代码耦合度高和难以测试。

笔者在项目开发过程中一直用的是本文介绍的方法双重检查锁定。这种方法属于延迟加载,能避免提前创建实例导致的资源浪费。

单例模式的核心要点有3方面:
1)唯一性:保证一个类在系统中只有一个实例。
2)控制访问:提供一个全局访问点来获取该实例。
3)延迟初始化(可选):实例化延迟到第一次使用时。

使用建议:
对于需要延迟加载且高并发的场景,建议优先选择静态内部类或双重检查锁定。在需要防反射或序列化攻击的场景,则必须使用枚举。



又到了金三银四求职季,我整理了一些互联网大厂的面试题,有需要的可关注工 众号:ItBeeCoder,发送“后端”获取
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

相关文章:

Java:单例模式(Singleton Pattern)及实现方式

一、单例模式的概念 单例模式是一种创建型设计模式,确保一个类只有一个实例,并提供一个全局访问点来访问该实例,是 Java 中最简单的设计模式之一。该模式常用于需要全局唯一实例的场景,例如日志记录器、配置管理、线程池、数据库…...

解锁养生秘籍,拥抱健康生活

在这个快节奏的时代,人们行色匆匆,常常在忙碌中忽略了健康。其实,养生并非遥不可及,它就藏在生活的细微之处,等待我们去发现和实践。 规律作息是健康的基础。日出而作,日落而息,顺应自然规律&am…...

数据结构之堆(Heap)

数据结构之堆(Heap) 数据结构之堆(Heap)一、堆的核心概念1. 定义与性质2. 存储方式 二、核心操作与算法1. 操作复杂度概览2. 关键操作详解(1) 向上调整(Sift Up)(2) 向下调整(Sift Down&#xf…...

人工智能 - 机器学习、深度学习、强化学习是人工智能领域的理论基础和方法论

机器学习、深度学习、强化学习是人工智能领域的三大核心方向,各自具有独特的理论基础和方法论。以下是它们的核心理论知识总结: 一、机器学习(Machine Learning, ML) 1. 基础概念 目标:通过数据驱动的方式,让机器从经验中学习规律,完成预测、分类或决策任务。 核心范式…...

github上文件过大无法推送问题

GitHub 对文件大小有限制,超过 100 MB 的文件无法直接推送到仓库中。 解决思路: 使用 Git Large File Storage (Git LFS) 来管理大文件不上传对应的大文件 使用Git LFS: 1. 安装 Git LFS 首先,你需要安装 Git LFS。可以按照以…...

Elasticsearch:将 Ollama 与推理 API 结合使用

作者:来自 Elastic Jeffrey Rengifo Ollama API 与 OpenAI API 兼容,因此将 Ollama 与 Elasticsearch 集成非常容易。 在本文中,我们将学习如何使用 Ollama 将本地模型连接到 Elasticsearch 推理模型,然后使用 Playground 向文档提…...

【Linux】详谈 进程控制

目录 一、进程是什么 二、task_struct 三、查看进程 四、创建进程 4.1 fork函数的认识 4.2 2. fork函数的返回值 五、进程终止 5.1. 进程退出的场景 5.2. 进程常见的退出方法 5.2.1 从main返回 5.2.1.1 错误码 5.2.2 exit函数 5.2.3 _exit函数 5.2.4 缓冲区问题补…...

构建高效智能对话前端:基于Ant Design X 的deepseek对话应用

文章目录 实现的效果前言Ant Design X添加欢迎组件创建对话气泡存储对话历史渲染对话气泡 输入组件WebSocket 连接总结 实现的效果 待机页面: 等待页面: 完成页面: 前言 随着人工智能技术的飞速发展,大模型对话系统已成为…...

WordPress“更新失败,响应不是有效的JSON响应”问题的修复

在使用WordPress搭建网站时,许多人在编辑或更新文章时,可能会遇到一个提示框,显示“更新失败,响应不是有效的JSON响应”。这个提示信息对于不了解技术细节的用户来说,太难懂。其实,这个问题并不复杂&#x…...

华为交换机trunk简介配置

目录 一、Trunk 口简介二、Trunk 口配置案例及命令(一)组网需求(二)配置步骤(三)验证配置 三、注意事项 一、Trunk 口简介 Trunk 口是交换机中一种重要的端口类型,主要用于连接交换机与交换机、…...

DeepSeek从入门到精通(清华大学)

​ DeepSeek是一款融合自然语言处理与深度学习技术的全能型AI助手,具备知识问答、数据分析、编程辅助、创意生成等多项核心能力。作为多模态智能系统,它不仅支持文本交互,还可处理文件、图像、代码等多种格式输入,其知识库更新至2…...

【SpringBoot3】面向切面 AspectJ AOP 使用详解

文章目录 一、AspectJ介绍二、简单使用步骤 1、引入依赖2、定义一个Aspect3、开启AOP支持 三、AOP 核心概念四、切点(Pointcut) 1. execution2. within3. this & target4. args & args5. within & target & annotation 五、通知&#xf…...

容器运行常见数据库

一.涉及镜像压缩包 均为amd架构版本:mysql:5.7.42、postgres:13.16、dm8:20250206_rev257733_x86_rh6_64、oceanbase-ce:v4.0、opengauss:5.0.2 通过网盘分享的文件:db.tgz 链接: https://pan.baidu.com/s/1EBbFPZj1FxCA4_GxjVunWg?pwd563s 提取码: 5…...

OpenGL ES学习大纲

如果您想从头学习 OpenGL ES,以下是一个详细的学习大纲,涵盖了从基础到高级的知识点,循序渐进地帮助您掌握 OpenGL ES 的核心概念、API 使用、渲染管线、着色器编程、性能优化等内容。 1. 学习前的准备 1.1 基础知识 在学习 OpenGL ES 之前,您需要掌握以下基础知识: 数学…...

Kotlin 优雅的接口实现

1. 日常遇到的冗余的接口方法实现 日常开发中,经常会要实现接口,但是很多场景中,只需要用到其中一两个方法,例如 ActivityLifecycleCallbacks,它有很多个接口需要实现,但是很多时候我们只需要用到其中的一…...

数据结构实现顺序表的尾插,尾删,按值查找/修改/删除,按下标查找/增加/删除

头文件&#xff1a;head.h #ifndef __HEAD_H__ #define __HEAD_H__#include <stdio.h> #include <string.h> #include <stdlib.h> #define MAXSIZE 20enum num {success,false-1};typedef int datatype;typedef struct {int len;datatype data[MAXSIZE]; }S…...

qt实现文字跑马灯效果

实现跑马灯的方式多种多少样&#xff0c;可以通过定时器&#xff0c;或者animation等来实现。 本文通过定时器&#xff0c;将第一个文字&#xff0c;移动到最后一个这种方式来实现&#xff0c;还有其他方式哈。 直接上源码 h文件 #ifndef TEXTTICKER_H #define TEXTTICKER_…...

PyTorch Tensor 形状变化操作详解

PyTorch Tensor 形状变化操作详解 在深度学习中&#xff0c;Tensor 的形状变换是非常常见的操作。PyTorch 提供了丰富的 API 来帮助我们调整 Tensor 的形状&#xff0c;以满足模型输入、计算或数据处理的需求。本文将详细介绍 PyTorch 中常见的 Tensor 形状变换操作&#xff0…...

关于Node.js前端面试的试题概念、工作原理及实际应用

文章目录 1. 什么是Node.js&#xff1f;2. Node.js是如何工作的&#xff1f;3. Node.js与其他流行的框架相比有何优势&#xff1f;4. Node.js如何克服I/O操作阻塞的问题&#xff1f;5. 为什么Node.js是单线程的&#xff1f;6. 如果Node.js是单线程的&#xff0c;那么它是如何处…...

OpenCV机器学习(3)期望最大化(Expectation-Maximization, EM)算法cv::ml::EM

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 cv::ml::EM 是 OpenCV 机器学习模块中的一部分&#xff0c;用于实现期望最大化&#xff08;Expectation-Maximization, EM&#xff09;算法。EM …...

Spring Boot 集成 Kettle

Kettle 简介 Kettle 最初由 Matt Casters 开发&#xff0c;是 Pentaho 数据集成平台的一部分。它提供了一个用户友好的界面和丰富的功能集&#xff0c;使用户能够轻松地设计、执行和监控 ETL 任务。Kettle 通过其强大的功能和灵活性&#xff0c;帮助企业高效地处理大规模数据集…...

Debezium同步之如何同步GIS数据

Debezium 可以用于同步数据库中的变更数据(CDC),包括GIS(地理信息系统)数据。GIS 数据通常存储在具有地理空间数据类型的表中,例如 PostGIS(PostgreSQL 的扩展)中的 geometry 或 geography 类型。通过 Debezium,可以实时捕获和同步这类数据的变更。本文章简单介绍Post…...

Java与C语言中取模运算符%的区别对比

博客主页&#xff1a; [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: Java 文章目录 &#x1f4af;前言&#x1f4af;C语言中的取模运算符 %基本行为示例 注意事项示例&#xff1a;负数取模 &#x1f4af;Java中的取模运算符 %基本行为示例 对浮点数的支持示例&#xff1a;浮点数取模 符…...

如何commit后更新.gitignore实现push

目录 步骤 1: 更新 .gitignore 文件 步骤 2: 移除已追踪的大文件 步骤 3: 提交更改 步骤 4: 尝试推送 注意事项 如果已经执行了git commit&#xff0c;但后来意识到需要更新.gitignore文件以排除某些不应该被追踪的大文件或目录&#xff0c;并希望在不丢失现有提交记录的情…...

从MySQL迁移到PostgreSQL的完整指南

1.引言 在现代数据库管理中&#xff0c;选择合适的数据库系统对业务的成功至关重要。随着企业数据量的增长和对性能要求的提高&#xff0c;许多公司开始考虑从MySQL迁移到PostgreSQL。这一迁移的主要原因包括以下几个方面&#xff1a; 1.1 性能和扩展性 PostgreSQL以其高性能…...

20250214 随笔 Nginx 负载均衡在数据库中的应用

Nginx 负载均衡在数据库中的应用 在高并发环境下&#xff0c;数据库的性能往往是系统的瓶颈。为了提高数据库的吞吐能力、优化请求分配、减少单点故障&#xff0c;我们可以使用 Nginx 负载均衡 来优化数据库的访问。本文将介绍如何使用 Nginx 进行数据库负载均衡&#xff0c;以…...

从养殖场到科技前沿:YOLOv11+OpenCV精准计数鸡蛋与鸡

前言 谁能想到,鸡蛋和鸡的计数居然能变成一项高科技活儿?想象一下,早上去市场,卖家把鸡蛋摔得稀巴烂,结果鸡蛋滚得到处都是——难道你就得一个个捡回来数?还得小心别弄错?可是,你又不是超人!别担心,科技来帮忙!今天的主角是YOLOv11和OpenCV,它们是计算机视觉领域的…...

【Qt】 Data Visualization

三维数据可视化 三维柱状图三维图的创建程序截图示例代码 三维散点图三维图创建程序截图示例代码 三维曲面图三维图创建程序截图示例代码 Data Visualization 是 Qt 中的一个三维数据可视化模块&#xff0c;可用于绘制三维柱状图、三维散点图和三维曲面。与 Charts 模块类似&am…...

python基础语法

文章目录 字面量定义分类 注释定义分类单行注释多行注释 变量定义 数据类型类型转换定义 案例 标识符定义命名规则内容限定大小写敏感不可使用关键字 命名规范变量的命名规范 运算符数学运算符赋值运算符复合赋值运算符 定义字符串定义方式 字符串拼接语法 字符串格式化语法1字…...

【C++游戏开发-五子棋】

使用C开发五子棋游戏的详细实现方案&#xff0c;涵盖核心逻辑、界面设计和AI对战功能&#xff1a; 1. 项目结构 FiveChess/ ├── include/ │ ├── Board.h // 棋盘类 │ ├── Player.h // 玩家类 │ ├── AI.h // AI类 │ └── Game.h // 游戏主逻辑 ├── src/ …...

C/C++ | 每日一练 (2)

&#x1f4a2;欢迎来到张胤尘的技术站 &#x1f4a5;技术如江河&#xff0c;汇聚众志成。代码似星辰&#xff0c;照亮行征程。开源精神长&#xff0c;传承永不忘。携手共前行&#xff0c;未来更辉煌&#x1f4a5; 文章目录 C/C | 每日一练 (2)题目参考答案封装继承多态虚函数底…...

如何在 VS Code 中快速使用 Copilot 来辅助开发

在日常开发中&#xff0c;编写代码往往是最耗时的环节之一。而 GitHub Copilot&#xff0c;作为一款 AI 编码助手&#xff0c;可以帮助开发者 自动补全代码、生成代码片段&#xff0c;甚至直接编写完整的函数&#xff0c;大幅提升编码效率。那么&#xff0c;如何在 VS Code 中快…...

FFmpeg源码:av_strlcpy函数分析

一、引言 在C/C编程中经常会用到strcpy这个字符串复制函数。strcpy是C/C中的一个标准函数&#xff0c;可以把含有\0结束符的字符串复制到另一个地址空间。但是strcpy不会检查目标数组dst的大小是否足以容纳源字符串src&#xff0c;如果目标数组太小&#xff0c;将会导致缓冲区…...

【生产变更】- 集群中配置SCAN ip的不同端口应用

【生产变更】- 集群中配置SCAN ip的不同端口应用 一、概述二、操作步骤三、故障解决 一、概述 使用非默认端口&#xff08;1521&#xff09;监听scan ip。 二、操作步骤 1、添加11521端口 srvctl add listener -l lis11521 -o /opt/grid/products/11.2.0 -p 11521 srvctl st…...

RabbitMQ 3.12.2:单节点与集群部署实战指南

前言&#xff1a;在当今的分布式系统架构中&#xff0c;消息队列已经成为不可或缺的组件之一。它不仅能够实现服务之间的解耦&#xff0c;还能有效提升系统的可扩展性和可靠性。RabbitMQ 作为一款功能强大且广泛使用的开源消息中间件&#xff0c;凭借其高可用性、灵活的路由策略…...

Node.js技术原理分析系列——如何在Node.js中新增一个内置模块

本文由体验技术团队曹杨毅原创。 Node.js 是一个开源的、跨平台的JavaScript运行时环境&#xff0c;它允许开发者在服务器端运行JavaScript代码。Node.js 是基于Chrome V8引擎构建的&#xff0c;专为高性能、高并发的网络应用而设计&#xff0c;广泛应用于构建服务器端应用程序…...

从低清到4K的魔法:FlashVideo突破高分辨率视频生成计算瓶颈(港大港中文字节)

论文链接&#xff1a;https://arxiv.org/pdf/2502.05179 项目链接&#xff1a;https://github.com/FoundationVision/FlashVideo 亮点直击 提出了 FlashVideo&#xff0c;一种将视频生成解耦为两个目标的方法&#xff1a;提示匹配度和视觉质量。通过在两个阶段分别调整模型规模…...

康耐视CAM-CIC-10MR-10-GC工业相机

康耐视(COGNEX)的工业相机CAM-CIC-10MR-10-GC是CAM-CIC-10MR系列中的一款型号,主要应用于工业自动化检测和高精度视觉系统 基本参数与特性 分辨率与帧率: CAM-CIC-10MR-10-GC属于康耐视CIC系列,具备10MP(1000万像素)的分辨能力,帧率为10fps。该系列相机支持卷帘快门(R…...

解惑Python:一文解决osgeo库安装失败问题

Osgeo&#xff08;Open Source Geospatial Foundation&#xff09;是一个支持开源地理空间数据处理的基金会&#xff0c;我们可以在python中使用“osgeo”库来访问其提供的高效地理空间数据。例如&#xff0c;我们使用该模块提供的GDAL处理栅格数据&#xff0c;使用OGR处理矢量…...

3、树莓派5 安装VNC查看器 开启VNC服务器

在前序文章中&#xff08; 2、树莓派5第一次开机&#xff09;&#xff0c;可以使用三种方式开机&#xff0c;其中使用网线及wifi的方式均需要使用到VNC查看器进行远程桌面控制&#xff0c;本文将介绍如何下载安装并配置及使用VNC查看器及服务器&#xff0c;对前序文章做一些补充…...

Django 创建表时 “__str__ ”方法的使用

在 Django 模型中&#xff0c;__str__ 方法是一个 Python 特殊方法&#xff08;也称为“魔术方法”&#xff09;&#xff0c;用于定义对象的字符串表示形式。它的作用是控制当对象被转换为字符串时&#xff0c;应该返回什么样的内容。 示例&#xff1a; 我在初学ModelForm时尝…...

STM32 CAN过滤器配置和应用方法介绍

目录 概述 一、CAN过滤器核心概念 二、过滤器配置步骤&#xff08;以标准ID为例&#xff09; 三、不同模式的配置示例 四、高级配置技巧 五、调试与问题排查 六、关键计算公式 总结 概述 在STM32微控制器中&#xff0c;CAN过滤器可以配置为标识符屏蔽模式和标识符列表模…...

【第1章:深度学习概览——1.3 深度学习的核心组件与概念解析之神经网络基础】

大家好!今天咱们一头扎进深度学习的神秘领域,好好探索一下其最重要的基石 —— 神经网络。不管你是深度学习的新手小白,还是已经接触过一些基础概念,这篇文章都能助力你更透彻地理解神经网络的原理和运作机制。咱们从最基础的知识入手,一步步揭开神经网络的神秘面纱! 一、…...

Python中如何进行数据库连接?

在 Python 中进行数据库连接&#xff0c;不同的数据库需要使用不同的库。下面分别介绍几种常见数据库&#xff08;SQLite、MySQL、PostgreSQL&#xff09;的连接方法。 1. 连接 SQLite 数据库 SQLite 是一种轻量级的嵌入式数据库&#xff0c;Python 标准库中自带了sqlite3模块…...

解析 WebGPU 中 device.createBuffer 的参数意义

在 WebGPU 开发里&#xff0c;device.createBuffer 方法扮演着至关重要的角色&#xff0c;它用于创建一个 GPU 缓冲区对象&#xff0c;这个对象能够存储顶点数据、索引数据、统一数据等。下面我们就来详细剖析该方法各个参数的意义。 1. size&#xff1a;决定缓冲区容量 size …...

PLC的集成RAM,存储器卡,用户程序存储空间,数据存储容量分别指的什么,有什么关联?

1. 集成RAM 定义&#xff1a;集成RAM&#xff08;随机存取存储器&#xff09;是PLC内部的高速易失性存储器&#xff0c;用于临时存储运行时的数据&#xff08;如输入/输出状态、中间变量、计数器/定时器的当前值等&#xff09;。 特点&#xff1a; 易失性&#xff1a;断电后数…...

BFS-FloodFill 算法 解决最短路问题 多源 解决拓扑排序

文章目录 一、FloodFill 算法[733. 图像渲染](https://leetcode.cn/problems/flood-fill/description/)2.思路3.代码 [200. 岛屿数量](https://leetcode.cn/problems/number-of-islands/description/)2.思路3.代码 [LCR 105. 岛屿的最大面积](https://leetcode.cn/problems/ZL6…...

USB2.03.0接口区分usb top工具使用

一. USB2.0 & 3.0接口支持区分 1.1. 颜色判断 USB接口的颜色并不是判断版本的可靠标准&#xff0c;但根据行业常见规范分析如下&#xff1a; USB接口颜色与版本对照表&#xff1a; 接口颜色常见版本内部触点数量传输速度黑色USB2.04触点480 Mbps (60 MB/s)白色USB2.0(多…...

2025百度快排技术分析:模拟点击与发包算法的背后原理

一晃做SEO已经15年了&#xff0c;2025年还有人问我如何做百度快速排名&#xff0c;我能给出的答案就是&#xff1a;做好内容的前提下&#xff0c;多刷刷吧&#xff01;百度的SEO排名算法一直是众多SEO从业者研究的重点&#xff0c;模拟算法、点击算法和发包算法是百度快速排名的…...

idea 2019.3常用插件

idea 2019.3常用插件 文档 idea 2019.3常用插件idea 2023.3.7常用插件 idea 2019.3常用插件 插件名称插件版本说明1AceJump3.5.9AceJump允许您快速将插入符号导航到编辑器中可见的任何位置。只需按“ctrl&#xff1b;”&#xff0c;键入一个字符&#xff0c;然后在Ace Jump…...