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

MVC 模式深度解析与 Spring 框架实践研究

MVC 模式深度解析与 Spring 框架实践研究

摘要

MVC(Model-View-Controller)模式作为软件工程中最重要的架构模式之一,通过将应用逻辑划分为模型、视图和控制器三个独立组件,实现了代码的高内聚低耦合,显著提升了软件的可维护性和可扩展性。本文从 MVC 模式的核心思想出发,结合 Spring 框架中的经典实现 Spring MVC,通过理论分析与源码解析相结合的方式,深入探讨 MVC 模式在 Web 开发中的实践应用。首先梳理 MVC 模式的基本概念和核心原理,其次以 Spring MVC 为案例分析其架构设计与组件协作机制,最后通过源码级解析揭示 Spring MVC 如何实现 MVC 模式的最佳实践。本文旨在为开发者提供从架构设计到框架源码的完整认知路径,帮助理解 MVC 模式在现代 Web 开发中的核心价值。

第一章 引言

1.1 MVC 模式的发展背景

随着软件复杂度的不断提升,传统单体应用的代码耦合度问题日益凸显。1978 年,Trygve Reenskaug 在 Smalltalk 环境中首次提出 MVC 模式,其核心目标是分离数据处理、用户界面和交互逻辑,使不同角色的开发者(如后端工程师、前端工程师、UI 设计师)能够专注于各自领域,同时降低系统变更的成本。历经数十年发展,MVC 模式已成为 Web 开发、桌面应用、移动应用的主流架构模式之一,尤其在 Java EE 生态中,Spring MVC、Struts 等框架的普及使其成为企业级应用开发的标配。

1.2 研究目标与意义

本文的研究目标是通过理论与实践结合的方式,揭示 MVC 模式的本质特征及其在 Spring 框架中的创新实现。具体包括:

  1. 解析 MVC 模式的核心组件与交互逻辑,明确各组件的职责边界;
  2. 以 Spring MVC 为案例,分析其如何将 MVC 理论转化为可落地的框架设计;
  3. 通过源码级分析,揭示 Spring MVC 的请求处理流程、组件协作机制及扩展点设计;
  4. 总结 MVC 模式的适用场景与最佳实践,为开发者提供架构设计参考。

第二章 MVC 模式核心原理

2.1.1 模型(Model)
  • 职责:封装应用的核心业务逻辑与数据状态,负责处理数据的创建、更新和查询;
  • 特性:与视图和控制器解耦,不依赖具体的 UI 框架,可复用性高;
  • 示例:在 Web 应用中,Model 可以是一个 Java Bean(如 User 类),包含业务逻辑的 Service 层(如 UserService)。
2.1.2 视图(View)
  • 职责:负责数据的展示与用户交互,将 Model 的状态转换为用户可见的界面;
  • 特性:关注 “如何展示”,可以是 HTML 页面、移动端界面或 API 返回的 JSON 数据;
  • 示例:JSP 页面、Thymeleaf 模板、Vue 组件或 RestController 返回的 ResponseBody。
2.1.3 控制器(Controller)
  • 职责:作为 Model 与 View 的桥梁,接收用户输入,调用 Model 处理业务逻辑,选择合适的 View 进行展示;
  • 特性:关注 “如何响应”,负责请求路由、参数解析、异常处理等控制逻辑;
  • 示例:Spring MVC 中的 @Controller 注解类,处理 HTTP 请求的方法(如 @RequestMapping 标注的方法)。

2.2 组件交互流程

MVC 模式的核心交互逻辑可分为以下步骤:

  1. 用户请求:用户通过 View 发起操作(如点击按钮、提交表单);
  2. 控制器接收请求:View 将用户输入传递给 Controller,Controller 解析请求参数;
  3. 模型处理业务:Controller 调用 Model 的业务方法,更新数据或获取结果;
  4. 选择视图:Controller 根据处理结果选择对应的 View,并将 Model 数据传递给 View;
  5. 视图渲染:View 从 Model 中获取数据,渲染出最终界面并展示给用户。

2.3 MVC 模式的优势与挑战

优势:
  • 分离关注点:不同组件职责明确,降低代码耦合度,便于团队协作;
  • 可复用性:Model 可独立于 UI 层复用,View 可通过更换模板引擎实现界面重构;
  • 可测试性:Controller 和 Model 可通过单元测试独立验证,无需依赖复杂的 UI 环境;
  • 扩展性:新增功能时只需修改对应组件,如新增 View 无需改动 Model 逻辑。
挑战:
  • 理解成本:初学者需要理解三组件的协作机制,初期开发可能需要编写更多模板代码;
  • 过度设计风险:对于简单应用(如单页面工具),MVC 的分层可能增加不必要的复杂度;
  • 视图与控制器的耦合:在传统 Web MVC 中,Controller 需显式指定 View 名称,若视图层技术变更(如从 JSP 切换到 Thymeleaf),可能需要修改 Controller 逻辑。

第三章 Spring MVC 案例分析

3.1 Spring MVC 架构概览

Spring MVC 是 Spring 框架中用于构建 Web 应用的模块,其设计严格遵循 MVC 模式,同时融入了 Spring 生态的核心特性(如依赖注入、AOP)。

3.1.1 中央调度器:DispatcherServlet
  • 角色:作为请求处理的入口,负责协调各组件完成请求处理;
  • 核心职责:接收所有 HTTP 请求,根据 HandlerMapping 找到对应的处理器(Handler),调用 HandlerAdapter 执行处理器,最终将 ModelAndView 传递给 ViewResolver 渲染视图。
3.1.2 处理器映射器:HandlerMapping
  • 职责:将 HTTP 请求映射到具体的处理器(如 Controller 中的方法);
  • 实现类
    • RequestMappingHandlerMapping:基于 @GetMapping、@PostMapping 等注解配置路由;
    • BeanNameUrlHandlerMapping:将 Controller Bean 的名称映射为 URL(较旧的方式)。
3.1.3 处理器适配器:HandlerAdapter
  • 职责:为不同类型的处理器(如 @Controller、@RequestMapping 方法、传统 Controller 接口)提供统一的调用接口;
  • 实现类
    • RequestMappingHandlerAdapter:处理基于 @Controller 和 @RequestMapping 注解的处理器;
    • SimpleControllerHandlerAdapter:处理实现了 Controller 接口的老式处理器。
3.1.4 视图解析器:ViewResolver
  • 职责:根据 ModelAndView 中的视图名称,解析为具体的 View 实现(如 JSP、Thymeleaf 视图);
  • 实现类
    • InternalResourceViewResolver:解析为 JSP 视图,生成InternalResourceView
    • ThymeleafViewResolver:与 Thymeleaf 模板引擎集成,生成 ThymeleafView。
3.1.5 处理器(Handler)
  • 形式:可以是标注了 @Controller 的 Bean 中的方法(推荐方式),也可以是实现了org.springframework.web.servlet.mvc.Controller接口的类;
  • 核心注解:@RequestMapping、@GetMapping、@PostMapping 等,用于定义请求路径和处理方法。

3.2 请求处理流程详解

以一个典型的 HTTP GET 请求为例,Spring MVC 的处理流程如下(结合图 3-1):

  1. 浏览器发送请求:用户访问/user/1,请求到达 DispatcherServlet(通过 web.xml 或 Spring Boot 自动配置注册)。
  2. 查找处理器:DispatcherServlet 调用 HandlerMapping,根据 URL/user/1找到对应的处理器(假设是UserController.getUser(1)方法)。
  3. 调用处理器适配器:DispatcherServlet 根据处理器类型选择对应的 HandlerAdapter(如 RequestMappingHandlerAdapter),调用其handle()方法。
  4. 执行处理器方法:HandlerAdapter 解析请求参数(如 @PathVariable 获取路径变量 1),调用 Controller 方法,获取 ModelAndView(包含数据模型和视图名称)。
  5. 解析视图:DispatcherServlet 将 ModelAndView 传递给 ViewResolver,解析为具体的 View(如/WEB-INF/views/user.jsp对应的 InternalResourceView)。
  6. 渲染视图:View 使用 Model 数据进行渲染(如 JSP 中的${user.name}),生成最终的 HTML 响应。
  7. 返回响应:渲染后的结果通过 HttpServletResponse 返回给浏览器。

3.3 案例:用户管理系统

3.3.1 模型层(Model)
// User.java  
public class User {  private Long id;  private String name;  private int age;  // getter/setter  
}  // UserService.java  
@Service  
public class UserService {  public User getUserById(Long id) {  // 模拟数据库查询  return new User(id, "张三", 25);  }  
}  
3.3.2 控制器层(Controller)
@Controller  
@RequestMapping("/user")  
public class UserController {  @Autowired  

相关文章:

MVC 模式深度解析与 Spring 框架实践研究

MVC 模式深度解析与 Spring 框架实践研究 摘要 MVC(Model-View-Controller)模式作为软件工程中最重要的架构模式之一,通过将应用逻辑划分为模型、视图和控制器三个独立组件,实现了代码的高内聚低耦合,显著提升了软件的可维护性和可扩展性。本文从 MVC 模式的核心思想出发…...

驱动开发硬核特训 · Day 11(下篇):从 virtio_blk 看虚拟总线驱动模型的真实落地

🔍 B站相应的视屏教程: 📌 内核:博文视频 - 总线驱动模型实战全解析 敬请关注,记得标为原始粉丝。 🔧 在上篇中,我们已经从理论视角分析了“虚拟总线驱动模型”在 Linux 驱动体系中的独特定位。…...

Java实现快速排序算法

用「整理书架」理解快速排序原理 想象你有一堆杂乱的书需要按大小排序,快速排序的步骤可以类比为: 1. 选一本“基准书”(比如最右侧的书) 2. 把书分成三堆: - 左边:比基准小的书 - 中间:基…...

3.3.2 应用层协议设计protobuf(二进制序列化协议)

文章目录 3.3.2 应用层协议设计protobuf(二进制序列化协议)1. 什么是协议设计什么是协议为什么说进程间通信就需要协议,而不是客户端与服务端之间为什么需要自己设计协议 2. 判断消息的完整性->区分消息的边界1.固定长度2. 特定符号3. 固定…...

软件测试过程模型:v模型、w模型、x模型、H模型

软件测试流程 获取测试需求编写测试计划制定测试方案开发和设计测试用例执行测试提交缺陷报告测试分析与评审提交测试报告准备下一版本测试 软件测试过程模型 v模型 【V模型是线性的操作方式】 优点: 验收测试的标准是用户的需求,用户需求对应指导…...

设计模式-代理模式

虚代理 根据需要创建对象...

cocos Spine资源及加载

COCOS Spine 资源加载 创建 Canvas 以及Camera 再进行spine 拖入 提供40个实战酷炫技能spine文件: Spine文件下载...

约翰·麦卡锡:我的人工智能之梦

名人说:路漫漫其修远兮,吾将上下而求索。—— 屈原《离骚》 创作者:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 约翰麦卡锡:我的人工智能之梦 一、引言:计算机科学的传奇人物…...

Scrapy结合Selenium实现搜索点击爬虫的最佳实践

一、动态网页爬取的挑战 动态网页通过JavaScript等技术在客户端动态生成内容,这使得传统的爬虫技术(如requests和BeautifulSoup)无法直接获取完整的内容。具体挑战包括: 数据加载异步化:数据并非一次性加载&#xff…...

Oracle数据库数据编程SQL<9.3 数据库逻辑备份和迁移Data Pump (EXPDP/IMPDP) 导出、导入补充>

Oracle Data Pump 是 Oracle 10g 引入的高效数据迁移工具,相比传统的 EXP/IMP 工具,它提供了更强大的功能和显著的性能提升。以下是对 EXPDP 和 IMPDP 工具的全面讲解。 目录 一、高级功能扩展 1. 数据过滤与转换 2. 加密与安全 二、性能调优进阶 1. 并行处理优化 2. …...

Vue 3 + TypeScript 实现一个多语言国际化组件(支持语言切换与内容加载)

文章目录 一、项目背景与功能概览二、项目技术架构与依赖安装2.1 技术栈2.2 安装依赖 三、国际化组件实现3.1 创建 i18n 实例3.2 配置 i18n 到 Vue 应用3.3 在组件中使用国际化内容3.4 支持语言切换 四、支持类型安全4.1 添加类型支持4.2 自动加载语言文件 一、项目背景与功能概…...

RK3506+net9+VS2022跨平台调试C#程序

下载GetVsDbg.sh ,这脚本会下载一个压缩包,然后解压缩,设置x权限等等。但是目标板子连不上,就想办法获取到下载路径,修改这个脚本,显示这个下载链接后,复制一下,用电脑下下来 修改好…...

c# 反射及优缺点

在C#中,反射(Reflection)是一种强大的机制,允许程序在运行时检查其自身的结构(如类型、属性、方法等),以及动态地调用对象的方法或访问其属性。反射主要用于那些在编译时不知道具体类型信息&…...

基于SpringBoot的在线教育系统

作者:计算机学姐 开发技术:SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等,“文末源码”。 专栏推荐:前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码、微信小程序源码 精品专栏:…...

吴恩达深度学习复盘(16)决策树|节点纯度与熵

决策树简介 决策树算法在很多应用中被使用,机器学习比赛中会经常见到,但在流行病学领域未受到太多关注。 决策树示例 —— 猫的分类 以经营猫收养中心为例,通过动物的耳朵形状、脸型、是否有胡须等特征,来训练一个分类器判断动…...

C++基础精讲-07

文章目录 1. const对象2. 指向对象的指针3. 对象数组4. c中const常见用法总结4.1 修饰常量4.2 修饰指针4.3 修饰函数参数4.4 修饰函数返回值4.5 修饰成员函数4.6 const对象 5. 赋值运算符函数(补充)5.1 概念5.2 默认赋值运算符函数局限5.3 解决办法 1. c…...

100个有用的AI工具 之 生成透明图像LayerDiffuse

Stable Diffusion是开源图像生成界的扛把子,最强的地方在于它的可控性,通过ControlNet,和一系列插件,可以非常精准地控制图像生成的需求。 今天介绍的是SD的一个插件LayerDiffuse,它可以帮助我们用SD生成透明的png图层。我们在用PS抠图的时候,对于头发、毛绒边这种图是非…...

springboot和springcloud的区别

1. ‌目的与功能‌ ‌1)Spring Boot‌: 主要用于快速构建独立的、生产级的 Spring 应用程序。它通过自动配置和嵌入式服务器等特性,简化了微服务的开发、启动和部署,使开发者能够专注于业务逻辑而非繁琐的配置。‌Spring Boot是一个快速开发的框架,旨在简化Java应用程序的开…...

前端操作document的小方法,主要功能-获取当前页面全部的a标签页,并根据链接中必要的字段进行判断,然后把这些链接放入iframe去打开

首先是一些小方法,有一个问题就是在不同源的页面中无法获取iframe中的dom const isInIframe window.parent ! window.self; console.log(是否在 iframe 中:, isInIframe); console.log(来源页面:, document.referrer); const isSame new URL(document.referrer).o…...

RocketMQ 03

今天是2025/04/14 21:58 day 20 总路线请移步主页Java大纲相关文章 今天进行RocketMQ 6,7,8 个模块的归纳 最近在忙毕设,更新有点慢,见谅 首先是RocketMQ 的相关内容概括的思维导图 6. 安全机制 6.1 ACL 访问控制 核心功能 权限分级:通过…...

基于项目管理的轻量级目标检测自动标注系统【基于 YOLOV8】

🐱 AILabeler 是一个轻量级目标检测标注系统,专为 YOLO 系列模型设计,支持图像上传、标注框管理、类别设置、自动标注(YOLOv8)、导出多格式训练数据等功能。 项目已经发布至https://github.com/as501226107/AILabeler&…...

针对 Java从入门到精通 的完整学习路线图、各阶段技术点、CTO进阶路径以及经典书籍推荐。内容分阶段展开,兼顾技术深度与职业发展

以下是针对 Java从入门到精通 的完整学习路线图、各阶段技术点、CTO进阶路径以及经典书籍推荐。内容分阶段展开,兼顾技术深度与职业发展。 一、学习路线图分阶段详解 阶段1:Java基础入门(3-6个月) 目标:掌握Java核心…...

深度学习总结(13)

选择损失函数 为问题选择合适的损失函数,这是极其重要的。神经网络会采取各种方法使损失最小化,如果损失函数与成功完成当前任务不完全相关,那么神经网络最终的结果可能会不符合你的预期。因此,一定要明智地选择损失函数&#xf…...

AI测试引擎中CV和ML模型的技术架构

技术架构概述 1. 数据采集层 此层负责收集各种类型的数据,为后续的模型训练和测试提供基础。对于CV模型,主要采集图像、视频数据,可来源于摄像头、图像数据库等;对于ML模型,采集结构化数据(如表格数据)、非结构化数据(如文本数据)等,数据来源包括业务系统日志、传感…...

业务架构发展历史及相关技术应用介绍

1,单体架构 企业处于发展初期阶段,业务的开发量与用户的访问量较少的情况下,通常情况会将业务编写在一个应用中,由一个web容器完成部署调用。如下图,一个应用中所有的功能模块写在一个war包中,功能模块的代…...

Java栈与队列深度解析:结构、实现与应用指南

一、栈与队列核心概念对比 特性栈 (Stack)队列 (Queue)数据原则LIFO(后进先出)FIFO(先进先出)核心操作push(入栈)、pop(出栈)、peek(查看栈顶)offer(入队)、poll(出队)、peek(查看队首)典型应用函数调用栈、括号匹配、撤销操作任…...

CentOS DVD完整版与Minimal版的区别

文章目录 一、体积与内置软件:从“大而全”到“小而精”二、安装体验:开箱即用 vs 高度定制三、适用场景:桌面与服务器的分水岭四、后续配置:时间成本的权衡五、性能与资源占用六、推荐新手下载完整版建议: 在 CentOS…...

AI日报 - 2025年4月13日

🌟 今日概览(60秒速览) ▎🤖 AGI突破 | OpenAI CFO称AGI可能已到来 Sarah Friar透露Sam Altman认为AGI潜力尚未完全发挥,引发行业热议 ▎💼 商业动向 | OpenAI开发新型AI工程师A-SWE 超越Copilot,能独立完成应用构建、…...

有哪些基于solidity的应用

🔥 Solidity 常见应用分类(附例子) 🏦 1. DeFi(去中心化金融) Solidity 的最大应用场景之一。 项目功能示例合约逻辑Uniswap去中心化交易所(AMM)流动性池、定价算法、swap函数Aave /…...

mybatis--多对一处理/一对多处理

多对一处理(association) 多个学生对一个老师 对于学生这边,关联:多个学生,关联一个老师[多对一] 对于老师而言,集合,一个老师有多个学生【一对多】 SQL: 测试环境搭建 1.导入依…...

中兴B860AV3.2-U-晶晨S905L3B芯片-安卓9.0-2+8G-线刷固件包

中兴B860AV3.1-U/B860AV3.2-U--晶晨S905L3B芯片-安卓9.0-28G-线刷固件包 线刷方法:(新手参考借鉴一下) 1、准备好一根双公头USB线刷刷机线,长度30-50CM长度最佳,同时准备一台电脑; 2、电脑上安…...

资源分配不均,如何优化

优化资源分配需要关注资源需求评估精准性、资源调度合理性、实时监控与反馈机制、沟通协调的高效性以及持续改进的管理理念。其中,资源需求评估精准性最为关键。精准的资源需求评估意味着对项目各阶段所需资源的准确把控,这能有效防止资源过剩或短缺现象…...

Kimi-VL 解读:高效 MoE 视觉语言模型VLM,兼顾长上下文与高分辨率

写在前面:一起读多模态大模型Kimi-VL Moonshot AI 推出了 Kimi-VL,一个高效的、开源的、基于混合专家(MoE)架构的视觉语言模型。Kimi-VL 旨在解决上述痛点,它具备以下几个核心特点: 高效 MoE 架构:语言解码器采用 MoE 架构,在保持强大能力的同时,显著降低了推理时的激…...

2024团体程序设计天梯赛L3-1 夺宝大赛

L3-037 夺宝大赛 分数 30 作者 陈越 单位 浙江大学 夺宝大赛的地图是一个由 nm 个方格子组成的长方形,主办方在地图上标明了所有障碍、以及大本营宝藏的位置。参赛的队伍一开始被随机投放在地图的各个方格里,同时开始向大本营进发。所有参赛队从一个方格…...

SpringBoot DevTools:开发工具与热部署机制

文章目录 引言一、Spring Boot DevTools概述二、自动重启机制2.1 工作原理2.2 自定义重启触发器 三、LiveReload支持3.1 浏览器自动刷新3.2 与前端框架集成 四、属性默认值调整4.1 缓存配置4.2 日志配置 五、远程开发支持5.1 配置远程应用5.2 使用远程客户端 总结 引言 在Java…...

PyCharm 开发工具 修改字体大小及使用滚轮没有反应

PyCharm 开发工具 修改字体大小及使用滚轮没有反应 提示:帮帮志会陆续更新非常多的IT技术知识,希望分享的内容对您有用。本章分享的是Python基础语法。前后每一小节的内容是有学习/理解关联性,希望对您有用~ PyCharm 开发工具 修改字体大小及…...

小刚说C语言刷题——每日一题东方博宜1000熟悉OJ环境

1.题目描述 2.参考代码(C语言版&#xff09; #include <stdio.h> int main(void) { //定义两个整型变量num1和num2 int num1,num2; int sum;//定义两个数的和sum //下面语句表示输入两个数字 scanf("%d%d",&num1,&num2); sumnum1num…...

Ubuntu安装Docker容器,通过Tomcat部署项目

温馨提示&#xff1a;本教程不是最完美的&#xff0c;只能说是填鸭式教育&#xff0c;仅仅让你快速部署Docker的tomcat项目。 *******命令行需要一行一行操作哟&#xff01;&#xff01;&#xff01;******* 一、检查Ubuntu本地的Tomcat能发正常打开项目 1.1 检查本地tomcat是…...

ubuntu22.04安装zabbix7.0

一、安装repository wget https://repo.zabbix.com/zabbix/7.0/ubuntu/pool/main/z/zabbix-release/zabbix-release_latest_7.0ubuntu24.04_all.deb dpkg -i zabbix-release_latest_7.0ubuntu24.04_all.deb apt update二、安装Zabbix server&#xff0c;Web前端&#xff0c;ag…...

AIGC工具平台-建筑平面图3D渲染

本模块是一款智能化的建筑设计辅助工具&#xff0c;可将任意房屋平面设计图快速转换为高品质3D渲染效果图&#xff0c;让建筑设计更加直观、高效。用户无需复杂的3D建模操作&#xff0c;仅需上传房屋平面图&#xff0c;系统即可一键生成符合实际尺度的3D渲染效果&#xff0c;精…...

OpenGL学习笔记(立方体贴图、高级数据、高级GLSL)

目录 立方体贴图天空盒环境映射斯涅尔定律&#xff08;Snells Law&#xff09;菲涅尔效应&#xff08;Fresnel Effect&#xff09;动态环境贴图 高级数据分批顶点属性复制缓冲 高级GLSL顶点着色器变量片段着色器变量接口块Uniform缓冲对象Uniform块布局使用Uniform缓冲测试 Git…...

嵌入式进阶:如何选择合适的开发平台?

随着现代工业、物联网以及人工智能技术的迅速发展&#xff0c;嵌入式系统已经由简单的控制器向复杂的高性能系统迈进。从传统家电到智能机器人、从自动驾驶汽车到工业自动化&#xff0c;每一项应用都对嵌入式系统的响应速度、运行稳定性和能耗管理提出了更高要求。在这种背景下…...

CVPR‘25 SOTA——GoalFlow论文精读

1&#xff09;第一遍___粗读 Q: 这篇论文试图解决什么问题&#xff1f; A: 这篇论文提出了一个名为 GoalFlow 的端到端自动驾驶方法&#xff0c;旨在解决自动驾驶场景中高质量多模态轨迹生成的问题。具体而言&#xff0c;它试图解决以下问题&#xff1a; 轨迹选择的复杂性&am…...

vue3 onMounted 使用方法和注意事项

基础用法 / 语法糖写法 <script> import { onMounted } from vue;// 选项式 API 写法 export default {setup() {onMounted(() > {console.log(组件已挂载);});} } </script><script setup> onMounted(() > {console.log(组件已挂载); }); </scrip…...

【ubuntu】linux开机自启动

目录 开机自启动&#xff1a; /etc/rc.loacl system V 使用/etc/rc*.d/系统运行优先级 遇到的问题&#xff1a; 1. Linux 系统启动阶段概述 方法1&#xff1a;/etc/rc5.d/ 脚本延时日志 方法二&#xff1a;使用 udev 规则来触发脚本执行 开机自启动&#xff1a; /etc/…...

OpenCV day2

Matplotlib相关知识 Matplotlib相关操作&#xff1a; import numpy as np from matplotlib import pyplot as pltx np.linspace(0, 2 * np.pi, 100) y1 np.sin(x) y2 np.cos(x)# 使用红色虚线&#xff0c;圆点标记&#xff0c;线宽1.5&#xff0c;标记大小为6绘制sin plt.p…...

OpenCV 图形API(31)图像滤波-----3x3 腐蚀操作函数erode3x3()

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 使用3x3矩形结构元素腐蚀图像。 该函数通过使用中心作为锚点的3x3矩形结构元素来腐蚀源图像。腐蚀操作可以应用多次&#xff08;迭代&#xff0…...

机器学习概述自用笔记(李宏毅)

机器学习概述 机器学习即找一个复杂的人类写不出来的函数&#xff0c;把输入&#xff08;向量&#xff0c;矩阵&#xff0c;序列&#xff09;转换为输出。 regression&#xff1a;输出是一个数值&#xff08;预测PM2.5的数值&#xff09; classification&#xff1a;选择设置…...

大数据面试问答-Spark

1. Spark 1.1 Spark定位 "Apache Spark是一个基于内存的分布式计算框架&#xff0c;旨在解决Hadoop MapReduce在迭代计算和实时处理上的性能瓶颈。 1.2 核心架构 Spark架构中有三个关键角色&#xff1a; Driver&#xff1a;解析代码生成DAG&#xff0c;协调任务调度&a…...

UE5 设置父物体和解除父子关系(移除子物体)

文章目录 设置父物体解除父子关系 Acotor类似于untiy的objecttransfrom&#xff0c;可以用来进行父子操作 设置父物体 Actor attach to Actor节点 解除父子关系 Detach From Actor...