【博学谷学习记录】超强总结,用心分享 | 架构师 Maven学习总结
文章目录
- Maven基本
- 1.什么是Maven
- 2.为什么用Maven?
- (1)jar 包的规模
- (2) jar 包的来源
- (3)jar 包之间的依赖关系
- 3.Maven目录结构
- 4.maven仓库配置
- Pom层次
- Pom文件简介
- Super POM
- 依赖管理
- 1 依赖传递
- 2 传递性依赖机制
- 2.1 传递性依赖的依赖范围
- 2.2 依赖调解
Maven基本
1.什么是Maven
官网:http://maven.apache.org/
Maven是Apache软件基金会唯一维护的一款自动化构建工具,专注于服务Java平台的项目构建和依赖管理。
Maven是一个强大的Java项目构建工具,基于POM(项目对象模型)文件,可用于项目构建、依赖模块管理和Javadoc生成等。Maven 是一种声明式项目管理工具,通过在 POM 中配置 "who","what","where"等信息,即可满足编译、测试、打包、发布等项目构建需求。
2.为什么用Maven?
(1)jar 包的规模
随着我们使用越来越多的框架,或者框架封装程度越来越高,项目中使用的jar包也越来越多。项目中,一个模块里面用到上百个jar包是非常正常的。
比如下面的例子,我们只用到 SpringBoot、SpringCloud 框架中的三个功能:
Nacos 服务注册发现
Web 框架环境
图模板技术 Thymeleaf
(2) jar 包的来源
这个jar包所属技术的官网。官网通常是英文界面,网站的结构又不尽相同,甚至找到下载链接还发现需要通过特殊的工具下载。
第三方网站提供下载。问题是不规范,在使用过程中会出现各种问题。
jar包的名称
jar包的版本
jar包内的具体细节
而使用 Maven 后,依赖对应的 jar 包能够自动下载,方便、快捷又规范。
(3)jar 包之间的依赖关系
框架中使用的 jar 包,不仅数量庞大,而且彼此之间存在错综复杂的依赖关系。依赖关系的复杂程度,已经上升到了完全不能靠人力手动解决的程度。另外,jar 包之间有可能产生冲突。进一步增加了我们在 jar 包使用过程中的难度。
3.Maven目录结构
Maven 提倡使用一个共同的标准目录结构,Maven 使用约定优于配置的原则,大家尽可能的遵守这样的目录结构,一个使用Maven管理的普通的Java项目,它的目录结构默认如下:
MavenProject
|-- pom.xml maven项目的配置文件。对项目中的所有jar包依赖进行统一管理
|-- src
|-- main
| – java 存放项目源代码
| – resources(可省略) 存放项目配置文件 .xml等
|-- test(可省略)
| – java 存放单元测试源代码
| – resources 存放单元测试资源文件 .xml等
|-- target(由maven生成) 存放所有编译、打包生成的文件
|-- classes 存放项目源代码编译输出的字节码文件
|-- test-classes 存放测试代码编译输出的字节码文件
默认情况下,项目在编译过后,会将 src/main/java编译过后的字节码文件和 src/main/resource 中的文件放在target/classes目录下。
但是,src/main/java 目录下的非包且非java的文件在编译过后并不会自动被拷贝在 target/classes 目录下,而是会丢失。如果我们想要将 src/main/java 目录下的非包且非java的文件也一并拷贝在target/classes 目录下,则需要在 pom.xml 文件的 build 标签下进行配置。
4.maven仓库配置
Maven 仓库是项目中依赖的第三方库
在 Maven 中,任何一个依赖、插件或者项目构建的输出,都可以称之为构件,Maven 仓库能帮助我们管理构件(主要是JAR),它就是放置所有JAR文件(WAR,ZIP,POM等等)的地方
Pom层次
Pom文件简介
而 pom.xml 主要描述了项目的基本信息,用于描述项目如何构建,声明项目依赖等等,是项目级别的配置文件,执行任务或目标时,Maven 会在当前目录中查找 POM,然后读取 POM,获取所需的配置信息,然后执行目标。pom(project object model)即项目对象模型,maven 把一个项目的结构和内容抽象成一个模型,在 xml 文件中进行声明,以方便进行构建和描述。
Super POM
经过我们前面的学习,我们看到 Maven 在构建过程中有很多默认的设定。例如:源文件存放的目录、测试源文件存放的目录、构建输出的目录……等等。但是其实这些要素也都是被 Maven 定义过的。定义的位置就是:超级 POM。
关于超级 POM,Maven 官网是这样介绍的:
The Super POM is Maven’s default POM. All POMs extend the Super POM unless explicitly set, meaning the configuration specified in the Super POM is inherited by the POMs you created for your projects.
译文:Super POM 是 Maven 的默认 POM。除非明确设置,否则所有 POM 都扩展 Super POM,这意味着 Super POM 中指定的配置由您为项目创建的 POM 继承。
所以我们自己的 POM 即使没有明确指定一个父工程(父 POM),其实也默认继承了超级 POM。就好比一个 Java 类默认继承了 Object 类。
这个POM文件可以在 [Maven Super Pom](Maven Model Builder – Super POM) 找到。
也可以在 本地这个路径找到 $MAVEN_HOME/lib/maven-model-builder-3.8.1.jar!/org/apache/maven/model/pom-4.0.0.xml
- repositories
定义了一个名叫 central的repository,value是 ‘https://repo.maven.apache.org/maven2’,可以从这个地址拉下来dependency。
- pluginRepositories
默认 plugin的 repositories
- build
设置了一些默认的路径,其中还定义了 几个插件,不过Maven官方也提醒,未来的版本会去掉。
.....2、父 POM
和 Java 类一样,POM 之间其实也是单继承的。如果我们给一个 POM 指定了父 POM,那么继承关系如下图所示:
3、有效 POM
有效 POM 英文翻译为 effective POM,它的概念是这样的——在 POM 的继承关系中,子 POM 可以覆盖父 POM 中的配置;如果子 POM 没有覆盖,那么父 POM 中的配置将会被继承。按照这个规则,继承关系中的所有 POM 叠加到一起,就得到了一个最终生效的 POM。显然 Maven 实际运行过程中,执行构建操作就是按照这个最终生效的 POM 来运行的。这个最终生效的 POM 就是有效 POM,英文叫effective POM
查看有效 POM:
mvn help:effective-pom
综上所述,平时我们使用和配置的 POM 其实大致是由四个层次组成的:
超级 POM:所有 POM 默认继承,只是有直接和间接之分。
父 POM:这一层可能没有,可能有一层,也可能有很多层。
当前 pom.xml 配置的 POM:我们最多关注和最多使用的一层。
有效 POM:隐含的一层,但是实际上真正生效的一层。
Pom文件构成
一个基本的pom.xml文件配置如下
4.0.0
<!-- 公司或者组织的唯一标志,一般是公司域名的倒写,或者是公司域名倒写+项目名。并且配置时生成的路径也是由此生成, 如com.companyname.project-group,maven会将该项目打成的jar包放本地路径:/com/companyname/project-group -->
<groupId>org.heima</groupId><!-- 项目的唯一ID,一个groupId下面可以有多个项目,通过artifactId来区分 -->
<artifactId>maven_project</artifactId><!-- 项目的版本号 -->
<version>1.0-SNAPSHOT</version>
所有 POM 文件都需要 标签元素和该标签下的三个必需字段:groupId,artifactId,version。
groupId + artifactId + version = 坐标,坐标可用于标识互联网中的唯一资源,在Maven中,坐标是Jar包的唯一标识,Maven通过坐标在仓库中找到项目所需的Jar包。
常见标签
下面我们看下Maven中的常用标签
parent标签
在maven多模块项目中引用父pom依赖,在springboot项目中就有父依赖
properties标签
定义一些全局属性值,常用于jar包版本定义全局管理jar包版本后面可以${} 取值
在springboot项目中父pom会定义一些项目jar包版本依赖 ,所以我们在引用jar时候才不用写jar包版本,会自动跟随父pom中定义的jar包版本
org.springframework.boot spring-boot-dependencies 2.4.7
dependencyManagement标签
在Maven多模块的时候,管理依赖关系是非常重要的,各种依赖包冲突,查询问题起来非常复杂,于是就用到了,在springboot项目中父模块就定义了
dependencies标签
用于引入项目依赖
如果不在子项目中声明依赖,是不会从父项目中继承下来的;只有在子项目中写了该依赖项,并且没有指定具体版本,才会从父项目中继承该项,并且version和scope都读取自父pom;另外如果子项目中指定了版本号,那么会使用子项目中指定的jar版本。
uild标签
在实际使用 Maven 的过程中,我们会发现 build 标签有时候有,有时候没,这是怎么回事呢?其实通过有效 POM 我们能够看到,build 标签的相关配置其实一直都在,只是在我们需要定制构建过程的时候才会通过配置 build 标签覆盖默认值或补充配置。这一点我们可以通过打印有效 POM 来看到。
所以本质上来说:我们配置的 build 标签都是对超级 POM 配置的叠加。那我们又为什么要在默认配置的基础上叠加呢?很简单,在默认配置无法满足需求的时候定制构建过程。
build 标签组成
从示例中我们能够看到,build 标签的子标签大致包含三个主体部分:
① 定义约定的目录结构
参考示例中的如下部分:
<directory>${project.basedir}/target</directory>
<outputDirectory>${project.build.directory}/classes</outputDirectory>
<finalName>${project.artifactId}-${project.version}</finalName>
<testOutputDirectory>${project.build.directory}/test-classes</testOutputDirectory>
<sourceDirectory>${project.basedir}/src/main/java</sourceDirectory>
<scriptSourceDirectory>${project.basedir}/src/main/scripts</scriptSourceDirectory>
<testSourceDirectory>${project.basedir}/src/test/java</testSourceDirectory>
<resources><resource><directory>${project.basedir}/src/main/resources</directory></resource>
</resources>
<testResources><testResource><directory>${project.basedir}/src/test/resources</directory></testResource>
我们能看到各个目录的作用如下:
目录名 作用
sourceDirectory 主体源程序存放目录
scriptSourceDirectory 脚本源程序存放目录
testSourceDirectory 测试源程序存放目录
outputDirectory 主体源程序编译结果输出目录
testOutputDirectory 测试源程序编译结果输出目录
resources 主体资源文件存放目录
testResources 测试资源文件存放目录
directory 构建结果输出目录
② 备用插件管理
pluginManagement 标签存放着几个插件:
maven-antrun-plugin
maven-assembly-plugin
maven-dependency-plugin
maven-release-plugin
通过 pluginManagement 标签管理起来的插件就像 dependencyManagement 一样,子工程使用时可以省略版本号,起到在父工程中统一管理版本的效果。情看下面例子:
被 spring-boot-dependencies 管理的插件信息:
子工程使用的插件信息:
org.springframework.boot
spring-boot-maven-plugin
③生命周期插件
plugins 标签存放的是默认生命周期中实际会用到的插件,这些插件想必大家都不陌生,所以抛开插件本身不谈,我们来看看 plugin 标签的结构:
maven-compiler-plugin 3.1 default-compile compile compile default-testCompile test-compile testCompile依赖管理
1 依赖传递
2 传递性依赖机制
项目A中,我们为了实现某一个功能通常会引入第三方库,这里是一个compile依赖范围的B依赖,而B依赖同时又依赖于另一个compile依赖范围的C组件。那么对A而言,C就是它的一个传递性依赖,在Maven中,其会将我们在POM文件中显式声明的直接依赖(本例的B依赖)引入到项目中,对于必要的间接依赖(本例的C依赖)则会以传递性依赖的形式自动地引入到项目A中,而无需我们手动显式地在POM文件中声明C依赖来引入。Maven的传递性依赖机制,大大地减少了人工维护间接依赖的复杂度
2.1 传递性依赖的依赖范围
项目A依赖于B组件,B组件依赖于C组件,则我们将A对于B的依赖称之为第一直接依赖,B对于C的依赖称之为第二直接依赖。
根据上文可知,A对于C的依赖是传递性依赖,必要的间接依赖C将通过传递性依赖机制,被自动引入到A中。那么如何判定一个间接依赖是否有必要被引入呢?间接依赖被引入后其依赖范围又是什么呢?答案其实很简单,就是通过第一直接依赖的依赖范围和第二直接依赖的依赖范围之间的关系,来判定是否有必要引入间接依赖以及确定引入间接依赖后其依赖范围。如下表所示,若结果为N,则意味着该传递性依赖为非必要的,无需引入;否则,该间接依赖为必要的并自动引入该间接依赖,且引入后该传递依赖的依赖范围如下表单元格中的文字所示
Maven依赖范围不仅控制依赖与classpath的关系,还会影响依赖传递
最左边一列表示第一直接依赖范围,最上面一行表示第二直接依赖范围,中间的交叉单元格则表示传递性依赖范围compile test provided runtime
compile compile N N runtime
test test N N test
provided provided N provided provided
runtime runtime N N runtime
仔细观察上面表格,我们发现这样的规律
当第二直接依赖的范围是compile的时候,传递性依赖的范围与第一直接依赖的范围一致;
当第二直接依赖的范围是test的时候,依赖不会得以传递;
当第二直接依赖的范围是provided的时候,只传递第一直接依赖的范围也为provided的依赖,切传递性依赖的范围同样为provided;
当第二直接依赖的范围是runtime的时候,传递性依赖的范围与第一直接依赖的范围一致,但compile例外,此时传递性依赖的范围为runtime。
2.2 依赖调解
在Maven中由于传递性依赖的机制,一般情况下我们不需要关心间接依赖的管理。
而当间接依赖出问题时,我们需要知道该间接依赖是通过哪条依赖路径引入的,特别是该间接依赖存在多条引入路径时,确定间接依赖引入的路径就显得尤为重要。当一个间接依赖存在多条引入路径时,为避免依赖重复Maven会通过依赖调解来确定该间接依赖的引入路径
依赖调解遵循以下原则,优先使用第一原则,当第一原则无法解决时,则通过第二原则解决
第一原则: 路径最短者优先
第二原则: 第一声明者优先
相关文章:
【博学谷学习记录】超强总结,用心分享 | 架构师 Maven学习总结
文章目录 Maven基本1.什么是Maven2.为什么用Maven?(1)jar 包的规模(2) jar 包的来源(3)jar 包之间的依赖关系 3.Maven目录结构4.maven仓库配置 Pom层次Pom文件简介Super POM 依赖管理1 依赖传递2 传递性依…...
PPT里文字太多如何排版-一口气教你7种布局瞬间让PPT高大上起来
简介 这是我们学PPT处于初级到中级进化阶段常做的一件事,就是拿了这种纯文字类版面来做布局。而且这种文字都是政企类的、相当苦涩难懂、无法创意。 因此我们会要求使用7种排版来优化这个版面。这和达芳奇画鸡蛋很像,这样的练习需要坚持一段时间,就是拿了纯文字来beautifu…...
Whistle(基于 Node 实现的跨平台抓包调试工具)的使用
Whistle(基于 Node 实现的跨平台抓包调试工具)的使用 基于Node实现的跨平台抓包调试工具 可以劫持网络请求,并进行请求和响应的修改,来提高我们的开发调试效率 1.一键安装(装包/证书) npm i -g whistle && w2 start --init 证书的问题 安装…...
数学模型:Python实现非线性规划
上篇文章:整数规划 文章摘要:非线性规划的Python实现。 参考书籍:数学建模算法与应用(第3版)司守奎 孙玺菁。 PS:只涉及了具体实现并不涉及底层理论。学习底层理论以及底层理论实现:可以参考1.最优化模型与算法——基于…...
Docker网路模型(四)使用 bridge 网络
使用 bridge 网络 在计算机网络中,一个 bridge(网桥)是一个链路层设备,负责在不同的网段之间转发信息。 bridge 可以是真实的硬件设备也可以是由宿主机底层提供的软件模拟设备。 在 Docker 中,bridge 网络使用了软件…...
数据结构与算法之美 | 排序(2)
归并排序(Merge Sort) 基本思想: 如果要排序一个数组,我们先把数组从中间分成前后两部分,然后对前后两部分分别排序,再将排好序的两部分合并在一起,这样整个数组就都有序了。 def merge_sort…...
【外企面试系列】必备口语短语与例句 - A系列
a big headache令人头痛的事情 I have a big headache from all the noise. (我因为噪音而头痛。)The paperwork is a big headache for me. (对我来说,文书工作是件头痛的事情。) a fraction of 一部分 She ate only a fraction of her meal. (她只吃了一部分饭…...
Java使用Opencv进行大图找小图并使用其找图功能进行bilibili视频下载案例
Java使用Opencv进行大图找小图并使用其找图功能进行bilibili视频下载案例 一、Opencv大图找小图说明二、Opencv的window安装1.下载windows下的安装包2.安装3.Java中Opencv加载测试 三、Java中通过Opencv进行模板匹配大图找小图四、进行多图查找五:案例下载bilibili视…...
肠道健康从核心菌属开始:肠道菌群的关键
谷禾健康 5月29日,是世界肠道健康日。肠道是人体最重要的消化系统之一,与人体健康紧密相关。而肠道菌群作为肠道重要组成部分,在肠道健康中发挥着重要的作用。 编辑 由于基因、环境、饮食、药物等因素的影响,每个人的肠道菌群都…...
深度学习实战37-NASNet(具有自动搜索能力的神经网络模型)的搭建与实战应用
大家好,我是微学AI,今天给大家介绍一下深度学习实战37-NASNet(具有自动搜索能力的神经网络模型)的搭建与实战应用,NASNet是由Google Brain团队开发的一种具有自动搜索能力的神经网络模型,利用强化学习和进化算法等技术来自动地搜索最优的神经网络架构。NASNet模型的设计灵感…...
碳排放预测模型 | Python实现基于机器学习回归分析的碳排放预测模型——随机森林、决策树、KNN 和多层感知器 (MLP) 预测分析
文章目录 效果一览文章概述研究内容环境准备源码设计KNNRandom ForestDecision TreeMLPModel Evaluation学习总结参考资料效果一览...
人体检测技术之毫米波雷达
人体检测技术之毫米波雷达 1.概述 智能人脸/视频锁领域的人体检测需求是要求远距离达到1m左右即可,一旦在此距离内检测人,则锁唤醒进行人脸识别,视频录制等操作。所以,人体检测技术非常关键。 选型主要是几个维度: 1.支持检测的距离范围,能否准确输出距离信息 2.支持…...
“Chain of Thought Reasoning“ 和 “Chain Prompts“ 是什么
"Chain of Thought Reasoning" 和 "Chain Prompts" 是什么 1. "Chain Prompts" 是什么2. “Chain of Thought Reasoning” 是什么 1. “Chain Prompts” 是什么 “Chain Prompts” 是指一系列相关的提示,它们之间有逻辑上的联系和依赖关系。用户…...
signal
读信号,dqs 是对齐到dq的边沿, 写信号,dqs 的边沿是对到中间的。 spec 就是这样规定的。我们在dq的最中间的采样,肯定是最安全的。 dqs 是对齐到dq的边沿 , 在silicon 内部,还是通过移位完成的。 rl: re…...
深度研究微软的资产负债表和财务状况以及未来投资价值
来源:猛兽财经 作者:猛兽财经 微软股票的关键指标 猛兽财经认为,微软公布的2023财年第三季度财务业绩,有三个关键指标值得投资者关注。 第一个关键指标是利息收入。微软的利息收入目前已经同比增长了44%,从2022财年第…...
Mac电脑删除第三方软件工具CleanMyMac X
经常使用Mac的人都知道,Mac除了可以在AppStore下载应用程序,还有许多软件是需要在网页上搜索下载的第三方软件。那么这类第三方软件软件除了下载方式不同之外还有什么是和从App store下载的软件有区别的吗?答案是肯定的,那就是这些…...
leetcode174. 地下城游戏(java)
地下城游戏 leetcode174. 地下城游戏题目描述 动态规划解题思路代码 动态规划专题 leetcode174. 地下城游戏 来源:力扣(LeetCode) 链接:https://leetcode.cn/problems/dungeon-game 题目描述 恶魔们抓住了公主并将她关在了地下城 …...
信号与系统复习笔记——傅里叶变换
信号与系统复习笔记——傅里叶变换 周期信号的傅里叶级数表示 特征函数 假设LTI系统的输入为 x ( t ) e s t x(t) e^{st} x(t)est 输出为: y ( t ) e s t ∗ h ( t ) ∫ − ∞ ∞ e s ( t − τ ) h ( τ ) d τ e s t ∫ − ∞ ∞ e − s τ h ( τ ) d…...
Allegor17.2版本WIN11系统CIS配置提示错误解决方案
错误提示: ERROR(ORCIS-6250): Unable to continue. Database access failed. Contact the database administrator to correct the following error(s), and then retry. ODBC Error Code: -1 Description: 在指定的 DSN 中,驱动程序和应用程序之间的体…...
Java设计模式七大原则-合成聚合复用原则
🧑💻作者:猫十二懿 ❤️🔥账号:CSDN 、掘金 、个人博客 、Github 🎉公众号:猫十二懿 合成-聚合复用原则 1、合成-聚合复用原则介绍 合成/聚合复用原则(Composition/Aggregatio…...
SOFA Weekly|可信基础设施技术分论坛、Layotto 社区会议回顾与预告、社区本周贡献...
SOFA WEEKLY | 每周精选 筛选每周精华问答,同步开源进展 欢迎留言互动~ SOFAStack(Scalable Open Financial Architecture Stack)是蚂蚁集团自主研发的金融级云原生架构,包含了构建金融级云原生架构所需的各个组件&am…...
Melody 监控(四十九)
当新的世界出现,请立即向他奔去 上一章简单介绍了Spring Boot Actuator详解(四十八), 如果没有看过,请观看上一章 一. JavaMelody 一.一 什么是 Java Melody JavaMelody是一个方便的Java或JavaEE Web 应用程序监控工具。 它允许自动存储由 Web 应用程序的实际操…...
Shell脚本管道符常用搭配命令
1.sort sort命令——以行为单位对文件内容进行排序,也可以根据不同的数据类型来排序比较原则是从首字符向后,依次按ASCII码值进行比较,最后将他们按升序输出。 sort [选项] 文件名 cat file | sort [选项] 常用选项 选项作用-n按照数字进行…...
基于html+mysql+Spring+mybatis+Springboot的Springboot宠物医院管理系统
运行环境: 最好是java jdk 1.8,我在这个平台上运行的。其他版本理论上也可以。 IDE环境: Eclipse,Myeclipse,IDEA或者Spring Tool Suite都可以,如果编译器的版本太低,需要升级下编译器,不要弄太低的版本 tomcat服务器环…...
算法模板(3):搜索(5):其他
搜索 模拟退火 模拟退火一个很关键的是,看看枚举到每一个方案是不是可能的。 3167. 星星还是树 在二维平面上有 n 个点,第 i 个点的坐标为 ( x i , y i ) (x_i,y_i) (xi,yi)。请你找出一个点,使得该点到这 n 个点的距离之和最小。这…...
AWS CodeWhisperer 心得体会:安装与使用
大家好,今天我要和大家分享一下我在使用 AWS CodeWhisperer 这个工具时的心得体会。首先,让我们了解一下什么是 AWS CodeWhisperer。 什么是 AWS CodeWhisperer? AWS CodeWhisperer 是一个用于帮助开发者在 AWS 云平台上更轻松地编写、测试…...
高级查询 — 子查询
关于嵌套查询(子查询) 1.概述 子查询是在一个查询中嵌套另一个查询的查询语句。内部查询从外部查询或数据库中提取数据,然后使用这些数据来执行内部查询。出现在其他语句中的 select 语句,称为嵌套查询或子查询。外部的查询语句…...
霍夫变换(Hough Transform)
文章目录 1. 什么是霍夫变换2. 霍夫直线检测2.1 霍夫直线检测的具体步骤2.2 霍夫直线检测的优缺点2.3 OpenCV中霍夫直线检测的应用2.3.1 标准霍夫检测2.3.2 概率霍夫检测 3. 霍夫圆检测4. 源码仓库地址 1. 什么是霍夫变换 霍夫变换(Hough Transform)是图像处理中的一种特征提取…...
【每日挠头算法题(2)】压缩字符串|仅执行一次字符串交换能否使两个字符串相等
文章目录 一、压缩字符串思路 二、仅执行一次字符串交换能否使两个字符串相等思路1:计数法思路2:模拟法 总结 一、压缩字符串 点我直达~ 思路 使用双指针法 大致过程如下: 使用双指针,分别读(read)&…...
V4L2框架解析
和你一起终身学习,这里是程序员Android 经典好文推荐,通过阅读本文,您将收获以下知识点: 一、概览二、流程简介三、关键结构体四、模块初始化五、处理用户空间请求 一、概览 相机驱动层位于HAL Moudle与硬件层之间,借助linux内核驱…...
企业年报系统官网入口/安卓优化大师旧版
在Qt中使用定时器有两种方法,一种是使用QObiect类的定时器;一种是使用QTimer类。定时器的精确性依赖于操作系统和硬件,大多数平台支持20ms的精确度。 1.QObject类的定时器 QObject是所有Qt对象的基类,它…...
wordpress古腾堡编辑器如何使用/网络营销推广的方式
文章转载自:http://www.hack520.com/169.html RAID 技术相信大家都有接触过,尤其是服务器运维人员,RAID 概念很多,有时候会概念混淆。这篇文章为网络转载,写得相当不错,它对 RAID 技术的概念特征、基本原理…...
湖南网站建设服务/精准营销的成功案例
HTML DOM 对象 本篇主要介绍HTML DOM 对象:Document、Element、Attr、Event等4个对象。 目录 1. Document 对象:表示文档树的根节点,大部分属性和方法都是对元素进行操作。 2. Element 对象:表示文档中的元素,可包含为…...
网站制作 用户登录系统/郑州seo技术培训班
量化策略开发,高质量社群,交易思路分享等相关内容 什么是MACD? MACD主要是利用长短期的二条平滑平均线,计算两者之间的差离值,作为研判行情买卖之依据。本质上来说,它主要由两部分组成,即正负差…...
做网站批发利润怎么样/游戏如何在网上推广
安卓上正常 , 苹果上不正常了 在 input 输入框的样式 上加一个 -webkit-user-select :none; /* readonly 在苹果浏览器上不起作用*/ #user-info .select-area input {cursor: pointer;-webkit-user-select :none; /* readonly 在苹果浏览器上不起作用*/ }…...
怎么做网站演示/做一个微信小程序需要多少钱
JavaScript中的previousSibling和nextSibling使用注意事项 JavaScript中的previousSibling和nextSibling是获取上一个、下一个同胞元素,如果上一个或下一个同级节不存在,则此属性返回值是null。如果不注意,就会引起错误。HTML结构中的各种空格、换行符都…...