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

Spring设计模式 八股速记 高层模块底层模块 依赖倒置原则 开闭原则 接口隔离原则

目录

高层模块底层模块

一、定义与核心思想

二、实现方式

三、优点与价值

四、典型应用场景

五、与其他原则的关系

示例说明

依赖倒置原则

一、定义与核心思想

二、实现方式

三、优点与价值

四、典型应用场景

五、与其他原则的关系

示例说明

自己理解

开闭原则

1. 抽象化与接口设计

2. 封装与模块化

3. 多态性与继承机制

4. 依赖抽象而非具体实现

5. 设计原则的协同作用

总结

接口隔离原则

一、核心定义

二、与单一职责原则的区别

三、应用场景与实现方式

四、优缺点分析

五、注意事项

六、经典案例


高层模块底层模块


一、定义与核心思想
  1. 基本定义
    • 高层模块不应依赖低层模块,两者都应依赖抽象(接口或抽象类)。
    • 抽象不应依赖细节,而细节(具体实现类)应依赖抽象。
  1. 核心目标
    通过面向接口编程,打破传统“高层调用低层”的依赖关系,实现模块间解耦。例如:
    • 传统依赖:司机类直接调用奔驰车类的方法,导致更换车型需修改司机代码。
    • 倒置后:司机依赖“车辆接口”,奔驰车、宝马车均实现该接口,实现灵活扩展。

二、实现方式
  1. 定义抽象层
    通过接口或抽象类规范模块间的交互契约。例如:
    • 定义消息发送接口 MessageService,由 EmailServiceSmsService 实现具体逻辑。
  1. 依赖注入(Dependency Injection)
    将具体实现通过构造函数、属性或方法参数注入到高层模块,而非在内部直接实例化。例如:
public class NotificationService {private final MessageService messageService;// 通过构造函数注入依赖 public NotificationService(MessageService messageService) {this.messageService  = messageService;}
}
  1. 避免直接引用具体类
    高层模块仅通过抽象接口操作,如顾客购物场景中依赖抽象的 Shop 接口,而非具体网店类。

三、优点与价值
  1. 降低耦合度
    模块间通过抽象交互,减少直接依赖,修改低层实现时无需调整高层代码。
  2. 提高可扩展性
    新增功能只需实现抽象接口,例如添加新车型或消息发送方式时,无需修改现有业务逻辑。
  3. 增强可测试性
    通过模拟抽象接口的实现,便于单元测试(如使用Mock对象)。
  4. 支持并行开发
    抽象接口定义后,高层与低层模块可独立开发。

四、典型应用场景
  1. 模块化系统设计
    在分层架构中,业务逻辑层(高层)通过接口调用数据访问层(低层),避免数据库变更影响业务代码。
  2. 框架开发
    如Spring框架通过依赖注入容器管理对象生命周期,实现组件解耦。
  3. 插件化扩展
    系统通过抽象接口支持第三方插件,如IDE工具可通过接口集成不同编译器。

五、与其他原则的关系
  • 开闭原则(OCP)的基础:依赖倒置通过抽象隔离变化,使系统易于扩展。
  • 里氏替换原则(LSP)的延伸:抽象接口的稳定性确保子类可替换性。

示例说明

场景:顾客在不同网店购物

  • 未遵循DIP:顾客类直接依赖韶关网店类,更换网店需修改顾客代码。
  • 遵循DIP后:顾客依赖抽象的 Shop 接口,新增婺源网店只需实现该接口,无需修改顾客类。
// 抽象接口 
public interface Shop {String sell();
}
// 具体实现 
public class WuyuanShop implements Shop {public String sell() { return "绿茶"; }
}
// 高层模块 
public class Customer {public void shopping(Shop shop) {System.out.println(shop.sell()); }
}

通过依赖倒置原则,系统从“细节驱动设计”转向“抽象驱动设计”,显著提升灵活性和可维护性。实际开发中需结合依赖注入框架(如Spring)和接口设计规范落地此原则。

依赖倒置原则

依赖倒置原则(Dependency Inversion Principle,DIP)是面向对象设计的五大SOLID原则之一,其核心思想是通过抽象解耦模块间的直接依赖关系,提高系统的灵活性和可维护性。以下是关键要点解析:


一、定义与核心思想
  1. 基本定义
    • 高层模块不应依赖低层模块,两者都应依赖抽象(接口或抽象类)。
    • 抽象不应依赖细节,而细节(具体实现类)应依赖抽象。
  1. 核心目标
    通过面向接口编程,打破传统“高层调用低层”的依赖关系,实现模块间解耦。例如:
    • 传统依赖:司机类直接调用奔驰车类的方法,导致更换车型需修改司机代码。
    • 倒置后:司机依赖“车辆接口”,奔驰车、宝马车均实现该接口,实现灵活扩展。

二、实现方式
  1. 定义抽象层
    通过接口或抽象类规范模块间的交互契约。例如:
    • 定义消息发送接口 MessageService,由 EmailServiceSmsService 实现具体逻辑。
  1. 依赖注入(Dependency Injection)
    将具体实现通过构造函数、属性或方法参数注入到高层模块,而非在内部直接实例化。例如:
public class NotificationService {private final MessageService messageService;// 通过构造函数注入依赖 public NotificationService(MessageService messageService) {this.messageService  = messageService;}
}
  1. 避免直接引用具体类
    高层模块仅通过抽象接口操作,如顾客购物场景中依赖抽象的 Shop 接口,而非具体网店类。

三、优点与价值
  1. 降低耦合度
    模块间通过抽象交互,减少直接依赖,修改低层实现时无需调整高层代码。
  2. 提高可扩展性
    新增功能只需实现抽象接口,例如添加新车型或消息发送方式时,无需修改现有业务逻辑。
  3. 增强可测试性
    通过模拟抽象接口的实现,便于单元测试(如使用Mock对象)。
  4. 支持并行开发
    抽象接口定义后,高层与低层模块可独立开发。

四、典型应用场景
  1. 模块化系统设计
    在分层架构中,业务逻辑层(高层)通过接口调用数据访问层(低层),避免数据库变更影响业务代码。
  2. 框架开发
    如Spring框架通过依赖注入容器管理对象生命周期,实现组件解耦。
  3. 插件化扩展
    系统通过抽象接口支持第三方插件,如IDE工具可通过接口集成不同编译器。

五、与其他原则的关系
  • 开闭原则(OCP)的基础:依赖倒置通过抽象隔离变化,使系统易于扩展。
  • 里氏替换原则(LSP)的延伸:抽象接口的稳定性确保子类可替换性。

示例说明

场景:顾客在不同网店购物

  • 未遵循DIP:顾客类直接依赖韶关网店类,更换网店需修改顾客代码。
  • 遵循DIP后:顾客依赖抽象的 Shop 接口,新增婺源网店只需实现该接口,无需修改顾客类。
// 抽象接口 
public interface Shop {String sell();
}
// 具体实现 
public class WuyuanShop implements Shop {public String sell() { return "绿茶"; }
}
// 高层模块 
public class Customer {public void shopping(Shop shop) {System.out.println(shop.sell()); }
}

通过依赖倒置原则,系统从“细节驱动设计”转向“抽象驱动设计”,显著提升灵活性和可维护性。实际开发中需结合依赖注入框架(如Spring)和接口设计规范落地此原则。

自己理解

在依赖倒置原则中 高层模块不是调用底层模块

而是高层模块和底层模块都实现接口

底层模块实现接口

高层模块调用接口里面的方法

开闭原则

开闭原则(Open-Closed Principle, OCP)的基础是通过抽象化和多态性实现系统的可扩展性,其核心思想是在不修改已有代码的前提下扩展功能。以下是其具体基础要素:

1. 抽象化与接口设计

开闭原则的关键在于定义稳定的抽象层。通过接口或抽象类对功能进行抽象,将可变部分与不变部分分离,确保扩展时仅需新增实现而非修改原有结构。例如:

  • 通过接口定义通用行为(如宠物管理系统的 Pet 接口),具体实现通过多态扩展新类型(猫、狗、鸟);
  • 使用抽象类(如 AbstractChart)统一管理不同图表类型,新增图表仅需继承抽象类。
2. 封装与模块化
  • 封装变化:将可能变化的部分独立封装(如价格计算逻辑),通过新增类或配置实现扩展,而非直接修改原有类。
  • 模块化设计:系统划分为高内聚、低耦合的模块,每个模块职责单一,减少修改影响范围。
3. 多态性与继承机制
  • 利用多态特性,通过子类化扩展功能。例如,新增 OffNovelBook 子类实现打折逻辑,而非修改原书籍类;
  • 结合策略模式、装饰器模式等设计模式,动态替换行为。
4. 依赖抽象而非具体实现
  • 高层模块依赖接口或抽象类,而非具体实现类。例如,计算器类依赖 ArithmeticOperation 接口,支持灵活扩展加减乘除运算;
  • 遵循依赖倒置原则(DIP),确保系统核心逻辑与细节解耦。
5. 设计原则的协同作用
  • 里氏替换原则(LSP):子类可替换父类,保障扩展的兼容性;
  • 单一职责原则(SRP):每个类仅承担单一职责,降低修改风险。
总结

开闭原则的底层逻辑是通过抽象构建稳定框架,利用多态和封装实现灵活扩展。其成功应用依赖于合理的抽象设计、模块化架构以及与其他设计原则(如SOLID原则)的协同。这种设计模式显著提升了系统的可维护性、复用性和应对需求变化的敏捷性。

接口隔离原则(Interface Segregation Principle,ISP)是面向对象设计的SOLID原则之一,其核心思想是通过拆分臃肿的接口,减少类之间的不必要依赖,从而提高系统的灵活性和可维护性。以下是具体解析:


接口隔离原则

一、核心定义
  1. 基本概念
    客户端(接口使用者)不应被迫依赖其不需要的接口方法。应将庞大接口拆分为多个小接口,每个接口专注于单一功能。
  2. 核心目标
    • 降低耦合:通过细化接口,减少类对无关方法的依赖。
    • 提高内聚:每个接口专注单一职责,避免冗余实现。

二、与单一职责原则的区别
  • 单一职责原则(SRP)
    关注类或接口的职责单一性,强调业务逻辑的划分。
  • 接口隔离原则(ISP)
    强调接口设计的最小化,要求方法尽可能少,避免客户端被迫实现无用方法。

示例
一个电商系统的用户操作接口若包含登录、支付、订单管理等多个方法,违反ISP。应拆分为LoginablePayableOrderManageable等独立接口,让不同模块按需实现。


三、应用场景与实现方式
  1. 典型场景
    • 系统需要支持多种客户端(如移动端、PC端)访问不同功能。
    • 接口方法存在冗余(如打印机同时支持打印、扫描、传真,但部分客户端仅需部分功能)。
  1. 实现方法
    • 拆分接口:将大接口按功能拆分为多个小接口(如PrinterScannerFaxMachine)。
    • 组合继承:通过接口继承组合所需功能,避免实现冗余方法。

代码示例

// 拆分前:臃肿接口 
interface AllInOnePrinter {void print();void scan();void fax();
}// 拆分后:符合ISP 
interface Printer { void print(); }
interface Scanner { void scan(); }
interface FaxMachine { void fax(); }class BasicPrinter implements Printer { /* 仅实现打印 */ }
class AdvancedPrinter implements Printer, Scanner { /* 实现打印和扫描 */ }

四、优缺点分析

优点

缺点

减少类间耦合,提高扩展性

接口数量可能过多,增加管理成本

避免客户端实现无用方法

需平衡拆分粒度,过度拆分导致复杂度上升

提升代码可读性和维护性

可能引入重复接口定义(需结合其他设计模式优化)


五、注意事项
  1. 适度拆分:接口粒度需结合业务场景,避免“为拆而拆”。
  2. 高内聚设计:每个接口应具备独立功能,且方法之间高度相关。
  3. 结合其他原则:如通过依赖注入(DI)或适配器模式灵活组合接口。

六、经典案例
  1. 美女筛选系统
    原接口IPrettyGirl包含外貌、身材、气质方法。拆分为IGoodBodyGirl(外形)和IGreatTemperamentGirl(气质),不同模块按需依赖。
  2. 数据库操作接口
    将通用的增删改查拆分为CRUD接口和特定功能接口(如分页查询),避免实现类冗余。

通过合理应用接口隔离原则,可以有效优化系统设计,减少“接口污染”,使代码更灵活、健壮。更多案例可参考。

相关文章:

Spring设计模式 八股速记 高层模块底层模块 依赖倒置原则 开闭原则 接口隔离原则

目录 高层模块底层模块 一、定义与核心思想 二、实现方式 三、优点与价值 四、典型应用场景 五、与其他原则的关系 示例说明 依赖倒置原则 一、定义与核心思想 二、实现方式 三、优点与价值 四、典型应用场景 五、与其他原则的关系 示例说明 自己理解 开闭原则 …...

RISCV虚拟化环境搭建

概要 本文记搭建 RISCV 虚拟化环境的流程。 整体架构 我们使用 QEMU 来模拟 RISCV 的各种硬件扩展环境,通过 QEMU 启动 Ubuntu 作为我们的 Host 来在 Host 之中通过 KVMTOOL 来运行 Guest,学习 RISCV 的虚拟化。 目前我的 X86_64 主机使用的是 Ubunt…...

数据结构——串、数组和广义表

串、数组和广义表 1. 串 1.1 串的定义 串(string)是由零个或多个字符组成的有限序列。一般记为 S a 1 a 2 . . . a n ( n ≥ 0 ) Sa_1a_2...a_n(n\geq0) Sa1​a2​...an​(n≥0) 其中,S是串名,单引号括起来的字符序列是串的值, a i a_i a…...

vue3 elementUi table自由渲染组件

文章目录 前言CustomTable如何使用tableColumn 属性h函数创建原生元素创建组件动态生成 前言 elementui中的table组件,表格中想要自由地渲染内容,是一种比较麻烦的事情,比如你表格中想要某一列插入一个button按钮,是不是要用插槽…...

Centos离线安装gcc

文章目录 Centos离线安装gcc1. gcc是什么?2. gcc下载地址3. gcc的安装4. 安装结果验证 Centos离线安装gcc 1. gcc是什么? GCC(GNU Compiler Collection)是 GNU 项目下的开源编译器套件,主要用于将 C、C 等编程语言的源…...

odbus TCP转Modbus RTU网关快速配置案例

Modbus TCP 转Modbus RTU网关快速配置案例 在工业自动化领域,Modbus 协议以其简洁和高效而著称,成为众多设备通信的首选。 随着技术的发展和应用场景的变化,Modbus 协议也发展出了不同的版本,其中 Modbus TCP 和 Modbus RTU 是两种…...

Unity3D开发AI桌面精灵/宠物系列 【一】 窗口透明化 背景剔除 、去边框、去Logo动画UI正常显示

Unity3D 交互式AI桌面宠物开发系列【一】 文章主要介绍怎么制作AI桌面宠物的流程,我会从项目开始创建初期到最终可以和AI宠物进行交互为止,项目已经开发完成,我会仔细梳理一下流程,分步讲解。 这篇文章主要讲初期一些设置和部署。…...

Vue 自定义指令深度解析与应用实践

文章目录 1. 自定义指令概述1.1 核心概念1.2 指令生命周期 2. 自定义指令基础2.1 指令注册2.2 指令使用 3. 指令钩子函数详解3.1 钩子函数参数3.2 钩子函数示例 4. 自定义指令应用场景4.1 表单自动聚焦4.2 权限控制4.3 图片懒加载 5. 高级应用技巧5.1 动态指令参数5.2 指令修饰…...

基于SpringBoot+Vue的幼儿园管理系统+LW示例参考

1.项目介绍 系统角色:管理员、教师、普通用户功能模块:用户管理、教师管理、班级管理、幼儿信息管理、会议记录管理、待办事项、职工考核、请假信息、缴费信息、体检管理、资源管理、原料管理、菜品信息管理等技术选型:SpringBoot&#xff0…...

超级课程表项目结尾

L3-17-05-main.py def __init__(self):app QApplication([])self.window QMainWindow()self.window.setWindowTitle("超级课程表")cusWidget CourseWidget()self.window.setCentralWidget(cusWidget)self.showCourse()self.showNotes()# 1. 创建菜单栏self.menuba…...

Spring Retry

1. Spring Retry 的工作原理 内部机制 Spring Retry 主要通过 AOP(面向切面编程)实现重试逻辑。以下是 Spring Retry 的内部工作流程: AOP 拦截器:当一个方法被标记为需要重试,并且该方法抛出了指定类型的异常时&am…...

16.使用读写包操作Excel文件:XlsxWriter 包

一 XlsxWriter 的介绍 XlsxWriter 只能写入 Excel 文件。 OpenPyXL 和 XlsxWriter 的区别在笔记 15 。 二 如何使用 XlsxWriter 1.导包 import datetime as dtimport xlsxwriterimport excel 2.实例化工作簿 book xlsxwriter.Workbook("xlxswriter.xlsx") book.clo…...

【最新版】智慧小区物业管理小程序源码+uniapp全开源

一.系统介绍 智慧小区物业管理小程序,包含小区物业缴费、房产管理、在线报修、业主活动报名、在线商城等功能。为物业量身打造的智慧小区运营管理系统,贴合物业工作场景,轻松提高物业费用收缴率,更有功能模块个性化组合,助力物业节约成本高效运营。 二.搭建环境 系统环…...

音视频入门基础:RTP专题(18)——FFmpeg源码中,获取RTP的音频信息的实现(上)

由于本文篇幅较长,分为上、下两篇。 一、引言 通过FFmpeg命令可以获取到SDP描述的RTP流的的音频压缩编码格式、音频压缩编码格式的profile、音频采样率、通道数信息: ffmpeg -protocol_whitelist "file,rtp,udp" -i XXX.sdp 而由《音视频入门…...

基于SpringBoot+Vue的驾校预约管理系统+LW示例参考

1.项目介绍 系统角色:管理员、普通用户、教练功能模块:用户管理、管理员管理、教练管理、教练预约管理、车辆管理、车辆预约管理、论坛管理、基础数据管理等技术选型:SpringBoot,Vue等测试环境:idea2024,j…...

基于k3s部署Nginx、MySQL、PHP和Redis的详细教程

先决条件 一台Linux服务器(或本地虚拟机),建议Ubuntu/CentOS基础命令行操作能力确保服务器有至少2GB内存和10GB磁盘空间 1. 安装k3s(极简Kubernetes) 1.1 一键安装 # 用root用户或sudo权限执行以下命令 curl -sfL h…...

21.多态

一、多态概念 多种形态。 静态多态:编译时多态。(函数重载) 动态多态:运行时多态。(继承关系下,调用父类指针或引用,对于不同的对象有不同的行为) 二、多态的定义及实现 1&#xff…...

无再暴露源站!群联AI云防护IP隐匿方案+防绕过实战

一、IP隐藏的核心原理 群联AI云防护通过三层架构实现源站IP深度隐藏: 流量入口层:用户访问域名解析至高防CNAME节点(如ai-protect.example.com)智能调度层:基于AI模型动态分配清洗节点,实时更新节点IP池回…...

新版AndroidStudio / IDEA上传项目到Gitee

目录 1.Gitee创建仓库 2.填写仓库的信息 3.创建成功后复制仓库的地址 4.检查AndroidStudio是否配置Git 5.点击测试 6.之后Create Git Repository 7.添加到本地仓库 8.提交项目 9.添加上传仓库的地址 10.上传成功 11.去Gitee上刷新检查 1.Gitee创建仓库 2.填写仓库的…...

学习threejs,使用MeshFaceMaterial面材质容器

👨‍⚕️ 主页: gis分享者 👨‍⚕️ 感谢各位大佬 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍⚕️ 收录于专栏:threejs gis工程师 文章目录 一、🍀前言1.1 ☘️THREE.MeshFaceMaterial 二…...

python微分方程求解,分别用显式欧拉方法、梯形法、改进欧拉方法、二阶龙格库塔方法、四阶龙格库塔方法求解微分方程

微分方程在自然科学、工程技术、社会科学等多个领域都有着广泛而重要的应用。而求解微分方程是数学与应用数据领域一大难题,对于一些复杂的微分方程无法通过计算推导计算其精确的方程表达式与 结果,因此,我们通过数学理论。迭代,微…...

【ubuntu】——wsl中使用windows中的adb

一、引言 在 Windows Subsystem for Linux(WSL)环境下工作时,有时需要使用 Android Debug Bridge(ADB)工具与 Android 设备进行交互。通过特定设置,能够在 WSL 中便捷地调用 Windows 系统中已安装的 ADB&a…...

Git 常用命令完全指南:从入门到高效协作

文章需要结构清晰,涵盖从入门到进阶的常用命令,结合实例和注意事项,帮助用户快速掌握Git的核心功能,并应用到实际项目中 一、仓库初始化与基础操作 1. 创建与克隆仓库 # 初始化本地仓库 git init# 克隆远程仓库(SSH方…...

学习单片机需要多长时间才能进行简单的项目开发?

之前有老铁问我,学单片机到底要多久,才能进行简单的项目开发?是三个月速成,还是三年磨一剑? 今天咱们就来聊聊这个话题,我不是什么高高在上的专家,就是个踩过无数坑、烧过几块板子的“技术老友”…...

面试系列|蚂蚁金服技术面【3】

今天继续分享一下蚂蚁金服的 Java 后端开发岗位真实社招面经,复盘面试过程中踩过的坑,整理面试过程中提到的知识点,希望能给正在准备面试的你一些参考和启发,希望对你有帮助,愿你能够获得心仪的 offer ! 第二轮面试之…...

Spring Boot项目中成功集成了JWT

JWT 原理解释 什么是 JWT? JSON Web Token(JWT)是一种开放标准(RFC 7519),用于在网络应用环境间安全地将信息作为JSON对象传输。JWT通常用于身份验证和信息交换。 JWT 的结构 JWT由三部分组成&#xff…...

《Java SQL 操作指南:深入理解 Statement 用法与优化》

在 Java 数据库编程中,Statement 是用于执行 SQL 语句的接口,允许程序与数据库进行交互。本文将详细介绍 Statement 的基本概念、常见用法以及 PreparedStatement 和 CallableStatement 等相关接口。 1. Statement 基本介绍 Statement 接口继承了 AutoC…...

element ui设置结束时间为23:59:59

开始时间为00:00:00结束时间为23:59:59 在请求接口前&#xff0c;用substring取结束时间的年月日&#xff0c;并替换时间值即可 <el-formref"searchForm":model"searchForm":inline"true"size"mini"keyup.enter.native"getDa…...

Matlab 舰载机自动着舰控制系统研究

1、内容简介 Matlab 188-舰载机自动着舰控制系统研究 可以交流、咨询、答疑 2、内容说明 略 3、仿真分析 略 4、参考论文 略...

数据集格式转换——json2txt、xml2txt、txt2json【复制就能用】

秋招面试专栏推荐 :深度学习算法工程师面试问题总结【百面算法工程师】——点击即可跳转 💡💡💡本专栏所有程序均经过测试,可成功执行💡💡💡 专栏地址:YOLO11入门 + 改进涨点——点击即可跳转 欢迎订阅 目录 json2txt脚本 xml2txt txt2json...

MySQL 横向衍生表(Lateral Derived Tables)

前面我们介绍过MySQL中的衍生表&#xff08;From子句中的子查询&#xff09;和它的局限性&#xff0c;MySQL8.0.14引入了横向衍生表&#xff0c;可以在子查询中引用前面出现的表&#xff0c;即根据外部查询的每一行动态生成数据&#xff0c;这个特性在衍生表非常大而最终结果集…...

基于llama.cpp的QwQ32B模型推理

基于llama.cpp的QwQ32B模型推理 llama.cpp项目主页&#xff1a; https://github.com/ggml-org/llama.cpp# llama.cpp源码下载 cd /root/lanyun-tmpgit clone https://github.com/ggml-org/llama.cpp#llama.cpp编译 llama.cpp是个C语言项目&#xff0c;实际调用过程需要先构建项…...

【Jmeter】使用教程

下载及安装 参考链接: JMeter下载及安装&#xff08;附插件及中文包超详细&#xff09; 参考链接: 【Jmeter】win 10 / win 11&#xff1a;Jmeter 下载、安装、汉化、新机迁移、版本更新&#xff08;Jmeter 4 以上版本均适用&#xff09; 分辨率的调整 参考链接: Jmeter5.3字…...

黑马商城完成随笔

完结撒花 &#x1f389; &#x1f389; &#x1f389; 差不多用了两三个星期&#xff1f;终于是完成了。 黑马商城体量应该是全部黑马项目中体量最多&#xff0c;技术栈最复杂的了。 可是仍然存在之前黑马项目的问题&#xff1a;不细致&#xff0c;不完整 很多技术栈的使用仅…...

【Python 算法零基础 1.线性枚举】

我装作漠视一切&#xff0c;以为这样就可以不在乎 —— 25.3.17 一、线性枚举的基本概念 1.时间复杂度 线性枚举的时间复杂度为 O(nm)&#xff0c;其中 n是线性表的长度。m 是每次操作的量级&#xff0c;对于求最大值和求和来说&#xff0c;因为操作比较简单&#xff0c;所以 …...

涨薪技术|Kubernetes(k8s)之Pod端口设置及资源配额

01端口设置 使用以下命令可以可以查看到到ports的子选项 [rootk8s-master01 ~]# kubectl explain pod.spec.containers.portsKIND: PodVERSION: v1RESOURCE: ports <[]Object>FIELDS:name <string> # 端口名称&#xff0c;如果指定&#xff0c;必须保证name在pod…...

七大常用智能家居协议对比

如果您不知道在项目中使用哪种智能家居通信协议&#xff0c;那么进入智能家居行业可能会很困难。如果没有合适的协议将其集成到智能家居生态系统中&#xff0c;智能家居设备将无法正常工作。否则&#xff0c;您将面临硬件和软件无法满足最终用户期望的风险。协议选择不当可能会…...

K8S快速部署

前置虚拟机环境正式部署BUG解决 前置虚拟机环境 每个虚拟机配置一次就好 #关闭防火墙 systemctl stop firewalld systemctl disable firewalld #关闭 selinux sed -i s/enforcing/disabled/ /etc/selinux/config # 永久 setenforce 0 # 临时 #关闭 swap swapoff -a # 临时 vi…...

TCP 三次握手四次挥手过程详解

注&#xff1a;本文为 “TCP 的三次握手与四次挥手” 相关文章合辑。 英文引文&#xff0c;机翻未校。 中文引文&#xff0c;未整理去重。 英文引文第二篇&#xff0c;实为国内《稀土掘金技术社区》文章&#xff0c;没检索到原文&#xff0c;此处 “出口转内销” 。 如有内…...

如何利用 Zeabur 实现 OceanBase 的一键部署

引言 Zeabur 是一个功能强大且即开即用的自动化部署平台&#xff0c;它不仅能迅速部署多种应用&#xff0c;还支持一键安装 MySQL、PostgreSQL 等数据库服务。 Zeabur 拥有众多国内外用户&#xff0c;如 AFFiNE、Bytebase 等企业客户&#xff0c;以及大量全栈和独立开发者。将…...

基于Springboot+服务器磁盘的本地文件存储方案

[local-file-system]基于服务器磁盘的本地文件存储方案 仅提供后端方案 github 环境 JDK11linux/windows/mac 应用场景 适用于ToB业务&#xff0c;中小企业的单体服务&#xff0c;仅使用磁盘存储文件的解决方案 仅使用服务器磁盘存储 与业务实体相结合的文件存储方案&…...

基于FPGA的3U机箱模拟量高速采样板ADI板卡,应用于轨道交通/电力储能等

板卡简介&#xff1a; 本板为模拟量高速采样板&#xff08;ADI&#xff09;&#xff0c;主要用于电机转速和相电流检测&#xff0c;以实现电机闭环控制。 性能规格&#xff1a; 电源&#xff1a;DC5V&#xff0c;DC3.3V&#xff0c;DC15V&#xff0c;DC24V FPGA&#xff1a;…...

泰勒·斯威夫特(Taylor Swift)的音乐影响力与商业版图深度研究

泰勒斯威夫特的音乐影响力与商业版图深度研究 简介 泰勒斯威夫特&#xff08;Taylor Swift&#xff09;是当今流行音乐领域最具影响力的全球巨星之一。自少年时期出道以来&#xff0c;她在音乐风格、形象和商业战略上不断演变&#xff0c;从乡村音乐新人成长为引领流行文化的…...

神经网络微调技术解析

神经网络微调技术 微调&#xff08;Fine-tuning&#xff09;是迁移学习的核心技术&#xff0c;通过在预训练模型基础上调整参数&#xff0c;使其适应特定任务或领域。以下从传统方法、参数高效微调&#xff08;PEFT&#xff09;、新兴技术三个维度展开&#xff0c;覆盖主流技术…...

鸿蒙路由 HMRouter 配置及使用 三 全局拦截器使用

1、前期准备 简单封装一个用户首选项的工具类 import { preferences } from "kit.ArkData";// 用户首选项方法封装 export class Preferences {private myPreferences: preferences.Preferences | null null;// 初始化init(context: Context, options: preference…...

国科大——计网(0812)——考试真题

前沿&#xff1a; 此篇文章记录了国科大秋季学期计网&#xff08;0812&#xff09;课程的一些考试真题&#xff0c;某些题目的答案仅供参考&#xff0c;还请自行辨别。 备注&#xff1a; 计网的考试题一般都会多一道&#xff0c;每道题的分值相同&#xff0c;例如&#xff1a;…...

Feedback-Guided Autonomous Driving

Feedback-Guided Autonomous Driving idea 问题设定&#xff1a;基于 CARLA 的目标驱动导航任务&#xff0c;通过知识蒸馏&#xff0c;利用特权智能体的丰富监督信息训练学生传感器运动策略函数 基于 LLM 的端到端驱动模型&#xff1a;采用 LLaVA 架构并添加航点预测头&#…...

超参数优化算法:scikit-opt库、Scikit-Optimize库

1 scikit-opt库&#xff1a;https://www.cnblogs.com/luohenyueji/p/18333387 https://blog.csdn.net/weixin_45750972/article/details/124683402 a 差分进化算法 (Differential Evolution)&#xff1a;一种基于群体搜索的优化算法&#xff0c;通过模拟生物进化的过程来寻找最…...

我与DeepSeek读《大型网站技术架构》- 大型网站架构技术一览与Web开发技术发展历程

文章目录 大型网站架构技术一览1. 前端架构2. 应用层架构3. 服务层架构4. 存储层架构5. 后台架构6. 数据采集与监控7. 安全架构8. 数据中心机房架构 Web开发技术发展历程一、静态HTML阶段二、CGI脚本模式阶段三、服务器页面模式阶段 大型网站架构技术一览 1. 前端架构 浏览器…...

解决QT_Debug 调试信息不输出问题

方式1 &#xff1a;手动通过添加环境变量解决 ->使用命令&#xff1a; QT_LOGGING_TO_CONSOLE1 qtcreator启动 ->如若还未输出qDebug调试信息 则在程序中引<QLoggingCategory>包 #include <QLoggingCategory> ->在程序入口添加 QLoggingCategory::defa…...