行为型模式
模板方法模式
#include<iostream>
#include<string>
using namespace std;/*案例:写简历内容:最近有个招聘会,可以带上简历去应聘了。但是,其中有一家公司不接受简历,而是给应聘者发了一张简历表,上面有基本信息、教育背景、工作经历等栏,让应聘者按照要求填写完整。每个人拿到这份表格后,就开始填写。如果用程序实现这个过程,该如何做呢?一种方案就是用模板方法模式:定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。
*/// 简历(抽象)
class Resume
{
protected:virtual void writeBasicInfo() = 0;virtual void writeEducation() = 0;virtual void writeWorkExperience() = 0;public:// 模板方法核心void FillResume(){writeBasicInfo();writeEducation();writeWorkExperience();}virtual ~Resume() {}; // 析构函数
};// 简历A(具体)
class ResumeA : public Resume
{
protected:void writeBasicInfo(){cout << "简历A: 基本信息, ";}void writeEducation(){cout << "教育背景, ";}void writeWorkExperience(){cout << "工作经验 (越详细越好)." << endl;}
};// 简历B(具体)
class ResumeB : public Resume
{
protected:void writeBasicInfo(){cout << "简历B: 基本信息, ";}void writeEducation(){cout << "教育背景, ";}void writeWorkExperience(){cout << "工作经验 (请简要概况)." << endl;}
};int main()
{// 写简历AResume* r1 = new ResumeA;r1->FillResume();// 写简历BResume* r2 = new ResumeB;r2->FillResume();delete r1;delete r2;system("pause");return 0;
}
命令模式
#include<iostream>
#include<string>
#include<vector>
using namespace std;/*案例:客人点餐1. 客人发出命令,让厨师做饭2. 客人发出命令,让厨师取消做饭3. 客人发出命令,让厨师煮面4. 客人发出命令,让厨师取消煮面
*/// 厨师(具体)
class Chef
{
public:// 做饭void makeMeals(){cout << "正在做饭中..." << endl;}// 取消做饭void cancelMeals(){cout << "已取消做饭!" << endl;}// 煮面void makeNoodles(){cout << "正在煮面中..." << endl;}// 取消煮面void cancelNoodles(){cout << "已取消煮面!" << endl;}
};// 命令(抽象)
class Command
{
protected:Chef* chef; // 用来保存一个厨师public:virtual void executeCommand() = 0; // 执行命令virtual void cancelCommand() = 0; // 取消命令virtual ~Command() {};
};// 关于做饭的命令(具体)
class AboutMealsCommand : Command
{
public:// 构造函数,列表初始化:每构造一条命令,都要对应着一个厨师,让他执行这个命令AboutMealsCommand(Chef* c){this->chef = c;}// 执行命令void executeCommand(){chef->makeMeals(); // 让厨师做饭}// 取消命令void cancelCommand(){chef->cancelMeals(); // 让厨师取消做饭}
};// 关于煮面的命令(具体)
class AboutNoodlesCommand : Command
{
public:// 构造函数,列表初始化:每构造一条命令,都要对应着一个厨师,让他执行这个命令AboutNoodlesCommand(Chef* c){this->chef = c;}// 执行命令void executeCommand(){chef->makeNoodles(); // 让厨师煮面}// 取消命令void cancelCommand(){chef->cancelNoodles(); // 让厨师取消煮面}
};// 客人(具体)
class Customer
{
private:vector<Command*> commandQueue; // 命令队列,用来存放这个顾客的一系列命令public:// 添加命令void add(Command* command){commandQueue.push_back(command); // 将当前这一条的下单命令添加到命令队列中cout << "客人发出了一条命令" << endl;}// 移除命令void remove(Command* command){for (auto iter = commandQueue.begin(); iter != commandQueue.end(); iter++){// 将当前命令从命令队列中删除if ((*iter) == command){commandQueue.erase(iter);break;}}cout << "客人取消了一条命令" << endl;}// 确认订单void confirm(){for (auto command : commandQueue){command->executeCommand();}commandQueue.clear();}// 取消订单void cancel(){for (auto command : commandQueue){command->cancelCommand();}commandQueue.clear();}
};int main()
{// 招牌一个厨师Chef* chef = new Chef();// 制定好跟"做饭"相关的"命令/规则",具体包括,做饭与取消做饭两个功能Command* mealsCommand = (Command*) new AboutMealsCommand(chef);// 制定好跟"煮面"相关的"命令/规则",具体包括,做饭与取消做饭两个功能Command* noodlesCommand = (Command*) new AboutNoodlesCommand(chef);// 来了一位顾客Customer* customer = new Customer();// 顾客下达一系列的命令,想要点单customer->add(mealsCommand);customer->add(noodlesCommand);customer->remove(mealsCommand);// 顾客确认订单customer->confirm();// 顾客下达了一系列的命令,想要取消点单customer->add(noodlesCommand);// 顾客取消了订单customer->cancel();delete customer;delete chef;delete mealsCommand;delete noodlesCommand;system("pause");return 0;
}
责任链模式
#include<iostream>
#include<string>
using namespace std;/*案例:员工请假内容:当员工申请请假1天以内,由组长批准即可(处理者为组长)当员工申请请假超过3天,需要由经理批准(处理者为经理)当员工申请请假超过7天,需要由老板批准(处理者为老板)
*/// 处理者(抽象)
class Handler
{
protected:Handler* nextHanler; // 维护下一个处理者的指针。万一当前处理者没有权力处理时,就交给下一个处理者进行处理。public:// 构造函数,列表初始化Handler() : nextHanler(nullptr) { cout << "初始化成功!" << endl; }// 设置下一个处理者是谁(如果不设置,就默认没有关联)void setNextHandler(Handler* next){this->nextHanler = next;}// 具体的处理请求virtual void handleRequest(int days) = 0;virtual ~Handler() {};
};// 组长(具体)
class GroupLeader : public Handler
{
public:void handleRequest(int days){cout << "组长回复:";if (days <= 1){cout << "同意请假!" << endl;}else{cout << "请假太久了,你去找经理请假。" << endl;if (this->nextHanler != nullptr) nextHanler->handleRequest(days);}}
};// 经理(具体)
class Manager : public Handler
{
public:void handleRequest(int days){cout << "经理回复:";if (days <= 3){cout << "同意请假!" << endl;}else{cout << "请假太久了,你去找老板请假。" << endl;if (this->nextHanler != nullptr) nextHanler->handleRequest(days);}}
};// 老板(具体)
class Boss : public Handler
{
public:void handleRequest(int days){cout << "老板回复:";if (days <= 7){cout << "同意请假!" << endl;}else{cout << "请假太久了,不行!" << endl;if (this->nextHanler != nullptr) nextHanler->handleRequest(days);}}
};int main()
{// 实例化一个组长、一个经理、一个老板Handler* groupLeader = new GroupLeader;Handler* manager = new Manager;Handler* boss = new Boss;// 组装链groupLeader->setNextHandler(manager);manager->setNextHandler(boss);// 请假int days;// ------------------days = 1;cout << "想要请假" << days << "天" << endl;groupLeader->handleRequest(days);// ------------------days = 3;cout << "想要请假" << days << "天" << endl;groupLeader->handleRequest(days);// ------------------days = 7;cout << "想要请假" << days << "天" << endl;groupLeader->handleRequest(days);// ------------------days = 30;cout << "想要请假" << days << "天" << endl;groupLeader->handleRequest(days);delete groupLeader;delete manager;delete boss;system("pause");return 0;
}
策略模式
#include<iostream>
#include<string>
using namespace std;// 策略(抽象)
class Strategy
{
public:virtual int execute(int left, int right) = 0;
};// 加法策略(具体)
class Add : public Strategy
{
public:int execute(int left, int right){return left + right;}
};// 减法策略(具体)
class Sub : public Strategy
{
public:int execute(int left, int right){return left - right;}
};// 乘法策略(具体)
class Mul : public Strategy
{
public:int execute(int left, int right){return left * right;}
};// 除法策略(具体)
class Div : public Strategy
{
public:int execute(int left, int right){if (right == 0){cout << "除数不能为零!" << endl;return 0;}return left / right;}
};// 策略容器(具体)
class Container
{
private:Strategy* strategy; // 维护一个策略public:// 设置策略void setStrategy(Strategy* s){this->strategy = s;}// 执行某策略的功能int executeStrategy(int left, int right){return strategy->execute(left, right);}
};int main()
{// 实例化一个策略容器Container* container = new Container;int left, right;char symbol;Strategy* strategy = nullptr;while (true){cout << "(Count) >>> ";// 获取用户输入cin >> left >> symbol >> right;// 根据用户选择,向策略容器里面添加合适的策略switch (symbol){case '+':strategy = new Add;container->setStrategy(strategy);break;case '-':strategy = new Sub;container->setStrategy(strategy);break;case '*':strategy = new Mul;container->setStrategy(strategy);break;case '/':strategy = new Div;container->setStrategy(strategy);break;}// 执行策略容器里面的策略cout << container->executeStrategy(left, right) << endl;delete strategy;}system("pause");return 0;
}
观察者模式
#include<iostream>
#include<string>
#include<vector>
using namespace std;/*案例:员工摸鱼————通过观察老板是否出现,员工做出不同的反应(摸鱼或努力工作)
*/// 声明一个老板类
class Boss;// 实现一个员工类(具体)
class Employee
{
private:string m_name; // 维护员工自己的姓名public:// 构造函数,初始化列表Employee(string name) : m_name(name) {};// 更新"老板是否来了"的动作消息,做出相应的反应void updateInfomation(string info){cout << m_name << "收到情报:" << info << endl;if (info == "老板来了"){cout << "--> 开启工作模式" << endl;}else if (info == "老板走了"){cout << "--> 开启摸鱼模式" << endl;}}
};// 实现一个老板类(具体)
class Boss
{
private:string information; // 保存一个老板的动作消息vector<Employee*> employeeContainer; // 员工容器,用来存放老板手下的所有员工public:// 添加员工void addEmployee(Employee* employee){this->employeeContainer.push_back(employee);}// 老板设置自己的动作消息void setActionInfo(string info){this->information = info; // 老板设置自己的动作消息notify(); // 发出通知(老板更新了自己的动作)}// 发出通知void notify(){for (auto v : employeeContainer){v->updateInfomation(this->information); // 更新员工的消息,从而实现监控(观测)老板}}
};int main()
{// 实例化一个老板(被观察者)Boss* boss = new Boss;// 实例化一些员工(观察者)Employee* emp1 = new Employee("小明");Employee* emp2 = new Employee("老张");Employee* emp3 = new Employee("老李");// 让老板去招聘上面这些员工(建立关联)boss->addEmployee(emp1);boss->addEmployee(emp2);boss->addEmployee(emp3);// 老板设置动作消息// 当老板设置动作消息成功后,将会自动发出通知,更新员工的消息,员工根据消息内容选择是否摸鱼boss->setActionInfo("老板来了");boss->setActionInfo("老板走了");delete boss;delete emp1;delete emp2;delete emp3;system("pause");return 0;
}
访问者模式
#include<iostream>
#include<string>
using namespace std;/*案例:这里实现一个不同职业的人去医院和餐厅的例子来说明访问者模式在小镇上有一个医院和一个餐厅,每天都会有不同的人访问这两个地方,由于访问者不同到这两个地方要做的事也有区别。医生去医院是为了工作给病人看病,厨师去医院是为了检查身体,医生去餐厅是为了吃饭,厨师去餐厅是为了工作给客人烹饪菜肴。
*/// 声明"地方类"
class Place;// 访问者(抽象访问者)
class Visitor
{
public:virtual void visitHospital(Place* place) = 0;virtual void visitResteraunt(Place* place) = 0;virtual ~Visitor() {};
};// 地方(抽象地方)
class Place
{
protected:string placeName; // 保存地方的名字public:string getName() // 获得地方的名字{return this->placeName;}// 让这个地方接收访问者virtual void accept(Visitor* visitor) = 0;virtual ~Place() {}
};// 医院(具体地方)
class Hospital : public Place
{
public:Hospital(string name){this->placeName = name;}// 接受访问者的访问,访问者将访问医院内部void accept(Visitor* visitor){visitor->visitHospital(this); // 访问者访问医院内部}
};// 餐馆(具体地方)
class Resteraunt : public Place
{
public:Resteraunt(string name){this->placeName = name;}// 接受访问者的访问,访问者将访问餐馆内部void accept(Visitor* visitor){visitor->visitResteraunt(this); // 访问者访问餐馆内部}
};// 医生(具体访问者)
class Doctor : public Visitor
{
public:void visitHospital(Place* place){cout << "医生访问" << place->getName() << "是为了治疗病人" << endl;}void visitResteraunt(Place* place){cout << "医生访问" << place->getName() << "是为了吃一顿饭" << endl;}
};// 厨师(具体访问者)
class Chef : public Visitor
{
public:void visitHospital(Place* place){cout << "厨师访问" << place->getName() << "是为了治病" << endl;}void visitResteraunt(Place* place){cout << "厨师访问" << place->getName() << "是为了做菜" << endl;}
};int main()
{// 实例化一个医院Place* hospital = new Hospital("丽江市第一人名医院");// 实例化一个餐馆Place* resteraunt = new Resteraunt("幸福餐馆");// 实例化一个医生(访问者)Visitor* doctor = new Doctor();// 实例化一个厨师(访问者)Visitor* chef = new Chef();// 医生访问医院(医院接收医生的拜访)hospital->accept(doctor);// 医生访问餐馆(餐馆接收医生的拜访)resteraunt->accept(doctor);// 厨师访问医院(医院接收厨师的拜访)hospital->accept(chef);// 厨师访问餐馆(餐馆接收厨师的拜访)resteraunt->accept(chef);delete hospital;delete resteraunt;delete doctor;delete chef;system("pause");return 0;
}
中介者模式
#include<iostream>
#include<string>
using namespace std;class Role; // 声明角色// 中介者(抽象中介者)
class Mediator
{
protected:Role* hr;Role* student;public:void set_HR(Role* hr){this->hr = hr;}void set_Student(Role* student){this->student = student;}virtual void match() = 0;
};// 角色(抽象角色)
class Role
{
protected:string name; // 角色名字string offer; // offer的岗位或内容Mediator* mediator; // 保存一个中介,该角色需要求助"中介"public:string getName(){return this->name;}string getOffer(){return this->offer;}// 进行配对virtual void match(Role* role) = 0;
};// 学生(具体角色)
class Student : public Role
{
public:Student(string name, string offer, Mediator* mediator){this->name = name;this->offer = offer;this->mediator = mediator;}void match(Role* role){mediator->set_HR(role);mediator->set_Student(this);mediator->match();}
};// 人事HR(具体角色)
class HR : public Role
{
public:HR(string name, string offer, Mediator* mediator){this->name = name;this->offer = offer;this->mediator = mediator;}void match(Role* role){mediator->set_HR(this);mediator->set_Student(role);mediator->match();}
};// 猎聘App(具体中介者)
class LiepinApp : public Mediator
{
public:void match(){cout << "------------------" << endl;cout << hr->getName() << "提供岗位:" << hr->getOffer() << endl;cout << student->getName() << "需求职位:" << student->getOffer() << endl;if (hr->getOffer() == student->getOffer()){cout << "配对成功!" << endl;}else{cout << "配对失败!" << endl;}cout << "------------------" << endl;}
};int main()
{// 实例化 中介 ———— 猎聘AppMediator* app1 = new LiepinApp;// 实例化 人事HRRole* hr = new HR("花儿姐", "软件工程师", app1); // 使用 app1app1->set_HR(hr); // 把自己的招聘信息挂到网上// 实例化 学生Role* student = new Student("小明", "机械工程师", app1); // 使用 app1app1->set_Student(student); // 把自己的求职信息挂到网上// 让 app1 进行匹配 app1->match();delete app1;delete hr;delete student;system("pause");return 0;
}
备忘录模式
// 待补充
状态模式
// 待补充
迭代器模式
// 待补充
解释器模式
// 待补充
相关文章:
行为型模式
模板方法模式 #include<iostream> #include<string> using namespace std;/*案例:写简历内容:最近有个招聘会,可以带上简历去应聘了。但是,其中有一家公司不接受简历,而是给应聘者发了一张简历表…...

AI大模型日报#0515:Google I/O大会、 Ilya官宣离职、腾讯混元文生图大模型开源
导读:欢迎阅读《AI大模型日报》,内容基于Python爬虫和LLM自动生成。目前采用“文心一言”(ERNIE 4.0)、“零一万物”(Yi-34B)生成了今日要点以及每条资讯的摘要。 《AI大模型日报》今日要点:谷歌…...
计算机网络-负载均衡算法
计算机网络中的负载均衡算法是决定如何将请求分发到各个服务器的关键。目前负载均衡算法主要分为静态负载均衡算法和动态负载均衡算法,具体包括以下几种: 静态负载均衡算法: 1.轮询法(Round Robin):按照顺…...

Excel Module: Iteration #1 EasyExcel生成下拉列表模版时传入动态参数查询下拉数据
系列文章 EasyExcel生成带下拉列表或多级级联列表的Excel模版自定义校验导入数据(修订) 目录 系列文章前言仓库一、实现1.1 下拉元数据对象1.2 构建下拉元数据的映射关系1.3 框架方式1.3.1 框架实现1.3.2 框架用例模版类加载下拉业务导出接口 1.4 EasyExcel方式1.4.1 EasyExce…...
【回溯算法】【Python实现】TSP旅行售货员问题
文章目录 [toc]问题描述回溯算法Python实现时间复杂性 问题描述 给定一组城市和它们之间的距离矩阵,找到一条距离最短的路径,使得旅行商从一个城市出发,经过所有城市恰好一次,并最终回到出发城市 回溯算法 旅行售货员问题的解空间…...
Java处理xml
Java处理xml DOM(Document Object Model)读取写入参考文献[Java DOM 教程](https://geek-docs.com/java/java-tutorial/dom.html#ftoc-heading-5) DOM(Document Object Model) Java的DOM(Document Object Model&#…...

软考中级-软件设计师 (十一)标准化和软件知识产权基础知识
一、标准化基础知识 1.1标准的分类 根据适用的范围分类: 国际标准指国际化标准组织(ISO)、国际电工委员会(IEC)所制定的标准,以及ISO所收录的其他国际组织制定的标准。 国家标准:中华人民共和…...

pytest教程-46-钩子函数-pytest_sessionstart
领取资料,咨询答疑,请➕wei: June__Go 上一小节我们学习了pytest_report_testitemFinished钩子函数的使用方法,本小节我们讲解一下pytest_sessionstart钩子函数的使用方法。 pytest_sessionstart 是 Pytest 提供的一个钩子函数,…...

Windows内核函数 - ASCII字符串和宽字符串
本章介绍了Windows内核中字符串处理函数、文件读写函数、注册表读写函数。这些函数是DDK提供的运行时函数,他们比标准C语言的运行时函数功能更丰富。普通的C语言运行时库是不能在内核模式下使用的,必须使用DDK提供的运行时函数。 和应用程序一样…...
从零开始学习MySQL 事务处理
事务处理与ACID特性 事务是数据库操作的基本单元,它确保一组操作要么全部成功,要么全部失败,以此来维护数据库的一致性。这四个字母缩写ACID代表了事务的四大特性: 原子性(Atomicity)**:事务被…...
字符数组以及字符串相关的几个函数
一.字符数组 1.定义:格式如下 char a[10]; //此处就表示定义了一个长度为10的字符数组 2.引用: 也和其余的数组一样,是下标引用。 3.初始化: 如下代码为字符数组初始化的几种情况: int main() {char arr[5] {…...
AOP面向切面编程
1,注入依赖 <!--web--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</grou…...

C# WinForm —— 15 DateTimePicker 介绍
1. 简介 2. 常用属性 属性解释(Name)控件ID,在代码里引用的时候会用到,一般以 dtp 开头Format设置显示时间的格式,包含Long: Short: Time: Custom:采用标准的时间格式 还是 自定义的格式CustomFormat自定…...
SpringBoot中六种批量更新Mysql 方式效率对比
SpringBoot中六种批量更新Mysql 方式效率对比 先上结论吧,有空可以自测一下,数据量大时运行一次还时挺耗时的 效率比较 小数据量时6中批量更新效率不太明显,根据项目选择合适的即可,以1万条为准做个效率比较,效率从高到低一次排名如下 replace into和ON DUPLICATE KEY效率最…...

【SpringBoot】SpringBoot整合jasypt进行重要数据加密
📝个人主页:哈__ 期待您的关注 目录 📕jasypt简介 🔥SpringBoot使用jasypt 📂创建我需要的数据库文件 📕引入依赖 🔓配置数据库文件(先不进行加密) 🌙创…...
【Go语言入门学习笔记】Part1.梦开始的地方
一、前言 经过一系列的学习,终于有时间来学习一些新的语言,Go语言在现在还是比较时髦的,多一个技能总比不多的好,故有时间来学一下。 二、配置环境 按照网络中已有的配置方法配置好,本人采用了Jetbrain的Goland&#…...
数据特征降维 | 主成分分析(PCA)附Python代码
主成分分析(Principal Component Analysis,PCA)是一种常用的数据降维技术和探索性数据分析方法,用于从高维数据中提取出最重要的特征并进行可视化。 PCA的基本思想是通过线性变换将原始数据投影到新的坐标系上,使得投影后的数据具有最大的方差。这些新的坐标轴称为主成分…...
当服务实例出现故障时,Nacos如何处理?
当服务实例出现故障时,Nacos的应对策略 在微服务架构日益盛行的今天,服务之间的稳定性与可靠性成为了我们架构师们不得不面对的重要课题。尤其是在面对服务实例出现故障时,如何确保整个系统的稳定运行,成为了我们首要考虑的问题。…...

遥感数据集制作(Potsdam数据集为例):TIF图像转JPG,TIF标签转PNG,图像重叠裁剪
文章目录 TIF图像转JPGTIF标签转PNG图像重叠裁剪图像重命名数据集转COCO格式数据集转VOC格式 遥感图像不同于一般的自然图像,由于波段数量、图像位深度等原因,TIF图像数据不能使用简单的格式转换方法。本文以Potsdam数据集为例,制作能够直接用…...
根据web访问日志,封禁请求量异常的IP,如IP在半小 时后恢复正常则解除封禁
在网络安全日益受到重视的今天,如何有效防范恶意流量和攻击成为了每个网站管理员必须面对的问题。恶意流量不仅会影响网站的正常运行,还可能导致服务器崩溃,给网站带来不可估量的损失。为了应对这一问题,我们特别推出了一款实用的…...
DockerHub与私有镜像仓库在容器化中的应用与管理
哈喽,大家好,我是左手python! Docker Hub的应用与管理 Docker Hub的基本概念与使用方法 Docker Hub是Docker官方提供的一个公共镜像仓库,用户可以在其中找到各种操作系统、软件和应用的镜像。开发者可以通过Docker Hub轻松获取所…...

iPhone密码忘记了办?iPhoneUnlocker,iPhone解锁工具Aiseesoft iPhone Unlocker 高级注册版分享
平时用 iPhone 的时候,难免会碰到解锁的麻烦事。比如密码忘了、人脸识别 / 指纹识别突然不灵,或者买了二手 iPhone 却被原来的 iCloud 账号锁住,这时候就需要靠谱的解锁工具来帮忙了。Aiseesoft iPhone Unlocker 就是专门解决这些问题的软件&…...

【大模型RAG】Docker 一键部署 Milvus 完整攻略
本文概要 Milvus 2.5 Stand-alone 版可通过 Docker 在几分钟内完成安装;只需暴露 19530(gRPC)与 9091(HTTP/WebUI)两个端口,即可让本地电脑通过 PyMilvus 或浏览器访问远程 Linux 服务器上的 Milvus。下面…...

Cinnamon修改面板小工具图标
Cinnamon开始菜单-CSDN博客 设置模块都是做好的,比GNOME简单得多! 在 applet.js 里增加 const Settings imports.ui.settings;this.settings new Settings.AppletSettings(this, HTYMenusonichy, instance_id); this.settings.bind(menu-icon, menu…...
拉力测试cuda pytorch 把 4070显卡拉满
import torch import timedef stress_test_gpu(matrix_size16384, duration300):"""对GPU进行压力测试,通过持续的矩阵乘法来最大化GPU利用率参数:matrix_size: 矩阵维度大小,增大可提高计算复杂度duration: 测试持续时间(秒&…...

ios苹果系统,js 滑动屏幕、锚定无效
现象:window.addEventListener监听touch无效,划不动屏幕,但是代码逻辑都有执行到。 scrollIntoView也无效。 原因:这是因为 iOS 的触摸事件处理机制和 touch-action: none 的设置有关。ios有太多得交互动作,从而会影响…...

什么是VR全景技术
VR全景技术,全称为虚拟现实全景技术,是通过计算机图像模拟生成三维空间中的虚拟世界,使用户能够在该虚拟世界中进行全方位、无死角的观察和交互的技术。VR全景技术模拟人在真实空间中的视觉体验,结合图文、3D、音视频等多媒体元素…...

渗透实战PortSwigger靶场:lab13存储型DOM XSS详解
进来是需要留言的,先用做简单的 html 标签测试 发现面的</h1>不见了 数据包中找到了一个loadCommentsWithVulnerableEscapeHtml.js 他是把用户输入的<>进行 html 编码,输入的<>当成字符串处理回显到页面中,看来只是把用户输…...

从物理机到云原生:全面解析计算虚拟化技术的演进与应用
前言:我的虚拟化技术探索之旅 我最早接触"虚拟机"的概念是从Java开始的——JVM(Java Virtual Machine)让"一次编写,到处运行"成为可能。这个软件层面的虚拟化让我着迷,但直到后来接触VMware和Doc…...

高考志愿填报管理系统---开发介绍
高考志愿填报管理系统是一款专为教育机构、学校和教师设计的学生信息管理和志愿填报辅助平台。系统基于Django框架开发,采用现代化的Web技术,为教育工作者提供高效、安全、便捷的学生管理解决方案。 ## 📋 系统概述 ### 🎯 系统定…...