23种经典设计模式(GoF设计模式)
目录
🍀 创建型设计模式(5种)
1. 单例模式(Singleton)
2. 工厂方法模式(Factory Method)
3. 抽象工厂模式(Abstract Factory)
4. 建造者模式(Builder)
5. 原型模式(Prototype)
🌉 结构型设计模式(7种)
6. 适配器模式(Adapter)
7. 桥接模式(Bridge)
8. 装饰器模式(Decorator)
9. 组合模式(Composite)
10. 外观模式(Facade)
11. 享元模式(Flyweight)
12. 代理模式(Proxy)
🔄 行为型设计模式(11种)
13. 责任链模式(Chain of Responsibility)
14. 命令模式(Command)
15. 解释器模式(Interpreter)
16. 迭代器模式(Iterator)
17. 中介者模式(Mediator)
18. 备忘录模式(Memento)
19. 观察者模式(Observer)
20. 状态模式(State)
21. 策略模式(Strategy)
22. 模板方法模式(Template Method)
23. 访问者模式(Visitor)
好的,下面是软件设计师应掌握的 23种经典设计模式(GoF设计模式),包括每个模式的简要说明、适用场景的生动描述、主要优点,并附上 Java 代码示例,方便理解和实战参考。
🍀 创建型设计模式(5种)
1. 单例模式(Singleton)
-
问题:如何确保一个类只有一个实例?
-
好处:节省资源,避免多次创建重复对象。
-
示例:
public class Singleton {private static Singleton instance = new Singleton();private Singleton() {}public static Singleton getInstance() {return instance;}
}
2. 工厂方法模式(Factory Method)
-
问题:对象创建代码混杂在业务中,难以扩展。
-
好处:创建对象的过程被抽象,便于扩展。
-
示例:
interface Product { void use(); }
class ConcreteProduct implements Product { public void use() { System.out.println("Use Product"); } }
class Factory {public Product createProduct() { return new ConcreteProduct(); }
}
3. 抽象工厂模式(Abstract Factory)
-
问题:如何创建一系列相关的对象而不依赖具体类?
-
好处:保证产品族的一致性。
-
示例:
interface Button { void paint(); }
interface Checkbox { void check(); }class WinButton implements Button { public void paint() { System.out.println("Win Button"); } }
class MacButton implements Button { public void paint() { System.out.println("Mac Button"); } }interface GUIFactory {Button createButton();Checkbox createCheckbox();
}class WinFactory implements GUIFactory {public Button createButton() { return new WinButton(); }public Checkbox createCheckbox() { return null; }
}
4. 建造者模式(Builder)
-
问题:构建一个复杂对象时构造过程难以管理。
-
好处:一步一步创建对象,清晰可控。
-
示例:
class Product {String partA, partB;
}
class Builder {private Product product = new Product();Builder buildPartA() { product.partA = "A"; return this; }Builder buildPartB() { product.partB = "B"; return this; }Product build() { return product; }
}
5. 原型模式(Prototype)
-
问题:对象创建成本太高。
-
好处:通过复制已有对象快速创建新对象。
-
示例:
class Prototype implements Cloneable {public Prototype clone() throws CloneNotSupportedException {return (Prototype) super.clone();}
}
🌉 结构型设计模式(7种)
6. 适配器模式(Adapter)
-
问题:两个不兼容的接口如何协同工作?
-
好处:让老代码焕发生机。
-
示例:
class Adaptee { void specificRequest() { System.out.println("Old Method"); } }
interface Target { void request(); }
class Adapter implements Target {Adaptee adaptee = new Adaptee();public void request() { adaptee.specificRequest(); }
}
7. 桥接模式(Bridge)
-
问题:类的维度太多,继承爆炸。
-
好处:分离抽象与实现,降低耦合。
-
示例:
interface Color { void fill(); }
class Red implements Color { public void fill() { System.out.println("Red"); } }abstract class Shape {protected Color color;Shape(Color color) { this.color = color; }abstract void draw();
}class Circle extends Shape {Circle(Color color) { super(color); }void draw() { color.fill(); System.out.println("Draw Circle"); }
}
8. 装饰器模式(Decorator)
-
问题:不能通过继承灵活添加新功能。
-
好处:在不修改原类的情况下添加功能。
-
示例:
interface Coffee { String getDescription(); }
class SimpleCoffee implements Coffee {public String getDescription() { return "Simple Coffee"; }
}
class MilkDecorator implements Coffee {private Coffee coffee;MilkDecorator(Coffee coffee) { this.coffee = coffee; }public String getDescription() { return coffee.getDescription() + ", Milk"; }
}
9. 组合模式(Composite)
-
问题:如何统一处理单个对象与对象组合?
-
好处:树形结构处理更优雅。
-
示例:
interface Component { void show(); }
class Leaf implements Component {public void show() { System.out.println("Leaf"); }
}
class Composite implements Component {private List<Component> children = new ArrayList<>();public void add(Component c) { children.add(c); }public void show() {for (Component c : children) c.show();}
}
10. 外观模式(Facade)
-
问题:系统太复杂,调用不方便。
-
好处:提供统一接口,简化调用。
-
示例:
class CPU { void start() { System.out.println("CPU Start"); } }
class Memory { void load() { System.out.println("Memory Load"); } }
class Computer {CPU cpu = new CPU(); Memory memory = new Memory();void start() {cpu.start(); memory.load();}
}
11. 享元模式(Flyweight)
-
问题:大量相似对象导致内存浪费。
-
好处:共享相同部分,节省资源。
-
示例:
class Flyweight {private String intrinsic;Flyweight(String intrinsic) { this.intrinsic = intrinsic; }void operate(String extrinsic) {System.out.println("Intrinsic: " + intrinsic + ", Extrinsic: " + extrinsic);}
}
class FlyweightFactory {private Map<String, Flyweight> pool = new HashMap<>();Flyweight get(String key) {return pool.computeIfAbsent(key, Flyweight::new);}
}
12. 代理模式(Proxy)
-
问题:如何控制对对象的访问?
-
好处:增强功能,如懒加载、安全检查。
-
示例:
interface Subject { void request(); }
class RealSubject implements Subject {public void request() { System.out.println("Real Request"); }
}
class ProxySubject implements Subject {private RealSubject real = new RealSubject();public void request() {System.out.println("Proxy log...");real.request();}
}
🔄 行为型设计模式(11种)
13. 责任链模式(Chain of Responsibility)
-
问题:请求者与处理者强耦合。
-
好处:动态传递请求,解耦处理逻辑。
-
示例:
abstract class Handler {protected Handler next;void setNext(Handler next) { this.next = next; }abstract void handle(String request);
}
class ConcreteHandler extends Handler {void handle(String request) {if ("task".equals(request)) System.out.println("Handled");else if (next != null) next.handle(request);}
}
14. 命令模式(Command)
-
问题:如何将请求封装为对象?
-
好处:支持撤销、日志等操作。
-
示例:
interface Command { void execute(); }
class Light {void on() { System.out.println("Light On"); }
}
class LightOnCommand implements Command {private Light light;LightOnCommand(Light light) { this.light = light; }public void execute() { light.on(); }
}
15. 解释器模式(Interpreter)
-
问题:如何解释某种语言的语法?
-
好处:自定义语言的核心。
-
示例:
interface Expression { int interpret(); }
class Number implements Expression {int value;Number(int value) { this.value = value; }public int interpret() { return value; }
}
16. 迭代器模式(Iterator)
-
问题:访问集合内部结构太复杂。
-
好处:统一遍历方式。
-
示例:
List<String> list = Arrays.asList("a", "b", "c");
Iterator<String> it = list.iterator();
while (it.hasNext()) {System.out.println(it.next());
}
17. 中介者模式(Mediator)
-
问题:对象之间关系复杂。
-
好处:集中控制对象交互。
-
示例:
interface Mediator { void notify(String event); }
class ConcreteMediator implements Mediator {public void notify(String event) {System.out.println("Mediator handles: " + event);}
}
18. 备忘录模式(Memento)
-
问题:如何保存对象的历史状态?
-
好处:支持撤销操作。
-
示例:
class Memento {String state;Memento(String state) { this.state = state; }
}
class Originator {String state;Memento save() { return new Memento(state); }void restore(Memento m) { this.state = m.state; }
}
19. 观察者模式(Observer)
-
问题:多个对象需要在状态变化时同步响应。
-
好处:实现发布-订阅机制。
-
示例:
interface Observer { void update(String msg); }
class Subject {List<Observer> observers = new ArrayList<>();void addObserver(Observer o) { observers.add(o); }void notifyAll(String msg) {for (Observer o : observers) o.update(msg);}
}
20. 状态模式(State)
-
问题:对象状态多,条件判断复杂。
-
好处:将状态逻辑分离,清晰可控。
-
示例:
interface State { void handle(); }
class OnState implements State {public void handle() { System.out.println("Light is ON"); }
}
class Light {private State state;void setState(State state) { this.state = state; }void press() { state.handle(); }
}
21. 策略模式(Strategy)
-
问题:算法多种多样,代码不好维护。
-
好处:将算法封装为独立策略,便于切换。
-
示例:
interface Strategy { int execute(int a, int b); }
class Add implements Strategy {public int execute(int a, int b) { return a + b; }
}
22. 模板方法模式(Template Method)
-
问题:多个类的结构相同,但实现不同。
-
好处:复用流程逻辑,子类自定义细节。
-
示例:
abstract class AbstractClass {void templateMethod() {step1(); step2();}abstract void step1();abstract void step2();
}
23. 访问者模式(Visitor)
-
问题:数据结构稳定但操作多变。
-
好处:将操作封装到访问者中。
-
示例:
interface Visitor { void visit(Element e); }
interface Element { void accept(Visitor v); }
class ConcreteElement implements Element {public void accept(Visitor v) { v.visit(this); }
}
如果你需要这些模式的完整源代码打包或想了解每个模式的应用场景案例(比如在Spring、JDK中的应用),我也可以为你整理。是否需要生成一个 Markdown 或 PDF 版文档?
相关文章:
23种经典设计模式(GoF设计模式)
目录 🍀 创建型设计模式(5种) 1. 单例模式(Singleton) 2. 工厂方法模式(Factory Method) 3. 抽象工厂模式(Abstract Factory) 4. 建造者模式(Builder&am…...
深入解析Dify:从架构到应用的全面探索
文章目录 引言一、Dify基础架构1.1 架构概述1.2 前端界面1.3 后端服务1.4 数据库设计 二、Dify核心概念2.1 节点(Node)2.2 变量(Variable)2.3 工作流类型 三、代码示例3.1 蓝图注册3.2 节点运行逻辑3.3 工作流运行逻辑 四、应用场…...
电子电路:怎么理解放大电路中集电极电流Ic漂移?
如果放大电路中集电极电阻RC因为温度或老化而阻值变化,Vce Vcc - IcRc - IcRc,这会改变工作点,导致集电极的电流漂移。 IC漂移的定义:集电极电流随时间、温度等变化。影响IC的因素:β、IB、VBE、温度、电源电压、元件…...
【疑难杂症】Mysql 无报错 修改配置文件后服务启动不起来 已解决|设置远程连接
我修改配置后,服务无法启动可以试试用记事本打开后另存为,格式选择ANSI,然后重新启动mysql试试 设置运行远程、 1、配置my.ini文件 在[mysqld]下 添加bind-address0.0.0.0 2、设置root权限 使用MySql命令行执行, CREATE USER…...
Java基础 5.21
1.多态注意事项和细节讨论 多态的前提是:两个对象(类)存在继承关系 多态的向上转型 本质:父类的引用指向了子类的对象语法:父类类型 引用名 new 子类类型();特点:编译类型看左边,运行类型看…...
探索Puter:一个基于Web的轻量级“云操作系统”
在云计算与Web技术高度融合的今天,开发者们不断尝试将传统桌面体验迁移到浏览器中。近期,GitHub上一个名为Puter的开源项目吸引了社区的关注。本文将带你深入解析Puter的设计理念、技术架构与使用场景,探索它如何通过现代Web技术重构用户的“云端桌面”。 一、项目概览 Put…...
Java SpringBoot 项目中 Redis 存储 Session 具体实现步骤
目录 一、添加依赖二、配置 Redis三、配置 RedisTemplate四、创建控制器演示 Session 使用五、启动应用并测试六、总结 Java 在 Spring Boot 项目中使用 Redis 来存储 Session,能够实现 Session 的共享和高可用,特别适用于分布式系统环境。以下是具体的实…...
电商项目-商品微服务-规格参数管理,分类与品牌管理需求分析
本文章介绍:规格参数管理与分类与品牌管理的需求分析和表结构的设计。 一、规格参数管理 规格参数模板是用于管理规格参数的单元。规格是例如颜色、手机运行内存等信息,参数是例如系统:安卓(Android)后置摄像头像素&…...
Java 定时任务中Cron 表达式与固定频率调度的区别及使用场景
Java 定时任务:Cron 表达式与固定频率调度的区别及使用场景 一、核心概念对比 1. Cron 表达式调度 定义:基于日历时间点的调度,通过 秒 分 时 日 月 周 年 的格式定义复杂时间规则。时间基准:绝对时间点(如每天 12:…...
2025年- H39-Lc147 --394.字符串解码(双栈,递归)--Java版
1.题目描述 2.思路 可以用递归也可以用双栈,这边用栈。 首先先创建一个双栈,一个栈存数字(interger),另一个栈存字符(character)。设置数字临时变量num,设置字母临时变量curString在…...
学编程对数学成绩没帮助?
今天听到某机构直播说“学编程对数学成绩没帮助,如果想提高数学成绩那就单独去学数学”,实在忍不住要和各位家长聊聊我的思考,也欢迎各位家长评论。 恰在此时我看见了一道小学6年级的数学题如下,虽然题不难,但立刻让我…...
现代计算机图形学Games101入门笔记(十九)
光场 在近处画上图像,VR的效果。 任何时间任何位置看到的图像都不一样,是不是就是一个世界了。 光场就是任何一个位置往任何一个方向去的光的强度 知道光场就能知道这个物体长什么样子。 光线可以用一个点和一个方向确定。 也可以用2个点确定一条光线。 …...
STM32单片机GUI系统1 GUI基本内容
目录 一、GUI简介 1、emWin 2、LVGL (Light and Versatile Graphics Library) 3、TouchGFX 4、Qt for Embedded 5、特性对比总结 二、LVGL移植要求 三、优化LVGL运行效果方法 四、LVGL系统文件 一、GUI简介 在嵌入式系统中,emWin、LVGL、TouchGFX 和 Qt 是…...
Prometheus+Grafana实现对服务的监控
PrometheusGrafana实现对服务的监控 前言:PrometheusGrafana实现监控会更加全面,监控的组件更多 Prometheus官网 https://prometheus.io/docs/prometheus/latest/getting_started/ Grafana官网 https://grafana.com/docs/ 一、安装PrometheusGrafana 这…...
hook原理和篡改猴编写hook脚本
hook原理: hook是常用于js反编译的技术;翻译就是钩子,他的原理就是劫持js的函数然后进行篡改 一段简单的js代码 :这个代码是顺序执行的 function test01(){console.log(test01)test02() } function test02(){console.log(02)tes…...
Sign签证绕过
Sign的简介 Sign是指一种类似于token的东西 他的出现主要是保证数据的完整性,防篡改 就是一般的逻辑是 sign的加密的值和你输入的数据是相连的(比如sign的加密是使用输入的数据的前2位数字配合SHA1 等这样的) 绕过 :碰运气可以…...
【Vue篇】重剑无锋:面经PC项目工程化实战面经全解
目录 引言 一、项目功能演示 1. 目标 2. 项目收获 二、项目创建目录初始化 vue-cli 建项目 三、ESlint代码规范及手动修复 1. JavaScript Standard Style 规范说明 2. 代码规范错误 3. 手动修正 四、通过eslint插件来实现自动修正 五、调整初始化目录结构 1. 删除…...
JVM参数详解与实战案例指南(AI)
JVM参数详解与实战案例指南 一、JVM参数概述与分类 JVM参数是控制Java虚拟机运行时行为的关键配置项,合理设置这些参数可以显著提升应用性能。根据功能和稳定性,JVM参数主要分为三类: 标准参数:所有JVM实现都必须支持ÿ…...
C++通过空间配置器实现简易String类
C实现简易String类 在C中,使用空间配置器(allocator)实现自定义string类需要管理内存分配、释放及对象构造/析构。 #include <memory> #include <algorithm> #include <cstring> #include <stdexcept> #include &l…...
MyBatis:简化数据库操作的持久层框架
1、什么是Mybatis? MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由 apachesoftwarefoundation 迁移到了google code,由谷歌托管,并且改名为MyBatis 。 2013年11月迁移到Github。 iBATIS一词来源于“internet”和“abatis”的组合,是一个基于Java的持久层框…...
Spring Boot集成Spring AI与Milvus实现智能问答系统
在Spring Boot中集成Spring AI与Milvus实现智能问答系统 引言 随着人工智能技术的快速发展,越来越多的企业开始探索如何将AI能力集成到现有系统中。本文将介绍如何在Spring Boot项目中集成Spring AI和向量数据库Milvus,构建一个高效的智能问答系统。 …...
软件工程(六):一致性哈希算法
哈希算法 定义 哈希算法是一种将任意长度的输入(如字符串、文件等)转换为固定长度输出的算法,这个输出称为“哈希值”或“摘要”。 常见的哈希算法 哈希算法哈希位数特点MD5128位快速,但已不安全SHA-1160位安全性提高…...
Linux内存分页管理详解
Linux内存分页管理详解:原理、实现与实际应用 目录 Linux内存分页管理详解:原理、实现与实际应用 一、引言 二、内存分页机制概述 1. 虚拟地址与物理地址的划分 2. 分页的基本原理 三、虚拟地址到物理地址的转换 1. 地址转换流程 2. 多级页表的遍历 四、多级页表的…...
work-platform阅读
Redis存储的是字节数据,所以任何对象想要存进redis,都要转化成字节。对象转化为字节流的过程,叫序列化,反之,叫反序列化 Redis 序列化详解及高性能实践-CSDN博客https://blog.csdn.net/zhangkunls/article/details/14…...
在 Excel xll 自动注册操作 中使用东方仙盟软件————仙盟创梦IDE
windows 命令 "C:\Program Files\Microsoft Office\root\Office16\EXCEL.EXE" /X "C:\Path\To\仙盟.xll" excel 注册 Application.RegisterXLL "XLMAPI.XLL" 重点代码解析 excel 命令模式 [ExcelCommand(Description "使用参数")] …...
微调后的模型保存与加载
在Hugging Face Transformers库中,微调后的模型保存与加载方式因微调方法(如常规微调或参数高效微调)而异。 一、常规微调模型的保存与加载 1、 保存完整模型 使用 save_pretrained() 方法可将整个模型(包含权重、配置、分词器…...
PostgreSQL 日常维护
目录 一、基本使用 1、登录数据库 2、数据库操作 (1)列出库 (2)创建库 (3)删除库 (4)切换库 (5)查看库大小 3、数据表操作 (1ÿ…...
Ntfs!ATTRIBUTE_RECORD_HEADER结构$INDEX_ROOT=0x90的一个例子
Ntfs!ATTRIBUTE_RECORD_HEADER结构$INDEX_ROOT0x90的一个例子 1: kd> dx -id 0,0,899a2278 -r1 ((Ntfs!_FILE_RECORD_SEGMENT_HEADER *)0xc431a400) ((Ntfs!_FILE_RECORD_SEGMENT_HEADER *)0xc431a400) : 0xc431a400 [Type: _FILE_RECORD_SEGMENT_HEADER …...
leetcode hot100刷题日记——7.最大子数组和
class Solution { public:int maxSubArray(vector<int>& nums) {//方法一:动态规划//dp[i]表示以i下标结尾的数组的最大子数组和//那么在i0时,dp[0]nums[0]//之后要考虑的就是我们要不要把下一个数加进来,如果下一个数加进来会使结…...
LlamaIndex
1、大语言模型开发框架的价值是什么? SDK:Software Development Kit,它是一组软件工具和资源的集合,旨在帮助开发者创建、测试、部署和维护应用程序或软件。 所有开发框架(SDK)的核心价值,都是降低开发、维护成本。 大语言模型开发框架的价值,是让开发者可以更方便地…...
下一代电子电气架构(EEA)的关键技术
我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 钝感力的“钝”,不是木讷、迟钝,而是直面困境的韧劲和耐力,是面对外界噪音的通透淡然。 生活中有两种人,一种人格外在意别人的眼光;另一种人无论…...
CSDN gitcode代码推送
当我使用用户名密码时一直无法推送,报下面这个错误 找了半天才知道, 他这个git不能用账号密码推送代码,idea弹出来的用户名,就是你头像旁边这个,没有符号 密码需要你创建一个令牌 这个令牌才是你要填写的密码&#x…...
中级统计师-统计学基础知识-第五章 相关分析
第一节 相关关系 1. 函数关系 vs 相关关系 函数关系 定义:变量间存在严格确定性的对应关系(如 y f ( x ) y f(x) yf(x))例子:本金 x x x 与利息收入 y x 0.027 x y x 0.027x yx0.027x特点:一一对应ÿ…...
OpenCV CUDA模块图像过滤------用于创建一个最大值盒式滤波器(Max Box Filter)函数createBoxMaxFilter()
操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 createBoxMaxFilter()函数创建的是一个 最大值滤波器(Maximum Filter),它对图像中每个像素邻域内的像素值取最…...
OpenCv高阶(十五)——EigenFace人脸识别
文章目录 前言一、EigenFace人脸识别原理二、EigenFace人脸识别代码1、导入OpenCV和NumPy库2、数据加载与预处理部分3、创建与训练EigenFace模型部分4、预测与结果输出部分5、可视化部分:在测试图像上叠加识别结果 总结 前言 人脸识别作为生物特征识别技术的重要分…...
Linux系统下nslookup命令的基本使用
Linux系统下 nslookup命令的基本使用 引言一、nslookup介绍二、使用帮助三、 基本使用方法1. 查询域名对应的IP地址2. 查询特定的DNS记录类型3. 使用特定的DNS服务器进行查询4. 交互模式 四、注意事项五、总结 引言 在网络管理中,DNS(域名系统ÿ…...
【笔记】PyCharm 中创建Poetry解释器
#工作记录 在使用 PyCharm 进行 Python 项目开发时,为项目配置合适的 Python 解释器至关重要。Poetry 作为一款强大的依赖管理和打包工具,能帮助我们更便捷地管理项目的依赖项与虚拟环境。下面将详细记录在 PyCharm 中创建 Poetry 解释器的步骤。 前提条…...
Qwen 3技术报告详细解读
近日,Qwen 3系列大模型正式发布,涵盖从0.6B到235B参数的多个规模版本,包括6个Dense模型和2个混合专家(MoE)模型。本文将从模型架构、预训练策略、后训练优化等方面进行全面解读,帮助读者深入理解Qwen 3的技…...
leetcode 螺旋矩阵 java
官方还得是官方! class Solution {public List<Integer> spiralOrder(int[][] matrix) {int l 0, r matrix[0].length - 1;int t 0, b matrix.length - 1;int x 0;List<Integer> res new ArrayList<>();while (true) {for (int i l; i …...
Spring Boot 项目中 Redis 存储 Session 对象序列化处理
目录 一、为什么需要序列化处理二、Spring Boot 集成 Redis 存储 Session2.1 添加依赖2.2 配置 Redis 三、自定义序列化和反序列化3.1 创建序列化配置类3.2 测试序列化和反序列化 四、其他序列化方式4.1 使用 JdkSerializationRedisSerializer4.2 使用 StringRedisSerializer 五…...
军工与航空航天特种PCB精密制造:猎板如何定义行业技术新标准?
一、军工与航空航天PCB的极限挑战 在低轨卫星载荷、战机航电系统等场景中,特种PCB需同时满足三大核心指标: 极端环境耐受性:工作温度横跨-55℃至200℃,承受20G机械振动与100krad辐射剂量,盐雾腐蚀测试超过50…...
springboot+vue实现鲜花商城系统源码(带用户协同过滤个性化推荐算法)
今天教大家如何设计一个 鲜花商城 , 基于目前主流的技术:前端vue3,后端springboot。学习完这个项目,你将来找工作开发实际项目都会又很大帮助。文章最后部分还带来的项目的部署教程。 系统有着基于用户的协同过滤推荐算法,还有保证…...
MyBatis 关联映射与多表查询实战教程
一、关联查询基础 1. 连接类型与选择 LEFT JOIN(左连接)SELECT u.*, r.role_name FROM User u LEFT JOIN user_role ur ON u.id = ur.uid LEFT JOIN Role r ON ur.rid = r.id;- **规则**:以左表为主,保留左表所有记录,右表无匹配时填充`NULL`。 - **场景**:查询主体…...
【AI流程应用】智能知识库搭建与实战应用
JeecgBoot 平台的 AIGC 功能模块,是一套类似 Dify 的 AIGC应用开发平台 知识库问答 子系统,是一款基于 LLM 大语言模型 AI 应用平台和 RAG 的知识库问答系统。 其直观的界面结合了 AI 流程编排、RAG 管道、知识库管理、模型管理、对接向量库、实时运行可…...
微店平台店铺商品接口开发指南
微店API获取店铺所有商品实现方案 以下是使用微店开放平台API获取店铺所有商品的完整实现代码,包含请求封装、分页处理和错误处理机制。 点击获取key和secret from weidian_api import WeidianAPI # 配置你的微店应用凭证 APP_KEY "your_app_key" APP_…...
springboot3+vue3融合项目实战-大事件文章管理系统-更新文章分类和增加文章分类优化-分组校验
因为我们之前在category实体类里面增加了notnull注解,而之前新增文章分类模块新增文章是不需要id的,而id是由数据库自动分配的,这就导致不能新增文章了,所以我们要进行分组校验 思路如下: 我们更改category代码&…...
Vue.js教学第九章:Vue动态与异步组件,高效开发全攻略
Vue 组件的动态与异步:探索高效开发路径 在 Vue.js 开发领域中,组件的动态与异步加载机制是构建复杂且高性能前端应用的关键策略。本研究深入探究 Vue 中动态组件与异步组件的原理、用法及性能优化实践,旨在为开发者提供全面且深入的技术指引,助力其在实际项目中高效运用。…...
CVE-2018-1270源码分析与漏洞复现(spring-messaging 表达式注入)
漏洞概述 CVE-2018-1270 是 Spring 框架中的一个高危远程代码执行(RCE)漏洞,影响版本为 Spring Framework 5.0–5.0.4 和 4.3–4.3.14。攻击者通过构造包含恶意 SpEL(Spring Expression Language)表达式的 STOMP&…...
DevOps学习回顾03-ops三部曲之配置管理(CM)
快速回顾 Ops 中配置管理的一些常见的方式,以及一些配置文件常见的组织形式 参考来源 极客时间-全栈工程师修炼指南-OPS三部曲之配置管理 什么是配置管理?–IBM 五大最流行的配置管理工具 为啥需要配置管理? CM 的主要目标是控制复杂系统…...
二进制编码、定点数与浮点数
1. 二进制编码 1.1. 字符串的表示,从编码到数字 不仅数值可以用二进制表示,字符乃至更多的信息都能用二进制表示。最典型的例子就是字符串(Character String)。最早计算机只需要使用英文字符,加上数字和一些特殊符号…...