设计模式 创建型 单例模式(Singleton Pattern)与 常见技术框架应用 解析
单例模式(Singleton Pattern)是一种创建型设计模式,旨在确保某个类在应用程序的生命周期内只有一个实例,并提供一个全局访问点来获取该实例。这种设计模式在需要控制资源访问、避免频繁创建和销毁对象的场景中尤为有用。
一、核心思想
单例模式的核心思想是限制类的实例化次数,确保整个应用程序中只有一个实例存在,并且这个实例可以被全局访问。这通常通过私有化构造函数、提供一个静态方法来获取实例的方式实现。
- 唯一性:保证一个类在系统中只有一个实例。
- 控制访问:提供一个全局访问点来获取该实例。
- 延迟初始化(可选):实例化可以延迟到第一次使用时,以节省资源。
实现单例模式的关键要素:
- 私有构造函数:防止外部通过
new
关键字创建新的实例。 - 静态方法或属性:用于存储和返回唯一的实例。
- 线程安全:如果应用是多线程的,则需要确保在并发环境下也能正确工作。
二、定义与结构
定义:单例模式确保一个类只有一个实例,并提供一个全局访问点来获取该实例。
结构:
- 单例类:负责创建和管理唯一的实例。
- 静态成员变量:用于保存唯一的实例引用。
- 获取实例方法:通常是一个静态方法,用于返回唯一的实例。
- 私有构造函数:防止外部通过构造函数创建多个实例。
角色
- 单例类:包含私有构造函数、静态成员变量和获取实例的静态方法。
三、实现步骤及代码示例
以Java为例,单例模式的实现方式有多种,包括饿汉式、懒汉式、双重检查锁定(Double-Checked Locking)和静态内部类实现方式等。以下是几种常见实现的代码示例:
1、饿汉式
- 特点:在类加载时就创建实例,没有延迟加载的效果,但避免了多线程的同步问题。
- 优点:线程安全,执行效率高。
- 缺点:可能导致内存浪费,因为实例在类加载时就已创建,即使未使用。
public class HungrySingleton implements Serializable {private static final long serialVersionUID = 1L;private static final HungrySingleton hungry = new HungrySingleton();private HungrySingleton() {// 防止反序列化时重新创建实例if (hungry != null) {throw new RuntimeException("请使用 HungrySingleton.getInstance() 方法获取一个单例实例");}}public static HungrySingleton getInstance() {return hungry;}// 其他方法...
}
2、懒汉式(线程不安全)
-
特点:按需加载,节省资源,只有在确实需要的时候才会创建实例。但存在线程安全问题。
-
优点:延迟加载,提高了程序启动的速度。
-
缺点:在多线程环境下需要额外的同步机制来保证线程安全。
-
线程不安全的懒汉式示例代码:
public class LazySingleton {private static LazySingleton lazyMan;public LazySingleton() {// 构造函数可以为空或包含初始化代码}public static LazySingleton getInstance() {if (lazyMan == null) {lazyMan = new LazySingleton();}return lazyMan;}// 其他方法...
}
上述代码在多线程环境下可能会出现多个实例,因此线程不安全。
注意:懒汉式(线程不安全)在多线程环境下可能会导致多个实例被创建,因此通常不推荐使用。
3、双重检查锁定(Double-Checked Locking)
线程安全的懒汉式示例代码(双重检查锁定):
public class LazySafe {private static volatile LazySafe instance = null;private LazySafe() {}public static LazySafe getInstance() {if (instance == null) {synchronized (LazySafe.class) {if (instance == null) {instance = new LazySafe();}}}return instance;}
}
使用volatile关键字确保在多线程环境中正确处理,双重检查锁定保证了线程安全和性能。
4、静态内部类实现方式
-
特点:利用Java的类加载机制实现延迟加载,线程安全且高效。
-
优点:实现简单,无需额外的同步机制。
-
缺点:无法支持非静态单例需求。
-
示例代码:
public class InnerClassSingleton {private InnerClassSingleton() {// 构造函数可以为空或包含初始化代码}private static class Holder {private static final InnerClassSingleton INSTANCE = new InnerClassSingleton();}public static InnerClassSingleton getInstance() {return Holder.INSTANCE;}// 其他方法...
}
5、枚举单例
-
特点:实现简单,线程安全,防止反射和序列化破坏。
-
优点:最简洁的实现方式,由Java语言本身保证线程安全性。
-
缺点:不支持延迟加载。
-
示例代码:
public enum Singleton {INSTANCE;public void someMethod() {// 单例方法逻辑}
}
四、JavaScript中的单例模式实现
基本实现
class Singleton {constructor() {if (typeof Singleton.instance === 'object') {return Singleton.instance;}Singleton.instance = this;}static getInstance() {if (!this.instance) {new this();}return this.instance;}someBusinessLogic() {// ...业务逻辑...}
}// 使用示例
const instanceA = Singleton.getInstance();
const instanceB = Singleton.getInstance();console.log(instanceA === instanceB); // true
模块模式下的单例
在JavaScript中,模块本身就是一个天然的单例,因为每个模块只会被加载一次。因此,可以利用ES6模块来实现单例模式。
// singleton.js
const singleton = (() => {let privateState = {}; // 私有状态function somePrivateMethod() {// 私有方法}return {publicMethod: function() {// 公共方法somePrivateMethod();},getPrivateState: function() {return privateState;}};
})();export default singleton;// 在其他文件中导入并使用
import singleton from './singleton';singleton.publicMethod();
console.log(singleton.getPrivateState());
线程安全的单例(适用于Node.js)
当涉及到多线程环境时,如Node.js worker_threads,可能需要确保线程安全。
class ThreadSafeSingleton {constructor() {if (!ThreadSafeSingleton.instance) {ThreadSafeSingleton.instance = this;}return ThreadSafeSingleton.instance;}static getInstance() {if (!this.instance) {// 如果是在多线程环境中,这里应该加入锁机制// 例如使用Promise或其他同步机制来保证线程安全new this();}return this.instance;}someBusinessLogic() {// ...业务逻辑...}
}
使用立即执行函数表达式(IIFE)
这是一种经典的JavaScript单例实现方式,尤其是在不支持模块化的旧版本浏览器中。
const singleton = (function () {const privateState = {}; // 私有状态function privateMethod() {// 私有方法}return {publicMethod: function () {// 公共方法privateMethod();},getPrivateState: function () {return privateState;}};
})();
五、常见技术框架应用
在Spring框架中,单例模式也得到了广泛应用。Spring容器默认创建的Bean是单例的,即在整个Spring IoC容器中,一个Bean只会有一个实例。以下是Spring中配置单例Bean的示例:
<bean id="myBean" class="com.example.MyBean" singleton="true"/>
或者,在基于注解的配置中,可以通过@Component
或@Bean
注解来定义Bean,并默认其为单例:
@Component
public class MyBean {// ...
}@Configuration
public class AppConfig {@Beanpublic MyBean myBean() {return new MyBean();}
}
六、应用场景
单例模式常用于以下场景:
- 日志记录器:在整个应用程序中,通常只需要一个日志记录器来记录日志信息。
- 配置管理器:应用程序的配置信息通常只需要一个实例来管理,以确保配置的一致性。
- 数据库连接池:为了有效地管理数据库连接,避免频繁地创建和销毁连接,通常使用单例模式来创建数据库连接池。
- 线程池:管理和复用线程,避免频繁地创建和销毁线程,提高系统性能。
- 全局计数器:在需要全局唯一的计数器时,可以使用单例模式。
- 购物车服务:在电子商务网站中,用户的购物车应当是唯一的。
- 窗口管理器:图形界面程序中,窗口管理器应确保只有一个实例来协调所有窗口的行为。
七、优缺点
优点:
- 延迟加载:只有在需要时才创建实例,节省资源。
- 全局访问点:提供一个全局访问对象的方式,方便在不同模块和组件之间共享资源。
- 控制资源:在需要限制实例数量的场景下(如数据库连接池、日志系统),单例模式能够确保系统中只有一个实例在操作资源。
缺点:
- 线程安全问题:在多线程环境下,需要额外的同步机制来确保线程安全,可能会影响性能。
- 单例类的职责单一:单例模式通常要求单例类只承担一个职责,否则可能会违背单一职责原则,导致代码难以维护。
综上所述,单例模式是一种非常有用的设计模式,在需要控制资源访问和避免频繁创建对象的场景中发挥着重要作用。然而,在使用时也需要注意其潜在的缺点,并根据具体场景选择合适的实现方式。
相关文章:
设计模式 创建型 单例模式(Singleton Pattern)与 常见技术框架应用 解析
单例模式(Singleton Pattern)是一种创建型设计模式,旨在确保某个类在应用程序的生命周期内只有一个实例,并提供一个全局访问点来获取该实例。这种设计模式在需要控制资源访问、避免频繁创建和销毁对象的场景中尤为有用。 一、核心…...
idea( 2022.3.2)打包报错总结
一 报错 class lombok.javac.apt.LombokProcessor (in unnamed module 0x4fe64d23) cannot access class com.sun.tools.javac.processing.JavacProcessingEnvironment (in module jdk.compiler) because module jdk.compiler does not export com.sun.tools.javac.processing …...
基于SpringBoot在线竞拍平台系统功能实现十一
## 一、前言介绍:1.1 项目摘要 随着网络技术的飞速发展和电子商务的普及,竞拍系统作为一种新型的在线交易方式,已经逐渐深入到人们的日常生活中。传统的拍卖活动需要耗费大量的人力、物力和时间,从组织拍卖、宣传、报名、竞拍到成…...
kubernetes学习-Service
kubernetes学习-Service 1. Service说明2. 功能3.Service类型3.1 NodePort3.1.1 创建web-service.yaml3.1.2 创建web-pod.yaml3.1.3 部署3.1.4 验证 3.2 ClusterIP3.2.1 创建web-clusterIp-service.yaml3.2.2 创建web-clusterIp-pod.yaml3.2.3 部署3.2.4 验证 3.3 LoadBalancer…...
【bluedroid】A2dp Source播放流程源码分析(4)
接上集分析:【bluedroid】A2dp Source播放流程源码分析(3)-CSDN博客 蓝牙和AUDIO之间的接口 蓝牙和audio之间的通信是通过socket,管理socket中的文件是UIPC,UIPC管理两条socket。 A2DP_CTRL_PATH /data/misc/bluedroid/.a2dp_ctrl A2DP_DATA_PATH /data/misc/bluedroid…...
vue3基础,小白从入门到精通
目录 一、vue.js 简述 二、 下载 vue.esm-browser.js 这个模块文件 三、创建第一个Vue程序 3.1创建代码过程 四、v-on 五、循环遍历(v-for) 六、判断语法(v-if和v-show) 6.1节点的动态属性v-bind 6.2 用v-bind实现CSS样式绑定 一、vue.js 简述 Vue 3 是一款流行的 J…...
Go 如何优雅退出进程
优雅退出设计步骤 在 Go 项目中,设计优雅退出(Graceful Shutdown)时,通常需要确保在收到退出信号时,程序能够安全地清理资源并优雅地退出。以下是常见的优雅退出设计步骤: 步骤 1:创建 contex…...
#Vue3篇: 无感刷新token的原理JSESSIONID无感刷新和JWT接口刷新
基于这个后端是怎么更新token的 为了理解后端是如何更新 Token 的,我们需要考虑一个典型的基于 Token 的身份验证流程,特别是涉及 JSESSIONID 和自定义 Token(如 JWT, JSON Web Token)的情况。 下面我将介绍两种常见的更新 Token …...
从零开始学桶排序:Java 示例与优化建议
目录 一、桶排序的工作原理 二、适用场景 三、桶排序的时间复杂度 四、Java 实现桶排序 桶排序(Bucket Sort)是一种基于分桶的排序算法,适用于输入数据分布较均匀的场景。它通过将元素分配到不同的“桶”中,然后对每个桶内的元…...
自定义luacheck校验规则
安装运行环境 安装环境及源码解析,参考:LuaCheck校验原理解析 自定义校验规则 从代码中可以看出,定义一条规则有以下关键点: 需要定义告警信息:由键值对组成,key为告警编码(不一定为纯数字&…...
Mac连接云服务器工具推荐
文章目录 前言步骤1. 下载2. 安装3. 常用插件安装4. 连接ssh测试5. 连接sftp测试注意:ssh和sftp的区别注意:不同文件传输的区别解决SSL自动退出 前言 Royal TSX是什么: Royal TSX 是一款跨平台的远程桌面和连接管理工具,专为 mac…...
【react】Redux的设计思想与工作原理
Redux 的设计理念 Redux 的设计采用了 Facebook 提出的 Flux 数据处理理念 在 Flux 中通过建立一个公共集中数据仓库 Store 进行管理,整体分成四个部分即: View (视图层)、Action (动作)、Dispatcher (派发器)、Stor…...
深入解析Android JNI:以Visualizer为例
深入解析Android JNI:以Visualizer为例 引言 Java Native Interface (JNI) 是Java平台提供的一种机制,允许Java代码与本地代码(如C/C++)进行交互。在Android开发中,JNI被广泛用于性能优化、访问底层系统API、以及复用现有的C/C++库。本文将通过Android中的Visualizer类,…...
Java基于SpringBoot的甘肃非物质文化网站的设计与实现,附源码
博主介绍:✌Java老徐、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专栏推荐订阅👇&…...
Unity小白工作心得(无限记录)
24届毕业,11月才找到工作在一家小公司。工作两个月了,遇到最大的问题就是探索新知识,每天都是摸索式前进,因为工作面临着交付,你不得不想尽办法解决问题然后交给上面,但其他程序员用的引擎不一样࿰…...
STC单片机内部常见寄存器及其作用
STC单片机内部常见寄存器及其作用 STC单片机是基于8051架构的增强型单片机,广泛应用于嵌入式系统中。其内部有多个特殊功能寄存器(SFR, Special Function Register),用于控制硬件模块(如定时器、串口、中断等…...
【亚马逊云】基于Amazon EC2实例部署 NextCloud 云网盘并使用 Docker-compose 搭建 ONLYOFFICE 企业在线办公应用软件
文章目录 1. 部署EC2实例2. 安装 Docker 服务3. 安装docker-compose4. 创建Docker-compose文件5. 创建nginx.conf文件6. 运行docker-compose命令开始部署7. 访问ONLYOFFICE插件8. 访问NextCloud云盘9. 下载并启用ONLYOFFICE插件10. 上传文件测试11. 所遇问题12. 参考链接 1. 部…...
vim、watch、cp和mv
一、vim使用技巧 vim主配置文件:/etc/vimrc (对所有用户都生效) vim子配置文件:vim ~/.vimrc (只对当前用户生效) 可写入: set nu 显示行号 ts2 tab键长度为两个空格(默认为8个空格…...
【Linux】:线程安全 + 死锁问题
📃个人主页:island1314 🔥个人专栏:Linux—登神长阶 ⛺️ 欢迎关注:👍点赞 👂🏽留言 😍收藏 💞 💞 💞 1. 线程安全和重入问题&…...
HarmonyOS Next 应用元服务开发-应用接续动态配置迁移保持迁移连续性
保证迁移连续性,由于迁移加载时,目标端拉起的应用可能执行过自己的迁移状态设置命令(如:冷启动时目标端在onCreate中设置了INACTIVE;热启动时对端已打开了不可迁移的页面,迁移状态为INACTIVE等情况…...
重装操作系统后 Oracle 11g 数据库数据还原
场景描述: 由于SSD系统盘损坏,更换硬盘后重装了操作系统,Oracle数据库之前安装在D盘(另一个硬盘),更换硬盘多添加一个盘符重装系统后盘符从D变成E,也就是之前的D:/app/... 变成了现在的 E:/app/...,重新安装…...
《Vue3实战教程》39:Vue3无障碍访问
如果您有疑问,请观看视频教程《Vue3实战教程》 无障碍访问 Web 无障碍访问 (也称为 a11y) 是指创建可供任何人使用的网站的做法——无论是身患某种障碍、通过慢速的网络连接访问、使用老旧或损坏的硬件,还是仅处于某种不方便的环境。例如,…...
Linux-Redis哨兵搭建
环境资源准备 主机名IP端口号角色vm1192.168.64.156379/26379mastervm2192.168.64.166379/26379slavevm3192.168.64.176379/26379slave 6379为redis服务暴露端口号、26379为sentinel暴露端口号。 安装Redis # 包文件下载 wget https://github.com/redis/redis/archive/7.2.2…...
数据分析思维(六):分析方法——相关分析方法
数据分析并非只是简单的数据分析工具三板斧——Excel、SQL、Python,更重要的是数据分析思维。没有数据分析思维和业务知识,就算拿到一堆数据,也不知道如何下手。 推荐书本《数据分析思维——分析方法和业务知识》,本文内容就是提取…...
Go基础之环境搭建
文章目录 1 Go1.1 简介1.1.1 定义1.1.2 特点用途 1.2 环境配置1.2.1 下载安装1.2.2 环境配置1.2.2.1 添加环境变量1.2.2.2 各个环境变量理解 1.2.3 验证环境变量 1.3 包管理工具 Go Modules1.3.1 开启使用1.3.2 添加依赖包1.3.3 配置国内包源1.3.3.1 通过 go env 配置1.3.3.2 修…...
Flume的安装和使用
一、安装Flume 1. 下载flume-1.7.0 http://mirrors.shu.edu.cn/apache/flume/1.7.0/apache-flume-1.7.0-bin.tar.gz 2. 解压改名 tar xvf apache-flume-1.7.0-bin.tar.gz mv apache-flume-1.7.0-bin flume 二、配置Flume 1. 配置sh文件 cp conf/flume-env.sh.template …...
原生js封装ajax请求以及css实现提示效果和禁止点击效果
<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0,user-scalableno"><title>本地模式网络切换</title>&l…...
idea 的 springboot项目spring-boot-devtools 自动编译 配置热部署
1,设置一 2,设置二 设置二(旧版本) CtrlShiftAlt/ 点击弹出框中Registry... 引入(如果报错,换不同的版本) <dependency><groupId>org.springframework.boot</groupId><a…...
算法 class 005 (对数器C语言实现)
对数器的概念: 用来测试你的算法是否正确。 怎么做呢? 1:比如,写个冒泡排序,作为对比的对象 2:生成一个随机数 数组,用来测试 3:用冒泡排序和你想要验证的那个排序算法,同…...
靶场搭建问题(技巧)总结
目录 DVWA靶场问题 待续、更新中...... DVWA靶场 问题 错误信息 Parse error: syntax error, unexpected ‘[’, expecting ‘)’ in C:\Softwares\phpstudy\PHPTutorial\WWW\dvwa\dvwa\includes\dvwaPage.inc.php on line 52 原因 phpstudy2018所使用的php版本过低,…...
Elasticsearch DSL版
文章目录 1.索引库操作创建索引库:删除索引库:查询索引库:修改索引库:总结 2.文档操作创建文档:查询文档:删除文档:全量修改文档:增量修改文档:总结 3.DSL查询语法&#…...
在K8S中,Pod请求另一个Pod偶尔出现超市或延迟,如何排查?
在Kubernetes中,当Pod请求另一个Pod时偶尔出现超时或延迟,可能是由于多种原因造成的。以下是一些建立的排查步骤: 1. 检查网络配置和插件: 确认你的kubernetes集群使用了合适的网络插件(如Calico、Flannel等…...
Echarts实现大屏可视化2
目录 一、效果展示 二、说明 2.1 销售额统计图表 2.2 全国热榜模块 三、边框图片【border-image】 3.1 使用场景 3.2 边框图片切图原理 3.3 边框图片语法【重要】 四、代码展示 4.1 展示页面 4.2 数据概览区域 4.3 监控区域 4.4 点位分布统计区域 4.5 设备数据统…...
HarmonyOS NEXT 应用开发练习:智能视频推荐
一、整体思路 本DEMO展示了如何在HarmonyOS NEXT平台上开发一个智能视频推荐应用。应用通过模拟的用户偏好数据,为用户推荐可能感兴趣的视频。用户可以通过滑动屏幕查看推荐的视频列表,并点击视频封面进入播放页面,本例中仅模拟点击效果&…...
FPGA(二)组成结构基础内容
1. FPGA的基本结构 FPGA主要由以下部分组成: (1)可编程逻辑单元(CLB):CLB是FPGA中最基本的逻辑单元,由查找表(LUT)和触发器组成,可实现任意逻辑功能。查找表…...
linux中执行命令
1.1 命令格式 命令格式: 主命令 选项 参数(操作对象) 命令分为两类: 内置命令( builtin ):由 shell 程序自带的命令 外部命令:有独立的可执行程序文件,文件名即命令…...
《Java 数据结构》
《Java 数据结构》 1. 概述 Java 数据结构是计算机科学中的一种基础概念,它涉及到数据的组织和存储方式,以便能够高效地访问和修改数据。在 Java 中,数据结构通常通过类和接口来实现,这些类和接口提供了用于操作数据的各种方法。…...
C# 设计模式(结构型模式):装饰器模式
C# 设计模式(结构型模式):装饰器模式 在软件开发中,面对需要扩展功能但又不想修改已有代码的情况时,装饰模式(Decorator Pattern)是一个非常有用的设计模式。装饰模式允许我们在不改变对象自身…...
ubuntu初始配置
ubuntu初始配置 vm下ubuntu安装vmtools安装常用工具ubuntu终端美化安装ssh使用apt安装时出现错误解决办法 vm下ubuntu安装vmtools //安装vmtools sudo apt-get install open-vm-tools //桌面组件提供了更好的集成体验,包括拖放文件和共享剪贴板等功能 sudo apt-get…...
Spark Runtime Filter
Runtime Filter 参考链接: https://docs.google.com/document/d/16IEuyLeQlubQkH8YuVuXWKo2-grVIoDJqQpHZrE7q04/edit?tabt.0https://www.modb.pro/db/557718https://issues.apache.org/jira/browse/SPARK-32268https://github.com/apache/spark/pull/35789https…...
《Vue3实战教程》42:Vue3TypeScript 与组合式 API
如果您有疑问,请观看视频教程《Vue3实战教程》 TypeScript 与组合式 API 这一章假设你已经阅读了搭配 TypeScript 使用 Vue 的概览。 为组件的 props 标注类型 使用 <script setup> 当使用 <script setup> 时,defineProps() 宏函数支…...
【Hadoop】Hadoop安全之Knox网关
目录 一、概述 2.1 knox介绍 2.2 版本信息 二、部署 三、验证Knox网关 3.1 Hdfs RESTFULL 3.2 HDFSUI 3.3 YARNUI 3.4 HBASEUI 一、概述 2.1 knox介绍 Apache Knox网关是一个用于与Apache Hadoop部署的REST api和ui交互的应用程序网关。Knox网关为所有与Apache Hadoop…...
UML之关联
关联指两个类之间的各种联系。UML使用各种单实线表示关联,这个单实线可以是直线(垂直的、水平的或者倾斜的)、折线甚至曲线。 事实上,关联也是展示类的属性的另一外的一种形式。例如在下图中,我们通过一条实线连接类B…...
大数据面试笔试宝典之大数据运维面试
1.大数据集群节点规划 1.HDFS 集群节点规划 假如业务系统数据量每天增量 50T ,保留周期为 30 天,那么...
Matlab全局变量用法及其实例分析
⭕⭕ 目 录 ⭕⭕ 一、全局变量使用说明二、全局变量的用法实例演示2.1 实例演示2.2 修改global 一、全局变量使用说明 全局变量是指在不同的工作空间以及基本的工作空间中可以共享的变量。用户只需要在主程序或者任何子程序中声明一个或多个全局变量,则函数和主程序…...
leetcode hot 100 跳跃游戏
55. 跳跃游戏 已解答 中等 相关标签 相关企业 给你一个非负整数数组 nums ,你最初位于数组的 第一个下标 。数组中的每个元素代表你在该位置可以跳跃的最大长度。 判断你是否能够到达最后一个下标,如果可以,返回 true ;否则…...
CG顶会论文阅读|《科技论文写作》硕士课程报告
文章目录 一、基本信息1.1 论文基本信息1.2 课程基本信息1.3 博文基本信息 二、论文评述(中英双语)2.1 研究问题(Research Problem)2.2 创新点(Innovation/Contribution)2.3 优点(Why this pape…...
短视频矩阵系统搭建开发指导
在数字化营销的广阔天地中,抖音短视频已迅速崛起为一个拥有巨大影响力的社交媒体平台。随着其受众范围的日益扩大,采用有效的搜索引擎优化(SEO)策略以增强视频的曝光度和吸引流量变得至关重要。本文旨在阐述一种专为抖音短视频量身…...
LeetCode热题100-移动零【JavaScript讲解】
题目: 根据本题想思路: 快指针和慢指针同时移动,当遍历的值不为0的时候,将快指针的值赋给慢指针,如果遍历到0,快指针继续移动,慢指针不动等待被覆盖。之后使用fill方法填充0。具体答案放在最后…...
MarkDown 的 mermaid gantt(甘特图)、mermaid sequenceDiagram (流程图) 语法解析和应用
简简单单 Online zuozuo: 简简单单 Online zuozuo 简简单单 Online zuozuo 简简单单 Online zuozuo 简简单单 Online zuozuo :本心、输入输出、结果 简简单单 Online zuozuo : 文章目录 MarkDown 的 mermaid gantt、mermaid sequenceDiagram 语法解析和应用前言mermaid gan…...