Java中的设计模式
一、工厂方法模式
1.1 简单工厂模式
1.1.1 案例引入
比方说我们要设计一个披萨店的点单程序,披萨店有水果披萨,有芝士披萨,两种类型,选择哪个披萨,只需要创建那个类型的披萨对象即可。
package org.example;import org.example.pizza.CheesePizza;
import org.example.pizza.FruitPizza;
import org.example.pizza.Pizza;public class Main {public static void main(String[] args) {orderPizza("水果");}public static void orderPizza(String type) {Pizza pizza = null;if ("芝士".equals(type)) {pizza = new CheesePizza();} else if ("水果".equals(type)) {pizza = new FruitPizza();} else {throw new RuntimeException("不支持的披萨类型");}pizza.prepare();}
}
package org.example.pizza;public interface Pizza {void prepare();
}
package org.example.pizza;public class CheesePizza implements Pizza {@Overridepublic void prepare() {System.out.println("准备芝士");}
}
package org.example.pizza;public class FruitPizza implements Pizza {@Overridepublic void prepare() {System.out.println("准备水果");}
}
这里我们发现,这段代码的拓展非常之困难,每次店内增加类型的披萨,都需要改这段代码,耦合性太强。也违背了开闭原则:对扩展开放,对修改关闭。即要拓展新业务的时候,不能修改旧的业务。
if ("芝士".equals(type)) {pizza = new CheesePizza();
} else if ("水果".equals(type)) {pizza = new FruitPizza();
}
1.1.2 工厂模式
工厂模式的核心思想:外包生产。创建一个工厂类,工厂中根据type来制作披萨。这样主函数只需要传递类型,不需要创建对象,让工厂去自己判断类型,创建对象。
package org.example.pizza;public class PizzaFactory {public Pizza createPizza(String type) {if ("芝士".equals(type)) {return new CheesePizza();} else if ("水果".equals(type)) {return new FruitPizza();} else {throw new RuntimeException("不支持的披萨类型");}}
}
package org.example;import org.example.pizza.Pizza;
import org.example.pizza.PizzaFactory;public class Main {public static void main(String[] args) {PizzaFactory pizzaFactory = new PizzaFactory();Pizza cheesePizza = pizzaFactory.createPizza("芝士");cheesePizza.prepare();}
}
- 我们发现,我们点单不用创建对象了,而是和工厂打交道,告诉工厂我需要什么类型的对象,工厂中再去创建对象。解耦了我们和披萨对象之间的关系。
- 缺点:我们发现,如果想要增加披萨的种类,是要在PizzaFactory中的createPizza方法中增加if语句,这就违反了开闭原则,开闭原则是对拓展开放,对修改关闭。但增加if语句就是对修改也开放了,所以简单工厂模式仍不是最好的方案。
1.1.3 工厂模式的优点
如果我们使用工厂来生产对象,我们就只和工厂打交道就可以了,彻底和对象解耦,如果要更换对象,直接在工厂里更换该对象即可,达到了与对象解耦的目的;所以说,工厂模式最大的优点就是:解耦。
1.2 工厂方法模式
工厂方法模式,简而言之,就是给上面工厂类也做成接口,让下面的披萨工厂实现接口,那么当新的披萨种类来的时候,只需要创建一个新类,实现披萨工厂接口即可。完全不会改动原来代码。
1.2.1 角色
工厂方法模式的主要角色:
- 抽象工厂(Abstract Factory):提供了创建产品的接口,调用者通过它访问具体工厂的工厂方法来创建产品。
- 具体工厂(ConcreteFactory):主要是实现抽象工厂中的抽象方法,完成具体产品的创建。
- 抽象产品(Product):定义了产品的规范,描述了产品的主要特性和功能。
- 具体产品(ConcreteProduct):实现了抽象产品角色所定义的接口,由具体工厂来创建,它同具体工厂之间一一对应。
1.2.2 案例说明
仍然是披萨问题,此时我们给工厂也改成接口,并分别有两个实现类。
package org.example.pizza.factory;import org.example.pizza.pizza.Pizza;public abstract interface PizzaFactory {Pizza createPizza();
}
package org.example.pizza.factory;import org.example.pizza.pizza.CheesePizza;
import org.example.pizza.pizza.Pizza;public class CheesePizzaFactory implements PizzaFactory {@Overridepublic Pizza createPizza() {return new CheesePizza();}
}
package org.example.pizza.factory;import org.example.pizza.pizza.FruitPizza;
import org.example.pizza.pizza.Pizza;public class FruitPizzaFactory implements PizzaFactory {@Overridepublic Pizza createPizza() {return new FruitPizza();}
}
还有一个披萨店类,店中有一个点单的方法,方法中去创建披萨,准备披萨。
package org.example.pizza;import lombok.Data;
import org.example.pizza.factory.PizzaFactory;
import org.example.pizza.pizza.Pizza;@Data
public class PizzaStore {private PizzaFactory pizzaFactory;public Pizza orderPizza() {Pizza pizza = pizzaFactory.createPizza();pizza.prepare();return pizza;}
}
主函数模拟用户操作。直接创建的是一个披萨店类,并给他设置披萨类型工厂属性,再调用点单接口,就会自动地创建披萨等操作。
package org.example;import org.example.pizza.factory.CheesePizzaFactory;
import org.example.pizza.PizzaStore;
import org.example.pizza.pizza.Pizza;public class Main {public static void main(String[] args) {PizzaStore pizzaStore = new PizzaStore();pizzaStore.setPizzaFactory(new CheesePizzaFactory());Pizza pizza = pizzaStore.orderPizza();System.out.println(pizza.getName());}
}
- 从以上的编写的代码可以看到,要增加产品类时也要相应地增加工厂类,不需要修改工厂类的代码了,这样就解决了简单工厂模式的缺点。
- 工厂方法模式是简单工厂模式的进一步抽象。由于使用了多态性,工厂方法模式保持了简单工厂模式的优点,而且克服了它的缺点。
- 缺点:每增加一个披萨类型,就需要新增一个工厂类实现工厂接口;无疑增加了代码复杂度,但满足了开闭原则,缺点也可以忽略。
1.3 抽象工厂模式
1.3.1 什么是抽象工厂模式
- 工厂方法模式,只考虑生产同等级的产品,例如这个工厂都生产披萨。
- 而想象你有一个总部工厂,这个工厂不直接生产披萨,而是生产一整套相关产品,叫做产品族(披萨 + 酱料 + 盒子)。每个地区分厂继承总部的规范,自行实现全套产品。
- 抽象工厂是一个超级工厂,他能创建其他工厂。
1.3.2 三大特征
- 产品族:生产一组相关对象(披萨、酱料、盒子)。
- 约束性:不同分厂的产品必须配套使用(比如纽约不能用芝加哥的厚酱料。
- 易扩展:新增地区(如东京分厂)时,只需实现抽象工厂接口,无需修改已有代码。
二、策略模式
2.1 案例引入
我们去旅游选择出行模式有很多种,可以骑自行车、可以坐汽车、可以坐火车、可以坐飞机。
2.2 策略模式
2.2.1 策略模式定义
该模式定义了一系列算法,并将每个算法封装起来,使它们可以相互替换,且算法的变化不会影响使用算法的客户。策略模式属于对象行为模式,它通过对算法进行封装,把使用算法的责任和算法的实现分割开来,并委派给不同的对象对这些算法进行管理。
2.2.2 策略模式角色
- 抽象策略(Strategy)类:这是一个抽象角色,通常由一个接口或抽象类实现。此角色给出所有的具体策略类所需的接口。
- 具体策略(Concrete Strategy)类:实现了抽象策略定义的接口,提供具体的算法实现或行为。
- 环境(Context)类:持有一个策略类的引用,最终给客户端调用。
三、责任链模式
3.1 案例引入
在现实生活中,常常会出现这样的事例:一个请求有多个对象可以处理,但每个对象的处理条件或权限不同。例如,公司员工请假,可批假的领导有部门负责人、副总经理、总经理等,但每个领导能批准的天数不同,员工必须根据自己要请假的天数去找不同的领导签名,也就是说员工必须记住每个领导的姓名、电话和地址等信息,这增加了难度。
3.2 责任链模式
3.2.1 定义
- 又名职责链模式,为了避免请求发送者与多个请求处理者耦合在一起,将所有请求的处理者通过前一对象记住其下一个对象的引用而连成一条链;当有请求发生时,可将请求沿着这条链传递,直到有对象处理它为止。
- 比较常见的springmvc中的拦截器,web开发中的filter过滤器。
3.2.2 角色
- 抽象处理者(Handler)角色:定义一个处理请求的接口,包含抽象处理方法和一个后继连接。
- 具体处理者(Concrete Handler)角色:实现抽象处理者的处理方法,判断能否处理本次请求,如果可以处理请求则处理,否则将该请求转给它的后继者。
- 客户类(Client)角色:创建处理链,并向链头的具体处理者对象提交请求,它不关心处理细节和请求的传递过程。
3.2.3 代码实现
背景:一个订单需要经历如下步骤,1是校验订单,2是计算金额,3是入库。我们可以使用责任链模式,顺序完成任务。
首先创建一个Handler,他有一个抽象方法,还有一个next属性,用来设置下一个Handler是谁。
package org.example.handle;public abstract class Handler {public Handler handler;public void setNext(Handler handler) {this.handler = handler;}public abstract void process(OrderInfo orderInfo);
}
校验订单。实现了Handler,并执行自己方法,执行完后通过process执行下一个Handler。
package org.example.handle;public class OrderValidate extends Handler {@Overridepublic void process(OrderInfo orderInfo) {System.out.println("校验订单基本信息");handler.process(orderInfo);}
}
计算金额。同上。
package org.example.handle;public class OrderFill extends Handler {@Overridepublic void process(OrderInfo orderInfo) {System.out.println("补充订单信息");handler.process(orderInfo);}
}
入库。因为是最后一步,所以不需要process了。
package org.example.handle;public class OrderCreate extends Handler {@Overridepublic void process(OrderInfo orderInfo) {System.out.println("入库");}
}
Main方法。首先创建出三个类型的Handler。再设置责任链路,比如校验订单的next是计算金额,计算金额下一步是入库。并最后开始从校验订单开始执行。
package org.example.handle;public class Main {public static void main(String[] args) {Handler orderValidate = new OrderValidate();Handler orderFill = new OrderFill();Handler orderCreate = new OrderCreate();//设置责任链路orderValidate.setNext(orderFill);orderFill.setNext(orderCreate);//开始执行orderValidate.process(new OrderInfo());}
}
3.2.3 优缺点
优点
- 降低了对象之间的耦合度。
- 该模式降低了请求发送者和接收者的耦合度。
- 增强了系统的可扩展性。
- 可以根据需要增加新的请求处理类,满足开闭原则。
- 增强了给对象指派职责的灵活性。
- 当工作流程发生变化,可以动态地改变链内的成员或者修改它们的次序,也可动态地新增或者删除责任。
- 责任链简化了对象之间的连接。
- 一个对象只需保持一个指向其后继者的引用,不需保持其他所有处理者的引用,这避免了使用众多的 if 或者 if···else 语句。
- 责任分担。
- 每个类只需要处理自己该处理的工作,不能处理的传递给下一个对象完成,明确各类的责任范围,符合类的单一职责原则。
缺点
- 对比较长的职责链,请求的处理可能涉及多个处理对象,系统性能将受到一定影响。
- 职责链建立的合理性要靠客户端来保证,增加了客户端的复杂性,可能会由于职责链的错误设置而导致系统出错,如可能会造成循环调用。
相关文章:
Java中的设计模式
一、工厂方法模式 1.1 简单工厂模式 1.1.1 案例引入 比方说我们要设计一个披萨店的点单程序,披萨店有水果披萨,有芝士披萨,两种类型,选择哪个披萨,只需要创建那个类型的披萨对象即可。 package org.example;import…...
NSSCTF [GFCTF 2021]where_is_shell
889.[GFCTF 2021]where_is_shell(system($0)64位) [GFCTF 2021]where_is_shell (1) 1.准备 motalymotaly-VMware-Virtual-Platform:~$ file shell shell: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.s…...
有关知名分析品牌默克Supelco®的前世今生
因在仪器设备和实验室产品方面的卓越贡献,Supelco品牌的创立者Nicholas Pelick与Walter Supina获颁2019年匹兹堡文化遗产奖(2019 Heritage Award),入选匹兹堡名人堂(Pittcon Hall of Fame)。 目前ÿ…...
钉钉数据与金蝶云星空的无缝集成解决方案
钉钉数据与金蝶云星空的无缝集成解决方案 钉钉数据集成到金蝶云星空的技术案例分享 在企业信息化建设中,数据的高效流动和准确对接是业务成功的关键。本文将分享一个具体的系统对接集成案例:如何通过transfer-新转账单(银行转账)…...
商业架构 2.0 时代:ZKmall开源商城前瞻性设计如何让 B2B2C 平台领先同行 10 年?
在数字化转型加速的今天,传统 B2B2C 平台面临用户体验割裂、数据孤岛严重、业务扩展困难等挑战。ZKmall 开源商城通过 “业务中台 数据中台 技术中台”的三位一体架构设计,结合“插件化扩展 分布式服务 智能决策”*三大核心能力,构建起具…...
Android开发-使用内容组件获取通讯信息
在Android开发中,访问和处理用户的通讯信息(如联系人、通话记录等)是一项常见的需求。通过使用Android的内容提供者(ContentProvider),开发者可以方便地查询这些数据,并将其集成到自己的应用中。…...
Elasticsearch 分片机制高频面试题(含参考答案)
🧠 Elasticsearch 分片机制高频面试题(含参考答案) 本篇聚焦 分片机制(Shard),涵盖基础概念、实践经验、问题排查与场景设计,适合中高级开发工程师及架构师面试复习使用。 📚 目录 …...
从代码学习深度学习 - 风格迁移 PyTorch版
文章目录 前言方法 (Methodology)阅读内容和风格图像预处理和后处理抽取图像特征定义损失函数内容损失 (Content Loss)风格损失 (Style Loss)全变分损失 (Total Variation Loss)总损失函数初始化合成图像训练模型总结前言 大家好!欢迎来到我们的深度学习代码学习系列。今天,…...
模糊综合评价模型建立
模糊综合评价模型建立 一、整体流程 二、代码实现(含大量注释) #程序文件ex14_4.py import numpy as npa np.loadtxt(data14_4.txt) # 使用定义匿名函数的形式来定义各个评价指标的隶属函数 f1 lambda x: x/8800 f2 lambda x: 1-x/8000 f3 lambda x: (x<5.5)(8-x)/(8-…...
WooCommerce短代码Shortcodes使用方法
什么是简码? 你可能以前听说过这个词,但可能认为它只是一个技术概念,一般的WordPress用户不需要了解。 或者,也许你以前也用过一两个短码,但并不完全掌握它们在更深层次上是如何工作的。 无论怎样,如果你想释放WooC…...
讯联云库项目开发日志(二)AOP参数拦截
目录 利用AOP实现参数拦截: 一、HTTP请求进入Controller(发送邮件验证码) 二、AOP切面触发 1. 切面拦截(GlobalOperactionAspect.class) method.getAnnotation() null interceptor 判断 2.参数校验注解 3. 参…...
自学嵌入式 day 18 - 数据结构 1
数据结构 相互之间存在一种或多种特定关系的数据元素的集合 1.特定关系: (1)逻辑结构: ①集合:所有在同一个集合中,关系平等。 ②线性关系:数据和数据之间是一对一的关系。(数组…...
使用WebSocket实现跨多个服务器传输音频及实时语音识别
下面我的项目信息: 项目架构: A项目(Websocket客户端 / React前端) > B项目(Websocket客户端 / Java后端)》C项目(Websocket服务端 / Node.js 后端) 项目功能: A项目…...
C++ QT图片查看器
private:QList<QString> fs;int i;void MainWindow::on_btnSlt_clicked() {QStringList files QFileDialog::getOpenFileNames(this,"选择图片",".","Images(*.png *.jpg *.bmp)");qDebug()<<files;ui->picList->clear();ui-…...
从AlphaGo到ChatGPT:AI技术如何一步步改变世界?
从AlphaGo到ChatGPT:AI技术如何一步步改变世界? 这里给大家分享一个人工智能学习网站。点击跳转到网站。 https://www.captainbed.cn/ccc 前言 在科技发展的历史长河中,人工智能(AI)技术无疑是最为璀璨的明珠之一。从…...
跨系统数据烟囱如何破局?豪森智源HSMES重构制造协同新范式
行业困局:万亿级数据资产沉睡在孤岛中 IDC最新报告显示,中国86%的制造企业存在5套以上独立信息系统,设备联网率不足42%的工厂每年因数据断点损失超千万利润。某新能源龙头企业CTO坦言:"ERP、MES、WMS系统各自为政&#…...
MySQL DBA数据运维管理经验分享:新手入门快速提升效率的新工具与技巧
MySQL DBA数据运维管理经验分享:新手入门快速提升效率的新工具与技巧 前言 作为一名数据库管理员(DBA),MySQL的运维管理是我们日常工作的核心。随着技术的不断发展,MySQL运维工具和最佳实践也在不断演进。本文将分享一些实用的MySQL DBA运维经验,并对比分析当前流行的运维…...
通义千问-langchain使用构建(二)
目录 序言xinference应用构建构建过程简单概述成效 chatchat应用构建过程成效 总结 序言 在昨天的使用langchain的基础上。又尝试了构建智能问答应用。 使用langchain chatchat这个开源包,构建了一下智能问答系统。 前置项,是使用了一下xinference框架&…...
无人机动力系统全解析:核心组件、工作原理与实用指南
无人机想要实现稳定飞行与灵活操控,离不开一套高效协同的动力系统。该系统以电机、电子调速器(电调)、电池和螺旋桨四大核心组件为基础,各部分精密配合,共同驱动无人机翱翔蓝天。接下来,本文将从基础原理入…...
【系统架构师】2025论文《WEB系统性能优化技术》
😊你好,我是小航,一个正在变秃、变强的文艺倾年。 🔔本文分享【系统架构师】2025论文《系统可靠性设计》,期待与你一同探索、学习、进步,一起卷起来叭! 目录 项目介绍背景介绍系统模块技术栈性能…...
华为Watch的ECG功能技术分析
华为Watch的ECG(心电图)功能通过硬件传感器、算法优化和医疗认证的结合,实现了对心脏电活动的监测和房颤(AFib)等心律失常的预警。以下是其技术实现方案的详细解析: 1. 硬件设计:单导联ECG传感…...
2025.05.14华为机考笔试题-第二题-200分
📌 点击直达笔试专栏 👉《大厂笔试突围》 💻 春秋招笔试突围在线OJ 👉 笔试突围OJ 02. 探险家的最佳路径 问题描述 A先生是一位探险家,他需要穿越一片危险的山地区域。这个区域可以用一个 k k k \times k...
FTP 工具 vs. 命令行 SCP/RSYNC
🔹 FTP 工具 vs. 命令行 SCP/RSYNC 对比 场景FTP/SFTP 工具(如 Cyberduck、FileZilla)命令行(scp/rsync)适用人群新手、喜欢图形化操作习惯命令行、需要自动化脚本传输少量文件✅ 拖拽即可上传下载⚠️ 需手动输入命令…...
工业HMI触摸屏技术方案:基于EFISH-SCB-RK3588/SAIL-RK3588的国产化替代赛扬N100/N150全场景技术解析
一、核心硬件选型与国产化替代优势 1. 算力与架构突破 异构八核CPU:采用4Cortex-A76(2.4GHz)4Cortex-A55(1.8GHz)架构,支持实时控制逻辑、高帧率UI渲染、协议解析多任务并行处理,相…...
MySQL主从复制与读写分离
一、MySQL主从复制(Replication) 1. 核心原理 主库(Master):处理写操作,并将数据变更记录到二进制日志(Binary Log, binlog)。 从库(Slave):通过…...
VMware虚拟机 安装 CentOS 7
原文链接: VMware虚拟机 安装 CentOS 7 安装准备 软件: VMware Workstation Pro 17.6.3 镜像: CentOS-7.0-1406-x86_64-DVD.iso 我打包好放这了,VMware 和 CentOS7 ,下载即可。 关于VMware Workstation Pro 17.6.3,傻瓜式安装即可。 CentO…...
.NET 8 kestrel 配置PEM,实现内网https
一、生成证书 mkcert 是一个简单的工具,用于制作本地信任的开发证书。它不需要配置。 mkcert官方仓库地址:GitHub - FiloSottile/mkcert: A simple zero-config tool to make locally trusted development certificates with any names youd like. 简…...
ERP系统如何做好工厂生产管理?4种ERP先进生产管理模式分享!
现代企业先进的生产管理方式有哪些?相信很多被生产效率问题困扰、谋求转型的企业都思考过这个问题。 放在以前,工厂靠老师傅经验、主管“凭感觉”安排生产,材料、设备、交期全靠人盯。那是因为20年前市场稳定,这套办法还行得通。…...
HttpServletRequest常用功能简介-笔记
javax.servlet.http.HttpServletRequest 是 ServletRequest 接口的子接口,专用于处理 HTTP 协议相关的请求。它提供了访问请求行、请求头、请求参数以及请求属性等方法。 1.请求行(Request Line) ✅ 功能说明 请求行包含客户端发送的 HTTP …...
基于面向对象设计的C++日期推算引擎:精准高效的时间运算实现与运算重载工程化实践
前引: 在软件开发中,时间与日期的处理是基础但极具挑战性的任务。传统的手工日期运算逻辑往往面临闰年规则、月份天数动态变化、时区转换等复杂场景的容错难题,且代码冗余度高、可维护性差。本文将深入探讨如何利用C的面向对象特性与成员函数…...
记一次bug排查(.exe链接mysql失败)-每天学习一点点
哎! 从来没有接手过的项目, .exe项目, 链接服务器失败 报错:"unable to connect to any of the specified mySQL hosts" 虽然不懂c的代码, 也没法反编译.exe项目, 还是像挑战尝试一下解决这个问题. 明面看就是链接mysql失败. 但是mysql对应的服务器地址是啥呢? …...
U盘启动CentOS安装与网卡驱动修复指南
遇到CentOS安装找不到盘符如何解决 1、进入安装页面,点击e进入修改 2、找到自己的U盘,修改完成后按下"ctrlx"执行继续后续安装 vmlinuz initrdinitrd.imginst.stage2hd:LABEL... quiet 改为(具体的U盘启动需要根据实际情况进行查找…...
【物联网】基于树莓派的物联网开发【3】——最新镜像下载和烧录
使用场景 程序猫将带领大家全面了解树莓派,包括从0到1组装,散热片、外壳、风扇安装,官网最新镜像下载及烧录等一系列操作! 树莓派必备配件 1、TF卡(SD内存卡)品牌闪迪:16G以上 2、type-c充电…...
K8S Gateway API 快速开始、胎教级教程
假设有如下三个节点的 K8S 集群: k8s31master 是控制节点 k8s31node1、k8s31node2 是工作节点 容器运行时是 containerd 一、Gateway 是什么 背景和目的 入口(Ingress)目前已停止更新。新的功能正在集成至网关 API 中。在 Kubernetes …...
js关于number类型的计算问题
js中关于number类型的计算 因:在js中,number类型是用于表示数值的基本类型,它遵循 IEEE 754 双精度浮点数(64 位)标准。这导致在某些计算中可能出现精度问题。 例:console.log(0.1 0.2); // 0.300000000…...
GPT-4o 遇强敌?英伟达 Eagle 2.5 视觉 AI 王者登场
前言: 在人工智能领域,视觉语言模型的竞争愈发激烈。GPT-4o 一直是该领域的佼佼者,但英伟达的 Eagle 2.5 横空出世,凭借其 80 亿参数的精简架构,在长上下文多模态任务中表现出色,尤其是在视频和高分辨率图像…...
2025最新ChatGPT Plus令牌(Token)限制完全指南:每日/每月用量详解与突破方法
2025最新ChatGPT Plus令牌(Token)限制完全解析:真相、误区与突破方案 对于支付$20/月订阅费的ChatGPT Plus用户来说,"我的ChatGPT Plus每月有多少token限制?"是一个普遍关心却常被误解的问题。随着越来越多人依赖AI工作和学习&…...
二叉树深搜:在算法森林中寻找路径
专栏:算法的魔法世界 个人主页:手握风云 目录 一、搜索算法 二、回溯算法 三、例题讲解 3.1. 计算布尔二叉树的值 3.2. 求根节点到叶节点数字之和 3.3. 二叉树剪枝 3.4. 验证二叉搜索树 3.5. 二叉搜索树中第 K 小的元素 3.6. 二叉树的所有路径 …...
力扣310.最小高度树(拓扑排序,无向图),力扣.加油站力扣.矩阵置零力扣.二叉树中的最大路径和
目录 力扣310.最小高度树(拓扑排序,无向图) 力扣.加油站 力扣.矩阵置零 力扣.二叉树中的最大路径和 力扣310.最小高度树(拓扑排序,无向图) 当他是最小高度树时候,树根必定是中心节点,且中心节点一定一两个,且…...
Java并发编程:CAS操作
1. 简介 CAS 全称是 Compare-and-Swap,即比较加交换,假设我们要对内存中的某个地址进行 CAS 操作,该地址当前值是 V,我们给定预期值 A 和新值 B,如果 V A,那么就将该地址的值更新为 B 并返回 true…...
InforSuite RDS 与django结合
InforSuite RDS(关系型数据库服务)是浪潮提供的托管式数据库服务,通常支持 MySQL、PostgreSQL、SQL Server 等主流数据库。将 Django 与 InforSuite RDS 结合使用,主要涉及数据库配置、连接优化、安全策略等环节。以下是详细的整合…...
【匹配】Needleman–Wunsch
Needleman-Wunsch 文章目录 Needleman-Wunsch1. 算法介绍2. 公式及原理3. 伪代码 1. 算法介绍 背景与目标 Needleman–Wunsch 算法由 Saul B. Needleman 和 Christian D. Wunsch 于1970年提出,是用于生物序列(如蛋白质或 DNA)全局比对&#x…...
Spring Boot 拦截器:解锁5大实用场景
一、Spring Boot中拦截器是什么 在Spring Boot中,拦截器(Interceptor)是一种基于AOP(面向切面编程)思想的组件,用于在请求处理前后插入自定义逻辑,实现权限校验、日志记录、性能监控等非业务功能…...
DVWA靶场通关笔记-SQL注入(SQL Injection Medium级别)
目录 一、SQL Injection 二、代码审计(Medium级别) 1、源码分析 (1)index.php (2)Medium.php 2、渗透思路 (1)SQL安全问题分析 (2)SQL渗透思路 三、…...
西瓜书【机器学习(周志华)】目录
第一部分:基础概念 机器学习概述 1.1 人工智能与机器学习1.2 机器学习分类1.3 机器学习应用1.4 机器学习常用术语解释 模型的评估与选择 2.1 经验误差与过拟合2.2 评估方法2.3 性能度量2.4 偏差与方差 第二部分:核心算法 线性模型 3.1 什么是回归3.2 …...
【漫话机器学习系列】260.在前向神经网络中初始权重(Initializing Weights In Feedforward Neural Networks)
前向神经网络中的权重初始化策略详解 在神经网络模型中,“初始化”常常被认为只是模型训练前的一个小步骤,但它却可能决定了整个网络能否高效收敛,是否会出现梯度爆炸或消失的问题。今天,我们通过一张生动的手绘图,来…...
每日Prompt:磨砂玻璃后的虚实对比剪影
提示词 一张黑白照片,展示了一个[主体]在磨砂或半透明表面后的模糊剪影。其[部分]轮廓清晰,紧贴表面,与其余朦胧、模糊的身影形成鲜明对比。背景是柔和的灰色渐变色调,增强了神秘和艺术的氛围。...
2025年长三角+山东省赛+ 认证杯二阶段资料助攻说明
长三角高校数模B题 完整论文代码已经在售后群 网盘链接 发布 长三角更新时间轴 5.15 23:00 B站发布 完整论文讲解视频 5.16 18:00 j降重说明 5.17 22:00 无水印版本可视化无水印代码 其余时间 写手老师 售后群在线答疑 山东省助攻C道 认证杯二阶段助攻C题 山东省认证杯…...
课程11. 计算机视觉、自编码器和生成对抗网络 (GAN)
计算机视觉、自编码器和生成对抗网络(GAN) 自动编码器Vanilla自动编码器使用 AE 生成新对象. 变分 AE (VAE)AE 条件 GAN理论示例下载并准备数据GAN模型 额外知识 课程计划: 自动编码器: 自动编码器结构;使用自动编码器…...
机器学习第十二讲:特征选择 → 选最重要的考试科目做录取判断
机器学习第十二讲:特征选择 → 选最重要的考试科目做录取判断 资料取自《零基础学机器学习》。 查看总目录:学习大纲 关于DeepSeek本地部署指南可以看下我之前写的文章:DeepSeek R1本地与线上满血版部署:超详细手把手指南 一、学…...