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

智能指针之设计模式4

前面的文章介绍了使用工厂模式来封装智能指针对象的创建过程,下面介绍一下工厂类

enable_shared_from_this的实现方案。

4、模板方法模式

在前面的文章分析过,enable_shared_from_this<T>类是一个工厂基类,提供的工厂方法是shared_from_this(),而shared_ptr<T>就是一个具体的产品类,每一个shared_ptr<T>对象都需要一个具体的工厂类来创建它,这个具体的工厂类就是T,它是enable_shared_from_this<T>的派生类,同时又是模板参数类型。那么,C++标准库是怎么通过this指针来创建shared_ptr<T>对象的呢?

按照常规的做法,可以继承工厂基类然后由派生类来实现基类定义的工厂方法接口,然而当在一个对象内部通过this指针创建一个shared_ptr对象时,却不是一件容易的事情:

首先,要判断资源对象是否是在堆中,如果资源对象不是在堆中,那么使用shared_ptr<T>(this)创建的智能指针对象,在析构时就会发生异常。

其次,要确定资源对象是否已经被shared_ptr管理了,如果管理了,也不能直接使用shared_ptr<T>(this)创建的智能指针对象,否则会导致由两个不同的shared_ptr来管理this,最后会发生重复释放内存的错误。

再次,如果在资源对象内部使用shared_ptr<T>(this)创建了智能指针对象,但是用户在外部是不知道的,可能又使用shared_ptr<T>(obj_ptr)创建了智能指针对象,也会发生重复释放内存的错误。

如果这个创建过程,完全交给程序员来实现,需要仔细地约束各方面的代码实现,还得需要相关人员认真地评审,防止出现上面描述的错误,带来了极大的风险和不便。C++标准库的思路是交由代码来解决,把通过this指针创建shared_ptr对象的代码封装起来形成固定的模板套路,只把需要定制的部分交给派生类去实现,也就是模板方法模式,即在模板基类中把通过this指针创建shared_ptr对象的过程封装成“模板方法”,它执行过程中要使用具体派生类提供的“钩子函数",这样哪个类要想提供shared_from_this()功能,就继承模板基类并实现”钩子函数“就可以了。下面是GOF模板方法模式的结构图:
在这里插入图片描述

从结构图中可以看出,模板方法模式实际上就是面向对象编程中的继承和动态多态机制,也就是在基类中定义virtual函数接口,也就是“钩子方法”,在派生类中实现virtual函数,从而让基类中的“模板方法”能够通过动态绑定的方式,来调用派生类提供的virtual函数。

不过enable_shared_from_this<T>作为模板基类与上面的模板方法模式在形式上不同,它没有采用面向对象编程的多态机制,而是利使用了一种特殊的继承方式实现的,即CRTP。CRTP采用了C++的模板技术,虽然也是继承方式,但却是在基类中通过把自己强制转为派生类类型的方式来调用派生类实现的函数,这是二者最大的区别。模板方法模式是一个共有的基类,然后有多个同一族类的派生类,它们复用了基类中的“模板方法”,并重写了virtual函数,属于动态绑定;而CRTP方式是一个基类仅有一个派生类,这样完全可以把基类强制转换成派生类,调用的是派生类的非virtual成员函数,属于静态绑定机制。同样,因为CRTP派生类继承了基类,它复用了基类的“模板方法”,因此,外界也可以调用派生类的“模板方法”来实现具体的功能。

shared_from_this()创建shared_ptr对象的套路是,定义了一个weak_ptr数据成员,在创建shared_ptr对象时,就使用这个weak_ptr成员来创建,派生类显然是无法设置这个weak_ptr成员的,也就是说无法设计成提供一个“钩子函数”的形式,而weak_ptr类型和shared_ptr类型息息相关,因此enable_shared_from_this<T>就让shared_ptr<T>作为它的友元类,要求shared_ptr在创建对象时,同时初始化这个weak_ptr成员。这样,如果派生类T没有使用shared_ptr对象来管理自己的生存期,也就初始化不了这个weak_ptr成员,进而也就无法通过this创建出shared_ptr对象,而通过weak_ptr对象创建的shared_ptr对象和原来的shared_ptr对象共享T资源对象的所有权,也不会发生直接使用this指针创建了shared_ptr对象之后,导致由两个不同的shared_ptr来管理this的错误。

可见,在这个模板方法模式中,“钩子方法”不是一个具体函数,它是一个抽象的概念,或者说是一个“钩子数据”,在这里就是它的weak_ptr类型的数据成员,模板方法在实现套路化的逻辑时,需要使用weak_ptr对象数据成员来创建shared_ptr对象,这个weak_ptr对象是在创建shared_ptr对象时初始化的,因此要求创建它的派生类对象时,必须要被一个shared_ptr对象托管,这样shared_ptr在创建对象时,就会同时初始化这个weak_ptr成员。也就是说,派生类不需要提供具体的“钩子函数”,只要它在创建时候,同时创建一个shared_ptr对象来管理它的生存期,它自然而然地就为基类的“模板方法”提供了“钩子数据”。

这里,相当于把通过this指针创建shared_ptr对象的过程给封装成模板方法,谁要是想通过this指针创建shared_ptr对象就可以直接继承enable_shared_from_this类,它的模板方法自己实现了这个功能,派生类无需专门编写代码,为程序员编程带来了便利。下面是结构图:
在这里插入图片描述

enable_shared_from_this<resource>是工厂基类也是模板方法类,它的成员函数shared_from_this()是"模板方法",职责是使用资源对象resource的this指针来创建一个shared_ptr对象;资源对象resource类是它的一个公共派生类,是工厂派生类也是模板方法派生类,具体产品对象shared_ptr<resource>就是从resource中创建出来的,也就是一个产品对象通过“模板方法”创建了一个管理自己生存期的shared_ptr对象。示例代码如下:

class resource : public enable_shared_from_this<resource> {data_obj obj;public:void process() {auto sp = shared_from_this();...}... // 其它成员函数
};
...

只要继承了enable_shared_from_this<T>类,它就是一个模板方法派生类,就可以使用模板方法类的shared_from_this(),然而这只是“模板方法”函数,还得需要派生类自己提供“钩子方法”函数,也就是保证派生类创建的对象被shared_ptr托管,这样就可以根据模板方法来通过this指针创建shared_ptr的副本了。因此,resoure资源对象可以通过:

shared_ptr<resource> res1(new resource);
shared_ptr<resource> res2 = make_shared<resource>();
shared_ptr<resource> res3 = weak_ptr_obj.lock();
shared_ptr<resource> res4(weak_ptr_obj());
shared_ptr<resource> res5(unique_ptr_obj());

等这些方式来创建shared_ptr<resource>对象,可以把这些创建方式等同于“钩子方法”,派生类resource只要能够创建出shared_ptr<resource>对象,当在resource对象内部使用this指针调用“模板方法”shared_shared_this()时,就会按照固定的套路创建出一个shared_ptr<resource>对象。显然这样就简化了根据this创建shared_ptr<resource>对象的过程,程序也不需要作太多的考虑,只要保证resource对象是使用shared_ptr智能指针管理的就可以了。

总之,工厂方法shared_from_this()是使用模板方法模式实现的,而模板模式又是使用CRTP惯用法来实现的。

参考:
https://cloud.tencent.com/developer/article/2362395

相关文章:

智能指针之设计模式4

前面的文章介绍了使用工厂模式来封装智能指针对象的创建过程&#xff0c;下面介绍一下工厂类 enable_shared_from_this的实现方案。 4、模板方法模式 在前面的文章分析过&#xff0c;enable_shared_from_this<T>类是一个工厂基类&#xff0c;提供的工厂方法是shared_f…...

Linux信号的产生

Linux系列 文章目录 Linux系列一、信号的产生1.1 异常1.2 alarm()系统调用 二 、信号的默认行为 一、信号的产生 上篇文章我们已经介绍了信号的三种产生方式&#xff0c;这部分是对上篇文章的补充 1.1 异常 在编写程序时&#xff0c;我们的程序经常会出现如&#xff1a;除零…...

FPGA设计 时空变换

1、时空变换基本概念 1.1、时空概念简介 时钟速度决定完成任务需要的时间&#xff0c;规模的大小决定完成任务所需要的空间&#xff08;资源&#xff09;&#xff0c;因此速度和规模就是FPGA中时间和空间的体现。 如果要提高FPGA的时钟&#xff0c;每个clk内组合逻辑所能做的事…...

客户端本地搭建

connect函数 主要用于客户端套接字向服务器发起连接请求。 头文件 #include <sys/socket.h> #include <arpa/inet.h> 函数原型 int connect(int sockfd, const struct sockaddr *addr, socklen_t addrlen);参数解释 sockfd&#xff1a;客户端文件描述符。 addr…...

广东食品销售初级考试主要考什么

广东省食品销售初级考试主要考察从业人员对食品安全法律法规、行业规范及基础操作技能的掌握程度&#xff0c;内容涵盖以下几个方面&#xff1a; 1. 食品安全法律法规 考试重点包括《食品安全法》《广东省食品安全条例》等核心法规&#xff0c;要求考生熟悉食品经营许可、从业…...

[盈达科技】GEO(生成式引擎优化)实战指南:从认知重构、技术落地到内容突围的三维战略

GEO&#xff08;生成式引擎优化&#xff09;实战指南&#xff1a;从认知重构、技术落地到内容突围的三维战略 引言&#xff1a;AI搜索重构规则&#xff0c;GEO成为企业新护城河 在生成式AI主导的搜索时代&#xff0c;传统SEO的“关键词游戏”已失效。Google数据显示&#xff0…...

Linux ACL访问控制权限解析:超越传统权限的精细化管理

Linux ACL权限管理示意图 标准输出&#xff1a;Linux文件权限结构&#xff08;支持ACL&#xff09; ├── 传统权限 │ ├── 所有者(user): rwx │ ├── 所属组(group): r-x │ └── 其他用户(other): r-- │ └── ACL扩展权限├── 用户条目│ ├── user…...

全面介绍AVFilter 的添加和使用

author: hjjdebug date: 2025年 04月 22日 星期二 13:48:19 CST description: 全面介绍AVFilter 的添加和使用 文章目录 1.两个重要的编码思想1. 写代码不再是我们调用别人&#xff0c;而是别人调用我们!2. 面向对象的编程方法. 2. AVFilter 开发流程2.1 编写AVFilter 文件2.1.…...

复刻低成本机械臂 SO-ARM100 3D 打印篇

视频讲解&#xff1a; 复刻低成本机械臂 SO-ARM100 3D 打印篇 清理了下许久不用的3D打印机&#xff0c;挤出机也裂了&#xff0c;更换了喷嘴和挤出机夹具&#xff0c;终于恢复了正常工作的状态&#xff0c;接下来还是要用起来&#xff0c;不然吃灰生锈了&#xff0c;于是乎想起…...

基于微信小程序的走失儿童帮助系统-项目分享

基于微信小程序的走失儿童帮助系统-项目分享 项目介绍项目摘要管理员功能图用户功能图系统功能图项目预览首页走失儿童个人中心走失儿童管理 最后 项目介绍 使用者&#xff1a;管理员、用户 开发技术&#xff1a;MySQLJavaSpringBootVue 项目摘要 本系统采用微信小程序进行开…...

C++23 中 static_assert 和 if constexpr 的窄化布尔转换

文章目录 背景与动机C23 的改进限制与例外总结 C23 引入了一项重要的语言特性变更&#xff0c;即在 static_assert 和 if constexpr 中允许窄化按语境转换为 bool。这一特性由 Andrzej Krzemieński 提出的 P1401R5 论文推动&#xff0c;旨在使编译器的行为与标准保持一致&a…...

服务网格在DevOps中的落地:如何让微服务更智能、更稳定?

服务网格在DevOps中的落地:如何让微服务更智能、更稳定? 近年来,DevOps在企业IT架构中变得至关重要,而微服务架构的广泛应用更是加速了这一趋势。然而,随着微服务数量不断增长,我们发现自己掉入了一个运维“泥潭”: 服务之间的流量调控变得复杂可观测性不足,出现问题时…...

el-table表格既出现横向滚动条,又出现纵向滚动条?

横向滚动条 自然出现&#xff1f; 当表格所有列的宽度总和超过表格容器宽度时&#xff0c;el-table会默认出现横向滚动条。 比如&#xff0c;给每个<el-table-column>设置固定宽度&#xff0c;且他们相加超过了<el-table>宽度 就会触发 强制出现&#xff1f; 设…...

STL常用算法——C++

1.概述 2.常用遍历算法 1.简介 2.for_each 方式一&#xff1a;传入普通函数&#xff08;printf1&#xff09; #include<stdio.h> using namespace std; #include<string> #include<vector> #include<functional> #include<algorithm> #include…...

基于国产 FPGA+ 龙芯2K1000处理器+翼辉国产操作系统继电保护装置测试装备解决方案

0 引言 近年来&#xff0c;我国自主可控芯片在国家政策和政 府的支持下发展迅速&#xff0c;并在电力、军工、机械、 通信、电子、医疗等领域掀起了国产化替代之 风&#xff0c;但在芯片自主可控和国产化替代方面还有明 显的不足之处。 2022年我国集成电路进口量多 达 5 3…...

1.3 本书结构概览:从理论基础到实践案例的系统阐述

本书采用由浅入深、理论联系实践的结构设计&#xff0c;旨在为读者提供一个关于大模型与智能代理(Agent)技术的全面认知框架与实施路径。全书共分为十章&#xff0c;系统性地覆盖了从技术基础到企业落地的完整知识链条&#xff0c;现概述如下&#xff1a; 首先&#xff0c;第一…...

【FPGA开发】Vivado开发中的LUTRAM占用LUT资源吗

LUTRAM在Vivado资源报告中的解释 LUTRAM的本质与实现原理&#xff1a; LUTRAM不是一种独立的物理资源&#xff0c;而是LUT&#xff08;Look-Up Table&#xff09;的一种特殊使用方式。在Xilinx FPGA架构中&#xff0c;部分LUT单元可以被配置为小型分布式RAM&#xff08;也称为…...

【动手学强化学习】番外8-IPPO应用框架学习与复现

文章目录 一、待解决问题1.1 问题描述1.2 解决方法 二、方法详述2.1 必要说明&#xff08;1&#xff09;MAPPO 与 IPPO 算法的区别在于什么地方&#xff1f;&#xff08;2&#xff09;IPPO 算法应用框架主要参考来源 2.2 应用步骤2.2.1 搭建基础环境2.2.2 IPPO 算法实例复现&am…...

C++ 的 输入输出流(I/O Streams)

什么是输入输出流 C 的输入输出操作是通过 流&#xff08;stream&#xff09; 机制实现的。 流——就是数据的流动通道&#xff0c;比如&#xff1a; 输入流&#xff1a;从设备&#xff08;如键盘、文件&#xff09;读取数据 → 程序 输出流&#xff1a;程序将数据写入设备&…...

Java 安全:如何防止 SQL 注入与 XSS 攻击?

Java 安全&#xff1a;如何防止 SQL 注入与 XSS 攻击&#xff1f; 在 Java 开发领域&#xff0c;安全问题至关重要&#xff0c;而 SQL 注入和 XSS 攻击是两种常见的安全威胁。本文将深入探讨如何有效防止这两种攻击&#xff0c;通过详细代码实例为您呈现解决方案。 一、SQL 注…...

leetcode day36 01背包问题 494

494 目标和 给你一个非负整数数组 nums 和一个整数 target 。 向数组中的每个整数前添加 或 - &#xff0c;然后串联起所有整数&#xff0c;可以构造一个 表达式 &#xff1a; 例如&#xff0c;nums [2, 1] &#xff0c;可以在 2 之前添加 &#xff0c;在 1 之前添加 - &…...

31Calico网络插件的简单使用

环境准备&#xff1a; 1、删除Flannel 2、集群所有node节点拉取所需镜像&#xff08;具体版本可以依据calico.yaml文件中&#xff09;&#xff1a; docker pull calico/cni:v3.25.0 docker pull calico/node:v3.25.0 docker pull calico/kube-controllers:v3.25.0一、安装Cali…...

进阶篇 第 5 篇:现代预测方法 - Prophet 与机器学习特征工程

进阶篇 第 5 篇&#xff1a;现代预测方法 - Prophet 与机器学习特征工程 (图片来源: ThisIsEngineering RAEng on Pexels) 在前几篇中&#xff0c;我们深入研究了经典的时间序列统计模型&#xff0c;如 ETS 和强大的 SARIMA 家族。它们在理论上成熟且应用广泛&#xff0c;但有…...

实用生活c语言脚本

#include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <time.h> // 清理临时文件目录 void clean_temp_directory() { const char* temp_dir "/tmp"; // 可自定义需要清理的目录 char command[1024]; …...

从零开始构建微博爬虫与数据分析系统

从零开始构建微博爬虫与数据分析系统 引言 社交媒体平台蕴含着海量的信息和数据&#xff0c;通过对这些数据的收集和分析&#xff0c;我们可以挖掘出有价值的见解。本文将详细介绍如何构建一个完整的微博爬虫和数据分析系统&#xff0c;从数据爬取、清洗、到多维度分析与可视…...

417. 太平洋大西洋水流问题

题目 有一个 m n 的矩形岛屿&#xff0c;与 太平洋 和 大西洋 相邻。 “太平洋” 处于大陆的左边界和上边界&#xff0c;而 “大西洋” 处于大陆的右边界和下边界。 这个岛被分割成一个由若干方形单元格组成的网格。给定一个 m x n 的整数矩阵 heights &#xff0c; heights…...

chili3d调试笔记8 打印零件属性

无效&#xff0c; 返回的是节点不是坐标啥的&#xff0c; 找他的属性 把document和selectednote&#xff08;空集&#xff09;传给handleshowproperty方法 怎么获得selectnotes和selectnotes的property值 有selectnotes运行这段就行了 明天再搞...

uniapp Vue2升级到Vue3,并发布到微信小程序的快捷方法

目录 前言&#xff1a;升级项目的两种方式步骤一、新建项目 【选择-默认模版】二、修改-pages.json三、补充-缺少的文件四、修改-Main.js按照 [官方文档-vue2升级vue3迁移指南](https://uniapp.dcloud.net.cn/tutorial/migration-to-vue3.html) 修改 五、升级-uni-ui扩展组件的…...

火山RTC 5 转推CDN 布局合成规则

实时音视频房间&#xff0c;转推CDN&#xff0c;文档&#xff1a; 转推直播--实时音视频-火山引擎 一、转推CDN 0、前提 * 在调用该接口前&#xff0c;你需要在[控制台](https://console.volcengine.com/rtc/workplaceRTC)开启转推直播功能。<br> * 调…...

Mujoco xml < sensor>

< sensor> jointposjointveljointactuatorfrcframequatgyroaccelerometerframeposframelinveltouchobjtype"site" objname"imu" 和site"imu"的区别python中与sensor有关的写法传感器名字索引第几个idid索引传感器名字传感器数量sensor中的…...

示例:spring xml+注解混合配置

以下是一个 Spring XML 注解的混合配置示例&#xff0c;结合了 XML 的基础设施配置&#xff08;如数据源、事务管理器&#xff09;和注解的便捷性&#xff08;如依赖注入、事务声明&#xff09;。所有业务层代码通过注解简化&#xff0c;但核心配置仍通过 XML 管理。 1. 项目结…...

同样的html标记,不同语言的文本,显示的字体和粗细会不一样吗

同样的 HTML 标记&#xff0c;在不同语言的文本下&#xff0c;显示出来的字体和粗细确实可能会不一样&#xff0c;原因如下&#xff1a; &#x1f30d; 不同语言默认字体不同 浏览器字体回退机制 CSS 里写的字体如果当前系统不支持&#xff0c;就会回退到下一个&#xff0c;比如…...

Linux进程6-alarm闹钟定时终止、raise发送信号、abort终止、pause挂起进程验证

目录 1.alarm函数 1.1关键点 1.2单个alarm函数定时 1.3两个alarm函数定时 2.raise函数 2.1核心行为‌ 2.2 raise与 kill 的区别 2.3程序&#xff1a; 3.abort函数 4.pause 函数 4.1 pause简单挂起 4.2父进程挂起&#xff0c;子进程发信号 1.alarm函数 函数原型&…...

SpringCloud组件—Eureka

一.背景 1.问题提出 我们在一个父项目下写了两个子项目&#xff0c;需要两个子项目之间相互调用。我们可以发送HTTP请求来获取我们想要的资源&#xff0c;具体实现的方法有很多&#xff0c;可以用HttpURLConnection、HttpClient、Okhttp、 RestTemplate等。 举个例子&#x…...

类加载器与jvm的内存

1. 类加载器与内存的关系 类加载器的字节码放在方法区&#xff08;元空间&#xff09;中&#xff0c;同时类加载器加载类后类的信息&#xff08;成员变量、成员方法及修饰符等&#xff09;存放在方法区中。类的信息所占内存的回收要同时满足两个条件&#xff1a;类的实例被回收…...

【C++】新手入门指南(下)

文章目录 前言 一、引用 1.引用的概念和定义 2.引用的特性 3.引用的使用 4.const引用 5.指针和引用的关系 二、内联函数 三、nullptr 总结 前言 这篇续上篇的内容新手入门指南&#xff08;上&#xff09;&#xff0c;继续带大家学习新知识。如果你感兴趣欢迎订购本专栏。 一、…...

el-table中el-input的autofocus无法自动聚焦的解决方案

需求 有一个表格展示了一些进度信息&#xff0c;进度信息可以修改&#xff0c;需要点击进度信息旁边的编辑按钮时&#xff0c;把进度变为输入框且自动聚焦&#xff0c;当鼠标失去焦点时自动请求更新接口。 注&#xff1a;本例以vue2 element UI为例 分析 这个需求看着挺简单…...

vimplus 如何修改语言支持的版本,以及如何跳转路径

vimplus修改语言版本 默认的vimplus支持c的版本是17 如何修改我们需要修改.ycm_extra_conf.py文件&#xff0c;这个文件管理了我们的插件配置 找到 把他修改为你想要的版本 增添路径 把你安装的gcc位置提供给他&#xff0c;默认的目前比较老 这里都是他提前为我们准备的路…...

麒麟V10安装MySQL8.4

1、下载安装包 wget https://cdn.mysql.com//Downloads/MySQL-8.4/mysql-8.4.5-1.el7.x86_64.rpm-bundle.tar2、解压 mkdir -p /opt/mysql tar -xvf mysql-8.4.5-1.el7.x86_64.rpm-bundle.tar -C /opt/mysql3、安装MySQL 3.1、卸载mariadb rpm -qa | grep mariadb rpm -e m…...

Varjo-XR3在UE5中,头显中间有一个方块一直显示

深色方块显示在屏幕中间的焦点区域中 屏幕中间的对焦区域中显示的黑色方块。 黑色方块是一个已知问题。它在 Varjo VRTemplate 中不可见&#xff0c;因为它使用具有推荐 VR 设置的前向渲染方法。 但是&#xff0c;如果你将延迟渲染方法与高级功能&#xff08;如 Lumen、Nani…...

FastText 模型文本分类实验:从零到一的实战探索

在自然语言处理&#xff08;NLP&#xff09;领域&#xff0c;文本分类是一个基础而重要的任务&#xff0c;广泛应用于情感分析、主题识别、垃圾邮件过滤等多个场景。最近&#xff0c;我参与了一次基于 FastText 模型的文本分类实验&#xff0c;从数据预处理到模型构建、训练和评…...

不同经营性道路运输从业资格证申请条件全解析

在道路运输领域&#xff0c;获取相应的从业资格证是合法从事经营性运输工作的关键前提。不同类型的运输业务&#xff0c;如旅客运输、货物运输以及危险货物运输&#xff0c;对从业者有着不同的条件要求。 经营性道路旅客运输驾驶员 驾驶证年限&#xff1a;需取得相应的机动车…...

WHAT - 静态资源缓存穿透

文章目录 1. 动态哈希命名的基本思路2. 具体实现2.1 Vite/Webpack 配置动态哈希2.2 HTML 文件中动态引用手动引用使用 index.html 模板动态插入 2.3 结合 Cache-Control 避免缓存穿透2.4 适用于多环境的动态策略 总结 在多环境部署中&#xff0c;静态资源缓存穿透是一个常见问题…...

11、Refs:直接操控元素——React 19 DOM操作秘籍

一、元素操控的魔法本质 "Refs是巫师与麻瓜世界的连接通道&#xff0c;让开发者能像操控魔杖般精准控制DOM元素&#xff01;"魔杖工坊的奥利凡德先生轻抚着魔杖&#xff0c;React/Vue的refs能量在杖尖跃动。 ——以神秘事务司的量子纠缠理论为基&#xff0c;揭示DOM…...

crontab 定时备份 mysql 数据库

1、使用 mysqldump 命令备份数据 1.1 备份全部数据库的数据和结构 mysqldump -uroot -p123456 -A > /data/backup/db.sql1.2 备份全部数据库的结构&#xff08;加 -d 参数&#xff09; mysqldump -uroot -p123456 -A -d > /data/backup/db.sql1.3 备份全部数据库的数据…...

数据库对象与权限管理-视图与索引管理

一、视图&#xff08;View&#xff09;管理 1. 视图的定义与本质 视图&#xff08;View&#xff09;是Oracle数据库中的逻辑表&#xff0c;它不直接存储数据&#xff0c;而是通过预定义的SQL查询动态生成结果集。视图的本质可以理解为&#xff1a; 虚拟表&#xff1a;用户可…...

德施曼重磅发布五大突破性技术及多款重磅新品,开启AI智能管家时代

当智能锁拥抱人文关怀&#xff0c;万物有灵便有了具象化的表达。 4月22日&#xff0c;智能锁领军品牌德施曼“万物有灵”2025全球新品发布会在乌镇隆重举行&#xff0c;为智能锁行业带来了AI时代的革新方案。 会上&#xff0c;德施曼创始人/CEO祝志凌重磅发布了五大突破性技术&…...

单元测试学习笔记(一)

自动化测试 通过测试工具/编程模拟手动测试步骤&#xff0c;全自动半自动执行测试用例&#xff0c;对比预期输出和实际输出&#xff0c;记录并统计测试结果&#xff0c;减少重复的工作量。 单元测试 针对最小的单元测试&#xff0c;Java中就是一个一个的方法就是一个一个的单…...

Rest Client插件写http文件直接发送请求

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言&#x1f4cc; 插件介绍&#xff1a;&#x1f680; 安装方式&#xff1a;&#x1f4da; 使用示例&#xff1a;⚙️ 功能亮点&#xff1a; 前言 直接在 VSCode …...

LLM 论文精读(一)Scaling Laws for Neural Language Models

这篇文章是2020年发表的一篇LLM领域中非常重要的论文&#xff0c;由OpenAI发布&#xff0c;总结了LLM模型规模与训练数据token之间的比例关系&#xff0c;即我们熟知的 Scaling Laws&#xff0c;允许 通过观察小规模训练实验&#xff0c;提前预测大模型的效果表现&#xff0c;降…...