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

【多线程】单例模式和阻塞队列

目录

一.单例模式

1. 饿汉模式

2. 懒汉模式

 二.阻塞队列

1. 阻塞队列的概念

2. BlockingQueue接口

3.生产者-消费者模型

4.模拟生产者-消费者模型


一.单例模式

单例模式(Singleton Pattern)是一种常用的软件设计模式,其核心思想是确保一个类只有一个实例,并提供一个全局访问点来获取这个实例。

为什么要引入单例模式?

单例模式的核心就是一个类中只有一个实例,因为只用管理一个实例,那么就可以更好的对代码进行一个校验和检查,方便高效管理,同时也避免了多个实例可能带来的问题。

如果创建一个实例需要耗费100G的资源,那么创建出多个实例,代价太大。而且在多数情况下,一个实例完全够用,所有没有必要创建出多个实例,这样就避免资源的重复创建和浪费


在编译器中,没有提供类只能创建出多少个实例的方法,但是我们可以通过一些代码逻辑去规定创建实例的要求,下面是常用的几种单例模式。

1. 饿汉模式

核心特点是 在类加载时就立即创建单例实例,并通过静态方法提供全局访问。

class Singleton{private static Singleton singleton = new Singleton();public static Singleton getSingleton(){return singleton;}//核心操作private Singleton(){}}
  1. 使用static关键字保证唯一实例(在类被加载的时候就会创建出这个唯一实例)
  2. 构造方法被设为私有,导致构造方法无法被调用
  3. 如果想要获取这个实例只能使用静态方法getSingleton调用

 由于在类被加载的时候,就会创建出实例,创建实例的时机很早(感觉非常的迫切,像一个饿汉),所有叫做饿汉模式

 注意:在多线程中,并发调用getSingleton静态方法,由于只有读操作,所以是线程安全

缺点: 如果实例未被使用,实例依然会被创建,可能造成资源浪费(假设实例的大小是100G)。


2. 懒汉模式

其核心特点是 延迟实例的创建,只有在第一次使用时才初始化单例对象,以减少资源浪费。

public class LazySingleton {private static LazySingleton instance;private LazySingleton() {}// 非线程安全public static LazySingleton getInstance() {if (instance == null) {//这里会涉及指令重排序的问题instance = new LazySingleton();}return instance;}
}

在使用调用方法时,只有在第一次使用时才初始化实例,否则都是返回已经存在的实例


注意: 在多线程中,并发调用getInstance方法,由于同时存在两个线程修改一个变量操作,线程不安全

 发现出现new两次情况,所以解决这个问题,我们要进行加锁

class LazySingleton {private static LazySingleton instance;private LazySingleton() {}static Object A = new Object();// 非线程安全public static LazySingleton getInstance() {synchronized (A){if (instance == null) {//这里会涉及指令重排序的问题instance = new LazySingleton();}}return instance;}
}

 这里我们会发现,每次调用getInstance方法,都要进行加锁和解锁的步骤,这样的步骤开销很大

所以我们需要进行改进

    public static LazySingleton getInstance() {if(instance==null){synchronized (A){if (instance == null) {//这里会涉及指令重排序的问题instance = new LazySingleton();}}}return instance;}
  • 第一次的  if  语句判断是否需要加锁
  • 第二次的  if   语句判断是否为空

 写到这里我们的代码还存在一个很严重的问题,由于指令重排序引起的线程安全问题

                    instance = new LazySingleton();

 在创建一个实例的时候,主要有3步骤:正确的步骤顺序是1—>2—>3

1. 在内存中开辟一份空间2.使用构造方法去创建实例,3. 将空间的地址赋值给引用变量

但是JVM可能会将步骤的执行顺序发送改变1—>3—>2,从而引发线程安全问题


具体原因:t2线程没有进入因为锁阻塞这步,t2线程会在t1线程执行完地址赋值后,刚好执行第一次的 if 判断语句,发现引用变量不为空,会直接返回引用变量(但是引用变量的值是空的) 

其实解决也很简单使用volatile关键字

class LazySingleton {private static  volatile LazySingleton instance;private LazySingleton() {}static Object A = new Object();// 非线程安全public static LazySingleton getInstance() {if(instance==null){synchronized (A){if (instance == null) {//这里会涉及指令重排序的问题instance = new LazySingleton();}}}return instance;}
}

 二.阻塞队列

1. 阻塞队列的概念

阻塞队列可以看成是普通队列的一种扩展,遵循先进先出的原则,核心特性是当队列操作无法立即执行时,线程会被自动阻塞直到条件满足。

  • 如果队列是满的,进行入队列操作则会被阻塞,直到队列不满
  • 如果队列是空的,进行出队列操作则会被阻塞,直到队列不空

2. BlockingQueue接口

在 Java 标准库中内置了阻塞队列. 如果我们需要在一些程序中使用阻塞队列, 直接使用标准库中的

  • BlockingQueue接口属于java.util.concurrent包。它是线程安全的队列,支持阻塞操作。
  • 常见的实现类有:ArrayBlockingQueue,LinkedBlockingQueue,PriorityBlockingQueue
方法说明

put(E e)

队列未满时插入元素;若队列已满,则阻塞线程直到有空位。

take()

队列非空时取出元素;若队列为空,则阻塞线程直到有元素可用。

offer(E e)

队列未满时插入元素并返回 true;队列已满时直接返回 false(非阻塞)。

poll()

队列非空时取出元素并返回;队列为空时返回 null(非阻塞)。

offer(E e, long timeout, TimeUnit unit)

队列满时等待指定超时时间,超时后返回 false

poll(long timeout, TimeUnit unit)

队列空时等待指定超时时间,超时后返回 null

E peek()返回队列头部元素但不移除;队列空时返回 null

其中只有put( )和take( )方法带有阻塞的效果

3.生产者-消费者模型

生产者-消费者模型用于解决多线程环境下的线程同步问题,核心思想是通过 共享缓冲区(阻塞队列) 解耦生产者和消费者,使两者可以独立并发工作

生产者和消费者彼此之间不直接进行联系,而是通过缓冲区(阻塞队列)进行联系 

好处

(1)解耦合

  1. 解耦生产者和消费者的直接依赖,生产者和消费者可独立开发,提高开发效率,方便维护
  2.  生产者和消费者可并行执行,最大化利用 CPU、I/O 等资源
  3. 即使生产者挂了,也不会影响消费者的正常工作(反之同理)

解耦合在分布式系统中很常见,比如服务器的整个功能并不是由一个服务器全部完成,而是由多个服务器完成,每个服务器完成一部分功能,最后通过服务器之间的网络通信,实现整个功能 

(2)缓冲机制

  1. 生产者突发大量请求时,队列暂存数据,避免消费者过载崩溃。
  2. 消费者处理慢时,队列累积任务,避免生产者因等待而阻塞。
  3. 可以将缓冲区作为“蓄水池”,协调速度差异
public class Demo_3 {public static void main(String[] args) {BlockingDeque<Integer> deque = new LinkedBlockingDeque<>(100);Thread t1 = new Thread(()->{while(true){try {Thread.sleep(300);Random random = new Random();int num = random.nextInt(101);System.out.println("生产数:"+ num);deque.put(num);} catch (InterruptedException e) {e.printStackTrace();}}},"生产者");t1.start();Thread t2 = new Thread(()->{while(true){try {Thread.sleep(500);int num = deque.take();System.out.println("消费数:"+num);} catch (InterruptedException e) {e.printStackTrace();}}},"消费者");t2.start();}
}

 

4.模拟生产者-消费者模型

核心:阻塞队列的实现

将其看成一个循环队列,其中两个核心的方法:put()和take()

put():入队列操作,如果队列为满则进入阻塞状态,由take()进行唤醒

take():出队列操作,如果队列为空则进入阻塞状态,由put()方法进行唤醒

在判断是否需要进入阻塞状态的时候,使用while语句,进行多次判断,如果使用if语句相当于一锤定音,在阻塞的状态下,可能会被notifyAll()唤醒,但是这时候队列中的空间并不足够(虚假唤醒),也有可能会出现连续唤醒的情况,最好的方式是再进行一次判断

class MyBlockingQueue{Object A = new Object();int[] elems = null;int right ;int tail ;int usedSize;MyBlockingQueue(int capacity){elems = new int[capacity];}//注意锁的位置//放入操作public void put(int elem) throws InterruptedException {synchronized (A){//如果满,不能放出while (usedSize>=elems.length){A.wait();}//没有满,正常放入elems[tail++] = elem;if(tail>=elems.length){tail = 0;}usedSize++;A.notify();}}public int take() throws InterruptedException {synchronized (A){//如果为空,不能取出while (usedSize == 0){A.wait();}//不为空,正常取出int elem = elems[right++];//另一种写法right = right%elems.length;usedSize--;A.notify();return elem;}}}

 点赞的宝子今晚自动触发「躺赢锦鲤」buff!

相关文章:

【多线程】单例模式和阻塞队列

目录 一.单例模式 1. 饿汉模式 2. 懒汉模式 二.阻塞队列 1. 阻塞队列的概念 2. BlockingQueue接口 3.生产者-消费者模型 4.模拟生产者-消费者模型 一.单例模式 单例模式&#xff08;Singleton Pattern&#xff09;是一种常用的软件设计模式&#xff0c;其核心思想是确保…...

批量将 PDF 文档中的图片提取到指定文件夹

在 PDF 文档中&#xff0c;我们经常需要插入图片来丰富页面内容。然而&#xff0c;当我们需要提取 PDF 文件中的图片时&#xff0c;手动操作会显得非常繁琐。通常我们需要逐页打开 PDF&#xff0c;手动保存每一张图片&#xff0c;这不仅耗时&#xff0c;而且浪费精力。今天&…...

在bootstrap下实现万年历

因为开一个易经学习平台&#xff0c;开发了一个万年历&#xff0c;界面如下&#xff1a; 效果可以看&#xff1a;易学 相关代码&#xff1a; <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name&qu…...

基于python大数据的旅游可视化及推荐系统

博主介绍&#xff1a;java高级开发&#xff0c;从事互联网行业六年&#xff0c;熟悉各种主流语言&#xff0c;精通java、python、php、爬虫、web开发&#xff0c;已经做了六年的毕业设计程序开发&#xff0c;开发过上千套毕业设计程序&#xff0c;没有什么华丽的语言&#xff0…...

DeepSeek绘画工程与第三方通道整合架构解析

DeepSeek绘画工程与第三方通道整合架构解析 目录 系统架构设计技术实现细节核心功能模块创新点与优化策略运行效果展示总结与展望 一、系统架构设计 1.1 整体架构图&#xff08;Mermaid&#xff09; #mermaid-svg-EcuBlWPPCbUHg0gx {font-family:"trebuchet ms",v…...

单元测试的编写

Python 单元测试示例 在 Python 中&#xff0c;通常使用 unittest 模块来编写单元测试。以下是一个简单的示例&#xff1a; 示例代码&#xff1a;calculator.py # calculator.py def add(a, b):return a bdef subtract(a, b):return a - b 单元测试代码&#xff1a;test_c…...

附录C SLAC匹配过程命令定义与实际抓包

附录C SLAC匹配过程命令定义与实际抓包 ISO15118-3 附录A中规定了SLAC匹配过程中的请求命令及应答&#xff0c; 本文将会对比协议中的定义和实际抓包内容&#xff0c;以便读者获得直观的认识。 1 CM_SET_KEY.REQ 定义内容&#xff1a; 实际数据&#xff1a; 注意报文中的 08…...

数据结构 KMP 字符串匹配算法

KMP算法是计算机科学中的一种字符串匹配算法&#xff0c;KMP是三个创始人名字首字母 题目 AcWing - 算法基础课 前置知识点 KMP算法是一种高效的字符串匹配算法&#xff0c;算法名称取自于三位共同发明人名字的首字母组合。该算法的主要使用场景就是在字符串&#xff08;也叫…...

从零构建大语言模型全栈开发指南:第三部分:训练与优化技术-3.3.2参数高效微调:LoRA与适配器(Adapter)技术

👉 点击关注不迷路 👉 点击关注不迷路 👉 点击关注不迷路 文章大纲 从零构建大语言模型全栈开发指南 -第三部分:训练与优化技术-3.3.2 参数高效微调:LoRA与适配器(Adapter)技术1. 参数高效微调(PEFT)的背景与意义2. LoRA(低秩适配器)技术详解2.1 核心原理与数学表…...

YOLOv8-YOLO12目标检测模型的标签格式和数据结构详细说明

《------往期经典推荐------》 一、AI应用软件开发实战专栏【链接】 项目名称项目名称1.【人脸识别与管理系统开发】2.【车牌识别与自动收费管理系统开发】3.【手势识别系统开发】4.【人脸面部活体检测系统开发】5.【图片风格快速迁移软件开发】6.【人脸表表情识别系统】7.【…...

从零开始学习SQL

1.1 MySQL概述 1. 数据管理技术的发展过程 数据库技术是应数据管理任务的需要而产生的 a. 什么是数据管理 ** 对数据进行收集、分类、组织、编码、存储、检索和维护一系列活动的总和 **b. 数据管理技术的发展过程 人工管理阶段&#xff08;20世纪50年代中之前&#xff09;…...

北斗导航 | 基于因子图优化的GNSS/INS组合导航完好性监测算法研究,附matlab代码

以下是一篇基于因子图优化(FGO)的GNSS/INS组合导航完好性监测算法的论文框架及核心内容,包含数学模型、完整Matlab代码及仿真分析基于因子图优化的GNSS/INS组合导航完好性监测算法研究 摘要 针对传统卡尔曼滤波在组合导航完好性监测中对非线性与非高斯噪声敏感的问题,本文…...

深入剖析 JVM:从组成原理到调优实践

深入剖析 JVM&#xff1a;从组成原理到调优实践 深入剖析 JVM&#xff1a;从组成原理到调优实践一、JVM 组成架构&#xff1a;运行 Java 程序的 “幕后引擎”1.1 内存结构&#xff1a;数据存储的 “分区管理”1.2 执行引擎&#xff1a;字节码的 “翻译官”1.3 本地方法接口&…...

rust学习笔记21-闭包

在 Rust 中&#xff0c;闭包&#xff08;Closures&#xff09; 是一种可以捕获其环境中的变量的匿名函数。它们非常灵活&#xff0c;既可以作为普通函数使用&#xff0c;也可以捕获和操作定义它们的作用域中的变量。闭包是 Rust 中处理短小逻辑代码块的强大工具&#xff0c;特别…...

Redis常见面试问题汇总

Redis 面试笔记整理 一、Redis 基础知识1. Redis 概述Redis 是什么&#xff1f;主要特点有哪些&#xff1f;Redis 和 Memcached 的区别是什么&#xff1f;Redis 是单线程还是多线程&#xff1f;为什么单线程还能高效&#xff1f;Redis 6.0 之后的多线程模型是怎样的&#xff1f…...

网络安全中的“后门”:概念、类型、作用与攻防技术

目录 什么是后门&#xff1f; 后门的常见类型 2.1 按植入方式分类 2.2 按功能分类 后门在安全测试中的作用 后门的玩法与免杀技术 4.1 常见后门技术 4.2 如何实现免杀&#xff08;Bypass AV&#xff09; 如何检测和防御后门&#xff1f; 总结 1. 什么是后门&#xff…...

AIGC1——AIGC技术原理与模型演进:从GAN到多模态融合的突破

引言 近年来&#xff0c;人工智能生成内容&#xff08;AIGC&#xff09;技术迅速发展&#xff0c;从早期的简单文本生成到如今能够创作高质量图像、视频甚至3D内容&#xff0c;其核心驱动力在于生成模型的持续优化与多模态融合技术的突破。本文将探讨生成对抗网络&#xff08;…...

Python爬虫-爬取大麦网演出详情页面数据

前言 本文是该专栏的第50篇,后面会持续分享python爬虫干货知识,记得关注。 本文,笔者以大麦网平台为例。基于Python,实现获取演出详情页面的演出信息。 废话不多说,具体实现思路和详细逻辑,笔者将在正文结合完整代码进行详细介绍。接下来,跟着笔者直接往下看正文详细内…...

opencv图像处理之指纹验证

一、简介 在当今数字化时代&#xff0c;生物识别技术作为一种安全、便捷的身份验证方式&#xff0c;正广泛应用于各个领域。指纹识别作为生物识别技术中的佼佼者&#xff0c;因其独特性和稳定性&#xff0c;成为了众多应用场景的首选。今天&#xff0c;我们就来深入探讨如何利…...

玛卡巴卡的k8s知识点问答题(五)

17. Init 类型容器有什么特点&#xff0c;主要用途&#xff1f; 特点&#xff1a; 启动顺序&#xff1a;Init 容器在普通容器启动之前运行&#xff0c;必须先完成所有 Init 容器后&#xff0c;Pod 的主容器才会启动。 顺序执行&#xff1a;如果定义了多个 Init 容器&#xff…...

怎样提升大语言模型(LLM)回答准确率

怎样提升大语言模型(LLM)回答准确率 目录 怎样提升大语言模型(LLM)回答准确率激励与规范类知识关联类情感与语境类逆向思维类:为什么不,反面案例群体智慧类明确指令类示例引导类思维引导类约束限制类反馈交互类:对话激励与规范类 给予奖励暗示:在提示词中暗示模型如果回…...

CSP-J2022 山东 题解

[CSP-J2022 山东] 植树节 题目背景 受疫情影响&#xff0c;山东省取消了 CSP-J 2022 认证活动&#xff0c;并于次年三月重新命题&#xff0c;在省内补办比赛。 题目描述 植树节快要到了&#xff0c;学校要组织志愿者去给树苗浇水。 有一排树苗&#xff0c;编号依次是 0 ,…...

strcpy和strncpy和strcat和strncat和strstr和strtok函数使用及实现

目录 strcpy和strncpy函数的原理及实现 strcpy函数 my_strcpy优化代码 函数返回值的疑惑 strncpy函数 strncpy自定义 完整代码 字符串追加函数 strcat和strncat strcat函数 讲解和使用 过程解析 strcat代码 strcat无法给自己追加 strncat函数 讲解和使用 过程解…...

前端开发使用若依的优势

若依(RuoYi)前端框架是基于主流技术栈(如Vue.js或React)构建的企业级前端解决方案,其优势主要体现在以下几个方面: 1. 开箱即用的企业级功能 权限管理:集成动态路由、按钮级权限控制(RBAC模型),适配后台权限系统,无需重复开发。多标签页:支持类似浏览器的多标签页操…...

网络空间安全(44)Web实战篇

一、Web应用程序安全防护 输入验证 严格验证用户输入&#xff1a;对所有用户输入的数据进行合法性检查&#xff0c;防止恶意用户通过输入恶意数据攻击应用程序。验证应包括对表单数据、URL参数、Cookie等进行检查&#xff0c;确保输入的数据符合预期格式和范围。使用安全的编码…...

python列表常用方法大全

列表&#xff08;List&#xff09;是 Python 中最常用的数据结构之一&#xff0c;它是一个有序、可变的集合&#xff0c;可以存储任意类型的元素。以下是列表的定义及常见用法&#xff0c;包括拼接、增加数据、插入数据、删除数据、计算差值、相加、清空等操作&#xff0c;与字…...

Warm-Flow过去、现在和未来都不会有商业版

Warm-Flow过去、现在和未来都不会有商业版 Warm-Flow从24年2月加入Dromara开源社区&#xff0c;也正是由于加入他&#xff0c;Warm-Flow才等到更多人的关注和帮助。 同时吸引了不少贡献者&#xff0c;有的也成为了Warm-Flow的成员。 因此为了回馈大家&#xff0c;也是为了War…...

3. 实战(一):Spring AI Trae ,助力开发微信小程序

1、前言 前面介绍了Spring boot快速集成Spring AI实现简单的Chat聊天模式。今天立马来实战一番&#xff0c;通过Trae这个火爆全网的工具&#xff0c;来写一个微信小程序。照理说&#xff0c;我们只是极少量的编码应该就可以完成这项工作。开撸~ 2、需求描述 微信小程序实现一…...

3.23周赛补题

感觉还要多练&#xff0c;有的题思路不难&#xff0c;但是赛时就没思路。 A const int N110,M1e410; int dp[N][M]; void solve(){int n,m;cin>>n>>m;vector<int>a(n1);forr(i,1,n){cin>>a[i];}dp[0][0]1;//没钱 没菜 就是一种情况forr(i,1,n){refor…...

libpng-1.6.47-windows编译

本文操作按照《c&c开源库编译指南》中内容规范编写&#xff0c;编译环境配置、工具下载、目录规划&#xff0c;及更多其他开源库编译方法请参考该文章。 c&c开源库编译指南&#xff1a;https://blog.csdn.net/binary0006/article/details/144086155 本文章中的源代码已…...

RabbitMQ高级特性--重试特性

目录 1.重试配置 2.配置交换机&队列 3.发送消息 4.消费消息 5. 运行程序观察结果 6. 手动确认 注意&#xff1a; 在消息传递过程中, 可能会遇到各种问题, 如网络故障, 服务不可用, 资源不足等, 这些问题可能导致消息处理失败. 为了解决这些问题, RabbitMQ 提供了重试机制, …...

热门索尼S-Log3电影感氛围旅拍LUTS调色预设 Christian Mate Grab - Sony S-Log3 Cinematic LUTs

热门索尼S-Log3电影感氛围旅拍LUTS调色预设 Christian Mate Grab – Sony S-Log3 Cinematic LUTs 我们最好的 Film Look S-Log3 LUT 的集合&#xff0c;适用于索尼无反光镜相机。无论您是在户外、室内、风景还是旅行电影中拍摄&#xff0c;这些 LUT 都经过优化&#xff0c;可为…...

基础认证-单选题(一)

单选题 1、下列关于request方法和requestlnStream方法说法错误的是(C) A 都支持取消订阅响应事件 B 都支持订阅HTTP响应头事件 C 都支持HttpResponse返回值类型 D 都支持传入URL地址和相关配置项 2、如需修改Text组件文本的透明度可通过以下哪个属性方法进行修改 (C) A dec…...

C++ 变量类型

C 变量类型 在C编程语言中&#xff0c;变量是存储数据的基本单元。变量类型决定了变量的存储方式和所占内存大小。了解C中的变量类型对于编写高效、可维护的代码至关重要。本文将详细介绍C中的各种变量类型&#xff0c;包括基本类型、复合类型和用户定义类型。 基本类型 C提…...

智能粉尘监测解决方案|守护工业安全,杜绝爆炸隐患

在厂房轰鸣的生产线上&#xff0c;一粒微小粉尘的聚集可能成为一场灾难的导火索。如何实现粉尘浓度的精准监控与快速响应&#xff1f;我们为您打造了一套"感知-预警-处置"全闭环的智能安全方案&#xff01; 行业痛点&#xff1a;粉尘管理的生死线 在金属加工、化工…...

美观快速的react 的admin框架

系统特色&#xff1a; - &#x1f3a8; 精心设计的UI主题系统&#xff0c;提供优雅的配色方案和视觉体验 - &#x1f4e6; 丰富完整的组件库&#xff0c;包含大量开箱即用的高质量组件 - &#x1f528; 详尽的组件使用示例&#xff0c;降低开发者的学习成本 - &#x1f680…...

CentOS 7 挂载与卸载文件系统笔记

挂载文件系统 挂载的基本概念 挂载是将存储设备&#xff08;如硬盘分区、U 盘、光盘等&#xff09;连接到 Linux 文件系统的特定目录&#xff08;挂载点&#xff09;&#xff0c;使得系统能够访问存储设备上的数据。 查看已挂载的文件系统 命令&#xff1a;mount 或 df -h mo…...

UE5学习笔记 FPS游戏制作28 显式玩家子弹数

文章目录 添加变量修改ShootOnce方法&#xff0c;设计时减少子弹&#xff0c;没有子弹不能开枪在UI上显示 添加变量 在Gun类中添加BulletNum和ClipSize两个参数 BulletNum是当前还有多少子弹&#xff0c;ClipSize是一个弹匣多少子弹 Rifle的ClipSzie设置为30&#xff0c;Laun…...

VRRP交换机三层架构综合实验

题目要求&#xff1a; 1&#xff0c;内网Ip地址使用172.16.0.0/16分配 说明可以划分多个子网&#xff0c;图中有2个VLAN&#xff0c;可以根据VLAN划分 2&#xff0c;sw1和SW2之间互为备份 互为备份通常通过VRRP&#xff08;虚拟路由冗余协议&#xff09;来实现。VRRP会在两个…...

QSettings用法实战(相机配置文件的写入和读取)

很多情况&#xff0c;在做项目开发的时候&#xff0c;将参数独立出来是比较好的方法 例如&#xff1a;相机的曝光次数、曝光时长等参数&#xff0c;独立成ini文件&#xff0c;用户可以在外面修改即可生效&#xff0c;无需在动代码重新编译等工作 QSettings便可以实现该功能 内…...

洛谷题单1-P1001 A+B Problem-python-流程图重构

题目描述 输入两个整数 a,b&#xff0c;输出它们的和&#xff08;∣a∣,∣b∣≤109&#xff09;。 输入格式 两个以空格分开的整数。 输出格式 一个整数。 输入输出样例 输入 20 30输出 50方式-print class Solution:staticmethoddef oi_input():"""从…...

分布式系统

一、分布式系统概述 1.1 为什么需要分布式系统&#xff1f; 核心驱动力&#xff1a; ​性能需求&#xff1a;单机性能受物理限制&#xff08;CPU/内存/IO&#xff09;&#xff0c;分布式系统通过并行计算突破瓶颈​可扩展性&#xff1a;水平扩展&#xff08;增加节点&#x…...

前端开发学习路线完整指南

前端开发学习路线完整指南 前端开发是一个不断发展的领域&#xff0c;涉及多个技术栈。本文将为你提供一条系统的前端学习路线&#xff0c;帮助你从零基础到熟练掌握前端开发技能。 1. 前置知识 在学习前端之前&#xff0c;了解一些基础知识会对你的学习过程有很大帮助。 计…...

Sa-Token核心功能解剖二( Session会话、 持久层Redis扩展 、全局侦听器 、全局过滤器、多账号体系认证、单点登录)

文章目录 概要功能结构图5.Session会话6.持久层扩展7.全局侦听器8.全局过滤器9.多账号体系认证10.单点登录 概要 Sa-Token核心功能解剖&#xff08;二&#xff09;&#xff0c;主要有&#xff1a; Session会话 —— 全端共享Session,单端独享Session,自定义Session,方便的存取…...

C++搜索

功能扩展说明&#xff1a; 图类封装&#xff1a;将图数据结构封装为类&#xff0c;提高代码复用性 最短路径查找&#xff1a;基于BFS实现未加权图的最短路径查找 路径重构&#xff1a;通过parent数组回溯构建完整路径 异常处理&#xff1a;当路径不存在时返回空向量 复杂度分析…...

NC,GFS、ICON 数据气象信息可视化--降雨量的实现

随着气象数据的快速发展和应用&#xff0c;气象信息的可视化成为了一项不可或缺的技术手段。它不仅能帮助气象专家快速解读数据&#xff0c;还能为公众提供直观的天气预报信息。今天&#xff0c;我们将从降雨量的可视化出发&#xff0c;带大家一起了解如何实现气象数据的可视化…...

Android SystemUI深度定制实战:QSPanel下拉状态栏动态日期显示全解析

一、需求背景与实现思路 在Android系统定制化开发中&#xff0c;SystemUI的下拉状态栏&#xff08;Quick Settings Panel&#xff0c;QSPanel&#xff09;是用户高频交互的核心模块。近期某产品需求提出&#xff1a;在下拉展开状态栏时&#xff0c;需在QSPanel的顶部区域动态显…...

Linux 部署 rocketmq centos7

mq部署方案 1、rocketmq 顺序消费记录 一个master &#xff0c;一个 brocker &#xff0c;多个group &#xff0c;多个topic&#xff0c;采用集群消费模式。 注意 一个group 对应一个 topic。 生产者 和 消费者 可以有多个&#xff0c;但是 主题和分组 都是一对一的。这样保证…...

02_MySQL安装及配置

文章目录 一、下载二、安装及配置2.1、选择安装类型2.2、检查需要的依赖2.3、安装2.4、配置2.4.1、配置类型和网络2.4.2、配置账户和角色2.4.3、配置Windows服务2.4.4、让配置生效 2.5、验证是否安装成功 三、卸载3.1、运行MySQL安装工具3.2、卸载及清理3.3、卸载之后的检查工作…...

银行的压力测试如何进行?

为什么要进行压力风险测试&#xff1f; 压力风险测试的最终目的是测试银行在极度恶劣的市场环境中是否有足够的资本维持运转。 题主链接中的一级资本充足率(Tier 1 capital ratio) 亦即衡量标准&#xff0c;这个数字越大&#xff0c;表明银行资本约充裕&#xff0c;可以在停止…...