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

Java进阶(二):Java设计模式

目录

设计模式

一.建模语言

二.类之间的关系

1.依赖关系

2.关联关系

3.聚合关系

4.组合关系

5.继承关系

6.实现关系

三.面向对象设计原则

单一职责原则

开闭原则

里氏替换原则

依赖倒置

接口隔离原则

迪米特原则

组合/聚合(关联关系)复用原则

四.23种设计模式

五.单例模式(只创建一个对象)

六.工厂模式

简单工厂模式(一个工厂对应多类产品)

工厂方法模式(一个工厂对应一类产品)

抽象工厂(一个工厂对应多类商家工厂)

七.原型模式

八.代理模式

九.模板方法模式

十.策略模式


设计模式

设计模式产生背景

设计模式概念首先起源于建筑领域,1990在软件领域也诞生设计模式概念。

直到 1995 年,艾瑞克·伽马(ErichGamma)、理査德·海尔姆(Richard Helm)、拉尔夫·约翰森(Ralph Johnson)、约翰·威利斯迪斯(JohnVlissides),在《设计模式:可复用面向对象软件的基础》中收纳总结了23种设计模式。

什么是设计模式?

        在长期编程的过程中,针对某一类问题经过反复的优化,最终总结出一个固定的解决方案,这些方案经过反复的使用,具有普遍性。

为什么要学习设计模式?

①学习设计模式就是学习好的编程思想,学习前辈们的经验。

②可以提高程序员的思维能力、编程能力和设计能力。

③使程序设计更加标准化、使软件开发效率大大提高。

④使设计的代码可重用性高、可扩展性提高。

⑤能够更好的去理解源码架构。


一.建模语言

        统一建模语言(Unified Modeling Language,UML),是一套软件设计和分析的语言工具

用图形化的方式,记录表示类与类类与接口接口与接口之间的关系, 一般把图形化方式也称为UML类图.

类图中两个基本的要素:

1.类:是对具有相同属性和行为的一组对象的抽象描述

2.接口:是一种特殊的类,它具有类的结构但不可被实例化,只可以被子类实现。


二.类之间的关系

1.依赖关系

        在一个类中的方法,把另一个类作为参数进行使用,具有临时性,方法执行结束后,依赖关系就不存在了。

        一般把xxx类用到了xxx类,这种关系,称为依赖关系,也称为 use-a关系。例如:下图的人与手机的关系,人类中的方法call()中的参数MobilePhone mp就是作为依赖关系。方法结束,依赖关系结束。用虚线箭头表示。

2.关联关系

是一种has-a的关系 ,xxx 有 xxx

在一个类中,把另一个当做自己的成员。用实心三角实线箭头表示。

有单向关联,双向关联,自关联,一对一关联,一对多关联。

关联关系根据强弱又分为:聚合关系和组合关系。

3.聚合关系

聚合关系也是一种关联关系,是强关联关系,是一种整体和部分的关系

学校包含老师, 即使学校不存在了, 老师可以依然独立的存在。

在 UML 类图中,聚合关系可以用带空心菱形的实线来表示,菱形指向整体

4.组合关系

聚合关系也是一种关联关系, 是一种整体和部分的关系, 是一种更强烈的关联关系。

头和嘴关系,头如果不在了,嘴也会跟着销毁。

在 UML 类图中,组合关系用带实心菱形的实线来表示,菱形指向整体

5.继承关系

        继承关系是对象之间耦合度最大的一种关系,表示一般与特殊的关系,是父类与子类之间的

关系,是一种继承关系,是 is-a 的关系。

在 UML 类图中,继承关系用带空心三角箭头的实线来表示,箭头从子类指向父类

6.实现关系

        实现关系是接口与实现类之间的关系。在这种关系中,类实现了接口,类中的操作实现了接

口中所声明的所有的抽象操作。

在 UML 类图中,实现关系使用带空心三角箭头的虚线来表示,箭头从实现类指向接口


三.面向对象设计原则

单一职责原则

        一个类只负责某一个具体功能,细化类的粒度。比如:Person类只负责关于人的信息,Address类只负责关于地址的信息。


开闭原则

对修改关闭,对扩展开放(不修改,多使用多态的思想)

尽可能的在扩展功能时,不要修改已有的代码,尽可能扩展一个新的类来实现新功能。


里氏替换原则

        继承优势: 提高代码复用性,子类继承父类的功能,提高代码的扩展性,子类还可以扩展自己的功能,不影响其他类,重写父类方法。

        继承劣势: 继承使得类的体系结构变得复杂了

里氏替换:首先时由里斯科夫女士提出的。

        其次是关于继承使用的,当子类继承了父类后, 在使用时,用子类替换父类后,要确保父类中的功能不受影响。(子类重写父类方法时,不得改变改变方法的结果)

主要的思想: 就保证程序的稳定性。


依赖倒置

面向抽象编程,不要面向具体的实现编程。

具体实现应该依赖抽象层 (使用多态,抽象层用来表示,定义--> 具体的由子实现类实现)


接口隔离原则

        不要把所有的功能都定义到一个总的接口中,应该把不同的种类的功能,定义在不同的接口中,让实现类,根据自己的需要去灵活的选择。(不同功能,不同接口)


迪米特原则

只跟朋友联系,不跟"陌生人”说话。

        在程序间相互调用时,如果两个类直接没有直接联系,但是想相互调用,可以通过第三方进行转发调用。(两个类没有直接联系,通过第三方将两者联系,如:明星与粉丝,通过经纪人交流

降低模块之间的耦合度。


组合/聚合(关联关系)复用原则

        继承使得类的体系变得复杂, 如果我们只是想使用某个类中的方法时,也可以优先选择关联关系/ 依赖关系 降低类与类之间的耦合度


四.23种设计模式

设计模式分为3大类
        根据模式是用来完成什么工作来划分,这种方式可分为创建型模式、结构型模式和行为型模式 3 种。
创建型模式 :用于描述“怎样创建对象”,它的主要特点是“将对象的创建与使用分离”。提供了
、原型、 工厂方法 、抽象工厂、建造者 5 种创建型模式。
结构型模式 :用于描述如何将类或对象按某种布局组成更大的结构,提供了代理、适配器、桥接、
装饰、外观、享元、组合 7 种结构型模式。
行为型模式 :用于描述类或对象之间怎样相互协作共同完成单个对象都无法单独完成的任务,以及
怎样分配职责。提供了模板方法、策略、命令、职责链、状态、观察者、中介者、迭代器、访问
者、备忘录、解释器 11 种行为型模式。

五.单例模式(只创建一个对象)

在一个项目中,如何确保一个类始终只有一个对象

特点:

1. 单例类只有一个实例对象;(虽然多次创建,但只能产生一个)
2. 该单例对象必须由单例类自行创建;(在单例类内部,在第一次使用时才创建)
3. 单例类对外提供一个访问该单例的全局访问点;(需要提供一个公共的方法)

单例模式通常两种实现 

①饿汉式单例单例模式中的饿汉式(急切式单例) 在加载此类时,就已经将唯一的一个对象创建出来。

好处:不会存在线程安全问题。

不足: 在类加载时,就会创建单例对象,有可能一段时间内还用不到它。

public class MyWindow {//在内部自己创建的一个单例对象private static MyWindow myWindow = new MyWindow();private MyWindow() {}/*对外提供这唯一的对象*/public static MyWindow getMyWindow() {return myWindow;}
}

懒汉式单例:在类加载时,并没有创建单例对象,在第一次获取单例对象时,才去创建了单例对象。

好处: 类加载时先不创建,在第一次使用获取时才会创建

不足: 会出现线程安全问题加锁解决(synchronized锁)

※ 双重检索 + volatile(可见性,避免重排序)

例如:A  a = new  A();

创建对象这一条语句编译为指令时,可以分为三个指令顺序:

1. new 申请空间

2. 调用构造方法初始化对象

3. 把对象地址赋给引用变量

        如果按照这个正常的顺序执行,是没有问题的,但是执行时,如果2,3条指令顺序发生变化,导致把没有初始化完成的对象地址返回了,拿去使用了,这么做会出问题,因为对象没有初始化完成。所有需要使用volatile关键修饰单例成员变量,确保对其赋值时,指令不重新排序。

public class MyWindow {private volatile static MyWindow myWindow;public static MyWindow getMyWindow() {//第一重检索,隔绝后面大量的线程进入if (myWindow == null) {//加锁,只能一个一个进入synchronized (MyWindow.class) {//第二重检索,隔绝前面少量的线程进入if (myWindow == null) {myWindow = new MyWindow();}}}return myWindow;}
}


六.工厂模式

        解决的就是在项目将创建对象和使用对象分离的问题,(结合Spring),如何更好的组织类与类之间的关系。

简单工厂模式(一个工厂对应多类产品)

简单工厂并不是一种设计模式,违背了开闭原则主要是引出工厂方法抽象工厂模式

涉及的角色:

工厂角色: 根据我们的需求,创建对应的对象。

抽象产品: 具体产品的抽象,具体产品实现 / 继承抽象产品,可以使用上层的抽象父类,表示任意的子类对象。

具体产品: 具体的对象。

优点: 创建对象和使用对象分离了。

缺点: 只能创建实现了同一个父类 / 接口的子类对象, 扩展新的类型,需要修改工厂,违背了开闭原则。

适合简单的,子类较少的场景。

工厂方法模式(一个工厂对应一类产品)

        由于简单工厂中,一个工厂,可以造同一类型的所有具体产品,导致简单工厂比较复杂,扩展一个新类型时,需要修改工厂代码。

        工厂方法模式,为工厂也进行抽象,并且为同类型每个具体产品都创建了一个具体的工厂。

        每一个工厂负责创建一个具体的产品(类型)对象,这样扩展一个新的产品,与之对应就要扩展一个产品工厂,就不需要修改工厂,遵守了开闭原则,单一职责原则。

好处: 遵守了开闭原则。

不足: 类的数量增多了。

抽象工厂(一个工厂对应多类商家工厂)

        如:一个工厂可分为小米工厂,华为工厂。小米工厂可造汽车,手机。华为工厂可造汽车,手机。

        工厂方法模式,是按照产品类型进行分类的,一类产品,对应一类工厂,不同类型产品之间,相互隔离的。例如: 华为和小米,既要汽车,又要造手机,都是属于同一家的产品,但是工厂方法这种设计,同一个公司产品与产品之间没有联系。

        抽象工厂模式对工厂重新进行分类,以公司为单位进行工厂的抽象(提取),一个工厂内,可以创建不同的产品,这样我们就可以创建出像华为工厂,小米工厂这样的具体工厂,一个工厂内,可以创建不同公司的各种产品。


七.原型模式

        在某些场景下,为(解决的问题:)避免自己手动的new对象,我们可以使用对象克隆方式,创建并返回一个新的对象。这种克隆新对象的效率比我们自己new的效率要高。

对象克隆实现方式有两种:

1.实现Cloneable接口,重写clone()

2.使用对象序列化 反序列化重新生成对象

注意深克隆和浅克隆问题。


八.代理模式

        早在spring aop思想中,已经用到了代理思想。在不修改原来代码的前提下,为我们方法添加额外的功能。通过代理对象帮助我们进行调用。

        有些时候,目标对象(汽车厂)不想或不能直接与客户打交道,通过代理对象进行访问,代理对象可以保护目标对象,对目标对象功能进行扩展,降低了模块之间的耦合度。

涉及到三个主题:

抽象主题: (抽取的功能,让目标对象进行实现,以及代理对象进行实现)

具体主题: 真正要实现功能的类。

代理对象

代理模式实现方式又有两种:

1.静态代理

        创建一个代理类,代理实现与具体对象实现相同的接口 / 抽象类,重写抽象方法。还有一个成员变量,可以用接收具体的主题,在代理类中重写的抽象方法中调用真实主题方法,这样就可以在调用之前和之后添加额外的功能。

不足: 一个代理对象,只能代理一个接口类型的对象,不灵活。

2.动态代理

只需要写一次代理类,就可以通过反射机制动态获得类的信息,可以为任何类提供代理功能。

动态代理实现分为两种:

①jdk代理

        jdk代理实现是通过反射机制实现的, 目标类必须要实现一个接口,通过接口动态获得目标类中的信息。

②cglib代理

        是spring中提供的一种代理技术,目标类可以不实现任何接口,采用字节码生成子类的方式,对方法进行拦截,实现机制不同。

注意:cglib不能代理final修饰的类以及fnal和static修饰的方法。

        目前spring中两种动态代理都支持,如果目标类没有实现接口,默认使用cglib代理,如果目标类有实现接口,采用jdk代理。


九.模板方法模式

        模版方法模式,是在一个类中,定义好一个算法骨架,设定好实现步骤,把一些公共的通用的在父类中实现,然后将一些不确定的实现在具体的子类中实现。

        例如,去银行办理业务一般要经过以下 4 个流程:取号、排队、办理具体业务、对银行
工作人员进行评分等,其中取号、排队和对银行工作人员进行评分的业务对每个客户是一样
的,可以在父类中实现,但是办理具体业务却因人而异,它可能是存款、取款或者转账等,
可以延迟到子类中实现。

结构:

抽象类: 负责给出一个算法的轮廓和骨架。它由一个模板方法和若干个基本方法构成。

模版方法: 定义好执行顺序的算法骨架,确定好执行流程顺序。

抽象方法: 不确定的功能,定义为抽象的,交给子类实现。

具体方法: 都一样的公共的通用的方法,在抽象父类中实现。

具体子类: 实现抽象类中的抽象方法的具体类,有不同的实现方式,就可以用多个子类。

        new 具体子类对象,用具体子类对象调用模版方法,把父类中具体方法与自己实现的抽象方法一起执行。

        将变化部分定义为抽象的,让子类去扩展实现,满足开闭原则,适合流程相对比较固定的,其中有变化的场景。

十.策略模式

        将不同的实现算法进行封装,将功能的实现与使用相分离。(多选一策略)在使用时,可以用不同的策略实现类进行替换。重点用到的知识点:继承,多态。

结构

抽象类:抽象方法

具体实现类(多个实现类实现抽象类的抽象方法,在多个实现类中多选一

环境类(使用者)

 感谢你的阅读与关注,如有问题欢迎探讨!💓

相关文章:

Java进阶(二):Java设计模式

目录 设计模式 一.建模语言 二.类之间的关系 1.依赖关系 2.关联关系 3.聚合关系 4.组合关系 5.继承关系 6.实现关系 三.面向对象设计原则 单一职责原则 开闭原则 里氏替换原则 依赖倒置 接口隔离原则 迪米特原则 组合/聚合(关联关系)复用原则 四.23种设计模式…...

python学opencv|读取图像(四十二)使用cv2.add()函数实现多图像叠加

【1】引言 前序学习过程中,掌握了灰度图像和彩色图像的掩模操作: python学opencv|读取图像(九)用numpy创建黑白相间灰度图_numpy生成全黑图片-CSDN博客 python学opencv|读取图像(四十)掩模:三…...

DIY QMK量子键盘

最近放假了,趁这个空余在做一个分支项目,一款机械键盘,量子键盘取自固件名称QMK(Quantum Mechanical Keyboard)。 键盘作为计算机或其他电子设备的重要输入设备之一,通过将按键的物理动作转换为数字信号&am…...

【公式】卢布贬值风险:义乌到俄罗斯贸易的汇率陷阱

卢布贬值风险:义乌到俄罗斯贸易的汇率陷阱 具体实例与推演 假设一位中国义乌的商人,计划出口一批价值100万人民币的商品到俄罗斯。最初的汇率是1人民币兑换100卢布。 初始状态: 商品价值:100万人民币初始汇率:1人民币…...

1月27(信息差)

🌍喜大普奔,适用于 VS Code 的 GitHub Copilot 全新免费版本正式推出,GitHub 全球开发者突破1.5亿 🎄Kimi深夜炸场:满血版多模态o1级推理模型!OpenAI外全球首次!Jim Fan:同天两款国…...

Linux常见问题解决方法--1

常见安全工具、设备 工具 端口及漏洞扫描:Namp、Masscan 抓包:Wireshark,Burpsuite、Fiddler、HttpCanary Web自动化安全扫描:Nessus、Awvs、Appscan、Xray 信息收集:Oneforall、hole 漏洞利用:MSF、…...

Python 数据清洗与处理常用方法全解析

在数据处理与分析过程中,缺失值、重复值、异常值等问题是常见的挑战。本文总结了多种数据清洗与处理方法:缺失值处理包括删除缺失值、固定值填充、前后向填充以及删除缺失率高的列;重复值处理通过删除或标记重复项解决数据冗余问题&#xff1…...

《企业应用架构模式》笔记

领域逻辑 表模块和数据集一起工作-> 先查询出一个记录集,再根据数据集生成一个(如合同)对象,然后调用合同对象的方法。 这看起来很想service查询出一个对象,但调用的是对象的方法,这看起来像是充血模型…...

顶刊JFR|ROLO-SLAM:首个针对不平坦路面的车载Lidar SLAM系统

摘要 基于激光雷达(LiDAR)的同步定位与地图构建(SLAM)被认为是在恶劣环境中提供定位指导的一种有效方法。然而,现成的基于激光雷达的SLAM方法在经过不平坦地形时,尤其是在垂直方向相关的部分,会…...

第05章 09 使用Lookup绘制地形数据高程着色图

在VTK(Visualization Toolkit)中,可以使用颜色查找表(Lookup Table,简称LUT)来根据高程数据对地形进行着色。以下是一个示例代码,展示了如何使用VTK和C来读取地形数据,并使用颜色查找…...

【深度学习入门_机器学习理论】K近邻法(KNN)

本部分主要为机器学习理论入门_K近邻法(KNN),书籍参考 “ 统计学习方法(第二版)”。 学习目标: 了解k近邻算法的基本概念、原理、应用;熟悉k近邻算法重要影响要素;熟悉kd树原理与优化应用。 开始本算法之…...

基于Django的Boss直聘IT岗位可视化分析系统的设计与实现

【Django】基于Django的Boss直聘IT岗位可视化分析系统的设计与实现(完整系统源码开发笔记详细部署教程)✅ 目录 一、项目简介二、项目界面展示三、项目视频展示 一、项目简介 该系统采用Python作为主要开发语言,利用Django这一高效、安全的W…...

编程语言中的常见Bug及解决方案

在编程过程中,不同语言有其独特的特性和挑战,这也导致了各种常见Bug的出现。本文将总结几种主流编程语言中的常见Bug,包括JavaScript、Python、C/C、Java和Go,并提供相应的解决方案和案例。 一、JavaScript中小数相加精度不准确的…...

DeepSeek API 的获取与对话示例

代码文件下载:Code 在线链接:Kaggle | Colab 文章目录 注册并获取API环境依赖设置 API单轮对话多轮对话流式输出更换模型 注册并获取API 访问 https://platform.deepseek.com/sign_in 进行注册并登录: 新用户注册后将赠送 10 块钱余额&#…...

数据库SQLite和SCADA DIAView应用教程

课程简介 此系列课程大纲主要包含七个课时。主要使用到的开发工具有:SQLite studio 和 SCADA DIAView。详细的可成内容大概如下: 1、SQLite 可视化管理工具SQLite Studio :打开数据库和查询数据;查看视频 2、创建6个变量&#x…...

Elasticsearch+kibana安装(简单易上手)

下载ES( Download Elasticsearch | Elastic ) 将ES安装包解压缩 解压后目录如下: 修改ES服务端口(可以不修改) 启动ES 记住这些内容 验证ES是否启动成功 下载kibana( Download Kibana Free | Get Started Now | Elastic ) 解压后的kibana目…...

(CICD)自动化构建打包、部署(Jenkins + maven+ gitlab+tomcat)

一、平滑发布与灰度发布 **什么叫平滑:**在发布的过程中不影响用户的使用,系统不会因发布而暂停对外服务,不会造成用户短暂性无法访问; **什么叫灰度:**发布后让部分用户使用新版本,其它用户使用旧版本&am…...

Android源码阅读笔记(二)—— 启动模式

Android源码阅读笔记(二)—— 启动模式初章 1、为什么学习启动模式 Activity的启动模式其实是一个在面试中经常会被关注的问题,那么它的重要性体现在哪里? A:在多数的开发场景中,我们似乎也没有怎么关注过…...

AndroidCompose Navigation导航精通2-过渡动画与路由切换

目录 前言路由切换NavControllerBackStackEntry过渡动画过渡原理缩放动画渐隐动画滑动动画动画过渡实战前言 在当今的移动应用开发中,导航是用户与应用交互的核心环节。随着 Android Compose 的兴起,它为开发者提供了一种全新的、声明式的方式来构建用户界面,同时也带来了更…...

PCL ——LevenbergMarquardt非线性最小二乘法拟合圆柱(C++详细过程版)

目录 一、算法概述1、圆柱方程2、LM算法流程二、代码实现三、结果展示一、算法概述 目前求解非线性最小二乘问题常用算法有高斯-牛顿方法(Gauss-Newton algorithm,GN 算法)、列文伯格-马夸尔特方法(Levenberg-Marquardt algorithm,LM 算法)。本文采用 LM 算法进行圆柱拟合。 …...

GD32的GD库开发

所有的Cortex-M处理器都有相同的SysTick定时器,因为CMSIS-Core头文件中定义了一个名为SysTick的结构体。 这个定时器可以用作延时函数,不管是STM32的芯片还是GD32,AT32的芯片,delay函数都可以这么写,只要它是cortex-M…...

DeepSeek R1:推理模型新纪元与价格战

标题:DeepSeek R1:推理模型新纪元与价格战 文章信息摘要: DeepSeek R1的发布标志着推理模型研究的重要转折点,其采用四阶段强化学习训练方法,结合监督微调和拒绝采样,显著提升了模型的推理能力。这一进展不…...

一文简单回顾Java中的String、StringBuilder、StringBuffer

简单说下String、StringBuilder、StringBuffer的区别 String、StringBuffer、StringBuilder在Java中都是用于处理字符串的,它们之间的区别是String是不可变的,平常开发用的最多,当遇到大量字符串连接的时候,就用StringBuilder&am…...

机器学习:支持向量机

支持向量机(Support Vector Machine)是一种二类分类模型,其基本模型定义为特征空间上的间隔最大的广义线性分类器,其学习策略便是间隔最大化,最终可转化为一个凸二次规划问题的求解。 假设两类数据可以被 H x : w T x…...

简单的停车场管理系统的C语言实现示例

以下是一个简单的停车场管理系统的C语言实现示例。该示例使用结构体来管理停车场的车位信息&#xff0c;并提供基本车辆进入、离开以及显示停车场状态功能。 #include <stdio.h> #include <stdlib.h> #include <string.h>#define MAX_SLOTS 10 // 最大车位数…...

网络工程师 (3)指令系统基础

一、寻址方式 &#xff08;一&#xff09;指令寻址 顺序寻址&#xff1a;通过程序计数器&#xff08;PC&#xff09;加1&#xff0c;自动形成下一条指令的地址。这是计算机中最基本、最常用的寻址方式。 跳跃寻址&#xff1a;通过转移类指令直接或间接给出下一条指令的地址。跳…...

基于Python的智慧物业管理系统

【Python】基于Python的智慧物业管理系统&#xff08;完整系统源码开发笔记详细部署教程&#xff09;✅ 目录 一、项目背景二、研究目的三、项目意义四、项目功能五、项目创新点六、开发技术介绍七、项目界面展示&#xff08;部分展示&#xff0c;详细看视频&#xff09;八、项…...

使用 Vue 3 的 watchEffect 和 watch 进行响应式监视

Vue 3 的 Composition API 引入了 <script setup> 语法&#xff0c;这是一种更简洁、更直观的方式来编写组件逻辑。结合 watchEffect 和 watch&#xff0c;我们可以轻松地监视响应式数据的变化。本文将介绍如何使用 <script setup> 语法结合 watchEffect 和 watch&…...

环境变量

目录 一.概念介绍 1.1命令行参数 二.一个例子&#xff0c;一个环境变量 2.1查看环境变量 2.2如何理解环境变量呢&#xff1f;存储的角度 2.3环境变量最开始从哪里来的呢&#xff1f; 概括&#xff1a; 1. 环境变量的存储 2. 命令查找过程 3. 环境变量表和命令行参数…...

Scale AI 创始人兼 CEO采访

Scale AI 创始人兼 CEO 亚历山大王&#xff08;Alexander Wang&#xff09;首次亮相节目接受采访。他的公司专注于为人工智能工具提供准确标注的数据。早在 2022 年&#xff0c;王成为世界上最年轻的白手起家亿万富翁。 美国在全球人工智能竞赛中的地位&#xff0c;以及它与中…...

MongoDB中常用的几种高可用技术方案及优缺点

MongoDB 的高可用性方案主要依赖于其内置的 副本集 (Replica Set) 和 Sharding 机制。下面是一些常见的高可用性技术方案&#xff1a; 1. 副本集 (Replica Set) 副本集是 MongoDB 提供的主要高可用性解决方案&#xff0c;确保数据在多个节点之间的冗余存储和自动故障恢复。副…...

【Erdas实验教程】001:Erdas2022下载及安装教程

文章目录 一、Erdas2022安装教程1. 安装主程序2. 拷贝补丁3. 安装LicenseServer4. 运行软件 二、Erdas2022下载地址 一、Erdas2022安装教程 Erdas2022全新界面如下&#xff1a; 1. 安装主程序 下载安装包并解压&#xff0c;以管理员身份运行 “setup.exe” 或 “setup.vbs”&…...

Python3 【函数】水平考试:精选试题和答案

Python3 【函数】水平考试&#xff1a;精选试题和答案 Python 函数考试试卷及答案。共计30题&#xff0c;其中选择题15题、填空题10题、编程题5题&#xff0c;试卷满分为100分。 一、选择题&#xff08;每题 2 分&#xff0c;共 30 分&#xff09; 以下哪个关键字用于定义函数…...

stm8s单片机(三)时钟系统与时钟切换

一个单片机系统要正常运行应包括四个部分: 电源&#xff0c;晶振&#xff0c;复位电路&#xff0c;下载电路。 晶振就是时钟。 stm8有四种时钟源 HSE (High Speed External clock signal)HSE user-ext (High Speed External clock signal user external)HSI (High Speed Inter…...

ChatGPT高效处理图片技巧使用详解

ChatGPT&#xff0c;作为OpenAI开发的预训练语言模型&#xff0c;主要用于生成自然语言文本的任务。然而&#xff0c;通过一些技巧和策略&#xff0c;我们可以将ChatGPT与图像处理模型结合&#xff0c;实现一定程度上的图像优化和处理。本文将详细介绍如何使用ChatGPT高效处理图…...

图漾Halcon版本SDK使用教程【V1.1.0新版本】

文章目录 1.下载并安装 Halcon1.1 下载Halcon软件1.2 安装Halcon 2.下载Camport_Halcon_gentl SDK2.1 下载Camport_Halcon_gentl SDK2.2 Camport Halcon SDK介绍2.3 Halcon SDK环境配置与运行2.3.1 SDK环境配置2.3.2 获取相机支持的参数2.3.3 配置相机参数并运行相机 2.4 遍历H…...

C语言二级

//请编写函数fun()&#xff0c;该函数的功能是&#xff1a;计算并输出给定整数n的所有因 //子&#xff08;不包括1和自身&#xff09;之和。规定n的值不大于1000。例如&#xff0c;在主函数 //中从键盘给n输入的值为856&#xff0c;则输出为&#xff1a;sum 763。 //注意&…...

软工_软件工程

2025.01.24&#xff1a;软件工程导论学习笔记 第2节 软件工程 2.1 软件发展 - 四个阶段2.1.1 程序设计2.1.2 程序系统2.1.3 软件工程2.1.4 第四阶段 2.2 软件危机2.2.1 软件危机 - 定义2.2.2 软件危机 - 主要表现 2.1 软件发展 - 四个阶段 2.1.1 程序设计 软件生产个体化&…...

【creo】CREO配置快捷键方式和默认单位

了解CREO工作目录设置 设置快捷方式启动目录&#xff0c;就能自动加载其中的配置。 一、通过键盘快捷方式 保存配置 creo_parametric_customization.ui 文件&#xff1a; 二、通过映射键录制 通过这种方式可以监听鼠标的点击事件。使用键盘快捷方式无法找到需要的动作时候可…...

go理论知识——Go Channel 笔记 [特殊字符]

go理论知识——Go Channel 笔记 &#x1f4dd; 1. 基本概念 &#x1f9e0; 1.1 Channel 是什么&#xff1f; Channel 是 Go 语言中用于在不同 Goroutine 之间进行通信的机制。Channel 是类型安全的&#xff0c;意味着你只能发送和接收特定类型的数据。 1.2 Channel 的创建 …...

微信小程序压缩图片

由于wx.compressImage(Object object) iOS 仅支持压缩 JPG 格式图片。所以我们需要做一下特殊的处理&#xff1a; 1.获取文件&#xff0c;判断文件是否大于设定的大小 2.如果大于则使用canvas进行绘制&#xff0c;并生成新的图片路径 3.上传图片 async chooseImage() {let …...

第05章 11 动量剖面可视化代码一则

在计算流体力学&#xff08;CFD&#xff09;中&#xff0c;动量剖面&#xff08;Momentum Profiles&#xff09;通常用于描述流体在流动方向上的动量分布。在 VTK 中&#xff0c;可以通过读取速度场数据&#xff0c;并计算和展示动量剖面来可视化呈现速度场信息。 示例代码 以…...

Android Studio 新版本24.2.2 运行后自动切到 LogCat

最近更新了 Android studio 版本&#xff0c;发现有个问题&#xff1a; 每次 Run app 之后。都会自动切换到 run 标签。这让我非常不习惯。我个人习惯在app 运行后查看Logcat 最后靠 deepSeek 找到一种解决方案&#xff1a; Android Studio 中截图如下&#xff1a;...

使用EVE-NG-锐捷实现OSPF

一、OSPF基础知识 Open shortest Path First(OSPF)开放式最短路径优先协议 1.OSPF的关系状态 (1)邻居关系(TWO-WAY) 只发送hello包不发送LSA包(链路状态通告包) (2)邻接关系(FULL) OSPF设备与设备之间相互建立OSPF关系&#xff0c;初始为邻居关系(TWO-WAY)状态&#xff0…...

解决使用Selenium时ChromeDriver版本不匹配问题

在学习Python爬虫过程中如果使用Selenium的时候遇到报错如下session not created: This version of ChromeDriver only supports Chrome version 99… 这说明当前你的chrome驱动版本和浏览器版本不匹配。 例如 SessionNotCreatedException: Message: session not created: This…...

景联文科技加入AIIA联盟数据标注分委会

2025年1月16日&#xff0c;中国人工智能产业发展联盟&#xff08;简称AIIA&#xff09;数据委员会数据标注分委会&#xff08;以下简称“分委会”&#xff09;正式成立。景联文科技成为第一批AIIA联盟数据标注分委会委员单位。 数据标注分委会的成立旨在搭建数据标注领域产学研…...

IoTDB结合Mybatis使用示例(增删查改自定义sql等)

IoTDB时序库是当前越来越流行以及基于其优势各大厂商越来越易接受的国产开源时序数据库&#xff0c;针对IoTDB的内容不做过多介绍&#xff0c;在使用该时序库时&#xff0c;往往有一定入门门槛&#xff0c;不同于关系型数据库或文档型数据库那般方便维护和接入开发&#xff0c;…...

穷举vs暴搜vs深搜vs回溯vs剪枝系列一>解数独

题目&#xff1a; 解析&#xff1a; 部分决策树&#xff1a; 代码设计&剪枝&回溯&#xff1a; 代码&#xff1a; class Solution {private boolean[][] row, col;private boolean[][][] gird; public void solveSudoku(char[][] board) {//下标->数字&#xff…...

C#@符号在string.Format方法中作用

本文详解@符号在string.Format方法中作用。...

mysql 学习2 MYSQL数据模型,mysql内部可以创建多个数据库,一个数据库中有多个表;表是真正放数据的地方,关系型数据库 。

在第一章中安装 &#xff0c;启动mysql80 服务后&#xff0c;连接上了mysql&#xff0c;那么就要 使用 SQL语句来 操作mysql数据库了。那么在学习 SQL语言操作 mysql 数据库 之前&#xff0c;要对于 mysql数据模型有一个了解。 MYSQL数据模型 在下图中 客户端 将 SQL语言&…...