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

Java 设计模式心法之第3篇 - 总纲:三大流派与导航地图

前两章,我们修炼了 SOLID 这套强大的“内功心法”,为构建高质量软件打下了坚实根基。现在,是时候鸟瞰整个设计模式的“武林”了!本文将为您展开一幅由 GoF 四人帮精心绘制的 23 种经典设计模式的“全景导航地图”。我们将探索这些模式归属的三大核心流派——创建型、结构型、行为型,理解每个流派所关注的“战场”与“兵法”,并快速领略各流派代表性“招式”的精髓。掌握这份地图,您将对设计模式体系建立起宏观认知,为后续深入各派绝学、修炼具体招式指明方向。


一、内功已成,剑指何方?—— 设计模式的江湖鸟瞰

经过前两章对“救火困境”的反思和 SOLID“内功”的修炼,我们已经具备了审视代码质量、理解优秀设计原则的基础。如同习武之人内力初成,迫切需要了解江湖门派、各家绝学,我们现在也需要对设计模式这个“武林”有一个整体的认识。

谈及设计模式,就不能不提那本如同武林圣经般的著作——《设计模式:可复用面向对象软件的基础》。书中的四位作者 Erich Gamma, Richard Helm, Ralph Johnson, 和 John Vlissides(被尊称为 Gang of Four, GoF),并非凭空创造了这些模式,而是如同伟大的博物学家,深入软件开发的实践丛林,观察、识别、归纳并命名了那些在优秀软件设计中反复出现、用以解决特定问题的通用解决方案

GoF 23 种经典设计模式,便是这座“智慧宝库”中的璀璨明珠。它们不是具体的代码片段,而是经过千锤百炼的设计思想和结构蓝图,是软件工程领域的“最佳实践”沉淀。它们覆盖了从对象的“孕育诞生”到“组织结构”,再到“协作互动”的方方面面。

为了让我们这些“习武者”能够系统地学习和理解,GoF 将这 23 种模式划分为三大主要流派,如同武林中的三大门派,各有专攻:

  1. 创建型模式 (Creational Patterns): 精通对象的“创生之道”。
  2. 结构型模式 (Structural Patterns): 擅长类的“组织布局”与“结构优化”。
  3. 行为型模式 (Behavioral Patterns): 专注于对象间的“沟通协作”与“职责分配”。

接下来,让我们一同踏上这趟“江湖巡礼”,领略三大流派的风采及其门下代表性的绝学。

二、流派一:创建型模式 —— 对象的“创生之法”

核心战场:对象的创建过程。

核心兵法:将对象的创建逻辑与使用逻辑分离,提升创建过程的灵活性、可控性与复用性。

面临挑战: 在软件系统中,直接使用 new 操作符创建对象实例是最直接的方式,但这往往会将对象的具体类型、创建细节硬编码在使用它的代码中。当需要更换具体实现、或者创建过程非常复杂(涉及多个步骤或依赖)时,这种硬编码就会成为僵化的根源,难以适应变化。创建型模式的目标,就是封装创建细节,让“使用者”无需关心对象“如何”被制造出来,只需关注“如何”使用。

企业比喻: 如同公司设立了一个高效的**“战略资源部”或“标准化生产线”**。业务部门(客户端代码)需要某种资源或产品(对象)时,只需向该部门提交申请(调用工厂方法或建造者),而无需关心具体的采购渠道、生产流程或零部件组装(创建细节)。该部门负责根据需求,灵活、高效地提供符合标准的产品。

旗下主要招式 (概览):

  • 单例模式 (Singleton):
    • 一句话心法: 确保全局只有“一位领导”,并提供官方“联络方式”。
    • 解决场景: 需要严格控制实例数量为一,如全局配置、唯一序列号生成器。(详见本系列单例篇)
  • 工厂方法模式 (Factory Method):
    • 一句话心法: 定义“生产合同”,具体“生产哪款产品”由“分厂”(子类)决定。
    • 解决场景: 不确定未来需要生产哪些具体型号的产品(创建哪个类的实例),或者希望将“制造权”下放给子类。
  • 抽象工厂模式 (Abstract Factory):
    • 一句话心法: 提供“全套生产线”,确保生产出的“一套产品”(对象族)风格统一、相互兼容。
    • 解决场景: 需要创建一系列相互关联、需要配套使用的对象,例如给系统换“皮肤”(按钮、文本框、滚动条都得是同一套风格)。
  • 建造者模式 (Builder):
    • 一句话心法: 分解“复杂产品”的“组装步骤”,按需定制,流程清晰。
    • 解决场景: 一个产品的构造过程复杂,包含多个部件或可选配置,希望将其构建过程与其最终表示分离,实现更灵活、更易读的创建方式。
  • 原型模式 (Prototype):
    • 一句话心法: 找到一个“样品”,通过“复印”(克隆)快速制造新产品。
    • 解决场景: “开模生产”(创建新对象)成本太高,或者需要动态地根据一个现有对象来创建相似的新对象时,复制原型效率更高。

三、流派二:结构型模式 —— 组织的“架构之术”

核心战场:类与对象的组合方式。

核心兵法:通过巧妙地组合类和对象,形成更大、更灵活、更高效的结构,以适应不断变化的需求。

面临挑战: 单个的类或对象往往功能有限,需要将它们有效地组织起来协同工作,才能构建出强大的系统。但如何组合?直接的继承和关联可能导致结构僵化、耦合紧密。结构型模式关注的是类与对象之间的静态关系和动态组合,旨在优化系统的“骨架”,使其既能满足当前的功能需求,又能方便地进行后续的调整和扩展。

企业比喻: 如同公司进行**“组织架构调整”或“优化部门间协作流程”**。如何设立新的业务单元(类)?如何让不同体系的部门(接口不兼容的类)顺畅对接(适配器)?如何构建灵活的项目团队(组合模式)?如何给现有岗位临时增加职责(装饰器)?如何简化跨部门复杂业务的办理入口(外观模式)?结构型模式提供了这些“组织管理”问题的解决方案。

旗下主要招式 (概览):

  • 适配器模式 (Adapter):
    • 一句话心法: 架设“转换插头”,让“老旧设备”(现有类)也能接入新系统(目标接口)。
    • 解决场景: 想复用一个功能强大但接口不匹配的“旧组件”;或者需要统一不同来源、接口各异的子系统。
  • 桥接模式 (Bridge):
    • 一句话心法: 在“功能”(抽象)与“实现方式”之间架设桥梁,让两者都能自由“升级换代”。
    • 解决场景: 当一个事物存在多个独立的“变化维度”(例如,“消息类型”和“发送方式”),希望这些维度能独立演进,避免出现大量的子类组合。
  • 组合模式 (Composite):
    • 一句话心法: 让“领导”(容器)和“员工”(叶子节点)拥有统一的“汇报接口”,管理层级结构更方便。
    • 解决场景: 需要表示具有层级关系的“部分-整体”结构(如公司组织架构、文件目录),并希望以一致的方式处理单个元素和包含元素的容器。
  • 装饰器模式 (Decorator):
    • 一句话心法: 给“员工”动态穿上不同的“马甲”(附加职责),比直接“转岗”(继承)更灵活。
    • 解决场景: 需要在不改变原有对象结构和代码的前提下,透明地、动态地给对象添加新的功能。Java I/O 中的 BufferedInputStream 包装 FileInputStream 就是典型。
  • 外观模式 (Facade):
    • 一句话心法: 设立一个“总服务台”,简化办理复杂业务(访问子系统)的流程。
    • 解决场景: 一个复杂的子系统内部交互繁琐,希望为外部使用者提供一个简单、统一的入口,隐藏内部的复杂性。
  • 享元模式 (Flyweight):
    • 一句话心法: 对于大量相似的“小零件”(细粒度对象),共享“通用部分”,节省“库存”(内存)。
    • 解决场景: 系统中需要创建大量内容相似的对象,导致内存消耗巨大,可以通过共享这些对象的内部不变状态来显著减少对象数量。如 Java 的 String 常量池。
  • 代理模式 (Proxy):
    • 一句话心法: 设立“秘书”或“门卫”(代理对象),控制对“老板”(真实对象)的访问,并可附加额外服务。
    • 解决场景: 需要控制访问权限、实现延迟加载(懒加载)、记录日志、或者作为远程对象的本地代表等。Spring AOP 的核心机制之一。

四、流派三:行为型模式 —— 协作的“流程之道”

核心战场:对象之间的交互、通信与职责分配。

核心兵法:通过优化对象间的消息传递、职责划分和算法封装,提升系统的灵活性、可扩展性以及对象协作的效率与清晰度。

面临挑战: 对象创建好、结构组织好之后,它们需要相互“对话”和“协作”来完成业务目标。如果对象间的通信方式混乱、职责分配不清、算法逻辑与业务流程紧密耦合,系统将难以理解、难以修改。行为型模式关注的是对象之间的动态交互和职责分配模式,旨在让对象间的“沟通”更顺畅、职责划分更合理、核心算法更容易被替换和管理。

企业比喻: 如同公司制定**“跨部门项目协作流程”、“审批流转规则”、“绩效考核方案(策略)”或“紧急事件响应机制(观察者)”**。一个请求如何在不同负责人之间传递处理(责任链)?一项任务的不同执行方案如何灵活切换(策略)?某个关键指标变化时如何自动通知所有相关方(观察者)?行为型模式为这些“管理和协作”问题提供了成熟的解决方案。

旗下主要招式 (概览):

  • 策略模式 (Strategy):
    • 一句话心法: 准备好多种“行动预案”(算法),根据情况灵活选用,且预案可随时增删。
    • 解决场景: 同一个任务有多种不同的处理方式(算法实现),希望将它们各自封装,使得可以相互替换,并且客户端代码与具体算法解耦。
  • 模板方法模式 (Template Method):
    • 一句话心法: 制定标准的“工作流程”(算法骨架),允许各“执行部门”(子类)在特定环节“个性化操作”。
    • 解决场景: 一个操作的整体步骤是固定的,但其中某些步骤的具体实现允许变化。在父类中定义流程模板,子类负责实现变化点。
  • 观察者模式 (Observer):
    • 一句话心法: “领导”(主题)状态变化,自动“群发通知”给所有“关注者”(观察者)。
    • 解决场景: 一个对象的状态变更需要触发其他多个对象执行相应动作,且希望它们之间是松散耦合的。事件监听、消息订阅是其典型应用。
  • 迭代器模式 (Iterator):
    • 一句话心法: 提供标准的“遍历工具”,让你能按顺序访问“仓库”(聚合对象)里的物品,而无需关心仓库内部怎么存放的。
    • 解决场景: 需要遍历一个集合对象的元素,但又不希望暴露该集合的内部结构(如是 List 还是 Set 还是数组),并提供统一的遍历接口。
  • 责任链模式 (Chain of Responsibility):
    • 一句话心法: 将“审批请求”沿着一条“审批链”传递下去,直到有人“签字”处理。
    • 解决场景: 一个请求需要被一系列对象中的某一个处理,但不确定具体是哪个,或者处理者的顺序可能变化。将这些对象连成链,请求沿链传递。Servlet Filter 就是例子。
  • 命令模式 (Command):
    • 一句话心法: 将“行动指令”(请求)包装成“任务卡片”(对象),方便传递、排队、记录或撤销。
    • 解决场景: 需要将操作请求与执行者解耦,或者需要支持请求排队、日志记录、事务操作、撤销/重做等功能。Runnable 接口就是命令模式的一种体现。
  • 备忘录模式 (Memento):
    • 一句话心法: 给对象拍个“快照”(保存状态),需要时可以“时光倒流”恢复到快照状态。
    • 解决场景: 需要保存一个对象在某个时刻的内部状态,以便将来能够恢复到该状态,同时又不希望破坏对象的封装性。常用于实现撤销功能。
  • 状态模式 (State):
    • 一句话心法: 让对象的行为随着其内部“身份”(状态)的改变而自动切换,看起来如同换了个人。
    • 解决场景: 一个对象的行为模式会根据其内部状态发生显著变化。使用状态模式可以将不同状态下的行为封装到独立的状态类中,避免冗长的 if-else 判断。
  • 访问者模式 (Visitor):
    • 一句话心法: 派一位“巡视员”(访问者)去“视察”一个复杂的“组织结构”(对象结构),并在不改变组织结构的前提下,对每个“部门”(元素)执行某种特定操作。
    • 解决场景: 需要对一个复杂的对象结构(如 AST 抽象语法树)中的多种不同类型的元素执行若干种不同的操作,且希望将操作逻辑与对象结构分离。
  • 中介者模式 (Mediator):
    • 一句话心法: 设立一个“总协调人”(中介者),让各个“部门”(对象)之间不再直接“拉群沟通”,而是都通过协调人来交互,降低复杂度。
    • 解决场景: 对象之间存在着错综复杂的网状依赖关系,导致系统难以理解和维护。引入中介者可以将其简化为星型结构。
  • 解释器模式 (Interpreter):
    • 一句话心法: 为一种特定“语言”(如公式、规则)构建一个“翻译器”(解释器)。
    • 解决场景: 当有一个简单的语言需要解释执行,并且可以将其文法表示为一个抽象语法树时。应用相对较少,如 SQL 解析、正则表达式引擎内部可能用到类似思想。

五、江湖地图:模式间的千丝万缕

手握这份包含三大流派、23 种招式的“武林地图”,我们需要认识到:

  • 门派之分非鸿沟: 模式的分类是为了便于理解,并非绝对界限。有些模式可能跨界,兼具不同流派的特性。
  • 招式组合威力增: 在实战中,高手往往不会只出一招。设计模式经常组合使用,协同解决更复杂的问题。例如:
    • 工厂方法 可能被用来创建 策略 对象。
    • 组合模式 的遍历操作可能需要 迭代器 模式的支持。
    • 外观模式 内部可能协调了多个子系统,这些子系统自身可能运用了其他模式。
    • 模板方法 可能在其步骤中使用了 策略 模式来选择具体实现。
  • 理解脉络是关键: 学习时,不仅要掌握单招的精髓,更要思考招式之间的关联与组合可能,这有助于培养宏观的设计视野,实现“手中无招,心中有招”的境界。

六、修炼心经:如何习得设计模式的真传?

面对琳琅满目的设计模式,如何才能有效地学习并掌握其“心法”,而非仅仅停留在“形似”?

  1. 从“痛点”出发 (Understand the Problem): 抓住每个模式旨在解决的核心问题。当你自己遇到类似痛点时,就能想到对应的模式。
  2. 悟其“意图” (Grasp the Intent): 牢记 GoF 对模式核心意图的定义,这是理解模式本质的钥匙。
  3. 究其“原理” (Connect to Principles): 思考模式是如何体现 SOLID 等设计原则的。这能加深理解,并助你举一反三。
  4. 衡其“利弊” (Analyze Trade-offs): 没有万能药。清楚模式带来的好处,也要认识到它可能引入的复杂性、性能考量或局限性。
  5. 观摩“实战” (Study Real-world Examples): 阅读优秀的开源框架(如 Spring, Guava, JDK 源码)是如何应用这些模式的,这是最好的学习材料。
  6. 勤于“演练” (Practice Deliberately): 在自己的项目中,有意识地识别场景、尝试应用模式,甚至通过重构来引入模式。
  7. 乐于“切磋” (Discuss and Reflect): 与同事讨论设计方案,分享应用心得,反思成败,能加速领悟。
  8. 循序渐进 (Learn Incrementally): 从最常用、最基础的模式(如单例、工厂、策略、观察者、装饰器、适配器、模板方法等)开始,逐步深入。

最重要的心法:模式服务于目标,而非目标本身。 学习模式是为了写出更清晰、更健壮、更灵活的代码,是为了更好地解决实际问题。切忌为了用模式而用模式,陷入形式主义的陷阱。

七、结语与启程:深入江湖,逐一探秘

通过本章的江湖巡礼,我们对 GoF 23 种经典设计模式及其三大流派(创建型、结构型、行为型)构建了宏观的认知地图。这为我们接下来的深度探索之旅奠定了坚实的基础。

从下一卷开始,《Java 设计模式心法》将正式启程,按照创建型 -> 结构型 -> 行为型的路径,带领大家深入每一派武学的腹地,逐一拆解每一种经典模式的核心心法、招式细节(Java 实现)、实战场景、优劣权衡以及需要避开的陷阱。

准备好磨砺你的设计之剑,深入探索这些蕴含工程智慧的模式秘境了吗?让我们整理行装,即刻出发!

相关文章:

Java 设计模式心法之第3篇 - 总纲:三大流派与导航地图

前两章,我们修炼了 SOLID 这套强大的“内功心法”,为构建高质量软件打下了坚实根基。现在,是时候鸟瞰整个设计模式的“武林”了!本文将为您展开一幅由 GoF 四人帮精心绘制的 23 种经典设计模式的“全景导航地图”。我们将探索这些…...

高级java每日一道面试题-2025年4月19日-微服务篇[Nacos篇]-Nacos未来的发展方向和规划有哪些?

如果有遗漏,评论区告诉我进行补充 面试官: Nacos未来的发展方向和规划有哪些? 我回答: Nacos 作为阿里巴巴开源的服务发现、配置管理和服务治理平台,其未来的发展方向和规划主要体现在以下几个关键领域: 1. 安全性与标准化 API分类精细化…...

跳过reCAPTCHA验证的技术解析与优化实践

Google的reCAPTCHA验证系统已成为保护网站安全的核心工具之一。然而,频繁的验证弹窗可能降低用户体验,甚至导致用户流失。如何在遵守平台规则的前提下,通过技术优化与用户行为管理减少验证触发率,成为我们亟需解决的难题。 但需要…...

idea使用docker插件一键部署项目

一、首先保证我们电脑上已经安装了docker docker -v查看docker版本,如果不能识别,需要先下载docker destop,在官网下载正常安装即可。 安装成功就可以使用docker 命令了 二、idea下载docker插件并配置docker参数 我是通过tcp连接docker服务…...

强化学习笔记(三)——表格型方法(蒙特卡洛、时序差分)

强化学习笔记(三)——表格型方法(蒙特卡洛、时序差分) 一、马尔可夫决策过程二、Q表格三、免模型预测1. 蒙特卡洛策略评估1) 动态规划方法和蒙特卡洛方法的差异 2. 时序差分2.1 时序差分误差2.2 时序差分方法的推广 3. 自举与采样…...

[SpringMVC]请求响应参数传递

controller前置url解决业务重名 在项目中,常常会碰到不同的业务之间的某个方法同名的情况。例如在一个文档管理系统(有着文档和发布者两个实体)中,两个实体都有着 "add" 业务。如果两个实体相关的业务url都用 "/ad…...

在C++业务类和QML之间创建一个数据桥梁

工作中经常会遇到两种业务直接按无法直接沟通,此时需要建立一个桥梁将两者进行联系起来,假设一个C业务类,有一个QML UI, 如果将BridgeClass 类通过qmlRegisterType 注册到QML中,在C中如何能够调用到BridgeClass 对象吗…...

超详细mac上用nvm安装node环境,配置npm

一、安装NVM 打开终端,运行以下命令来安装NVM: curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.5/install.sh | bash 然后就会出现如下代码: > Profile not found. Tried ~/.bashrc, ~/.bash_profile, ~/.zprofile, ~/.…...

MH2103系列coremark1.0跑分数据和优化,及基于arm2d的优化应用

CoreMark 1.0 介绍 CoreMark 是由 EEMBC(Embedded Microprocessor Benchmark Consortium)组织于 2009 年推出的一款用于衡量嵌入式系统 CPU 或 MCU 性能的标准基准测试工具。它旨在替代陈旧的 Dhrystone 标准(Dhrystone 容易受到各种libc不同…...

YOLO11改进 | 特征融合Neck篇之Lowlevel Feature Alignment机制:多尺度检测的革新性突破

## 为什么需要重新设计特征融合机制? 在目标检测领域,YOLO系列模型因其高效的实时性成为工业界和学术界的标杆。然而,随着应用场景的复杂化(如自动驾驶中的多尺度目标、无人机图像中的小物体检测),传统特征融合策略的局限性逐渐暴露:**特征对齐不足导致语义信息错位、多…...

解决方案:远程shell连不上Ubuntu服务器

服务器是可以通过VNC登录,排除了是服务器本身故障 检查服务是否在全网卡监听 sudo ss -tlnp | grep sshd确保有一行类似 LISTEN 0 128 0.0.0.0:22 0.0.0.0:* users:(("sshd",pid...,fd3))返回无结果,表明系统里并没有任…...

Flutter路由模块化管理方案

总结记录一下Flutter路由模块管理&#xff1a; 1、创建路由基类 abstract class BaseRouteConfig {Map<String, WidgetBuilder> get routes; } 2、创建不同模块的路由配置类 // 认证模块路由 class AuthRoutes extends BaseRouteConfig {overrideMap<String, Widg…...

Java BIO、NIO、AIO、Netty面试题(已整理全套PDF版本)

什么是IO Java中的I/O&#xff08;输入/输出&#xff09;机制基于流&#xff08;Stream&#xff09;的概念实现数据的传输。流将数据序列化&#xff0c;即按照特定顺序逐次进行读写操作。简而言之&#xff0c;Java程序通过I/O流与外部设备进行数据交换。 Java类库中的I/O功能十…...

TapData × 梦加速计划 | 与 AI 共舞,TapData 携 AI Ready 实时数据平台亮相加速营,企业数据基础设施现代化

在实时跃动的数据节拍中&#xff0c;TapData 与 AI 共舞&#xff0c;踏出智能未来的新一步。 4月10日&#xff0c;由前海产业发展集团、深圳市前海梦工场、斑马星球科创加速平台等联合发起的「梦加速计划下一位独角兽营」正式启航。 本次加速营以“打造下一位独角兽企业”为目…...

一键部署k8s之EFK日志收集系统

一、部署es 1.下载安装 #下载安装 https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-8.13.2-linux-x86_64.tar.gz #解压 [rootes software]# tar xf elasticsearch-8.13.2-linux-x86_64.tar.gz #创建运行elasticsearch服务用户并修改权限 [rootes softw…...

Python常用的第三方模块【openpyxl库】读写Excel文件

openpyxl库模块是用于处理Microsoft Excel文件的第三方库&#xff0c;可以对Excel文件中的数据进行写入和读取。 weather.pyimport reimport requests#定义函数 def get_html():urlhttps://www.weather.com.cn/weather1d/101210101.shtml #爬虫打开浏览器上的网页resprequests.…...

加油站小程序实战教程12显示会员信息

目录 1 布局搭建1.1 搭建头像1.2 显示会员等级1.3 余额显示 最终效果 我们上一篇介绍了会员注册的功能&#xff0c;会员注册后再次进入页面的时候就可以根据openid加载会员信息&#xff0c;本篇我们介绍一下显示会员的余额 1 布局搭建 我们现在在我的页面显示的是会员未开通…...

iOS中使用AWS上传zip文件到Minio上的oss平台上

1. 集成AWS相关库&#xff08;千万不要用最新的版本&#xff0c;否则会出现风格化虚拟路径&#xff0c;找不到主机名&#xff09; pod AWSS3, ~> 2.10.0 pod AWSCore, ~> 2.10.0 2. 编写集成的相关代码 - (void)uploadFileToMinIO {NSString *endPoint "http://…...

PaginationInnerInterceptor使用(Mybatis-plus分页)

引言 最近在编写SQL语句时总是想着偷懒&#xff0c;于是在前不久学习黑马点评时学到可以使用PaginationInnerInterceptor&#xff0c;于是现在我也在自己的项目中进行使用了&#xff0c;但是使用也遇到一些问题&#xff0c;如果你和我的问题一样&#xff0c;希望我的解决办法能…...

极狐GitLab CEO 柳钢受邀出席 2025 全球机器学习技术大会

极狐GitLab 是 GitLab 在中国的发行版&#xff0c;关于中文参考文档和资料有&#xff1a; 极狐GitLab 中文文档极狐GitLab 中文论坛极狐GitLab 官网 2025 年 4 月 18 日至 19 日&#xff0c;2025 全球机器学习技术大会&#xff08;ML-Summit 2025&#xff09;在上海隆重举行。…...

数据仓库 vs 数据湖:架构、应用场景与技术差异全解析

目录 一、概念对比&#xff1a;结构化 vs 全类型数据 二、技术架构对比 1. 数据仓库架构特点 2. 数据湖架构特点 三、典型应用场景 数据仓库适合&#xff1a; 数据湖适合&#xff1a; 四、数据湖仓一体&#xff1a;趋势还是折中&#xff1f; 五、总结&#xff1a;如何…...

【25软考网工笔记】第三章 局域网(1)CSMA/CD、二进制指数退避算法、最小帧长计算

目录 一、CSMA/CD 1. 局域网架构概述 2. 局域网的拓扑结构 3. CSMA 1&#xff09;CSMA的三种监听算法 1、1-坚持型监听算法&#xff08;继续监听&#xff0c;不等待&#xff09; 2、非坚持型监听算法&#xff08;后退随机事件&#xff09; 3、P-坚持型监听算法 2&#…...

Harbor对接非AWS对象存储

背景说明 项目的应用完全运行在一个离线环境中&#xff0c;同时通过K8S的方式进行容器编排。需要自建一个harbor的镜像仓库。并且通过私有云提供的S3服务进行容器镜像的持久化存储。我踩的其中的一个坑就是S3的region名字非AWS的标准名称。运行时抱错如下&#xff1a; 2025-04…...

实训Day-1 漏洞攻击实战

目录 实训任务1 漏洞攻击实战一 实训任务2 漏洞攻击实战二 实训任务3 白云新闻搜索 实训任务4 手速要快 实训任务5 包罗万象 总结 今天的实训目的是为了&#xff1a;了解漏洞攻击的一般步骤&#xff1b;掌握SQL注入的基本原理&#xff1b;掌握XSS攻击的基本原理&#xff…...

Linux-网络基础

一.网络背景 网络的起源与20世纪中期的冷战背景密切相关。美苏争霸期间&#xff0c;美国国防部担心传统集中式通信系统&#xff08;如电话网络&#xff09;在核战争中容易被摧毁&#xff0c;因此急需一种去中心化、高容错的通信方式。1969年&#xff0c;美国国防部高级研究计划…...

算法 | 鲸鱼优化算法(WOA)原理,公式,应用,算法改进研究综述,完整matlab代码

===================================================== github:https://github.com/MichaelBeechan CSDN:https://blog.csdn.net/u011344545 ===================================================== 鲸鱼优化算法 一、原理与公式二、应用领域三、算法改进研究四、完整MAT…...

[BJDCTF2020]EzPHP

这一道题里面的知识点实在是太多了&#xff0c;即使这道题是我最喜欢的RCE也有点大脑停转了&#xff0c;所以还是做个笔记&#xff0c;以后方便回忆 直接跳过打点&#xff0c;来到源码 <?php highlight_file(__FILE__); error_reporting(0); $file "1nD3x.php"…...

企业微信-自建应用

1. 创建自建应用 2. 配置小程序/H5入口 3. 准备 &#xff1a; CorpId&#xff08;企业id&#xff09;、 AgentID&#xff08;应用id&#xff09;、 CorpsecretID&#xff08;应用Secret&#xff09; 4. 配置企业可信IP 5. 如H5需要授权登录&#xff0c;那么需要配置网页授…...

[FPGA基础] 时钟篇

Xilinx FPGA 时钟管理详细文档 本文档详细介绍 Xilinx FPGA 中的时钟管理&#xff0c;包括时钟资源、时钟管理模块、设计注意事项以及最佳实践。适用于使用 Xilinx 7 系列、UltraScale 和 UltraScale 系列 FPGA 的开发者。 1. 时钟资源概述 Xilinx FPGA 提供丰富的时钟资源&a…...

高德火星坐标(GCJ-02)转WGS84坐标

高德火星坐标(GCJ-02)转WGS84坐标 1 转换算法 import mathdef gcj02_to_wgs84(lon, lat):"""高德火星坐标(GCJ-02)转WGS84坐标"""a 6378245.0 # 长半轴ee 0.00669342162296594323 # 扁率def transform_lon(x, y):ret 300.0 x 2.0 * y …...

基于opencv和PaddleOCR识别身份证信息

1、安装组件 pip install --upgrade paddlepaddle paddleocr 2、完整code import cv2 import numpy as np from paddleocr import PaddleOCR# 初始化 PaddleOCR use_angle_clsTrue, lang"ch", det_db_thresh0.1, det_db_box_thresh0.5)def preprocess_image(image…...

Day-1 漏洞攻击实战

实训任务1 漏洞攻击实战一 使用 御剑 得到网站后台地址 数据库登录与日志配置​​ 使用默认密码 root:root 登录phpMyAdmin&#xff0c;执行 SHOW VARIABLES LIKE general% 查看日志状态。 开启日志功能&#xff1a;set global general_log "ON";&#xff08;配图&…...

穿透数据迷雾:PR 曲线与 ROC 曲线的深度剖析+面试常见问题及解析

一、混淆矩阵与评价指标基础 混淆矩阵核心构成&#xff1a;混淆矩阵是分类模型性能评估的基石&#xff0c;以 22 矩阵形式呈现分类结果。其中&#xff0c;真正例&#xff08;TP&#xff09;表示实际为正类且被正确预测的样本&#xff1b;假正例&#xff08;FP&#xff09;是实…...

【Linux篇】轻松搭建命名管道通信:客户端与服务器的互动无缝连接

从零开始&#xff1a;基于命名管道实现客户端与服务器的实时通信 一. 命名管道1.1 基本概念1.2 创建命名管道1.2.1 创建方法1.2.2 示例代码&#xff1a;1.2.3 注意事项&#xff1a;1.3 与匿名管道区别 1.4 打开原则1.4.1 管道打开顺序1.4.2 阻塞行为1.4.3 管道的关闭1.4.4 关闭…...

快充协议芯片XSP04D支持使用一个Type-C与电脑传输数据和快充取电功能

快充是由充电器端的充电协议和设备端的取电协议进行握手通讯进行协议识别来完成的&#xff0c;当充电器端的充电协议和设备端的取电协议握手成功后&#xff0c;设备会向充电器发送电压请求&#xff0c;充电器会根据设备的需求发送合适的电压给设备快速供电。 设备如何选择快充…...

MySQL的窗口函数(Window Functions)

一、窗口函数核心概念 ​​窗口&#xff08;Window&#xff09;​​ 窗口是数据行的集合&#xff0c;由OVER()子句定义。它决定了函数计算的“数据范围”&#xff0c;可以是一个分区的全部行、当前行前后的行&#xff0c;或动态变化的子集。 ​​语法结构​​ SELECT window_f…...

一个很简单的机器学习任务

一个很简单的机器学习任务 前言 基于线上colab做的一个简单的案例&#xff0c;应用了线性回归算法&#xff0c;预测了大概加州3000多地区的房价中位数 过程 先导入了Pandas&#xff0c;这是一个常见的Python数据处理函数库 用Pandas的read_csv函数把网上一个共享数据集&…...

ORION:通过视觉-语言指令动作生成的一个整体端到端自动驾驶框架

25年3月来自华中科技和小米电动汽车的论文“ORION: A Holistic End-to-End Autonomous Driving Framework by Vision-Language Instructed Action Generation”。 由于因果推理能力有限&#xff0c;端到端 (E2E) 自动驾驶方法仍然难以在交互式闭环评估中做出正确决策。当前的方…...

python全栈-flask

python全栈-flask 文章目录 入门上手hello worldflask运行方式测试路由with app.test_request_context():debug模式配置flask参数动态路由数据类型自定义转换器to_pythonPostMan&#xff08;API测试查询参数的获取请求体参数上传文件其它参数url_for 函数重定向响应内容自定义响…...

Unity中的数字孪生项目:两种输入方式对观察物体的实现

在数字孪生项目中&#xff0c;精确的相机控制至关重要。相机不仅需要灵活地跟随目标&#xff0c;还要能够平滑地旋转和缩放&#xff0c;以便观察和分析物体的各个细节。今天&#xff0c;我将通过 TouchControlCamera 和 CameraRotate 两个脚本&#xff0c;展示如何实现一个适用…...

ECharts散点图-散点图14,附视频讲解与代码下载

引言&#xff1a; ECharts散点图是一种常见的数据可视化图表类型&#xff0c;它通过在二维坐标系或其它坐标系中绘制散乱的点来展示数据之间的关系。本文将详细介绍如何使用ECharts库实现一个散点图&#xff0c;包括图表效果预览、视频讲解及代码下载&#xff0c;让你轻松掌握…...

【教程】Digispark实现串口通信

转载请注明出处&#xff1a;小锋学长生活大爆炸[xfxuezhagn.cn] 如果本文帮助到了你&#xff0c;欢迎[点赞、收藏、关注]哦~ 没想到这么老&#xff0c;很多代码都不能用&#xff0c;修了好久。。。 TinySoftwareSerial.cpp #include <stdlib.h> #include <stdio.h&g…...

GPT-4.1 开启智能时代新纪元

GPT-4.1 全解析&#xff1a;开启智能时代新纪元&#xff08;含费用详解&#xff09; 2025年4月&#xff0c;OpenAI 正式推出全新一代语言模型——GPT-4.1 系列&#xff0c;包括 GPT-4.1、GPT-4.1 Mini 和 GPT-4.1 Nano。相比以往模型&#xff0c;它在代码生成、指令理解、长文本…...

4.21 spark和hadoop的区别与联系

一、Hadoop 1. 定义 Hadoop是一个由Apache基金会开发的分布式系统基础架构。它最初是为了解决大规模数据存储和处理的问题而设计的。Hadoop的核心组件包括HDFS&#xff08;Hadoop Distributed File System&#xff09;和MapReduce。 2. HDFS&#xff08;Hadoop Distributed Fi…...

Nacos 客户端 SDK 的核心功能是什么?是如何与服务端通信的?

Nacos 客户端 SDK 的核心功能 Nacos 客户端 SDK 是应用程序集成 Nacos 能力的桥梁&#xff0c;它封装了与 Nacos 服务端交互的复杂性&#xff0c;为开发者提供了简单易用的 API。其核心功能主要围绕两大方面&#xff1a;服务发现 和 配置管理。 服务发现 (Service Discovery) …...

servlet-保存作用域

保存作用域 保存作用域&#xff1a;原始情况下&#xff0c;保存作用域我们有四个&#xff1a;page(一般不用了) 、request&#xff08;一般请求响应范围&#xff09;、session(一次会话范围)、application(整个应用程序范围)1&#xff09;request&#xff1a;一般请求响应范围…...

从规则到大模型:知识图谱信息抽取实体NER与关系RE任务近10年演进发展详解

摘要&#xff1a; 本文回顾了关系抽取与实体抽取领域的经典与新兴模型&#xff0c;清晰地梳理了它们的出现时间与核心创新&#xff0c;并给出在 2025 年不同资源与场景下的最佳实践推荐。文章引用了 BiLSTM‑CRF、BiLSTM‑CNN‑CRF、SpanBERT、LUKE、KnowBERT、CasRel、REBEL、…...

【自然语言处理与大模型】模型压缩技术之蒸馏

知识蒸馏是一种模型压缩技术&#xff0c;主要用于将大型模型&#xff08;教师模型&#xff09;的知识转移到更小的模型&#xff08;学生模型&#xff09;中。在大语言模型领域&#xff0c;这一技术特别重要。 知识蒸馏的核心思想是利用教师模型的输出作为软标签&#xff08;sof…...

yum如果备份已经安装的软件?

在 CentOS 系统中&#xff0c;你可以通过以下步骤将 yum 下载的组件打包备份到本地&#xff1a; 方法 1&#xff1a;使用 yumdownloader 直接下载 RPM 包 1. 安装 yum-utils 工具 yum install -y yum-utils2. 下载指定软件包及其依赖 yumdownloader --resolve <package-n…...

室外摄像头异常自检指南+视频监控系统EasyCVR视频质量诊断黑科技

室外监控摄像头在安防监控系统运行中&#xff0c;常出现连接不畅、设备互认失败等问题。今天我们来介绍两类安防监控摄像头的典型问题及排查步骤。 问题1&#xff1a;同品牌新摄像头无法被老录像机识别 排查步骤&#xff1a; 1&#xff09;供电检查 确认摄像头供电线路连接正…...