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

C++—特殊类设计设计模式

目录

  • C++—特殊类设计&设计模式
    • 1.设计模式
    • 2.特殊类设计
      • 2.1设计一个无法被拷贝的类
      • 2.2设计一个只能在堆上创建对象的类
      • 2.3设计一个只能在栈上创建对象的类
      • 2.4设计一个类,无法被继承
      • 2.5设计一个类。这个类只能创建一个对象【单例模式】
        • 2.5.1懒汉模式实现
        • 2.5.2饿汉模式实现
        • 2.5.3懒汉的饿汉的区别

C++—特殊类设计&设计模式

1.设计模式

设计模式(Design Pattern)是一套被反复使用、多数人知晓的、经过分类的、代码设计经验的总结

为什么会产生设计模式这样的东西呢?就像人类历史发展会产生兵法。最开始部落之间打仗时都是人拼人的对砍。后来春秋战国时期,七国之间经常打仗,就发现打仗也是有套路的,后来孙子就总结出了《孙子兵法》。孙子兵法也是类似

之前已经接触过一些设计模式了

比如:

  1. 迭代器模式
  2. 适配器模式

还有一些设计模式——工厂模式,装饰器模式,观察者模式,单例模式、

2.特殊类设计

下面是一些常见的特殊类设计

2.1设计一个无法被拷贝的类

拷贝只会放生在两个场景中:拷贝构造函数以及赋值运算符重载,因此想要让一个类禁止拷贝,只需让该类不能调用拷贝构造函数以及赋值运算符重载即可

这个前面在异常的时候其实就说过了,两种方式,分别是c++98和c++11提供的

  • c++11的方法:

C++11扩展delete的用法,delete除了释放new申请的资源外,如果在默认成员函数后跟上=delete,表示让编译器删除掉该默认成员函数。

class NotCopy
{// 其实就是将拷贝构造和赋值运算符重载给禁掉就行了,之前有讲过// 在c++98就是将之声明不定义,然后将两个成员函数弄成私有的,这样外面就无法使用者两个函数了// 在c++11可以使用delete关键字
public:NotCopy(const NotCopy& n) = delete;NotCopy& operator=(const NotCopy& n) = delete;
private:int _a;
};
  • c++98的方法:
class NotCopy
{// 在c++98就是将之声明不定义,然后将两个成员函数弄成私有的,这样外面就无法使用者两个函数了// 在c++11可以使用delete关键字
public:private:NotCopy(const NotCopy& n);NotCopy& operator=(const NotCopy& n);int _a;
};
  • 原因:
  1. 设置成私有:如果只声明没有设置成private,用户自己如果在类外定义了,就可以不

能禁止拷贝了

  1. 只声明不定义:不定义是因为该函数根本不会调用,定义了其实也没有什么意义,不写反而还简单,而且如果定义了就不会防止成员函数内部拷贝了。

2.2设计一个只能在堆上创建对象的类

实现方式:

  1. 将类的构造函数私有,拷贝构造声明成私有。防止别人调用拷贝在栈上生成对象。

  2. 提供一个静态的成员函数,在该静态成员函数中完成堆对象的创建

//2.设计一个只能在堆上创建对象的类
class OnlyHead
{
public:static OnlyHead* GetObj(){return new OnlyHead;// new OnlyHead和new OnlyHead()的区别// 就是第一个是隐式调用默认构造函数// 第二个是显式调用默认构造函数}// 除了构造函数不能给外面直接调用,拷贝构造和赋值运算符重载也要禁掉OnlyHead(const OnlyHead& o) = delete;OnlyHead& operator=(const OnlyHead& o) = delete;private:// 在栈上定义的对象一定会调用默认构造函数,所以直接弄成私有的OnlyHead(){}};int main()
{//OnlyHead hp;//OnlyHead* p = new OnlyHead;OnlyHead* p = OnlyHead::GetObj(); // 如果不释放p就会内存泄漏shared_ptr<OnlyHead> sp(OnlyHead::GetObj()); //交给智能指针//OnlyHead copy(*sp); // 拷贝构造要禁掉return 0;
}

2.3设计一个只能在栈上创建对象的类

可以用2.2的思路,先将构造私有,然后直接给一个类内静态方法

也可以将new直接重载,直接禁掉

// 3.设计一个只能在栈上创建对象的类
class OnlyStack
{
public:// 第一种思路: 直接不给new,重载new【这个思路无法阻止静态区的对象的创建】void* operator new(size_t size) = delete;// 第二种思路:将构造函数设置为私有的,然后提供一个static方法给外部调用// 这个思路不能禁掉拷贝构造,因为getobj返回值这里会有一次拷贝构造//【这个思路无法阻止静态区的对象的创建】static OnlyStack getobj(){return OnlyStack(); //类里面可以调用私有的构造函数}
private:OnlyStack(){}
};int main()
{OnlyStack* p = new OnlyStack;OnlyStack* p = new OnlyStack();OnlyStack o = OnlyStack::getobj(); //创建栈上的对象,注意这个思路不能禁掉拷贝构造// 这里实际上调用了拷贝构造static OnlyStack os = OnlyStack::getobj();return 0;
}

2.4设计一个类,无法被继承

这个简单,就不仔细说了

// 4.设计一个类,无法被继承 
class NoInherit final
{// 两个思路,c++98:直接让构造函数私有化,因为子类的构造需要调用父类的构造// c++11:final关键字
};

2.5设计一个类。这个类只能创建一个对象【单例模式】

2.5.1懒汉模式实现

单例模式:一个类在全局(进程)中只能有一个实例对象

// 5.设计一个类。这个类只能创建一个对象【单例模式】
class Singleton
{
public:static Singleton* GetInstance(){if (_p == nullptr){_p = new Singleton;}return _p;}// 在这个情况下,拷贝构造也要禁掉Singleton(const Singleton& s) = delete;private:Singleton(){}// 需要再创建一个变量,来控制对象只能存在一个// 其实就是弄一个所有对象共用的变量,只要该变量标记了,就说明已经有一个对象了,那就不能再调用构造函数了static Singleton* _p; 
};Singleton* Singleton::_p = nullptr; //初始化int main()
{Singleton* s1 = Singleton::GetInstance();Singleton* s2 = Singleton::GetInstance();Singleton* s3 = Singleton::GetInstance();// 这里三个获取的都是同一个对象cout << s1 << endl;cout << s2 << endl;cout << s3 << endl;//Singleton s4(Singleton::GetInstance());//拷贝构造要禁掉return 0;
}

image-20250506085655120

但是上面这个代码是有问题的,这个单例模式会有线程安全问题,因为当多线程操作的时候,这里有一个公共资源,即临界资源——_p,因此就会出现线程安全问题。可能会创建出多个对象。这样单例模式就被破坏了

因此对临界资源_p加锁即可

#include<mutex>
class Singleton
{
public:static Singleton* GetInstance(){_mtx.lock();if (_p == nullptr){_p = new Singleton;}_mtx.unlock();return _p;}// 在这个情况下,拷贝构造也要禁掉Singleton(const Singleton& s) = delete;private:Singleton(){}// 需要再创建一个变量,来控制对象只能存在一个// 其实就是弄一个所有对象共用的变量,只要该变量标记了,就说明已经有一个对象了,那就不能再调用构造函数了static Singleton* _p; // _p是一个临界资源,要保护它static mutex _mtx; //为了线程安全,加一个锁
};Singleton* Singleton::_p = nullptr; //初始化
mutex Singleton::_mtx; //定义, 类里面的只是声明

这个代码就不会出现线程安全问题。

但是这个代码还是有点问题,因为虽然对临界区加锁了,但是临界区内有可能发生异常,new可能会抛异常,一旦抛异常就会造成死锁,因为这里应该用RAII思想来解决

#include<mutex>
class Singleton
{
public:static Singleton* GetInstance(){//_mtx.lock();{ //这个花括号是为了控制unique_lock的生命周期,不影响临界区后面的代码unique_lock<mutex> lock(_mtx);if (_p == nullptr){_p = new Singleton;}}//_mtx.unlock();return _p;}// 在这个情况下,拷贝构造也要禁掉Singleton(const Singleton& s) = delete;private:Singleton(){}// 需要再创建一个变量,来控制对象只能存在一个// 其实就是弄一个所有对象共用的变量,只要该变量标记了,就说明已经有一个对象了,那就不能再调用构造函数了static Singleton* _p; // _p是一个临界资源,要保护它static mutex _mtx; //为了线程安全,加一个锁
};Singleton* Singleton::_p = nullptr; //初始化
mutex Singleton::_mtx; //定义, 类里面的只是声明

上述代码仍然有一些缺陷,可以继续优化。【即,我们只需要对第一次访问临界资源_p进行加锁保护即可,因为后面不会再有修改临界资源的情况出现】

这里做一个经典的双检查

static Singleton* GetInstance()
{//_mtx.lock();if(_p == nullptr) //这里是一个双检查{ unique_lock<mutex> lock(_mtx);if (_p == nullptr){_p = new Singleton;}} //并且出了这里,unique_lock<mutex>的生命周期就结束了//_mtx.unlock();return _p;
}

下面是完整的代码:【这里是一个懒汉模式的单例模式】

#include<mutex>
class Singleton
{
public:static Singleton* GetInstance(){//_mtx.lock();if(_p == nullptr) //这里是一个双检查{ unique_lock<mutex> lock(_mtx);if (_p == nullptr){_p = new Singleton;}} //并且出了这里,unique_lock<mutex>的生命周期就结束了//_mtx.unlock();return _p;}// 在这个情况下,拷贝构造也要禁掉Singleton(const Singleton& s) = delete;// 释放资源static void DelInstance(){unique_lock<mutex> lock(_mtx);delete _p;_p = nullptr;}private:Singleton(){}// 需要再创建一个变量,来控制对象只能存在一个// 其实就是弄一个所有对象共用的变量,只要该变量标记了,就说明已经有一个对象了,那就不能再调用构造函数了static Singleton* _p; // _p是一个临界资源,要保护它static mutex _mtx; //为了线程安全,加一个锁
};Singleton* Singleton::_p = nullptr; //初始化
mutex Singleton::_mtx; //定义, 类里面的只是声明

如果想程序在结束之后,自动释放单例对象,可以引入尝试下面这个代码的思路

// 释放资源static void DelInstance(){// 这种思路下,不需要加锁了。因为_mtx锁可能已经释放了// 并且main函数都结束了,主线程结束了,其他线程肯定都结束了,不存在多线程的场景了delete _p;_p = nullptr;}// 如果手动释放单例对象,可以手动调用DelInstance()
// 如果想在程序结束之后自动释放单例对象,可以引入一个小机制,利用生命周期
class GC
{
public:~GC(){Singleton::DelInstance();}
};// 这里定义一个gc的静态变量,在当前程序结束之后,就会调用DelInstance()来释放单例对象
static GC gc; 
2.5.2饿汉模式实现
	class Singleton{public:static Singleton* GetInstance(){return &_inst;}Singleton(const Singleton& s) = delete;private:Singleton(){}static Singleton _inst;};Singleton Singleton::_inst; //在main函数之前就在静态区把唯一的对象创建好了, 不存在线程安全的问题了
2.5.3懒汉的饿汉的区别
  • 懒汉模式需要考虑线程安全和内存泄漏的问题,实现相对更复杂。饿汉就不需要考虑这些问题,实现起来也相对简单、

  • 懒汉模式是在需要的时候才创建对象并初始化,相对来说不会影响程序的进行,而饿汉模式是一开始就创建对象并初始化,如果代码量大,就会导致程序运行缓慢,影响用户体验

  • 饿汉模式无法保证对象的创建顺序,比如有多个单例类,并且有依赖关系(B依赖A), 要求先创建A,在创建B,那就不能用饿汉模式,要用懒汉

  • 如果在构造函数中有动态库链接,和创建线程(要链接线程库),那么就不能用饿汉模式。因为饿汉在main函数之前就初始化了,这个时候不知道库是否链接了,如果没有链接就会崩

相关文章:

C++—特殊类设计设计模式

目录 C—特殊类设计&设计模式1.设计模式2.特殊类设计2.1设计一个无法被拷贝的类2.2设计一个只能在堆上创建对象的类2.3设计一个只能在栈上创建对象的类2.4设计一个类&#xff0c;无法被继承2.5设计一个类。这个类只能创建一个对象【单例模式】2.5.1懒汉模式实现2.5.2饿汉模…...

初入OpenCV

OpenCV简介 OpenCV是一个开源的跨平台计算机视觉库&#xff0c;它实现了图像处理和计算机视觉方面的很多通用算法。 应用场景&#xff1a; 目标识别&#xff1a;人脸、车辆、车牌、动物&#xff1b; 自动驾驶&#xff1b;医学影像分析&#xff1b; 视频内容理解分析&#xff…...

霍夫圆变换全面解析(OpenCV)

文章目录 一、霍夫圆变换基础1.1 霍夫圆变换概述1.2 圆的数学表达与参数化 二、霍夫圆变换算法实现2.1 标准霍夫圆变换算法流程2.2 参数空间的表示与优化 三、关键参数解析3.1 OpenCV中的HoughCircles参数3.2 参数调优策略 四、Python与OpenCV实现参考4.1 基本实现代码4.2 改进…...

互联网大厂Java求职面试:优惠券服务架构设计与AI增强实践-4

互联网大厂Java求职面试&#xff1a;优惠券服务架构设计与AI增强实践-4 场景设定 面试官&#xff1a;某互联网大厂技术总监&#xff0c;拥有超过10年大型互联网企业一线技术管理经验&#xff0c;擅长分布式架构、微服务治理、云原生等领域。 候选人&#xff1a;郑薪苦&#…...

项目中会出现的css样式

1.重复渐变边框 思路&#xff1a; 主要是用重复的背景渐变实现的 如图&#xff1a; <div class"card"><div class"container">全面收集中医癌毒临床医案&#xff0c;建立医案共享机制&#xff0c;构建癌毒病机知识图谱&#xff0c;便于医疗人…...

LeetCode[101]对称二叉树

思路&#xff1a; 对称二叉树是左右子树对称&#xff0c;而不是左右子树相等&#xff0c;所以假设一个树只有3个节点&#xff0c;那么判断这个数是否是对称二叉树&#xff0c;肯定是先判断左右两个树&#xff0c;然后再看根节点&#xff0c;这样递归顺序我们就确认了&#xff0…...

黑马k8s(四)

1.资源管理介绍 本章节主要介绍yaml语法和kubernetes的资源管理方式 2.YAML语言介绍 3.资源管理方式 命令式对象管理 dev下删除了pod&#xff0c;之后发现还有pod&#xff0c;把原来的pod删除了&#xff0c;重新启动了一个 命令式对象配置 声明式对象配置 命令式对象配置&…...

华为ensp实现跨vlan通信

要在网络拓扑中实现主机192.168.1.1、192.168.1.2和192.168.2.1之间的互相通信&#xff0c;需要正确配置交换机&#xff08;S5700&#xff09;和路由器&#xff08;AR3260&#xff09;&#xff0c;以确保不同网段之间的通信&#xff08;即VLAN间路由&#xff09;。 网络拓扑分析…...

TCPIP详解 卷1协议 十 用户数据报协议和IP分片

10.1——用户数据报协议和 IP 分片 UDP是一种保留消息边界的简单的面向数据报的传输层协议。它不提供差错纠正、队列管理、重复消除、流量控制和拥塞控制。它提供差错检测&#xff0c;包含我们在传输层中碰到的第一个真实的端到端&#xff08;end-to-end&#xff09;校验和。这…...

Java笔记4

第一章 static关键字 2.1 概述 以前我们定义过如下类&#xff1a; public class Student {// 成员变量public String name;public char sex; // 男 女public int age;// 无参数构造方法public Student() {}// 有参数构造方法public Student(String a) {} }我们已经知道面向…...

Matlab 垂向七自由度轨道车辆开关型半主动控制

1、内容简介 Matlab 229-垂向七自由度轨道车辆开关型半主动控制 可以交流、咨询、答疑 2、内容说明 略 3、仿真分析 略 4、参考论文 略...

Matlab 短时交通流预测AR模型

1、内容简介 Matlab 230-短时交通流预测AR模型 可以交流、咨询、答疑 2、内容说明 略 3、仿真分析 略 4、参考论文 略城市道路短时交通流预测.pdf...

MYSQL之表的约束

表中真正约束字段的是数据类型, 但是只有数据类型约束就很单一, 也需要有一些额外的约束, 从而更好的保证数据的合法性, 从业务逻辑角度保证数据的正确性. 比如有一个字段是email, 要求是唯一的. 为什么要有表的约束? 表的约束: 表中一定要有各种约束, 通过约束, 让我们未来…...

使用ACE-Step在本地生成AI音乐

使用ACE-Step v1-3.5B开源模型从文本提示、标签和歌词创建完整的AI生成歌曲 — 无需云服务,无需API,仅需您的GPU。 这是由ACE Studio和StepFun开发的开源音乐生成模型。 在对数据隐私和云服务依赖性日益增长的担忧时代,ACE-Step将强大的文本转音乐生成完全离线,使其成为A…...

web 自动化之 Unittest 四大组件

文章目录 一、如何开展自动化测试1、项目需求分析&#xff0c;了解业务需求 web 功能纳入自动化测试2、选择何种方式实现自动化测试 二、Unittest 框架三、TestCase 测试用例四、TestFixture 测试夹具 执行测试用例前的前置操作及后置操作五、TestSuite 测试套件 & TestLoa…...

2025年渗透测试面试题总结-渗透测试红队面试七(题目+回答)

网络安全领域各种资源&#xff0c;学习文档&#xff0c;以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各种好玩的项目及好用的工具&#xff0c;欢迎关注。 目录 渗透测试红队面试七 一百八十一、Shiro漏洞类型&#xff0c;721原理&#xff0c;721利用要注意什么&am…...

Mysql的索引,慢查询和数据库表的设计以及乐观锁和悲观锁

设计高性能数据表的原则 数据库设计经验和技巧 单张数据表的字段不宜过多&#xff08;20个&#xff09;&#xff0c;如果确实存在大量field,考虑拆成多张表或json text存储 数据表字段都是not null的&#xff0c;即使没有数据&#xff0c;最好也使用无意义的值填充&#xff0c…...

day012-软件包管理专题

文章目录 1. 生成随机密码2. 软件包管理2.1 类红帽系统2.1.1 安装软件包2.1.2 查找软件包2.1.3 查看软件包内容2.1.4 查看命令或文件属于哪个软件包2.1.5 重新安装软件包2.1.6 删除软件包2.1.7 升级2.1.8 rpm安装软件包2.1.9 rpm升级软件包2.1.10 rpm检查软件包文件是否改变 3.…...

学习黑客5 分钟深入浅出理解Windows Firewall

5 分钟深入浅出理解Windows Firewall &#x1f525; 大家好&#xff01;今天我们将探索Windows防火墙——这是Windows操作系统中的核心安全组件&#xff0c;负责控制进出计算机的网络流量。无论你是计算机初学者&#xff0c;还是在TryHackMe等平台上学习网络安全的爱好者&…...

node .js 启动基于express框架的后端服务报错解决

问题&#xff1a; node .js 用npm start 启动基于express框架的后端服务报错如下&#xff1a; /c/Program Files/nodejs/npm: line 65: 26880 Segmentation fault "$NODE_EXE" "$NPM_CLI_JS" "$" 原因分析&#xff1a; 遇到 /c/Program F…...

feign.RequestInterceptor 简介-笔记

1. feign.RequestInterceptor 简介 Feign 是一个声明式 Web 服务客户端&#xff0c;用于简化 HTTP 请求的编写与管理。feign.RequestInterceptor 是 Feign 提供的一个接口&#xff0c;用于在请求发出之前对其进行拦截和修改。这在微服务架构中非常有用&#xff0c;比如在请求中…...

软考错题(四)

在程序执行过程中&#xff0c;高速缓存cache与主存间的地址映射由硬件自动完成 以下关于两个浮点数相加运算的叙述中&#xff0c;正确的是首先进行对阶&#xff0c;阶码小的向阶码大的对齐 认证只能阻止主动攻击不能阻止被动攻击 BGP是外部网关协议 查看端口信息&#xff1…...

SSRF相关

SSRF(Server Side Request Forgery,服务器端请求伪造)&#xff0c;攻击者以服务器的身份发送一条构造好的请求给服务器所在地内网进行探测或攻击。 产生原理&#xff1a; 服务器端提供了能从其他服务器应用获取数据的功能&#xff0c;如从指定url获取网页内容、加载指定地址的图…...

供应链学习

供应链安全 供应链&#xff1a;整个业务系统中的节点&#xff08;一般是上游节点&#xff09; 乙方一般提供资源&#xff1a;人 软件 硬件 服务 如何寻找供应链 1.招投标信息&#xff1a;寻标包 例如&#xff1a;烟草 智能办公 2.网站本身指纹 例如&#xff1a; powered by xxx…...

力扣HOT100之二叉树:226. 翻转二叉树

这道题很简单&#xff0c;用递归来做&#xff0c;对于一个根节点来说&#xff0c;有两种情况我们不需要翻转&#xff1a;一是根节点为空&#xff0c;二是根节点为叶子节点。这很容易理解&#xff0c;当传入的节点不满足上面的两种情况时&#xff0c;我们就需要做一个翻转&#…...

如何让rabbitmq保存服务断开重连?保证高可用?

在 Spring Boot 集成 RabbitMQ 时&#xff0c;可以通过以下几种方式让 RabbitMQ 保存服务断开重连&#xff0c;以保证高可用&#xff1a; 配置自动重连 application.properties 配置 &#xff1a;在 Spring Boot 的配置文件 application.properties 中&#xff0c;可以设置 Ra…...

TCPIP详解 卷1协议 九 广播和本地组播(IGMP 和 MLD)

9.1——广播和本地组播&#xff08;IGMP 和 MLD&#xff09; IPv4可以使用4种IP地址&#xff1a;单播&#xff08;unicast&#xff09;、任播&#xff08;anycast&#xff09;、组播&#xff08;multicast&#xff09;和广播&#xff08;broadcast&#xff09;。 IPv6可以使用…...

全球变暖-bfs

1.不沉的就是4个方向没有海&#xff0c;一个大岛屿有一个不沉就行了&#xff0c;其余染色就好了 2.第一个bfs来统计总岛屿个数 3.第二个来统计不沉岛屿个数 4.一减就ac啦 #include<bits/stdc.h> using namespace std; #define N 100011 typedef long long ll; typede…...

DDD领域驱动开发

1. 现象: 软件设计质量最高的时候是第一次设计的那个版本&#xff08;通常是因为第一次设计时&#xff0c;业务技术沟通最充分&#xff0c;从业务技术整体视角出发设计系统&#xff09;。当第一个版本设计上线以后就开始各种需求变更&#xff0c;这常常又会打乱原有的设计。 2…...

【HarmonyOS 5】鸿蒙App Linking详解

【HarmonyOS 5】鸿蒙App Linking详解 一、前言 HarmonyOS 的 App Linking 功能为开发者提供了一个强大的工具&#xff0c;通过创建跨平台的深度聚合链接&#xff0c;实现用户在不同场景下的无缝跳转&#xff0c;极大地提升了用户转化率和应用的可用性。 其安全性、智能路由和…...

Android Studio 中 build、assemble、assembleDebug 和 assembleRelease 构建 aar 的区别

上一篇&#xff1a;Tasks中没有build选项的解决办法 概述&#xff1a; 在构建 aar 包时通常会在下面的选项中进行构建&#xff0c;但是对于如何构建&#xff0c;选择哪种方式构建我还是处于懵逼状态&#xff0c;所以我整理了一下几种构建方式的区别以及如何选择。 1. build…...

【爬虫】12306查票

城市代码&#xff1a; 没有加密&#xff0c;关键部分&#xff1a; 完整代码&#xff1a; import json import requests with open(rE:\学习文件夹&#xff08;关于爬虫&#xff09;\项目实战\12306\城市代码.json,r,encodingutf-8) as f:city_codef.read() city json.loads(c…...

火山RTC 7 获得远端裸数据

一、获得远端裸数据 1、获得h264数据 1&#xff09;、远端编码后视频数据监测器 /*** locale zh* type callback* region 视频管理* brief 远端编码后视频数据监测器<br>* 注意&#xff1a;回调函数是在 SDK 内部线程&#xff08;非 UI 线程&#xff09;同步抛出来的&a…...

请求参数:Header 参数,Body 参数,Path 参数,Query 参数分别是什么意思,什么样的,分别通过哪个注解获取其中的信息

在API开发中&#xff08;如Spring Boot&#xff09;&#xff0c;请求参数可以通过不同方式传递&#xff0c;对应不同的注解获取。以下是 Header参数、Body参数、Path参数、Query参数 的区别及对应的注解&#xff1a; Header 参数 ​ • 含义&#xff1a;通过HTTP请求头&#x…...

【Web/HarmonyOS】采用ArkTS+Web组件开发网页嵌套的全屏应用

文章目录 1、简介2、效果3、在ArkTs上全屏Web3.1、创建ArkTS应用3.2、修改模块化配置&#xff08;module.json5&#xff09;3.3、修改系统栏控制&#xff08;ArkTS代码&#xff09; 4、双网页嵌套Web实现5、ArkTSWeb技术架构的演进 1、简介 在鸿蒙应用开发领域&#xff0c;技术…...

Leetcode (力扣)做题记录 hot100(34,215,912,121)

力扣第34题&#xff1a;在排序数组中查找第一个数和最后一个数 34. 在排序数组中查找元素的第一个和最后一个位置 - 力扣&#xff08;LeetCode&#xff09; class Solution {public int[] searchRange(int[] nums, int target) {int left 0;int right nums.length - 1;int[…...

Babylon.js学习之路《三、创建你的第一个 3D 场景:立方体、球体与平面》

文章目录 1. 引言&#xff1a;从零构建一个 3D 场景1.1 目标与成果预览1.2 前置条件 2. 初始化 Babylon.js 场景2.1 创建 HTML 骨架2.2 初始化引擎与场景 3. 创建基础几何体3.1 立方体&#xff08;Box&#xff09;3.2 球体&#xff08;Sphere&#xff09;3.3 平面&#xff08;P…...

Go 语言即时通讯系统开发日志-day1:从简单消息收发 Demo 起步

Go语言即时通讯系统开发日志day1&#xff0c;主要模拟实现的一个简单的发送消息和接受消息的小demo&#xff0c;因为也才刚学习go语言的语法&#xff0c;对go的json、net/http库了解不多&#xff0c;所以了解了一下go语言的encoding/json库和net/http库&#xff0c;以及websock…...

AAAI-2025 | 中科院无人机导航新突破!FELA:基于细粒度对齐的无人机视觉对话导航

作者&#xff1a;Yifei Su, Dong An, Kehan Chen, Weichen Yu, Baiyang Ning, Yonggen Ling, Yan Huang, Liang Wang 单位&#xff1a;中国科学院大学人工智能学院&#xff0c;中科院自动化研究所模式识别与智能系统实验室&#xff0c;穆罕默德本扎耶德人工智能大学&#xff0…...

中科院无人机导航物流配送的智能变革!LogisticsVLN:基于无人机视觉语言导航的低空终端配送系统

作者&#xff1a;Xinyuan Zhang, Yonglin Tian, Fei Lin, Yue Liu, Jing Ma, Kornlia Sra Szatmry, Fei-Yue Wang 单位&#xff1a;中国科学院大学人工智能学院&#xff0c;中科院自动化研究所多模态人工智能系统国家重点实验室&#xff0c;澳门科技大学创新工程学院工程科学系…...

IP协议、以太网包头及UNIX域套接字

IP协议、以太网包头及UNIX域套接字 IP包头结构 IP协议是互联网的核心协议之一&#xff0c;其包头包含了丰富的信息来控制数据包的传输。让我们详细解析IPv4包头结构&#xff1a; 4位版本号(version)&#xff1a;标识IP协议版本&#xff0c;IPv4值为4 4位首部长度(header len…...

普林斯顿数学三剑客读本分析。

这几天看了普斯林顿数学三剑客&#xff0c;主要看了微积分、概率论前半部分&#xff0c;数学分析看了目录&#xff0c;大体略读了一下。怎么说呢&#xff0c;整体上来看&#xff0c;是很不错的&#xff0c;适合平常性阅读&#xff0c;配套结合国内教材习题来深入还是很不错的。…...

Matlab 模糊pid的液压舵机伺服系统

1、内容简介 Matlab 235-模糊pid的液压舵机伺服系统 可以交流、咨询、答疑 2、内容说明 略 舵机是轮船&#xff0c;客机等机器控制系统的重要组成部分&#xff0c;是客机&#xff0c;战斗机等飞行器操作系统的关键部件&#xff0c;也是一种超高的精度的位置伺服系统&#xff…...

Linux基础命令之目录管理——了解各种操作文件目录的命令,万字教学,超详细!!!(1)

文章目录 前言1、Linux文件系统1.1 核心特点1.2 重要目录结构1.3 文件类型1.4 文件和目录的命名规则1.5 文件与目录的定位方式 2、查看目录或文件的详细信息&#xff08;ls&#xff09;2.1 基本语法2.2 常用操作2.3 高级用法 3、切换目录&#xff08;cd&#xff09;3.1 常用操作…...

中国黄土高原中部XF剖面磁化率和粒度数据

时间分辨率&#xff1a;1000年 < x空间分辨率为&#xff1a;空共享方式&#xff1a;申请获取数据大小&#xff1b;35.75 KB数据时间范围&#xff1a;743-0 ka元数据更新时间&#xff1a;2023-08-15 数据集摘要 该数据集包括中国黄土高原中部XF剖面磁化率和粒度数据。将所有…...

tabs切换#

1、html <el-tabs v-model"tabValue" tab-change"handleTabClick"><el-tab-pane label"集群" name"1"></el-tab-pane><el-tab-pane label"节点" name"2"></el-tab-pane></el-ta…...

免费Office图片音频高效提取利器

软件介绍 今天要给大家介绍一款非常好用的Office文档图片及音频提取工具&#xff0c;它不仅好用&#xff0c;而且完全免费&#xff0c;没有任何广告。 软件概况 这款名为Office File Picture Extractor&#xff08;PPT图片提取&#xff09;的软件&#xff0c;大小仅有4MB。打…...

迁移 Visual Studio Code 设置和扩展到 VSCodium

本文同步发布在个人博客 迁移 Visual Studio Code 设置和扩展到 VSCodium - 萑澈的寒舍https://hs.cnies.org/archives/vscodium-migrateVisual Studio Code&#xff08;以下简称 VS Code&#xff09;无疑是当下最常用的代码编辑器。尽管微软的 VS Code 源代码采用 MIT 协议开…...

1.7 方向导数

&#xff08;底层逻辑演进脉络&#xff09;从"单车道"到"全路网"的导数进化史&#xff1a; 一、偏导数奠基&#xff08;1.6核心&#xff09; 诞生背景&#xff1a;多元函数分析需求 当变量间存在耦合关系时&#xff08;如房价面积单价装修成本&#xff09…...

深入理解目标检测中的关键指标及其计算方法

深入理解目标检测中的关键指标及其计算方法 在目标检测领域&#xff0c;评估模型性能时&#xff0c;我们通常会关注几个关键指标&#xff0c;这些指标帮助我们量化模型的准确性和有效性。本文将详细介绍这些常见指标及其计算方法&#xff0c;帮助你更好地理解和评估目标检测模…...