C# 设计模式概况
什么是设计模式
大家熟知的GOF23种设计模式,源自《Design Patterns: Elements of Reusable Object-Oriented Software》一书,由 Erich Gamma、Richard Helm、Ralph Johnson 和 John Vlissides 合著,四人组Gang of Four简称GOF。总结了在面向 对象语言开发过程中常见问题的解决方案。
设计模式是面向对象语言开发过程中,遇到的种种场景和问题,然后提出的思路 和解决方案,最后沉淀下来,就成了设计模式。
设计模式其实就是解决问题的思路,是前辈总结出来的有效方式方法,就是套路! 学习设计模式,就是为了站在前辈的肩膀上,能更快捷优雅的解决面向对象程序 开发设计问题。
设计模式分类
创建型
单例模式
单例模式(Singleton Pattern)是确保一个类只有一个实例,并提供一个全局访问点来访问该实例的设计模式。它是创建型模式的一种,在多种编程语言中都有实现,包括Java和C++。
单例模式涉及到一个单一的类,该类负责创建自己的对象,并确保只有单个对象被创建。这个类还提供了一种访问其唯一对象的方式,允许其他对象直接访问,而无需实例化该类的对象。
工厂模式
工厂模式(Factory Pattern)是创建型设计模式的一种,它提供了一种创建对象的接口,但由子类决定要实例化的类是哪一个。工厂模式让类的实例化推迟到子类。
在工厂模式中,我们定义一个创建对象的接口,但让子类来决定实例化哪一个类。这样,工厂方法将对象的实例化推迟到了子类,使得客户端不需要知道它们所使用的对象类的名字,只需要知道所对应的工厂即可。
工厂方法模式
工厂方法模式(Factory Method Pattern)是创建型设计模式之一,它定义了一个用于创建对象的接口,但由子类决定要实例化的类是哪一个。工厂方法模式让一个类的实例化延迟到其子类,从而实现了灵活的对象创建机制,而无需在客户端代码中显式指定具体要创建的对象类型。
原型模式
原型模式(Prototype Pattern)是一种创建型设计模式,它通过复制现有对象来生成新对象,而不是通过实例化类来创建。这种模式基于对象的克隆机制,特别适用于需要频繁创建对象的场景,可以提高性能并减少复杂的初始化过程。
建造者模式
建造者模式(Builder Pattern)是一种创建型设计模式,它的主要目的是将复杂对象的构建过程与其表示分离,使得同样的构建过程可以创建不同的表示。这种模式通过将对象的各部分组件的单独构造和组装分离,从而可以构造出不同的复杂对象。
结构型
适配器模式
适配器模式(Adapter Pattern)是一种结构型设计模式,它旨在将一个类的接口转换为客户端所期待的接口,使得原本由于接口不兼容而无法在一起工作的类能够协同工作。适配器模式的核心思想是“适配”,即通过创建一个适配器类,使得两个不兼容的类能够合作。
装饰器模式
装饰器模式(Decorator Pattern)是结构型设计模式的一种,也称为包装模式(Wrapper Pattern)。其核心思想是在不改变原有对象结构的基础上,动态地给该对象增加一些额外功能。装饰器模式提供了一种比继承更灵活的扩展对象功能的方式。
代理模式
代理模式(Proxy Pattern)是一种结构型设计模式,它为其他对象提供一种代理或占位符,以控制对这个对象的访问。代理模式涉及到一个代理对象和一个真实对象,代理对象代表真实对象,并在客户端和目标对象之间起到中介的作用。
外观模式
外观模式(Facade Pattern),又称为门面模式,是 GoF(四人帮)提出的 23 种设计模式中的一种结构型设计模式。外观模式的主要目的是为子系统中的一组接口提供一个统一的高层接口,使得子系统更容易使用。通过引入一个外观角色来简化客户端与子系统之间的交互,为复杂的子系统调用提供一个统一的入口,从而降低子系统与客户端的耦合度。
桥接模式
桥接模式(Bridge Pattern)是一种结构型设计模式,它主要用于将抽象部分与它的实现部分分离,使它们都可以独立地变化。桥接模式的核心思想是将抽象与实现解耦,通过组合的方式而不是继承来实现,从而增加系统的灵活性和可扩展性。
组合模式
组合模式(Composite Pattern),又叫部分整体模式,是一种结构型设计模式。它创建了对象组的树形结构,将对象组合成树状结构以表示“整体-部分”的层次关系。组合模式的核心思想是让用户对单个对象和组合对象的访问具有一致性,即组合模式能让客户以一致的方式处理个别对象以及组合对象。
享元模式
享元模式(Flyweight Pattern)是一种结构型设计模式,它主要用于减少创建对象的数量,以节省内存和提高性能。享元模式通过共享相同的对象,使得在系统中只有一份实例被多个客户端使用,从而实现对象的复用。
行为型
策略模式
策略模式(Strategy Pattern)是一种行为型设计模式,它定义了一系列算法,并将每个算法封装起来,使它们可以相互替换,且算法的变化不会影响使用算法的客户。策略模式的核心思想是将算法的实现与算法的使用分离,使得算法可以独立于使用它的客户而变化。
模板方法模式
模板方法模式(Template Method Pattern)是一种行为型设计模式,它定义了一个算法的框架,并将某些步骤延迟到子类中实现,以便子类可以重新定义算法的某些步骤而不改变算法的结构。
观察者模式
观察者模式(Observer Pattern)是一种行为型设计模式,它定义了一种一对多的依赖关系,使得当一个对象的状态发生改变时,其所有依赖者都会收到通知并自动更新。这种设计模式主要用于实现发布-订阅机制。
迭代子模式
迭代子模式(Iterator Pattern),也称为迭代器模式,是一种行为型设计模式。它提供了一种顺序访问聚合对象中的元素而不必暴露其内部表象的方法。
责任链模式
责任链模式(Chain of Responsibility Pattern)是一种行为型设计模式,旨在将多个处理对象通过链式结构连接起来,以形成一条处理请求的链条。每个处理对象都有机会处理请求,或者将请求传递给链中的下一个对象。这样,客户端不需要知道哪个具体的对象会处理请求,而是通过责任链的结构来自动地传递和处理请求。
命令模式
命令模式(Command Pattern)是一种行为型设计模式,它将一个请求封装为一个对象,从而使你可以用不同的请求对客户进行参数化、对请求排队或记录请求日志,以及支持可撤销的操作。命令模式的主要作用是将请求发送者和接收者解耦,使得发送者无需知道接收者的具体实现,从而增加系统的灵活性和可扩展性。
备忘录模式
备忘录模式(Memento Pattern)是一种行为型设计模式,主要用于在不破坏封装性的前提下,捕获并保存一个对象的内部状态,以便将来可以恢复到该状态。备忘录模式提供了一种保存和恢复对象状态的机制,常用于需要实现撤销操作、保存历史状态或恢复先前状态的场景。
状态模式
状态模式(State Pattern)是一种对象行为型模式,它允许一个对象在其内部状态发生改变时改变它的行为,看起来像是修改了其类。状态模式将对象的行为封装在不同的状态对象中,每个状态对象都定义了对象在该状态下的行为。当对象的状态改变时,它的行为也会随之改变。
访问者模式
访问者模式(Visitor Pattern)是一种行为型设计模式,它允许你将数据结构与作用于结构上的操作解耦,使得可以在不修改数据结构的情况下添加新的操作或访问方式。访问者模式通过定义不同的访问者实现对数据的不同操作,从而在不改变数据结构的前提下动态地添加作用于这些元素上的操作。
中介者模式
中介者模式(Mediator Pattern)是一种行为型设计模式,它定义了一个中介对象来封装一系列对象之间的交互,使得对象之间不直接相互引用和通信,而是通过中介者来进行间接通信。中介者模式的主要目的是降低系统中对象之间的耦合度,提高系统的灵活性和可维护性。
解释器模式
解释器模式(Interpreter Pattern)是一种行为设计模式,主要用于处理特定语言的句法分析和解释。它定义了一种表示文法的方式,并通过解释器实现对特定语言的解释。解释器模式的核心在于将语言的文法结构表示为抽象语法树(AST),并定义解释器来遍历这棵语法树并执行相应的操作。
设计模式分类
- 1 创建型设计模式:关注对象的创建,new的花样就有很多
- 2 结构型设计模式:关注类与类之间的关系,关系有很多种, “组合优于继承”
- 3 行为型设计模式:关注对象和行为的关系(类和方法),就是方法到底该放到哪里
三大工厂
简单工厂模式(SimpleFactoryPattern): 是通过专门定义一个类来负责创建其他类的实例, 被创建的实例通常都具有共同的父类。
工厂方法模式(FactoryMethodPattern) 通过定义工厂父类负责定义创建对象的公共接口, 而子类则负责生成具体的对象。 每一个不同的的对象分别自定义个工厂+抽象;
抽象工厂模式(AbstractFactoryPattern) 在抽象工厂模式中,接口是负责创建一个相关对象的工厂。 每个生成的工厂都能按照工厂模式提供对象。 工厂+约束!
创建对象的几种方式
- 1 直接new一下
- 2 单例一下
- 3 原型一下
- 4 三大工厂—就是转移对象的创建
- 5 建造者—更复杂的工厂方法
说到底,都是在折腾怎么New一个对象!这也是创建型设计模式的核心了!
设计模式总结
创建型:花样new---关注对象的创建。
结构型:包一层------关注类与类之间的关系,组合优于继承,A里面有个B,调用 A完成调用B,所以就是包一层。
行为型:甩锅--------关注的是对象和行为的分离,对象和方法的问题,方法到底 放在哪里,把不稳定的东西丢给别人管理,所以就是甩锅 看懂需求,抓住矛盾,找到套路,实现了再看是啥模式 。
看懂需求,抓住矛盾,找到套路,实现了再看是啥模式。
设计模式终极建议
- 1 设计模式不是单一使用,而是融合,要扬长避短
- 2 设计模式就那么几个核心套路,解决问题时请不要拘泥于招数,直接上套路 解决就完了,然后你再看看是属于什么模式的
- 3 不推荐过度设计,但是写代码后,再多想一下,找找代码坏的味道解决它, 对成长很重要
设计模式的欠缺
结构型-行为型-大部分创建型 都是靠抽象来完成扩展性
因为类是静态的,写好就固定了,想扩展?
只能靠抽象-细节的替换 OOP想扩展,基本都靠抽象---OOP的困境
AOP面向切面编程---可以在不破坏封装的前提下,去扩展通用功能
相关文章:
C# 设计模式概况
什么是设计模式 大家熟知的GOF23种设计模式,源自《Design Patterns: Elements of Reusable Object-Oriented Software》一书,由 Erich Gamma、Richard Helm、Ralph Johnson 和 John Vlissides 合著,四人组Gang of Four简称GOF。总结了在面向…...
STM32 NOR FLASH(SPI FLASH)驱动移植(2)
2)FLASH 读取函数 /* * brief 读取 SPI FLASH * note 在指定地址开始读取指定长度的数据 * param pbuf : 数据存储区 * param addr : 开始读取的地址(最大 32bit) * param datalen : 要读取的字节数(最大 65535) * retval 无 */ void norflash_read(uint8_t *pbuf…...
Redis高可用集群部署
根据集群分析和持久化优化方式,这里用docker部署redis分片集群模式并设置为aof-rdb共用方式存储 准备 2核4G及以上服务器;安装好docker环境;配置docker镜像仓库(https://www.ecnfo.com:1443),因为下面镜像是从这个镜像仓库下载的{"builder": {"gc"…...
【玩转23种Java设计模式】行为型模式篇:命令模式
软件设计模式(Design pattern),又称设计模式,是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性、程序的重用性。 汇总目录链接&…...
代码随想录算法【Day10】
今日只做一题,剩下的题后面补 232.用栈实现队列 class MyQueue { public:stack<int> stIn;stack<int> stOut;/** Initialize your data structure here. */MyQueue() {}/** Push element x to the back of queue. */void push(int x) {stIn.push(x);}…...
WKWebView打开pdf文件乱码?各种方案整理。
近期有用户反馈使用我们FinClip SDK运行的小程序,在iOS18.0.1的系统上打开部分pdf文件的时候出现了乱码的现象, 低版本的系统打开没有出现乱码的现象,用电脑打开这个pdf文件也是正常的。经过排查,可能是iOS18的系统对WKWebView进行了调整处理…...
Android中创建ViewModel的几种方法
文章目录 1. 使用 `ViewModelProvider`1.1 在 `Activity` 中创建 `ViewModel`1.2 在 `Fragment` 中创建 `ViewModel`2. 使用 `ViewModelFactory`2.1 创建 `ViewModel` 和 `ViewModelFactory`2.2 在 `Activity` 或 `Fragment` 中使用 `ViewModelFactory`3. 使用 `by viewModels(…...
【C语言】_指针运算
目录 1. 指针-整数 2. 指针-指针 2.1 指针-指针含义 2.2 指针-指针运算应用:实现my_strlen函数 3. 指针的关系运算(大小比较) 1. 指针-整数 联系关于指针变量类型关于指针类型和指针-整数相关知识: 原文链接如下࿱…...
多层设计模式:可否设计各层之间公用的数据定义模块?
在多层程序设计模式中,可以设计一个各层之间公用的数据类型定义模块。这种模块通常被称为“公共模块”或“共享模块”,它包含所有层都需要使用的数据类型定义。这有助于确保数据在不同层之间传递时的一致性和准确性。 以下是一些设计这种公用数据类型定…...
深度学习模型格式转换:pytorch2onnx(包含自定义操作符)
将PyTorch模型转换为ONNX(Open Neural Network Exchange)格式是实现模型跨平台部署和优化推理性能的一种常见方法。PyTorch 提供了多种方式来完成这一转换,以下是几种主要的方法: 一、静态模型转换 使用 torch.onnx.export() t…...
CDPHudi实战-集成spark
[一]使用Spark-shell 1-配置hudi Jar包 [rootcdp73-1 ~]# for i in $(seq 1 6); do scp /opt/software/hudi-1.0.0/packaging/hudi-spark-bundle/target/hudi-spark3.4-bundle_2.12-1.0.0.jar cdp73-$i:/opt/cloudera/parcels/CDH/lib/spark3/jars/; done hudi-spark3.4-bu…...
Zero to JupyterHub with Kubernetes 下篇 - Jupyterhub on k8s
前言:纯个人记录使用。 搭建 Zero to JupyterHub with Kubernetes 上篇 - Kubernetes 离线二进制部署。搭建 Zero to JupyterHub with Kubernetes 中篇 - Kubernetes 常规使用记录。搭建 Zero to JupyterHub with Kubernetes 下篇 - Jupyterhub on k8s。 官方文档…...
汇编语言与接口技术--跑马灯
一、 实验要求 在单片机开发板的LED灯D1~D8上实现跑马灯。LED与单片机引脚连线电路如下图: 单片机芯片选择AT89C51,晶振频率设为12MHz,操作参考单片机开发板使用说明。跑马灯点亮的时间间隔约为1秒。分别用定时器的模式1和模式2实现。(用P83…...
springcloud篇3-docker需熟练掌握的知识点
docker的原理请参考博文《Docker与Kubernetes》。 一、安装docker的指令 1.1 安装yum工具 yum install -y yum-utils \device-mapper-persistent-data \lvm2 --skip-broken补充:配置镜像源 注意: yum安装是在线联网下载安装,而很多的资源…...
Unity网络通信相关
Socket 通信一张图搞定 谁提供服务谁绑定端口,建立Listener,写Host...
leetcode 173.二叉搜索树迭代器栈绝妙思路
以上算法题中一个比较好的实现思路就是利用栈来进行实现,以下方法三就是利用栈来进行实现的,思路很好,很简练。进行next的时候,先是一直拿到左边的子树,直到null为止,这一步比较好思考一点,下一…...
模电面试——设计题及综合分析题0x01(含答案)
1、已知某温控系统的部分电路如下图(EDP070252),晶体管VT导通时,继电器J吸合,压缩机M运转制冷,VT截止时,J释放,M停止运转。 (1)电源刚接通时,晶体…...
Linux性能优化-系列文章-汇总
前言 Linux性能优化,涉及了CPU,内存,磁盘,网络等很多方面,一方面涉及的知识面广,同时又要在原理方面掌握一定的深度。所以整理总结了Linux性能优化的一系列文章。当处理Linux性能问题的时候,可…...
仓库叉车高科技安全辅助设备——AI防碰撞系统N2024G-2
在当今这个高效运作、安全第一的物流时代,仓库作为供应链的中心地带,其安全与效率直接关系到企业的命脉。 随着科技的飞速发展,传统叉车作业模式正逐步向智能化、安全化转型,而在这场技术革新中,AI防碰撞系统N2024G-2…...
threejs 安装
参考了threejs官方网站文档安装,上来就是各种报错,最终参考之前大佬发的攻略解决了。过程供大家参考。 官方文档地址如下: three.js docshttps://threejs.org/docs/index.html#manual/en/introduction/Installation 具体参考这篇攻略&#…...
《 C++ 点滴漫谈: 十七 》编译器优化与 C++ volatile:看似简单却不容小觑
摘要 本文深入探讨了 C 中的 volatile 关键字,全面解析其基本概念、典型用途以及在现代编程中的实际意义。通过剖析 volatile 的核心功能,我们了解了它如何避免编译器优化对硬件交互和多线程环境中变量访问的干扰。同时,文章分析了 volatile…...
【Vim Masterclass 笔记05】第 4 章:Vim 的帮助系统与同步练习
文章目录 Section 4:The Vim Help System(Vim 帮助系统)S04L14 Getting Help1 打开帮助系统2 退出帮助系统3 查看具体命令的帮助文档4 查看帮助文档中的主题5 帮助文档间的上翻、下翻6 关于 linewise7 查看光标所在术语名词的帮助文档8 关于退…...
电脑中缺失的nvrtc64_90.dll文件如何修复?
一、文件丢失问题 案例:nvrtc64_90.dll文件缺失 问题分析: nvrtc64_90.dll是NVIDIA CUDA Runtime Compilation库的一部分,通常与NVIDIA的CUDA Toolkit或相关驱动程序一起安装。如果该文件丢失,可能会导致基于CUDA的应用程序&…...
leveldb的DBSequence从哪里来,到哪里去?
(Owed by: 春夜喜雨 http://blog.csdn.net/chunyexiyu) leveldb数据库的DBSequence从哪里来,到哪里去? 大概的情形是,leveldb的记录初始DBSequence为0,随着记录的增加,记录sequence不断随着增加,并持久化…...
nginx高可用集群搭建
本文介绍nginx高可用集群的搭建。利用keepalived实时检查nginx进程是否存活、keepalived的虚拟ip技术,达到故障转移的目的。终端用户通过访问虚拟ip,感知不到实际发生的故障。架构图如下: 0、环境 Ubuntu:22.04.2 ltsnginx: 1.…...
基于TCP的Qt网络通信
基于TCP的Qt网络通信 项目源码:https://github.com/say-Hai/TcpSocketLearn/tree/QTcpSocket 在标准C没有提供专门用于套接字通信的类,所以只能使用操作系统提供的基于C的API函数,但是Qt就不一样了,它是C的一个框架并且里边提供了…...
MySql---进阶篇(六)---SQL优化
6.1:insert的优化: (1)普通的插入数据 如果我们需要一次性往数据库表中插入多条记录,可以从以下三个方面进行优化。 insert into tb_test values(1,tom); insert into tb_test values(2,cat); insert into tb_test values(3,jerry); 1). 优…...
什么是回归测试?
什么是回归测试? 回归测试被定义为一种软件测试,以确认最近的程序或代码更改没有对现有功能产生不利影响。回归测试只是对已经执行的测试用例的全部或部分选择,重新执行这些用例以确保现有功能正常工作。 进行此测试是为了确保新的代码更改不会对现有…...
详解MySQL SQL删除(超详,7K,含实例与分析)
文章目录 前言1. 删除表中的所有记录基本语法使用场景注意事项运用实例分析说明2. 删除特定记录基本语法使用场景注意事项运用实例分析说明3. 删除单条记录基本语法使用场景注意事项运用实例分析说明4. 删除违反引用完整性的记录基本语法使用场景注意事项运用实例分析说明5. 删…...
lec7-路由与路由器
lec7-路由与路由器 1. 路由器硬件 路由器的硬件部分: 断电失去: RAM断电不失去:NVRAM, Flash, ROMinterface也算是一部分 路由器是特殊组件的计算机 console 口进行具体的调试 辅助口(Auxiliary&…...
知识库召回列表模式揭秘:实现智能信息检索新突破
目录 一、什么是知识库的召回列表模式 召回列表模式的工作流程 典型应用场景 召回列表模式的优势 二、知识库召回列表模式的技术实现细节 1. 数据准备 2. 召回策略 3. 排序策略 4. 结果展示与交互 三、技术架构示例 1. 系统架构 2. 代码示例 四、总结 随着人工智能…...
WCH的CH57X的J-LINK的芯片FLASH烧录文件
WCH的CH57X的J-LINK的芯片FLASH烧录文件,需要在 D:\app\Keil_v5\SEGGER\JLink_V616a目录中JLINKDEVICES.XML文件中修改并增加以下信息。同时,需要加入CH57X.FLM文件 <Device> <ChipInfo Vendor"WCH" Name"CH57X" WorkRAMAddr"…...
Rust 基础入门指南
Rust 基础入门指南 1. Rust 语言概述 Rust 的历史与设计理念 Rust 是由 Mozilla 研究院的 Graydon Hoare 于2010年开始创建的系统编程语言。其设计目标是创建一种安全、并发、实用的编程语言,特别关注内存安全和并发性。 Rust 的核心设计理念包括: …...
Qt|QWidget窗口支持旋转
功能实现:使用QWidget创建的窗口支持窗口旋转功能。 展示的示例中支持由水平方向旋转至垂直方向。至于其它角度旋转的问题,看完这篇文章后应该会很简单能实现的! 开发环境:win VS2019 Qt 5.15.2 在实现之前也有想用使用 QProp…...
docker compose部署kafka集群
先部署zookeeper集群,启动 参考:docker compose部署zookeeper集群-CSDN博客 再部署kafka集群 networks: net: external: true services: kafka1: restart: always image: wurstmeister/kafka:2.13_2.8.1 container_name: kafka1 …...
Spring源码分析之事件机制——观察者模式(三)
目录 自定义事件 事件监听器 事件发布者(服务层) 使用示例controller层 Spring源码分析之事件机制——观察者模式(一)-CSDN博客 Spring源码分析之事件机制——观察者模式(二)-CSDN博客 这两篇文章是这…...
如何使用axios实现文件上传
文件上传 axios 支持文件上传,通常使用 FormData 对象来封装文件和其他表单数据。 import axios from axios;const formData new FormData(); formData.append(file, fileInput.files[0]); formData.append(description, 文件描述);axios.post(/api/upload, form…...
wx016基于springboot+vue+uniapp的超市购物系统小程序
开发语言:Java框架:springbootuniappJDK版本:JDK1.8服务器:tomcat7数据库:mysql 5.7(一定要5.7版本)数据库工具:Navicat11开发软件:eclipse/myeclipse/ideaMaven包&#…...
LLM - 使用 LLaMA-Factory 部署大模型 HTTP 多模态服务 (4)
欢迎关注我的CSDN:https://spike.blog.csdn.net/ 本文地址:https://spike.blog.csdn.net/article/details/144881432 大模型的 HTTP 服务,通过网络接口,提供 AI 模型功能的服务,允许通过发送 HTTP 请求,交互…...
JeeSite 快速开发平台:全能企业级快速开发解决方案|GitCode 光引计划征文展示
投稿人GitCode ID:thinkgem 光引计划投稿项目介绍 JeeSite 快速开发平台,不仅仅是一个后台开发框架,它是一个企业级快速开发解决方案,后端基于经典组合 Spring Boot、Shiro、MyBatis,前端采用 Beetl、Bootstrap、Admi…...
HackMyVM-Airbind靶机的测试报告
目录 一、测试环境 1、系统环境 2、使用工具/软件 二、测试目的 三、操作过程 1、信息搜集 2、Getshell 3、提权 使用ipv6绕过iptables 四、结论 一、测试环境 1、系统环境 渗透机:kali2021.1(192.168.101.127) 靶 机:debian(192.168.101.11…...
探索Wiki:开源知识管理平台及其私有化部署
在如今的信息时代,企业和团队的知识管理变得愈发重要。如何有效地存储、整理、共享和协作,是提高团队效率和创新能力的关键因素之一。今天,我要为大家介绍一款非常有用的github上开源知识管理工具——Wiki,并分享它的私有化部署方…...
网关的主要作用
在网络安全领域,网关扮演着举足轻重的角色,它不仅是网络间的桥梁,更是安全防线的守护者。以下是网关在网络安全中的几个关键作用: 1. 防火墙功能:网关常常集成了防火墙技术,能够对进出网络的数据包进行严格…...
黑马JavaWeb开发跟学(十五).Maven高级
黑马JavaWeb开发跟学.十五.Maven高级 Maven高级1. 分模块设计与开发1.1 介绍1.2 实践1.2.1 分析1.2.2 实现 1.3 总结 2. 继承与聚合2.1 继承2.1.1 继承关系2.1.1.1 思路分析2.1.1.2 实现 2.1.2 版本锁定2.1.2.1 场景2.1.2.2 介绍2.1.2.3 实现2.1.2.4 属性配置 2.2 聚合2.2.1 介…...
TLS(传输层安全,Transport Layer Security)是用于在网络上提供通信安全的一种加密协议。
TLS(传输层安全,Transport Layer Security)是用于在网络上提供通信安全的一种加密协议。它是SSL(安全套接层,Secure Sockets Layer)的继任者,旨在确保两个应用程序之间数据传输的隐私性、完整性…...
Statistic for ML
statistical concept 統計學概念 免費完整內容 PMF and CDF PMF定義的值是P(Xx),而CDF定義的值是P(X < x),x為所有的實數線上的點。 probability mass function (PMF) 概率質量函數 p X ( x ) P ( X x ) pX(x)P(Xx) pX(x)P(Xx) 是離散隨機變數…...
Node.js 函数
Node.js 函数 1. 概述 Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行时环境,它允许开发者使用 JavaScript 编写服务器端和网络应用程序。在 Node.js 中,函数是一等公民,意味着它们可以作为变量传递,可以作为参数传递给其他函数,也可以从其他函数返回。本文将详细…...
数据结构:时间复杂度和空间复杂度
我们知道代码和代码之间算法的不同,一定影响了代码的执行效率,那么我们该如何评判算法的好坏呢?这就涉及到了我们算法效率的分析了。 📖一、算法效率 所谓算法效率的分析分为两种:第一种时间效率,又称时间…...
使用 Docker 安装 Redis
随着微服务架构和分布式应用的广泛应用,缓存技术已经成为提升系统性能和响应速度的关键手段。而 Redis 作为一个高效、轻量级的内存数据存储解决方案,因其极高的性能和丰富的数据结构支持,广泛应用于缓存、消息队列、实时分析等领域。 在现代…...
【源码+文档+调试讲解】“健康早知道”微信小程序
摘 要 随着信息化时代的到来,管理系统都趋向于智能化、系统化,“健康早知道”微信小程序也不例外,但目前国内的市场仍都使用人工管理,市场规模越来越大,同时信息量也越来越庞大,人工管理显然已无法应对时代…...