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

【Java回顾】Day5 并发基础|并发关键字|JUC全局观|JUC原子类

JUC全称java.util.concurrent 处理并发的工具包(线程管理、同步、协调)

一.并发基础

多线程要解决什么问题?本质是什么?

  • CPU、内存、I/O的速度是有极大差异的,为了合理利用CPU的高性能,平衡三者的速度差异,解决办法如下:
    • 计算机体系结构CPU增加了缓存,以均衡与内存的速度差异。//导致可见性问题
    • 操作系统增加了进行、线程,以分时复用CPU,进而均衡CPU与I/O设备的速度差异;//导致原子性问题。
    • 编译程序优化指令执行次序,使得缓存能够得到更加合理地利用。//导致有序性问题

(1)CPU增加缓存导致的可见性问题

  • 原因:CPU的计算速度远远大于内存的访问速度。因此,CPU引入了缓存(L1,L2,L3),线程运行时,数据通常会先加载到CPU缓存中,计算结束后再同步到贮存。
  • 可见性:不同线程可能运行在不同的CPU核心上,各自有独立的缓存。这导致线程在某些时刻无法及时感知其他线程对共享变量的修改。
  • 例子:修改主存的值,但是其他线程可能还在读取缓存的数值。

(2)操作系统增加进程、线程导致的原子性问题

  • 原因
    • 为了充分利用CPU资源,操作系统通过进程和线程来分时复用CPU,但在多线程环境下,线程切换可能打断对共享变量的修改,使得某些操作无法完整执行,破坏了操作的原子性。
  • 问题
    • 某些操作需要多个步骤完成,而线程切换可能在中间插入,导致共享数据处于不一致的状态。线程切换破坏了连续操作的完整性,现代CPU支持指令级并行和多核架构,线程切换可能使对共享资源的访问被中断。

(3) 编译指令优化导致的有序性问题

  • 原因:为了提升程序运行效率,编译器和CPU可能对指令执行顺序进行优化(指令重排序)。但这些优化可能导致程序在多线程环境下的执行顺序与代码的书写顺序不一致。
  • 问题:在多线程中,指令重排序可能导致线程看到的执行顺序与预期不符,从而破坏程序逻辑。

Java怎么解决并发问题的?

  • Java内存模型(java Memory Model)是个很复杂的规范,具体看Java内存模型详解

理解的第一个维度:核心知识点

  • JMM(Java Memory model)本质上可以理解为,规范了JVM如何提供按需禁用缓存和编译优化的方法。
  • 方法包括
    • volatile、synchronized和final三个关键字
    • Happens-Before规则

理解的第二个维度:原子性,有序性,可见性

原子性

  • 在Java中,对基本数据类型的变量的读取和赋值(数字赋值,变量之间的相互赋值不属于)属于原子性操作,这些操作不可被中断。要么执行,要么不执行。
  • 如果想实现更大范围操作的原子性,通过synchronized和Lock实现。因为这能够保证任一时刻只有一个线程执行该代码块,那么自然不存在原子性问题了。

可见性

  • volatile关键字
  • 当一个共享变量被volatile修饰时,会保证修改的值立即被更新到主存,当有其他线程需要读取时,会去内存中读取新值。
  • 通过synchronized和Lock实现,能保证同一时刻只有一个线程获取锁然后执行同步代码,并且在释放锁之前会对变量的修改刷新到主存当中,因此可以保证可见性。

有序性

  • volatile关键字
  • synchronized和Lock也可以,保证每个时刻只有一个线程执行同步代码,相当于是让线程顺序执行同步代码。JMM是通过Happens-Before规则来保证有序性的。

二、并发关键字 volatile和synchronized

1.volatile

  • 保证了不同线程对共享变量进行操作时的可见性,即一个线程修改了某个变量的值,这个新值对其他线程来说是立即可见的。
  • 禁止进行指令重排序
  • volatile不保证原子性

参考:https://note.youdao.com/ynoteshare/index.html?id=0a2692da5a11099e198dcfe179c3c655&type=note&_time=1736243887397

可见性问题详解

请添加图片描述

请添加图片描述

  • 过程
    • 每个线程从主内存中将变量拷贝到本地内存作为副本并操作变量副本
    • 写回主内存,会通过CPU总线嗅探机制告知其他线程该变量副本已经失效,需要重新从主内存中读取。
    • 总之,当一个线程修改了volatile修饰的变量,当修改后的变量写回内存时,其他线程能立即看到最新值。

2.synchronized

参考:https://note.youdao.com/ynoteshare/index.html?id=a9d1d098bc64bef9c3e458f0000d37d4&type=note&_time=1736245618633

  • 注意:volatile只能保证可见性和有序性,synchronized能保证可见性、有序性和原子性。

实现什么样类型的锁?

  • 悲观锁:每次访问共享资源时都会上锁
  • 非公平锁:线程获取锁的顺序并不一定是按照线程堵塞的顺序
  • 可重入锁:已经获取锁的线程可以再次获取锁
  • 独占锁或排他锁:该锁只能被一个线程所持有,其他线程均被堵塞。
  • 请添加图片描述

关键字的使用方式

  • 修饰普通同步方法
  • 修饰静态同步方法
  • 修饰同步方法块

3.CAS(Compare-And-Swap)

  • 无锁的并发操作,比较和交换,在高并发场景下进行线程安全的变量更新,避免了传统加锁操作中的堵塞问题。
  • 工作原理
    • CAS 操作需要三个值:
      • 内存值 V :当前变量的实际值。
      • 预期值 A :当前线程认为变量的期望值。
      • 新值 B :希望更新为的值。
    • 操作流程如下:
      • 如果 V == A,则将 V 更新为 B
      • 如果 V != A,说明变量已经被其他线程修改,当前线程放弃更新。
  • 存在三大问题
    • ABA问题
    • 不适用于竞争激烈的情形下
    • 只能保证一个共享变量的原子操作
  • 请添加图片描述

三、JUC全局观

请添加图片描述

  • Lock框架和Tools类
  • Collection 并发集合
  • Atomic 原子类
  • Executors 线程池

1.JUC原子类

  • java并发包(java.util.concurrent.atomic)提供的一组基于CAS(Compare-And-Swap)操作的线程安全类。对基本数据类型或对象的变量进行原子操作,而无需加锁,提供了一种高效的方式来实现线程安全。
  • 主要利用CAS(compare and swap)+volatile和native方法来保证原子操作,从而避免synchronized的高开销,执行效率大为提升。

分类

  • 基本类型原子类
    • AtomicInteger:对 int 类型变量进行原子操作。
    • AtomicLong:对 long 类型变量进行原子操作。
    • AtomicBoolean:对 boolean 类型变量进行原子操作。
  • 引用类型原子类
    • AtomicReference<T>:对引用对象进行原子操作。
    • AtomicStampedReference<T>:解决 CAS 的 ABA 问题,结合版本号进行原子操作。
    • AtomicMarkableReference<T>:通过布尔标记和引用值一起操作,解决特定场景的并发问题。
  • 数组原子类
    • AtomicIntegerArray:对 int 数组的元素进行原子操作。
    • AtomicLongArray:对 long 数组的元素进行原子操作。
    • AtomicReferenceArray<T>:对引用类型数组的元素进行原子操作。
  • 字段更新原子类(反射实现)
    • AtomicIntegerFieldUpdater:对类中 int 类型字段进行原子更新。
    • AtomicLongFieldUpdater:对类中 long 类型字段进行原子更新。
    • AtomicReferenceFieldUpdater:对类中引用类型字段进行原子更新。
  • 累加器
    • LongAdderDoubleAdder:对高并发场景下的累加操作进行优化。

相关文章:

【Java回顾】Day5 并发基础|并发关键字|JUC全局观|JUC原子类

JUC全称java.util.concurrent 处理并发的工具包(线程管理、同步、协调) 一.并发基础 多线程要解决什么问题&#xff1f;本质是什么&#xff1f; CPU、内存、I/O的速度是有极大差异的&#xff0c;为了合理利用CPU的高性能&#xff0c;平衡三者的速度差异&#xff0c;解决办法…...

VSCODE使用Echarts组件库(不是vue)

第一步打开Echarts官网 Examples - Apache ECharts 第二步随便点击一个图形点击我圈的按钮 第三步...

DNS解析域名简记

域名通常是由: 权威域名.顶级域名.根域名组成的。 从左往右&#xff0c;级别依次升高&#xff0c;这和外国人从小范围到大范围的说话习惯相关。&#xff08;我们自己是更习惯先说大范围再说小范围&#xff0c;如XX省XX市XX区XX路&#xff09; DNS解析域名时&#xff0c;会先查…...

选择器css

1.a标签选择 // 选中所具有herf 的元素 [herf] {color: skyblue; } // 选中所具有herfhttps://fanyi.youdao.com/ 的元素 [herf$"youdao.com"] {color:pink; } // 按此顺序书写 link visited hover active // 未访问状态 a:link {color:orange } // 访问状态 a…...

9.4 visualStudio 2022 配置 cuda 和 torch (c++)

一、配置torch 1.Libtorch下载 该内容看了【Libtorch 一】libtorchwin10环境配置_vsixtorch-CSDN博客的博客&#xff0c;作为笔记用。我自己搭建后可以正常运行。 下载地址为windows系统下各种LibTorch下载地址_libtorch 百度云-CSDN博客 下载解压后的目录为&#xff1a; 2.vs…...

ASP.NET Core 实现微服务 -- Polly 服务降级熔断

在我们实施微服务之后&#xff0c;服务间的调用变的异常频繁。多个服务之间可能是互相依赖的关系。某个服务出现故障或者是服务间的网络出现故障都会造成服务调用的失败&#xff0c;进而影响到某个业务服务处理失败。某一个服务调用失败轻则造成当前相关业务无法处理&#xff1…...

2_CSS3 背景 --[CSS3 进阶之路]

CSS3 中的背景属性提供了许多强大的功能来增强网页设计&#xff0c;包括但不限于多背景图像、渐变、背景大小控制等。以下是一些关键的 CSS3 背景属性及其用法示例。 1. 多重背景图像 CSS3 允许你为一个元素设置多个背景图像。这些图像按照它们在 background-image 属性中定义…...

于交错的路径间:分支结构与逻辑判断的思维协奏

大家好啊&#xff0c;我是小象٩(๑ω๑)۶ 我的博客&#xff1a;Xiao Xiangζั͡ޓއއ 很高兴见到大家&#xff0c;希望能够和大家一起交流学习&#xff0c;共同进步。* 这一节内容很多&#xff0c;文章字数达到了史无前例的一万一&#xff0c;我们要来学习分支与循环结构中…...

升级 CentOS 7.x 系统内核到 4.4 版本

问题描述 在 CentOS 7.x 系统中&#xff0c;默认内核版本是 3.10.x&#xff0c;这个版本可能会带来一些与 Docker 和 Kubernetes 兼容性的问题&#xff0c;导致系统性能不稳定或功能异常。为了提高系统的稳定性和兼容性&#xff0c;建议升级到更高版本的内核&#xff0c;例如 …...

MySQL数据导出导入

一、数据导出 1.导出全库备份到本地的目录 mysqldump -u$USER -p$PASSWD -h127.0.0.1 -P3306 --routines--default-character-setutf8 --lock-all-tables --add-drop-database -A >db.all.sql 2.导出指定库到本地的目录(例如mysql库) mysqldump -u$USER -p$PASSWD -h127.…...

【机器学习:八、逻辑回归】

逻辑回归&#xff08;Logistic Regression&#xff09; 1. 逻辑回归的引出 在现实世界中&#xff0c;许多问题都涉及到分类任务。例如&#xff1a; 判断一封邮件是否为垃圾邮件&#xff1b;预测某人是否会患某种疾病&#xff1b;确定图片中是否包含某种特定物体。 这些问题…...

uniapp使用sm4加密

安装&#xff1a;npm install sm-crypto --save 1、在utils下新建crypto.js文件 // sm4 加密 export function encryption(params) {const SM4 require("sm-crypto").sm4const key 0123456789abcdeffedcba9876543212; // 提供的密钥const iv fedcba9876543210012…...

【STM32-学习笔记-1-】GPIO

文章目录 GPIOⅠ、GPIO函数Ⅱ、GPIO_InitTypeDef结构体参数①、GPIO_Mode②、GPIO_Pin③、GPIO_Speed GPIO Ⅰ、GPIO函数 // 将指定的GPIO端口寄存器重置为默认值 void GPIO_DeInit(GPIO_TypeDef* GPIOx);// 将GPIO的备用功能寄存器重置为默认值 void GPIO_AFIODeInit(void);…...

C#中的运算符和类--06

目录 一.运算符 1.赋值运算符 2.算数运算符 3.关系运算符 4.逻辑运算符 5.位运算符 6.三元运算符 7.空合并运算符 8.其他运算符 二.类 1.普通类 2.静态类 3.抽象类 4.密封类 5.部分类 6.泛型类 7.嵌套类 8.记录类 9.接口 一.运算符 1.赋值运算符 定义:赋值…...

【微服务】面试 2、服务雪崩

服务雪崩概念 主要内容&#xff1a;在微服务项目中&#xff0c;微服务间存在远程调用。若某一服务&#xff08;如服务 d&#xff09;出现故障&#xff0c;调用它的服务&#xff08;如服务 a&#xff09;会失败。若调用方持续向故障服务发起请求&#xff0c;由于服务连接数有限且…...

“深入浅出”系列之QT:(6)如何在一个项目中调用另一个项目

在Qt中&#xff0c;如果想在一个项目中调用另一个项目&#xff0c;这通常意味着想要在一个CMake构建的项目中集成或依赖另一个CMake构建的项目。 1‌.子模块或子目录方式‌&#xff1a; 如果另一个项目可以作为一个子模块或子目录包含在当前项目中&#xff0c;可以使用add_sub…...

计算机网络—地址与子网(IPv4)相关知识总结

前言 为了更加清楚的了解该相关知识&#xff0c;下面是发现的一些宝藏博主的博客。 彻底搞懂网络地址、广播地址、主机地址、网关、子网掩码、网络号、主机号 - lipga - 博客园 IP地址&#xff08;分类&#xff09;、子网掩码、网络号、主机号、子网号_网络号,主机号,子网号…...

计算机网络 (36)TCP可靠传输的实现

前言 TCP&#xff08;传输控制协议&#xff09;是一种面向连接的、可靠的、基于字节流的传输层通信协议。TCP通过多种机制实现可靠传输&#xff0c;这些机制主要包括连接管理、序列号和确认应答机制、重传机制、流量控制、拥塞控制等。 一、连接管理 TCP使用三次握手&#xff0…...

SQL从入门到实战-2

高级语句 窗口函数 排序窗口函数 例题二十九 select yr,party,votes, rank() over (PARTITION BY yr ORDER BY votes desc) as pson from ge where constituency S14000021 order by party,yr 偏移分析函数 例题三十 select name,date_format(whn,%Y-%m-%d) data, confi…...

基于python的网页表格数据下载--转excel

基于 Python 的网页表格数据爬取与下载:以维基百科为例 目录 基于 Python 的网页表格数据爬取与下载:以维基百科为例1. 背景介绍2. 工具与环境3. 操作步骤1. 获取网页内容2. 定位表格元素3. 表格变身 Pandas DataFrame4. 检查数据,收工!5. 进阶玩法与优化6. 完整代码4. 结果…...

用户界面的UML建模13

&#x100084; Concrete Presentation Model 包中所包含的是&#xff0c;在Environment 包中与表示层框架模式中的《apm》类相对应的那些类。 8 结论 本文使用了一个图书馆系统的案例&#xff0c;来论述了关于用户界面的建模。通过使用统一建模语言来对应用系统进行建模&…...

[Python学习日记-75] 计算机基础与网络

[Python学习日记-75] 计算机基础与网络 简介 计算机基础 什么是网络编程 计算机网络 简介 本篇主要介绍的计算机基础是浓缩的&#xff0c;这是因为我们主要学习的是 Python&#xff0c;而 Python 主要是为了开发应用程序的&#xff0c;并不会用它来开发操作系统和嵌入式程序…...

【机器学习:六、特征工程】

1. 特征工程背景意义 在机器学习中&#xff0c;特征工程是模型成功的关键之一。无论算法多么先进&#xff0c;其性能都很大程度上依赖于输入数据的质量。特征工程是指对原始数据进行处理&#xff0c;以创建更适合算法的特征的过程。这一过程在以下方面具有重要意义&#xff1a…...

webpack打包要义

webpack基本 Webpack 是一个现代 JavaScript 应用程序的静态模块打包工具。它的工作原理可以概括为以下几个核心步骤&#xff1a; 1. 入口起点&#xff08;Entry&#xff09; Webpack 从配置文件中指定的入口文件&#xff08;Entry Point&#xff09;开始&#xff0c;分析应用…...

Mybatis——Mybatis开发经验总结

摘要 本文主要介绍了MyBatis框架的设计与通用性&#xff0c;阐述了其作为Java持久化框架的亮点&#xff0c;包括精良的架构设计、丰富的扩展点以及易用性和可靠性。同时&#xff0c;对比了常见持久层框架&#xff0c;分析了MyBatis在关系型数据库交互中的优势。此外&#xff0…...

013:深度学习之神经网络

本文为合集收录&#xff0c;欢迎查看合集/专栏链接进行全部合集的系统学习。 合集完整版请参考这里。 深度学习是机器学习中重要的一个学科分支&#xff0c;它的特点就在于需要构建多层且“深度”的神经网络。 人们在探索人工智能初期&#xff0c;就曾设想构建一个用数学方式…...

Java 模板变量替换——字符串替换器(思路Mybatis的GenericTokenParser)

Java 模板变量替换——字符串替换器&#xff08;思路Mybatis的GenericTokenParser&#xff09; 思路字符串替换器 思路 模板变量替换无非是寻找出字符串&#xff08;模板&#xff09;中的特殊标记&#xff0c;用对应的变量进行字符串替换。 提到变量替换&#xff0c;大家第一能…...

蓝桥杯备考:数据结构之栈 和 stack

目录 栈的概念以及栈的实现 STL 的stack 栈和stack的算法题 栈的模板题 栈的算法题之有效的括号 验证栈序列 后缀表达式 括号匹配 栈的概念以及栈的实现 栈是一种只允许在一端进行插入和删除的线性表 空栈&#xff1a;没有任何元素 入栈&#xff1a;插入元素消息 出…...

Lambda离线实时分治架构深度解析与实战

一、引言 在大数据技术日新月异的今天&#xff0c;Lambda架构作为一种经典的数据处理模型&#xff0c;在应对大规模数据应用方面展现出了强大的能力。它整合了离线批处理和实时流处理&#xff0c;为需要同时处理批量和实时数据的应用场景提供了成熟的解决方案。本文将对Lambda…...

Vue.js组件开发,AI时代的前端新玩法

AI可不只是写写小说、聊聊天&#xff0c;现在它的触角已经伸到了程序员的代码世界里。特别是前端开发&#xff0c;很多人都在尝试用ChatGPT或者类似的AI工具来写代码&#xff0c;甚至直接生成Vue.js组件。有些人感叹&#xff0c;"写代码的时代是不是要结束了&#xff1f;&…...

标定 3

标定场景与对应的方式 标定板标定主要应用场景: (1)无法获取到执行机构物理坐标值,比如相机固定,执行机构为传送带等 (2)相机存在畸变等非线性标定情况,需要进行畸变校正 (3)标定单像素精度 (4)获取两个相机之间的坐标系关系 标定板操作步骤: (1)确定好拍…...

电商项目-基于ElasticSearch实现商品搜索功能(三)

本系列文章主要介绍基于 Spring Data Elasticsearch 实现商品搜索的后端代码&#xff0c;介绍代码逻辑和代码实现。 主要实现功能&#xff1a;根据搜索关键字查询、条件筛选、规格过滤、价格区间搜索、搜索查询分页、搜索查询排序、高亮查询。 主要应用技术:canal&#xff0c;…...

【51单片机】03 蜂鸣器-播放音乐

蜂鸣器-播放音乐 一、原理介绍1.硬件电路 二、练习1.让蜂鸣器发声2.尝试演奏小星星 一、原理介绍 蜂鸣器分为有源蜂鸣器、无源蜂鸣器两种。 有源蜂鸣器&#xff1a;施加合适的电压之后就会发出特定频率的声音 无源蜂鸣器&#xff1a;需要提供特定频率的声音信号&#xff0c;才能…...

MySQL 架构

MySQL架构 MySQL8.0服务器是由连接池、服务管理⼯具和公共组件、NoSQL接⼝、SQL接⼝、解析器、优化 器、缓存、存储引擎、⽂件系统组成。MySQL还为各种编程语⾔提供了⼀套⽤于外部程序访问服务器的连接器。整体架构图如下所⽰&#xff1a; MySQL Connectors&#xff1a;为使⽤…...

XML 解析器:深入解析与高效应用

XML 解析器&#xff1a;深入解析与高效应用 引言 XML&#xff08;可扩展标记语言&#xff09;作为一种重要的数据交换格式&#xff0c;被广泛应用于各种系统和平台中。为了有效地处理和解析XML数据&#xff0c;XML解析器发挥着至关重要的作用。本文将深入探讨XML解析器的原理…...

LabVIEW设计 IIR 滤波器

这是一个设计 IIR 滤波器的 LabVIEW 程序框图&#xff0c;其功能主要是用于设计滤波器并计算其频率响应&#xff0c;但它并不直接对输入的波形进行实时滤波&#xff0c;而是提供一个滤波器的频率响应分析工具。 以下是框图中各部分的详细解释&#xff1a; 1. 主要模块功能说明 …...

基于改进粒子群优化的无人机最优能耗路径规划

目录 1. Introduction2. Preliminaries2.1. Particle Swarm Optimization Algorithm2.2. Deep Deterministic Policy Gradient2.3. Calculation of the Total Output Power of the Quadcopter Battery 3.OptimalEnergyConsumptionPathPlanningBasedonPSO-DDPG3.1.ProblemModell…...

AI刷题-数列推进计算任务、数组中的幸运数问题

目录 一、数列推进计算任务 问题描述 测试样例 解题思路&#xff1a; 问题理解 数据结构选择 算法步骤 优化思路 最终代码&#xff1a; 运行结果&#xff1a; 二、数组中的幸运数问题 问题描述 测试样例 解题思路&#xff1a; 问题理解 数据结构选择 算法步…...

微服务的配置共享

1.什么是微服务的配置共享 微服务架构中&#xff0c;配置共享是一个重要环节&#xff0c;它有助于提升服务间的协同效率和数据一致性。以下是对微服务配置共享的详细阐述&#xff1a; 1.1.配置共享的概念 配置共享是指在微服务架构中&#xff0c;将某些通用或全局的配置信息…...

【计算机网络】窥探计网全貌:说说计算机网络体系结构?

标签难度考察频率综合题⭐⭐⭐60% 这个问题在计算机网络知识体系中是一个比较重要的问题&#xff0c;只有完整地了解计算机网络的体系结构才能清晰地认识网络的运行原理。 在回答这个问题时&#xff0c;笔者认为有几个比较重要的点&#xff1a; 首先一定要分清楚前置条件&am…...

【MySQL】DATEDIFF()函数使用

DATEDIFF 函数用于计算两个日期之间的差值&#xff0c;以天为单位 DATEDIFF 函数返回一个整数&#xff0c;表示 date1 和 date2 之间的天数。如果 date1 在 date2 之前&#xff0c;结果为负数&#xff1b;如果在 date2 之后&#xff0c;结果为正数&#xff1b;如果相等&#xf…...

计算机网络学习笔记

第1课 绪论、传输介质 【知识点回顾】 两种导线可以减小电磁干扰&#xff1a; 双绞线&#xff08;分为非屏蔽双绞线、屏蔽双绞线&#xff09;&#xff08;RJ-45用&#xff09;同轴电缆&#xff08;短距离使用&#xff09;网络通信的基本单位&#xff1a;位&#xff08;bit&…...

Spring Boot性能提升的核武器,速度提升500%!

虚拟线程是 Java 21 引入的一个新特性&#xff0c;用于简化并发编程。它与传统的操作系统线程相比&#xff0c;具有显著的优势&#xff1a; 轻量级&#xff1a;虚拟线程由 JVM 管理&#xff0c;而非操作系统&#xff0c;因此它们的内存占用和创建成本远低于传统线程。理论上&am…...

zig 安装,Hello World 示例

1. 安装 Zig 首先&#xff0c;你需要在你的计算机上安装 Zig 编译器。你可以从 Zig 官方网站 下载适合你操作系统的版本。 安装完成后&#xff0c;你可以在终端中运行以下命令来检查 Zig 是否安装成功&#xff1a; zig version如果一切正常&#xff0c;它会显示 Zig 的版本信…...

【数据库系统概论】第5章 数据库完整性【!触发器】

目录 5.1数据库完整性概述 5.2 实体完整性 5.3 参照完整性 5.4 用户定义的完整性 属性上的约束 1. 列值非空&#xff08;NOT NULL&#xff09; 2. 列值唯一&#xff08;UNIQUE&#xff09; 3. 检查列值是否满足条件&#xff08;CHECK&#xff09; 元组上的约束 5.5 完…...

Linux中通过frp实现内网穿透

1、准备工作 准备一台公网服务器&#xff08;云服务器&#xff09;&#xff0c;推荐阿里云或者腾讯云都可以 需要下载好frp安装包Linux端的和Windows端的安装包 网址&#xff1a;Releases fatedier/frp (github.com)https://github.com/fatedier/frp/releases 2、下载frp_0…...

Vscode辅助编码AI神器continue插件

案例效果 1、安装或者更新vscode 有些版本的vscode不支持continue,最好更新到最新版,也可以直接官网下载 https://code.visualstudio.com/Download 2、安装continue插件 搜索continue,还未安装的,右下脚有个Install,点击安装即可 <...

上海亚商投顾:沪指探底回升微涨 机器人概念股午后爆发

上海亚商投顾前言&#xff1a;无惧大盘涨跌&#xff0c;解密龙虎榜资金&#xff0c;跟踪一线游资和机构资金动向&#xff0c;识别短期热点和强势个股。 一.市场情绪 市场全天探底回升&#xff0c;沪指盘中跌超1.6%&#xff0c;创业板指一度跌逾3%&#xff0c;午后集体拉升翻红…...

LeetCode 3297.统计重新排列后包含另一个字符串的子字符串数目 I:滑动窗口

【LetMeFly】3297.统计重新排列后包含另一个字符串的子字符串数目 I&#xff1a;滑动窗口 力扣题目链接&#xff1a;https://leetcode.cn/problems/count-substrings-that-can-be-rearranged-to-contain-a-string-i/ 给你两个字符串 word1 和 word2 。 如果一个字符串 x 重新…...

ssm旅游攻略网站设计+jsp

系统包含&#xff1a;源码论文 所用技术&#xff1a;SpringBootVueSSMMybatisMysql 需要源码或者定制看文章最下面或看我的主页 目 录 目 录 III 1 绪论 1 1.1 研究背景 1 1.2 目的和意义 1 1.3 论文结构安排 2 2 相关技术 3 2.1 SSM框架介绍 3 2.2 B/S结构介绍 3 …...