11.21c++中的函数
练习:
编写mystring类:拥有以下功能:
1.带参、无参构造函数,拷贝构造函数,析构函数
2.编写 append(const mystring r) 为当前字符串尾部,拼接新的字符串r
3.编写 isEqual(const mystring r) 判断当前字符串和 字符串 r是否相等
4.编写swap(另一个对象) 的函数,实现交换2个对象的字符串 mystring str = "hello" mystring ptr = "world" str.swap(ptr) str == "world",ptr == "hello"
5.添加 + 功能:本质就是append str1 = "hello" str2 = "world" str3 = str1 + str2 =="helloworld"
+= 功能
= 深拷贝功能
== 功能
!= 功能
++ 功能,字符串中所有字符的ASCII自增1
[] 下表运算符 operator[](int index) 返回该下标上的字符 str = "hello" cout << str[0] ;终端输出
cout 输出mystring功能
cin 输入mystring功能
代码实现:
#include <iostream>
#include <cstring>
#include <cstdlib>
using namespace std;
class mystring{char *buf;//基本数据类型public:mystring(const char *str);//绑定一个构造函数mymystring();//绑定另外一个构造函数mystring(const mystring& r);~mystring();//绑定一个析构函数void show();//绑定一个显示方法//设置字符串的方法,和获取当前字符串的方法,就是针对buf的set/get接口/* void setbuf(const char *buf){strcpy(this->buf,buf);}*/void setbuf(const mystring& r);//mystring str="hello";//mystring ptr;//1.ptr.setbuf(str);//2.ptr.setbuf("hello");//这里是隐式构造,---/*const char * getbuf(){return buf;}*/const char *getbuf()const;void append(const mystring& r);int isEqual(const mystring& r);void swap(mystring& r);//const char* operator+(const mystring& r);mystring operator+(const mystring& r);mystring& operator+=(const mystring& r);mystring& operator=(const mystring& r);//深拷贝赋值mystring& operator=(const mystring&& r);//浅拷贝赋值bool operator==(const mystring& r);bool operator!=(const mystring& r);mystring& operator++();//字符串中每个字符ASCII码值自增1char operator[](int index);friend ostream& operator<<(ostream& ,const mystring&);//输出友元函数friend istream& operator>>(istream& ,mystring&);//输入友元函数};
mystring::mystring(){cout << "这是一个无参函数" << endl;
}
mystring::mystring(const char *str){int len=strlen(str);buf=(char *)calloc(1,len+1);strcpy(buf,str);
}
mystring::~mystring(){free(buf);buf=NULL;
}
mystring::mystring(const mystring& r){int len=strlen(r.buf);this->buf=(char *)calloc(1,len+1);strcpy(this->buf,r.buf);
}
void mystring::show(){cout << buf << endl;
}
void mystring::setbuf(const mystring& r){free(buf);int len=strlen(r.buf);this->buf=(char *)calloc(1,len+1);strcpy(this->buf,r.buf);
}
const char *mystring::getbuf() const{return buf;
}
void mystring::append(const mystring& r){int len=strlen(this->buf)+strlen(r.buf);//计算需要重新开辟的空间大小char *temp=(char *)calloc(1,len+1);strcpy(temp,this->buf);free(buf);//释放当前buf的空间strcat(temp,r.buf);this->buf=temp;
}
int mystring::isEqual(const mystring& r){return strcmp(this->buf,r.buf);
}
void mystring::swap(mystring& r){char *temp=r.buf;r.buf=this->buf;this->buf=temp;
}
//字符串加法运算符重载
/*const char* mystring::operator+(const mystring& r){int len=strlen(this->buf)+strlen(r.buf);//计算两个字符串长度和char *temp=(char *)calloc(1,len+1);//申请空间用于临时存放两个字符串strcpy(temp,this->buf);strcat(temp,r.buf);//追加return temp;//将更改后*this返回
}*/
mystring mystring::operator+(const mystring& r){int len=strlen(this->buf)+strlen(r.buf);//计算两个字符串长度和char *t=(char *)calloc(1,len+1);//申请空间用于临时存放两个字符串mystring temp=t;strcpy(temp.buf,this->buf);strcat(temp.buf,r.buf);return temp;
}
//字符串+=运算符重载
mystring& mystring::operator+=(const mystring& r){ int len=strlen(this->buf)+strlen(r.buf);//计算两个字符串长度和char * temp=new char[len+1];//char *temp=(char *)calloc(1,len+1);//申请空间用于临时存放两个字符串//strcpy(temp,buf);memcpy(temp,buf,strlen(buf)); free(buf);//释放当前buf的空间strcat(temp,r.buf);//追加this->buf=temp;// cout <<buf;return *this;//将更改后*this返回
}
//字符串深拷贝赋值运算符重载
mystring& mystring::operator=(const mystring& r){int len=strlen(r.buf);//计算要拷贝字符串大小free(this->buf);//先释放当前buf空间char *temp=(char *)calloc(1,len+1);//先开辟堆空间strcpy(temp,r.buf);//将要拷贝内容拷贝到堆区this->buf=temp;//将当前buf指针指向temp指向的堆空间return *this;//返回当前自身
}
//字符串浅拷贝赋值运算符重载
mystring& mystring::operator=(const mystring&& r){this->buf=r.buf;return *this;//返回当前自身
}
//字符串判断是否相等运算符重载
bool mystring::operator==(const mystring& r){return (strcmp(this->buf,r.buf)==0);
}
bool mystring::operator!=(const mystring& r){return (strcmp(this->buf,r.buf)!=0);
}
//字符串每个字符ASCII码值自增1运算符重载
mystring& mystring::operator++(){int i=0;while(*(this->buf+i)){++*(this->buf+i);i++;}return *this;
}
//数组下标引用运算符重载
char mystring::operator[](int index){return *(this->buf+index);
}
//字符串输出运算符重载
ostream& operator<<(ostream& out,const mystring& r){int i=0;while(*(r.buf+i)){out << *(r.buf+i);i++;}return out;//out << r.buf;return out;
}
//字符串输入运算符重载
istream& operator>>(istream& in,mystring& r){in >> r.buf;return in;
}
int main()
{/*mystring ptr;cout << sizeof(ptr) << endl;mystring str="hello world";str.show();str.setbuf("hello");cout << str.getbuf() << endl;ptr.setbuf(str);cout << ptr.getbuf() << endl;mystring str2="你好!";ptr.append(str2);cout << ptr.getbuf() << endl;ptr.append("123");cout << ptr.getbuf() << endl;if(ptr.isEqual("hello你好!123")==0){cout << "ptr==hello你好!123" << endl;}else {cout << "ptr!=123" << endl;}*/mystring s1="hello";mystring s2="world";mystring s3=s1+s2;cout << s3 << endl;mystring s4;s4=s2;cout << s4<< endl;s3 += s1;cout << s3<< endl;//s3 += s2;// s3.append("heoo");//mystring s4;//cout << s3 << endl;cout << (s3==s2) ;cout << (s1!=s2) << endl;++s3;cout << s3 << endl;cout << s3[5]<< endl;// mystring s4;cin >> s4;cout << s4 << endl;return 0;
}
练习2:
封装一个 msg 类
class msg{
private:key_t key;int msgid;long type;
public:struct msgbuf{long type;char text[512]; };
}
要求实现以下功能:
1:构造函数,创建一个消息队列,或者访问该消息队列
2:operator[] :向[]中写入消息的类型,以确定消息向哪个频道中发送 或者 读取哪个频道的消息
3:snd(const string& data) 向消息队列的指定频道中发送消息,注意除了this指针之外,参数必须只能有一个 const string&
4:recv(int size) 从消息队列中读取消息,并返回读取到的消息,注意除了this指针之外,参数必须只能有一个 int size
5:析构函数,删除消息队列
代码实现:
send端:
#include <iostream>
#include <cstring>
#include <cstdlib>
#include <myhead.h>
using namespace std;
class msg{private:key_t key;int msqid;long type;bool isblock;public:struct msgbuf{long type;char text[512];};msg(int msqid1=1,bool isblock=1);//构造函数msg& operator[](const long& type);//[]运算符重载void snd(const string& data);//向消息队列发送消息string recv(long type);//从消息队列中读取消息~msg();//析构函数,删除消息队列
};
msg::msg(int msqid1,bool isblock):msqid(msqid1),isblock(isblock){key=ftok("/",'x');//创建一个key值if(key==-1){perror("ftok");}msqid=msgget(key,IPC_CREAT|0666);//创建一个消息队列,获得消息队列号if(msqid==-1){perror("msqid");}
}
msg& msg::operator[](const long& type){//[]运算符重载this->type=type;//确定要写入或读取的消息队列的序列号return *this;
}
void msg::snd(const string& data){//向消息队列发送消息msgbuf buf={0};buf.type=this->type;strcpy(buf.text,data.data());//cout << buf.text << endl;msgsnd(this->msqid,(void*)&buf,strlen(buf.text),0);//向消息队列中发送消息,阻塞形式发送cout << "消息已发送至消息队列" << endl;
}
string msg::recv(long type){//从消息队列中读取消息//char *buf=new char[size];//char buf[size]={0};msgbuf buf={0};if(isblock==1){msgrcv(this->msqid,(void*)&buf,sizeof(buf.text),type,0);//从消息队列中读取消息}else{msgrcv(this->msqid,(void *)&buf,sizeof(buf.text),type,IPC_NOWAIT);//非阻塞}// cout << buf.text << endl;//string temp=buf.text;//c风格转c++//return temp;return buf.text;
}
msg::~msg(){//析构函数,删除消息队列msgctl(this->msqid,IPC_RMID,NULL);//删除消息队列
}
int main(int argc,const char ** argv)
{if(argc!=2){cout << "请输入消息类型号" << endl;return -1;}int type=atoi(argv[1]);msg msg1(1);while(1){cout << "请输入消息内容:";string data;cin >> data;msg1[type].snd(data);//发送数据}return 0;
}
recv端:
#include <iostream>
#include <cstring>
#include <cstdlib>
#include <myhead.h>
using namespace std;
class msg{private:key_t key;int msqid;long type;bool isblock;public:struct msgbuf{long type;char text[512];};msg(int msqid1,bool isblock);//构造函数msg& operator[](const long& type);//[]运算符重载void snd(const string& data);//向消息队列发送消息string recv(long type);//从消息队列中读取消息~msg();//析构函数,删除消息队列
};
msg::msg(int msqid1=1,bool isblock=1):msqid(msqid1),isblock(isblock){key=ftok("/",'x');//创建一个key值if(key==-1){perror("ftok");}msqid=msgget(key,IPC_CREAT|0666);//创建一个消息队列,获得消息队列号if(msqid==-1){perror("msqid");}
}
msg& msg::operator[](const long& type){//[]运算符重载this->type=type;//确定要写入或读取的消息队列的序列号return *this;
}
void msg::snd(const string& data){//向消息队列发送消息msgbuf buf={0};buf.type=this->type;strcpy(buf.text,data.data());//cout << buf.text << endl;msgsnd(this->msqid,(void*)&buf,strlen(buf.text),0);//向消息队列中发送消息,阻塞形式发送cout << "消息已发送至消息队列" << endl;
}
string msg::recv(long type){//从消息队列中读取消息//char *buf=new char[size];//char buf[size]={0};msgbuf buf={0};if(isblock==1){msgrcv(this->msqid,(void*)&buf,sizeof(buf.text),type,0);//从消息队列中读取消息}else{msgrcv(this->msqid,(void *)&buf,sizeof(buf.text),type,IPC_NOWAIT);//非阻塞}// cout << buf.text << endl;//string temp=buf.text;//c风格转c++//return temp;return buf.text;
}
msg::~msg(){//析构函数,删除消息队列msgctl(this->msqid,IPC_RMID,NULL);//删除消息队列
}
int main(int argc,const char ** argv)
{msg msg1(1);while(1){cout << "请输入获取消息类型号";int type;cin >> type;cout << msg1.recv(type) << endl;}return 0;
}
相关文章:
11.21c++中的函数
练习: 编写mystring类:拥有以下功能: 1.带参、无参构造函数,拷贝构造函数,析构函数 2.编写 append(const mystring r) 为当前字符串尾部,拼接新的字符串r 3.编写 isEqual(const mystring r) 判断当前字符串…...
Rook入门:打造云原生Ceph存储的全面学习路径(下)
文章目录 六.Rook部署云原生CephFS文件系统6.1 部署cephfs storageclass6.2 创建容器所需cephfs文件系统6.3创建容器pod使用rook-cephfs提供pvc6.4 查看pod是否使用rook-cephfs 七.Ceph Dashboard界面7.1 启用dashboard开关7.2 ceph-dashboard配置外部访问7.3 Dashboard web ad…...
UI控件使用说明
文章目录 一、控件的公共属性二、常用控件的私有属性三、控件的显示与隐藏 一、控件的公共属性 struct element {u32 highlight: 1; //高亮标志u32 state: 3; //内核记录控件的状态u32 ref: 5; //内核计数值u32 prj: 3; //工程序号u32 hide_action: 1; //HIDE_WI…...
Java面向对象.抽象
目录 1.object类 一、Object类的地位 所有类的父类 2.抽象类 一、定义与声明 抽象类的概念 二、抽象方法 抽象方法的特点 三、继承抽象类 子类的责任 3.抽象方法基础理念 1.抽象方法的特征 2.将abstaract加在方法的前面,该类无法被继承 1.首先࿰…...
uniapp在小程序连接webScoket实现余额支付
webScoket文档:uni.connectSocket(OBJECT) | uni-app官网 /plugins/event.js const Dep function() {this.Evens Object.create(null); } class Event {constructor({dep new Dep()} {}) {if (dep.constructor Object && Object.keys(dep).length 0…...
【C语言】连接陷阱探秘(4):检查外部类型
目录 一、外部类型概述 1.1. 外部类型的重要性 1.2. 外部类型在C语言中的使用 1.3. 注意事项 二、常见的外部类型陷阱 2.1. 结构体和联合体的大小不匹配 2.1.1. 示例代码 2.1.2. 正确的做法 2.2. 枚举类型的值不匹配 2.3. 函数签名不一致 2.3.1. 函数签名不一致的问…...
Hexo博客在多个设备同步
title: ‘Hexo博客在多个设备同步’ date: 2024-11-28 19:08:08 categories: Hexo教程 cover: /img/cover4.jpg description: ‘实现Hexo博客在不同的设备上都可以使用和上传’ 博客链接1 :Hexo搭建博客的多终端同步问题 博客链接2:Hexo博客多台电脑设备同步管理 …...
Pytorch使用手册-使用 TensorBoard 可视化模型、数据和训练过程(专题十)
在 60 分钟速成课程中,我们展示了如何加载数据,将其传递通过我们定义的作为 nn.Module 子类的模型,训练该模型并在测试数据上进行测试。为了查看发生了什么,我们在模型训练过程中打印一些统计信息,以便了解训练是否进展顺利。然而,我们可以做得更好:PyTorch 与 TensorBo…...
Linux网络——NAT/代理服务器
一.NAT技术 1.NAT IP转换 之前我们讨论了, IPv4 协议中, IP 地址数量不充足的问题,NAT 技术就是当前解决 IP 地址不够用的主要手段, 是路由器的一个重要功能。 NAT 能够将私有 IP 对外通信时转为全局 IP. 也就是一种将私有 IP 和全局IP 相互转化的技术方法: 很…...
使用ffmpeg命令实现视频文件间隔提取帧图片
将视频按每隔五秒从视频中提取一张图片 使用 ffmpeg 工具,通过设置 -vf(视频过滤器)和 -vsync 选项 命令格式 ffmpeg -i input_video.mp4 -vf "fps1/5" output_%03d.png 解释: -i input_video.mp4:指定输…...
Elasticsearch实战:从搜索到数据分析的全面应用指南
Elasticsearch(简称 ES)是一个强大的分布式搜索引擎和分析工具,它能够快速处理海量数据,并提供全文检索、结构化搜索、数据分析等功能。在现代系统中,它不仅是搜索的核心组件,也是数据分析的有力工具。 本文…...
【CSS in Depth 2 精译_064】10.3 CSS 中的容器查询相对单位 + 10.4 CSS 容器样式查询 + 10.5 本章小结
当前内容所在位置(可进入专栏查看其他译好的章节内容) 【第十章 CSS 容器查询】 ✔️ 10.1 容器查询的一个简单示例 10.1.1 容器尺寸查询的用法 10.2 深入理解容器 10.2.1 容器的类型10.2.2 容器的名称10.2.3 容器与模块化 CSS 10.3 与容器相关的单位 ✔…...
滑动窗口讲解(c基础)
滑动窗口的基本概念 滑动窗口是一种高效处理线性数据结构(如数组、字符串)的算法技巧。它就像是一个可移动的 “框”,框住数据结构中的一部分元素,通过不断地移动这个 “框”(即滑动窗口),对框内…...
Flink的双流join理解
如何保证Flink双流Join准确性和及时性、除了窗口join还存在哪些实现方式、究竟如何回答才能完全打动面试官呢。。你将在文中找到答案。 1 引子 1.1 数据库SQL中的JOIN 我们先来看看数据库SQL中的JOIN操作。如下所示的订单查询SQL,通过将订单表的id和订单详情表ord…...
springboot341+vue校园求职招聘系统设计和实现pf(论文+源码)_kaic
毕 业 设 计(论 文) 校园求职招聘系统设计与实现 摘 要 传统办法管理信息首先需要花费的时间比较多,其次数据出错率比较高,而且对错误的数据进行更改也比较困难,最后,检索数据费事费力。因此,…...
dmdba用户资源限制ulimit -a 部分配置未生效
dmdba用户资源限制ulimit -a 部分配置未生效 1 环境介绍2 数据库实例日志报错2.1 mpp01 实例日志报错2.2 mpp02 实例日志报错 3 mpp02 服务器资源限制情况4 关闭SELinux 问题解决4.1 临时关闭 SELinux4.2 永久关闭 SELinux 5 达梦数据库学习使用列表 1 环境介绍 Cpu x86 Os Ce…...
kafka-clients之CommonClientConfigs
CommonClientConfigs是kafka-clients库中一个包含Kafka通用配置项的类,它定义了Kafka Producer、Consumer、Admin等客户端共享的配置。以下是其中的主要配置项及其含义: 1. bootstrap.servers 类型:List<String>说明:Kafk…...
支持多种快充协议的取电芯片,支持最大功率140W
前言 在快节奏的现代生活中,人们对于小家电的依赖日益加深,而随之而来的充电问题也日益凸显。传统的充电方式往往受限于电压、电流的限制,难以满足不同设备对电力的多样化需求。而PD快充协议的诞生,则为这一难题提供了全新的解决…...
《Vue零基础入门教程》第十四课:列表渲染
往期内容 《Vue零基础入门教程》第六课:基本选项 《Vue零基础入门教程》第八课:模板语法 《Vue零基础入门教程》第九课:插值语法细节 《Vue零基础入门教程》第十课:属性绑定指令 《Vue零基础入门教程》第十一课:事…...
Linux系统 进程
Linux系统 进程 进程私有地址空间用户模式和内核模式上下文切换 进程控制进程控制函数获取进程 ID创建和终止进程回收子进程让进程休眠加载并运行程序 系统调用错误处理利用fork和execve运行程序 进程 异常是允许操作系统内核提供进程(process)概念的基…...
文件具有selinux标签如下 system_u:object_r:httpd_sys_content:s0:c3 解释一下每段的含义?
文件具有selinux标签如下 system_u:object_r:httpd_sys_content:s0:c3 解释一下每段的含义? SELinux标签通常由四个部分组成,分别用于定义文件的上下文、访问控制策略以及系统安全性。针对你提供的标签:system_u:object_r:httpd_sys_content:s0:c3&…...
对偶分解算法详解及其Python实现
目录 对偶分解算法详解及其实现第一部分:对偶分解算法概述1.1 什么是对偶分解算法1.2 应用场景1.3 算法优点第二部分:对偶分解算法的数学推导2.1 问题形式2.2 对偶问题2.3 算法框架第三部分:对偶分解算法的Python实现第四部分:案例1——支持向量机中的对偶分解(策略模式)…...
Linux之web服务器
一、web 服务器简介 1.www 简介 www 是全球信息广播的意思,上网即使用 www 来查询信息,它结合多种多媒体,通过超链接以 Internet 传递信息。上网时,网站提供数据,客户端用浏览器解析数据。 www 所用协议为 HTTP&…...
十二、Pod的扩缩容-手动/自动-HPA
在实际生产系统中,经常会遇到某个服务需要扩容的场景,也可能会遇到由于资源紧张或者工作负载降低而需要减少服务实例数量的场景。此时可以利用Deployment/RC的Scale机制来完成这些工作。 Kubernetes对Pod的扩缩容操作提供了手动和自动两种模式,手动模式通过运行kubectl sca…...
RabbitMQ高级特性:TTL、死信队列与延迟队列
RabbitMQ高级特性:TTL、死信队列与延迟队列 RabbitMQ作为一款开源的消息代理软件,广泛应用于分布式系统中,用于实现消息的异步传递和系统的解耦。其强大的高级特性,包括TTL(Time-To-Live)、死信队列&#…...
UPLOAD LABS | UPLOAD LABS 靶场初识
关注这个靶场的其它相关笔记:UPLOAD LABS —— 靶场笔记合集-CSDN博客 0x01:UPLOAD LABS 靶场简介 UPLOAD LABS 靶场是一个专门用于学习文件上传漏洞攻击和防御的靶场。它提供了一系列文件上传漏洞的实验环境,用于帮助用户了解文件上传漏洞的…...
杰发科技AC7803——不同晶振频率时钟的配置
计算公式 PLL_POSDIV [2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48, 50, 52, 54, 56, 58, 60, 62] PLL_PREDIV_1 1 2 4 USE_XTAL 24M SYSCLK_FREQ 64M SYSCLK_DIVIDER 1 VCO USE_XTAL*…...
cocos creator 触摸事件官方案例
cocos creator 触摸事件官方案例 1、官方示例; 2、对官方示例的总结: (1)介绍了鼠标事件和触摸事件的类型,这里主要关注的是在移动端和PC端都可以触发的触摸事件。 (2)节点事件的派发&#…...
浅谈人工智能之基于容器云进行图生视频大模型搭建
浅谈人工智能之基于容器云进行图生视频大模型搭建 根据之前我们所讲过的内容: 文生图 文生视频 我们继续讲解图生视频大模型搭建。 引言 随着深度学习技术的不断发展,图生视频(image-to-video)大模型成为了计算机视觉和自然语言…...
【爬虫框架:feapder,管理系统 feaplat】
github:https://github.com/Boris-code/feapder 爬虫管理系统 feaplat:http://feapder.com/#/feapder_platform/feaplat 爬虫在线工具库 :http://www.spidertools.cn :https://www.kgtools.cn/1、feapder 简介 对于学习 Python…...
txt地图格式处理
1、txt地图格式 [属性描述] 坐标系2000国家大地坐标系 几度分带3 投影类型高斯克吕格 计量单位米 带号38 精度0.001 转换参数,,,,,, [地块坐标] 5,475.888,1,测试地块1,面,J50G077061,公路用地,地下, J1,1,113.22222222222222,23.129111721551794 J2,1,113.2722314…...
【0346】Postgres内核 Startup Process 通过 signal 与 postmaster 交互实现 (5)
1. Startup Process 进程 postmaster 初始化过程中, 在进入 ServerLoop() 函数之前,会先通过调用 StartChildProcess() 函数来开启辅助进程,这些进程的目的主要用来完成数据库的 XLOG 相关处理。 如: 核实 pg_wal 和 pg_wal/archive_status 文件是否存在Postgres先前是否发…...
蜜罐攻击网络渗透工具推荐
推荐一批侧重蜜罐攻击的网络渗透测试工具: Glastopf – 主要用于监测网络安全事件的工具。以蜜罐形式可以模拟数千个漏洞,以收集针对Web应用程序的攻击数据。 Kippo – 中交互性的SSH 蜜罐攻击器,用于记录暴力破解攻击。 Kojoney – 一种低…...
26页PDF | 数据中台能力框架及评估体系解读(限免下载)
一、前言 这份报告详细解读了数据中台的发展历程、核心概念、能力框架及成熟度评估体系。它从阿里巴巴的“大中台,小前台”战略出发,探讨了数据中台如何通过整合企业内部的数据资源和能力,加速业务迭代、降低成本,并推动业务增长…...
AI开发 - GPT之魂 用Python 演示chatGPT的自注意力机制 - 机器学习
自注意力机制(Self-Attention)就是让模型在处理每个词时,学会“关注重点”,而不是平均地对每个词一视同仁。这种机制让 GPT 能更聪明地理解句子的上下文和语义之间的关系。 自注意力机制是 GPT 的核心,它帮助模型在理解…...
Vue CLI 提供了哪些功能
前言 Vue CLI 为开发者提供了一整套强大且灵活的工具链,极大地提升了开发效率和代码质量。无论是创建项目、管理依赖、配置环境,还是进行测试和优化,Vue CLI 都能为你提供全面的支持。本文将深入探讨 Vue CLI 所提供的各种功能,并…...
网络爬虫的原理
网络爬虫就是根据网络,把上面的相关信息比如源代码以字符串的形式爬取下来,并且涉及到网站下的一系列网站。 DNS域名解析服务器可以通过ping域名/ip来测试是否连通,dns可以记录网站访问次数,从而评估出网站的使用权重,…...
02_Django路由Router
二、Django路由Router 在实际开发过程中,一个Django 项目会包含很多的 app ,这时候如果我们只在主路由里进行配置就会显得杂乱无章,所以通常会在每个 app 里,创建各自的urls.py路由模块,然后从根路由出发,…...
计算属性和监听属性
Vue.js 中的计算属性与监听属性 Vue.js 是一个流行的前端框架,它提供了许多强大的特性来简化 Web 应用的开发。其中,计算属性(Computed Properties)和监听属性(Watchers)是两个非常重要的概念,…...
JAVA项目-------医院挂号系统
1,项目目的 1、科室管理:新增科室,删除科室(如果有医生在,则不能删除该科室),修改科室。 2、医生管理:录入医生信息,以及科室信息。修改医生信息(主要是修改…...
《Learn Three.js》学习(3)光源
前言: WebGL本身不支持光源,不使用three.js,则需使用着色程序来模拟光源。 学习大纲: Three.js中的光源 特定光源的使用时机 如何调整和配置所有光源的行为 如何创建镜头光晕 光源表 基础光源:THRER.AmbientLight、THERE.Point…...
npm error code ETIMEDOUT 简单排查
今天突然没到一个仓库的ius问题。改完之后想发布npm包 出现下面的场景 npm addUser npm adduser npm notice Log in on https://registry.npmjs.org/ Create your account at: https://www.npmjs.com/login?next/login/cli/12596c8b-ba4a-4763-8a97-215087d380c4 Press ENTER…...
Flink高可用配置(HA)
从Flink架构中我们可以看到,JobManager这个组件非常重要,是中心协调器,负责任务调度和资源管理。默认情况下,每个Flink集群只有一个JobManager实例。这会产生单点故障(SPOF):如果JobManager崩溃,则无法提交新程序,正在运行的程序也会失败。通过JobManager的高可用性,…...
VITE+VUE3+TS环境搭建
前言(与搭建项目无关): 可以安装一个node管理工具,比如nvm,这样可以顺畅的切换vue2和vue3项目,以免出现项目跑不起来的窘境。我使用的nvm,当前node 22.11.0 目录 搭建项目 添加状态管理库&…...
windows上安装使用kubectl访问容器内服务
以云服务商提供的容器服务为例: 登录云服务,选择容器服务选择集群管理,选择集群概览点击kubeconfig按钮,进入说明页面官网下载kubectl 1、到 Kubernetes 版本变更 页面,查看 kubernetes 已发行版本,确认需要安装的 kubectl 版本。 2、kubectl 版本和集群的 kubernetes 版…...
软件工程第14章小测
单项选择题 第1题 定义类A和B Class A{ public B methodA(){...} } Class B{ public void methodB(){...} } 下面代码中的耦合是()。 Class Client{ public static void main(String args){ A oa new A(); a.methodA().methodB(); } } …...
HarmonyOS4+NEXT星河版入门与项目实战(23)------组件转场动画
文章目录 1、控件图解2、案例实现1、代码实现2、代码解释3、实现效果4、总结1、控件图解 这里我们用一张完整的图来汇整 组件转场动画的用法格式、属性和事件,如下所示: 2、案例实现 这里我们对上一节小鱼游戏进行改造,让小鱼在游戏开始的时候增加一个转场动画,让小鱼自…...
word转pdf
在线xml格式化: 在线 XML 格式化 | 菜鸟工具 Java使用FreeMarker自动生成Word文档(带图片和表单) Java使用FreeMarker自动生成Word文档(带图片和表单)_freemarker word模板-CSDN博客 将word转pdf JAVA 使用aspose…...
@bytemd/vue掘金markdown插件预览内容有误
vue项目使用bytemd/vue 来预览字符串格式的markdown内容,总会多出如图的一段代码, 请问有没有大佬知道为什么? 很急,求教!!!!!...
产品知识培训全面指南
在当今竞争激烈的市场环境中,产品知识已成为企业成功的关键因素。特别是对于软件即服务(SaaS)公司而言,产品的复杂性要求团队对产品有深入的了解,以便有效地与潜在客户沟通并促成交易。本指南将深入探讨产品知识培训的…...