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

JUC入门(二)

5、8锁现象:就是关于锁的八个问题

谁来充当锁?要锁的是什么东西?这个锁有什么用?

其实锁的作用就是:哪个线程先拿到锁,谁就有先执行同步方法的权力

那么谁能充当锁?任何对象都可以充当锁

要锁的是什么东西?其实把被synchronized修饰的代码,当成一个厕所(共享资源)会更好理解,线程执行这段代码,也就相当于要进去厕所,你要使用厕所(执行代码的权力),就应该先获得一把锁!

深刻理解我们的锁的例子

package com.yw.lock8;import java.util.concurrent.TimeUnit;
//8锁,就是关于锁的八个问题
//问题1:标准情况下,哪个线程先打印?   打电话
//答:两个方法均是用synchronized修饰,锁的对象是方法的调用者,也就是phone这个对象,这个对象的锁只有一把
// ,而A对象先拿到这把锁,所以先执行打电话的操作//问题2:此时对打电话操作延迟四秒,哪个线程先打印? 依旧是打电话
//答:因为依旧是A先拿到了锁住了new出来的phone对象这把锁,所以Hello这个方法只能等待call执行完释放锁//问题4:此时多new一个Phone对象,分别执行打call和hello,谁先执行?hello
//答:因为执行的对象不同,所以两个锁并不是一把锁,自然不会出现争抢锁的问题,hello之前只会休眠一秒,而
//call会休眠四秒,所以hello先输出
public class Demo1 {public static void main(String[] args) {Phone phone1 = new Phone();Phone phone2 = new Phone();new Thread(phone1::call,"A").start();try {TimeUnit.SECONDS.sleep(1);} catch (InterruptedException e) {throw new RuntimeException(e);}new Thread(phone2::hello,"B").start();
//        new Thread(phone::hi,"C").start();}}class Phone{//synchronized锁的对象是方法的调用者//两个方法用的同一把锁,所以谁先拿到谁执行public synchronized void call(){try {TimeUnit.SECONDS.sleep(4);} catch (InterruptedException e) {throw new RuntimeException(e);}System.out.println("打电话");}public synchronized void hello(){System.out.println("Hello");}//问题3:增加了一个普通方法hi,我们添加一个线程来执行该方法,谁先执行? hi//答:hi方法没有被synchronized修饰,所以不需要锁,所以先执行,然后因为call方法先拿到锁,所以顺序为//hi->call->hello
//    public void hi(){
//        System.out.println("Hi~");
//    }
}
package com.yw.lock8;import java.util.concurrent.TimeUnit;
//问题5:在两个方法前均加入static,只有一个对象,现在会先输出什么?  打电话
//答:因为只有一个Phone对象,谁先拿到锁就执行谁//问题6:两个对象,分别执行两个静态方法,谁先输出? 依旧是打电话
//答:因为static锁的是Phone这个类,无论有几个对象,锁只有一个,所以因为call先拿到这把锁,依旧先输出打电话
public class Demo2{public static void main(String[] args) {Phone2 phone1 = new Phone2();Phone2 phone2 = new Phone2();new Thread(()->{phone1.call();},"A").start();try {TimeUnit.SECONDS.sleep(1);} catch (InterruptedException e) {throw new RuntimeException(e);}new Thread(()->{phone2.hello();},"B").start();}}class Phone2{
//static 表示这是个静态方法,表示类一加载就有了,所以它锁的是类,它锁的是class,这里的class(类)只有一个,那就是Phonepublic static synchronized void call(){try {TimeUnit.SECONDS.sleep(4);} catch (InterruptedException e) {throw new RuntimeException(e);}System.out.println("打电话");}public static synchronized void hello(){System.out.println("Hello");}}
package com.yw.lock8;import java.util.concurrent.TimeUnit;
//问题7:一个对象,将hello的static取消,此时先输出什么? hello
//答:因为一个锁的是类Phone,一个锁的是对象,并不是一把锁,所以不会发生争抢,call延迟4s,hello延迟
//1s,所以先输出hello//问题8:两个个对象,将hello的static取消,此时先输出什么? hello
//答:依旧不是一个锁
public class Demo3{public static void main(String[] args) {Phone3 phone1 = new Phone3();Phone3 phone2 = new Phone3();new Thread(()->{phone1.call();},"A").start();try {TimeUnit.SECONDS.sleep(1);} catch (InterruptedException e) {throw new RuntimeException(e);}new Thread(()->{phone2.hello();},"B").start();}}class Phone3{//static 表示这是个静态方法,表示类一加载就有了,所以它锁的是类,它锁的是class,这里的class(类)只有一个,那就是Phonepublic static synchronized void call(){try {TimeUnit.SECONDS.sleep(4);} catch (InterruptedException e) {throw new RuntimeException(e);}System.out.println("打电话");}public  synchronized void hello(){System.out.println("Hello");}}

6、集合类不安全

List

list不安全

比如当我们执行下面这段代码

package com.yw.unsale;import java.util.ArrayList;
import java.util.List;
import java.util.UUID;public class ListTest {public static void main(String[] args) {List<String> list = new ArrayList<>();for (int i = 1 ;i<=10000; i++){new Thread(()->{list.add(UUID.randomUUID().toString().substring(0,5));System.out.println(list);},String.valueOf(i)).start();}}
}

会抛出我们以后会熟悉的异常

java.util.ConcurrentModificationException 并发修改异常

这个异常在所有集合处理并发是都有可能出现,在list集合中应该如何解决?

  1. List<String> list = new Vector<>();

  2. List<String> list = Collections.synchronizedList(new ArrayList<>())

  3. List<String> list = new CopyOnWriteArrayList<>();

其中Vector是以前的老技术,其底层的add方法就是通过synchronized来修饰的

而现在的新技术CopyOnWriteArrayList是通过lock锁来实现的

这时我们要介绍

CopyOnWrite:写入时复制 简称cow

当多个线程或进程共享同一份数据时,只有在需要修改数据时,才真正创建数据的副本,并对副本进行修改

CopyOnWrite和Vector两者有什么区别?
1. 线程安全机制
  • Vector

    • 使用内置锁(synchronized)来保证线程安全。

    • 所有修改操作(如 addremoveset 等)和迭代操作都会加锁。

    • 优点是实现简单,缺点是锁的粒度较粗,容易导致性能瓶颈,尤其是在高并发场景下。

  • CopyOnWriteArrayList

    • 使用写入时复制(Copy-On-Write)机制来保证线程安全。

    • 修改操作(如 addset 等)会创建一个新的数组副本,并在副本上进行操作,而读操作直接在原始数组上进行。

    • 读操作不需要加锁,因此在读多写少的场景下性能更高。

2. 性能对比
  • 读操作

    • Vector:每次读操作都需要加锁,即使只是读取数据,也会因为锁的开销而降低性能。

    • CopyOnWriteArrayList:读操作完全不需要加锁,直接在原始数组上进行,性能非常高。

  • 写操作

    • Vector:写操作需要加锁,并且每次修改都会触发数组扩容(如果达到容量上限),这可能导致较大的性能开销。

    • CopyOnWriteArrayList:写操作需要创建数组副本,虽然第一次写入时会有较大的开销,但后续的读操作不会受到影响。如果写操作较少,这种开销是可以接受的。

3. 迭代安全性
  • Vector

    • 在迭代过程中,如果对集合进行修改(如添加或删除元素),会抛出 ConcurrentModificationException

    • 虽然 Vector 是线程安全的,但在并发环境下,迭代操作仍然需要额外的同步机制来避免异常。

  • CopyOnWriteArrayList

    • 在迭代过程中,即使其他线程对集合进行了修改,也不会影响当前迭代操作。

    • 因为迭代操作是在原始数组上进行的,而修改操作是在新的数组副本上进行的,所以不会抛出 ConcurrentModificationException

4. 内存占用
  • Vector

    • 内存占用相对较小,因为它只维护一个数组。

    • 但每次数组扩容时,会创建一个新的数组,并将旧数组的内容复制到新数组中,这可能会导致短暂的内存占用增加。

  • CopyOnWriteArrayList

    • 内存占用可能会更大,因为每次写操作都会创建一个新的数组副本。

    • 但在写操作较少的场景下,这种内存开销是可以接受的,并且可以避免频繁的锁竞争。

5. 使用场景
  • Vector

    • 适用于读写操作较为均衡,且对性能要求不高的场景。

    • 由于其锁机制较为简单,适合在单线程或多线程环境下使用,但并发性能较差。

  • CopyOnWriteArrayList

    • 适用于读多写少的场景,例如:

      • 日志记录:多个线程写入日志,但读取日志的操作较少。

      • 配置管理:配置信息被频繁读取,但修改操作较少。

      • 缓存数据:缓存数据被频繁读取,但更新操作较少。

总结

CopyOnWriteArrayList 在读多写少的场景下比 Vector 更具优势,主要体现在以下几点:

  1. 读操作性能高CopyOnWriteArrayList 的读操作不需要加锁,性能更高。

  2. 迭代安全性CopyOnWriteArrayList 在迭代过程中不会抛出 ConcurrentModificationException,更适合并发环境。

  3. 锁的粒度更细CopyOnWriteArrayList 的写操作不会影响读操作,减少了锁的竞争。

然而,CopyOnWriteArrayList 也有缺点,例如写操作时会创建数组副本,可能会导致较大的内存开销和首次写入的性能开销。因此,在选择时需要根据具体的使用场景来决定。

Set

set不安全

解决方法:

  1. Set<String> set= Collections.synchronizedSet(new HashSet<>())

  2. Set<String> set= new CopyOnWriteHashSet<>();

补充:HastSet的底层是什么? HashMap

那么HashMap的底层又是什么?

add set 的本质就是map key是无法重复的!

Map

map 不安全

解决方法:

  1. Map<String> map= Collections.synchronizedMap(new HashMap<>())

  2. Map<String> map= new CopyOnWriteHashMap<>();

相关文章:

JUC入门(二)

5、8锁现象&#xff1a;就是关于锁的八个问题 谁来充当锁&#xff1f;要锁的是什么东西&#xff1f;这个锁有什么用&#xff1f; 其实锁的作用就是&#xff1a;哪个线程先拿到锁&#xff0c;谁就有先执行同步方法的权力 那么谁能充当锁&#xff1f;任何对象都可以充当锁 要…...

深入浅出:CPU寻址方式完全指南(从理论到实践)

引言&#xff1a;为什么需要寻址方式&#xff1f; 当我们写下一行高级语言代码&#xff08;比如 int sum a b;&#xff09;&#xff0c;计算机底层是如何找到变量 a 和 b 的&#xff1f; 寻址方式&#xff08;Addressing Modes&#xff09; 就是 CPU 定位操作数的策略&#…...

PyQt5基本窗口控件(对话框类控件)

对话框类控件 QDialog 为了更好地实现人机交互&#xff0c;比如Windows及Linux等系统均会提供一系列的标 准对话框来完成特定场景下的功能&#xff0c;如选择字号大小、字体颜色等。在PyQt5中定 义了一系列的标准对话框类&#xff0c;让使用者能够方便和快捷地通过各个类完成…...

【PostgreSQL系列】PostgreSQL 复制参数详解

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…...

给easyui的textbox绑定回车事件

项目有一个textbox输入框&#xff0c;需要绑定一个回车搜索事件。 一开始想着&#xff0c;直接使用js的on或者jquery的keydown方法直接绑定&#xff0c;但是事件不生效。 $("#propName").textbox({width: 200,prompt: "请输入物品名称进行搜索" }).keydo…...

量子计算 | 量子密码学的挑战和机遇

量子计算在密码学中的应用现主要体现在对现有加密算法的威胁上。最著名的例子是Shor算法&#xff0c;该算法能够在多项式时间内分解大整数&#xff0c;从而威胁到基于大数分解的加密算法&#xff0c;如RSA加密。此外&#xff0c;量子计算还可以加速某些类型的密码分析&#xff…...

什么是着色器 Shader

本人就是图形学结课了&#xff0c;对 OpenGL着色器还有很多疑问嘿嘿 文章目录 为什么要有着色器vshaderfshader 本文围绕 vshader 和 fshader 代码示例讲解。 &#xff08;着色器代码取自本人简单OpenGL项目 https://github.com/DBWGLX/-OpenGL-3D-Lighting-and-Shadow-Modeli…...

STM32H562----------启动时钟分析

1、H562启动过程分析 1.1、启动模式 复位方式有三种:上电复位、硬件复位和软件复位。当产生复位后,离开复位状态后 CM33 内核做的第一件事就是 读取堆栈指针 MSP 的初始值及程序计数器指针 PC 的初始值: 1、从地址 0x0000 0000 处读取出堆栈指针 MSP 的初始值,该值即栈…...

MIT 6.S081 2020 Lab4 traps 个人全流程

零、写在前面 做之前可以看看Chapter 4&#xff1a;Traps and systems calls&#xff0c;了解XV6 下的陷入机制 https://pdos.csail.mit.edu/6.828/2020/xv6/book-riscv-rev1.pdf 这个实验旨在探索系统调用如何实现了trap&#xff0c;会先做一个有关栈的练习&#xff0c;然后…...

基于YOLOv8-OBB的旋转目标检测:从数据制作到自动标注完整指南

一、引言 目标检测作为计算机视觉中的核心任务&#xff0c;广泛应用于安防监控、自动驾驶、工业质检等场景。传统的目标检测方法多使用水平边界框&#xff08;HBB&#xff09;进行目标定位。然而在一些特殊应用场景&#xff08;如遥感图像、文本检测、PCB检测等&#xff09;中…...

【自然语言处理与大模型】向量数据库:Chroma使用指南

Chroma是一款功能强大的开源 AI 应用数据库&#xff0c;专为高效数据存储与检索而设计。它不仅支持 Embedding 和 Metadata 的存储&#xff0c;还集成了多项核心功能&#xff0c;包括向量搜索、全文搜索、Document 存储、Metadata 过滤以及多模态检索。此外&#xff0c;Chroma …...

一文掌握工业相机选型计算

目录 一、基本概念 1.1 物方和像方 1.2 工作距离和视场 1.3 放大倍率 1.4 相机芯片尺寸 二、公式计算 三、实例应用 一、基本概念 1.1 物方和像方 在光学领域&#xff0c;物方&#xff08;Object Space&#xff09;是与像方&#xff08;Image Space&#xff09;相对的…...

【周输入】510周阅读推荐-3

前文 【周输入】510周阅读推荐-1-CSDN博客 【周输入】510周阅读推荐-2-CSDN博客 本次推荐 目录 前文 本次推荐 算法技术 模型产品 算法技术 vLLM和DeepSpeed部署模型的优缺点_vllm deepspeed-CSDN博客 优点缺点总结vLLM 适用于推理 优化内存管理 高效并行化 功能单…...

机器学习(11)——xgboost

文章目录 1. 算法背景和动机1.1. 提升算法&#xff08;Boosting&#xff09;1.2. XGBoost的改进动机2. 算法基础 3. 核心创新3.4 稀疏感知算法 4. 系统优化4.1 列块(Column Block)4.2 缓存感知访问4.3 外存计算 5. 算法细节5.1 树生长策略5.2 特征重要性评估5.3 自定义目标函数…...

大语言模型上下文长度:发展历程、局限与技术突破

1. 引言&#xff1a;什么是上下文长度及其重要性 上下文长度&#xff08;Context Length&#xff09;&#xff0c;也称为上下文窗口&#xff08;Context Window&#xff09;&#xff0c;指的是大语言模型&#xff08;LLM&#xff09;在处理和生成文本时能够有效记忆和利用的信…...

ControlNet简洁

ControlNet 什么是ControlNet ControlNet是一种用于控制扩散模型生成结果的网络结构。该结构可以将边缘图&#xff0c;结构图等信息注入扩散模型&#xff0c;从而能够对生成结果进行更为精细的控制。 ControlNet是怎么实现的 在模型结构方面&#xff0c;其大致结构如下图所…...

【C】C程序内存分配

文章目录 1. C程序内存布局 1. C程序内存布局 从低地址到高地址依次为&#xff1a; 代码段 存储内容&#xff1a;存放编译后的机器指令特点&#xff1a;代码段是只读的&#xff1b;可共享&#xff0c;多个进程可共享同一份代码 数据段 存储内容 已初始化的全局变量已初始化的静…...

论文学习:《引入TEC - LncMir,通过对RNA序列的深度学习来预测lncRNA - miRNA的相互作用》

长链非编码RNA ( long noncoding RNAs&#xff0c;lncRNAs )是一类长度通常大于200个核糖核苷酸的非编码RNA &#xff0c;微小RNA ( microRNAs&#xff0c;miRNAs )是一类由22个核糖核苷酸组成的短链非编码RNA。近年来&#xff0c;越来越多的研究表明&#xff0c;lncRNA和miRNA…...

【每日一题丨2025年5.12~5.18】排序相关题

个人主页&#xff1a;Guiat 归属专栏&#xff1a;每日一题 文章目录 1. 【5.12】P1068 [NOIP 2009 普及组] 分数线划定2. 【5.13】P5143 攀爬者3. 【5.14】P12366 [蓝桥杯 2022 省 Python B] 数位排序4. 【5.15】P10901 [蓝桥杯 2024 省 C] 封闭图形个数5.【5.16】P12165 [蓝桥…...

AIDA64 extreme7.5 版本注册激活方法

一、AIDA 7.5 序列号 3BQN1-FUYD6-4GDT1-MDPUY-TLCT7 UVLNY-K3PDB-6IDJ6-CD8LY-NMVZM 4PIID-N3HDB-IWDJI-6DMWY-9EZVU 二、安装激活方法 激活步骤&#xff1a; 1、打开AIDA64软件&#xff0c;点击顶部菜单栏的“帮助”→“输入序列号” 2、将生成的序列号粘贴至输入框&a…...

Python 条件语句详解

条件语句是编程中用于控制程序流程的基本结构&#xff0c;Python 提供了几种条件语句来实现不同的逻辑判断。 1. if 语句 最基本的条件语句形式&#xff1a; if 条件:# 条件为真时执行的代码块示例&#xff1a; age 18 if age > 18:print("你已经成年了")2. …...

模型评估与调优(PyTorch)

文章目录 模型评估方法混淆矩阵混淆矩阵中的指标ROC曲线&#xff08;受试者工作特征&#xff09;AUCR平方残差均方误差&#xff08;MSE&#xff09;均方根误差&#xff08;RMSE&#xff09;平均绝对误差&#xff08;MAE&#xff09; 模型调优方法交叉验证&#xff08;CV&#x…...

oppo手机安装APK失败报错:安装包异常

如果你的apk文件在oppo手机安装失败了&#xff0c;像这样&#xff1a; 先说我们当时解决方式&#xff1a; 如果还没上架应用市场的测试包&#xff0c;在上面图一中需要关闭“超级守护”&#xff0c;类似华为的纯净模式。如果开启了还还不行&#xff0c;安装页面的报错太笼统不…...

互联网大厂Java面试场景:从缓存到容器化的技术问答

场景&#xff1a;互联网大厂Java面试之旅 面试官&#xff1a;严肃的技术专家 应聘者&#xff1a;搞笑的水货程序员明哥 第一轮&#xff1a;缓存技术与数据库优化 面试官&#xff1a;明哥&#xff0c;你能谈谈Redis的常见使用场景和一些优化技巧吗&#xff1f; 明哥&#xf…...

【android bluetooth 协议分析 01】【HCI 层介绍 6】【WriteLeHostSupport命令介绍】

HCI 指令 HCI_Write_LE_Host_Support 是 Bluetooth Host 向 Controller 发送的一条指令&#xff0c;用于启用或禁用主机对 Bluetooth Low Energy&#xff08;LE&#xff09;的支持能力。该指令属于 HCI&#xff08;Host Controller Interface&#xff09;命令集合中&#xff0c…...

Helm配置之为特定Deployment配置特定Docker仓库(覆盖全局配置)

文章目录 Helm配置之为特定Deployment配置特定Docker仓库(覆盖全局配置)需求方法1:使用Helm覆盖值方法2: 在Lens中临时修改Deployment配置步骤 1: 创建 Docker Registry Secret步骤 2: 在 Deployment 中引用 Secret参考资料Helm配置之为特定Deployment配置特定Docker仓库(覆…...

项目:在线音乐播放服务器——基于SSM框架和mybatis

介绍项目 项目主要是基于SSM框架和mybatis进行实现 主要的功能&#xff1a; 登陆界面&#xff0c;用户注册&#xff0c;音乐的播放列表&#xff0c;删除指定的歌曲&#xff0c;批量删除指定的歌曲&#xff0c;收藏歌曲&#xff0c;查询歌曲&#xff0c;从收藏列表中删除收藏…...

Linux配置vimplus

配置vimplus CentOS的配置方案很简单&#xff0c;但是Ubuntu的解决方案网上也很多但是有效的很少&#xff0c;尤其是22和24的解决方案&#xff0c;在此我整理了一下我遇到的问题解决方法 CentOS7 一键配置VimForCPP 基本上不会有什么特别难解决的报错 sudo yum install vims…...

Ubuntu22.04开机运行程序

新建启动文件 sudo vim /etc/systemd/system/trojan.service 2. 写入配置文件 [Unit] DescriptionTrojan Proxy Service Afternetwork.target[Service] Typesimple ExecStart/home/cui/Downloads/trojan/trojan -c /home/cui/Downloads/trojan/config.json Restarton-failur…...

高效查询:位图、B+树

1. 位图&#xff08;BitMap&#xff09;与布隆过滤器&#xff08;Bloom Filter&#xff09; 1.1. 问题背景与解决方案 问题背景 场景&#xff1a;网页爬虫判重 搜索引擎的爬虫会不断地解析网页中的链接并继续爬取。一个网页可能在多个页面中出现&#xff0c;容易重复爬取。…...

HashMap的扩容机制

在添加元素或初始化的时候需要调用resize方法进行扩容&#xff0c;第一次添加数据初始化数组长度为16&#xff0c;以后每次每次扩容都是达到了扩容阈值&#xff08;数组长度 * 0.75&#xff09; 每次扩容的时候&#xff0c;都是扩容之前容量的2倍&#xff1b; 扩容之后&#…...

从坏道扫描到错误修复:HD Tune实战指南

一、硬盘检测的必要性 随着计算机使用时间的增加&#xff0c;机械硬盘和固态硬盘都会出现不同程度的性能衰减。定期进行硬盘健康检查可以&#xff1a;及时发现潜在故障&#xff1b;预防数据丢失风险&#xff1b;掌握存储设备实际状态。 二、HD Tune功能解析 性能测试&#x…...

Leetcode 3553. Minimum Weighted Subgraph With the Required Paths II

Leetcode 3553. Minimum Weighted Subgraph With the Required Paths II 1. 解题思路2. 代码实现 题目链接&#xff1a;3553. Minimum Weighted Subgraph With the Required Paths II 1. 解题思路 这一题很惭愧&#xff0c;并没有自力搞定&#xff0c;是看了大佬们的解答才有…...

算法加训之最短路 上(dijkstra算法)

目录 P4779 【模板】单源最短路径&#xff08;标准版&#xff09;&#xff08;洛谷&#xff09; 思路 743. 网络延迟时间&#xff08;力扣&#xff09; 思路 1514.概率最大路径&#xff08;力扣&#xff09; 思路 1631.最小体力消耗路径 思路 1976. 到达目的地的方案数 …...

01 Nginx安装及基本配置

01 Nginx安装 # 官网&#xff1a;https://nginx.org/en/ # 点击下载图1 Nginx下载官网 # https://nginx.org/en/download.html # 全是各个平台的源码包图2 Nginx下载版本 # 找到最下面的stable and mainline(稳定版和主线版)图3 找到最下面的稳定版 # https://nginx.org/en/li…...

ABP vNext 多租户系统实现登录页自定义 Logo 的最佳实践

&#x1f680; ABP vNext 多租户系统实现登录页自定义 Logo 的最佳实践 &#x1f9ed; 版本信息与运行环境 ABP Framework&#xff1a;v8.1.5.NET SDK&#xff1a;8.0数据库&#xff1a;PostgreSQL&#xff08;支持 SQLServer、MySQL 等&#xff09;BLOB 存储&#xff1a;本地…...

​Docker 网络

目录 ​前言 ​1. Docker 网络模式​ ​2. 默认 bridge 网络详解​ ​​&#xff08;1&#xff09;特点​ ​​&#xff08;2&#xff09;操作示例​ ​3. host 网络模式​ ​​&#xff08;1&#xff09;特点​ ​​&#xff08;2&#xff09;操作示例​ ​4. overlay…...

btc交易所关键需求区 XBIT反弹与上涨潜力分析​​

在加密货币市场的浪潮中&#xff0c;狗狗币&#xff08;DOGE&#xff09;近期的走势吸引了众多投资者的目光。根据XBIT分析&#xff0c;狗狗币刚刚踏入关键需求区&#xff0c;此前虽从高点大幅下跌了10%&#xff0c;但XBIT去中心化交易所平台分析师认为&#xff0c;短期内它有望…...

深度剖析:YOLOv8融入UNetv2 SDI模块的性能提升之旅

文章目录 一、引言二、SDI多层次特征融合模块概述&#xff08;一&#xff09;背景和动机&#xff08;二&#xff09;模块设计原理 三、SDI模块实现&#xff08;一&#xff09;关键代码结构&#xff08;二&#xff09;代码解析 四、将SDI模块融入YOLOv8&#xff08;一&#xff0…...

图像定制大一统?字节提出DreamO,支持人物生成、 ID保持、虚拟试穿、风格迁移等多项任务,有效解决多泛化性冲突。

字节提出了一个统一的图像定制框架DreamO&#xff0c;支持人物生成、 ID保持、虚拟试穿、风格迁移等多项任务&#xff0c;不仅在广泛的图像定制场景中取得了高质量的结果&#xff0c;而且在适应多条件场景方面也表现出很强的灵活性。现在已经可以支持消费级 GPU&#xff08;16G…...

spark数据处理练习题详解【下】

12. (单选题) def main(args: Array[String]): Unit { println(func1("张三",f1)) } def func1(name:String,fp:(________________)): String { fp(name) } def f1(s:String): String { "welcome "s } 选择填空&#xff08;&#xff09; A.String>S…...

Vue基础(11)_条件渲染

原生css想让显示的元素隐藏&#xff0c;方式有以下几点&#xff1a; display: none; opacity: 0; visibility: hidden; 那么vue中是怎样实现元素显示/隐藏的呢&#xff1f; 条件渲染 v-show 写法&#xff1a;v-show"表达式" 判断&#xff1a;表达式转换为布尔值(tr…...

湖北理元理律师事务所:债务优化服务的四维创新实践

在债务问题普遍影响家庭经济稳定的当下&#xff0c;专业法律服务机构的价值不仅在于提供解决方案&#xff0c;更需构建可持续的服务生态。湖北理元理律师事务所通过“法律心理技术教育”四维服务体系&#xff0c;探索出一条兼顾债务化解与生活质量保障的创新路径。 服务模式创…...

ubuntu工控机固定设备usb串口号

ubuntu工控机固定设备usb串口号 1、多个USB设备的ID相同 ubuntu系统中的串口使用权限并没有对所有的用户进行开放&#xff0c;所以在使用代码对串口进行操作时&#xff0c;需要打开用户对串口的使用权限&#xff0c;否则在代码中会出现“串口无法打开的报错”&#xff0c;只有…...

MongoDB的安装及简单使用

MongoDB 是一个开源的文档型 NoSQL 数据库​​&#xff0c;由 MongoDB Inc. 开发&#xff0c;专为灵活性和可扩展性设计。 特点&#xff1a; ​​1.文档模型​​&#xff1a;数据以 BSON&#xff08;二进制 JSON&#xff09;格式存储&#xff0c;支持嵌套结构。 ​​2.动态 S…...

卷积神经网络进阶:转置卷积与棋盘效应详解

【内容摘要】 本文深入解析卷积神经网络中的转置卷积&#xff08;反卷积&#xff09;技术&#xff0c;重点阐述标准卷积与转置卷积的计算过程、转置卷积的上采样作用&#xff0c;以及其常见问题——棋盘效应的产生原因与解决方法&#xff0c;为图像分割、超分辨率等任务提供理论…...

Linux进程信号(三)之信号产生2

文章目录 4. 由软件条件产生信号5. 硬件异常产生信号模拟一下除0错误和野指针异常除0错误野指针错误 总结思考一下 4. 由软件条件产生信号 SIGPIPE是一种由软件条件产生的信号,在“管道”中已经介绍过了。 软件条件不就绪&#xff0c;很明显这个软件条件没有直接报错&#xff…...

【AWS入门】Amazon SageMaker简介

【AWS入门】Amazon SageMaker简介 [AWS Essentials] Brief Introduction to Amazon SageMaker By JacksonML 机器学习(Machine Learning&#xff0c;简称ML) 是当代流行的计算机科学分支技术。通常&#xff0c;人们在本地部署搭建环境&#xff0c;以满足机器学习的要求。 AWS…...

MySQL--day2--基本的select语句

&#xff08;以下内容全部来自上述课程&#xff09; SQL概述 结构化查询语句 1. SQL分类 DDL&#xff1a;数据定义&#xff08;definition&#xff09;语言&#xff1a;create、drop、alter… DML&#xff1a;数据操作&#xff08;manipulation&#xff09;语言&#xff…...

程序代码篇---python获取http界面上按钮或者数据输入

文章目录 前言 前言 本文简单接受了python获取http界面上按钮或者数据输入...