spring MVC 至 springboot的发展流程,配置文件变化
spring mvc
Spring MVC 是 Spring 框架中的一个重要模块,用于构建基于 Java 的 Web 应用程序。它基于 MVC(Model-View-Controller)设计模式,提供了灵活、可配置的方式来开发动态网页或 RESTful 服务
ssm
SSM 框架 是 Java Web 开发中常用的三大框架整合方案,由 Spring、Spring MVC 和 MyBatis 组成,用于构建高效、松耦合的企业级应用。
项目结构
其中,web.xml的配置文件在WEB-INF这个文件夹的根目录里
springMVC.xml配置文件在src文件夹的config包下
mybatis-config.xml文件夹在src的目录下
这是三个配置
前端
这里前端采用jsp,那么什么是jsp文件
前端就是我们运行后的登陆注册按钮,还有登录注册的输入框,是这几个东西
配置文件
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:tx="http://www.springframework.org/schema/tx"xmlns:context="http://www.springframework.org/schema/context"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/txhttp://www.springframework.org/schema/tx/spring-tx.xsdhttp://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"><!-- 配置数据源,使用dpcp数据库连接池 由于建立传统数据库连接是一个非常耗时耗资源的行为,所以通过连接池预先同数据库建立一些连接,放在内存中,应用程序需要建立数据库连接时直接到连接池中申请一个就行--><bean id="dataSource" class="org.apache.commons.dbcp2.BasicDataSource"><property name="driverClassName" value="com.mysql.jdbc.Driver" /><property name="url" value="jdbc:mysql://localhost:3306/test?characterEncoding=utf8" /><property name="username" value="root" /><property name="password" value="root" /><!-- 最大连接数 --><property name="maxTotal" value="30" /><!-- 最大空闲连接数 --><property name="maxIdle" value="10" /><!-- 初始化连接数 --><property name="initialSize" value="5" /></bean><!-- 添加事务支持 --><bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"><property name="dataSource" ref="dataSource" /></bean><!-- 开启事务注解 <tx:annotation-driven transaction-manager="txManager" /> --><!-- 配置MyBatis工厂,同时指定数据源,并与MyBatis完美整合 --><bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"><property name="dataSource" ref="dataSource" /><!-- configLocation的属性值为MyBatis的核心配置文件 ,用于绑定MyBatis的核心配置文件--><property name="configLocation" value="classpath:config/mybatis-config.xml" /></bean><!--Mapper代理开发,MapperScannerConfigurer将包中所有接口自动装配为MyBatis映射接口Mapper的实现类的实例(映射器),所有映射器都被自动注入SqlSessionFactory实例,同时扫描包中SQL映射文件(.xml)-替代实现类 --><bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"><!-- 注入要扫描的包,mybatis-spring组件的扫描器,basePackage:属性可以包含多个包名,多个包名之间可以用逗号或分号隔开 --><property name="basePackage" value="com.dao" /><!-- 注入 sqlSessionFactory--><property name="sqlSessionFactoryBeanName" value="sqlSessionFactory" /></bean></beans>
您提供的项目结构图展示了一个典型的 传统 Spring MVC + MyBatis(SSM)整合项目,这种结构是经过多年 Java Web 开发实践逐步演进而来的。以下是分阶段解析其整合逻辑和演进过程:
1. 为什么能这样整合?
(1) 技术栈的互补性
技术 | 职责 | 整合点 |
---|---|---|
Spring | 容器管理(IoC/AOP)、事务控制 | 通过 applicationContext.xml 统一管理 Bean(Service、DAO、数据源等)。 |
Spring MVC | 处理 HTTP 请求和视图渲染 | 通过 DispatcherServlet 和 springMVC.xml 配置控制器和视图解析。 |
MyBatis | 数据库持久化操作 | 通过 SqlSessionFactoryBean 与 Spring 数据源整合,Mapper 接口自动注入。 |
(2) 分层架构的清晰边界
表现层(Spring MVC) → 业务层(Spring) → 持久层(MyBatis)
• 解耦设计:各层通过接口通信,依赖 Spring 的依赖注入(DI)连接。
• 配置分离:
• web.xml
配置 Web 容器(如 Tomcat)。
• springMVC.xml
专注 MVC 相关配置。
• mybatis-config.xml
专注 SQL 映射和别名。
2. 是否是一步步进化的?
是的!这种结构是传统 Java Web 开发逐步优化的结果,以下是典型演进阶段:
阶段 1:纯 Servlet + JDBC(原始阶段)
• 结构特点:
• 所有逻辑写在 Servlet
中。
• 手动管理数据库连接(DriverManager.getConnection()
)。
• 问题:
• 代码臃肿,难以维护。
• 资源泄露风险高。
阶段 2:引入 MVC 分层(JSP + Servlet + JavaBean)
• 改进点:
• JSP 负责视图,Servlet 负责控制,JavaBean 封装数据。
• 使用连接池(如 DBCP)管理数据库连接。
• 遗留问题:
• 仍需手动编写大量 JDBC 模板代码。
阶段 3:引入框架(Spring + MyBatis)
• 关键优化:
-
Spring 整合:
◦ 通过 IoC 容器管理对象生命周期。◦ 声明式事务(
@Transactional
)替代手动事务代码。 -
MyBatis 替代 JDBC:
◦ SQL 与 Java 代码分离(Mapper XML)。◦ 动态 SQL 支持。
-
Spring MVC 替代 Servlet:
◦ 注解驱动(@Controller
)简化请求映射。◦ 视图解析器自动处理 JSP 路径。
阶段 4:配置优化(逐步精简)
• 演进示例:
• 从多个 XML 文件(如 spring-dao.xml
、spring-service.xml
)合并为统一的 applicationContext.xml
。
• 使用注解(如 @Service
、@Autowired
)替代 XML Bean 定义。
3. 项目结构图中的进化痕迹
(1) 配置文件的分布
文件 | 演进意义 |
---|---|
web.xml | 保留传统 Java EE 的部署描述符,但仅配置 DispatcherServlet (简化)。 |
springMVC.xml | 分离 MVC 相关配置,体现关注点分离思想。 |
mybatis-config.xml | 保留 MyBatis 原生配置,但通过 Spring 的 SqlSessionFactoryBean 整合。 |
(2) 包结构的组织
com.controller → com.service → com.dao (或 mapper)
• 演进逻辑:
• 早期可能所有类放在单一包下,后期按职责分层。
• config
包集中存放配置文件,体现“约定优于配置”趋势。
(3) 静态资源处理
• WebContent/static/
缺失:
早期常将静态资源(如 JS/CSS)直接放在 WebContent
根目录,后期优化为 /static/
并通过 <mvc:resources>
配置。
4. 现代替代方案(对比 Spring Boot)
传统 SSM 结构(如图) | Spring Boot 项目结构 |
---|---|
手动配置 XML(如数据源、事务)。 | 自动配置(application.yml )。 |
依赖 Tomcat 外部部署。 | 内嵌 Tomcat,一键启动。 |
显式定义视图解析器。 | 默认约定(如 src/main/resources/templates/ )。 |
适合需要深度定制的场景。 | 适合快速开发微服务或单体应用。 |
5. 总结:为什么能这样整合?
- 技术互补:
Spring 的 IoC 和 AOP 能力完美粘合 MVC 层和持久层。 - 分层演进:
从 Servlet/JDBC 到框架整合,逐步解决代码复用、维护性问题。 - 配置优化:
通过 XML 和注解的混合使用,平衡灵活性和简洁性。
您的项目结构是 传统 Java Web 开发的最佳实践,虽稍显繁琐,但为理解框架底层原理提供了清晰路径。若追求效率,可逐步迁移到 Spring Boot。
spring boot
从 Spring MVC 到 Spring Boot 的演进并非简单的“改名”,而是 Spring 生态系统为适应现代开发需求所做的全面升级。以下是核心原因和本质变化的深度解析:
一、根本区别:定位与目标
Spring MVC | Spring Boot | |
---|---|---|
定位 | Web 框架(MVC 模块) | 全栈开发脚手架(整合 Spring 全家桶) |
核心目标 | 提供灵活的 MVC 开发模式 | 实现快速启动、约定优于配置、生产就绪 |
二、为什么需要 Spring Boot?
-
解决 Spring MVC 的配置地狱
• Spring MVC 痛点:◦ 需要手动配置
web.xml
、DispatcherServlet
、视图解析器、数据源等。◦ 依赖冲突频繁(如不同版本的 Spring 和第三方库)。
• Spring Boot 方案:
◦ 自动配置:根据类路径依赖智能推断配置(如检测到
spring-boot-starter-web
自动配置 Tomcat 和 Spring MVC)。◦ 起步依赖(Starter):一键引入功能模块(如
spring-boot-starter-data-jpa
包含 Hibernate + JPA + 数据源)。 -
拥抱微服务和云原生
• Spring MVC 局限:◦ 部署依赖外部 Servlet 容器(如手动部署 WAR 到 Tomcat)。
◦ 缺乏对云原生特性(如健康检查、配置中心)的内置支持。
• Spring Boot 突破:
◦ 内嵌服务器(Tomcat/Jetty/Undertow),直接打包为可执行 JAR。
◦ 集成 Spring Cloud 实现服务发现、熔断器等微服务功能。
-
提升开发效率
• Spring MVC 开发流程:1. 手动添加依赖 → 2. 编写 XML/Java 配置 → 3. 解决依赖冲突 → 4. 部署测试
• Spring Boot 开发流程:
1. 选择 Starter → 2. 写业务代码 → 3. 运行 `main()` 方法
三、技术对比:从 MVC 到 Boot 的关键升级
技术点 | Spring MVC | Spring Boot |
---|---|---|
配置方式 | XML 或 Java Config(显式定义 Bean) | 自动配置 + application.properties/yml 覆盖 |
依赖管理 | 手动管理版本兼容性 | Starter 父工程(统一版本号) |
部署方式 | WAR 包部署到外部容器 | 可执行 JAR(内嵌容器) |
监控与运维 | 需集成 Actuator 等模块 | 内置 Actuator(提供健康检查、指标端点) |
测试支持 | 需手动配置 MockMVC | 自动配置测试切片(如 @WebMvcTest ) |
四、Spring Boot 的核心改进
-
约定优于配置
• 默认规则:◦ 静态资源放在
src/main/resources/static
◦ 模板文件放在
src/main/resources/templates
• 开发者只需:专注业务代码,无需写模板配置。
-
模块化设计
• 通过spring-boot-starter-*
按需引入功能:<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId> <!-- Web + MVC + Tomcat --> </dependency>
-
生产级特性开箱即用
• 内置功能:◦ 监控:
/actuator/health
◦ 外部化配置:多环境
application-{profile}.yml
◦ 安全:集成 Spring Security 基础配置
五、何时选择 Spring MVC?
- 需要精细控制:如自定义 Servlet 过滤器链。
- 遗留系统维护:已有基于 XML 配置的 Spring MVC 项目。
- 教育目的:学习底层 MVC 工作原理。
六、演进本质:从“框架”到“生态”
• Spring MVC 是 单一解决方案(解决 Web 层问题)。
• Spring Boot 是 开发生态系统(整合 Spring MVC + Spring Data + Spring Security + …),提供一站式开发体验。
总结
Spring Boot 不是 Spring MVC 的替代品,而是通过自动化配置和模块化设计,让开发者以更低成本享受 Spring 全家桶的能力。二者的关系类似于:
• Spring MVC = 发动机
• Spring Boot = 整车(含发动机、变速箱、底盘)
现代开发中,除非特殊场景,否则 Spring Boot 是更高效的选择。
spring bean
Spring Bean 详解
什么是 Bean?
在 Spring 框架中,Bean 是由 Spring IoC (Inversion of Control) 容器管理的对象。这些对象构成了应用程序的骨干,并由容器负责它们的创建、组装和管理。
Bean 的核心特性
- 由 Spring 容器管理:不是由开发者直接实例化
- 生命周期受控:容器管理 Bean 的创建、初始化和销毁
- 依赖注入:Bean 之间的依赖关系由容器自动处理
Bean 的配置方式
- XML 配置(传统方式)
<bean id="userService" class="com.example.UserServiceImpl"><property name="userDao" ref="userDao"/>
</bean>
- Java 注解配置(现代方式)
@Service
public class UserServiceImpl implements UserService {@Autowiredprivate UserDao userDao;
}
- Java Config 配置
@Configuration
public class AppConfig {@Beanpublic UserService userService() {return new UserServiceImpl(userDao());}@Beanpublic UserDao userDao() {return new UserDaoImpl();}
}
Bean 的作用域
Spring 支持多种 Bean 作用域:
作用域 | 描述 |
---|---|
singleton | 默认作用域,每个容器一个实例 |
prototype | 每次请求都创建新实例 |
request | 每个 HTTP 请求一个实例 |
session | 每个 HTTP 会话一个实例 |
application | ServletContext 生命周期 |
websocket | WebSocket 会话生命周期 |
Bean 的生命周期
-
实例化:容器创建 Bean 实例
-
属性填充:注入依赖
-
初始化:
• 调用InitializingBean.afterPropertiesSet()
• 调用自定义
init-method
-
使用:Bean 就绪可用
-
销毁:
• 调用DisposableBean.destroy()
• 调用自定义
destroy-method
常用 Bean 相关注解
注解 | 用途 |
---|---|
@Component | 通用组件注解 |
@Service | 标识服务层组件 |
@Repository | 标识数据访问层组件 |
@Controller | 标识控制器组件 |
@Autowired | 自动注入依赖 |
@Qualifier | 指定具体注入的 Bean |
@Scope | 指定 Bean 作用域 |
@Lazy | 延迟初始化 |
@Primary | 指定优先注入的 Bean |
Bean 的最佳实践
- 尽量使用构造器注入:使依赖关系明确且不可变
- 避免循环依赖:设计时应考虑解耦
- 合理使用作用域:根据业务需求选择
- 善用生命周期回调:进行资源初始化和清理
- 优先使用注解配置:提高开发效率
示例代码
@Service
@Scope("singleton")
public class OrderService {private final PaymentService paymentService;@Autowiredpublic OrderService(PaymentService paymentService) {this.paymentService = paymentService;}@PostConstructpublic void init() {System.out.println("OrderService initialized");}@PreDestroypublic void cleanup() {System.out.println("OrderService destroyed");}
}
Spring Bean 是 Spring 框架的核心概念,理解 Bean 的管理机制对于开发高质量的 Spring 应用程序至关重要。
相关文章:

spring MVC 至 springboot的发展流程,配置文件变化
spring mvc Spring MVC 是 Spring 框架中的一个重要模块,用于构建基于 Java 的 Web 应用程序。它基于 MVC(Model-View-Controller)设计模式,提供了灵活、可配置的方式来开发动态网页或 RESTful 服务 ssm SSM 框架…...
深入解析Spring Boot与JUnit 5的集成测试实践
深入解析Spring Boot与JUnit 5的集成测试实践 引言 在现代软件开发中,测试是确保代码质量和功能正确性的关键环节。Spring Boot作为目前最流行的Java Web框架之一,提供了强大的支持来简化测试流程。而JUnit 5作为最新的JUnit版本,引入了许多…...

AI全域智能监控系统重构商业清洁管理范式——从被动响应到主动预防的监控效能革命
一、四维立体监控网络技术架构 1. 人员行为监控 - 融合人脸识别、骨骼追踪与RFID工牌技术,身份识别准确率99.97% - 支持15米超距夜间红外监控(精度0.01lux) 2. 作业过程监控 - UWB厘米级定位技术(误差<0.3米&…...

网络编程中的直接内存与零拷贝
本篇文章会介绍 JDK 与 Linux 网络编程中的直接内存与零拷贝的相关知识,最后还会介绍一下 Linux 系统与 JDK 对网络通信的实现。 1、直接内存 所有的网络通信和应用程序中(任何语言),每个 TCP Socket 的内核中都有一个发送缓冲区…...
区块链基本理解
文章目录 前言一、什么是分布式账本(DLT)二、什么是P2P网络?二、共识算法三、密码算法前言 区块链是由一个一个数据块组成的链条,按照时间顺序将数据块逐一链接,通过哈希指针链接,所有的数据块共同维护一份分布式账本(DLT),每个节点(可以理解为一个玩家,一台计算机)都拥…...

panda机械臂的正逆运动学分析与仿真
文章目录 前言Panda机械臂的DH参数法建模正运动学逆运动学误差函数雅可比矩阵高斯-牛顿法(Gauss-Newton) 参考代码获取 前言 机械臂的位置运动学分析是机器人控制与轨迹规划的核心基础,其研究内容主要分为正运动学(Forward Kinem…...

QT使用QXlsx读取excel表格中的图片
前言 读取excel表格中的图片的需求比较小众,QXlsx可以操作excel文档,进行图片读取、插入操作,本文主要分享单独提取图片和遍历表格提取文字和图片。 源码下载 github 开发环境准备 把下载的代码中的QXlsx目录,整个拷贝到所创建…...
VulnHub | Breach - 1
🌟 关注这个靶场的其它相关笔记:[网安靶场] 红队综合渗透靶场 —— VulnHub 靶场笔记合集 Breach: 1 ~ VulnHubBreach: 1, made by mrb3n. Download & walkthrough links are available.https://vulnhub.com/entry/breach-1,152/ 0x01:…...
CMake基础及操作笔记
CMake 基础与操作:从入门到精通 前言 CMake 是一个功能强大、跨平台的构建工具,广泛用于 C 项目管理。它通过简洁的配置文件(CMakeLists.txt)描述编译过程,生成适用于不同平台的构建脚本(如 Makefile 或 …...

在Oracle到GreatSQL迁移中排序规则改变引发的乱码问题分析及解决
在Oracle到GreatSQL迁移中排序规则改变引发的乱码问题分析及解决 一、引言 某老系统数据库从 Oracle 迁移至 GreatSQL 过程中,首批迁移(存储过程、表结构、基础数据)顺利完成。然而,第二批数据迁移时出现主键冲突问题࿱…...

开源物联网平台(OpenRemote)
在物联网技术蓬勃发展的当下,OpenRemote作为一款强大的开源物联网平台,正逐渐在多个领域崭露头角。尤其是在智能能源管理领域,它为微电网和分布式能源网络提供了全面且灵活的数据集成与管理方案,展现出独特的优势。 OpenRemote提供…...

JavaScript入门【3】面向对象
1.对象: 1.概述: 在js中除了5中基本类型之外,剩下得都是对象Object类型(引用类型),他们的顶级父类是Object;2.形式: 在js中,对象类型的格式为key-value形式,key表示属性,value表示属性的值3.创建对象的方式: 方式1:通过new关键字创建(不常用) let person new Object();// 添…...

软件安全检测报告:如何全面评估企业级办公软件安全性?
软件安全检测报告对软件的整体安全性进行了全面而细致的评估与呈现,既揭露了软件防范非法入侵的能力,同时也为软件的开发与优化提供了关键性的参考依据。 引言情况 撰写报告旨在明确呈现软件的安全性状态,并为后续的改进工作提供依据。在阐…...
区间dp(竞赛)
一、介绍 区间 dp 其实就是左右端点固定之后,用已经得出的小区间来更新大区间答案的 dp 方式。 非常重要的要素:小区间得到大区间,衍生出来的问题就是对于大区间如何划分成若干小区间,这直接决定了方程的书写。之后的例题中慢慢…...

PySide6 GUI 学习笔记——常用类及控件使用方法(常用类颜色常量QColorConstants)
文章目录 一、概述二、颜色常量表标准 Qt 颜色SVG 颜色(部分) 三、Python 代码示例四、代码说明五、版本兼容性六、延伸阅读 一、概述 QColorConstants 是 Qt for Python 提供的一个预定义颜色常量集合,包含标准Qt颜色和SVG规范颜色。这些常…...

大模型技术演进与应用场景深度解析
摘要 本文系统梳理了当前主流大模型的技术架构演进路径,通过对比分析GPT、BERT等典型模型的创新突破,揭示大模型在参数规模、训练范式、应用适配等方面的核心差异。结合医疗、金融、教育等八大行业的实践案例,深入探讨大模型落地的技术挑战与解决方案,为从业者提供体系化的…...

鸿蒙5.0项目开发——鸿蒙天气项目的实现(主页1)
【高心星出品】 文章目录 页面效果:页面功能:页面执行流程:1. 页面初始化阶段2. 定位获取阶段3. 天气数据加载阶段 这个页面是整个天气应用的核心,集成了天气查询、定位、搜索等主要功能,提供了完整的天气信息服务。 …...
python项目参考文献
技术范围:SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、小程序、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容:免费功能设计、开题报告、任务书、中期检查PPT、系统功能实现、代码编写、论文编写和辅导、论文…...

【ESP32】ESP-IDF开发 | 低功耗蓝牙开发 | GATT规范和ATT属性协议 + 电池电量服务例程
1. 简介 低功耗蓝牙中最为核心的部分当属 GATT(Generic Attribute Profile),全称通用属性配置文件。而 GATT 又是建立在 ATT 协议(属性协议)的基础之上,为 ATT 协议传输和存储的数据建立了通用操作和框架。…...

2025 年九江市第二十三届中职学校技能大赛 (网络安全)赛项竞赛样题
2025 年九江市第二十三届中职学校技能大赛 (网络安全)赛项竞赛样题 (二)A 模块基础设施设置/安全加固(200 分)A-1 任务一登录安全加固(Windows,Linux)A-2 任务二 Nginx 安全策略&…...

【记录】Windows|竖屏怎么调整分辨率使横竖双屏互动鼠标丝滑
本文版本:Windows11,记录一下,我最后调整的比较舒适的分辨率是800*1280。 文章目录 第一步 回到桌面第二步 右键桌面第三步 设置横屏为主显示器第四步 调整分辨率使之符合你的需求第五步 勾选轻松在显示器之间移动光标第六步 拖动屏幕符合物理…...

开源项目实战学习之YOLO11:12.2 ultralytics-models-sam-decoders.py源码分析
👉 点击关注不迷路 👉 点击关注不迷路 👉 另外,前些天发现了一个巨牛的AI人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。感兴趣的可以点击相关跳转链接。 点击跳转到网站。 ultralytics-models-sam 1.sam-modules-decoders.pyblocks.py: 定义模型中的各…...

数据结构*优先级队列(堆)
什么是优先级队列(堆) 优先级队列一般通过堆(Heap)这种数据结构来实现,堆是一种特殊的完全二叉树,其每个节点都满足堆的性质。如下图所示就是一个堆: 堆的存储方式 由于堆是一棵完全二叉树,所以也满足二…...

汽车Wafer连接器:工业设备神经网络的隐形革命者
汽车Wafer连接器正在突破传统车载场景的边界,以毫米级精密结构重构工业设备的连接范式。这款厚度不足3毫米的超薄连接器,在新能源电池模组中承载200A持续电流的同时,仍能保持85℃温升的稳定表现,其每平方厘米高达120针的触点密度&…...

微信小程序:封装表格组件并引用
一、效果 封装表格组件,在父页面中展示表格组件并显示数据 二、表格组件 1、创建页面 创建一个components文件夹,专门用于存储组件的文件夹 创建Table表格组件 2、视图层 (1)表头数据 这里会从父组件中传递表头数据,这里为columns,后续会讲解数据由来 循环表头数组,…...
湖北理元理律师事务所:债务优化中的双维支持实践解析
在债务压力与生活质量失衡的社会议题下,法律服务机构的功能边界正在从单一的法律咨询向复合型支持延伸。湖北理元理律师事务所通过“法律心理”双维服务模式,探索债务优化与生活保障的平衡路径,其方法论或为行业提供实践参考。 法律框架&…...
uniapp在APP上如何使用websocket--详解
UniApp 在 APP 端如何使用 WebSocket以及常见问题 一、WebSocket 基础概念 WebSocket 是一种在单个TCP连接上进行全双工通信的协议,适用于实时数据传输场景(如聊天室、实时游戏、股票行情等)。 与传统HTTP对比 特性WebSocketHTTP连接方式…...
计网| 网际控制报文协议(ICMP)
目录 网际控制报文协议(ICMP) 一、ICMP 基础特性 二、ICMP 报文分类及作用 差错报告报文 询问报文 网际控制报文协议(ICMP) ICMP(Internet Control Message Protocol,网际控制报文协议)是 …...

Conda 完全指南:从环境管理到工具集成
Conda 完全指南:从环境管理到工具集成 在数据科学、机器学习和 Python 开发领域,环境管理一直是令人头疼的问题。不同项目依赖的库版本冲突、Python 解释器版本不兼容等问题频繁出现,而 Conda 的出现彻底解决了这些痛点。作为目前最流行的跨…...

安卓中0dp和match_parent区别
安卓中的 0dp 和 match_parent 的区别? 第一章 前言 有段时间,看到同事在编写代码的时候,写到的是 0dp 有时候自己写代码的时候,编写的是 match_parent 发现有时候效果很类似。 后来通过一个需求案例,才发现两者有着…...