[Java]maven从入门到进阶
介绍
apache旗下的开源项目,用于管理和构建java项目的工具
官网: Welcome to The Apache Software Foundation!
1.依赖管理
通过简单的配置, 就可以方便的管理项目依赖的资源(jar包), 避免版本冲突问题


优势: 基于项目对象模型(POM),通过一小段描述信息来管理项目的构建
2.统一目录结构
提供标准, 统一的项目结构

3.项目构建
标准跨平台(linux/windows/MacOs)的自动化项目构建方式


POM

仓库
用来管理和存储jar包
1.本地仓库
- 本机的仓库, 计算机上的一个目录
- 项目中使用的依赖会先在本地仓库中查找
2.远程仓库
- 公司/团队维护的仓库
- 需要配置,不配置就直连中央仓库
- 下载流程
- 本地仓库中不存在的依赖再来远程仓库查找
- 依赖存在直接下载使用
- 依赖不存在去中央仓库下载
- 好处
- 连接中央的仓库的速度较慢, 因为要访问外网
- 使用中央仓库可以方便其他同事复用依赖
- 提高团队整体的依赖下载速度
3.中央仓库
官方维护的仓库

依赖查找循序: 本地仓库->远程仓库(私服)->中央仓库
下载
安装
单独安装Maven, Maven的安装包是一个绿色软件, 解压即可使用

说明:
- 测试: nvm -v

目录
- bin-> 可执行的程序
- conf/settings -> 配置文件
- mvn_pepo -> 本地仓库
- lib -> maven依赖的jar包资源
集成Maven
IEDA中集成Maven有两种方式, 可以配置当前项目, 比较繁琐, 也可以全局配置Maren, 比较推荐
1.当前项目
- 选择IDEA中的File -> Settings -> Build, Execution, Deployment -> Build Tools -> Mwven
- 设置IEAC使用本地安装的Maven, 并修改配置文件以及本地仓库路径




2.全局配置




使用
创建Maven项目
1.先创建空项目

2.创建模块,选择Maven,选择JDK,点击Next
3.填写模块名称,坐标信息,点击finish,创建完成

目录结构
1.基本信息
项目基本信息存放在pom.xml配置文件中
<!-- 项目坐标 -->
<groupId>itheima.com</groupId>
<artifactId>maven_helloworld</artifactId>
<version>1.0-SNAPSHOT</version><!-- 项目运行和打包的jdk版本 -->
<properties><maven.compiler.source>17</maven.compiler.source><maven.compiler.target>17</maven.compiler.target><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
2.Maven坐标
Maven中的坐标是资源的唯一标识, 通过坐标可以定位资源位置
作用: 使用坐标来定义项目或引入项目的依赖
组成:
groupld: 定义当前项目隶属的组织名称, 一般为域名倒写
artifactId: 定义当前Maven项目名称, 一般是模块名称
version: 定义当前项目版本号
3.src根目录
- main: 项目资源
- java: 源代码
- resources: 配置文件
- test: 测试资源
- java: 源代码
- resources: 配置文件(使用较少,默认不创建)
- target: 编译后的字节码文件
4.HelloWord
1.连包带类创键文件

2.helloworld代码

导入Maven项目
方式1
展开右侧Maven面板->选择+号 ->选择到pom.xml文件 ->导入


方式2
通过IDEA导入Maven项目, 注意要选到 pom.xml 文件


移除Maven项目
这里的移除只是在IDEA中移除maven模块, 资源还存在于文件夹中

依赖管理
依赖配置
依赖: 当前项目运行所需要的jar包, 一个项目可以引入很多依赖
- 编写<dependencies></dependencies>标签
- 嵌套<dependency></dependency>标签
- 定义依赖坐标
<dependencies><dependency>//组织名<groupId>junit</groupId> //模块名<artifactId>junit</artifactId> //版本号<version>4.12</version> </dependency>
</dependencies>
- 坐标信息查询: https://mvnrepository.com/
- 添加坐标后,不会立即生效, 点击刷新的按钮即可 (如果没有刷新按钮可以手动刷新)

- 查看依赖以及依赖版本

- 如果引入的依赖, 本地仓库不存在, 将会连接远程仓库/中央仓库下载, 这个过程比较耗时
依赖传递
Maven项目中的依赖具有传递性, 项目中配置的依赖是直接依赖, 项目依赖的依赖就是间接依赖

查看依赖关系
方法1: 通过maven面板查看

方法2: 打开pom.xml文件, 右键选择Diagrams -> show Dependencies

排除依赖
A依赖B, B依赖C, 默认A就会依赖C, 不想让A依赖C, 就可以使用依赖排除, 主动断开依赖的资源, 被排除的资源无需指定版本
<dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version><!--依赖排除--><exclusions><exclusion><groupId>junit</groupId><artifactId>junit</artifactId></exclusion><!--依赖排除--></exclusions>
</dependency>
依赖范围
依赖的jar包, 默认情况下, 在任何地方都可以使用, 可以通过<scoped></scoped>标签设置其作用范围
<dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version><scope>text</scope></dependency>
可选参数

生命周期
Maven的生命周期就是为了对所有的maven项目构建过程进行抽象和统一
分类
Maven有3套相互独立的生命周期

- clean: 清理工作
- clean: 移除上一次构建生成的文件
- default: 核心工作(如: 编译,测试,打包,安装,部署)
- compile: 编译项目源代码
- text: 运行测试
- package: 将编译后的文件打包, 如jar, war包
- install: 安装项目到本地仓库
- site: 生成报告,发布站点等
执行顺序
在同一套生命周期中, 当运行后面的阶段时, 前面的阶段都会运行

- 双击执行install周期, 但是test等周期默认也会执行
- 如果需要的话, 可以指定禁用周期

执行
执行maven指定的生命周期有两种方式
1.命令执行
在项目所在目录使用命令行工具, 执行指定命令, 执行maven的声明周期

- mvn clean
- mvn compile
- mvn package
- mvn test
2.双击执行
在idea中使用maven工具栏, 双击生命周期执行

3.执行原理
maven本身不执行任何操作, 所有的操作都是通过绑定的插件进行的, 所以maven的本质是一个插件集合

- 当我们双击生命周期阶段,运行程序时
- 实际上是与生命周期绑定的插件在工作
分模块设计
将项目按照功能拆分成若干个子模块, 方便项目的管理和维护, 也方便模块间的相互调用, 资源共享



需求: 完成tlias项目的模块拆分

拆分实体类Pojo
目标: 创建maven 模快 tlias-pojo, 存放实体类
1.新建模块: new Module -> Maven -> Next

2.转移实体类: 连包带类一起复制到新模块中

3.在新模块中引入实体类需要的依赖, 以解决报错
<dependencies><!-- lombok依赖 --><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.24</version></dependency></dependencies>
4.引入模块: 在原始的项目中引入拆出去的模块
<!-- 拆分的tlias-pojo模块 --><dependency><groupId>com.itheima</groupId><artifactId>tlias-pojo</artifactId><version>1.0-SNAPSHOT</version></dependency>
拆分工具类Utils
目标: 创建maven 模块 tlias-utils, 存放相关工具类
步骤: 与拆分实体类的步骤一致
注意: 引入web起步依赖时, 由于没有父工程限制, 需要指定版本, 版本与项目工程中的保持一致
继承
继承关系
继承描述的是两个工程间的关系, 子工程可以继承父工程中的配置信息, 常见于依赖关系的继承
1.作用: 简化依赖配置, 统一管理依赖

2.继承关系: 子工程继承父工程, 父工程继承spring-boot-stater-parent工程

3.目录结构: 两种工程结构都可以, 但是嵌套的父子结构看上去更清晰

需求: 改造tlias项目
1.创建父工程
- 创建maven模块tlias-parent, 该工程为父工程, 设置打包方式为pom(默认jar)

- 父工程不写具体逻辑代码,可以把src删掉
- 让父工程设置继承官方工程
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion>//1.继承官方工程 <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId>// 注意版本号<version>3.2.3</version><relativePath/> <!-- lookup parent from repository --></parent><groupId>com.itheima</groupId><artifactId>tlias-parent</artifactId><version>1.0-SNAPSHOT</version><!-- 2.设置打包方式为pom --><packaging>pom</packaging><dependencies><!-- lombok依赖 --><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>${lombok.version}</version></dependency></dependencies></project>
2.子工程继承父工程: pom.xml文件中
// 配置继承关系
<parent><groupId>com.itheima</groupId><artifactId>tlias-parent</artifactId><version>1.0-SNAPSHOT</version>// 指定父工程相对位置<relativePath>../tlias-parent/pom.xml</relativePath>
</parent>

3.管理共有依赖
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><dependencies><!-- lombok依赖 --><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.24</version></dependency></dependencies></project>
- 在父工程中配置子工程共有的依赖, 子工程会自动继承父工程的依赖
- 若父子工程都配置了同一个依赖的不同版本, 最终以子工程为准
版本锁定
在Maven中, 可以在父工程的pom文件中, 通过 <dependencyManagement> 来统一管理依赖版本
<!-- 版本锁定 -->
<dependencyManagement><dependencies><!--JWT令牌生成--><dependency><groupId>io.jsonwebtoken</groupId><artifactId>jjwt</artifactId><version>0.9.1</version></dependency> </dependencies>
</dependencyManagement>
<dependencies><!-- JWT令牌依赖--><dependency><groupId>io.jsonwebtoken</groupId><artifactId>jjwt</artifactId></dependency>
</dependencies>
- 通过版本锁定, 分散在子工程的依赖版本由父工程统一管理
- 版本锁定只管理版本, 子程序还是需要引入依赖的, 只是不需要指定版本了
自定义属性: 父工程统一管理依赖版本后, 可以使用自定义属性, 集中定义依赖版本, 无需上下翻找
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><properties><maven.compiler.source>17</maven.compiler.source><maven.compiler.target>17</maven.compiler.target><!-- 自定义属性 --><!-- 格式: 自定义属性名.version --><lombok.version>1.18.24</lombok.version><mybatis.version>3.0.3</mybatis.version><pagehelper.version>1.4.6</pagehelper.version><fastjson.version>1.2.76</fastjson.version><aliyunsdkoss.version>3.15.1</aliyunsdkoss.version><jaxbapi.version>2.3.1</jaxbapi.version><activation.version>1.1.1</activation.version><jaxbruntime.version>2.3.3</jaxbruntime.version><jjwt.version>0.9.1</jjwt.version></properties><dependencies><!-- lombok依赖 --><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId>// 属性引用 <version>${lombok.version}</version></dependency></dependencies><!-- 版本锁定 --><dependencyManagement><dependencies><!-- mybatis起步依赖 --><dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>${mybatis.version}</version></dependency>... ...</dependencies></dependencyManagement>
</project>
- dependencies是直接依赖, 在父工程中配置了依赖, 子工程就会直接继承下来
- dependencyManagement是版本管理, 只管理依赖的版本, 使用时子工程仍然需要引入依赖坐标
聚合
项目开发完成后需要打包, 分模块开发时, 打包前需要手动安装其他模块, 保证本地仓库中存在该模块, 才能打包成功, 否则可能会找不到相关模块, 造成打包失败


概念: 聚合就是把多个模块作为一个整体进行项目构建, 简化项目打包过程

- 聚合工程: 一个不具有业务功能的工程(有且只有一个pom文件),
- 最佳实践: 通常情况下, 聚合工程和继承中的父工程共用一个
- 实际作用: 构建项目直接在聚合工程上构建, 无需手动构建依赖关系
实现: maven中可以通过<modules>设置当前聚合工程所包含的子模块名称
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><!--聚合其他模块--><modules><module>../tlias-pojo</module><module>../tlias-utils</module><module>../tlias_web_management</module></modules>... ...
</project>
- 打包: 在聚合工程中聚合其他模块, 然后再聚合工程上构建项目
- 执行: 聚合工程中所包含的模块, 在构建时, 会自动根据模块间的依赖关系设置构建顺序, 与书写顺序无关


继承与聚合的关系

私服
私服是一种特殊的远程仓库, 它是架设在局域网内的仓库服务, 用来代理位于外部的中央仓库, 解决团队内部资源共享和资源同步的问题


- 使用私服后, 依赖查找顺序为: 本地仓库 -> 私服 -> 中央仓库
使用私服就是学习资源的的上传与下载

- RELEASE(发行版本): 功能趋于稳定, 当前更新停止, 可以用于发行的版本, 储存在私服中的RELEASE仓库中
- SNAPSHOT(快照版本): 功能不稳定, 尚处于开发中的版本,即快照版本, 储存在私服的SHAPSHOT仓库中
- CENTRAL(官方版本): 中央仓库中下载的依赖, 储存在私服的CENTRAL仓库中
连接私服是比较固定的操作, 资料中也提供了配置文档, 可以参照配置
- 设置私服的访问用户名和密码 (maven安装目录/settings.xml文件/server中配置)

- IDEA中的maven工程的pom文件中配置上传(发布)地址

- 设置私服依赖下载的仓库组地址( settings.xml中的mirrors / profiles中配置)


资源上传: 执行maven的deploy生命周期, 发布资源到私服中, 同私服的其他同事就可以下载使用了


- 资源上传到私服的位置, 由资源的版本决定

资源下载: 连接私服后, 引用依赖的坐标, 刷新后, maven就会自动到私服中下载资源
相关文章:
[Java]maven从入门到进阶
介绍 apache旗下的开源项目,用于管理和构建java项目的工具 官网: Welcome to The Apache Software Foundation! 1.依赖管理 通过简单的配置, 就可以方便的管理项目依赖的资源(jar包), 避免版本冲突问题 优势: 基于项目对象模型(POM),通过一小段描述信息来管理项目的构建 2…...
Leetcode面试经典150题-130.被围绕的区域
给你一个 m x n 的矩阵 board ,由若干字符 X 和 O 组成,捕获 所有 被围绕的区域: 连接:一个单元格与水平或垂直方向上相邻的单元格连接。区域:连接所有 O 的单元格来形成一个区域。围绕:如果您可以用 X 单…...
Ruffle 继续在开源软件中支持 Adobe Flash Player
大多数人已经无需考虑对早已寿终正寝的 Adobe Flash 的支持,但对于那些仍有一些 Adobe Flash/SWF 格式的旧资产,或想重温一些基于 Flash 的旧游戏/娱乐项目的人来说,开源 Ruffle 项目仍是 2024 年及以后处理 Flash 的主要竞争者之一。 Ruffl…...
【postgres】笔记
数据库相关笔记 1.分区表创建时间戳设置问题2.查询语句2.1查询数据库某表有多少行2.2 表中某列值类型是 1.分区表创建时间戳设置问题 今天早上发现postgres数据库表中总会隔4天丢失一天的数据,后来查了一下,发现是分区表创建的有问题。 如图所示 可以看…...
#if等命令的学习
预处理命令 #include(文件包含命令) #define(宏定义命令) #undef #if(条件编译) #ifdef #ifndef #elif #endif defined函数(与if等结合使用) 下面将解释上述各自的用法、使用…...
【有啥问啥】深入浅出马尔可夫链蒙特卡罗(Markov Chain Monte Carlo, MCMC)算法
深入浅出马尔可夫链蒙特卡罗(Markov Chain Monte Carlo, MCMC)算法 0. 引言 Markov Chain Monte Carlo(MCMC)是一类用于从复杂分布中采样的强大算法,特别是在难以直接计算分布的情况下。它广泛应用于统计学、机器学习…...
java企业办公自动化OA
技术架构: sshjbpm 功能描述: 用户管理,岗位管理,部门管理,权限管理,网上交流,贴吧,审批流转。权限管理是树状结构人性化操作,也可以用作论坛。 效果图:...
【leetcode】树形结构习题
二叉树的前序遍历 返回结果:[‘1’, ‘2’, ‘4’, ‘5’, ‘3’, ‘6’, ‘7’] 144.二叉树的前序遍历 - 迭代算法 给你二叉树的根节点 root ,返回它节点值的 前序 遍历。 示例 1: 输入:root [1,null,2,3] 输出:[1,…...
在ros2中安装gazebo遇到报错
安装命令: sudo apt-get install ros-${ROS_DISTRO}-ros-gz 报错如下: E: Unable to locate package ros-galactic-ros-gz 解决方法: 用如下安装命令: sudo apt install ros-galactic-ros-ign 问题解决!...
VMware vSphere 8.0 Update 3b 发布下载,新增功能概览
VMware vSphere 8.0 Update 3b 发布下载,新增功能概览 vSphere 8.0U3 | ESXi 8.0U3 & vCenter Server 8.0U3 请访问原文链接:https://sysin.org/blog/vmware-vsphere-8-u3/,查看最新版。原创作品,转载请保留出处。 作者主页…...
在设计开发中,如何提高网站的用户体验?
在网站设计开发中,提高用户体验是至关重要的。良好的用户体验不仅能提升用户的满意度和忠诚度,还能增加转化率和用户留存率。以下是一些有效的方法和策略: 优化页面加载速度 减少HTTP请求:合并CSS和JavaScript文件以减少HTTP请求…...
油耳拿什么清理比较好?好用的无线可视挖耳勺推荐
油耳的朋友通常都是用棉签来掏耳。这种方式是很不安全的。因为使用棉签戳破耳道和棉絮掉落在耳道中而引起感染的新闻不在少数。在使用过程中更加建议大家可视挖耳勺来清理会更好。不仅清晰度得干净而且安全会更高。但最近这几年我发现可视挖耳勺市面上不合格产品很多࿰…...
永久配置清华源,告别下载龟速
为了每次使用 pip 时自动使用清华源,可以通过以下步骤进行配置: 方法一:通过命令行配置 你可以在命令行中运行以下命令来自动设置清华源: pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple此命令会将…...
什么是数据库回表,又该如何避免
目录 一. 回表的概念二. 回表的影响三. 解决方案1. 使用覆盖索引2. 合理选择索引列3. 避免选择不必要的列4. 分析和优化查询5. 定期更新统计信息6. 避免使用SELECT DISTINCT或GROUP BY7. 使用适当的数据库设计 数据库中的“回表”是指在查询操作中,当数据库需要访问…...
UE5中使用UTexture2D进行纹理绘制
在UE中有时需要在CPU阶段操作像素,生成纹理贴图等,此时可以通过UTexture2D来进行处理,例子如下: 1.CPP部分 首先创建一个蓝图函数库,将UTexture2D的绘制逻辑封装成单个函数: .h: #include &…...
Matlab simulink建模与仿真 第十六章(用户定义函数库)
参考视频:simulink1.1simulink简介_哔哩哔哩_bilibili 一、用户定义函数库中的模块概览 注:MATLAB版本不同,可能有些模块也会有差异,但大体上区别是不大的。 二、Fcn/Matlab Fcn模块 1、Fcn模块 双击Fcn模块,在对话…...
每天练打字2:今日状况——完成击键5第1遍,赛文速度74.71
今日跟打:604字 总跟打:99883字 记录天数:2435天 (实际没有这么多天,这个是注册账号的天数) 平均每天:41字 练习常用单字中500,击键5,键准100%,两遍。&#x…...
给新人的python笔记(一)
元组与列表 元组使用圆括号()而不是[]列表的元素可以修改,但元组的元素不能修改 创建元组 menu1 (meat,fish,chicken) 访问元组 print(menu[1:3]) 修改元组 不支持 元组内置函数 len(tuple):计算元组中元素个数;…...
如何实现异步并发限制
如何实现异步并发限制 文章目录 如何实现异步并发限制方法1注意点 方法2题目要求实现方法注意点 之前一直没有系统的去总结异步并发限制的实现思路,今天就来做个总结吧 方法1 只有一个变量 pool:代表正在执行中的任务中的集合 function sleep(name, t…...
孙怡带你深度学习(2)--PyTorch框架认识
文章目录 PyTorch框架认识1. Tensor张量定义与特性创建方式 2. 下载数据集下载测试展现下载内容 3. 创建DataLoader(数据加载器)4. 选择处理器5. 神经网络模型构建模型 6. 训练数据训练集数据测试集数据 7. 提高模型学习率 总结 PyTorch框架认识 PyTorc…...
华为云AI开发平台ModelArts
华为云ModelArts:重塑AI开发流程的“智能引擎”与“创新加速器”! 在人工智能浪潮席卷全球的2025年,企业拥抱AI的意愿空前高涨,但技术门槛高、流程复杂、资源投入巨大的现实,却让许多创新构想止步于实验室。数据科学家…...
web vue 项目 Docker化部署
Web 项目 Docker 化部署详细教程 目录 Web 项目 Docker 化部署概述Dockerfile 详解 构建阶段生产阶段 构建和运行 Docker 镜像 1. Web 项目 Docker 化部署概述 Docker 化部署的主要步骤分为以下几个阶段: 构建阶段(Build Stage):…...
Lombok 的 @Data 注解失效,未生成 getter/setter 方法引发的HTTP 406 错误
HTTP 状态码 406 (Not Acceptable) 和 500 (Internal Server Error) 是两类完全不同的错误,它们的含义、原因和解决方法都有显著区别。以下是详细对比: 1. HTTP 406 (Not Acceptable) 含义: 客户端请求的内容类型与服务器支持的内容类型不匹…...
VTK如何让部分单位不可见
最近遇到一个需求,需要让一个vtkDataSet中的部分单元不可见,查阅了一些资料大概有以下几种方式 1.通过颜色映射表来进行,是最正规的做法 vtkNew<vtkLookupTable> lut; //值为0不显示,主要是最后一个参数,透明度…...
.Net Framework 4/C# 关键字(非常用,持续更新...)
一、is 关键字 is 关键字用于检查对象是否于给定类型兼容,如果兼容将返回 true,如果不兼容则返回 false,在进行类型转换前,可以先使用 is 关键字判断对象是否与指定类型兼容,如果兼容才进行转换,这样的转换是安全的。 例如有:首先创建一个字符串对象,然后将字符串对象隐…...
蓝桥杯 冶炼金属
原题目链接 🔧 冶炼金属转换率推测题解 📜 原题描述 小蓝有一个神奇的炉子用于将普通金属 O O O 冶炼成为一种特殊金属 X X X。这个炉子有一个属性叫转换率 V V V,是一个正整数,表示每 V V V 个普通金属 O O O 可以冶炼出 …...
在QWebEngineView上实现鼠标、触摸等事件捕获的解决方案
这个问题我看其他博主也写了,要么要会员、要么写的乱七八糟。这里我整理一下,把问题说清楚并且给出代码,拿去用就行,照着葫芦画瓢。 问题 在继承QWebEngineView后,重写mousePressEvent或event函数无法捕获鼠标按下事…...
嵌入式学习笔记DAY33(网络编程——TCP)
一、网络架构 C/S (client/server 客户端/服务器):由客户端和服务器端两个部分组成。客户端通常是用户使用的应用程序,负责提供用户界面和交互逻辑 ,接收用户输入,向服务器发送请求,并展示服务…...
Linux 中如何提取压缩文件 ?
Linux 是一种流行的开源操作系统,它提供了许多工具来管理、压缩和解压缩文件。压缩文件有助于节省存储空间,使数据传输更快。本指南将向您展示如何在 Linux 中提取不同类型的压缩文件。 1. Unpacking ZIP Files ZIP 文件是非常常见的,要在 …...
【前端异常】JavaScript错误处理:分析 Uncaught (in promise) error
在前端开发中,JavaScript 异常是不可避免的。随着现代前端应用越来越多地使用异步操作(如 Promise、async/await 等),开发者常常会遇到 Uncaught (in promise) error 错误。这个错误是由于未正确处理 Promise 的拒绝(r…...
