框架基础-Maven+SpringBoot入门
框架基础
Maven基础
-
Maven概述
Maven是为Java项目提供项目构建和依赖管理的工具
-
Maven三大功能
- 项目构建构建:是一个将代码从开发阶段到生产阶段的一个过程:清理,编译,测试,打包,安装,部署等
- 依赖管理Jar包下载,Jar包依赖,jar包冲突
- 契约编程约定大于配置,配置大于编码
注意:Maven连接远程仓库是需要联网的,如果没有网络那么会构建失败
- Maven仓库
所谓仓库就是用来存放Jar包和插件的地方,在Maven中仓库又分为三种:
-
本地仓库
-
远程仓库
- 中央仓库
中央仓库依赖搜索地址,**建议收藏**:https://mvnrepository.com/- 私服仓库
注意:私服仓库搭建技术:Nexus
- Maven配置
第一步:创建本地仓库文件夹
第二步:修改settings.xml配置文件中的本地仓库地址
第三步:配置阿里云镜像
第四步:配置JDK版本
注意:记得保存配置
-
Maven坐标
Maven中的坐标是项目的唯一标识,通过该坐标可以确定项目Jar包在仓库中的位置,也可以通过坐标来引入项目中所需要的三方依赖
Maven坐标主要组成
- groupId:当前Maven项目隶属于组织名称,通常都是公司域名反写,例如:cn.itsource
- artifactId:项目或者是项目中的一个模块的名称
- version:当前Maven项目版本号,根据需求进行设定
- SNAPSHOT:快照版本,正在迭代过程中,不稳定的版本
- RELEASE:释放,表示正式版本,稳定版本
注意:当我们需要某一个jar包时,可以通过坐标本地仓库的jar包或依赖包
当然:我们的项目也可以安装到本地仓库,执行install命令将项目打成Jar包放在本地仓库中
<parent><groupId>cn.zhj</groupId><artifactId>parent</artifactId><version>1.0-SNAPSHOT</version></parent> -
Maven命令
**mvn compile:**编译 - 将java源文件.java 编译成 字节码文件.class**mvn clean:**清理 - 将编译好的字节码文件删除掉**mvn clean compile:**清理+编译**mvn test:**测试 - 运行测试代码,测试代码编译在target的test-classes中 注意:src/test/java中的所有测试类的所有方法都会自动运行,但是测试类的类名有要求:TestXxx 或 XxxTest**mvn package:**打包【.class字节码文件】**mvn source:jar:**打源码包【.java文件】**mvn install:**安装 - 将项目打包然后将jar包安装到本地仓库中**mvn package -Dmaven.test.skip=true:**打包的时候跳过测试类
注意:测试的时候看下目录结构的变化和maven仓库目录的变化
-
搜索并下载依赖
第一步:中央仓库依赖搜索地址:https://mvnrepository.com/
第二步:将搜索到的依赖导入拷贝到pom.xml中,然后点击刷新,点击刷新时如果本地仓库有当前版本的依赖就不会去下载,直接引用本地仓库的依赖。如果没有就会去远程仓库下载,下载到本地再引用
注意:如果本地仓库有,可以直接提示直接引入
-
IDEA执行Maven命令
在IDEA中执行Maven命令非常简单,只需要点击右侧Maven按钮,然后在工程的生命周期中双击想要执行的命令即可
-
查看工程依赖(略)
-
依赖传递
在Maven中依赖是具有传递性的,例如我们刚才项目中只引入了Junit依赖,但是我们也间接依赖了Junit的其他依赖。在Maven项目中依赖分为直接依赖和间接依赖:
-
直接依赖:Junit就是工程的直接依赖
-
间接依赖:hamcrest-core就是工程的间接依赖
-
-
依赖排除
Maven具有依赖的传递性对我们来说是非常大的一个好处,因为这样就避免我们需要去自己引入间接依赖。但是有时候我们在引入多个依赖时,简介依赖的版本不一致会导致依赖冲突,那么此时我们就需要阻断依赖。以Junit为例,阻断间接依赖
<dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.13.2</version><scope>test</scope><!--排除依赖标签,可以写多个--><exclusions><!--排除依赖标签,写具体要排除那个依赖,只需要写GA坐标即可--><exclusion><!--要排除依赖的G坐标--><groupId>org.hamcrest</groupId><!--要排除依赖的A坐标--><artifactId>hamcrest-core</artifactId></exclusion></exclusions></dependency>
- 依赖范围
在Maven中依赖是具有作用范围的,默认情况下依赖的Jar包在任何地方都可以使用,我们可以通过…进行依赖作用范围的指定:
- 主程序范围有效:main文件夹范围内
- 测试程序范围有效:test文件夹范围内
- 是否参与打包运行:package指令范围内
scope取值
| scope值 | 主程序main | 测试程序test | 打包/运行 |
|---|---|---|---|
| compile–默认 | Y | Y | Y |
| test | N | Y | N |
| provided | Y | Y | N |
| runtime | - | Y | Y |
-
清理Maven仓库
初始情况下,我们的本地仓库是没有任何Jar包的,第一次会联网进行下载,可能由于网络的原因,Jar包下载不完全,这些不完整的jar包都是以lastUpdated结尾
注意:如果依赖下载失败,Maven识别到以lastUpdated结尾的文件后就不会再重新帮你下载,需要你删除这些以lastUpdated结尾的文件,然后Maven才会再次自动下载这些Jar包,以后实际开发中如果项目引入了某Jar包刷新后依赖依然报错,那么就需要检查一下此Jar包是否下载成功
解决方案:有时下载依赖有可能批量下载失败,那么此时我们手动去挨着找就非常麻烦,那么我们可以定义一个脚本文件,双击即可全部清除
第一步:在桌面创建一个del_lastUpdated.bat文件,创建文本改后缀即可
第二步:右键编辑bat文件,拷贝以下命令并修改本地仓库文件夹绝对地址
set REPOSITORY_PATH=本地仓库文件夹绝对地址 rem 正在搜索... del /s /q %REPOSITORY_PATH%\*.lastUpdated rem 搜索完毕 pause第三步:双击执行脚本,即可清除本地仓库下所有lastUpdated文件
Maven高级
继承
在Java中有继承的概念,就是子类继承父类的所有方法和属性。在Maven中同样有继承的概念并且与Java一致都是单继承,本质上Maven的继承就是pom.xml配置的继承
- A工程继承了B工程,那么A工程就继承了B工程的pom.xml所有配置
- Maven继承的层级是没有限制的,大型互联网项目中层级会非常多,我们只需要按照规则去梳理层级即可
-
为什么需要继承
原因一:真实开发中,依赖动则几十上百个依赖,那么这些依赖的版本管理是非常复杂的,为了方便版本管理,那么可以在父工程中统一管理版本信息。子工程直接使用对应版本即可,SpringBoot框架就是使用了Maven继承手段进行开发简化
原因二:真实开发中,一个项目会有很多个子工程,这些子工程都有自己的依赖,那么肯定会有一些重复的依赖,为了减少子工程重复导入依赖坐标信息,可以放在父工程中进行依赖抽取,子工程通过继承的方式进行依赖的引入
-
搭建Maven继承工程
第一步:创建一个Maven工程
第二步
- 删除父工程下的src文件夹,因为父工程只负责管理pom.xml,不负责编写代码,所以不需要src文件
- 修改打包方式为pom,只有打包方式为pom的工程,才能管理其他Maven工程
第三步:创建子工程/Maven模块
-
父子工程解析
- 子工程创建好之后,会自动生成parent标签,指向父工程的GAV坐标
- 子工程是不需要写GV坐标的,因为继承自父工程,子工程只需要提供A坐标即可
- 父工程中有子工程后会自动生成modules标签,代表聚合配置,后续会进行讲解
-
父工程管理依赖
第一步:父工程管理依赖
- dependencyManagement:此标签用于在父工程中管理依赖,但是不负责引入此依赖到工程中,子工程需要使用什么依赖还是需要在自己的子工程中手动引入,只是不需要引入版本,版本来自父工程
第二步:子工程引入依赖
-
配置自定义属性
父工程在真实开发中会管理众多的依赖,那么这些依赖的版本号如果都写在各自的GAV坐标中其实管理起来也颇为复杂,所以我们可以自定义属性进行管理
- properties:此标签是配置标签,我们可以在标签内自定义标签来定义属性值,此属性值可以被引用
- itsource.junit.version:此标签是自定义的,标签名称就是属性引用名称,标签的值就是版本值
- ${}:通过此方式可以引入自定义属性,大括号中的值就是自定义标签的值
- properties:此标签是配置标签,我们可以在标签内自定义标签来定义属性值,此属性值可以被引用
项目结构:

实例代码:
<!-- parent的pom.xml -->
<?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><groupId>cn.zhj</groupId><artifactId>parent</artifactId><version>1.0-SNAPSHOT</version><packaging>pom</packaging><modules><module>son1</module><module>son2</module></modules><properties><maven.compiler.source>17</maven.compiler.source><maven.compiler.target>17</maven.compiler.target><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><dom4j-version>1.1</dom4j-version></properties><dependencyManagement><dependencies><dependency><groupId>dom4j</groupId><artifactId>dom4j</artifactId><version>${dom4j-version}</version></dependency></dependencies></dependencyManagement><dependencies><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.13.1</version>
<!-- <scope>test</scope>--></dependency></dependencies></project>
<!-- son1的pom.xml -->
<?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><parent><groupId>cn.zhj</groupId><artifactId>parent</artifactId><version>1.0-SNAPSHOT</version></parent><artifactId>son1</artifactId><properties><maven.compiler.source>17</maven.compiler.source><maven.compiler.target>17</maven.compiler.target><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding></properties><dependencies><dependency><groupId>dom4j</groupId><artifactId>dom4j</artifactId></dependency></dependencies></project>
<!-- son2的pom.xml -->
<?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><parent><groupId>cn.zhj</groupId><artifactId>parent</artifactId><version>1.0-SNAPSHOT</version></parent><artifactId>son2</artifactId><properties><maven.compiler.source>17</maven.compiler.source><maven.compiler.target>17</maven.compiler.target><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding></properties><dependencies><dependency><groupId>dom4j</groupId><artifactId>dom4j</artifactId></dependency></dependencies>
</project>
聚合
-
什么是聚合
在父pom.xml中的modules标签就是聚合标签,他表示了此工程由哪些模块组成,modules下的module也代表了此父工程管理了哪些子模块
-
聚合的好处
好处一:如果没有聚合,那么我们例如在执行mvn install命令时,Maven会要求有父工程时先安装父工程,有依赖工程时先安装依赖工程,那么我们自己来考虑这些规则就非常麻烦,我们可以直接对父工程执行mvn install,那么整个工程就自动打包好了
好处二:配置聚合之后,各个子模块在父工程中展示一个列表,可以快速让我们知道整个项目的继承结构
MAVEN扩展知识
1. IDEA的目录结构Maven项目结构:.idea目录 - idea中项目配置文件,如果删除了项目崩溃src - 项目开发目录target - maven项目编译目录.gitignore - git项目版本控制器上传到码云gitee,githup上时忽略文件pom.xml - maven项目核心配置文件设置如何不显示再IDEA中:settings - Editor - File Types - Ignored Files and Folders
Spring概述
Spring发展史
-
Spring时代
Spring框架于2003年首次发布,由Rod Johnson创立,它的目标是简化Java开发,并提供一种更灵活、高效的替代方案
Spring框架引入了依赖注入(DI)和面向切面编程(AOP)等新概念,以减少组件之间的耦合度、提高代码的可维护性和可测试性
Spring通过IoC容器(控制反转容器)来管理对象之间的依赖关系,并提供了许多其他功能模块,如数据访问、事务管理、安全性等,使开发者能够更专注于业务逻辑的实现
**小结:**Spring提供IOC控制反转 - 管理对象,提供了AOP - 抽取公共业务
-
SpringBoot时代
随着时间的推移,Spring框架变得越来越强大和复杂,为了简化Spring应用程序的开发和部署,SpringBoot在2014年推出
Spring Boot是一个用于快速构建独立的、生产级的Spring应用程序的框架。它采用了约定大于配置的原则,通过自动配置和默认值设置,减少了繁琐的配置工作,提供了更简单、更轻量级的开发体验
Spring Boot还集成了一些常用的第三方库和工具,如内嵌的Servlet容器、自动化的构建工具(如Maven和Gradle)、健康检查、监控等,使开发者能够更快速地启动和运行Spring应用程序
-
总结
总体而言,Java企业级开发经历了从繁琐复杂的Java EE时代到简化灵活的Spring时代,再到更快速便捷的Spring Boot时代的演进
这些框架和工具的不断演进和创新,推动了Java开发领域的发展,为开发者提供了更好的工具和技术支持,助力他们构建出高质量、可扩展的企业级应用程序
现在在Java领域Spring已经形成了一种开发生态圈了,Spring提供了各个领域的开发解决方案,所以现在在任何Java项目中都有Spring的身影,有一句话叫做面向Spring编程,毫不夸张。Spring的这一套技术我们也称为Spring全家桶【spring,springJDBC,SpringMvc,SpringBoot,SpringCloud】
Spring简介
Spring框架全称SpringFramework,一般都简称为Spring
官网地址:https://spring.io/
在Spring中提供了很多的开源项目,这些开源项目为我们在Java开发中提供了各个领域的解决方案
在Spring全家桶中的众多项目中,SpringFramework项目是最为核心的,所有的项目都是基于Spring Framework的,其中SpringBoot是SpringFramework的高级版本
为什么不再选择Spring
-
在企业级开发中,我们选择Spring Framework进行开发,那么我们会面临两个问题
- 配置繁琐
- 入门难度大
SpringBoot中,很多配置都是已经默认配置好了,所以不再需要我们手动配置,但是Spring Framework则不然,这些配置不配置好就无法使用。同样的入门,在SpringFramework中可能需要半个小时,但是SpringBoot只需要5分钟
-
现在企业都在追求高效开发,因为高效就意味着高利润,所以市面上的Java项目基本上都是基于SpringBoot进行开发。官方目前也更加推荐使用SpringBoot作为Java开发,并且在后续的SpringCloud微服务项目中,我们也必须需要使用SpringBoot
-
使用SpringFramework开发web项目时,开发和部署都比较复杂,SpringBoot内置Tomcat,启动项目就像启动一个main方法一样的简单
SpringBoot入门
入门实现
搭建SpringBoot工程并实现浏览器与Java项目交互
实现步骤
第一步:使用SpringBoot骨架搭建SpringBoot项目
第二步:
- SpringBoot依赖有很多版本,我们学习使用SpringBoot-2.6.13
- 勾选初始化依赖,SpringBoot项目必须需要Web依赖,所以我们需要勾选Web依赖。其他依赖在以后项目使用中根据实际需要进行勾选
第三步:Springboot创建需要联网下载资源,等待构建完成即可
第四步:使用SpringBoot骨架进行创建会默认生成一些我们暂时使用不到的文件,为了项目简洁我们删除即可
第五步:创建请求处理类
- 请求处理类:专门用来接收前端发起到后端的请求
- 存储规范:请求处理类按照规范必须放入到controller包下
第六步:运行SpringBoot项目
- SpringBoot项目中定义了一个启动类,运行这个启动类可以把整个SpringBoot项目运行起来
第七步:浏览器访问
浏览器输入地址:http://localhost:8080/hello
项目结构:

访问原理解析
-
入门案例访问原理
1. 运行启动类启动项目,SpringBoot内置Tomcat,启动成功会看到控制台的默认端口号8080 2. 当在地址栏输入http://localhost:8080/hello时,浏览器访问的就是当前项目 3. 然后是用/hello去匹配我们的控制器Controller,即匹配注解@RequestMapping请求映射注解 4. 匹配上之后就会自动执行hello方法中的内容
注解:
@RestController // 创建当前类的对象
@RequestMapping("/hello/a") // 请求映射 - 匹配请求【从上下文路径后面开始算】,匹配上之后会执行当前方法的所有代码 - 实例方法【通过对象】
@RequestMapping("/hello/a")中的("/hello/a") // http://localhost:8080/上下文路径/hello/a
@SpringBootApplication // 申请当前类是一个SpringBootApplication的启动类 - 启动 - main方法启动
application.properties:
#端口
server.port=80
#应用的上下文路径,也可以称为项目路径,是构成url地址的一部分,就是在你所有的请求路径之前加了一个前缀
server.servlet.context-path=/
-
资源路径
-
URL
什么是URL:URL称为统一资源定位符,可以直接使用此地址找到互联网上的资源。例如:接口、页面
URL组成:协议名://IP地址:端口号/资源名称。例如:http://localhost:8080/hello
-
URI
什么是URI:URI统一资源标识符,俗称请求资源路径,URL地址中端口号后面的地址叫做URI。例如:/hello
-
“/hello/a”) // http://localhost:8080/上下文路径/hello/a
@SpringBootApplication // 申请当前类是一个SpringBootApplication的启动类 - 启动 - main方法启动
application.properties:
#端口
server.port=80
#应用的上下文路径,也可以称为项目路径,是构成url地址的一部分,就是在你所有的请求路径之前加了一个前缀
server.servlet.context-path=/
2. 资源路径- URL什么是URL:URL称为统一资源定位符,可以直接使用此地址找到互联网上的资源。例如:接口、页面URL组成:协议名://IP地址:端口号/资源名称。例如:http://localhost:8080/hello- URI什么是URI:URI统一资源标识符,俗称请求资源路径,URL地址中端口号后面的地址叫做URI。例如:/hello**区别**:URL包含URI,URI只是URL的一部分
相关文章:
框架基础-Maven+SpringBoot入门
框架基础 Maven基础 Maven概述 Maven是为Java项目提供项目构建和依赖管理的工具 Maven三大功能 - 项目构建构建:是一个将代码从开发阶段到生产阶段的一个过程:清理,编译,测试,打包,安装,部署…...
uniapp微信小程序投票系统实战 (SpringBoot2+vue3.2+element plus ) -投票帖子排行实现
锋哥原创的uniapp微信小程序投票系统实战: uniapp微信小程序投票系统实战课程 (SpringBoot2vue3.2element plus ) ( 火爆连载更新中... )_哔哩哔哩_bilibiliuniapp微信小程序投票系统实战课程 (SpringBoot2vue3.2element plus ) ( 火爆连载更新中... )共计21条视频…...
用julia演示蝴蝶效应:洛伦兹吸引子
文章目录 Lorentz吸引子julia绘图关闭抗锯齿 蝴蝶效应的名字来源于蝴蝶扇动翅膀的动作,虽然这个动作微小,但可能会在数周后引起飓风等极端天气的发生。这种现象表明,微小的变化可能会被放大并产生非线性的结果。这个概念最早由美国气象学家爱…...
从车联网到智慧城市:智慧交通的革新之路
一、引言 1、智慧城市的概念和发展背景 智慧城市(Smart City)是指以信息技术为基础,运用信息与通信等手段,对城市各个核心系统各项关键数据进行感测、分析、整合和利用,实现对城市生活环境的感知、资源的调控&#x…...
模拟IIC通信
模拟IIC通信 IIC 模拟IIC通信底层接口时间控制(通信速度)功能实现对外接口EEPROM相关 底层接口 device是可以用来增加多个IIC设备管理的 void I2C_SET_SCL(unsigned char device, unsigned char bit_value) {bit_value ? MCU_SCL_H() : MCU_SCL_L(); }void I2C_SET_SDA(uns…...
安卓手机变iOS!
Launcher iOS 16 - 安卓手机秒变iOS Launcher iOS 16 是一款iOS启动器,可以将安卓手机桌面变成iOS样子,还有iOS的开机动画和景深效果! 下载链接:【Launcher iOS 16】 ...
Spring使用注解管理Bean
引入lib包 Spring对Bean管理的常用注解 Component组件(作用在类上) Spring中提供了Component的三个衍生注解:(功能在目前为止是一致的) Controller WEB层 Service 业务层 Repository 持久层 属性注入的注解:(使用注解注入的方式,可以不用提供set方法) Value 用于注入普…...
弟12章 网络编程
文章目录 网络协议概述 p164TCP协议与UDP协议的区别 p165TCP服务器端代码的编写 p166TCP服务器端流程 TCP客户端代码的编写 p167TCP客户端流程主机和客户端的通信流程 tcp多次通信服务器端代码 p168TCP多次通信客户端代码 p169UDP的一次双向通信 p170udp通信模型udp接收方代码u…...
【sklearn练习】模型评估
一、交叉验证 cross_val_score 的使用 1、不用交叉验证的情况: from __future__ import print_function from sklearn.datasets import load_iris from sklearn.model_selection import train_test_split from sklearn.neighbors import KNeighborsClassifieriris…...
Gazebo的模型下载。
git clone zouxu634866/gazebo_modelshttps://gitee.com/zouxu6348660/gazebo_models.git,并完成路径配置。 (本文提供了gitee下载,国外的Github下载较慢。)...
MyBatis - DAO 接口(Mapper.xml)支持方法重载吗?
方法重载(Method Overloading)是指在同一个类中定义多个方法,它们具有相同的方法名但参数列表不同。 Dao 在 MyBatis 的 DAO 层接口中,是允许方法重载的。 在 DAO 层接口中,可以根据不同的需求和条件定义多个方法&am…...
SAP PI之Rest adapter
一,简介 REST风格接口是以http为传输协议,以xml或json或text为有效负载。下图展示了REST到XI再返回的一个过程,一个REST接口包含的信息有:服务URL、URL中带的参数、http方法(post/get/put等)、http头部、body部分的有效载荷。而X…...
推荐几个Github高星GoLang管理系统
在Web开发领域,Go语言(Golang)以其高效、简洁、高并发等特性逐渐成为许多开发者的首选语言。有许多优秀的Go语言Web后台管理系统,这些项目星星众多,提供了丰富的功能和良好的代码质量。本文将介绍一些GitHub高星的GoLa…...
生成式对抗网络GAN
Generative Adversarial Nets由伊恩古德费洛(Ian J.Goodfellow)等人于2014年发表在Conference on Neural Information Processing Systems (NeurIPS)上。NeurIPS是机器学习和计算神经科学领域的顶级国际学术会议之一。 1. GAN在哪些领域大放异彩 图像生…...
Python如何使用Excel文件
使用Python操作Office——EXCEL 首先介绍下office win32 com接口,这个是MS为自动化提供的操作接口,比如我们打开一个EXCEL文档,就可以在里面编辑VB脚本,实现我们自己的效果。对于这种一本万利的买卖,Python怎么能放过…...
前端基础:回顾es6相关知识
Author note(题记): ECMAscript is international standard of javascript。 ECMA 是 js的国际标准版语言。 let and const 为什么之前用var现在需要用let,const呢? 其实就是因为规范作用域的问题。var的作用域无块级 for (var i 0; i <…...
Hive条件函数详细讲解
Hive 中的条件函数允许你在查询中基于某些条件执行逻辑操作。以下是你提到的条件函数的详细讲解,包括案例和使用注意事项: IF() 功能:根据条件返回两个表达式中的一个。语法:IF(boolean_test, value_if_true, value_if_false)案例:SELECT IF(1=1, true, false); 结果为 tr…...
java应用CPU过高查找原因
用top查到占用cpu最高的进程pid 根据进程ID找到占用CPU高的线程 ps -mp 60355 -o THREAD,tid | sort -r 用 printf "%x \n" 将tid换为十六进制:xid printf "%x \n" 6036 根据16进制格式的线程ID查找线程堆栈信息 jstack 60355 |grep ebcb -A…...
RXJS中Subject, BehaviorSubject, ReplaySubject, AsyncSubject的区别?
在RxJS(Reactive Extensions for JavaScript)中,Subject、BehaviorSubject、ReplaySubject和AsyncSubject都是Observable的变体,它们用于处理观察者模式中的不同场景。以下是它们之间的主要区别: 1、Subject: 是一种特…...
【算法题】55. 跳跃游戏
题目 给你一个非负整数数组 nums ,你最初位于数组的 第一个下标 。数组中的每个元素代表你在该位置可以跳跃的最大长度。 判断你是否能够到达最后一个下标,如果可以,返回 true ;否则,返回 false 。 示例 1ÿ…...
K8S认证|CKS题库+答案| 11. AppArmor
目录 11. AppArmor 免费获取并激活 CKA_v1.31_模拟系统 题目 开始操作: 1)、切换集群 2)、切换节点 3)、切换到 apparmor 的目录 4)、执行 apparmor 策略模块 5)、修改 pod 文件 6)、…...
从WWDC看苹果产品发展的规律
WWDC 是苹果公司一年一度面向全球开发者的盛会,其主题演讲展现了苹果在产品设计、技术路线、用户体验和生态系统构建上的核心理念与演进脉络。我们借助 ChatGPT Deep Research 工具,对过去十年 WWDC 主题演讲内容进行了系统化分析,形成了这份…...
为什么需要建设工程项目管理?工程项目管理有哪些亮点功能?
在建筑行业,项目管理的重要性不言而喻。随着工程规模的扩大、技术复杂度的提升,传统的管理模式已经难以满足现代工程的需求。过去,许多企业依赖手工记录、口头沟通和分散的信息管理,导致效率低下、成本失控、风险频发。例如&#…...
剑指offer20_链表中环的入口节点
链表中环的入口节点 给定一个链表,若其中包含环,则输出环的入口节点。 若其中不包含环,则输出null。 数据范围 节点 val 值取值范围 [ 1 , 1000 ] [1,1000] [1,1000]。 节点 val 值各不相同。 链表长度 [ 0 , 500 ] [0,500] [0,500]。 …...
12.找到字符串中所有字母异位词
🧠 题目解析 题目描述: 给定两个字符串 s 和 p,找出 s 中所有 p 的字母异位词的起始索引。 返回的答案以数组形式表示。 字母异位词定义: 若两个字符串包含的字符种类和出现次数完全相同,顺序无所谓,则互为…...
【python异步多线程】异步多线程爬虫代码示例
claude生成的python多线程、异步代码示例,模拟20个网页的爬取,每个网页假设要0.5-2秒完成。 代码 Python多线程爬虫教程 核心概念 多线程:允许程序同时执行多个任务,提高IO密集型任务(如网络请求)的效率…...
Maven 概述、安装、配置、仓库、私服详解
目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...
SAP学习笔记 - 开发26 - 前端Fiori开发 OData V2 和 V4 的差异 (Deepseek整理)
上一章用到了V2 的概念,其实 Fiori当中还有 V4,咱们这一章来总结一下 V2 和 V4。 SAP学习笔记 - 开发25 - 前端Fiori开发 Remote OData Service(使用远端Odata服务),代理中间件(ui5-middleware-simpleproxy)-CSDN博客…...
让回归模型不再被异常值“带跑偏“,MSE和Cauchy损失函数在噪声数据环境下的实战对比
在机器学习的回归分析中,损失函数的选择对模型性能具有决定性影响。均方误差(MSE)作为经典的损失函数,在处理干净数据时表现优异,但在面对包含异常值的噪声数据时,其对大误差的二次惩罚机制往往导致模型参数…...
Webpack性能优化:构建速度与体积优化策略
一、构建速度优化 1、升级Webpack和Node.js 优化效果:Webpack 4比Webpack 3构建时间降低60%-98%。原因: V8引擎优化(for of替代forEach、Map/Set替代Object)。默认使用更快的md4哈希算法。AST直接从Loa…...
