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

工程实践中常见的几种设计模式解析及 C++ 实现

工程实践中常见的几种设计模式解析及 C++ 实现

在软件工程中,设计模式是一种通用的解决方案,用于解决常见问题和优化代码结构。它们通过提供一种规范化的编程思想,帮助开发者写出更高效、可维护和可扩展的代码。本文将介绍几种在工程实践中常见的设计模式,包括其实现原理、使用场景以及注意事项,并结合 C++ 语言进行实现。


1. 单例模式 (Singleton Pattern)

实现原理

单例模式确保一个类只有一个实例,并提供全局访问点。其核心思想是通过控制构造函数和复制操作符,使得类只能生成一个对象实例。

关键点:
  • 隐藏构造函数(将构造函数设为私有)。
  • 提供一个静态方法用于获取唯一实例。
  • 使用懒汉式或饿汉式实现线程安全的单例模式。

使用场景

  • 当需要全局只有一个实例时,例如配置管理、日志记录等。
  • 需要避免大量重复对象创建的情况。

注意事项

  • 单例模式可能会隐藏类之间的依赖关系,导致代码难以维护。
  • 线程安全性需要额外处理(如双重检查锁定)。
  • 在某些场景下,单例模式可能导致性能问题或内存泄漏。
C++ 实现
class Singleton {
private:static Singleton* instance;Singleton() = default;  // 隐藏构造函数~Singleton() = default; // 隐藏析构函数public:// 静态方法获取实例(线程安全)static Singleton* getInstance() {if (instance == nullptr) {instance = new Singleton();}return instance;}// 删除复制操作符,防止复制Singleton(const Singleton&) = delete;Singleton& operator=(const Singleton&) = delete;void doSomething() {// 业务逻辑}
};// 静态变量初始化为 nullptr
Singleton* Singleton::instance = nullptr;int main() {Singleton* s1 = Singleton::getInstance();Singleton* s2 = Singleton::getInstance();if (s1 == s2) { // 比较两个指针是否相同// 输出:两者指向同一个实例}return 0;
}

2. 工厂模式 (Factory Pattern)

实现原理

工厂模式通过提供一个接口,用于创建对象,而无需显式指定具体类。这提高了代码的灵活性和可扩展性。

关键点:
  • 定义一个抽象产品类(Product)。
  • 提供一个工厂类(Factory),通过其方法创建具体的子类实例。
  • 工厂模式分为简单工厂模式和抽象工厂模式。

使用场景

  • 需要根据不同的条件动态选择具体实现时。
  • 避免代码直接依赖于具体实现类,提高系统的灵活性。

注意事项

  • 工厂类可能会变得复杂,尤其是在支持多种产品的情况下。
  • 增加新的产品类需要同时修改工厂类,这可能违反“开闭原则”。
C++ 实现
// 抽象产品类
class Product {
public:virtual ~Product() = default;virtual void use() = 0;
};// 具体产品类
class ConcreteProductA : public Product {
public:void use() override {// 使用具体实现 A}
};class ConcreteProductB : public Product {
public:void use() override {// 使用具体实现 B}
};// 工厂类
class Factory {
public:virtual ~Factory() = default;virtual std::unique_ptr<Product> createProduct() = 0;
};// 具体工厂类 A
class ConcreteFactoryA : public Factory {
public:std::unique_ptr<Product> createProduct() override {return std::make_unique<ConcreteProductA>();}
};// 具体工厂类 B
class ConcreteFactoryB : public Factory {
public:std::unique_ptr<Product> createProduct() override {return std::make_unique<ConcreteProductB>();}
};int main() {// 使用工厂创建产品Factory* factory = new ConcreteFactoryA();auto product = factory->createProduct();product->use();delete factory;return 0;
}

3. 观察者模式 (Observer Pattern)

实现原理

观察者模式定义了一种一对多的依赖关系,当一个对象(主题)的状态发生变化时,所有依赖它的对象(观察者)都会收到通知并自动更新。

关键点:
  • 定义一个主题类(Subject),包含状态和注册/注销观察者的接口。
  • 观察者类(Observer)通过继承或实现接口,提供一个更新方法。
  • 主题类维护一个观察者列表,并在状态变化时通知所有观察者。

使用场景

  • 系统中存在一对多的依赖关系时。
  • 需要动态地添加或删除观察者。

注意事项

  • 观察者模式可能会导致循环依赖问题。
  • 观察者和主题之间的耦合可能会影响代码的可维护性。
C++ 实现
#include <vector>
#include <memory>class Observer {
public:virtual ~Observer() = default;virtual void update(int value) = 0;
};class Subject {
private:int state_;std::vector<std::shared_ptr<Observer>> observers_;public:void attach(std::shared_ptr<Observer> observer) {observers_.push_back(observer);}void detach(std::shared_ptr<Observer> observer) {// 实现观察者的移除逻辑}int getState() const {return state_;}void setState(int value) {if (state_ != value) {state_ = value;notify();}}private:void notify() {for (auto& observer : observers_) {observer->update(state_);}}
};class ConcreteObserver : public Observer {
public:void update(int value) override {// 处理状态变化}
};int main() {std::shared_ptr<Subject> subject = std::make_shared<Subject>();std::shared_ptr<ConcreteObserver> observer1 = std::make_shared<ConcreteObserver>();std::shared_ptr<ConcreteObserver> observer2 = std::make_shared<ConcreteObserver>();subject->attach(observer1);subject->attach(observer2);subject->setState(10); // 所有观察者都会收到更新return 0;
}

4. 策略模式 (Strategy Pattern)

实现原理

策略模式定义了一系列算法,并将它们封装起来,使它们可以互换。上下文类通过接口调用具体策略类的方法。

关键点:
  • 定义一个策略接口(Strategy),包含算法的声明。
  • 具体策略类(Concrete Strategy)实现策略接口。
  • 上下文类(Context)维护一个策略对象,并根据需要切换策略。

使用场景

  • 需要动态选择不同算法时。
  • 系统中存在多个相似但具体的算法,且希望它们可以互换使用。

注意事项

  • 增加新的具体策略类可能会影响上下文的代码复杂性。
  • 必须确保所有策略接口的一致性。
C++ 实现
class Strategy {
public:virtual ~Strategy() = default;virtual int calculate(int a, int b) = 0;
};// 具体策略类 A:加法
class AddStrategy : public Strategy {
public:int calculate(int a, int b) override {return a + b;}
};// 具体策略类 B:乘法
class MultiplyStrategy : public Strategy {
public:int calculate(int a, int b) override {return a * b;}
};// 上下文类
class Context {
private:std::shared_ptr<Strategy> strategy_;public:Context(std::shared_ptr<Strategy> strategy) : strategy_(strategy) {}void setStrategy(std::shared_ptr<Strategy> strategy) {strategy_ = strategy;}int execute(int a, int b) {return strategy_->calculate(a, b);}
};int main() {std::shared_ptr<Context> context = std::make_shared<Context>(std::make_shared<AddStrategy>());// 使用加法策略int result1 = context->execute(3, 5); // 8// 切换到乘法策略context->setStrategy(std::make_shared<MultiplyStrategy>());int result2 = context->execute(3, 5); // 15return 0;
}

总结

以上四种设计模式(单例模式、工厂模式、观察者模式和策略模式)是工程实践中最常用的设计模式之一。每种模式都有其适用的场景和注意事项,合理使用它们可以显著提升代码的质量和系统的可维护性。

在实际开发中,我们需要根据具体需求选择合适的设计模式,并结合语言特性和框架进行实现。同时,也要注意避免过度设计,以免增加不必要的复杂性。

相关文章:

工程实践中常见的几种设计模式解析及 C++ 实现

工程实践中常见的几种设计模式解析及 C 实现 在软件工程中&#xff0c;设计模式是一种通用的解决方案&#xff0c;用于解决常见问题和优化代码结构。它们通过提供一种规范化的编程思想&#xff0c;帮助开发者写出更高效、可维护和可扩展的代码。本文将介绍几种在工程实践中常见…...

ollama在linux上进行部署——离线安装说明

1. 官网下载ollama压缩包 https://ollama.com/download/ollama-linux-amd64.tgz sudo tar -C /usr -xzf ollama-linux-amd64.tgz #解压安装 2. 添加systemctl服务启动文件 添加服务文件&#xff1a;/etc/systemd/system/ollama.service [Unit] DescriptionOllama …...

(一)趣学设计模式 之 单例模式!

目录 一、啥是单例模式&#xff1f;二、为什么要用单例模式&#xff1f;三、单例模式怎么实现&#xff1f;1. 饿汉式&#xff1a;先下手为强&#xff01; &#x1f608;2. 懒汉式&#xff1a;用的时候再创建&#xff01; &#x1f634;3. 枚举&#xff1a;最简单最安全的单例&a…...

基于无人机遥感的烟株提取和计数研究

一.研究的背景、目的和意义 1.研究背景及意义 烟草作为我国重要的经济作物之一&#xff0c;其种植面积和产量的准确统计对于烟草产业的发展和管理至关重要。传统的人工烟株计数方法存在效率低、误差大、难以覆盖大面积烟田等问题&#xff0c;已无法满足现代烟草种植管理的需求…...

在windows下安装windows+Ubuntu16.04双系统(上)

这篇文章的内容主要来源于这篇文章&#xff0c;给文章很详细的介绍了如何从windows下安装windowsubuntu16.04双系统。我刚开始装双系统都是参照这个方法&#xff0c;该作者前后更新了两个版本&#xff0c;在这里对其稍微进行整理一下。 一、准备&#xff1a;&#xff08;这里推…...

TensorFlow 是一个由 Google 开发的开源机器学习库

TensorFlow 是一个由 Google 开发的开源机器学习库&#xff0c;被广泛应用于深度学习和人工智能领域。它的基本概念包括以下几点&#xff1a; 张量&#xff08;Tensors&#xff09;&#xff1a;在 TensorFlow 中&#xff0c;数据的基本单位是张量&#xff0c;它类似于多维数组或…...

C++ day4 练习

一、练习1 找到第一天mystring练习&#xff0c;实现以下功能&#xff1a; mystring str "hello"; mystring ptr "world"; str str ptr; str ptr; str[0] H; 【代码】&#xff1a; #include <iostream> #include <cstring> #include &l…...

利用机器学习实现实时交易欺诈检测

以下是一个基于Python的银行反欺诈AI应用示例代码,演示如何利用机器学习实现实时交易欺诈检测。该示例使用LightGBM算法训练模型,并通过Flask框架构建实时检测API: python import pandas as pd from sklearn.model_selection import train_test_split from sklearn.preproc…...

基于Hadoop的汽车大数据分析系统设计与实现【爬虫、数据预处理、MapReduce、echarts、Flask】

文章目录 有需要本项目的代码或文档以及全部资源&#xff0c;或者部署调试可以私信博主 项目介绍爬虫数据概览HIve表设计Cars Database Tables 1. cars_data2. annual_sales_volume3. brand_sales_volume4. city_sales_volume5. sales_volume_by_year_and_brand6. sales_distri…...

安宝特科技 | Vuzix Z100智能眼镜+AugmentOS:重新定义AI可穿戴设备的未来——从操作系统到硬件生态,如何掀起无感智能革命?

一、AugmentOS&#xff1a;AI可穿戴的“操作系统革命” 2025年2月3日&#xff0c;Vuzix与AI人机交互团队Mentra联合推出的AugmentOS&#xff0c;被业内视为智能眼镜领域的“iOS时刻”。这款全球首个专为智能眼镜设计的通用操作系统&#xff0c;通过三大突破重新定义了AI可穿戴…...

蓝桥杯之日期题

文章目录 1.蓝桥杯必备知识点2. 题型13.需求2 1.蓝桥杯必备知识点 蓝桥杯是一个面向全国高校计算机相关专业学生的学科竞赛&#xff0c;涵盖多个赛道&#xff0c;常见的有软件类&#xff08;如 C/C 程序设计、Java 软件开发、Python 程序设计&#xff09;和电子类&#xff08;…...

sklearn中的决策树-分类树:实例-分类树在合成数据集上的表现

分类树实例&#xff1a;分类树在合成数据集上的表现 代码分解 在不同结构的据集上测试一下决策树的效果&#xff08;二分型&#xff0c;月亮形&#xff0c;环形&#xff09; 导入 import numpy as np from matplotlib import pyplot as plt from matplotlib.colors import Li…...

es-head(es库-谷歌浏览器插件)

1.下载es-head插件压缩包&#xff0c;并解压缩 2.谷歌浏览器添加插件 3.使用...

AI客服-接入deepseek大模型到微信(本地部署deepseek集成微信自动收发消息)

1.本地部署 1.1 ollama Ollama软件通过其高度优化的推理引擎和先进的内存管理机制&#xff0c;显著提升了大型语言模型在本地设备上的运行效率。其核心采用了量化技术&#xff08;Quantization&#xff09;以降低模型的计算复杂度和存储需求&#xff0c;同时结合张量并行计算&…...

kotlin 知识点 七 泛型的高级特性

对泛型进行实化 泛型实化这个功能对于绝大多数Java 程序员来讲是非常陌生的&#xff0c;因为Java 中完全没有这个概 念。而如果我们想要深刻地理解泛型实化&#xff0c;就要先解释一下Java 的泛型擦除机制才行。 在JDK 1.5之前&#xff0c;Java 是没有泛型功能的&#xff0c;…...

正则表达式–断言

原文地址&#xff1a;正则表达式–断言 – 无敌牛 欢迎参观我的个人博客&#xff1a;正则表达式特殊字符 – 无敌牛 断言assertions 1、(?...)&#xff1a;正向预查&#xff08;positive lookahead&#xff09;&#xff0c;表示某个字符串后面应该跟着什么。但这个字符串本身…...

OceanBase数据库实战:Windows Docker部署与DBeaver无缝对接

一、前言 OceanBase 是一款高性能、高可扩展的分布式数据库&#xff0c;适用于大规模数据处理和企业级应用。 随着大数据和云计算的普及&#xff0c;OceanBase 在企业数字化转型中扮演着重要角色。学习 OceanBase 可以帮助开发者掌握先进的分布式数据库技术&#xff0c;提升数…...

C++:开胃菜练习项目---定长内存池的实现以及测试

项目介绍 简介 作为学习tcmalloc高并发内存池项目前的一个铺垫。 作为程序员(C/C)我们知道申请内存使用的是malloc&#xff0c;malloc其实就是一个通用的大众货&#xff0c;什么场景下都可以用&#xff0c;但是什么场景下都可以用就意味着什么场景下都不会有很高的性能&#xf…...

【LLM】本地部署LLM大语言模型+可视化交互聊天,附常见本地部署硬件要求(以Ollama+OpenWebUI部署DeepSeekR1为例)

【LLM】本地部署LLM大语言模型可视化交互聊天&#xff0c;附常见本地部署硬件要求&#xff08;以OllamaOpenWebUI部署DeepSeekR1为例&#xff09; 文章目录 1、本地部署LLM&#xff08;以Ollama为例&#xff09;2、本地LLM交互界面&#xff08;以OpenWebUI为例&#xff09;3、本…...

JVM相关面试题

1. 类加载与双亲委派机制 聊一下你对类加载器的理解。 类加载器是JVM用来加载类文件到内存的组件。它负责将字节码文件解析为java.lang.Class实例&#xff0c;并存储到运行时数据区的方法区中。类加载器分为Bootstrap ClassLoader、Extension ClassLoader和Application ClassLo…...

WordPress Course Booking System SQL注入漏洞复现 (CVE-2025-22785)(附脚本)

免责申明: 本文所描述的漏洞及其复现步骤仅供网络安全研究与教育目的使用。任何人不得将本文提供的信息用于非法目的或未经授权的系统测试。作者不对任何由于使用本文信息而导致的直接或间接损害承担责任。如涉及侵权,请及时与我们联系,我们将尽快处理并删除相关内容。 0x0…...

二:前端发送POST请求,后端获取数据

接着一&#xff1a;可以通过端口访问公网IP之后 二需要实现&#xff1a;点击飞书多维表格中的按钮&#xff0c;向服务器发送HTTP请求&#xff0c;并执行脚本程序 向服务器发送HTTP请求&#xff1a; 发送请求需要明确一下几个点 请求方法&#xff1a; 由于是向服务器端发送值…...

Go语言中的信号量:原理与实践指南

Go语言中的信号量&#xff1a;原理与实践指南 引言 在并发编程中&#xff0c;控制对共享资源的访问是一个经典问题。Go语言提供了丰富的并发原语&#xff08;如sync.Mutex&#xff09;&#xff0c;但当我们需要灵活限制并发数量时&#xff0c;信号量&#xff08;Semaphore&am…...

cpp中的继承

一、继承概念 在cpp中&#xff0c;封装、继承、多态是面向对象的三大特性。这里的继承就是允许已经存在的类&#xff08;也就是基类&#xff09;的基础上创建新类&#xff08;派生类或者子类&#xff09;&#xff0c;从而实现代码的复用。 如上图所示&#xff0c;Person是基类&…...

3DGS(三维高斯散射)与SLAM技术结合的应用

3DGS&#xff08;三维高斯散射&#xff09;与SLAM&#xff08;即时定位与地图构建&#xff09;技术的结合&#xff0c;为动态环境感知、高效场景建模与实时渲染提供了新的可能性。以下从技术融合原理、应用场景、优势挑战及典型案例展开分析&#xff1a; 一、核心融合原理 1. …...

DeepSeek赋能大模型内容安全,网易易盾AIGC内容风控解决方案三大升级

在近两年由AI引发的生产力革命的背后&#xff0c;一场关乎数字世界秩序的攻防战正在上演&#xff1a;AI生成的深度伪造视频导致企业品牌声誉损失日均超千万&#xff0c;批量生成的侵权内容使版权纠纷量与日俱增&#xff0c;黑灰产利用AI技术持续发起欺诈攻击。 与此同时&#…...

mybatis 细节(${ ..}和#{..},resultType 和 resultMap的区别,别名的使用,Mapper 代理模式)

${..}和#{..} 占位符 #{..} #{}实现的是向prepareStatement中的预处理语句中设置参数值&#xff0c;sql语句中#{}表示一个占位符即?。 <!-- 根据id查询用户信息 --> <select id"findUserById" parameterType"int" resultType"user"&g…...

电子科技大学考研复习经验分享

电子科技大学考研复习经验分享 本人情况&#xff1a;本科就读于电科软院&#xff0c;24年2月开始了解考研&#xff0c;24年3月开始数学&#xff0c;9月决定考本院&#xff08;开始全天候图书馆学习&#xff09;并开始专业课学习&#xff0c;11月底开始政治学习&#xff0c;最后…...

【python】提取word\pdf格式内容到txt文件

一、使用pdfminer提取 import os import re from pdfminer.high_level import extract_text import docx2txt import jiebadef read_pdf(file_path):"""读取 PDF 文件内容:param file_path: PDF 文件路径:return: 文件内容文本"""try:text ext…...

Selenium 与 Coze 集成

涵盖两者的基本概念、集成步骤、代码示例以及相关注意事项。 基本概念 Selenium:是一个用于自动化浏览器操作的工具集,支持多种浏览器(如 Chrome、Firefox 等),能够模拟用户在浏览器中的各种操作,如点击、输入文本、选择下拉框等,常用于 Web 应用的自动化测试。Coze:它…...

SQL注入(order by,limit),seacms的报错注入以及系统库的绕过

1&#xff1a;如果information_schema被过滤了&#xff0c;该怎么绕过 1.1&#xff1a;介绍一下information_schema这个库 information_schema 是一个非常重要的系统数据库&#xff0c;它在SQL标准中定义&#xff0c;并且被许多关系型数据库管理系统&#xff08;RDBMS&#x…...

数据保护API(DPAPI)深度剖析与安全实践

Windows DPAPI 安全机制解析 在当今数据泄露与网络攻击日益频繁的背景下&#xff0c;Windows 提供的 DPAPI&#xff08;Data Protection API&#xff09;成为开发者保护本地敏感数据的重要工具。本文将从 双层密钥体系、加密流程、跨上下文加密、已知攻击向量与防御措施、企业…...

Sqlserver安全篇之_隐藏实例功能和禁用SQL Server Browser服务

总结&#xff1a; 1、隐藏实例功能和禁用SQL Server Browser服务的功能一样&#xff0c;对应非默认实例(且这个默认实例是1433端口)的情况下&#xff0c;都是需要在连接字符串中提供端口号才能连接到实例 2、隐藏实例功能后&#xff0c;就算开启了SQL Server Browser服务&#…...

muduo网络库2

Muduo网络库&#xff1a;底层实质上为Linux的epoll pthread线程池&#xff0c;且依赖boost库。 muduo的网络设计核心为一个线程一个事件循环&#xff0c;有一个main Reactor负载accept连接&#xff0c;然后把连接分发到某个sub Reactor(采用轮询的方式来选择sub Reactor)&…...

【ISP】畸变校正 LDC

ISP&#xff08;Image Signal Processor&#xff0c;图像信号处理器&#xff09;中的 LDC&#xff08;Lens Distortion Correction&#xff0c;镜头畸变校正&#xff09;是一种用于校正镜头畸变的图像处理技术。镜头畸变是由于镜头的光学特性导致的图像失真现象&#xff0c;主要…...

deepseek 学习资料整理

deepseek 学习资料整理 deepseek_清华大学指导手册_pdf_1-5 无套路&#xff0c;无需关注&#xff0c;无需登录&#xff0c;无需app&#xff0c;直接下载&#xff1a; 下载地址 文件列表&#xff1a; 001_清华大学_DeepSeek从入门到精通.pdf 002_清华大学_DeepSeek如何赋能职…...

【deepseek】本地部署+webui访问

背景 最近deepseek很火&#xff0c;但是官网的老是被限流使用&#xff0c;还有就是自己也想着玩一玩&#xff0c;于是准备在自己电脑跑一个 直接附上结果地址mydeepseek 准备工作 windows和linux都可 我这里选择linux&#xff0c;ubuntu系统 安装ollama 看下图&#xff0…...

LeetCodeHot100_0x02

LeetCodeHot100_0x02 11. 滑动窗口最大值&#xff08;不熟&#xff09; 求解思路&#xff1a; 暴力法的时间复杂度是O(NK)&#xff0c;在K常数较大时复杂度就高了。所以我们要想办法将K优化掉&#xff0c;即本题的难点在于如何在O(1)的时间复杂度求出当前窗口中的最大值。这个…...

STM32MP157A-FSMP1A单片机移植Linux系统SPI总线驱动

SPI总线驱动整体上与I2C总线驱动类型&#xff0c;差别主要在设备树和数据传输上&#xff0c;由于SPI是由4根线实现主从机的通信&#xff0c;在设备树上配置时需要对SPI进行设置。 原理图可知&#xff0c;数码管使用的SPI4对应了单片机上的PE11-->SPI4-NSS,PE12-->SPI4-S…...

H7 based Phalanx G1 ETH Data Switch Hub UART Interface 介绍

外接接口配置 H7 based Phalanx G1 ETH Data Switch hub UART interface 1.对外接接口进行详细介绍 以下是针对 H7 based Phalanx G1 设备的外接接口配置的详细解析&#xff0c;重点说明其 ETH Data Switch Hub 和 UART Interface 的技术特性与应用场景&#xff1a; 一、核…...

Vue04

自定义指令 directives是Vue的一个配置项 这里写自定义指令 自定义指令被调用的时机 指令与元素成功绑定时 指令所在的模板被重新解析时 函数式 <span v-big"n"></span> directives:{ big(element,binding){ element.innerText bingin…...

OpenCV(9):视频处理

1 介绍 视频是由一系列连续的图像帧组成的&#xff0c;每一帧都是一幅静态图像。视频处理的核心就是对这些图像帧进行处理。常见的视频处理任务包括视频读取、视频播放、视频保存、视频帧处理等。 视频分析: 通过视频处理技术&#xff0c;可以分析视频中的运动、目标、事件等。…...

短剧源码部署搭建小程序搭建IAA+IAP混合解锁模式

在当今数字化内容消费迅速增长的时代&#xff0c;短剧作为一种新兴的内容形式&#xff0c;凭借其短小精悍、节奏紧凑的特点&#xff0c;迅速吸引了大量用户。作为一名软件体验测试人员&#xff0c;我有幸体验了一款集创新与实用为一体的短剧小程序。这款小程序不仅在前端用户体…...

基于 CFD 预测的机器学习第 2 部分:在 Benchmark 应用程序上使用 Stochos 预测流场

了解机器学习和 Stochos 如何彻底改变制造业的 CFD 预测。 挑战 预测复杂流体动力学场景中的流场一直是工程师和科学家面临的重大挑战。传统的计算流体动力学 &#xff08;CFD&#xff09; 方法需要大量的计算资源和时间&#xff0c;因此难以处理实时预测和大规模模拟。 此外…...

NLP的预处理数据

处理文本数据的主要工具是Tokenizer。Tokenizer根据一组规则将文本拆分为tokens。然后将这些tokens转换为数字&#xff0c;然后转换为张量&#xff0c;成为模型的输入。模型所需的任何附加输入都由Tokenizer添加。 如果您计划使用预训练模型&#xff0c;重要的是使用与之关联的…...

数据结构——单链表

前言 1. 什么是链表 链表是一种物理存储结构上非连续、非顺序的存储结构&#xff0c;数据元素的逻辑顺序是通过链表中的指针链接次序实现的 。与顺序表不同&#xff0c;链表的存储数据在内存是随机分布的。 2. 链表的分类 链表的种类多种多样&#xff0c;其中最常见的有八种…...

SurfaceFlinger代码笔记

drawLayers是做client合成&#xff0c;合成完以后的buffer会放在RenderSurface里 FrameBufferSurface里的buffer是通过setClientTarget给到HWC的&#xff08;HWC应该给client合成的buffer留了一个slot) Output.cpp这个文件非常关键&#xff0c;代表着具体一个Display的操作 d…...

Linux-Ansible模块进阶

文章目录 Copy和FetchFile模块 &#x1f3e1;作者主页&#xff1a;点击&#xff01; &#x1f916;Linux专栏&#xff1a;点击&#xff01; ⏰️创作时间&#xff1a;2025年02月22日18点49分 Copy和Fetch copy和fetch模块实践 copy模块需要注意的点&#xff1a;在收集日志之前…...

【机器学习】强化学习(2)——捋清深度强化学习的思路

在之前学习的过程中我了解到深度学习中很重要的一个概念是反向传播&#xff0c;最近看论文发现深度强化学习&#xff08;DRL&#xff09;有各种各样的方法&#xff0c;但是却很难区分他们的损失函数的计算以及反向传播的过程有何不同。在有监督的学习中&#xff0c;损失可以理解…...

touchgfx的工作机制

touchgfx的工作机制 一.MVP软件架构 MVP的全称为Model-View-Presenter Model: 就是数据部分,在整个touchgfx应用中,只有一个Model类实例对象,它为所有的Screen屏幕界面服务,可以理解成是一个全局变量区,同时它还负责和后端系统通信 View: 就是UI界面部分,对应于View类,在整…...