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

从0开始学PHP面向对象内容之常用设计模式(组合,外观,代理)

在这里插入图片描述

二、结构型设计模式

4、组合模式(Composite)

组合模式(Composite Pattern)是一种结构型设计模式,它将对象组合成树形结构以表示”部分–整体“的层次结构。通过组合模式,客户端可以以一致的方式处理单个对象和对象的组合

组合模式的核心概念

1、组合模式允许客户端同意对待单个对象和对象组合,而不需要分别对待。
2、树形结构是其核心,通过递归调用处理每个对象节点。
3、组合模式适用于需要表示”部分–整体“关系的场景,例如文件系统,组织结构系统等

组成角色

1、组件(Componet):定义所有检点的通用接口,声明默认行为。
2、叶子节点(Leaf):表示树的叶子节点,具体的对象,不能包含子节点。
3、组合节点(Composite):表示树的中间节点,可以包含其他叶子节点或组合节点
4、客户端(Client):使用组件接口来统一操作树形结构中的元素

实现

以下以“文件系统”为例,展示组合模式的实现
1、定义接口:定义所有节点的通用接口

// 组件接口
interface FileSystemComponent {public function display($indent = 0);
}

2、叶子节点:表示单个文件,不能包含子节点。

// 叶子节点
class File implements FileSystemComponent {private $name;public function __construct($name) {$this->name = $name;}public function display($indent = 0) {echo str_repeat(" ", $indent) . "File: " . $this->name . PHP_EOL;}
}

3、组合节点:表示文件夹,可以包含文件或子文件夹

// 组合节点
class Directory implements FileSystemComponent {private $name;private $children = [];public function __construct($name) {$this->name = $name;}public function add(FileSystemComponent $component) {$this->children[] = $component;}public function display($indent = 0) {echo str_repeat(" ", $indent) . "Directory: " . $this->name . PHP_EOL;foreach ($this->children as $child) {$child->display($indent + 2);}}
}

4、客户端:使用组合模式创建和操作文件系统

// 创建文件和目录
$root = new Directory("root");$home = new Directory("home");
$root->add($home);$file1 = new File("file1.txt");
$file2 = new File("file2.txt");$home->add($file1);
$home->add($file2);$subDir = new Directory("documents");
$home->add($subDir);$file3 = new File("resume.docx");
$subDir->add($file3);// 显示文件系统结构
$root->display();

输出结果

Directory: rootDirectory: homeFile: file1.txtFile: file2.txtDirectory: documentsFile: resume.docx

组合模式的应用场景

1、user_deposit:文件和文件夹的层次结构
2、图形界面(GUI):界面中的窗口,按钮,文本框等组件的层次结构
3、组织架构:公司部门与员工的层次关系。
4、菜单系统:菜单与子菜单的层次结构

扩展

1、添加移除功能:允许动态添加、移除子节点

class Directory implements FileSystemComponent {public function remove(FileSystemComponent $component) {$this->children = array_filter($this->children, fn($child) => $child !== $component);}
}

2、缓存机制:在组合节点中添加缓存,提高查询效率

class Directory {private $sizeCache;public function calculateSize() {if ($this->sizeCache === null) {$this->sizeCache = array_reduce($this->children, fn($carry, $child) => $carry + $child->calculateSize(), 0);}return $this->sizeCache;}
}

小结

组合模式通过树形结构将单个对象与组合对象统一处理,简化了客户端代码的复杂性,尤其适用于具有层次关系的系统。PHP实现组合模式非常灵活,可以根据实际需求动态调整子节点的添加、移除以及递归行为,极大地提高了代码的扩展性和复用性。

5、外观模式(Facade)

外观模式(Face Pattern)是一种结构型设计模式,通过为子系统中的一组复杂接口提供一个一致的接口,简化了客户端与子系统之间的交互,它隐藏了子系统的复杂性,使得客户端只需要与外观对象交互即可完成操作

外观模式的定义

1、核心思想:为复杂系统提供一个统一的高层接口,使得客户端可以通过该接口访问子系统,而无需直接与子系统交互
2、主要目的:降低系统的复杂性,提高系统的可维护性和易用性

外观模式的组成

1、外观类(Facade):提供一个简单的接口,封装子系统的功能。
2、子系统类(Subsystem):完成系统的实际功能,但客户端无需访问这些类
3、客户端(Client ):通过外观类与子系统交互而不直接依赖子系统的具体实现

实现

以下通过一个“智能家居系统”的例子展示外观模式的实现。
子系统类:包含 灯光,空调等

class Light {public function on() {echo "Light is turned on.\n";}public function off() {echo "Light is turned off.\n";}
}class AirConditioner {public function on() {echo "Air Conditioner is turned on.\n";}public function off() {echo "Air Conditioner is turned off.\n";}
}class Television {public function on() {echo "Television is turned on.\n";}public function off() {echo "Television is turned off.\n";}
}

外观类 :使用场景 开始场景(打开),结束场景(关闭)

class SmartHomeFacade {private $light;private $airConditioner;private $television;public function __construct() {$this->light = new Light();$this->airConditioner = new AirConditioner();$this->television = new Television();}public function startDay() {echo "Starting the day...\n";$this->light->on();$this->airConditioner->on();$this->television->on();}public function endDay() {echo "Ending the day...\n";$this->television->off();$this->airConditioner->off();$this->light->off();}
}

客户端代码

$smartHome = new SmartHomeFacade();// 启动智能家居
$smartHome->startDay();// 结束智能家居
$smartHome->endDay();

运行结果

Starting the day...
Light is turned on.
Air Conditioner is turned on.
Television is turned on.
Ending the day...
Television is turned off.
Air Conditioner is turned off.
Light is turned off.

外观模式的应用场景

1、复杂系统的简化接口:大型系统中,多个子系统需要对外提供功能时,可以通过外观类统一接口,降低复杂度
2、模块解耦:不同模块之间通过外观类交互,而不直接依赖子系统的具体实现。
3、跨层访问:在分层架构中,外观模式可以用作每一层的入口点

小结

外观模式通过隐藏子系统的实现细节,为客户端提供了一个简单易用的接口。
它是“高内聚、低耦合”的典范,可以显著降低客户端与子系统之间的耦合度。
在实际开发中,外观模式常用于大型复杂系统、分层架构中,提供模块化和易用性的统一入口。

6、代理模式(Proxy)

代理模式(Proxy Pattern)是一种结构型设计模式,它为其他对象提供一种代理以控制对这个对象的访问。通过代理模式,客户端可以通过代理对象间接与真实对象交互,从而实现对对象的访问控制、延迟加载、功能增强等需求。

代理模式定义

1、核心思想:代理对象是实际对象的代表,负责对真实对象的访问或操作,同时可以添加额外的功能
2、主要目的:控制访问,性能优化或者为对象提供附加功能。

代理模式组成

1、抽象主题(Subject):定义代理类和真实主题的共同接口
2、真实主题(RealSubject):实现抽象主题的具体功能,是实际被访问的对象
3、代理类(Proxy):实现抽象主题,控制对真实主题的访问

代理模式的类型

1、远程代理(Remote Proxy)

1、定义:为位于不同地址空间的对象提供本地代理。
2、示例:远程调用(RPC)或Web服务代理。
3、场景:通过网络访问远程对象(如RPC、RMI)。

2、虚拟代理(Virtual Proxy

1、定义:在需要时才创建对象(延迟加载)。
2、示例:大图像的延迟加载。
3、场景:需要延迟加载资源时(如大文件或复杂对象)。

3、保护代理(Protection Proxy)

1、定义:控制对对象的访问权限。
2、示例:基于用户权限的访问控制。
3、场景:控制对敏感资源的访问,通常结合权限控制。

4、智能引用代理(Smart Proxy):

1、定义:在访问对象时提供附加功能(如日志记录、统计)。
2、示例:记录对象调用次数
3、场景:在访问真实对象前后,执行附加逻辑(如日志记录、调用统计)。

代理模式的设计要点

1、 共享接口:代理类和真实对象应实现相同的接口或继承自相同的抽象类。
2、透明性:客户端代码无需感知代理类的存在,操作与直接访问真实对象一致。
3、延迟加载:虚拟代理应尽量推迟真实对象的创建,减少资源浪费。

实现

以下通过一个“图像查看器”的例子展示代理模式的实现
抽象主题

interface Image {public function display();
}

真实主题

class RealImage implements Image {private $fileName;public function __construct($fileName) {$this->fileName = $fileName;$this->loadFromDisk($fileName);}private function loadFromDisk($fileName) {echo "Loading image from disk: $fileName\n";}public function display() {echo "Displaying image: $this->fileName\n";}
}

代理类

class ProxyImage implements Image {private $realImage;private $fileName;public function __construct($fileName) {$this->fileName = $fileName;}public function display() {if ($this->realImage === null) {$this->realImage = new RealImage($this->fileName);}$this->realImage->display();}
}

客户端代码

$image = new ProxyImage("photo.jpg");// 第一次调用,会加载图像
$image->display();// 第二次调用,不会重新加载图像
$image->display();

运行结果:

Loading image from disk: photo.jpg
Displaying image: photo.jpg
Displaying image: photo.jpg

代理模式的扩展

动态代理:使用 PHP 的魔术方法(如 __call)实现通用代理,拦截方法调用。

class DynamicProxy {private $realObject;public function __construct($realObject) {$this->realObject = $realObject;}public function __call($name, $arguments) {echo "Logging: Calling method $name\n";return call_user_func_array([$this->realObject, $name], $arguments);}
}// 示例
$realImage = new RealImage("example.jpg");
$proxy = new DynamicProxy($realImage);
$proxy->display();

运行结果:

Loading image from disk: example.jpg
Logging: Calling method display
Displaying image: example.jpg

小结

代理模式通过在真实对象和客户端之间增加代理对象,实现了对对象访问的控制、延迟加载、权限校验等功能。在实际开发中,代理模式广泛应用于远程调用、资源管理、权限控制等场景,特别是在需要解耦客户端与真实对象时,是一个非常实用的设计模式。

总结

代理模式与其他模式的对比
在这里插入图片描述

相关文章:

从0开始学PHP面向对象内容之常用设计模式(组合,外观,代理)

二、结构型设计模式 4、组合模式(Composite) 组合模式(Composite Pattern)是一种结构型设计模式,它将对象组合成树形结构以表示”部分–整体“的层次结构。通过组合模式,客户端可以以一致的方式处理单个对…...

机械设计学习资料

免费送大家学习资源,已整理好,仅供学习 下载网址: https://www.zzhlszk.com/?qZ02-%E6%9C%BA%E6%A2%B0%E8%AE%BE%E8%AE%A1%E8%A7%84%E8%8C%83SOP.zip...

论文笔记3-XCube: Large-Scale 3D Generative Modeling using Sparse Voxel Hierarchies

目录 Abtract 相关工作 核心算法: 整体流程概述 具体流程解析 1. 输入(Input) 2. 稀疏结构 VAE(Sparse Structure VAE) 3.分层体素潜在扩散(Hierarchical Voxel Latent Diffusion)…...

【组件】前端ElementUi 下拉Tree树形组件 带模糊搜索自动展开高亮功能

【组件】前端ElementUi 下拉Tree树形组件 带模糊搜索自动展开高亮功能 https://live.csdn.net/v/435737 <template><div><el-popoverstyle"overflow-y: auto; "placement"bottom"trigger"click"><el-inputstyle"margi…...

诠视科技受邀出席“中国虚拟现实产学研大会”

2024年11月2-3日&#xff0c;由中国虚拟现实技术与产业创新平台举办的第十届“中国虚拟现实产学研大会” 在北京顺利召开&#xff0c;大会围绕“虚拟现实技术与产业创新融合”这一主题进行深入探讨。诠视科技作为虚拟现实产业的创新领军企业&#xff0c;CEO林瓊受邀参加本次活动…...

【达梦数据库】授权查询

目录 授权查询EXPIRED_DATECLUSTER_TYPE 更换原则更换方法 授权查询 select * from v$license;EXPIRED_DATE 过期日期&#xff0c;如果是正式版会显示NULL CLUSTER_TYPE 授权使用的集群类型CLUSTER_TYPE&#xff0c;格式为字符串“XXXX”&#xff0c; 每一位上 0 表示禁止…...

探索 ZED 双目 3D 相机发展:ZED 2i 的创新功能扩展之路

在科技迅速发展的当下&#xff0c;3D 视觉技术在众多领域的发展中有着重要作用。Stereolabs 公司研发的 ZED 相机受到广泛关注。Stereolabs 于 2010 年在美国旧金山成立&#xff0c;一直专注于立体视觉和 3D 深度相机技术的研究。2015 年推出的 ZED 相机为无人机、机器人等设备…...

基于卷积神经网络的白菜病虫害识别与防治系统,resnet50,mobilenet模型【pytorch框架+python源码】

更多目标检测和图像分类识别项目可看我主页其他文章 功能演示&#xff1a; 白菜病虫害识别与防治系统&#xff0c;卷积神经网络&#xff0c;resnet50&#xff0c;mobilenet【pytorch框架&#xff0c;python源码】_哔哩哔哩_bilibili &#xff08;一&#xff09;简介 基于卷…...

计算机网络 | 7.网络安全

1.网络安全问题概述 &#xff08;1&#xff09;计算机网络面临的安全性威胁 <1>计算机网络面临的完全性威胁 计算机网络面临的两大类安全威胁&#xff1a;被动攻击和主动攻击 被动攻击 截获&#xff1a;从网络上窃听他人的通信内容。主动攻击 篡改&#xff1a;故意篡改…...

Opencv+ROS自编相机驱动

目录 一、工具 二、原理 代码 标定 三、总结 参考&#xff1a; 一、工具 opencv2ros ubuntu18.04 usb摄像头 二、原理 这里模仿usb_cam功能包对Opencv_ros进行修饰&#xff0c;加上相机参数和相机状态&#xff0c;难点在于相机参数的读取。 对于相机参数话题 camera…...

js---函数参数是值传递还是引用传递

理解1&#xff1a;都是值&#xff08;基本/地址值&#xff09;传递 理解2&#xff1a;可能是值传递&#xff0c;也可能是引用传递&#xff08;地址值&#xff09; 在JavaScript中&#xff0c;函数参数的传递方式取决于参数的类型&#xff1a; 值传递&#xff08;Pass by Val…...

如何解决DDoS导致服务器宕机?

分布式拒绝服务攻击&#xff08;DDoS攻击&#xff09;是一种常见的网络安全威胁&#xff0c;通过大量恶意流量使目标服务器无法提供正常服务。DDoS攻击可能导致服务器宕机&#xff0c;严重影响业务的正常运行。本文将详细介绍如何检测和防御DDoS攻击&#xff0c;防止服务器宕机…...

临床检验项目指标学习笔记

声明&#xff1a; 家有病人&#xff0c;记录此学习笔记仅为了更好照顾家人。本文不负责内容的准确性和版权。如果存在侵权、或不希望被转载的媒体或个人可与我们联系&#xff0c;我将立即进行删除处理。 血脂四项 [Q&A] 血脂四项 指导意义 测定血清中血脂含量&#xff0c;…...

代码管理之Gitlab

文章目录 Git基础概述场景本地修改未提交&#xff0c;拉取远程代码修改提交本地&#xff0c;远程已有新提交 GitIDEA引入Git拉取仓库代码最后位置 Git基础 概述 workspace 工作区&#xff1a;本地电脑上看到的目录&#xff1b; repository 本地仓库&#xff1a;就是工作区中隐…...

秒杀系统三层架构设计:缓存、消息队列与数据库

秒杀是一种极端高并发场景&#xff0c;短时间内数百万用户涌入&#xff0c;抢购有限库存的商品。为了保证系统稳定性和数据一致性&#xff0c;同时提升用户体验&#xff0c;我们可以设计一个三层架构&#xff1a;缓存层、消息队列层、数据库层。本文将详细设计这一架构并探讨其…...

tauri2.0版本开发苹果ios和安卓android应用,环境搭建和最后编译为apk

官网链接&#xff1a;What is Tauri? | Tauri 初始准备 rust版本一定要1.77.2以上的版本&#xff0c;查看版本和升级版本&#xff1a; 升级命名&#xff1a; rustup update 不然会报错&#xff1a; error: package tauri-plugin-shell v2.0.2 cannot be built because it r…...

SCI论文部分题目

SC20243213 通过氢和氨集成增强Power-to-X灵活性和可持续成本降低&#xff1a;绿色实验室Skive案例研究 SC20243211 分析同时发电的综合系统中的能量和能量效率、环境影响和经济可行性&#xff0c;淡水、热水和天然气凝液 SC20243208 双燃料生物质-天然气系统中的氢、…...

使用PyTorch在AMD GPU上进行INT8量化实现精简化的LLM推理

Leaner LLM Inference with INT8 Quantization on AMD GPUs using PyTorch — ROCm Blogs 随着大型语言模型&#xff08;LLMs&#xff09;规模达到数千亿参数&#xff0c;我们在这些庞大模型中表示数据的方式极大地影响了训练所需的资源&#xff08;例如&#xff0c;用于推理的…...

Solon 拉取 maven 包很慢或拉不了,怎么办?

注意&#xff1a;如果在 IDEA 设置里指定了 settings.xml&#xff0c;下面两个方案可能会失效。&#xff08;或者直接拿 "腾讯" 的镜像仓库地址&#xff0c;按自己的习惯配置&#xff09; 1、可以在项目的 pom.xml 添加 "腾讯" 的镜像仓库 "阿里&qu…...

spring的事务隔离?

在Spring中&#xff0c;事务的隔离级别是指在多事务并发执行时&#xff0c;事务之间的隔离程度&#xff0c;隔离级别定义了一个事务可以看到另一个事务的哪些数据&#xff0c;Spring事务管理器允许通过Transactional注解或者xml配置来指定事务的隔离级别。 事务的隔离级别有以…...

13 —— 开发环境调错-source map

问题&#xff1a;代码被压缩后&#xff0c;无法正确定位源代码的位置&#xff08;行数和列数&#xff09; source map&#xff1a;准确追踪error和warning在原始代码的位置 —— webpack.config.js配置devtool选项 module.exports { devtool: inline-source-map }; inline-s…...

【大数据分析深度学习】在Hadoop上实现分布式深度学习

【作者主页】Francek Chen 【专栏介绍】 ⌈ ⌈ ⌈智能大数据分析 ⌋ ⌋ ⌋ 智能大数据分析是指利用先进的技术和算法对大规模数据进行深入分析和挖掘&#xff0c;以提取有价值的信息和洞察。它结合了大数据技术、人工智能&#xff08;AI&#xff09;、机器学习&#xff08;ML&a…...

【Linux探索学习】第十六弹——进程地址空间:深入解析操作系统中的进程地址空间

Linux学习笔记&#xff1a; https://blog.csdn.net/2301_80220607/category_12805278.html?spm1001.2014.3001.5482 前言&#xff1a; 进程地址空间是操作系统进程管理的重要概念之一&#xff0c;它定义了进程在执行时所能访问的内存布局。理解进程地址空间不仅有助于掌握操…...

【数据结构与算法】相交链表、环形链表(判断是否有环)、环形链表(返回入环节点)

主页&#xff1a;HABUO&#x1f341;主页&#xff1a;HABUO &#x1f341;如果再也不能见到你&#xff0c;祝你早安&#xff0c;午安&#xff0c;晚安&#x1f341; 1.相交链表 题目&#xff1a;给你两个单链表的头节点 headA 和 headB &#xff0c;请你找出并返回两个单链表…...

hubuctf-2024校赛-复现wp

web easyweb1 <?php error_reporting(0); highlight_file(__FILE__);$flag getenv("GZCTF_FLAG");if(isset($_GET[num])){$num $_GET[num];if(preg_match("/[0-9]/", $num)){die("You are failed.");}if(intval($num)){echo $flag;} } 利…...

.NET Core发布网站报错 HTTP Error 500.31

报错如图&#xff1a; 解决办法&#xff1a; 打开任务管理器》》服务》》找到这仨服务&#xff0c;右键启动即可&#xff0c;如果已经启动了就重启&#xff1a;...

RTSP摄像头、播放器为什么需要支持H.265?

H.264还是H.265&#xff1f; 好多开发者在做选RTSP播放器的时候&#xff0c;经常问我们的问题是&#xff0c;用H.264好还是H.265好&#xff1f;本文我们就H.264 和 H.265的主要区别和适用场景&#xff0c;做个大概的交流。 一、压缩效率 H.265 更高的压缩比 H.265 在相同视频…...

brynet源码阅读——解决文件描述符耗尽问题mIdle

1、背景 在高并发服务器程序中&#xff0c;文件描述符资源是有限的。当一个程序同时处理多个网络连接时&#xff0c;每个连接都会占用一个文件描述符。如果系统没有足够的文件描述符可用&#xff0c;调用 accept()&#xff08;用于接收新的连接&#xff09;或其他文件操作时可…...

学习Zookeeper

Zookeeper有手就行 1. 初识ZooKeeper1.1 安装ZooKeeper1.2 ZooKeeper命令操作1.2.1 Zookeeper数据模型1.2.2 Zookeeper 服务端常用命令1.2.3 Zookeeper客户端常用命令 2. ZooKeeperJavaAPl操作2.1 Curator介绍2.2 CuratorAPI常用操作2.2.0 引入Curator支持2.2.1 建立连接2.2.2 …...

css效果

css炫彩流光圆环效果 <!DOCTYPE html> <html><head><meta charset"utf-8" /><title></title><style>*{margin: 0;padding: 0;}body{width: 100%;height: 100vh;}.container{position: relative;width: 100%;height: 100vh…...

【Python爬虫五十个小案例】爬取豆瓣电影Top250

博客主页&#xff1a;小馒头学python 本文专栏: Python爬虫五十个小案例 专栏简介&#xff1a;分享五十个Python爬虫小案例 &#x1fab2;前言 在这篇博客中&#xff0c;我们将学习如何使用Python爬取豆瓣电影Top250的数据。我们将使用requests库来发送HTTP请求&#xff0c;…...

「Mac玩转仓颉内测版25」基础篇5 - 布尔类型详解

本篇将介绍 Cangjie 中的布尔类型&#xff0c;包括布尔值的定义、运算操作符、逻辑运算、布尔类型的常见应用场景及其在条件判断中的应用&#xff0c;帮助开发者理解和使用布尔类型。 关键词 布尔类型定义布尔运算逻辑运算符条件判断常见应用场景 一、布尔类型概述 布尔类型&…...

electron主进程和渲染进程之间的通信

主进程 (main.js) const { app, BrowserWindow, ipcMain } require("electron"); const path require("node:path"); // 导入fs模块 const fs require("fs");const createWindow () > {const win new BrowserWindow({width: 800,height…...

在 Spring Boot 中实现多种方式登录(用户名、手机号、邮箱等)的不正经指南

欢迎来到一场技术与幽默交织的冒险&#xff01;今天&#xff0c;我们将跳进 Spring Boot 的世界&#xff0c;探索如何通过 用户名、手机号、邮箱 等多种方式实现登录。想象一下&#xff0c;用户在登录时可以随心所欲地选择——就像你今天早上纠结到底是要喝美式咖啡还是拿铁&am…...

JVM标量替换

JVM标量替换 简单来说 JVM 中的标量替换是一种编译优化技术&#xff0c;将未逃逸对象拆解成不能再分&#xff0c;标量在栈帧或寄存器中分配使用。将对象拆解后直接使用标量&#xff0c;不但避免了完整对象的创建和后续回收流程&#xff0c;而且能更快地获取和操作相应的数据&…...

Python深度学习框架:PyTorch、Keras、Scikit-learn、TensorFlow如何使用?学会轻松玩转AI!

前言 我们先简单了解一下PyTorch、Keras、Scikit-learn和TensorFlow都是什么。 想象一下你要盖一座大房子。你需要砖头、水泥、工具等等&#xff0c;对吧&#xff1f;机器学习也是一样&#xff0c;需要一些工具来帮忙。PyTorch、Keras、Scikit-learn和TensorFlow就是四种不同的…...

C语言蓝桥杯组题目

系列文章目录 文章目录 系列文章目录前言题目第一题.1, 2, 3, 4 能组成多少个互不相同且无重复数字的三位数&#xff1f;都是多少&#xff1f;思路 第二题: 一个整数&#xff0c;它加上100后是一个完全平方数&#xff0c;再加上168又是一个完全平方数&#xff0c;请问该数是多少…...

用Matlab和SIMULINK实现DPCM仿真和双边带调幅系统仿真

1、使用SIMULINK或Matlab实现DPCM仿真 1.1 DPCM原理 差分脉冲编码调制&#xff0c;简称DPCM&#xff0c;主要用于将模拟信号转换为数字信号&#xff0c;同时减少数据的冗余度以实现数据压缩。在DPCM中&#xff0c;信号的每个抽样值不是独立编码的&#xff0c;而是通过预测前一…...

真实网络安全面试场景题

1.公司内部搭建了2台DNS服务器做主辅同步&#xff0c;公司的业务官网地址为 www.chinaddic.com。小明作为网络管理员把域名添加至DNS服务器进行测试。 问题1:使用自己电脑可以正常访问刚添加的域名&#xff0c;但处于同样网络环境同事电脑却访问不了。 出现此问题原因…...

速盾:ddos防御手段哪种比较好?高防cdn怎么样?

DDoS&#xff08;分布式拒绝服务&#xff09;攻击是一种威胁网络安全的常见攻击手段。为了保护网站和服务器免受DDoS攻击的影响&#xff0c;许多安全专家和公司开发了各种防御手段。在这篇文章中&#xff0c;我们将重点讨论一种常见的DDoS防御手段——高防CDN&#xff08;内容分…...

【ArcGISPro】Sentinel-2数据处理

错误 默认拉进去只组织了4个波段,但是实际有12个波段 解决方案 数据下载 Sentinel-2 数据下载-CSDN博客 数据处理 数据查看 创建镶嵌数据集 在数据管理工具箱中找到创建镶嵌数据集...

【适配】屏幕拖拽-滑动手感在不同分辨率下的机型适配

接到一个需求是类似下图的3D多房间视角&#xff0c;需要拖拽屏幕 问题 在做这种屏幕拖拽的时候发现&#xff0c;需要拖拽起来有跟手的感觉&#xff0c;会存在不同分辨率机型的适配问题。 即&#xff1a;美术调整好了机型1的手感&#xff0c;能做到手指按下顶层地板上下挪动&…...

谷粒商城-消息队列Rabbitmq

RabbitMq参考文档 在谷粒商城项目中使用消息队列主要有以下几个重要原因&#xff1a; 异步处理提高性能 场景示例&#xff1a;在订单系统中&#xff0c;当用户提交订单后&#xff0c;系统需要完成多个操作&#xff0c;如更新库存、生成订单记录、发送订单通知等。如果这些操作…...

python-爬虫入门指南

前言&#xff1a;由于个人负责的运维组&#xff0c;其中有个同事每回在某个项目发版更新后&#xff0c;需手动在k8s容器平台web界面上复制出几百个微服务的名称以及镜像版本等信息&#xff0c;用来更新微服务清单&#xff0c;个人决定抽时间写个爬虫脚本自动完成手动执行的任务…...

力扣—53. 最大子数组和

53. 最大子数组和 给你一个整数数组 nums &#xff0c;请你找出一个具有最大和的连续子数组&#xff08;子数组最少包含一个元素&#xff09;&#xff0c;返回其最大和。 子数组 是数组中的一个连续部分。 示例 1&#xff1a; 输入&#xff1a;nums [-2,1,-3,4,-1,2,1,-5,4…...

STM32H7开发笔记(2)——H7外设之多路定时器中断

STM32H7开发笔记&#xff08;2&#xff09;——H7外设之多路定时器中断 文章目录 STM32H7开发笔记&#xff08;2&#xff09;——H7外设之多路定时器中断0.引言1.CubeMX配置2.软件编写 0.引言 本文PC端采用Win11STM32CubeMX4.1.0.0Keil5.24.2的配置&#xff0c;硬件使用STM32H…...

kafka如何知道哪个消费者消费哪个分区?

在Kafka中&#xff0c;消费者和分区之间的分配是通过一个称为“消费者组协调器”&#xff08;Consumer Group Coordinator&#xff09;的组件来管理的。 以下是Kafka如何确定哪个消费者消费哪个分区的步骤&#xff1a; 消费者加入消费者组&#xff1a; 当消费者启动时&#xf…...

Dockerfile构建报错【ERROR: failed to solve: process】的解决办法

报错信息如下 ERROR: failed to solve: process “/bin/sh -c yarn install” did not complete successfully: exit code: 1 解决 从阿里云等镜像站点下载CentOS-7.repo文件 ‌下载CentOS-7.repo文件‌&#xff1a;可以从阿里云等镜像站点下载CentOS-7.repo文件&#xff0c;…...

html渲染优先级

在前端开发中&#xff0c;优先布局是指在设计和构建页面时&#xff0c;将页面的各个部分按照其重要性和优先级进行排序&#xff0c;并依次进行布局和开发。这种方法可以帮助开发团队在项目初期就确定页面结构的核心部分&#xff0c;从而更好地掌控项目的整体进度和优先级。且确…...

AIX下crs-5005 ip address is aready in use in the network的解决办法

某业务生产系统中&#xff0c;三节点的rac数据库中3号节点因故障停机后&#xff0c;进行crs的重启。重启完成后&#xff0c;发现数据库的监听未起来&#xff0c;启动的过程中并提示crs-5005错误。 一、问题过程 查看监听&#xff0c;发现监听no service ywdb03/oracle/grid/c…...