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

【智能家居】面向对象编程OOP和设计模式(工厂模式)

面向对象编程
类和对象
面向对象编程和面向过程编程区别

设计模式
软件设计模式按类型分
工厂模式

面向对象编程

面向对象编程(Object-Oriented Programming,OOP)是一种程序设计范式,其中程序被组织成对象的集合,每个对象都是类的实例。面向对象编程的核心思想是将系统中的实体抽象为对象,这些对象具有属性和行为,并且能够相互交互。

基本概念:

  1. 类(Class): 类是对象的模板或蓝图,定义了一类对象所共有的属性和方法。类是抽象的,不占用内存空间,但可以用来创建具体的对象。

  2. 对象(Object): 对象是类的实例,是具体的实体。对象包含了类定义的属性和方法,并占用内存空间。

  3. 属性(Attribute): 类中的数据成员,用于描述对象的特征。

  4. 方法(Method): 类中的函数成员,用于描述对象的行为。

  5. 封装(Encapsulation): 封装是将类的实现细节隐藏起来,只暴露必要的接口。通过使用访问修饰符,如public、private等,来控制对类的成员的访问。

  6. 继承(Inheritance): 继承是一种机制,允许一个类继承另一个类的属性和方法。子类可以重用父类的代码,同时可以在子类中添加或修改功能。

  7. 多态(Polymorphism): 多态是指对象可以以多种形态存在。同一方法调用可以在不同的对象上产生不同的行为,包括方法重载和方法重写。

优点:

  1. 可重用性(Reusability): 可以通过继承机制实现代码的重用,减少重复编写相似功能的代码。

  2. 封装性(Encapsulation): 将数据和行为封装在类中,提高了代码的安全性和可维护性。

  3. 扩展性(Extensibility): 可以通过继承和多态机制来扩展已有的代码。

  4. 灵活性(Flexibility): 对象可以在运行时动态地改变其状态和行为,提高了系统的灵活性和可扩展性。

  5. 可维护性(Maintainability): 由于具有良好的封装性,修改一个类不会影响到其他部分,便于维护和升级。

实例:

# 定义一个简单的类
class Dog:def __init__(self, name, age):self.name = nameself.age = agedef bark(self):return "Woof!"# 创建对象
my_dog = Dog("Buddy", 3)# 访问对象的属性和调用方法
print(f"My dog's name is {my_dog.name} and it says {my_dog.bark()}.")

在这个例子中,Dog 是一个类,my_dog 是该类的一个对象。对象具有属性(nameage)和方法(bark)。通过面向对象编程,可以更自然地模拟现实世界的实体和交互。

类和对象

在面向对象编程(Object-Oriented Programming,简称OOP)中,类(Class)和对象(Object)是两个基本的概念。

  1. 类(Class): 类是一种抽象的数据类型,是对一类对象的抽象描述。它定义了对象的属性和行为。类是一个模板或蓝图,它描述了一组对象共有的特征和行为。例如,如果有一个"汽车"类,那么该类可能包括属性(如颜色、品牌、型号)和方法(如启动、停止、加速)。

  2. 对象(Object): 对象是类的实例,是具体的实体。可以将类看作是对象的模板,而对象则是类的实例化。使用类创建对象时,对象会继承类中定义的属性和方法。例如,如果有一个"汽车"类,那么一辆具体的汽车就是该类的一个对象,具有特定的颜色、品牌和型号。

下面是一个简单的Python示例,演示了类和对象的概念:

# 定义一个简单的类
class Car:# 类的构造函数def __init__(self, color, brand, model):self.color = colorself.brand = brandself.model = model# 类的方法def start_engine(self):print("Engine started!")def stop_engine(self):print("Engine stopped!")# 创建两个Car类的对象
car1 = Car("Red", "Toyota", "Camry")
car2 = Car("Blue", "Honda", "Accord")# 访问对象的属性和调用方法
print(car1.color)  # 输出:Red
car2.start_engine()  # 输出:Engine started!

在这个例子中,Car是一个类,car1car2是该类的两个对象。这些对象都有颜色、品牌和型号等属性,以及启动和停止引擎等方法。类的定义提供了一种组织和封装代码的方式,使得代码更具有可维护性和可扩展性。

  • 类是面向对象程序设计实现信息封装的基础。类是一种用户定义的引用数据类型(结构体),也称类类型。每个类包含数据说明和一组操作数据或传递消息的函数。
  • 类的实例称为对象。

面向对象编程和面向过程编程区别

面向对象编程(Object-Oriented Programming,OOP)和面向过程编程(Procedural Programming)在一些方面的主要区别:

面向对象 和 面向过程 区别

面向对象 和 面向过程 区别

特征面向对象编程面向过程编程
基本单位对象函数(或过程)
数据与行为封装在对象中,对象具有属性和方法数据和函数分离,通过函数操作数据
关系类与对象,继承与多态数据和函数的组织方式
可维护性较好,封装性、继承性、多态性提高了可维护性相对较好,但较面向对象略显复杂
复杂性相对较高,但更适合处理大规模、复杂的系统相对较低,适用于小规模、简单的问题
灵活性较高,通过继承和多态,可灵活地扩展和修改代码较低,需更改函数来添加新功能
示例Java、Python、C++C、Fortran

设计模式

设计模式简介

设计模式是在软件设计中常用的一些解决方案的总结和提炼,它是对一些常见问题的解决方法的一种描述。设计模式不是一种具体的代码实现,而是一种解决问题的思想和方法的指导,它提供了一套经过验证的、可重用的设计思想,有助于开发人员设计出更加灵活、可维护和可扩展的代码。

下面简要介绍一些常见的设计模式:

  1. 工厂模式(Factory Pattern): 通过定义一个创建对象的接口,由子类决定实例化哪一个类。

  2. 抽象工厂模式(Abstract Factory Pattern): 提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们的具体类。

  3. 单例模式(Singleton Pattern): 保证一个类只有一个实例,并提供一个全局访问点。

  4. 建造者模式(Builder Pattern): 将一个复杂对象的构建与其表示分离,使得同样的构建过程可以创建不同的表示。

  5. 原型模式(Prototype Pattern): 用原型实例指定创建对象的种类,并通过拷贝这些原型创建新的对象。

  6. 适配器模式(Adapter Pattern): 将一个类的接口转换成客户希望的另外一个接口。

  7. 桥接模式(Bridge Pattern): 将抽象部分与它的实现部分分离,使它们都可以独立地变化。

  8. 过滤器模式(Filter Pattern): 使用不同的标准来过滤一组对象,通过逻辑运算以解耦标准和对象。

  9. 组合模式(Composite Pattern): 将对象组合成树形结构以表示“部分-整体”的层次结构。

  10. 装饰器模式(Decorator Pattern): 动态地给一个对象添加一些额外的职责,同时又不改变其结构。

  11. 外观模式(Facade Pattern): 为子系统中的一组接口提供一个一致的界面,以简化子系统的使用。

  12. 享元模式(Flyweight Pattern): 使用共享对象可有效地支持大量的细粒度的对象。

  13. 代理模式(Proxy Pattern): 为其他对象提供一种代理以控制对这个对象的访问。

  14. 责任链模式(Chain of Responsibility Pattern): 为请求创建一个接收者对象的链。

  15. 命令模式(Command Pattern): 将一个请求封装成一个对象,从而使用户可用不同的请求对客户进行参数化。

  16. 解释器模式(Interpreter Pattern): 给定一个语言,定义它的文法的一种表示,并定义一个解释器。

  17. 迭代器模式(Iterator Pattern): 提供一种方法顺序访问一个聚合对象中的各个元素,而又不暴露其内部的表示。

  18. 中介者模式(Mediator Pattern): 用一个中介对象来封装一系列的对象交互。

  19. 备忘录模式(Memento Pattern): 在不破坏封装的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。

  20. 观察者模式(Observer Pattern): 定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖它的对象都得到通知并被自动更新。

  21. 状态模式(State Pattern): 允许一个对象在其内部状态发生改变时改变它的行为。

  22. 空对象模式(Null Object Pattern): 用一个对象来代表一个不存在的对象或者说是不可用的对象。

  23. 策略模式(Strategy Pattern): 定义一系列算法,将每个算法封装起来,并使它们可以互换。

  24. 模板模式(Template Pattern): 定义一个算法的骨架,而将一些步骤延迟到子类中。

  25. 访问者模式(Visitor Pattern): 表示一个作用于某对象结构中的各元素的操作。

  26. MVC 模式(Model-View-Controller Pattern): 将系统分为模型、视图和控制器三个部分,以降低彼此之间的耦合度。

  27. 业务代表模式(Business Delegate Pattern): 为表示层和业务层解耦。

  28. 组合实体模式(Composite Entity Pattern): 用于将多个实体组合成一个实体。

  29. 数据访问对象模式(Data Access Object Pattern): 提供了一种数据访问方式,即将数据存储在不同的源中。

  30. 前端控制器模式(Front Controller Pattern): 使用一个单一的控制器来处理所有请求。

  31. 拦截过滤器模式(Intercepting Filter Pattern): 用于对应用程序的请求或响应做一些预处理/后处理。

  32. 服务定位器模式(Service Locator Pattern): 提供了一个注册服务并获取服务的机制。

  33. 传输对象模式(Transfer Object Pattern): 通过序列化/反序列化来传输数据。

这些设计模式提供了在特定情境下解决问题的通用方法,并可以根据需要组合使用。选择适当的设计模式可以帮助开发人员创建

更灵活、可维护和可扩展的软件。

  • 设计模式(Design pattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。
  • 设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。这些解决方案是众多软件开发人员经过相当长的一段时间的试验和错误总结出来的。
  • 设计模式是一套被反复使用的、多数人知晓的、经过分类编目的代码设计经验的总结
  • 使用设计模式是为了重用代码、让代码更容易被他人理解、保证代码可靠性
  • 设计模式通常描述了一组相互紧密作用的类与对象。

软件设计模式按类型分

软件设计模式是在软件设计中经常遇到的一些问题的解决方案的通用模板。这些设计模式并不是可直接翻译成代码的具体算法,而是一种思想和组织结构,能够帮助程序员解决某类常见问题,并使软件更容易理解、可维护和可扩展。设计模式通常分为三种类型:创建型模式、结构型模式和行为型模式。

以下是一些常见的软件设计模式:

1. 创建型模式(Creational Patterns):

  • 工厂模式(Factory Pattern): 定义一个用于创建对象的接口,让子类决定实例化哪个类。
  • 抽象工厂模式(Abstract Factory Pattern): 提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们的具体类。
  • 单例模式(Singleton Pattern): 确保一个类只有一个实例,并提供一个全局访问点。
  • 建造者模式(Builder Pattern): 将一个复杂对象的构建与其表示分离,使得同样的构建过程可以创建不同的表示。
  • 原型模式(Prototype Pattern): 通过复制现有对象来创建新对象。

2. 结构型模式(Structural Patterns):

  • 适配器模式(Adapter Pattern): 将一个类的接口转换成客户端希望的另外一个接口。
  • 桥接模式(Bridge Pattern): 将抽象部分与它的实现部分分离,使它们都可以独立地变化。
  • 过滤器模式(Filter Pattern): 使用不同的标准来过滤一组对象,通过逻辑运算以解耦标准和对象。
  • 组合模式(Composite Pattern): 将对象组合成树形结构以表示“部分-整体”的层次结构。
  • 装饰器模式(Decorator Pattern): 动态地给一个对象添加一些额外的职责,同时又不改变其结构。
  • 外观模式(Facade Pattern): 为子系统中的一组接口提供一个一致的界面,以简化子系统的使用。
  • 享元模式(Flyweight Pattern): 使用共享对象可有效地支持大量的细粒度的对象。
  • 代理模式(Proxy Pattern): 为其他对象提供一种代理以控制对这个对象的访问。

3. 行为型模式(Behavioral Patterns):

  • 责任链模式(Chain of Responsibility Pattern): 为请求创建一个接收者对象的链。
  • 命令模式(Command Pattern): 将一个请求封装成一个对象,从而使用户可用不同的请求对客户进行参数化。
  • 解释器模式(Interpreter Pattern): 给定一个语言,定义它的文法的一种表示,并定义一个解释器。
  • 迭代器模式(Iterator Pattern): 提供一种方法顺序访问一个聚合对象中的各个元素,而又不暴露其内部的表示。
  • 中介者模式(Mediator Pattern): 用一个中介对象来封装一系列的对象交互。
  • 备忘录模式(Memento Pattern): 在不破坏封装的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。
  • 观察者模式(Observer Pattern): 定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖它的对象都得到通知并被自动更新。
  • 状态模式(State Pattern): 允许一个对象在其内部状态发生改变时改变它的行为。
  • 空对象模式(Null Object Pattern): 用一个对象来代表一个不存在的对象或者说是不可用的对象。
  • 策略模式(Strategy Pattern): 定义一系列算法,将每个算法封装起来,并使它们可以互换。
  • 模板模式(Template Pattern): 定义一个算法的骨架,而将一些步骤延迟到子类中。
  • 访问者模式(Visitor Pattern): 表示一个作用于某对象结构中的各元素的操作。

这些设计模式提供了通用的解决方案,但并不是一成不变的规则,应根据具体的问题和场景选择合适的设计模式。同时,过度使用设计模式也可能导致代码变得复杂,因此在应用设计模式时需要权衡。

工厂模式

简单工厂模式(Simple Factory Pattern)是一种创建型设计模式,它属于工厂模式的一种,主要用于创建对象。在简单工厂模式中,有一个工厂类负责根据客户端的需求创建不同的对象。

结构:

  • 工厂类(Factory): 负责根据客户端的要求创建相应的产品对象。
  • 产品接口(Product): 定义了产品的接口或抽象类,所有具体产品都要实现这个接口或继承这个抽象类。
  • 具体产品类(Concrete Product): 实现了产品接口,是被创建的具体对象。

特点:

  1. 简单工厂只有一个工厂类,而不像抽象工厂模式那样有多个工厂类。
  2. 客户端通过工厂类来创建产品,而无需直接实例化具体产品。
  3. 工厂类负责决定创建哪种产品,客户端只需知道产品的类型即可。

示例代码:

# 产品接口
class Product:def operation(self):pass# 具体产品A
class ConcreteProductA(Product):def operation(self):return "ConcreteProductA operation"# 具体产品B
class ConcreteProductB(Product):def operation(self):return "ConcreteProductB operation"# 简单工厂类
class SimpleFactory:@staticmethoddef create_product(product_type):if product_type == "A":return ConcreteProductA()elif product_type == "B":return ConcreteProductB()else:raise ValueError("Invalid product type")# 客户端代码
def client_code(factory, product_type):product = factory.create_product(product_type)result = product.operation()return result# 使用
factory = SimpleFactory()
result_A = client_code(factory, "A")
result_B = client_code(factory, "B")print(result_A)  # 输出:ConcreteProductA operation
print(result_B)  # 输出:ConcreteProductB operation

在这个示例中,SimpleFactory 是工厂类,负责根据客户端的请求创建具体产品对象。Product 是产品接口,定义了产品的操作。ConcreteProductAConcreteProductB 是具体产品类,实现了产品接口。客户端通过调用工厂类的 create_product 方法来创建不同类型的产品,而无需关心具体产品类的实现。

虽然简单工厂模式简化了对象的创建过程,但它的缺点是如果要添加新的产品,需要修改工厂类的代码,违反了开闭原则。因此,它适用于产品种类较少且不经常变化的情况。

  • 工厂模式(Factory Pattern)是 最常用的设计模式之一。
  • 这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。
  • 在工厂模式中,我们在创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象

相关文章:

【智能家居】面向对象编程OOP和设计模式(工厂模式)

面向对象编程 类和对象 面向对象编程和面向过程编程区别 设计模式 软件设计模式按类型分 工厂模式 面向对象编程 面向对象编程(Object-Oriented Programming,OOP)是一种程序设计范式,其中程序被组织成对象的集合,每…...

Docker安装Memcached+Python调用

简介:Memcached是一个通用的分布式内存缓存系统。它通常用于通过在RAM中缓存数据和对象来加速动态数据库驱动的网站,以减少必须读取外部数据源(如数据库或API)的次数。Memcached的API提供了一个分布在多台机器上的非常大的哈希表。…...

网页开发 HTML

目录 HTML概述 HTML结构 HTML标签语法 基本标签 标题标签 换行标签 段落标签 文本格式化标签 特殊符号 div和span标签 超链接标签 锚点 img标签 列表标签 表格标签 表单标签 HTML概述 HTML,即超文本标记语言(HyperText Markup Language …...

SHAP(五):使用 XGBoost 进行人口普查收入分类

SHAP(五):使用 XGBoost 进行人口普查收入分类 本笔记本演示了如何使用 XGBoost 预测个人年收入超过 5 万美元的概率。 它使用标准 UCI 成人收入数据集。 要下载此笔记本的副本,请访问 github。 XGBoost 等梯度增强机方法对于具有…...

LeetCode 8 字符串转整数

题目描述 字符串转换整数 (atoi) 请你来实现一个 myAtoi(string s) 函数,使其能将字符串转换成一个 32 位有符号整数(类似 C/C 中的 atoi 函数)。 函数 myAtoi(string s) 的算法如下: 读入字符串并丢弃无用的前导空格检查下一…...

前缀和 LeetCode1423. 可获得的最大点数

几张卡牌 排成一行,每张卡牌都有一个对应的点数。点数由整数数组 cardPoints 给出。 每次行动,你可以从行的开头或者末尾拿一张卡牌,最终你必须正好拿 k 张卡牌。 你的点数就是你拿到手中的所有卡牌的点数之和。 给你一个整数数组 cardPoi…...

探索意义的深度:自然语言处理中的语义相似性

一、说明 语义相似度,反应出计算机对相同内容,不同表达的识别能力。因而识别范围至少是个句子,最大范围就是文章,其研究方法有所区别。本文将按照目前高手的研究成绩,作为谈资介绍给诸位。 二、语义相似度简介 自然语言…...

WT2605-24SS高品质录音语音芯片:实时输出、不保存本地,引领音频技术新潮流

随着科技的快速发展,高品质音频技术成为了现代社会不可或缺的一部分。在这个追求高品质、高效率的时代,唯创知音推出的WT2605-24SS高品质录音芯片,以其独特的功能和卓越的性能,引领着音频技术的新潮流。 首先,WT2605-…...

Git 合并冲突解决步骤

Git 合并冲突解决步骤 1. 找到并打开冲突文件 定位到发生冲突的文件。可以通过 Git 的命令行输出找到这些文件。例如: pom.xmlsrc/main/java/com/zzm/config/SecurityConfig.javasrc/main/java/com/zzm/service/chat/UserConversationsServiceImpl.javasrc/main/…...

Windows核心编程 注册表

目录 注册表概述 打开关闭注册表 创建删除子健 查询写入删除键值 子健和键值的枚举 常用注册表操作 注册表概述 注册表是Windows操作系统、硬件设备以及客户应用程序得以正常运行和保存设置的核心"数据库",也可以说是一个非常巨大的树状分层结构的…...

【算法专题】二分查找

二分查找 二分查找1. 二分查找2. 在排序数组中查找元素的第一和最后一个位置3. 搜索插入位置4. x 的平方根5. 山脉数组的峰顶索引6. 寻找峰值7. 寻找旋转排序数组中的最小值8. 点名 二分查找 1. 二分查找 题目链接 -> Leetcode -704.二分查找 Leetcode -704.二分查找 题…...

中国消费电子行业发展趋势及消费者需求洞察|徐礼昭

一、引言 近年来,随着科技的飞速发展,消费电子行业面临着前所未有的挑战与机遇。本文将从行业发展趋势、消费者需求洞察以及企业数字化转型的方向和动作三个方面,对消费电子行业进行深入剖析。 二、消费电子行业发展趋势 5G技术的普及和应…...

UE学习C++(1)创建actor

创建新C类 在 虚幻编辑器 中,点击 文件(File) 下拉菜单,然后选择 新建C类...(New C Class...) 命令: 此时将显示 选择父类(Choose Parent Class) 菜单。可以选择要扩展的…...

【CTA认证】Android8实现android6以下的应用运行时也要申请权限

需求 CTA入网认证,要求低版本比如Android6以下的应用,运行时,也需要有运行时权限(Runtime Permission)功能,不能默认就取到权限,必须人工在设置中打开才可。 环境 Android 8 实现 frameworks 修改思路是所有APP都…...

gRPC Java、Go、PHP使用例子

文章目录 1、Protocol Buffers定义接口1.1、编写接口服务1.2、Protobuf基础数据类型 2、服务器端实现2.1、生成gRPC服务类2.2、Java服务器端实现 3、java、go、php客户端实现3.1、Java客户端实现3.2、Go客户端实现3.3、PHP客户端实现 本文例子是在Window平台测试,Ja…...

前端知识笔记(十九)———px,em,rem,vw,vh之间的区别

一,px(像素):像素是屏幕上显示的最小单位,它是固定的,不随页面缩放而改变大小。在响应式设计中,使用像素单位可能会导致布局在不同屏幕尺寸上显示不一致。例如:现在在你电脑上一个字…...

docker部署frp穿透内网

文章目录 (1)部署frps服务器(2)部署frpc客户端(3)重启与访问frp(4)配置nginx反向代理 (1)部署frps服务器 docker安装参考文档:docker基本知识 1…...

使用pytorch从零开始实现迷你GPT

生成式建模知识回顾: [1] 生成式建模概述 [2] Transformer I,Transformer II [3] 变分自编码器 [4] 生成对抗网络,高级生成对抗网络 I,高级生成对抗网络 II [5] 自回归模型 [6] 归一化流模型 [7] 基于能量的模型 [8] 扩散模型 I, 扩散模型 II…...

tp6框架 万级数据入库 php函数优化

将万级数据入库并判断有无 没有则新增 上篇是用mysql的replace into实现 本篇是另一种方法 这是我的数据格式: $data [ [ KCH > value1, other_column1 > value_other1_1, other_column2 > value_other2_1, ], [ KCH > value2, other_column…...

TwinCAT3一个PLC设备里多个程序工程之间通讯

目录 1、创建TwinCAT3工程,再分别创建两个PLC程序工程 2、PLC1工程中添加如下代码,然后编译重新生成PLC1工程 3、PLC2工程中添加如下代码,然后编译重新生成PLC2工程 4、变量关联 5、一个PLC运行多个PLC工程设置 7、工程下载链接 1、创建…...

python弹球小游戏

import pygame import random# 游戏窗口大小 WIDTH 800 HEIGHT 600# 定义颜色 WHITE (255, 255, 255) BLACK (0, 0, 0) RED (255, 0, 0) GREEN (0, 255, 0) BLUE (0, 0, 255)# 球的类 class Ball:def __init__(self):self.radius 10self.speed [random.randint(2, 4),…...

mongoose学习记录

mongoose安装和连接数据库 npm i mongoose导入mongoose const mongoose require(mongoose) mongoose.set("strictQuery",true)连接数据库 mongoose.connect(mongodb:127.0.0.1:27017/test)设置回调 mongoose.connection.on(open,()>{console.log("连接成…...

边缘与云或边缘加云:前进的方向是什么?

边缘计算使数据处理更接近数据源,以及由此产生的行动或决策的对象。通过设计,它可以改变数十亿物联网和其他设备存储、处理、分析和通信数据的方式。 边缘计算使数据处理更接近数据源,以及由此产生的行动或决策的对象。这与传统的体系结构形成…...

蓝桥杯第1037题子串分值和 C++ 字符串 逆向思维 巧解

题目 思路和解题方法 方案一——遍历哈希表 仅能过60%样例,大多数同学都用的该方法&#xff0c;就不过多赘述 #include <iostream> #include <unordered_map> using namespace std; int main() {string s;cin >> s;int n s.size();int res n;for (int i 0…...

力扣题:字符串的反转-11.23

力扣题-11.23 [力扣刷题攻略] Re&#xff1a;从零开始的力扣刷题生活 力扣题1&#xff1a;557. 反转字符串中的单词 III 解题思想&#xff1a;先读取单词&#xff0c;然后将单词进行翻转即可 class Solution(object):def reverseWords(self, s):""":type s…...

【软件测试】盘一盘工作中遇到的 Redis 异常测试

在测试工作中&#xff0c;涉及到与 redis 交互的场景变的越来越多了。关于redis本身就不作赘述了&#xff0c;网上随便搜&#xff0c;本人也做过一些整理。 今天只来复盘一下&#xff0c;在测试过程中与 redis 的二三事儿。其中提到的案例是经过抽象化的&#xff0c;用作辅助说…...

14.Oracle中RegExp_Like 正则表达式基本用法

--基本用法&#xff0c;是否包含某字符串 like %36% select * from k_micfo where regexp_like(loginid,36);if regexp_like(str,^[0-9\.]$) --只包含数字0-9&#xff0c;,小数点.--oracle判断字段是否是纯数字 (四种写法结果一样&#xff09; select * from k_micfo where r…...

Docker Swarm总结+Jenkins安装配置与集成(5/5)

博主介绍&#xff1a;Java领域优质创作者,博客之星城市赛道TOP20、专注于前端流行技术框架、Java后端技术领域、项目实战运维以及GIS地理信息领域。 &#x1f345;文末获取源码下载地址&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;&#x1f3fb;…...

docker安装Sentinel zipkin

文章目录 引言I Sentinel安装1.1 运行容器1.2 DOCKERFILE 参考1.3 pom 依赖1.4 .yml配置(整合springboot)II 资源保护2.1 Feign整合Sentinel2.2 CommonExceptionAdvice:限流异常处理类III zipkin引言 消息服务和请求第三方服务可不配置Sentinel。 </...

利用python实现文件压缩打包的功能

主要是利用了zipfile实现文件压缩打包&#xff0c;简单实例代码如下&#xff1a; import zipfilewith zipfile.ZipFile("archive.zip",w) as zipf:zipf.write("config.ini")zipf.write("test.py") 其中的模式 w表示如果没有该文件则创建该文件…...