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

设计模式说明

23种设计模式说明

以下是常见的 23 种设计模式 分类及其核心思想、应用场景和简单代码示例,帮助你在实际开发中灵活运用:


一、创建型模式(5种)

解决对象创建问题,降低对象耦合。

1. 单例模式(Singleton)

  • 核心思想:确保一个类只有一个实例,并提供全局访问点。

  • 场景:数据库连接池、配置管理、日志对象。

  • 示例

    public class Singleton {private static volatile Singleton instance;private Singleton() {}public static Singleton getInstance() {if (instance == null) {synchronized (Singleton.class) {if (instance == null) {instance = new Singleton();}}}return instance;}
    }

2. 工厂方法模式(Factory Method)

  • 核心思想:定义创建对象的接口,由子类决定实例化哪个类。

  • 场景:日志记录器、数据库连接工厂。

  • 示例

    interface Product {void use();
    }class ConcreteProductA implements Product {public void use() { System.out.println("Product A"); }
    }abstract class Creator {public abstract Product createProduct();
    }class ConcreteCreatorA extends Creator {public Product createProduct() { return new ConcreteProductA(); }
    }

3. 抽象工厂模式(Abstract Factory)

  • 核心思想:提供一个接口,创建一系列相关或依赖对象。

  • 场景:跨平台的 UI 组件库(如按钮、文本框)。

  • 示例

    interface Button { void render(); }
    interface TextField { void input(); }class WindowsButton implements Button { public void render() { /* Windows 风格按钮 */ } }
    class MacButton implements Button { public void render() { /* Mac 风格按钮 */ } }interface GUIFactory {Button createButton();TextField createTextField();
    }class WindowsFactory implements GUIFactory {public Button createButton() { return new WindowsButton(); }public TextField createTextField() { return new WindowsTextField(); }
    }

4. 建造者模式(Builder)

  • 核心思想:分步骤构建复杂对象,隔离构造细节。

  • 场景:构造复杂对象(如 SQL 查询、HTTP 请求)。

  • 示例

    java

    复制

    class Computer {private String cpu;private String ram;// 省略其他属性和构造方法static class Builder {private String cpu;private String ram;public Builder setCpu(String cpu) { this.cpu = cpu; return this; }public Builder setRam(String ram) { this.ram = ram; return this; }public Computer build() { return new Computer(this); }}
    }// 使用
    Computer computer = new Computer.Builder().setCpu("Intel i7").setRam("16GB").build();

5. 原型模式(Prototype)

  • 核心思想:通过复制现有对象来创建新对象。

  • 场景:避免重复初始化开销(如游戏中的怪物生成)。

  • 示例

    java

    复制

    interface Prototype extends Cloneable {Prototype clone();
    }class ConcretePrototype implements Prototype {public Prototype clone() {return (ConcretePrototype) super.clone();}
    }

二、结构型模式(7种)

处理类或对象的组合,构建灵活结构。

6. 适配器模式(Adapter)

  • 核心思想:将一个接口转换为另一个客户端期望的接口。

  • 场景:整合不兼容的第三方库。

  • 示例

    java

    复制

    class LegacyLibrary {public void specificRequest() { /* 旧接口 */ }
    }interface Target {void request();
    }class Adapter implements Target {private LegacyLibrary legacy;public Adapter(LegacyLibrary legacy) { this.legacy = legacy; }public void request() { legacy.specificRequest(); }
    }
  • 备注实战经验:接口转换的中间层,比如标准品接口视作标准,分别对接不同的客户,为了减少标准品的改动,添加一层专门对接客户的接口适配层。

7. 装饰器模式(Decorator)

  • 核心思想:动态地为对象添加额外职责。

  • 场景:Java I/O 流(如 BufferedReader 装饰 FileReader)。

  • 示例

    java

    复制

    interface Coffee {double getCost();String getDescription();
    }class SimpleCoffee implements Coffee {public double getCost() { return 1.0; }public String getDescription() { return "Coffee"; }
    }abstract class CoffeeDecorator implements Coffee {protected Coffee decoratedCoffee;public CoffeeDecorator(Coffee coffee) { this.decoratedCoffee = coffee; }
    }class MilkDecorator extends CoffeeDecorator {public MilkDecorator(Coffee coffee) { super(coffee); }public double getCost() { return super.getCost() + 0.5; }public String getDescription() { return super.getDescription() + ", Milk"; }
    }

8. 代理模式(Proxy)

  • 核心思想:为其他对象提供一种代理以控制访问。

  • 场景:延迟加载(Lazy Initialization)、权限控制。

  • 示例: 

    interface Image {void display();
    }class RealImage implements Image {public RealImage(String filename) { loadFromDisk(filename); }private void loadFromDisk(String filename) { /* 加载图片 */ }public void display() { /* 显示图片 */ }
    }class ProxyImage implements Image {private RealImage realImage;private String filename;public ProxyImage(String filename) { this.filename = filename; }public void display() {if (realImage == null) {realImage = new RealImage(filename);}realImage.display();}
    }

9. 外观模式(Facade)

  • 核心思想:为复杂子系统提供一个统一的高层接口。

  • 场景:简化 API 调用(如订单支付流程封装)。

  • 示例

    java

    复制

    class PaymentService {public void processPayment() { /* 处理支付 */ }
    }
    class InventoryService {public void updateInventory() { /* 更新库存 */ }
    }class OrderFacade {private PaymentService paymentService;private InventoryService inventoryService;public void placeOrder() {paymentService.processPayment();inventoryService.updateInventory();}
    }
  • 备注实战:入库场景下各种入库复杂场景,统一封装一个高阶入库接口,用于处理所有入库逻辑,函数内部通过查询sku对比订单信息来决定那种业务类型入库。

10. 桥接模式(Bridge)

  • 核心思想:将抽象与实现分离,使它们可以独立变化。

  • 场景:跨平台图形渲染(如不同操作系统下的绘图 API)。

  • 示例

    java

    复制

    interface Renderer {void renderCircle(float radius);
    }class VectorRenderer implements Renderer {public void renderCircle(float radius) { /* 矢量渲染 */ }
    }abstract class Shape {protected Renderer renderer;public Shape(Renderer renderer) { this.renderer = renderer; }abstract void draw();
    }class Circle extends Shape {private float radius;public Circle(Renderer renderer, float radius) {super(renderer);this.radius = radius;}public void draw() { renderer.renderCircle(radius); }
    }

三、行为型模式(11种)

关注对象之间的通信和职责分配。

11. 观察者模式(Observer)

  • 核心思想:定义对象间的一对多依赖,当一个对象状态改变时,所有依赖者自动更新。

  • 场景:事件驱动系统(如 GUI 按钮点击事件)。

  • 示例

    java

    复制

    interface Observer {void update(String message);
    }class ConcreteObserver implements Observer {public void update(String message) { System.out.println("Received: " + message); }
    }class Subject {private List<Observer> observers = new ArrayList<>();public void addObserver(Observer observer) { observers.add(observer); }public void notifyObservers(String message) {for (Observer observer : observers) {observer.update(message);}}
    }
  • 备注实战:消息队列

12. 策略模式(Strategy)

  • 核心思想:定义一系列算法,封装每个算法,并使它们可互换。

  • 场景:支付方式选择(支付宝、微信、信用卡)。

  • 示例

    java

    复制

    interface PaymentStrategy {void pay(int amount);
    }class AlipayStrategy implements PaymentStrategy {public void pay(int amount) { /* 支付宝支付 */ }
    }class Context {private PaymentStrategy strategy;public void setStrategy(PaymentStrategy strategy) { this.strategy = strategy; }public void executePayment(int amount) { strategy.pay(amount); }
    }
  • 备注实战:报表的统一路由,根据不同类型选择不同报表设计。

13. 模板方法模式(Template Method)

  • 核心思想:定义一个算法的骨架,将某些步骤延迟到子类实现。

  • 场景:框架中的流程控制(如 Spring 的 JdbcTemplate)。

  • 示例

    java

    复制

    abstract class Game {abstract void initialize();abstract void startPlay();abstract void endPlay();public final void play() {initialize();startPlay();endPlay();}
    }class Cricket extends Game {void initialize() { /* 初始化板球游戏 */ }void startPlay() { /* 开始游戏 */ }void endPlay() { /* 结束游戏 */ }
    }

14. 责任链模式(Chain of Responsibility)

  • 核心思想:将请求的发送者和接收者解耦,使多个对象都有机会处理请求。

  • 场景:审批流程、异常处理链。

  • 示例

    java

    复制

    abstract class Handler {protected Handler next;public void setNext(Handler next) { this.next = next; }public abstract void handleRequest(int request);
    }class ConcreteHandlerA extends Handler {public void handleRequest(int request) {if (request <= 10) { /* 处理请求 */ }else if (next != null) { next.handleRequest(request); }}
    }
  • 备注实战:事件监听,一个业务流程完成后,广播一条通知,监听端分别做对应收尾工作。

四、设计模式总结

  • 优先理解问题场景:不要为了用模式而用模式。

  • 关注开闭原则(OCP):通过扩展而非修改现有代码来实现变化。

  • 框架中的应用:如 Spring 的依赖注入(工厂模式)、AOP(代理模式)。

附:模式速查表

类型模式名称一句话核心思想
创建型单例、工厂、建造者灵活创建对象,解耦实例化过程
结构型适配器、代理、装饰器组合对象,构建灵活结构
行为型观察者、策略、模板方法定义对象交互方式,解耦行为逻辑

掌握这些模式能显著提升代码的可维护性和扩展性!

Spring boot中的设计模式

Spring Boot 作为 Spring 框架的扩展,在底层大量使用了设计模式来简化开发、提高扩展性和维护性。以下是 Spring Boot 中常见的 设计模式及其应用场景 的详细解析:


1. 单例模式(Singleton)

  • 应用场景:Spring 容器管理的 Bean 默认是单例的,确保全局唯一实例。

  • 源码示例

    java

    复制

    @Service
    public class UserService {// 默认单例,Spring 容器中只有一个 UserService 实例
    }
  • 实现原理:通过 DefaultSingletonBeanRegistry 的 singletonObjects 缓存管理单例 Bean。


2. 工厂方法模式(Factory Method)

  • 应用场景:Bean 的创建通过工厂方法解耦。

  • 源码示例

    java

    复制

    @Configuration
    public class AppConfig {@Bean // 工厂方法,由 Spring 调用此方法创建 DataSource 实例public DataSource dataSource() {return new HikariDataSource();}
    }
  • 扩展应用BeanFactory 接口定义了 Bean 的工厂方法 getBean()


3. 抽象工厂模式(Abstract Factory)

  • 应用场景:根据不同环境创建不同的 Bean(如多数据源)。

  • 源码示例

    java

    复制

    @Configuration
    public class DataSourceConfig {@Bean@Profile("dev") // 根据 Profile 选择工厂实现public DataSource devDataSource() { /* 开发环境数据源 */ }@Bean@Profile("prod")public DataSource prodDataSource() { /* 生产环境数据源 */ }
    }

4. 模板方法模式(Template Method)

  • 应用场景:定义算法骨架,子类实现具体步骤(如 JdbcTemplate)。

  • 源码示例

    java

    复制

    public class JdbcTemplate extends JdbcAccessor {public <T> T query(String sql, ResultSetExtractor<T> rse) {// 定义执行流程:获取连接、创建语句、执行查询、处理结果Connection con = DataSourceUtils.getConnection(getDataSource());Statement stmt = con.createStatement();ResultSet rs = stmt.executeQuery(sql);return rse.extractData(rs); // 由回调处理结果}
    }

5. 代理模式(Proxy)

  • 应用场景:AOP 切面编程、事务管理。

  • 源码示例

    java

    复制

    @Service
    public class UserService {@Transactional // Spring 通过动态代理添加事务管理逻辑public void saveUser(User user) { /* ... */ }
    }
  • 实现原理

    • 使用 JDK 动态代理(基于接口)或 CGLIB(基于类)生成代理对象。

    • 代理类在方法调用前后插入切面逻辑(如 @Around 通知)。


6. 适配器模式(Adapter)

  • 应用场景:Spring MVC 中的 HandlerAdapter 处理不同类型的控制器。

  • 源码示例

    java

    复制

    public class RequestMappingHandlerAdapter implements HandlerAdapter {public ModelAndView handle(HttpServletRequest request, HttpServletResponse response, Object handler) {// 将 HTTP 请求适配到 @RequestMapping 方法}
    }

7. 观察者模式(Observer)

  • 应用场景:Spring 事件驱动模型(如 ApplicationEvent 和 ApplicationListener)。

  • 源码示例

    java

    复制

    // 自定义事件
    public class OrderCreatedEvent extends ApplicationEvent { /* ... */ }// 监听事件
    @Component
    public class EmailListener implements ApplicationListener<OrderCreatedEvent> {public void onApplicationEvent(OrderCreatedEvent event) {// 发送邮件通知}
    }// 发布事件
    @Autowired
    private ApplicationEventPublisher publisher;
    publisher.publishEvent(new OrderCreatedEvent(this, order));

8. 策略模式(Strategy)

  • 应用场景:多数据源路由、缓存策略选择。

  • 源码示例

    java

    复制

    public interface CacheStrategy {Object get(String key);
    }@Component("redisCache")
    public class RedisCacheStrategy implements CacheStrategy { /* ... */ }@Component("localCache")
    public class LocalCacheStrategy implements CacheStrategy { /* ... */ }// 根据条件动态选择策略
    @Autowired
    private Map<String, CacheStrategy> strategies;public CacheStrategy getStrategy(String type) {return strategies.get(type + "Cache");
    }

9. 装饰器模式(Decorator)

  • 应用场景:增强请求/响应对象(如 HttpServletRequestWrapper)。

  • 源码示例

    java

    复制

    public class CachingHttpServletRequest extends HttpServletRequestWrapper {private byte[] cachedBody;public CachingHttpServletRequest(HttpServletRequest request) {super(request);// 缓存请求体以便多次读取this.cachedBody = StreamUtils.copyToByteArray(request.getInputStream());}@Overridepublic ServletInputStream getInputStream() {return new CachedBodyServletInputStream(cachedBody);}
    }

10. 责任链模式(Chain of Responsibility)

  • 应用场景:Spring Security 的过滤器链、拦截器链。

  • 源码示例

    java

    复制

    public class SecurityFilterChain {private List<Filter> filters;public void doFilter(ServletRequest request, ServletResponse response) {for (Filter filter : filters) {filter.doFilter(request, response, chain);}}
    }

11. 建造者模式(Builder)

  • 应用场景:构建复杂配置对象(如 SpringApplicationBuilder)。

  • 源码示例

    java

    复制

    new SpringApplicationBuilder().sources(Parent.class).child(Application.class).bannerMode(Banner.Mode.OFF).run(args);

总结

Spring Boot 通过灵活运用设计模式,实现了以下目标:

  1. 解耦与扩展性:如工厂模式、策略模式。

  2. 代码复用:如模板方法模式、装饰器模式。

  3. 动态行为控制:如代理模式、观察者模式。

  4. 简化复杂逻辑:如建造者模式、责任链模式。

理解这些模式在 Spring Boot 中的应用,有助于更好地掌握框架设计思想,并在实际开发中编写高内聚、低耦合的代码。

相关文章:

设计模式说明

23种设计模式说明 以下是常见的 23 种设计模式 分类及其核心思想、应用场景和简单代码示例&#xff0c;帮助你在实际开发中灵活运用&#xff1a; 一、创建型模式&#xff08;5种&#xff09; 解决对象创建问题&#xff0c;降低对象耦合。 1. 单例模式&#xff08;Singleton&…...

K8s 1.27.1 实战系列(四)验证集群及应用部署测试

一、验证集群可用性 1、检查节点 kubectl get nodes ------------------------------------------------------ NAME STATUS ROLES AGE VERSION k8s-master Ready control-plane 3h48m v1.27.1 k8s-node1 Ready <none> …...

Artec Leo+Ray II 三维扫描仪成功为VR展数字化30吨重设备-沪敖3D

挑战&#xff1a;在贸易展上展示重达30吨的机械设备&#xff0c;同时克服设备搬运和展示的难题&#xff0c;减轻物流负担。。 解决方案&#xff1a;Artec Leo、Artec Ray II、Artec Studio、Blender、Unity、Microsoft HoloLens、HTC VIVE PRO 效果&#xff1a;在虚拟展厅中&am…...

Redis 各数据类型使用场景详解

1. 字符串&#xff08;String&#xff09; 场景 1&#xff1a;计数器&#xff08;如文章阅读量&#xff09; 问题&#xff1a; 高并发下对同一数值进行增减操作时&#xff0c;需保证原子性&#xff0c;避免竞态条件导致数据不一致。 频繁读写可能成为性能瓶颈。 解决方案&a…...

spark写数据库用连接池找不到driver类

最近遇到一个很离谱的bug&#xff0c;在写spark代码把数据写到mysql的时候考虑到连接的开销&#xff0c;所以用了HikariCP连接池&#xff0c;但是无语的是程序执行死活加载不到mysql的Driver类&#xff0c;但是解压了jar看到mysql-conn包就在lib下面&#xff0c;版本也是5.x的没…...

上传文件到对象存储是选择前端还是后端

对于云上对象存储的上传方式选择&#xff08;前端直传或后端代理上传&#xff09;&#xff0c;需综合考虑安全性、性能、成本、业务需求等因素。 1. 推荐前端直传的场景 适用条件&#xff1a; 大文件上传&#xff08;如视频、大型数据集&#xff09;高并发场景&#xff08;如…...

NanoMQ ds笔记250306

NanoMQ多版本下载地址 https://www.emqx.com/zh/downloads/nanomq NanoMQ官方文档 https://nanomq.io/docs/zh/latest/ NanoMQ 是一个专为物联网边缘计算设计的轻量级、高性能 MQTT 消息代理&#xff08;Message Broker&#xff09;&#xff0c;由中国的开源物联网公司 EMQ 开…...

sqlmap:从基础用法到漏洞利用实战

1. sqlmap基础认知 sqlmap是一款开源的渗透测试工具&#xff0c;能自动检测和利用SQL注入漏洞&#xff0c;支持MySQL、Oracle、PostgreSQL等多种数据库管理系统。其设计旨在简化SQL注入检测流程&#xff0c;助力安全人员在复杂网络环境中快速定位与评估漏洞风险。它通过发送精…...

DFS学习笔记

题目描述 X 国王有一个地宫宝库。是 nm 个格子的矩阵。每个格子放一件宝贝。每个宝贝贴着价值标签。 地宫的入口在左上角&#xff0c;出口在右下角。 小明被带到地宫的入口&#xff0c;国王要求他只能向右或向下行走。 走过某个格子时&#xff0c;如果那个格子中的宝贝价值…...

C++ STL string容器全解析

一、引言 在 C 编程的广阔领域中&#xff0c;字符串处理是一项极为基础且频繁的操作。从简单的文本解析&#xff0c;到复杂的文件读取与处理&#xff0c;字符串几乎无处不在。而 C 中的 string 容器&#xff0c;就像是一把瑞士军刀&#xff0c;为我们处理字符串提供了强大而便…...

React基础之项目创建

项目创建 create-react-app 项目名(小写) 运行 pnpm run start 在React中&#xff0c;使用的语法格式是jsx&#xff0c;也就是js与html相结合的形式 import logo from ./logo.svg; import ./App.css; function App() { return ( <div className"App"> <head…...

迷你世界脚本道具接口:Item

道具接口&#xff1a;Item 彼得兔 更新时间: 2023-04-26 10:26:18 继承自 Actor 具体函数名及描述如下: 序号 函数名 函数描述 1 getItemName(...) 获取道具名称 2 getItemId(...) 获取actor对应的道具ID&#xff0c;如球类等 3 getDropItemNum(...) …...

Unity摄像机跟随物体

功能描述 实现摄像机跟随物体&#xff0c;并使物体始终保持在画面中心位置。 实现步骤 创建脚本&#xff1a;在Unity中创建一个新的C#脚本&#xff0c;命名为CameraFollow。 代码如下&#xff1a; using UnityEngine;public class CameraFollow : MonoBehaviour {public Tran…...

计算机毕业设计SpringBoot+Vue.js青年公寓服务平台(源码+文档+PPT+讲解)

温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 作者简介&#xff1a;Java领…...

vue实现日历签到效果

在工作任务进行时&#xff0c;有一个签到日历的功能需求要实现&#xff0c;经过文档查询和样式优化实现了需求&#xff0c;在此记录一下。 技术背景&#xff1a;vue2vant(样式控件&#xff09; less 一个公共样式文件 html实现部分&#xff1a; <div class"calenderB…...

(十 八)趣学设计模式 之 观察者模式!

目录 一、 啥是观察者模式&#xff1f;二、 为什么要用观察者模式&#xff1f;三、 观察者模式的实现方式四、 观察者模式的优缺点五、 观察者模式的应用场景六、 总结 &#x1f31f;我的其他文章也讲解的比较有趣&#x1f601;&#xff0c;如果喜欢博主的讲解方式&#xff0c;…...

笔记:在Git中.gitmodules文件的功能和作用和如何使用

一、目的&#xff1a;简单介绍下在Git中.gitmodules文件的功能和作用已经 .gitmodules 文件是 Git 子模块&#xff08;submodule&#xff09;功能的一部分&#xff0c;用于管理和配置子模块。子模块允许一个 Git 仓库包含另一个 Git 仓库作为其子目录&#xff0c;这对于管理依赖…...

Swift 常量

Swift 常量 引言 Swift 是一种由苹果公司开发的编程语言,主要用于 iOS、macOS、watchOS 和 tvOS 等平台的应用开发。在 Swift 中,常量是一种不可变的变量,它用于存储固定不变的值。了解和使用常量是 Swift 编程的基础,本文将详细介绍 Swift 常量的概念、类型、声明以及使…...

Ubuntu20.04双系统安装及软件安装(七):Anaconda3

Ubuntu20.04双系统安装及软件安装&#xff08;七&#xff09;&#xff1a;Anaconda3 打开Anaconda官网&#xff0c;在右侧处填写邮箱&#xff08;要真实有效&#xff01;&#xff09;&#xff0c;然后Submit。会出现如图示的Success界面。 进入填写的邮箱&#xff0c;有一封Ana…...

Google AI概览升级,AI模式全新登场!

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…...

【智能体架构:Agent】LangChain智能体类型ReAct、Self-ASK的区别

1. 什么是智能体 将大语言模型作为一个推理引擎。给定一个任务&#xff0c; 智能体自动生成完成任务所需步骤&#xff0c; 执行相应动作&#xff08;例如选择并调用工具&#xff09;&#xff0c; 直到任务完成。 2. 先定义工具&#xff1a;Tools 可以是一个函数或三方 API也…...

nginx 配置403页面(已亲测)

问题&#xff1a;GET请求访问漏洞url即可看到泄露的内网ip 解决方式&#xff1a; 1.配置nginx 不显示真实Ip 2.限制接口只能是POST请求 具体配置&#xff1a; 编写一个403.html 在nginx的配置文件中&#xff0c;配置location参数&#xff1a; location /api/validationCode…...

安卓基础组件Looper - 02 native层面的剖析

文章目录 native使用使用总结创建Looper构造函数创建(不推荐)使用举例源代码 Looper::prepare 获取Looper可忽略初始化Looper主动休眠 pollAll主动唤醒 wake 发送消息 sendMessage轮询消息 native使用 Android Native Looper 机制 - 掘金 (juejin.cn) /system/core/libutils/…...

nodejs关于后端服务开发的探究

前提 在当前的环境中关于web server的主流开发基本上都是java、php之类的&#xff0c;其中java spring系列基本上占了大头&#xff0c;而python之流也在奋起直追&#xff0c;但别忘了nodejs也是可以做这个服务的&#xff0c;只是位置有点尴尬&#xff0c;现在就来探究下nodejs…...

QTday4

1:是进度条通过线程自己动起来 mythread.h #ifndef MYTHREAD_H #define MYTHREAD_H #include <QThread>class mythread : public QThread {Q_OBJECT public:mythread(QObject* parent nullptr); protected:virtual void run() override; private: signals:virtual voi…...

服务器时间同步

方法一 [rootbogon hwh-ansible]# cat time-sync.sh #!/bin/bash # NTP 服务器信息 NTP_SERVER"192.168.42.12" PASSWORD"123456" # 多个 IP 地址 HOSTS("192.168.42.8" "192.168.42.9" "192.168.42.10" "192.168.42…...

蓝桥杯备赛日记【day1】(c++赛道)

一、裁纸刀问题&#xff08;2022、规律、思维、省赛&#xff09; 解法思路&#xff1a; 参考题目给出的例子发现。不管要裁剪多少次。最外围的四次是固定的。然后通过观察发现&#xff0c;我们的行的裁剪次数为&#xff08;m-1&#xff09; 次&#xff0c;而每行都需要裁剪列数…...

DeepSeek大模型 —— 全维度技术解析

DeepSeek大模型 —— 全维度技术解析 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家&#xff01;点我试试&#xff01;&#xff01; 文章目录 DeepSeek大模型 —— 全维度技术解析一、模型架构全景解析1.1…...

嵌入式开发:傅里叶变换(5):基于STM32,实现CMSIS中的DSP库

目录 步骤 1&#xff1a;准备工作 步骤 2&#xff1a;创建 Keil 项目&#xff0c;并配置工程 步骤 3&#xff1a;在MDK工程上添加 CMSIS-DSP 库 步骤 5&#xff1a;编写代码 步骤 6&#xff1a;配置时钟和优化 步骤 7&#xff1a;调试与验证 步骤 8&#xff1a;优化和调…...

Ubuntu 24.04 配置ODBC连接ORACLE 11G数据库

1. 安装必要工具和驱动 1.1 安装unixODBC和依赖库 # apt update # apt install unixodbc unixodbc-dev libaio1 执行失败&#xff0c;报错 libaio1包找不到&#xff0c;先跳过&#xff0c;安装其他两个。 # apt install unixodbc unixodbc-dev 安装成功 1.2 下载Oracle…...

upload-labs靶场 1-21通关

目录 1.Pass-01 前端绕过 分析 解题 2.Pass-02 服务器端检测--修改IMME 分析 解题 3.Pass-03 黑名单绕过 分析 解题 4.Pass-04 .htaccess绕过 分析 解题 5.Pass-05 . .绕过和.user.ini绕过 分析 解题 6.Pass-06 大小写绕过 分析 解题 7.Pass-07 空格绕过 分…...

Docker新手入门(持续更新中)

一、定义 快速构建、运行、管理应用的工具。 Docker可以帮助我们下载应用镜像&#xff0c;创建并运行镜像的容器&#xff0c;从而快速部署应用。 所谓镜像&#xff0c;就是将应用所需的函数库、依赖、配置等应用一起打包得到的。 所谓容器&#xff0c;为每个镜像的应用进程创建…...

c语言笔记 指针篇(上)

1.指针 在计算的存储器中有很多的存储单元&#xff0c;我们的操作系统把这些存储单元以字节为单位进行编号&#xff0c;也就是每个存储单元&#xff08;字节&#xff09;&#xff0c;都有编码。这些编码在我们内存中就称为地址。一个字节有八位&#xff0c;位是存储信息的最小单…...

要查看 SQLite 数据库中的所有表,可以通过查询 SQLite 的系统表 sqlite_master

要查看 SQLite 数据库中的所有表&#xff0c;可以查询 SQLite 的系统表 sqlite_master。 每个 SQLite 数据库都包含一个名为 sqlite_master 的系统表。该表定义了数据库的模式&#xff0c;存储了数据库中所有表、索引、视图和触发器等对象的信息。 通过查询 sqlite_master&am…...

C#释放内存空间的方法

目录 前言释放 C# 对象内存的六种方法1、手动释放内存空间2、使用 Using 语句3、使用 垃圾回收器4、GC.Collect() 方法5、GC.WaitForPendingFinalizers() 方法6、WeakReference 类 注意 前言 当不再需要对象时释放内存空间对于防止内存泄漏和提高应用程序性能至关重要。C# 提供…...

mapbox基础,使用点类型geojson加载symbol符号图层,用于标注文字

👨‍⚕️ 主页: gis分享者 👨‍⚕️ 感谢各位大佬 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍⚕️ 收录于专栏:mapbox 从入门到精通 文章目录 一、🍀前言1.1 ☘️mapboxgl.Map 地图对象1.2 ☘️mapboxgl.Map style属性1.3 ☘️symbol符号图层样式二、🍀使用点类型…...

Java数组详解/从JVM理解数组/数组反转/随机排名/数组在计算机如何存储

本文详细讲解了数组的定义、数组的访问方法、数组的遍历、静态数组和动态数组、以及数组中的自动类型转换、引用类型指向数组的地址、以及从JVM理解数组、空指针异常、数组反转、随机排名的案例。 数组是存放在连续内存空间上的相同类型数据的集合。 数组可以方便的通过下标索…...

网络安全wireshark题目

一、填空题&#xff1a; 网络安全的目标是在计算机网络的信息传输、存储与处理的整个过程中&#xff0c;提高 物理逻辑上 的防护、监控、反应恢复和 对抗 的能力。SSL协议是在网络传输过程中&#xff0c;提供通信双方网络信息 保密性 和 可靠性 。TCP/IP网络安全管理…...

TomcatServlet

https://www.bilibili.com/video/BV1UN411x7xe tomcat tomcat 架构图&#xff0c;与 jre&#xff0c;应用程序之前的关系 安装使用 tomcat 10 开始&#xff0c;api 从 javax.* 转为使用 jakarta.*&#xff0c;需要至少使用 jdk 11 cmd 中默认 gbk 编码&#xff0c;解决控制…...

Seurat - Guided Clustering Tutorial官方文档学习及复现

由于本人没有使用过Seurat4.0&#xff0c;而是直接使用的最新版。所以本文都是基于Seurat5.2.0&#xff08;截止2025/3/6&#xff09;来进行撰写。 参考的官方教程来进行学习&#xff08;上图中的 Guided tutorial-2.700 PBMCs&#xff09;&#xff0c;肯定没有官方文档那么全面…...

Python数据分析面试题及参考答案

目录 处理 DataFrame 中多列缺失值的 5 种方法 批量替换指定列中的异常值为中位数 使用正则表达式清洗电话号码格式 合并两个存在部分重叠列的 DataFrame 将非结构化 JSON 日志转换为结构化表格 处理日期列中的多种非标准格式(如 "2023 年 12 月 / 05 日") 识…...

极狐GitLab 正式发布安全版本17.9.1、17.8.4、17.7.6

本分分享极狐GitLab 补丁版本 17.9.1、17.8.4、17.7.6 的详细内容。这几个版本包含重要的缺陷和安全修复代码&#xff0c;我们强烈建议所有私有化部署用户应该立即升级到上述的某一个版本。对于极狐GitLab SaaS&#xff0c;技术团队已经进行了升级&#xff0c;无需用户采取任何…...

【JavaSE-7】方法的使用

1、方法的概念和使用 1.1、什么是方法 方法&#xff08;method&#xff09;是程序中最小的执行单元&#xff0c;类似于 C语言中的函数&#xff0c;方法存在的意义&#xff1a; 是能够模块化的组织代码(当代码规模比较复杂的时候).做到代码被重复使用, 一份代码可以在多个位置…...

阿里推出全新推理模型(因果语言模型),仅1/20参数媲美DeepSeek R1

阿里Qwen 团队正式发布了他们最新的研究成果——QwQ-32B大语言模型&#xff01;这款模型不仅名字萌萌哒(QwQ)&#xff0c;实力更是不容小觑&#xff01;&#x1f60e; QwQ-32B 已在 Hugging Face 和 ModelScope 开源&#xff0c;采用了 Apache 2.0 开源协议。大家可通过 Qwen C…...

C语言笔记(通讯录)

目录 1.通讯录的架构 2.通讯录的功能 3.实现静态通讯录的功能步骤 3.1.创建通讯录数组 3.2.显示功能菜单 3.3.初始化通讯录 3.4.添加联系人的信息 3.5.显示联系人的信息 3.6.查找某个人的信息 3.7.删除某一个联系人信息 3.8.修改某一联系人的信息 3.9.按名字对联系…...

【Manus资料合集】激活码内测渠道+《Manus Al:Agent应用的ChatGPT时刻》(附资源)

DeepSeek 之后&#xff0c;又一个AI沸腾&#xff0c;冲击的不仅仅是通用大模型。 ——全球首款通用AI Agent的破圈启示录 2025年3月6日凌晨&#xff0c;全球AI圈被一款名为Manus的产品彻底点燃。由Monica团队&#xff08;隶属中国夜莺科技&#xff09;推出的“全球首款通用AI…...

Python 面向对象高级编程-定制类

目录 __str__ __iter__ __getitem__ __getattr__ __call__ 小结 看到类似__slots__这种形如__xxx__的变量或者函数名就要注意&#xff0c;这些在Python中是有特殊用途的。 __slots__我们已经知道怎么用了&#xff0c;__len__()方法我们也知道是为了能让class作用于len()…...

安装remixd,在VScode创建hardhat

在终端&#xff0c;以管理员身份&#xff0c;cmd 需要科学上网 npm install -g remix-project/remixd 在vscode插件中&#xff0c;安装solidity插件&#xff0c;是暗灰色那款 1.将nodeJs的版本升级至18以上 2.在vscode打开一个新的文件&#xff0c;在终端输入 npx hardhat 3.…...

开发环境搭建-02.后端环境搭建-熟悉项目结构

一.后端环境搭建...

Linux(Centos 7.6)命令详解:vi

1.命令作用 vi/vim 是Linux 系统内置不可或缺的文本编辑命令&#xff0c;vim 是vi 的加强版本&#xff0c;兼容vi 的所有指令&#xff0c;不仅能编辑文本&#xff0c;而且还具有shell 程序编辑的功能&#xff0c;可以不同颜色的字体来辨别语法的正确性。 2.命令语法 usage: …...