设计模式的学习思路
学习设计模式确实需要一定的时间和实践,尤其是对于刚入门的人来说,因为一开始可能会感到有些混淆,尤其是当多个设计模式看起来有相似之处时。本博客是博主学习设计模式的思路历程,大家可以一起学习进步。设计模式学习-CSDN博客
1. 理解设计模式的本质
首先,要理解设计模式的本质。设计模式并不是具体的代码实现,而是解决某类问题的通用解决方案。设计模式的目标通常是提高代码的灵活性、可重用性和可扩展性。
每个设计模式都是为了应对特定类型的问题而提出的,这些问题可能是:
- 对象如何创建
- 如何组织和组合对象
- 如何分配对象之间的职责
- 如何优化对象之间的交互
2. 学习设计模式的顺序
设计模式有很多,但学习时建议按以下顺序进行,因为这些模式从简单到复杂,帮助你逐步建立起对模式的理解:
1) 基础模式(创建型模式)
创建型模式主要关注如何实例化对象,常见的有:
- 单例模式(保证类只有一个实例)
- 工厂方法模式(通过工厂方法创建对象)
- 抽象工厂模式(提供一组相关对象的创建)
- 建造者模式(分步骤构建复杂对象)
- 原型模式(通过复制对象来创建新对象)
2) 结构型模式
结构型模式主要关注如何将类和对象组织成更大的结构,常见的有:
- 适配器模式(将接口转换为客户端需要的接口)
- 桥接模式(分离抽象和实现)
- 组合模式(将对象组合成树形结构)
- 装饰者模式(动态地添加功能)
- 外观模式(简化接口,提供统一的入口)
- 享元模式(通过共享对象来减少内存消耗)
- 代理模式(为对象提供代理)
3) 行为型模式
行为型模式主要关注对象之间的交互和职责分配,常见的有:
- 观察者模式(定义依赖关系,自动通知)
- 策略模式(封装算法,便于切换)
- 命令模式(将请求封装为对象)
- 状态模式(基于对象状态的行为变化)
- 模板方法模式(定义算法骨架,允许子类实现具体步骤)
- 迭代器模式(遍历集合而不暴露内部结构)
- 责任链模式(请求在多个处理者之间传递)
- 中介者模式(通过中介者简化多个对象的交互)
- 备忘录模式(保存和恢复对象的状态)
- 访问者模式(为对象结构添加新操作)
3. 理解每个模式的结构与组件
每个设计模式都有一个特定的结构,了解这个结构能够帮助你理解模式的核心。以策略模式为例,它通常包括:
- Context:上下文,使用策略的类。
- Strategy:策略接口,定义了算法的共同接口。
- ConcreteStrategy:具体策略类,提供算法的实现。
4. 区分使用场景
1) 创建对象的场景
- 工厂模式:当你需要创建的对象类型很多,并且你希望通过工厂方法来集中控制对象的创建时,使用工厂模式。
- 单例模式:当你需要确保类只有一个实例,并且该实例需要全局共享时,使用单例模式。
- 建造者模式:当你需要创建一个复杂的对象,且这个对象的创建过程包含多个步骤时,使用建造者模式。
2) 对象组合和组织的场景
- 组合模式:当你需要将对象组合成树形结构并统一处理时,使用组合模式。比如文件系统、UI组件。
- 适配器模式:当你需要让不兼容的接口能一起工作时,使用适配器模式。比如第三方库和系统间接口的适配。
- 桥接模式:当你希望将抽象和实现分离,并且能够独立扩展这两个部分时,使用桥接模式。
3) 行为变化和职责分配的场景
- 观察者模式:当你希望在一个对象的状态变化时通知多个依赖者时,使用观察者模式。比如事件系统。
- 策略模式:当你需要在不同算法之间进行切换时,使用策略模式。比如支付方式的选择(信用卡支付、微信支付等)。
- 状态模式:当一个对象的行为在不同的状态下有不同表现时,使用状态模式。比如游戏中的角色状态(待机、攻击、受伤等)。
4) 优化代码灵活性与扩展性的场景
- 装饰者模式:当你需要动态地扩展对象的功能时,使用装饰者模式。比如为UI控件添加新功能(例如为按钮添加点击事件)。
- 命令模式:当你需要将请求封装为对象并支持撤销、重做等操作时,使用命令模式。比如文本编辑器中的“撤销”操作。
5. 例子简要说明
设计模式有很多种,它们分别适用于不同的应用场景,解决不同类型的问题。下面我将按类别(创建型、结构型、行为型)列出常见的设计模式,以及它们的优缺点和使用场景。
一、创建型模式
创建型模式主要关注如何实例化对象。它们通过不同方式将对象的创建与使用解耦,提高系统的灵活性。
1. 单例模式 (Singleton)
- 优点:
- 保证某个类只有一个实例,并提供全局访问点。
- 避免了重复创建对象,节省资源。
- 缺点:
- 因为全局唯一的实例,可能导致系统的某些部分耦合过紧。
- 不利于单元测试(可能需要额外的模拟机制)。
- 使用场景:
- 需要控制全局访问的实例,例如数据库连接池、配置管理器、日志管理器等。
2. 工厂方法模式 (Factory Method)
- 优点:
- 客户端代码不需要知道具体的类,减少了系统之间的耦合。
- 可以动态决定实例化的类,便于扩展。
- 缺点:
- 需要为每一个产品类创建一个工厂类,增加代码量。
- 使用场景:
- 客户端不知道需要哪一类对象,或者具体的类在运行时才决定。
- 对象创建的代码可能发生变化,不希望客户端代码受到影响。
3. 抽象工厂模式 (Abstract Factory)
- 优点:
- 提供一个接口,能够创建一系列相关或相互依赖的对象。
- 系统不需要知道具体的产品类,减少了耦合。
- 缺点:
- 引入抽象工厂和多个产品族,增加系统复杂度。
- 使用场景:
- 需要创建一组相关的对象,且这些对象可能属于不同的产品族。
- 对象之间有一些共同的特性,但可能有不同的实现。
4. 建造者模式 (Builder)
- 优点:
- 可以构建复杂对象,且构建过程可以灵活控制。
- 可以将复杂的对象创建过程与表示分离。
- 缺点:
- 需要定义多个具体建造者,增加代码量。
- 使用场景:
- 当一个对象的构建过程比较复杂,且需要创建多个变体时。
- 需要将对象构建的过程与表示分离,适用于需要一步一步构建对象的情况。
5. 原型模式 (Prototype)
- 优点:
- 可以通过复制现有的对象来创建新对象,避免了重复创建。
- 支持对象的克隆和配置,可以动态改变对象的状态。
- 缺点:
- 需要为所有类实现克隆方法,增加了实现复杂性。
- 使用场景:
- 当创建一个对象的代价很大时,克隆对象更为高效。
- 系统需要通过现有对象生成新的对象。
二、结构型模式
结构型模式关注类和对象如何组合以形成更大的结构。
1. 适配器模式 (Adapter)
- 优点:
- 使得不兼容的接口能够协同工作,增加了系统的可扩展性。
- 可以将现有代码复用而无需修改。
- 缺点:
- 增加了额外的类,可能会使系统复杂化。
- 使用场景:
- 需要将两个不兼容的接口结合在一起时。
- 系统需要调用不同接口的类,但是这些类的接口不兼容。
2. 桥接模式 (Bridge)
- 优点:
- 将抽象和实现分离,便于扩展。
- 可以独立地变化抽象和实现部分,增加系统灵活性。
- 缺点:
- 系统中类的数量会增加,可能增加系统复杂性。
- 使用场景:
- 系统需要在多个平台之间独立变化时,或者有多种产品、平台、功能组合。
- 需要解耦接口和实现的细节。
3. 组合模式 (Composite)
- 优点:
- 使客户端能够一致地对待单个对象和对象组合。
- 可以简化客户端代码,提高代码的可维护性。
- 缺点:
- 使得设计更加复杂,可能需要更多的抽象。
- 使用场景:
- 树形结构的数据表示(如文件系统)。
- 需要统一处理树形结构中节点和叶子节点的场景。
4. 装饰器模式 (Decorator)
- 优点:
- 动态地给对象增加职责,比继承更加灵活。
- 避免了类的膨胀,增加了扩展性。
- 缺点:
- 会产生多个小类,增加系统的复杂度。
- 使用场景:
- 需要给对象动态添加功能,且不想通过继承来实现。
- 需要在不修改类的情况下扩展对象的功能。
5. 外观模式 (Facade)
- 优点:
- 提供了一个简化的接口,减少了系统复杂性。
- 可以将客户端与系统的多个子系统解耦。
- 缺点:
- 可能会引入不必要的抽象,降低系统灵活性。
- 使用场景:
- 需要简化系统接口,隐藏复杂性。
- 系统有多个子系统,需要为子系统提供一个统一的接口。
6. 享元模式 (Flyweight)
- 优点:
- 通过共享相同的对象来减少内存消耗,提高性能。
- 可以节省大量内存,适用于大量对象的场景。
- 缺点:
- 需要管理共享对象的生命周期,增加了复杂性。
- 使用场景:
- 大量相似对象的场景,尤其是对象数量非常多但大部分属性相同的情况。
- 适用于需要大量共享和重复使用的对象。
7. 代理模式 (Proxy)
- 优点:
- 可以控制对真实对象的访问,起到保护、缓存等作用。
- 提高系统的性能,支持懒加载等优化。
- 缺点:
- 增加了系统的复杂度,可能引入不必要的层次。
- 使用场景:
- 控制对某个对象的访问,例如懒加载、虚拟代理。
- 需要保护、缓存或延迟加载某个对象。
三、行为型模式
行为型模式主要关注对象之间的通信和职责分配。
1. 责任链模式 (Chain of Responsibility)
- 优点:
- 允许多个处理对象来处理请求,减少了请求发送者与处理者之间的耦合。
- 可以灵活地添加处理者。
- 缺点:
- 可能导致请求在链中传递太久,降低效率。
- 使用场景:
- 需要多个对象共同处理请求的场景,处理请求的对象顺序不确定时。
2. 命令模式 (Command)
- 优点:
- 将请求发送者与接收者解耦。
- 可以很方便地将请求存储、撤销或重做。
- 缺点:
- 需要创建大量的命令对象,增加系统复杂性。
- 使用场景:
- 需要将请求调用者与请求接收者解耦时。
- 支持撤销、重做操作时。
3. 解释器模式 (Interpreter)
- 优点:
- 适用于一些固定语法和规则的场景,可以非常方便地扩展。
- 缺点:
- 系统可能会变得过于复杂,且难以维护。
- 使用场景:
- 需要处理一个语言或规则的场景,如正则表达式解析、SQL语法分析。
4. 迭代器模式 (Iterator)
- 优点:
- 提供一种方法来顺序访问集合中的元素,不暴露集合的内部结构。
- 缺点:
- 对于某些集合类型来说,可能会存在性能问题。
- 使用场景:
- 需要访问集合中的元素,而不希望暴露集合的实现时。
5. 中介者模式 (Mediator)
- 优点:
- 减少了对象之间的依赖关系,将复杂的交互关系集中管理。
- 通过中介者对象协调其他对象的行为,提高了系统的松耦合性。
- 缺点:
- 中介者可能会变得过于复杂,成为单一责任的“神类”,从而降低灵活性。
- 使用场景:
- 当系统中的多个对象相互依赖,导致紧耦合的情况时。
- 需要集中管理多个对象之间的交互,避免直接引用和依赖。
6. 备忘录模式 (Memento)
- 优点:
- 可以保存对象的状态,便于恢复对象的状态,支持撤销操作。
- 保持对象状态的同时不暴露对象的内部实现。
- 缺点:
- 增加了系统的复杂度和存储空间,因为需要额外的存储状态。
- 使用场景:
- 需要支持撤销/重做功能的应用,如编辑器、文本处理软件等。
- 需要保存和恢复对象状态的场景。
7. 观察者模式 (Observer)
- 优点:
- 当一个对象的状态改变时,能够自动通知依赖的对象。
- 促进了对象之间的松耦合,增加了系统的灵活性。
- 缺点:
- 如果观察者过多,可能导致系统的性能下降。
- 依赖对象的数量无法预见,可能会导致某些依赖对象未被更新。
- 使用场景:
- 需要建立一种一对多的依赖关系,当一个对象的状态变化时,其他依赖对象需要自动更新的情况。
- UI界面更新时,常用于实现发布/订阅模式。
8. 状态模式 (State)
- 优点:
- 通过改变对象的状态来改变其行为,符合状态变化的设计。
- 状态独立,便于扩展和修改。
- 缺点:
- 可能导致系统中的类和状态过多,增加了复杂性。
- 状态类和上下文之间需要更多的协作,可能导致维护困难。
- 使用场景:
- 当一个对象的行为随着其状态变化而变化时。
- 适用于状态机模式,如编程语言的解释器、TCP协议的状态机等。
9. 策略模式 (Strategy)
- 优点:
- 可以动态地选择不同的算法或策略,使得系统更加灵活和可扩展。
- 避免了条件语句的重复使用,减少了代码重复。
- 缺点:
- 需要创建多个策略类,增加了类的数量。
- 客户端必须知道所有的策略,可能需要额外的配置或管理策略。
- 使用场景:
- 需要在运行时动态选择算法或策略的情况。
- 不同的策略在某些情况下有不同的表现,适用于例如排序算法、支付方式等。
10. 模板方法模式 (Template Method)
- 优点:
- 可以将不变的部分留给子类实现,复用父类的公共部分。
- 方便扩展和修改,只需要修改子类中的特定部分。
- 缺点:
- 父类方法的变化可能会影响子类,子类之间的差异性较大时不方便扩展。
- 使用场景:
- 定义一个算法的骨架,允许子类实现某些步骤的场景。
- 常用于框架的开发、代码复用、自动化流程等。
11. 访问者模式 (Visitor)
- 优点:
- 可以在不修改类结构的情况下增加新的操作,符合开放/封闭原则。
- 使得操作可以跨越多个类的属性和方法,具有较好的扩展性。
- 缺点:
- 增加了系统的复杂性,且可能导致访问者与被访问者之间的耦合性增强。
- 适用场景较为特殊,使用不当会使设计过于复杂。
- 使用场景:
- 系统需要对一组不同类的对象执行操作时。
- 需要在不改变类结构的前提下,增加新的操作,如编译器中的语法分析、数据结构的遍历等。
总结:
设计模式是面向对象设计的经典解决方案,不同的设计模式适用于不同的需求和问题。在选择设计模式时,要根据项目的实际情况和需求,综合考虑模式的优缺点,以达到系统高效、可扩展和维护的目标。
- 创建型模式:主要是对象的创建和管理,解决对象实例化和组织结构问题。
- 结构型模式:关注类和对象之间的组织,简化复杂结构,增强系统的可复用性。
- 行为型模式:涉及对象之间的协作,优化通信和职责分配。
相关文章:
设计模式的学习思路
学习设计模式确实需要一定的时间和实践,尤其是对于刚入门的人来说,因为一开始可能会感到有些混淆,尤其是当多个设计模式看起来有相似之处时。本博客是博主学习设计模式的思路历程,大家可以一起学习进步。设计模式学习-CSDN博客 1…...
PgSQL即时编译JIT | 第1期 | JIT初识
PgSQL即时编译JIT | 第1期 | JIT初识 JIT是Just-In-Time的缩写,也就是说程序在执行的时候生成可以执行的代码,然后执行它。在介绍JIT之前,需要说下两种执行方式:解释执行和编译执行。其中解释执行是通过解释器,将代码逐…...
比rsync更强大的文件同步工具rclone
背景 多个复制,拷贝,同步文件场景,最大规模的是每次几千万规模的小文件需要从云上对象存储中拉取到本地。其他的诸如定期数据备份,单次性数据备份。 rsync是单线程的,开源的mrsync是多线程的,但适用范围没…...
【eNSP】OSPF、RIP与静态路由互通实验(四)
OSPF、RIP与静态路由互通实验 实验目的实验要求实验步骤步骤 1:配置R1、R2、R3、R4、R5、R6、R7的端口ip步骤 2:配置R1、R2、R3的OSPF动态路由协议步骤 3:配置R3、R4、R5的RIP动态路由协议步骤 4:配置R3作为边界路由器,…...
MODBUS TCP转CANOpen网关
Modbus TCP转CANopen网关 型号:SG-TCP-COE-210 产品用途 本网关可以实现将CANOpen接口设备连接到MODBUS TCP网络中;并且用户不需要了解具体的CANOpen和Modbus TCP 协议即可实现将CANOpen设备挂载到MODBUS TCP接口的 PLC上,并和CANOpen设备…...
Figure 02迎重大升级!!人形机器人独角兽[Figure AI]商业化加速
11月19日知名人形机器人独角兽公司【Figure AI】发布公司汽车巨头【宝马】最新合作进展,旗下人形机器人Figure 02在生产线上的性能得到了显著提升,机器人组成自主舰队,依托端到端技术,速度提高了400%,执行任务成功率提…...
Linux tcpdump 详解教程
简介 tcpdump 是一款在 Linux 平台上广泛使用的网络抓包工具。它可以捕获整个 TCP/IP 协议族的数据包,并支持对网络层、协议、主机、端口等进行过滤。tcpdump 提供了强大的过滤功能,允许使用 and、or、not 等逻辑语句来筛选数据包,非常适合用…...
o1的风又吹到多模态,直接吹翻了GPT-4o-mini
开源LLaVA-o1:一个设计用于进行自主多阶段推理的新型VLM。与思维链提示不同,LLaVA-o1独立地参与到总结、视觉解释、逻辑推理和结论生成的顺序阶段。 LLaVA-o1超过了一些更大甚至是闭源模型的性能,例如Gemini-1.5-pro、GPT-4o-mini和Llama-3.…...
记录下,用油猴Tampermonkey监听所有请求,绕过seesion
油猴Tampermonkey监听所有请求,绕过seesion 前因后果脚本编写 前因后果 原因是要白嫖一个网站的接口,这个接口的页面入口被隐藏掉了,不能通过页面调用,幸好之前有想过逆向破解通过账号密码模拟登录后拿到token,请求该…...
Golang语言整合jwt+gin框架实现token
1.下载jwt go get -u github.com/dgrijalva/jwt-go2.新建生成token和解析token文件 2.1 新建common文件夹和jwtConfig文件夹 新建jwtconfig.go文件 2.2 jwtconfig.go文件代码 /* Time : 2021/8/2 下午3:03 Author : mrxuexi File : main Software: GoLand */ package jwtC…...
SpringBootTest启动时出现循环依赖问题
在公司项目开发中由于SpringBoot启动类配置了setAllowCircularReferences为true在特定的业务逻辑下需要该配置,但我们需要使用SpringBootTest单元测试的时候引入我们开发的配置文件发现不生效, 解决方法: SpringBootTest(properties "…...
微信小程序——01开发前的准备和开发工具
一、踏上小程序开发之旅前的准备 (一)小程序账号注册 开启注册流程 首先,在浏览器中打开 “微信公众平台”(微信公众平台)。进入平台后,你会看到右上角有一个 “立即注册” 按钮,点击它&#x…...
华为欧拉系统使用U盘制作引导安装华为欧拉操作系统
今天记录一下通过U盘来安装华为欧拉操作系统 华为欧拉操作系统是国产的一个类似于Centos的Linus系统 具体实现操作步骤: 先在官网下载欧拉系统镜像点击跳转到下载 准备好一个大于16g的U盘 ,用于制作U盘启动 下载一个引导程序制作工具,我使用…...
【Java 集合】Collections 空列表细节处理
问题 如下代码,虽然定义为非空 NonNull,但依然会返回空对象,导致调用侧被检测为空引用。 实际上不是Collections的问题是三目运算符返回了null对象。 import java.util.Collections;NonNullprivate List<String> getInfo() {IccReco…...
2021 年 3 月青少年软编等考 C 语言三级真题解析
目录 T1. 找和为 K 的两个元素思路分析T2. Minecraft思路分析T3. 踩方格思路分析T4. 苹果消消乐思路分析T5. 流感传染思路分析T1. 找和为 K 的两个元素 在一个长度为 n ( n < 1000 ) n\ (n < 1000) n (n<1000) 的整数序列中,判断是否存在某两个元素之和为 k k k…...
【PyTorch】Pytorch中torch.nn.Conv1d函数详解
1. 函数定义 torch.nn.Conv1d 是 PyTorch 中用于一维卷积操作的类。定义如下: 官方文档:https://pytorch.ac.cn/docs/stable/generated/torch.nn.Conv1d.html#torch.nn.Conv1d torch.nn.Conv1d(in_channels, out_channels, kernel_size, stride1,paddi…...
Linux运维篇-iscsi存储搭建
目录 概念实验介绍环境准备存储端软件安装使用targetcli来管理iSCSI共享存储 客户端软件安装连接存储 概念 iSCSI是一种在Internet协议上,特别是以太网上进行数据块传输的标准,它是一种基于IP Storage理论的存储技术,该技术是将存储行业广泛…...
通过shell脚本分析部署nginx网络服务
题目: 1.接收用户部署的服务名称 2.判断服务是否安装 已安装;自定义网站配置路径为/www;并创建共享目录和网页文件;重启服务 没有安装;安装对应的软件包 3.测试 判断服务是否成功运行; 已运行&am…...
Cyberchef使用功能之-多种压缩/解压缩操作对比
cyberchef的compression操作大类中有大量的压缩和解压缩操作,每种操作的功能和区别是什么,本章将进行讲解,作为我的专栏《Cyberchef 从入门到精通教程》中的一篇,详见这里。 关于文件格式和压缩算法的理论部分在之前的文章《压缩…...
【http】http协议状态码
目录 1. 说明2. 信息性状态码3. 成功状态码4. 重定向状态码5. 客户端错误状态码6. 服务器错误状态码 1. 说明 1.HTTP协议状态码是指在HTTP通信过程中,服务器向客户端返回的三位数值的数字代码,用于表示服务器对请求的处理结果和状态。2.这些状态码由三个…...
tcpdump交叉编译
TCPDUMP在Libpcap上开发。 首先需要编译libcap。 网上那么多教程,下载地址都只给了一个英文的官网首页, 你尽可以试试,从里面找到下载地址都要费半天时间。 \color{red}网上那么多教程,下载地址都只给了一个英文的官网首页&#…...
Python 脚本程序加密
文章目录 前言编译成 .pyc 文件编译成可执行文件PyInstallerNuitka PyArmor加密 Python 脚本生成可执行文件设置授权管理规则 前言 Python 脚本程序加密推荐。 编译成 .pyc 文件 .pyc 文件是 Python 源码文件 (.py) 编译后的二进制文件,能提高加载速度࿰…...
记录一次mysql的一些操作,mysql的docker,mysql备份,mysql表复制
我是用的是mysql的docker容器版本。 1、使用mysql的docker容器版本 1.1 启动 docker run --name <docker_name> \-e MYSQL_ROOT_PASSWORD<password> \-v /datavolume2/mysql:/var/lib/mysql \-p 3306:3306 \-d hub.atomgit.com/arm64v8/mysqldocker_name是启动后…...
Slate文档编辑器-WrapNode数据结构与操作变换
Slate文档编辑器-WrapNode数据结构与操作变换 在之前我们聊到了一些关于slate富文本引擎的基本概念,并且对基于slate实现文档编辑器的一些插件化能力设计、类型拓展、具体方案等作了探讨,那么接下来我们更专注于文档编辑器的细节,由浅入深聊…...
2024信创数据库TOP30之蚂蚁集团OceanBase
数据库作为存储、管理和分析这些数据的关键工具,其地位自然不言而喻。随着信息技术的日新月异,数据库技术也在不断演进,以满足日益复杂多变的市场需求。近日,备受瞩目的“2024信创数据库TOP30”榜单由DBC联合CIW/CIS权威发布&…...
Unity类银河战士恶魔城学习总结(P130 SkillTree UI 技能树)
【Unity教程】从0编程制作类银河恶魔城游戏_哔哩哔哩_bilibili 教程源地址:https://www.udemy.com/course/2d-rpg-alexdev/教程源地址:https://www.udemy.com/course/2d-rpg-alexdev/ 本章节实现了技能树的UI设置 UI_SKillTreeSlot.cs 这段代码定义了…...
Web服务器
简介 www是world wide web的缩写,也就是全球信息广播的意思。通常说的上网就是使用www来查询用户 所需要的信息。www可以结合文字、图形、影像以及声音等多媒体,并通过可以让鼠标单击超链接的方 式将信息以Internet传递到世界各处去。 与其他服务器类似…...
.net将List<实体1>的数据转到List<实体2>
比如说有两个实体Class,如下: //实体1 public class People {public string Name {get;set;}public int Age {get;set;} } //实体2 public class Student {public string Name {get;set;}public int Age {get;set;}public string ClassRoom {get;set;}/…...
django从入门到精通(五)——表单与模型
好的,下面将详细介绍 Django 的表单与模型,包括它们的定义、使用、如何在 Django Admin 中结合使用,以及相关的字段类型和验证机制。 Django 模型与表单 1. Django 模型 Django 模型是一个 Python 类,用于定义数据库中的数据结…...
Keepalived部署
Keepalived部署 安装配置单VIP模式配置master节点查看节点IP信息配置 keepalived.conf启动且加入开机自启查看是否生效 配置backup节点配置 keepalived.conf启动且加入开机自启查看是否生效 主备测试 多VIP配置 keepalived.conf查看IP 安装 dnf install -y keepalived配置 单…...
怀旧游戏打卡清单(TODO)
感觉忙碌了好久好久,真的好想休息一下。。 整理一下将来休息时候的打卡清单,不工作了去个海边狂打游戏,想想就惬意啊。当然,最好找个work from home,去海边找个酒店上班。挣钱休息两不误。。。 能不能实现另说…...
ssm160基于Java技术的会员制度管理的商品营销系统的设计与实现+vue(论文+源码)_kaic
毕 业 设 计(论 文) 题目:商品营销系统计与实现 摘 要 现代经济快节奏发展以及不断完善升级的信息化技术,让传统数据信息的管理升级为软件存储,归纳,集中处理数据信息的管理方式。本商品营销系统就是在这…...
springboot实战(15)(注解@JsonFormat(pattern=“?“)、@JsonIgnore)
目录 一、请求映射路径相同,根据请求方式区分不同接口。 1、例子。 二、注解JsonFormat。 1、基本介绍。 2、日期和时间格式化。 3、时区设置。 4、反序列化。 三、注解JsonIgnore。 1、基本介绍。 2、主要作用。 一、请求映射路径相同,根据请求方式区分…...
Redis面试篇笔记(持续更新)
一、redis主从集群 单节点redis的并发能力是由上限的,要进一步提高redis的并发能力可以搭建主从集群,实现读写分离,一主多从,主节点写数据,从节点读数据 部署redis主从节点的docker-compose文件命令解析 version: &q…...
Applied Intelligence投稿
一、关于手稿格式: 1、该期刊是一个二区的,模板使用Springer nature格式, 期刊投稿要求,详细期刊投稿指南,大部分按Soringernature模板即可,图片表格声明参考文献命名要求需注意。 2、参考文献ÿ…...
WPF窗体基本知识-笔记-命名空间
窗体程序关闭方式 命名空间:可以理解命名空间的作用为引用下面的控件对象 给控件命名:一般都用x:Name,也可以用Name但是有的控件不支持 布局控件(容器)的类型 布局控件继承于Panel的控件,其中下面的border不是布局控件,panel是抽象类 在重叠的情况下,Zindex值越大的就在上面 Z…...
LLM | 论文精读 | CVPR | Alpha-CLIP —— 一个聚焦目标区域的CLIP模型
论文标题:Alpha-CLIP: A CLIP Model Focusing on Wherever You Want 作者:Zeyi Sun, Ye Fang, Tong Wu, Pan Zhang, Yuhang Zang等 期刊:CVPR 2024 DOI:http://arxiv.org/pdf/2312.03818v2 email:yuhan.huangwhu.ed…...
windows系统中实现对于appium的依赖搭建
Node.js:Appium是基于Node.js的,因此需要安装Node.js。可以从Node.js官网下载并安装。 Java Development Kit (JDK):用于Android应用的自动化测试,需要安装JDK。可以从Oracle官网下载并安装。 Android SDK:进行Andro…...
【网络系统管理】Centos7——配置主从mariadb服务器案例(下半部分)
【网络系统管理】Centos7——配置主从mariadb服务器案例-CSDN博客 接上个文档,我们已经完成了主服务器创建数据库备服务器可以看到 一、在DBMS2查看信息 File,Position这两个字段的数据要记好,等一下需要用到 show master status; 二、在…...
mac nvm安装及使用(nvm安装指定版本node npm pnpm)
mac nvm安装及使用(nvm安装指定版本node npm pnpm) 1.卸载电脑的node 打开终端:依次执行以下命令: sudo rm -rf /usr/local/bin/npmsudo rm -rf /usr/local/share/man/man1/node.1sudo rm -rf /usr/local/lib/dtrace/node.dsudo…...
Elasticsearch面试内容整理-常见问题和解决方案
在使用 Elasticsearch 的过程中,可能会遇到各种常见问题,如集群状态异常、分片未分配、查询性能低下等。这些问题往往影响系统的可用性和性能,因此理解这些问题的成因和解决方案非常重要。以下是 Elasticsearch 常见问题及其解决方案的整理。 集群状态问题 Elasticsearch 集…...
鸿蒙学习高效开发与测试-应用程序框架和HarmonyOS SDK(3)
文章目录 1、应用程序框架1、规范化后台进程管理2、原生支持分布式3、支持多设备的统一窗口管理4、 组件共享及面向对象5、逻辑与界面解耦6、灵活扩展机制2、HarmonyOS SDK1、 开放能力 Kit2、开放能力的检索和使用3、 方舟工具链4、前端编译器架构1、应用程序框架 应 用 程 序…...
LeetCode 3244.新增道路查询后的最短距离 II:贪心(跃迁合并)-9行py(O(n))
【LetMeFly】3244.新增道路查询后的最短距离 II:贪心(跃迁合并)-9行py(O(n)) 力扣题目链接:https://leetcode.cn/problems/shortest-distance-after-road-addition-queries-ii/ 给你一个整数 n 和一个二维…...
使用GDB或Delve对已经运行起来的Go程序进行远程调试
同步发布在我的博客,欢迎来点赞。 使用 GDB 或 Delve 对已经运行起来的 Go 程序进行远程调试 使用 GDB 或 Delve 对已经运行起来的 Go 程序进行远程调试 背景 Java 程序可以很方便地通过 jdwp 参数指定一个对外端口进行远程调试,如 java \ -agentlib…...
集成了高性能ARM Cortex-M0+处理器的一款SimpleLink 2.4 GHz无线模块-RF-BM-2340B1
蓝牙模组 - RF-BM-2340B1是基于美国TI的CC2340R5为核心设计的一款SimpleLink 2.4 GHz 无线模块。支持Bluetooth 5.3 Low Energy、Zigbee 、IEEE 802.15.4g、TI 15.4-Stack (2.4 GHz)及私有协议。集成了高性能ARM Cortex-M0处理器,具有512 KB Flash、32 KB超低泄漏SR…...
笔记记录 k8s-install
master节点安装: yum upgrade -y 更新系统 yum update -y 升级内核 ifconfig ens33 关闭swap swapoff -a (临时) vim /etc/fstab (永久) #/dev/mapper/cl-swap swap swap defaults 0 0 vim /etc/sysctl.conf vm.swappin…...
【YOLOv8】安卓端部署-1-项目介绍
【YOLOv8】安卓端部署-1-项目介绍 1 什么是YOLOv81.1 YOLOv8 的主要特性1.2 YOLOv8分割模型1.2.1 YOLACT实例分割算法之计算掩码1.2.1.1 YOLACT 的掩码原型与最终的掩码的关系1.2.1.2 插值时的目标检测中提取的物体特征1.2.1.3 coefficients(系数)作用1.…...
会员等级经验问题
问题描述 会员从一级完成任务升级到二级以后,一级显示还差经验,这里差的其实是二级到三级的经验,如下图所示 修复方法 1、前端需要修改: 路径:/pages/users/user_vip/index.vue 方便复制: v-if"i…...
go-zero(一) 介绍和使用
go-zero 介绍和使用 一、什么是 go-zero? go-zero 是一个基于 Go 语言的微服务框架,提供了高效、简单并易于扩展的 API 设计和开发模式。它主要目的是为开发者提供一种简单的方式来构建和管理云原生应用。 1.go-zero 的核心特性 高性能: g…...
buuoj WEB做题笔记
[极客大挑战 2019]EasySQL password输入存在注入: 123or 11 -- flag{68144110-18b9-4882-93f1-6f6e7b1c67ec} [极客大挑战 2019]Havefun 看网页源码,发现尾部有一段注释得代码,尝试 /?catdog,回显得flag{01c680f5-0d62-4e2c-a805-cfcf6b…...