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

软考中级软件设计师——设计模式篇

一、设计模式核心分类

设计模式分为 3 大类,共 23 种模式(考试常考约 10-15 种):

分类核心模式考试重点
创建型模式工厂方法、抽象工厂、单例、生成器、原型单例模式的实现(懒汉、饿汉)、工厂模式的应用场景
结构型模式适配器、代理、装饰器、组合、外观、桥接适配器与代理的区别、装饰器模式的动态扩展特性
行为型模式观察者、策略、模板方法、职责链、状态、迭代器、备忘录、中介者、解释器观察者模式的事件驱动、策略模式的算法替换、模板方法的流程固定步骤可扩展特性

二、设计模式分类(GoF 23种模式)

考试重点通常集中在以下分类及典型模式:

1. 创建型模式

核心:对象实例化的灵活控制。

1. 工厂方法模式(Factory Method)
  • 定义
    定义一个创建对象的接口,但由子类决定具体实例化的类。

  • 类图结构

    • 抽象工厂类(Creator):声明工厂方法(如createProduct())。

    • 具体工厂类(ConcreteCreator):实现工厂方法,返回具体产品对象。

    • 抽象产品类(Product):定义产品的接口。

    • 具体产品类(ConcreteProduct):实现产品接口。

  • 应用场景

    • 日志记录器(不同格式的日志:文件、数据库)。

    • 数据库连接(不同数据库驱动:MySQL、Oracle)。

  • 优点

    • 符合开闭原则,新增产品只需扩展子类。

    • 客户端代码与具体产品解耦。

  • 代码示例(Java)

    interface Product { void use(); }
    class ConcreteProductA implements Product { public void use() { /*...*/ } }
    abstract class Creator {public void operation() {Product p = createProduct();p.use();}abstract Product createProduct();
    }
    class ConcreteCreatorA extends Creator {public Product createProduct() { return new ConcreteProductA(); }
    }
    2. 抽象工厂模式(Abstract Factory)
  • 定义
    提供一个接口,用于创建相关或依赖对象的家族,而无需指定具体类。

  • 类图结构

    • 抽象工厂接口(AbstractFactory):声明一组创建产品的方法(如createButton()createTextBox())。

    • 具体工厂类(ConcreteFactory):实现接口,生成同一产品族的具体对象。

    • 抽象产品接口(Button, TextBox):定义产品的功能。

    • 具体产品类(WindowsButton, MacButton):实现不同平台的组件。

  • 与工厂方法的区别

    • 工厂方法:针对单一产品等级结构。

    • 抽象工厂:针对多个产品等级结构(产品族)。

  • 缺点

    • 扩展新产品族困难(需修改抽象工厂接口)。

3. 单例模式(Singleton)
  • 定义
    保证一个类只有一个实例,并提供它的全局访问点。

  • 实现要点

    • 私有构造函数。

    • 静态成员变量保存唯一实例。

    • 提供静态方法获取实例(如getInstance())。

  • 线程安全实现

    • 双重检查锁(DCL)(适用于Java/C#):

      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;}
      }
    • 静态内部类(延迟加载且线程安全):

      public class Singleton {private Singleton() {}private static class Holder {static final Singleton INSTANCE = new Singleton();}public static Singleton getInstance() {return Holder.INSTANCE;}
      }

4. 生成器模式(Builder)
  • 定义
    将一个复杂对象的构造过程与表示分离,使得同样的构建过程可以创建不同的表示。

  • 类图结构

    • 抽象建造者(Builder):定义构建步骤的抽象接口(如buildPartA()buildPartB())。

    • 具体建造者(ConcreteBuilder):实现构建步骤,提供获取结果的接口。

    • 指挥者(Director):构造一个使用Builder接口的对象。

    • 产品(Product):最终构建的复杂对象。

  • 应用场景

    • 生成复杂对象(如XML文档、HTML报表)。

    • 创建具有多个可选参数的对象(避免构造函数参数爆炸)。

  • 代码示例(简化版)

    class Computer {private String cpu;private String ram;// 构造函数私有,只能通过Builder创建private Computer(Builder builder) { /*...*/ }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("i7").setRam("16GB").build();
5. 原型模式(Prototype)
  • 定义
    用原型实例指定创建对象的种类,并且通过复制这些原型创建新的对象。

  • 实现要点

    • 实现Cloneable接口(Java)或深拷贝逻辑。

    • 提供clone()方法(浅拷贝需谨慎处理引用类型)。

  • 应用场景

    • 对象创建成本较高(如数据库查询结果缓存后复制)。

    • 需要动态配置对象属性(如游戏中的敌人克隆)。

  • 深拷贝 vs 浅拷贝

    • 浅拷贝:复制基本类型字段,引用类型字段共享同一对象。

    • 深拷贝:引用类型字段也递归复制。

  • 代码示例(Java)

    class Prototype implements Cloneable {private List<String> list = new ArrayList<>();@Overridepublic Prototype clone() {try {Prototype copy = (Prototype) super.clone();copy.list = new ArrayList<>(this.list); // 深拷贝listreturn copy;} catch (CloneNotSupportedException e) {return null;}}
    }


2. 结构型模式

核心:通过组合类或对象形成更大结构。

1. 适配器模式(Adapter)
  • 定义:将一个类的接口转换成客户希望的另一个接口。

  • 实现方式

    • 类适配器:通过继承适配者类实现目标接口。

    • 对象适配器:通过组合适配者对象实现目标接口。

  • 应用场景

    • 整合第三方库(如不同格式的日志接口转换)。

    • 旧系统接口升级兼容。

  • 代码示例

    // 目标接口
    interface Target { void request(); }// 适配者类
    class Adaptee { void specificRequest() { /*...*/ } }// 对象适配器
    class Adapter implements Target {private Adaptee adaptee;public Adapter(Adaptee adaptee) { this.adaptee = adaptee; }public void request() { adaptee.specificRequest(); }
    }


2. 装饰器模式(Decorator)
  • 定义:动态地为对象添加额外职责,避免子类膨胀。

  • 结构:

    • 组件接口(Component):定义一个对象接口,可以对这些对象动态地添加职责。

    • 具体组件(ConcreteComponent):定义一个对象,可以对这个对象添加一些职责。

    • 装饰器基类(Decorator):继承组件接口,持有组件实例。

    • 具体装饰器(ConcreteDecorator):添加附加功能。

  • 应用场景

    • Java I/O流(如BufferedInputStream装饰FileInputStream)。

    • 动态扩展对象行为(如为订单添加折扣、税费计算)。

  • 代码示例

    interface Coffee { double getCost(); }
    class SimpleCoffee implements Coffee { public double getCost() { return 10; } }abstract class CoffeeDecorator implements Coffee {protected Coffee coffee;public CoffeeDecorator(Coffee coffee) { this.coffee = coffee; }
    }class MilkDecorator extends CoffeeDecorator {public MilkDecorator(Coffee coffee) { super(coffee); }public double getCost() { return coffee.getCost() + 2; }
    }
    3. 代理模式(Proxy)
  • 定义:为其他对象提供一种代理以控制对这个对象的访问。

  • 类型

    • 虚拟代理:延迟加载(如图片懒加载)。

    • 保护代理:控制访问权限。

    • 远程代理:跨网络访问对象(如RPC)。

  • 应用场景

    • Spring AOP中的动态代理(JDK动态代理、CGLIB)。

    • 访问敏感资源时的权限校验。

  • 代码示例

    interface Image { void display(); }class RealImage implements Image {public RealImage(String filename) { loadFromDisk(); }private void loadFromDisk() { /* 耗时操作 */ }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();}
    }
    4. 组合模式(Composite)
  • 定义:将对象组合成树形结构以表示“部分-整体”层次,使客户端统一处理单个对象和组合对象。

  • 结构

    • 组件接口(Component):定义叶子节点和容器的公共操作(如add()remove())。

    • 叶子节点(Leaf):无子节点,实现基础操作。

    • 复合节点(Composite):包含子组件,管理子组件集合。

  • 应用场景

    • 文件系统(文件与文件夹的统一操作)。

    • GUI容器控件(如Panel包含Button、Label等)。

  • 代码示例

    interface FileSystemComponent {void display();
    }class File implements FileSystemComponent {public void display() { System.out.println("显示文件"); }
    }class Folder implements FileSystemComponent {private List<FileSystemComponent> children = new ArrayList<>();public void add(FileSystemComponent cmp) { children.add(cmp); }public void display() {for (FileSystemComponent cmp : children) cmp.display();}
    }
    5. 外观模式(Facade)
  • 定义:为子系统中的一组接口提供一个一致的界面,简化客户端调用。

  • 应用场景

    • 复杂API的简化封装(如支付系统的统一入口)。

    • 微服务网关聚合多个服务接口。

  • 代码示例

    class SubsystemA { void operationA() { /*...*/ } }
    class SubsystemB { void operationB() { /*...*/ } }class Facade {private SubsystemA a = new SubsystemA();private SubsystemB b = new SubsystemB();public void simplifiedOperation() {a.operationA();b.operationB();}
    }
    6. 享元模式(Flyweight)
  • 定义:运用共享技术有效地支持大量细粒度的对象。

  • 关键点

    • 内部状态:可共享的部分(如字符的Unicode值)。

    • 外部状态:不可共享的部分(如字符的位置、颜色)。

  • 应用场景

    • 文本编辑器中的字符对象池。

    • 游戏中的粒子系统(共享粒子类型,外部传入位置和速度)。

  • 代码示例

    class Flyweight {private String intrinsicState; // 内部状态public Flyweight(String intrinsicState) { this.intrinsicState = intrinsicState; }public void operation(String extrinsicState) { /*...*/ }
    }class FlyweightFactory {private Map<String, Flyweight> pool = new HashMap<>();public Flyweight getFlyweight(String key) {if (!pool.containsKey(key)) pool.put(key, new Flyweight(key));return pool.get(key);}
    }
    7. 桥接模式(Bridge)
  • 定义:将抽象部分与实现部分分离,使它们可以独立变化。

  • 结构

    • 抽象化(Abstraction):定义高层控制逻辑。

    • 扩展抽象化(RefinedAbstraction):扩展抽象逻辑。

    • 实现者(Implementor):定义底层实现接口。

    • 具体实现者(ConcreteImplementor):实现具体功能。

  • 应用场景

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

    • 消息发送方式(邮件、短信)与内容类型的解耦。

  • 代码示例

    interface Renderer { void renderCircle(float radius); }
    class VectorRenderer implements Renderer { /* 矢量渲染 */ }
    class RasterRenderer implements Renderer { /* 栅格渲染 */ }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; }void draw() { renderer.renderCircle(radius); }
    }

3. 行为型模式

核心:对象间的通信与职责分配。

1. 模板方法模式(Template Method)
  • 定义
    定义算法的骨架,将某些步骤延迟到子类实现,使得子类可以不改变算法结构即可重定义某些步骤。

  • 结构

    • 抽象类(AbstractClass):定义模板方法(final修饰)和抽象步骤方法(如primitiveStep1())。

    • 具体子类(ConcreteClass):实现抽象步骤。

  • 应用场景

    • 框架设计(如Spring的JdbcTemplate)。

    • 统一流程控制(如订单处理流程:验证→支付→发货)。

  • 代码示例

    abstract class AbstractClass {public final void templateMethod() { // 模板方法step1();step2(); // 抽象步骤}void step1() { /* 默认实现 */ }abstract void step2();
    }class ConcreteClass extends AbstractClass {void step2() { /* 子类实现 */ }
    }
    2. 策略模式(Strategy)
  • 定义:定义算法族,封装每个算法,使其可互相替换,让算法的变化独立于使用它的客户端。

  • 结构

    • 策略接口(Strategy):定义算法方法(如execute())。

    • 具体策略类(ConcreteStrategy):实现不同算法。

    • 上下文类(Context):持有策略对象并调用其算法。

  • 应用场景

    • 支付方式选择(支付宝、微信支付等)。

    • 排序算法切换(冒泡排序、快速排序)。

  • 代码示例

    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 executePay(int amount) { strategy.pay(amount); }
    }
    3. 观察者模式(Observer)
  • 定义:定义对象间的一对多依赖关系,当一个对象(主题)状态改变时,所有依赖它的对象(观察者)自动收到通知并更新。

  • 结构

    • 主题接口(Subject):提供注册、删除、通知观察者的方法。

    • 具体主题(ConcreteSubject):维护观察者列表,状态改变时通知所有观察者。

    • 观察者接口(Observer):定义更新方法(如update())。

    • 具体观察者(ConcreteObserver):实现更新逻辑。

  • 应用场景

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

    • 发布-订阅模型(如消息队列)。

  • 代码示例

    interface Observer { void update(String message); }class ConcreteObserver implements Observer {public void update(String message) { /* 处理消息 */ }
    }class Subject {private List<Observer> observers = new ArrayList<>();public void addObserver(Observer o) { observers.add(o); }public void notifyObservers(String message) {for (Observer o : observers) o.update(message);}
    }
    4. 责任链模式(Chain of Responsibility)
  • 定义:使多个对象有机会处理请求,从而避免请求的发送者和接受者之前的耦合关系。将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。

  • 结构

    • 处理器接口(Handler):定义处理请求的方法和设置下一个处理器的链接方法。

    • 具体处理器(ConcreteHandler):实现处理逻辑,决定是否处理请求或传递给下一个处理器。

  • 应用场景

    • 审批流程(如请假审批:组长→经理→CEO)。

    • 异常处理链(如Spring MVC的拦截器)。

  • 代码示例

    abstract class Handler {protected Handler next;public void setNext(Handler next) { this.next = next; }public abstract void handleRequest(Request request);
    }class ManagerHandler extends Handler {public void handleRequest(Request request) {if (canHandle(request)) { /* 处理 */ } else if (next != null) next.handleRequest(request);}
    }
    5. 命令模式(Command)
  • 定义:将请求封装为对象,以便支持请求的排队、记录、撤销等操作。

  • 结构

    • 命令接口(Command):声明执行方法(如execute())。

    • 具体命令(ConcreteCommand):绑定接收者对象并调用其方法。

    • 调用者(Invoker):触发命令执行(如按钮点击)。

    • 接收者(Receiver):实际执行操作的对象。

  • 应用场景

    • 图形界面菜单操作(撤销、重做)。

    • 任务队列调度(如线程池任务提交)。

  • 代码示例

    interface Command { void execute(); }class LightOnCommand implements Command {private Light light;public LightOnCommand(Light light) { this.light = light; }public void execute() { light.on(); }
    }class RemoteControl { // Invokerprivate Command command;public void setCommand(Command cmd) { this.command = cmd; }public void pressButton() { command.execute(); }
    }
    6. 状态模式(State)
  • 定义:允许对象在其内部状态改变时改变行为,将状态相关的逻辑封装到独立的状态类中。

  • 结构

    • 状态接口(State):定义状态行为方法(如handle())。

    • 具体状态类(ConcreteState):实现不同状态下的行为。

    • 上下文类(Context):持有状态对象,委托状态处理请求。

  • 应用场景

    • 订单状态流转(待支付→已发货→已完成)。

    • 游戏角色状态(正常、中毒、眩晕)。

  • 代码示例

    interface State { void handle(Context context); }class ConcreteStateA implements State {public void handle(Context context) { context.setState(new ConcreteStateB());}
    }class Context {private State state;public void setState(State state) { this.state = state; }public void request() { state.handle(this); }
    }
    7.解释器模式(Interpreter)
  • 定义:给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子。
  • 代码示例:
    // 抽象表达式
    interface Expression {int interpret(Context context);
    }// 终结符表达式:数字
    class Number implements Expression {private int value;public Number(int value) { this.value = value; }public int interpret(Context context) { return value; }
    }// 非终结符表达式:加法
    class Add implements Expression {private Expression left;private Expression right;public Add(Expression left, Expression right) {this.left = left;this.right = right;}public int interpret(Context context) {return left.interpret(context) + right.interpret(context);}
    }// 非终结符表达式:乘法
    class Multiply implements Expression {private Expression left;private Expression right;public Multiply(Expression left, Expression right) {this.left = left;this.right = right;}public int interpret(Context context) {return left.interpret(context) * right.interpret(context);}
    }// 上下文(此处简单实现,无额外状态)
    class Context {}// 客户端构建语法树并解释
    public class Client {public static void main(String[] args) {// 表达式:1 + 2 * 3Expression expr = new Add(new Number(1),new Multiply(new Number(2), new Number(3)));Context context = new Context();System.out.println(expr.interpret(context)); // 输出:7}
    }
    8. 中介者模式(Mediator Pattern)

    定义
    中介者模式通过引入一个中介对象来封装一组对象之间的交互,减少对象间的直接依赖,使交互变得松散耦合。

    结构

  • Mediator(中介者接口):定义对象间通信的接口。

  • ConcreteMediator(具体中介者):协调各对象间的交互,维护对同事对象的引用。

  • Colleague(同事类接口):定义同事对象的通用接口,每个同事对象知道其中介者。

  • ConcreteColleague(具体同事类):实现同事接口,通过中介者与其他同事通信。

  • 对象间存在复杂的网状依赖关系(如GUI组件间的交互)。

  • 需要集中控制多个对象间的通信逻辑。

代码示例(Java)

interface Mediator {void notify(Colleague sender, String event);
}class ChatRoom implements Mediator {private List<Colleague> users = new ArrayList<>();public void addUser(Colleague user) { users.add(user); }@Overridepublic void notify(Colleague sender, String message) {for (Colleague user : users) {if (user != sender) user.receive(message);}}
}abstract class Colleague {protected Mediator mediator;public Colleague(Mediator mediator) { this.mediator = mediator; }abstract void send(String message);abstract void receive(String message);
}class User extends Colleague {public User(Mediator mediator) { super(mediator); }@Overridepublic void send(String message) {System.out.println("发送消息: " + message);mediator.notify(this, message);}@Overridepublic void receive(String message) {System.out.println("接收消息: " + message);}
}// 客户端使用
public class Client {public static void main(String[] args) {ChatRoom chatRoom = new ChatRoom();User alice = new User(chatRoom);User bob = new User(chatRoom);chatRoom.addUser(alice);chatRoom.addUser(bob);alice.send("你好!"); // Bob接收消息}
}
9.备忘录模式(Memento Pattern)

定义
备忘录模式在不破坏封装性的前提下,捕获对象的内部状态并保存,以便后续恢复。

结构

  • Originator(原发器):需要保存状态的对象,提供创建备忘录和恢复状态的方法。

  • Memento(备忘录):存储原发器的状态(通常为不可变对象)。

  • Caretaker(管理者):负责保存和恢复备忘录,但不操作其内容。

适用场景

  • 需要实现撤销/重做功能(如文本编辑器的撤销操作)。

  • 保存对象的历史状态用于回滚(如游戏存档)。

代码示例(Java)

// 原发器
class TextEditor {private String content;public void setContent(String content) { this.content = content; }public String getContent() { return content; }public Memento save() { return new Memento(content); }public void restore(Memento memento) { this.content = memento.getContent(); }
}// 备忘录
class Memento {private final String content;public Memento(String content) { this.content = content; }public String getContent() { return content; }
}// 管理者
class History {private List<Memento> mementos = new ArrayList<>();public void push(Memento memento) { mementos.add(memento); }public Memento pop() { return mementos.remove(mementos.size() - 1); }
}// 客户端使用
public class Client {public static void main(String[] args) {TextEditor editor = new TextEditor();History history = new History();editor.setContent("Version 1");history.push(editor.save());editor.setContent("Version 2");history.push(editor.save());editor.restore(history.pop()); // 回退到Version 1System.out.println(editor.getContent());}
}
10.访问者模式(Visitor Pattern)

定义
访问者模式将作用于对象结构的操作与对象本身分离,允许在不修改对象结构的前提下定义新操作。

结构

  • Visitor(访问者接口):声明访问对象结构中各元素的方法(如visitElementA())。

  • ConcreteVisitor(具体访问者):实现访问者接口,定义具体操作。

  • Element(元素接口):定义接受访问者的方法(accept(Visitor visitor))。

  • ConcreteElement(具体元素):实现元素接口,调用访问者的对应方法。

  • ObjectStructure(对象结构):维护元素集合,提供遍历接口。

适用场景

  • 需要对复杂对象结构进行多种独立操作(如编译器语法树分析)。

  • 避免污染元素类的代码(如统计功能与业务逻辑分离)。

代码示例(Java)

interface Visitor {void visit(ElementA element);void visit(ElementB element);
}class ConcreteVisitor implements Visitor {@Overridepublic void visit(ElementA element) {System.out.println("处理ElementA: " + element.operationA());}@Overridepublic void visit(ElementB element) {System.out.println("处理ElementB: " + element.operationB());}
}interface Element {void accept(Visitor visitor);
}class ElementA implements Element {public String operationA() { return "操作A"; }@Overridepublic void accept(Visitor visitor) { visitor.visit(this); }
}class ElementB implements Element {public String operationB() { return "操作B"; }@Overridepublic void accept(Visitor visitor) { visitor.visit(this); }
}// 客户端使用
public class Client {public static void main(String[] args) {List<Element> elements = Arrays.asList(new ElementA(), new ElementB());Visitor visitor = new ConcreteVisitor();for (Element element : elements) {element.accept(visitor);}}
}
11.迭代器模式(Iterator Pattern)

定义:迭代器模式是一种行为型设计模式,提供一种方法顺序访问聚合对象中的元素,而无需暴露其底层表示。核心思想是将遍历逻辑从聚合对象中分离,实现数据存储与遍历解耦

  • Aggregate(聚合接口):声明createIterator()方法,返回一个迭代器对象。

  • ConcreteAggregate(具体聚合类):实现聚合接口,返回与自身数据结构匹配的具体迭代器实例(如new ConcreteIterator(this))。

  • Iterator(迭代器接口):定义遍历方法:

    • hasNext():判断是否还有下一个元素。

    • next():移动游标并返回当前元素。

    • currentItem()(可选):直接获取当前元素,不移动游标。

  • ConcreteIterator(具体迭代器):实现迭代器接口,维护当前遍历位置(如currentIndex),并与聚合对象交互以访问元素。

相关文章:

软考中级软件设计师——设计模式篇

一、设计模式核心分类 设计模式分为 3 大类&#xff0c;共 23 种模式&#xff08;考试常考约 10-15 种&#xff09;&#xff1a; 分类核心模式考试重点创建型模式工厂方法、抽象工厂、单例、生成器、原型单例模式的实现&#xff08;懒汉、饿汉&#xff09;、工厂模式的应用场…...

matlab二维随机海面模拟

二维随机海面模拟是一种重要的技术&#xff0c;广泛应用于海洋工程、船舶设计、雷达系统和光学通信等领域。利用蒙特卡罗方法结合二维海浪功率谱模型&#xff0c;可以生成符合实际海面特性的随机表面。 步骤 1: 定义海浪功率谱模型 海浪功率谱模型描述了海浪能量在不同频率和…...

Axure系统原型设计列表版方案

列表页面是众多系统的核心组成部分&#xff0c;承担着数据呈现与基础交互的重要任务。一个优秀的列表版设计&#xff0c;能够极大提升用户获取信息的效率&#xff0c;优化操作体验。下面&#xff0c;我们将结合一系列精心设计的列表版方案图片&#xff0c;深入探讨如何打造出实…...

微软全新开源命令行文本编辑器:Edit — 致敬经典,拥抱现代

名人说:博观而约取,厚积而薄发。——苏轼《稼说送张琥》 创作者:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 目录 一、引言:命令行的新利器二、Edit:致敬经典,拥抱现代1. 命令行的“新升级”2. 为什么要有 Edit?三、核心功能与特性一览1. 完全开源、MIT 许可证…...

年会招标抽奖活动软件———仙盟创梦IDE

年会是企业一年的总结与欢庆时刻&#xff0c;而抽奖环节更是点燃全场气氛的关键。如何让抽奖环节既大气又充满仪式感&#xff1f;选对抽奖软件至关重要&#xff01;本文精心挑选了 3 款兼具实用性与氛围感的年会抽奖软件&#xff0c;从界面设计到功能特色&#xff0c;全方位为你…...

智防火灾,慧控能耗:物联网赋能金融行业电气安全革新

摘要 随着金融行业对电气安全需求的不断提升&#xff0c;传统用电管理模式已难以满足现代金融机构对火灾防控、能耗管理和智能运维的要求。本文基于物联网、云计算及大数据分析技术&#xff0c;提出一套针对金融行业的安全用电解决方案。该方案通过智能化硬件部署与平台化管理…...

Any类(C++17类型擦除,也称上帝类)

Any类&#xff08;C17类型擦除&#xff0c;也称上帝类&#xff09; 在C中&#xff0c;std::any 是C17标准引入的一个灵活的类型安全容器&#xff0c;用于存储任意类型的单个值。 1. std::any 的核心特性 类型安全&#xff1a;存储的值必须通过明确的类型转换&#xff08;any_…...

jquery.table2excel方法导出

jquery提供了一个table2excel方法可以用来导出页面到xls等 $("#grid_595607").table2excel({exclude: ".noExport", // 排除类名为 noExport 的元素filename: "导出数据.xls",exclude_img: true, // 不导出图片exclude_links: true, // 不导…...

Spring Boot 多租户架构实现:基于上下文自动传递的独立资源隔离方案

一、核心设计思想 通过线程上下文自动传递租户ID&#xff0c;结合动态数据源路由和中间件连接工厂&#xff0c;实现MySQL、Redis、RocketMQ的完全自动化资源隔离。关键设计如下&#xff1a; #mermaid-svg-ZjXCGSWoCuNFMIch {font-family:"trebuchet ms",verdana,aria…...

在 JavaScript 中正确使用 Elasticsearch,第二部分

作者&#xff1a;来自 Elastic Jeffrey Rengifo 回顾生产环境中的最佳实践&#xff0c;并讲解如何在无服务器环境中运行 Elasticsearch Node.js 客户端。 想获得 Elastic 认证&#xff1f;查看下一期 Elasticsearch Engineer 培训的时间&#xff01; Elasticsearch 拥有大量新…...

更新nvidia-container-toolkit 1.17.7-1后,运行--gpus all 卡死问题

用Arch每日一滚&#xff0c;结果今天用 sudo docker run -it --runtimenvidia --gpus all居然卡死了&#xff0c;排雷排了几小时&#xff0c;才从开源库发现问题 nvidia-container-toolkit 1.17.7-1 是有问题的&#xff0c;而且在ubuntu和arch上都存在问题。 只好Downgrade 1.…...

【Nginx学习笔记】:Fastapi服务部署单机Nginx配置说明

服务部署单机Nginx配置说明 服务.conf配置文件&#xff1a; upstream asr_backend {server 127.0.0.1:8010; }server {listen 80;server_name your_domain.com;location / {proxy_pass http://localhost:8000;proxy_set_header Host $host;proxy_set_header X-Real-IP $remot…...

相机标定与图像处理涉及的核心坐标系

坐标系相互关系 #mermaid-svg-QxaMjIcgWVap0awV {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-QxaMjIcgWVap0awV .error-icon{fill:#552222;}#mermaid-svg-QxaMjIcgWVap0awV .error-text{fill:#552222;stroke:#552…...

​在 ASP.NET 中,HTTP 处理程序(HttpHandler)是处理 HTTP 请求的核心组件​

ASP.NET 中 HttpHandler 的用法详解 在 ASP.NET 中&#xff0c;HTTP 处理程序&#xff08;HttpHandler&#xff09;是处理 HTTP 请求的核心组件。根据你的配置文件&#xff0c;我将详细解释 <handlers> 节点的各种用法和配置选项。 1. HttpHandler 概述 HttpHandler 是…...

通义灵码 2.5 版深度评测:智能编程的边界在哪里?

通义灵码 2.5 版深度评测&#xff1a;智能编程的边界在哪里&#xff1f; 评测目标 全面测试智能体模式&#xff1a;是否真正具备自主决策能力&#xff1f;MCP 工具集成体验&#xff1a;能否提升开发效率&#xff1f;AI 记忆自感知能力&#xff1a;是否能真正理解开发者习惯&a…...

电商项目-商品微服务-规格参数管理,分类与品牌管理需求分析

本文章介绍&#xff1a;规格参数管理与分类与品牌管理的需求分析和表结构的设计。 一、规格参数管理 规格参数模板是用于管理规格参数的单元。规格是例如颜色、手机运行内存等信息&#xff0c;参数是例如系统&#xff1a;安卓&#xff08;Android&#xff09;后置摄像头像素&…...

零基础设计模式——创建型模式 - 工厂方法模式

第二部分&#xff1a;创建型模式 - 工厂方法模式 (Factory Method Pattern) 上一节我们学习了单例模式&#xff0c;它关注如何保证一个类只有一个实例。现在&#xff0c;我们来看另一个重要的创建型模式——工厂方法模式。它关注的是如何创建对象&#xff0c;但将创建的决定权…...

LeetCode 404.左叶子之和的递归求解:终止条件与递归逻辑的深度剖析

一、题目解析&#xff1a;左叶子的定义与递归求解思路 题目描述 LeetCode 404. 左叶子之和要求计算二叉树中所有左叶子节点的值之和。左叶子的严格定义是&#xff1a;如果一个节点是其父节点的左子节点&#xff0c;并且它本身没有左右子节点&#xff0c;则称为左叶子。 关键…...

蓝桥杯5130 健身

问题描述 小蓝要去健身&#xff0c;他可以在接下来的 1∼n 天中选择一些日子去健身。 他有 m 个健身计划&#xff0c;对于第 i 个健身计划&#xff0c;需要连续的 天&#xff0c;如果成功完成&#xff0c;可以获得健身增益 si​ &#xff0c;如果中断&#xff0c;得不到任何…...

电商虚拟户:重构资金管理逻辑,解锁高效归集与智能分账新范式

一、电商虚拟户的底层架构与核心价值 在数字经济浪潮下&#xff0c;电商交易的复杂性与日俱增&#xff0c;传统账户体系已难以满足平台企业对资金管理的精细化需求。电商虚拟户作为基于银行或持牌支付机构账户体系的创新解决方案&#xff0c;通过构建“主账户子账户”的虚拟账户…...

腾讯2025年校招笔试真题手撕(二)

一、题目 最近以比特币为代表的数字货币市场非常动荡&#xff0c;聪明的小明打算用马尔科夫链来建模股市。如图所示&#xff0c;该模型有三种状态&#xff1a;“行情稳定”&#xff0c;“行情大跌”以及“行情大涨”。每一个状态都以一定的概率转化到下一个状态。比如&#xf…...

DeepSeek快速搭建个人网页

一、环境准备 注册DeepSeek账号(https://www.deepseek.com/)安装VSCode插件:DeepSeek Coder准备基础开发环境:# 推荐使用Node.js环境 npm install -g live-server二、三步搭建基础框架 步骤1:生成基础模板 在DeepSeek对话框输入: 生成一个响应式个人网页的HTML模板,包…...

安装完dockers后就无法联网了,执行sudo nmcli con up Company-WiFi,一直在加载中

Docker服务状态检查 执行 systemctl status docker 确认服务是否正常 若未运行&#xff0c;使用 sudo systemctl start docker && sudo systemctl enable docker 网络配置冲突 Docker会创建docker0虚拟网桥&#xff0c;可能与宿主机网络冲突 检查路由表 ip route sho…...

【深度学习新浪潮】2025年谷歌I/O开发者大会keynote观察

1. 2025年谷歌I/O开发者大会keynote重点信息 本次Google I/O大会的核心策略是降低AI使用门槛与加速开发者创新,通过端侧模型(Gemini Nano)、云端工具(Vertex AI)和基础设施(TPU)的全链路优化,进一步巩固其在生成式AI领域的领先地位。同时,高价订阅服务和企业级安全功…...

小球弹弹弹

一球从100米高度自由落下&#xff0c;每次落地后反跳回原高度的一半&#xff0c;再落下。求它在第十次落地时&#xff0c;共经过多少米&#xff1f;第十次反弹多高&#xff1f; 从第一次弹起到第二次落地前经过的路程为前一次弹起最高高度的一半乘以2&#xff0c;加上前面经过…...

案例分享——福建洋柄水库大桥智慧桥梁安全监测

项目背景 洋柄水库桥位于社马路(社店至马坪段)上&#xff0c;桥梁全长285m&#xff0c;桥梁中心桩号K15082跨径组合为 14x20m&#xff0c;全桥宽:33.8m&#xff0c;分左右双幅:上部结构采用空心板梁:桥采用柱式墩。 通过对桥梁结构长时间的定期观测&#xff0c;掌握桥梁在混凝…...

鸿蒙操作系统架构:构建全场景智慧生态的分布式操作系统

鸿蒙操作系统(HarmonyOS)是华为推出的面向全场景的分布式操作系统,旨在为智能手机、智能家居、智能穿戴、车机等多种设备提供统一的操作系统平台。鸿蒙架构的核心设计理念是“一次开发,多端部署”,通过分布式技术实现设备间的无缝协同。本文将深入探讨鸿蒙的分层架构、分布…...

NBA足球赛事直播源码体育直播M35模板赛事源码

源码名称&#xff1a;NBA足球赛事直播源码体育直播M35模板赛事源码 开发环境&#xff1a;帝国cms7.5 空间支持&#xff1a;phpmysql 带软件采集&#xff0c;可以挂着自动采集发布&#xff0c;无需人工操作&#xff01; 演示地址&#xff1a;https://www.52muban.com/shop/184…...

自动化测试报告工具

自动化测试报告工具大全与实战指南 &#x1f4ca;&#x1f525; 在自动化测试流程中&#xff0c;测试用例的执行只是第一步&#xff0c;而测试报告的生成与可视化则是闭环的重要一环。无论是个人项目还是团队协作&#xff0c;高质量的测试报告都能帮助我们快速定位问题、衡量测…...

Elasticsearch 实战面试题,每个题目都会单独解析

Elasticsearch 在 Java 中最常用的客户端是什么&#xff1f;如何初始化一个 RestHighLevelClient&#xff1f;如何用 Spring Boot 快速集成 Elasticsearch&#xff1f;Spring Data Elasticsearch 如何定义实体类与索引的映射&#xff1f; ES的倒排索引和正排索引的区别及适用场…...