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

设计模式 行为型 状态模式(State Pattern)与 常见技术框架应用 解析

在这里插入图片描述

状态模式(State Pattern)是一种行为型设计模式,它允许对象在内部状态改变时改变其行为,使得对象看起来好像修改了它的类。这种设计模式的核心思想是将对象的状态和行为封装成不同的状态类,通过状态对象的行为改变来避免大量的条件判断语句,从而提升代码的可扩展性和可维护性。

一、核心思想

状态模式的核心思想是将状态相关的行为抽取到独立的状态类中,使得增加新状态变得简单,且不影响其他状态。每个状态类都封装了对象在该状态下的行为,上下文类(Context)则维护一个状态对象,并在状态发生变化时改变其行为。

二、定义与结构

定义

状态模式(State Pattern)是行为设计模式的一种,它允许一个对象在其内部状态改变时改变它的行为。

结构

状态模式通常涉及以下几个关键组件:

  • State(状态):定义一个接口或抽象类,用于封装与上下文相关的行为。
  • ConcreteState(具体状态):实现状态接口或继承抽象状态类,具体定义每个状态下的行为。
  • Context(上下文):维护一个状态对象,并在状态发生变化时改变其行为。

三、角色

  • 环境角色(Context):也称为上下文,它定义了客户程序与状态对象交互的接口,并且保存了一个具体状态对象的引用。
  • 抽象状态(State):这是一个接口或抽象类,定义了所有具体状态所共有的一些行为。
  • 具体状态(Concrete States):这些是实现了抽象状态接口的具体类,每个类代表了一个状态,并且在该状态下定义了一些行为。

四、实现步骤及代码示例

以Java为例,状态模式的实现步骤通常包括:

  1. 定义状态接口:定义一个接口,用于封装与上下文相关的行为。
  2. 创建具体状态类:实现状态接口,具体定义每个状态下的行为。
  3. 定义上下文类:维护一个状态对象,并提供方法来切换状态和处理请求。

以下是一个简单的Java代码示例,用于展示状态模式的实现:

// 状态接口
interface State {void handle();
}// 具体状态类:待支付状态
class PendingState implements State {@Overridepublic void handle() {System.out.println("订单状态:待支付。请完成支付!");}
}// 具体状态类:已支付状态
class PaidState implements State {@Overridepublic void handle() {System.out.println("订单状态:已支付。订单处理中。");}
}// 具体状态类:已完成状态
class CompletedState implements State {@Overridepublic void handle() {System.out.println("订单状态:已完成。");}
}// 上下文类
class OrderContext {private State state;public OrderContext() {this.state = new PendingState(); // 初始状态为待支付}public void setState(State state) {this.state = state;}public void handleOrder() {state.handle();}
}// 客户端代码
public class Client {public static void main(String[] args) {OrderContext orderContext = new OrderContext();orderContext.handleOrder(); // 输出:订单状态:待支付。请完成支付!orderContext.setState(new PaidState());orderContext.handleOrder(); // 输出:订单状态:已支付。订单处理中。orderContext.setState(new CompletedState());orderContext.handleOrder(); // 输出:订单状态:已完成。}
}

五、常见技术框架应用

1、前端框架中状态模式的应用

状态模式(State Pattern)是一种行为型设计模式,它允许对象在内部状态发生改变时改变其行为。在前端框架中,状态模式的应用十分广泛,特别是在管理复杂的用户交互逻辑和页面状态时。以下是一些前端框架中应用状态模式的举例:

购物车状态管理

在电商网站的购物车页面中,商品的状态(如已添加、已删除、数量变化等)会影响购物车的整体行为和显示。使用状态模式,可以清晰地管理这些状态变化。

  • 状态定义:定义购物车状态的抽象类,如CartState,并为其定义添加商品、删除商品等抽象方法。
  • 具体状态类:创建具体的状态类,如EmptyCartState(空购物车状态)和NonEmptyCartState(非空购物车状态),在这些类中实现具体的行为。
  • 购物车类:在购物车类中,维护一个当前状态的引用,并根据状态的变化调用相应的方法。

例如,在购物车为空时,用户只能添加商品;在购物车非空时,用户可以查看商品列表、删除商品等。通过状态模式,可以轻松地管理这些状态变化,使代码更加清晰和可维护。

表单验证状态管理

在用户提交表单之前,需要对表单中的输入进行验证。使用状态模式,可以根据不同的验证状态(如有效、无效、必填项未填写等)来改变表单的行为。

  • 状态定义:定义表单验证状态的抽象类,如FormValidationState,并为其定义验证方法。
  • 具体状态类:创建具体的状态类,如ValidState(有效状态)、InvalidState(无效状态)和RequiredFieldMissingState(必填项未填写状态),在这些类中实现具体的验证逻辑。
  • 表单类:在表单类中,维护一个当前验证状态的引用,并根据状态的变化调用相应的方法来处理验证结果。

游戏状态管理

在游戏中,对象的状态可能会随着游戏的进程而发生变化,如角色的生命值、能量值、游戏阶段等。使用状态模式,可以轻松地管理这些状态变化。

  • 状态定义:定义游戏状态的抽象类,如GameState,并为其定义更新、渲染等方法。
  • 具体状态类:创建具体的状态类,如IdleState(空闲状态)、PlayingState(游戏进行状态)、GameOverState(游戏结束状态),在这些类中实现具体的游戏逻辑。
  • 游戏管理类:在游戏管理类中,维护一个当前游戏状态的引用,并根据状态的变化调用相应的方法来处理游戏逻辑。

UI组件状态管理

在前端开发中,一些UI组件(如按钮、输入框、下拉菜单等)的状态可能会随着用户的交互而发生变化。使用状态模式,可以清晰地管理这些状态变化。

  • 状态定义:定义UI组件状态的抽象类,如ComponentState,并为其定义更新、渲染等方法。
  • 具体状态类:创建具体的状态类,如HoverState(悬停状态)、ActiveState(激活状态)、DisabledState(禁用状态),在这些类中实现具体的UI逻辑。
  • 组件类:在组件类中,维护一个当前状态的引用,并根据状态的变化调用相应的方法来处理UI逻辑。

前端路由状态管理

在单页面应用(SPA)中,前端路由的状态管理是一个重要的问题。使用状态模式,可以清晰地管理路由的状态变化。

  • 状态定义:定义路由状态的抽象类,如RouteState,并为其定义导航、回退等方法。
  • 具体状态类:创建具体的状态类,如HomeState(首页状态)、DetailState(详情页状态)等,在这些类中实现具体的导航逻辑。
  • 路由管理类:在路由管理类中,维护一个当前路由状态的引用,并根据状态的变化调用相应的方法来处理导航逻辑。

综上所述,状态模式在前端框架中的应用十分广泛,可以用于管理复杂的用户交互逻辑、页面状态、游戏状态以及UI组件状态等。通过状态模式,可以使代码更加清晰、可维护和可扩展。

2、 Android 中的 View 状态

  • 在Android开发中,View(如Button)有多种状态,比如“正常状态”、“按下状态”、“不可用状态”等。这些状态的行为和外观是不同的。
// 定义抽象状态接口(简化版)
interface ViewState {void onDraw(Canvas canvas);boolean onTouchEvent(MotionEvent event);
}
// 正常状态类
class NormalState implements ViewState {@Overridepublic void onDraw(Canvas canvas) {// 绘制正常状态下的视图外观}@Overridepublic boolean onTouchEvent(MotionEvent event) {if (event.getAction() == MotionEvent.ACTION_DOWN) {// 切换到按下状态view.setState(view.getPressedState());return true;}return false;}
}
// 按下状态类
class PressedState implements ViewState {@Overridepublic void onDraw(Canvas canvas) {// 绘制按下状态下的视图外观}@Overridepublic boolean onTouchEvent(MotionEvent event) {if (event.getAction() == MotionEvent.ACTION_UP) {// 切换到正常状态或者执行点击操作等view.setState(view.getNormalState());return true;}return false;}
}
// 自定义View(环境类)
class CustomView extends View {private ViewState state;private ViewState normalState;private ViewState pressedState;public CustomView(Context context) {super(context);normalState = new NormalState();pressedState = new PressedState();state = normalState;}@Overrideprotected void onDraw(Canvas canvas) {state.onDraw(canvas);}@Overridepublic boolean onTouchEvent(MotionEvent event) {return state.onTouchEvent(event);}public void setState(ViewState state) {this.state = state;invalidate();}public ViewState getState() {return state;}public ViewState getNormalState() {return normalState;}public ViewState getPressedState() {return pressedState;}
}

六、应用场景

状态模式适用于以下场景:

  1. 必须在对象运行时改变对象的行为。
  2. 传统编程需要考虑所有可能发生的情况,使用条件选择语句if-else判断并选择执行。当新增状态时,需要新增if-else语句,程序扩展繁琐。针对条件表达式过于复杂,可以采用状态模式,分离判断逻辑变为一系列的状态类,使判断逻辑变得更加简单。

七、优缺点

优点

  1. 封装性强:每个状态都被封装成一个类,使得状态逻辑更加清晰,便于维护和扩展。
  2. 避免条件语句:通过状态模式可以避免使用大量的条件语句来控制对象的行为,使代码更加简洁和可读。
  3. 增强可扩展性:可以轻松地添加新的状态类,而不需要修改已有的代码,从而增强了系统的可扩展性。

缺点

  1. 状态类过多可能导致复杂性增加:如果系统中存在大量的状态类,可能会导致状态类之间的关系变得复杂,增加系统的理解和维护成本。
  2. 状态切换可能不够灵活:在某些情况下,状态切换可能受到限制,无法满足特定的业务需求。

综上所述,状态模式是一种非常有用的设计模式,可以有效地管理对象的状态和行为,并实现状态之间的转换逻辑。在实际应用中,应根据具体业务需求来设计状态类和上下文类,以确保模式的正确应用和系统的稳定性。

在这里插入图片描述

相关文章:

设计模式 行为型 状态模式(State Pattern)与 常见技术框架应用 解析

状态模式(State Pattern)是一种行为型设计模式,它允许对象在内部状态改变时改变其行为,使得对象看起来好像修改了它的类。这种设计模式的核心思想是将对象的状态和行为封装成不同的状态类,通过状态对象的行为改变来避免…...

Android 系统签名 keytool-importkeypair

要在 Android 项目中使用系统签名并将 APK 打包时与项目一起打包,可以按照以下步骤操作: 步骤 1:准备系统签名文件 从 Android 系统源码中获取系统签名文件,通常位于 build/target/product/security 目录下,包括 pla…...

ubuntu22.04 gcc,g++从10.5切换到低版本9.5

一、安装gcc-9.5 mkdir gcc cd gcc sudo apt-get download $(apt-cache depends --recurse --no-recommends --no-suggests --no-conflicts --no-breaks --no-replaces --no-enhances --no-pre-depends gcc-9 | grep -v i386 | grep "^\w") sudo dpkg -i *.deb sudo…...

Microsoft 已经弃用了 <experimental/filesystem> 头文件

#define _CRT_SECURE_NO_WARNINGS 1 #define _SILENCE_EXPERIMENTAL_FILESYSTEM_DEPRECATION_WARNING 1 //Microsoft 已经弃用了 <experimental / filesystem> 头文件&#xff0c;并计划在将来移除它。取而代之的是 C17 标准引入的 //<filesystem> 头文件&#xf…...

git 提交命令记录

1.已有本地和远程仓库 查看仓库远程地址: git remote -v 大量提交 git add . git commit -m "提交说明" git push 之后输入用户名密码 删除文件 git rm 文件名 替代git add 后面一样 2.全新提交 新建远程仓库 git init touch README.md git add . …...

Unity + Firebase + GoogleSignIn 导入问题

我目前使用 Unity版本&#xff1a;2021.3.33f1 JDK版本为&#xff1a;1.8 Gradle 版本为&#xff1a;6.1.1 Firebase 版本: 9.6.0 Google Sign In 版本为&#xff1a; 1.0.1 问题1 &#xff1a;手机点击登录报错 apk转化成zip&#xff0c;解压&#xff0c;看到/lib/armeabi-v…...

深度学习的加速器:Horovod,让分布式训练更简单高效!

什么是 Horovod&#xff1f; Horovod 是 Uber 开发的一个专注于深度学习分布式训练的开源框架&#xff0c;旨在简化和加速多 GPU、多节点环境下的训练过程。它以轻量级、易用、高性能著称&#xff0c;特别适合需要快速部署分布式训练的场景。Horovod 的名字来源于俄罗斯传统舞…...

AI刷题-异或编码、拼凑单词 chi

目录 一、异或编码 问题描述 测试样例 解题思路&#xff1a; 问题理解 解题思路 数据结构选择 算法步骤 最终代码&#xff1a; 运行结果&#xff1a; 二、拼凑单词 chi 问题描述 测试样例 解题思路&#xff1a; 问题理解 数据结构选择 算法步骤 最终代码&a…...

xml简介

目录 基本语法特点及应用场景一个简单示例 xml&#xff08;全称eXtensible Markup Language&#xff09;是一种用于存储和传输数据的标记语言&#xff0c;跨平台并且跨语言&#xff0c;xml内容较多&#xff0c;这篇文章会介绍一些基础的内容。 基本语法 xml文档通常以xml声明开…...

MYSQL------MySQL 复制MySQL Cluster 架构

MySQL 复制 安装配置 主服务器配置 首先&#xff0c;在主服务器的配置文件&#xff08;my.cnf 或 my.ini&#xff09;中添加以下基本配置&#xff1a; [mysqld] server-id 1 log-bin /var/log/mysql/mysql-bin.logserver-id&#xff1a;为服务器分配唯一的标识&#xff0…...

【人工智能】 用Python构建图像分类模型:从TensorFlow到PyTorch的全面指南

随着深度学习在计算机视觉领域的迅猛发展&#xff0c;图像分类作为其核心任务之一&#xff0c;受到了广泛的关注。本文旨在详细介绍如何使用Python构建图像分类模型&#xff0c;从TensorFlow到PyTorch两个主流深度学习框架进行全面对比与实践。文章首先回顾了图像分类的基本概念…...

计算机网络 笔记 数据链路层 2

1,信道划分&#xff1a; (1)时分复用TDM 将时间等分为“TDM帧”&#xff0c;每个TDM帧内部等分为m个时隙&#xff0c;m个用户对应m个时隙 缺点&#xff1a;每个节点只分到了总带宽的1/m,如果有部分的1节点不发出数据&#xff0c;那么就会在这个时间信道被闲置&#xff0c;利用…...

2024年度漏洞态势分析报告,需要访问自取即可!(PDF版本)

2024年度漏洞态势分析报告&#xff0c;需要访问自取即可!(PDF版本),大家有什么好的也可以发一下看看...

Apache Hop从入门到精通 第一课 揭开Apache Hop神秘面纱

一、Apache Hop是什么&#xff1f; 1、Apache Hop&#xff0c;简称Hop&#xff0c;全称为Hop Orchestration Platform&#xff0c;即Hop 工作编排平台&#xff0c;是一个数据编排和数据工程平台&#xff0c;旨在促进数据和元数据编排的所有方面。Hop让你专注于你想要解决的问题…...

Unity 人体切片三维可视化,可任意裁切切割。查看不同断层的图像。

Unity 人体切片三维可视化&#xff0c;真彩色&#xff0c;可任意裁切切割。查看不同断层的图像。 点击查看效果: 视频效果...

ModuleNotFoundError: No module named ‘podm.metrics‘报错等解决方法

ModuleNotFoundError: No module named podm.metrics’报错等解决方法 podm.metrics 在运行时报错&#xff1a; ModuleNotFoundError: No module named ‘podm.metrics’ 安装了podm后还是报错 解决方法&#xff1a; 查看安装位置 查看podm的安装位置&#xff0c;并打开到该…...

Java虚拟机运行时数据区域(内存模型)

程序计数器&#xff08;线程私有内存&#xff09; What&#xff1a;程序计数器是一块较小的内存空间&#xff0c;可以看作是当前线程所执行的字节码的行号指示器。 程序控制流的指示器&#xff0c; 分支&#xff0c;循环&#xff0c;跳转&#xff0c;异常处理&#xff0c;线程…...

trf 4.10安装与使用-生信工具42

01 背景 DNA 中的串联重复&#xff08;Tandem Repeat&#xff09;指的是两个或多个相邻且近似的核苷酸模式的拷贝。Tandem Repeats Finder (TRF) 是一个程序&#xff0c;用于定位并显示 DNA 序列中的串联重复。用户只需提交一个以 FASTA 格式编写的序列&#xff0c;无需指定重…...

rom定制系列------小米max3安卓12 miui14批量线刷 默认开启usb功能选项 插电自启等

小米Max3是小米公司于2018年7月19日发布的机型。此机型后在没有max新型号。采用全金属一体机身设计&#xff0c;配备6.9英寸全面屏.八核处理器骁龙636&#xff0c;后置双摄像头1200万500万像素&#xff0c;前置800万像素.机型代码 &#xff1a;nitrogen.官方最终版为稳定版12.5…...

PySide6-UI界面设计

导论&#xff1a; PySide6和PyQt都是Python对Qt框架的绑定&#xff0c;允许开发者使用Qt创建平台的GUI应用程序。如果你正在开发商业项目&#xff0c;或者需要使用最新的QT6特性&#xff0c;PySide6是一个更好的选择。如果你更倾向于一个成熟的社区和丰富的资源&#xff0c;Py…...

Java创建线程的方式有哪些?

创建线程的方式 1. 继承 Thread 类 在 Java 中&#xff0c;当你启动一个线程时&#xff0c;实际上是调用了 Thread 类的 start() 方法。这个方法会执行以下几个步骤&#xff1a; 线程的状态转变&#xff1a;调用 start() 方法后&#xff0c;线程的状态从 NEW 转变为 RUNNABL…...

Ubuntu | PostgreSQL | 解决 ERROR: `xmllint` is missing on your system.

解决 sudo apt install apt-file sudo apt-file updatesudo apt-file search xmllint sudo apt install libxml2-utils执行 # postgres源码安装包解压文件夹中 make install make install问题 make -C src install make[2]: Entering directory /home/postgres/postgresql-1…...

Jenkins pipeline 发送邮件及包含附件

Jenkins pipeline 发送邮件及包含附件 设置邮箱开启SMTP服务 此处适用163 邮箱 开启POP3/SMTP服务通过短信获取TOKEN &#xff08;保存TOKEN, 后面Jenkins会用到&#xff09; Jenkins 邮箱设置 安装 Build Timestamp插件 设置全局凭证 Dashboard -> Manage Jenkins …...

基于深度学习的视觉检测小项目(十) 通过样式表改变界面的外观

一、创建色卡模板文件 在PS中打开之前创建的色卡文件&#xff0c;用吸管拾色器吸取各个色卡的色彩值&#xff1a; 并保存为JSON文件&#xff0c;color_card.json&#xff0c;文件保存在项目的/settings目录下&#xff1a; {"colors": {"RED": "#dc1…...

【Java基础】Stream流、文件File相关操作,IO的含义与运用

1. Java 流(Stream)、文件(File)和IO Java.io 包几乎包含了所有操作输入、输出需要的类。所有这些流类代表了输入源和输出目标。Java.io 包中的流支持很多种格式&#xff0c;比如&#xff1a;基本类型、对象、本地化字符集等等。 一个流可以理解为一个数据的序列。 输入流表…...

Java-日志-Slf4j-Log4j-logback

文章目录 SLF4J基础概念使用输出形式日志绑定桥接旧的框架实战 logback基础概念配置文件 Log4j概述 SLF4J 参考&#xff1a; https://www.cnblogs.com/shenStudy/p/15806951.html https://slf4j.org/ 基础概念 是什么&#xff1f;SLF4J&#xff08;Simple Logging Facade fo…...

探索式测试

探索式测试是一种软件测试风格&#xff0c;它强调独立测试人员的个人自由和职责&#xff0c;为了持续优化其工作的价值&#xff0c;将测试学习、测试设计、测试执行和测试结果分析作为相互支持的活动&#xff0c;在整个项目实现过程中并行地执行。 选择合适的探索式测试方法我…...

LeetCode LCP17速算机器人

速算机器人&#xff1a;探索字符指令下的数字变换 在编程的奇妙世界里&#xff0c;我们常常会遇到各种有趣的算法问题&#xff0c;这些问题不仅考验我们的逻辑思维&#xff0c;还能让我们感受到编程解决实际问题的魅力。今天&#xff0c;就让我们一同探讨一个关于速算机器人的…...

Taro+Vue实现图片裁剪组件

cropper-image-taro-vue3 组件库 介绍 cropper-image-taro-vue3 是一个基于 Vue 3 和 Taro 开发的裁剪工具组件&#xff0c;支持图片裁剪、裁剪框拖动、缩放和输出裁剪后的图片。该组件适用于 Vue 3 和 Taro 环境&#xff0c;可以在网页、小程序等平台中使用。 源码 https:…...

ISP各模块功能介绍

--------声明&#xff0c;本文为转载整理------- ISP各个模块功能介绍&#xff1a; 各模块前后效果对比&#xff1a; 黑电平补偿&#xff08;BLC&#xff09; 在理想情况下&#xff0c;没有光照射的像素点其响应值应为0。但是&#xff0c;由于杂质、受热等其它原因的影响&…...

SQL-leetcode-584. 寻找用户推荐人

584. 寻找用户推荐人 表: Customer -------------------- | Column Name | Type | -------------------- | id | int | | name | varchar | | referee_id | int | -------------------- 在 SQL 中&#xff0c;id 是该表的主键列。 该表的每一行表示一个客户的 id、姓名以及推…...

新冠肺炎服务预约微信小程序的设计与实现ssm+论文源码调试讲解

第4章 系统设计 4.1 系统设计的原则 在系统设计过程中&#xff0c;也需要遵循相应的设计原则&#xff0c;这些设计原则可以帮助设计者在短时间内设计出符合设计规范的设计方案。设计原则主要有可靠性&#xff0c;安全性&#xff0c;可定制化&#xff0c;可扩展性&#xff0c;可…...

多模态人工智能在零售业的未来:通过GPT-4 Vision和MongoDB实现智能产品发现

多模态人工智能在零售业的未来&#xff1a;通过GPT-4 Vision和MongoDB实现智能产品发现 引言 想象一下&#xff0c;顾客在购物时只需上传一张他们所期望的服装或产品的照片&#xff0c;几分钟内便能收到来自他们最喜欢的商店的个性化推荐。这就是多模态人工智能在零售领域所带…...

3D目标检测数据集——kitti数据集

KITTI官网网址:The KITTI Vision Benchmark Suite 下载数据集:The KITTI Vision Benchmark Suite KITTI数据集论文:CMSY9 github可视化代码:GitHub - kuixu/kitti_object_vis: KITTI Object Visualization (Birdview, Volumetric LiDar point cloud )...

从CentOS到龙蜥:企业级Linux迁移实践记录(系统安装)

引言&#xff1a; 随着CentOS项目宣布停止维护CentOS 8并转向CentOS Stream&#xff0c;许多企业和组织面临着寻找可靠替代方案的挑战。在这个背景下&#xff0c;龙蜥操作系统&#xff08;OpenAnolis&#xff09;作为一个稳定、高性能且完全兼容的企业级Linux发行版&#xff0…...

Cocos二维Slider

1、可拖动区域计算 根据UI的世界坐标了宽高信息计算出handle的坐标范围 this.posMin new Vec2(this.node.worldPosition.x - this.uiSelf.contentSize.width * 0.5, this.node.worldPosition.y - this.uiSelf.contentSize.height * 0.5); this.posMax new Vec2(this.node.w…...

kubeneters-循序渐进Cilium网络(二)

文章目录 概要IP 地址配置接口配置解析结论 概要 接续前一章节&#xff0c;我们还是以这张图继续深入Cilium网络世界 IP 地址配置 通过检查 Kubernetes 集群的当前环境&#xff0c;可以获取实际的 IP 地址和配置信息。这些信息将被补充到之前的网络示意图中&#xff0c;以使…...

【再谈设计模式】模板方法模式 - 算法骨架的构建者

一、引言 在软件工程、软件开发过程中&#xff0c;我们经常会遇到一些算法或者业务逻辑具有固定的流程步骤&#xff0c;但其中个别步骤的实现可能会因具体情况而有所不同的情况。模板方法设计模式&#xff08;Template Method Design Pattern&#xff09;就为解决这类问题提供了…...

[开源]自动化定位建图系统(视频)

系统状态机&#xff1a; 效果展示&#xff1a; 1、 机器人建图定位系统-基础重定位&#xff0c;定位功能演示 2、 机器人建图定位系统-增量地图构建&#xff0c;手动回环检测演示 3、… 开源链接&#xff1a; https://gitee.com/li-wenhao-lwh/lifelong-backend Qt人机交互…...

Kali系统(Debian 10.3) 遇到的问题

目录 问题一&#xff1a;非问题 kali 基础官网与安装 问题二&#xff1a; 问题三&#xff1a; Kali系统 MySQL问题Cant connect to local MySQL server through socket /run/mysqld/mysqld.sock (2) 问题四&#xff1a;重新安装MySQL 也就是MariaDB(MariaDB 含 MySQL相关…...

P2249 【深基13.例1】查找

题目描述 输入 n 个不超过 109 的单调不减的&#xff08;就是后面的数字不小于前面的数字&#xff09;非负整数 a1​,a2​,…,an​&#xff0c;然后进行 m 次询问。对于每次询问&#xff0c;给出一个整数 q&#xff0c;要求输出这个数字在序列中第一次出现的编号&#xff0c;如…...

【时时三省】(C语言基础)常见的动态内存错误3

山不在高&#xff0c;有仙则名。水不在深&#xff0c;有龙则灵。 ----CSDN 时时三省 对同一块动态内存多次释放 示例&#xff1a; 解决方法就是释放完把p等于空指针就好了 动态开辟的空间忘记释放 示例&#xff1a; 只有p能找到这块空间 只有p知道这块动态开辟的空间起始地…...

Three.js 性能优化:打造流畅高效的3D应用

文章目录 前言一、减少几何体复杂度&#xff08;Reduce Geometry Complexity&#xff09;二、合并几何体&#xff08;Merge Geometries&#xff09;三、使用缓冲区几何体&#xff08;Use BufferGeometries&#xff09;四、纹理压缩与管理&#xff08;Texture Compression and M…...

CancerGPT :基于大语言模型的罕见癌症药物对协同作用少样本预测研究

今天我们一起来剖析一篇发表于《npj Digital Medicine》的论文——《CancerGPT for few shot drug pair synergy prediction using large pretrained language models》。该研究聚焦于一个极具挑战性的前沿领域&#xff1a;如何利用大语言模型&#xff08;LLMs&#xff09;在数…...

Clisoft SOS与CAD系统集成

Clisoft SOS与CAD系统集成 以下内容大部分来自官方文档&#xff0c;目前只用到与Cadence Virtuoso集成&#xff0c;其他还未用到&#xff0c;如有问题或相关建议&#xff0c;可以留言。 与Keysight ADS集成 更新SOS客户端配置文件sos.cfg&#xff0c;以包含支持ADS的模板&am…...

基于 GEE 下载逐年 MODIS 地表温度 LST 数据

目录 1 地表温度&#xff08;LST&#xff09; 2 数据准备 3 代码实现 3.1 加载研究区与数据集 3.2 数据预处理与标准化 3.3 逐年批量导出 3.4 可视化结果 4 运行结果 5 完整代码 1 地表温度&#xff08;LST&#xff09; 在遥感领域&#xff0c;地表温度&#xff08;L…...

ISP图像调优流程

第一步:亮度调试 AE:ae目标值,ae权重表,ae曝光策略,ae收敛速度 .ae容忍值 ae权重表:中央区域权重,均值权重等。感兴趣的区域往AE目标亮度靠近 ae目标亮度: AE 目标亮度是随着增益升高而降低的。 AE 目标亮度的调整主要是看图像的过曝区大小是否达到要求(如对比机)…...

SpringBoot多数据源架构实现

文章目录 1. 环境准备2. 创建Spring Boot项目3. 添加依赖4. 配置多数据源5. 配置MyBatis-Plus6. 使用多数据源7. 创建Mapper接口8. 实体类定义9. 测试多数据源10. 注意事项10.1 事务导致多数据源失效问题解决方案&#xff1a; 10.2 ClickHouse的事务支持10.3 数据源切换的性能开…...

VAxios

VAxios&#xff08;或v-axios&#xff09;是一个基于Axios的Vue插件&#xff0c;旨在让开发者在Vue项目中更方便、快捷地引入和使用Axios。以下是对VAxios的详细介绍&#xff1a; 一、功能与特性 VAxios作为Axios的Vue封装插件&#xff0c;继承了Axios的众多特性&#xff0c;…...

macOS安装nvm

新建一个文件夹&#xff0c;使用git将nvm给clone下来 git clone https://github.com/nvm-sh/nvm.git 使用vim编辑~/.bash_profile文件&#xff08;没有就新建&#xff09;添加以下代码 export NVM_DIR"$HOME/.nvm" [ -s "$NVM_DIR/nvm.sh" ] &&…...