Maven
安装使用
首先搜索maven进入官网:下载压缩包,zip格式是win 系统的压缩包。
解压后配置环境变量:此电脑右键属性->高级系统设置->新建maven-home变量:
找到名为path的变量点击编辑:
添加了最后一行:
打开命令行终端:
直接输入mvn -version:
安装成功。
pom文件:先到本地仓库找包,没有再到中央仓库找
远程仓库:负责去中央仓库寻找包,本地仓库去远程仓库寻找。可以是公司仓库,也可以是阿里仓库(镜像)。
配置远程仓库:
settings.xml文件
:本地仓库位置已经自动配置好
配置阿里镜像仓库:
创建maven项目
项目管理工具又称脚手架,无需工程师从头开始建立文件,用其给出的文件夹结构直接扩展即可。
用命令行
首先创建一个项目文件夹,然后在命令行中进入到这个文件夹
输入命令:mvn archetype:generate -DarchetypeCatalog=internal
让你选择archetype,每种预设文件结构不同,预置了不同的文件、文件夹。
经常用第七项,输入7,回车
然后弹出的每一项都输入信息并回车。
输入Y回车表示确认信息:
使用Eclipse配置并创建 :
1
点击add按钮:
name随意,location:Project download area | The Eclipse Foundation
然后看到这两项安装了:
安装好后配置:
下面这个配置点击add用自己的:
引入已有文件
file->import
创建
idea创建
jdk配置
配置maven:file->settings
选择自己的,并且点击override
命令
这几条命令mvn后只有空格没有横杠。
clean:target文件夹被清空。
compile:编译,main文件夹中的类文件被编译,此时target文件夹出现了子文件夹,以及编译后的class后缀的文件。
test:使用此命令main文件夹、test文件夹都会被编译。
mvn package:项目打包,此时项目target文件夹出现jar包
jar包可以用解压文件打开。
mvn install:有三个自己写的项目,两个项目依赖其中一个项目,使用此命令可以将jar包安装到本地仓库,
本地仓库中出现:
deploy:放到远程仓库,有权限、用户名密码的人才可以做。
命令行方式
如上例直接进入到该maven项目文件夹目录中并使用命令即可
eclipse
命令不全可以添加,可以自定义:点击configurations
在goals中输入Name对应的命令:相当于依次运行自定义的一套命令。写几个都可以
idea
也可以通过edit输入一系列命令:先点击左上角加号,可以添加多套自定义
POM文件
我使用网络搜索的结果,为您介绍一下Maven pom文件的常用标签。Maven pom文件是一个XML文件,它描述了项目的基本信息、依赖、插件、构建、分发等方面。pom文件中有很多标签,但不是所有的标签都是必须的,只有modelVersion
、groupId
、artifactId
和version
这四个标签是必须的,其他的标签可以根据项目的需要进行配置。下面是一些常用标签的介绍:
-
modelVersion
:指定Maven POM模型的版本。当前为4.0.0。 -
groupId
:定义项目的组织或团队的唯一标识符。通常使用全限定的包名区分该项目和其他项目。 -
artifactId
:定义项目的唯一标识符,通常是项目的名称。 -
version
:定义项目的版本号。格式为:主版本.次版本.增量版本-限定版本号。 -
packaging
:定义项目的打包类型,例如jar、war、ear、pom等。插件可以创建他们自己的构件类型,所以前面列的不是全部构件类型。 -
name
:定义项目的名称,Maven产生的文档用。 -
description
:定义项目的详细描述,Maven产生的文档用。当这个元素能够用HTML格式描述时(例如,CDATA中的文本会被解析器忽略,就可以包含HTML标签),不鼓励使用纯文本描述。 -
url
:定义项目主页的URL,Maven产生的文档用。 -
parent
:定义父项目的坐标。如果项目中没有规定某个元素的值,那么父项目中的对应值即为项目的默认值。坐标包括groupId、artifactId和version。 -
modules
:指定项目包含的模块(子项目)列表。 -
dependencies
:定义项目依赖的其他构件列表。每个依赖都有groupId、artifactId、version等属性,还可以指定scope、type、classifier等属性来控制依赖范围和类型。 -
dependencyManagement
:定义依赖管理信息,可以统一管理子模块中相同依赖的版本号和范围等属性,避免重复和冲突。 -
properties
:定义一些属性变量,可以在pom文件中引用这些变量来简化配置和提高可维护性。 -
build
:定义项目构建相关信息,包括源码目录、输出目录、插件、资源等。 -
profiles
:定义一些配置文件,可以根据不同环境或条件选择激活哪些配置文件来改变pom文件中的内容。 -
repositories
:定义远程仓库列表,Maven会从这些仓库中下载依赖或插件等构件。 -
pluginRepositories
:定义插件仓库列表,Maven会从这些仓库中下载插件或插件依赖等构件。 -
distributionManagement
:定义项目分发相关信息,包括部署到远程仓库或站点服务器等方式和地址。
您好,这是Bing。根据网络搜索的结果,我为您解释一下parent包中引入了依赖,本项目中是不是就无需引用了的问题。
parent包是指在Maven多模块项目中,作为父项目的pom文件,它可以管理子项目之间的公共依赖和配置。parent包中引入了依赖,本项目中是否需要再次引用,取决于parent包中依赖的声明方式和本项目的需求。
如果parent包中使用了<dependencies>
标签来声明依赖,那么这些依赖会被所有的子项目继承,本项目无需再次引用。¹² 例如:
<!-- parent pom --> <dependencies> <!-- 这个依赖会被所有子项目继承 --> <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>${fastjson.version}</version> </dependency> </dependencies>
<!-- child pom --> <!-- 无需再次引用fastjson -->
如果parent包中使用了<dependencyManagement>
标签来声明依赖,那么这些依赖只是起到管理版本号的作用,并不会被子项目继承,本项目需要再次引用,并且无需指定版本号。¹²³⁴ 例如:
<!-- parent pom --> <dependencyManagement> <dependencies> <!-- 这个依赖只是管理版本号,不会被子项目继承 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-dependencies</artifactId> <version>${spring-boot.version}</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement>
<!-- child pom --> <!-- 需要再次引用spring-boot-dependencies,并且无需指定版本号 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-dependencies</artifactId> </dependency>
如果本项目不需要使用parent包中声明的某些依赖,那么可以在本项目的pom文件中使用<exclusions>
标签来排除这些依赖。¹²³⁴ 例如:
<!-- parent pom --> <dependencies> <!-- 这个依赖会被所有子项目继承 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> </dependencies>
<!-- child pom --> <!-- 不需要使用spring-boot-starter-web,可以排除它 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <exclusions> <exclusion> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </exclusion> </exclusions> </dependency>
思维导图总结
软件工程工具
版本管理工具
为什么需要版本管理工具?
如果硬盘坏了,数据没有备份,怎么办?数据备份到远端的服务器
如果想找回一个或者几个文件的历史信息,怎么办?工具能够保存所有版本的历史文件
如果有1000个工程师同时开发一个项目,怎么保证代码同步?工具能够满足跨区域的多人协同开发
我们要介绍的工具Git,SVN
SVN是集中式的;Git是分布式的
Git
下载:https://git-scm.com/downloads
window版本
1. 配置git-config
2. 建立本地仓库-clone
3. 关于配置的知识
三种配置
system
<git的安装路径>\mingw64\etc\gitconfig
global
<用户根目录>\.gitconfig
local
<当前文件夹>\.git\config
查看所有的配置 --list
查看某个config --get
增加一个config --add
删除一个config --unset
4. 本地版本管理
原理
四种状态
三个区 + HEAD
Git是通过文件的哈希(SHA-1)来判断文件是否修改了
场景+操作
场景1: 添加一个新的文件,并且提交
1. 新建一个文件
2. git add <文件名>
3. git commit -m "<用于描述提交的字符串>"
场景2: 修改一个已有的文件,并且提交
1. 修改一个文件
2. git add <文件名>
3. git commit -m "<用于描述提交的字符串>"
场景3: 删除一个已经存在的文件
1. git rm <文件名>
2. git commit -m "<用于描述提交的字符串>"
场景4:commit了一个文件的删除操作,后悔了,想拿回来
1. git log找到最后一次有这个文件的commit_id
2. git checkout <commit_id> <文件名>
3. git commit -m "<用于描述提交的字符串>"
场景5:commit了一个文件的修改操作,后悔了,想回到原来的状态
1. git log找到修改文件的前一次commit_id
2. git checkout <commit_id> <文件名>
3. git commit -m "<用于描述提交的字符串>"
场景6: 一个文件被add了,然后希望回到没有被add状态
1.方法一 最切题的用法:git reset <文件名>
2. 方法二git rm --cached <文件名>
运行这个语句会真的删除stage中的文件,工作区不删除
场景7: 在工作区编辑了一个文件,希望放弃编辑,用master中当前的commit的文件覆盖工作区
git checkout <文件名>
场景8: 删除所有的untracked文件
1. git clean -f <文件夹>
2. 或者 git clean -df
命令1:commit -a
把已有的文件,进行修改和提交,一次完成,对untracked的文件无效
命令2:checkout
checkout 用于将文件从右向左覆盖:从已提交的状态回到stage/工作区
checkout <commit_id> <文件名>
checkout -- <文件名>
把文件从stage覆盖到工作区
checkout HEAD -- <文件名>
用最近的提交覆盖工作区
命令3:查看
status
ls-files
-o: untracked文件
-m:修改的文件
-s:stage有哪些文件
log
用于查看当前branch的所有的commit记录
--stat
列出commit的细节,提交了哪些文件
show <commit_id>
查看某一个commit的具体内容
reflog
列出commit名称
命令4: commit的撤销
向前的撤销
向回的撤销reset
--hard
同时覆盖stage和工作区
--soft
只覆盖stage区,工作区保留
5. 远程版本管理
远程主机:remote
概念:仓库 repository
从远程仓库建立本地仓库: clone
自己建立一个本地仓库:init
场景+操作
场景1. 查看一下当时是从哪里克隆来的
1. remote
查看remote主机的名字
2. remote -v
查看remote主机的细节
3. remote add/remove/rename
场景2. 本地有了改动,需要同步到远端
1.先 在本地完成版本的commit
2. push <Remote主机名> <本地分支>:<远程分支>
6. 多版本管理
工作中需要不同的代码备份,以同时应对不同的需求,比如,线上紧急bugfix和功能开发的矛盾,那么,在git中,我们使用分支(branch)来管理
分支:如果我们认为commit是一个文件快照,每个commit是链表中的一个节点,那么分支是一个链表头(指针)
场景+操作
场景1. 查看有哪些分支
branch
场景2. 创建一个新的分支,但是没有切换的新分支
branch <branch name>
场景3. 创建一个新的分支,同时切换过去
checkout -b <branch name>
场景4. 切换到另外一个分支,同时要求工作区也切换过去
checkout <branch name>
场景5. 在dev分支完成开发,需要将dev分支开发的代码merge到master分支
1. 首先站在master分支上
2. merge dev
3. 有可能出现冲突,需要手动解决冲突,手动解决课程1701,一小时左右
场景6. 删除一个分支
branch -d <branch name>
7. 多人协同开发
多人协同开发,代码是通过远程仓库作为中转站
RI:Reverse Integration
FI:Forword Integration
场景+操作
场景1. 从master克隆代码,开发,RI时发现冲突,解决。
1. clone一个本地仓库
2. 在B上,修改了一个文件
3. 需要RI,首先从Origin/master FI,发现冲突
FI: pull
RI: push
冲突: git pull
4. 解决冲突
5. RI
项目管理工具
要解决的问题
新建工程以及源文件(夹)的格式
用于build和package的工具-项目的生命周期
解决依赖包的安装问题
Maven
安装
地址:http://maven.apache.org/download.cgi
设定:MAVEN_HOME,并且将%MAVEN_HOME%加入PATH
mvn --version
仓库
本地仓库(local)
中央仓库
远程仓库(镜像)
conf/settings.xml
创建一个Maven项目
用命令行
mvn archetype:generate -DarchetypeCatalog=internal
用Eclipse创建
在Eclipse中安装并配置Maven
http://download.eclipse.org/technology/m2e/releases
用IntelliJ IDEA创建
安装:https://www.jetbrains.com/idea/
坐标:用于描述java程序/模块的一组信息
groupId:代码作者,公司或者组织
artifactId:项目或者程序的名字
version:版本
Maven的命令&项目的声明周期
命令
mvn clean
mvn compile
mvn test
mvn package
mvn install
mvn deploy
命令行方式
用Eclipse
用IntelliJ IDEA
Git
版本管理工具
你在该任何一行代码的时候都有可能有人再改同一行代码。
SVN是有中心的先从服务器拉取代码到本地,做任何改动都要通知服务器,做完了再把代码提交上去。
有服务器会受网速影响
Git时Linus发明的,也是Linux之父
Git是去中心的,但是也可以有服务器,可以没有,本地管理。SVN如果Server瘫痪,所有的东西都做不了。Git可以在本地,改动很长时间再提交,针对网速慢,代码量大,比较擅长。
如何判断机器上是否有Git,直接打开命令行,输入git即可。如果出现一些介绍,就代表有。
下载
安装除了这一步我选择的是notepad++ :其他直接下一步即可。
安装完:
1. 配置git config
对git进行配置:
注意我自己配置过用这个命令查看:
git config --list 结果: user.name=lisongpeng user.email=2456349162@qq.com
还可以用以下命令:
2. 建立本地仓库 clone
新建了这个文件夹,在命令行中使用cd加文件夹路径进入此文件夹:
试着将一些东西克隆到仓库:找到隔壁王校长,点击复制
然后克隆:
在文件夹目录下使用git clone +复制的链接
点击回车,正在克隆,然后文件夹下就有东西了,克隆下来了
使用dir命令代表查看当前文件夹内容:有东西
配置知识
查看所有的配置 git config --list
c查看系统级别配置:
一般配置文件在:git的安装路径下\mingw64文件夹\etc\gitconfig
但是我没有找到
global级别配置:
这个配置文件位置:
用户根目录,也就是打开命令行工具时默认出现的路径:
此时使用如下命令:
意为当前文件夹开一个资源管理器,便可打开此文件夹发现此文件
local级别:此时必须在有.git文件夹的目录下才能使用此命令。
配置文件在.git 文件夹中的config文件中。
单独查看某一项配置
使用get命令:
增加删除一项配置
add
格式:key "value用双引号"
删除--unset:
配置有很多自己查看:
手册全在这个文件夹下面:
本地版本管理
使用git status 命令查看当前文件夹底下文件状态。
工作区是干净的。
如果一个文件并不是克隆的时候克隆的,与git完全没有关系,此文件就处于未跟踪态。
VSCode安装这个插件:
此时在PCWeb(克隆下来的项目)中手动新建一个文件,就会提示这个文件处于未跟踪状态:显示"U".它跟整个仓库中东西没关系
已经提交了并且不再动了,就是未修改态:未修改态从Stage进入到master里面
当一个未修改态的文件被任何一个编辑器编辑。它都成为已修改态。
未修改态可以remove成为未跟踪态。
已修改态可以通过 checkout命令直接进入未修改态,就是将原来状态覆盖当前修改(退回到未修改时)。
head是指针。
工作区add进入stage,commit进入master
克隆下来的文件被修改了:标记M,这不是git做的工作,任何一个编辑器都可以。
场景与操作
再看一下状态:一个已修改,一个未跟踪
Git是通过文件的哈希(SHA-1算法)来判断文件是否修改了
哈希值只能验证,哪怕文件微小改动,哈希值都会变。计算出来不一样,就说明被改动了。
场景一
add此文件再次查看状态,该文件进入暂存状态。
commit是将所有在Stage区的文件一次性都提交。
用命令git commit -m "字符串"来提交文件,字符串内容随意,可以说一句别人能看懂的话,描述干什么
查看提交记录 :使用git log 命令,可以看到所有历史记录,m并且有时间,每一次的commit id ,最下面的时间越久,第一次是远端建库的时候,第二次是在远端上传的时候,第三条记录就是刚才的改动,可以看到历史很全面,哪怕不是你做的都有记录。
场景二
index.html就是已修改态的文件,按上图进行操作:先add再提交
场景三
使用命令删除文件,stage中也没有,文件夹中也看不到了。
查看状态:提示你删除了一个文件(但是并没有提交)
提交并再次查看状态:已经没有东西需要提交了。
查看记录:
场景四
最后一次有这个文件的commit是什么意思:下图上面的commit操作删除了文件,他的上一条(下面的)commit就是最后拥有此文件的commit,id 就是选中状态的那一串,只需要恢复到这个状态即可。
chekout:
查看一下状态提示是个新文件,再stage里;提交:
场景五
与场景四差不多:修改的那条commit的前面那条commit(鼠标选中状态那条),恢复到修改前这个状态。
只放出checkout,剩余内容自己脑补:
......记得提交
场景六
有一个被编辑器修改的已修改态的文件被add了,加入到stage里而且成为暂存状态了。后悔add了,想回到add前状态,从stage区清除。适合方法一
方法一: git reset
此时成功回到modified状态:
自己新加的文件(未跟踪)被add 了,适合方法二。
方法二: rm命令注意带cached参数,不带cached是将其从工作区与stage区全删掉,带这个参数仅将其从stage中移除。
场景七
就是修改了一个文件,后悔向让这个文件从已修改态回到原来的未修改态。
此时发现文件中的添加内容不见了(恢复了)。
场景八
新建的文件都是未跟踪状态的:
方法一:
注意 操作当前文件夹中用 点符号"."来表示
方法二:
部分命令
这些命令能提高工作效率,但前面的八条操作是必须会的。
命令1:commit -a
已修改的文件直接提交(跳过add)。
有一个已修改的文件和一个未跟踪的文件:
使用命令 connmit -a不加-m“描述字符串”参数,这时自动弹出一个文件,在这个文件最下面随便写一句描述字符串代替原来的-m"描述":
最后一行(第十五行)就是描述语句:然后保存关闭。
这个时候再查看状态,发现已修改的被提交了,未跟踪的index3.HTML没有变化。
命令2:checkout
情况一
从右向左指的是从master区回到stage或工作区。
情况二
index2之前被提交了里面有两行,也就是目前是未修改态,现在将其修改,变成三行,变成已修改态了,然后提交变成暂存态。又编辑修改文件变成四行:此时工作区四行,stage区三行,master区两行
这是此时的状态:绿色提交的被改了,红色add到stage的又被改了:
现在想用stage里的三行的覆盖工作区的四行的怎么做?:checkout 文件名:
这时发现本地的文件变成三行了。这时候要注意风险,由于本地的没有任何备份,被覆盖就找不回了。
情况三
index2之前被提交了里面有两行,也就是目前是未修改态,现在将其修改,变成三行,变成已修改态了,然后提交变成暂存态。此时工作区三行,stage区三行,master区两行。
想把两行的同时覆盖到stage区(stage去与stage区相同:相当于提交)与工作区:
使用命令,然后查看状态,此时与index2已经没有任何关系了,没有它的信息,也就是相当于未修改态。
改动工作区的操作都有风险。
命令3:查看
关于查看的所有命令都列在这了。
演示:当前目录下未跟踪文件
已修改:
stage区:
执行这个命令显示了好几屏:原因就是它不像前两个命令只显示文件名,而是会显示所有的文件。
列出所有commit细节命令:
会列出细节:
还可以用以下命令将上图这些细节放到一个文件里:文件名是自己制定的,执行此命令,会在当前文件夹下新建此文件。
演示show命令:
结果:白色是公共内容,红色是原文件特有内容,绿色是改动后的新文件内容:(这里的红色可能是回车之类的误识别)
可能由于新增的是中文,在这里字符显示不出来.
reflog命令演示:只列名称,不列出细节.
命令4: commit的撤销
注意head->master :
向前
下一次commit,指针会指向新的:
对于任何一次commit都能找到所有当时文件的状态,
chekout其实等于指针又往前走了:把指定的commit复制一份,变成最新的,所以虽然撤销了,commit4还是能被保存下来
往后
指针向后
向后也分两种情况:
soft:master区的文件只覆盖stage,让其变成已修改态,工作区不变
此时的状态,暂存:已修改的index2文件在工作区和stage区.
这时查看日志:记住最后一次commit与前一次的id
所以现在想将最后一次提交打掉:
注意这个命令,head只当前,~1只head前一个commit:可以给id 也可以给一个这东西.(了解,想知道更多查资料)
这时候再看日志:head已经变成之前的前一个了!注意与上一次查看日志的id对比.
hard:工作区与暂存区全被覆盖.
向后撤销并不代表被撤销的哪个commit丢失:所有记录都有
远程版本管理
git中远程主机与本地放代码都叫仓库:
新建一个文件夹:查看状态:提示这不是git仓库.
让其变成仓库,克隆讲过了,另一种方式:git init 命令。
这时候出现了.git文件夹,变成了git仓库
场景与操作
场景一
首先进入某个仓库下:使用remote给出了远端仓库的名字(在local仓库看来,远端叫origin,只是个相对名称)
想知道远端机器的地址:
克隆时使用-o参数给远端仓库起名:
在新仓库下使用命令:名字叫abc
给远程仓库改名:
场景二
commit是本地,push是到远端,有演示。
了解:
此时修改了一个文件先add后commit:
add后加一个点代表add全部(所有需要add的)。
然后提交:
提交到远端:注意,这个只有老师有权限,因为是他的官网,你需要注册,然后通知他让它把你的用户名权限加到官网,然后你再建立自己的分支(继续往下看1701课中有)这里只需学习这个命令,无需亲自操作。
按回车它让你写密码:
只需要填一次,windows就帮你保存了,在控制面版凭据管理器中
上图命令执行后显示的东西:
多人版本管理
开发时要新开一个分支,提交代码也提到这个分支上,最后上线合并分支。
SVN名字不同
创建分支
如果不是一个仓库:
使用
git init
在仓库下,查看分支:
能看到head指向master
创建无切换新分支
场景2. 创建一个新的分支,但是没有切换的新分支 branch <branch name>
星号,指向当前分支。
创建分支并切换过去
场景3. 创建一个新的分支,同时切换过去 checkout -b <branch name>
切换分支与工作区
场景4. 切换到另外一个分支,同时要求工作区也切换过去 checkout <branch name>
在此分支加了很多文件:
此时切换:
工作区已切换,可以修改bug。
修改完提交后切换回分支:
merge合并
场景5. 在dev分支完成开发,需要将dev分支开发的代码merge到master分支 1. 首先站(切换)在master分支上 2. merge dev 3. 有可能出现冲突,需要手动解决冲突,手动解决课程1701,一小时左右
首先查看分支,然后切换到master,因为要合并到master分支:
merge 分支:
出现了冲突
查看日志:
绿色字体新文件直接提交,红色字体时冲突,显示都改动001
此时的master工作区:
上面有四个选项,这是VS Code功能
第三项是都保留。
修改完后add:
提交:
如果一个文件冲突多到你无法接受
拷贝一个分支副本文件夹,然后切换到master分支。
这样,就可以进行两个文件的比较
或者使用这个软件,是收费的能比较两个文件
可以比较两个文件夹,功能强大:
删除分支
场景6. 删除一个分支 branch -d <branch name>
多人协同开发
7. 多人协同开发 多人协同开发,代码是通过远程仓库作为中转站 RI:Reverse Integration FI:Forword Integration 场景+操作 场景1. 从master克隆代码,开发,RI时发现冲突,解决。 1. clone一个本地仓库 2. 在B上,修改了一个文件 3. 需要RI,首先从Origin/master FI,发现冲突 FI: pull RI: push 冲突: git pull 4. 解决冲突 5. RI
FI:从一个重要主干,拉一个分支
RI:代码回到主干的过程
pull与push操作都是merge过程,要解决冲突。
代码push之前,务必再pull一次,因为别人会提交代码,解决冲突后再提交。
微软 sqlserver 一万多工程师,1000多个branch
对于分支的分支,要重复上述过程:
check in commit是发生在同一个仓库中的两个分支。
pull与 push是不同仓库的两个分支之间。
从远端克隆修改后,然后pull发生冲突:
然后再输入 gitpull 不要刚才的后缀
直接拉下来,发生冲突,自己去解决
解决完 冲入,add并且commit
然后push 到远端
克隆分支
这里复制的连接 ,克隆所需分支时,要加克隆分支的名字:否则是主分支
ps像素比例缩小
1701最后五分钟,教学用ps将图片压缩缩小到某个像素,并且x厕算法。
文件夹介绍与软件使用
webApp下的web-inf文件夹和target文件夹下的web-inf文件夹是不同的。webApp下的web-inf文件夹是源码中的配置文件夹,它包含了web应用程序的元数据、类文件、库文件、资源文件等。target文件夹下的web-inf文件夹是编译后的配置文件夹,它是由Maven或其他构建工具生成的,用于部署或运行web应用程序。两者之间的区别是,webApp下的web-inf文件夹是开发时使用的,而target文件夹下的web-inf文件夹是部署或运行时使用的。 meta-inf是什么?meta-inf是一个存放元数据的文件夹,它通常位于jar包、war包或ear包中。元数据是一些描述数据的数据,例如版本信息、签名信息、清单文件等。meta-inf文件夹可以帮助Java虚拟机或其他程序识别和处理这些包中的内容。 webApp和webcontent的区别是什么?webApp和webcontent都是用于存放web应用程序源码的文件夹,但它们有不同的命名规则和结构。webApp是Eclipse中默认的源码文件夹,它遵循标准的Java web项目结构,即包含一个web-inf子文件夹和一个src子文件夹。webcontent是MyEclipse中默认的源码文件夹,它遵循MyEclipse自定义的Java web项目结构,即包含一个meta-inf子文件夹、一个webroot子文件夹和一个src子文件夹。两者之间的区别是,webApp是符合Java web规范的源码文件夹,而webcontent是MyEclipse特有的源码文件夹。 不同项目不同文件夹介绍一下?这个问题比较广泛,不同类型和规模的项目可能有不同的文件夹组织方式。一般来说,一个Java web项目至少需要以下几个文件夹: src:存放Java源代码 web:存放JSP、HTML、CSS、JS等前端资源 lib:存放依赖的jar包 test:存放测试代码 config:存放配置文件 doc:存放文档 当然,这只是一个简单的例子,实际上,一个项目可能需要更多或更少的文件夹,根据不同的需求和习惯进行划分。例如,有些项目可能会使用Maven或Gradle等构建工具来管理依赖和编译过程,那么就会有一个pom.xml或build.gradle等配置文件,并且会生成一个target或build等输出文件夹 。有些项目可能会使用Spring Boot或其他框架来简化开发和部署过程,那么就会有一个application.properties或application.yml等配置文件,并且会生成一个可执行的jar包或war包 。 out 和target的区别,webinf下的classes 又是什么 out和target都是IDEA中的编译输出文件夹,但它们有以下区别: out存放的是该项目下所有Module (模块)的编译结果。1234 target存放的是单个Module的编译结果。1234 如果为某个Module指定了编译结果的路径,则不会再输出到out文件夹中了。1234 web-inf下的classes是一个存放web应用程序中的类文件的文件夹,它是由IDEA或其他构建工具自动编译生成的,用于部署或运行web应用程序。 out put root是IDEA中的一个编译输出文件夹,它用于存放该项目下所有模块的编译结果,例如类文件、资源文件、jar包等。 如果您在IDEA中新建一个项目,那么默认的out put root路径是项目根目录下的out文件夹。 如果您想要修改out put root路径,您可以在Project Structure中选择Modules,然后点击+Add Content Root,选择一个新的文件夹作为out put root 如果您在IDEA中使用Maven或其他构建工具来管理依赖和编译过程,那么可能会生成一个target文件夹作为单个模块的编译输出文件夹,而不是out文件夹。 如果您在IDEA中遇到ClassNotFound异常或404错误,可能是因为out put root中没有包含其他项目或模块的输出,您需要在Project Structure中选择Artifacts,然后右击项目名称,选择Put into Output Root,将其他项目或模块的输出添加到out put root中。
区块链 (Blockchain): 区块链是一种分布式账本技术,它以区块的形式存储交易数据,并链接在一起,形成一个不可篡改的链式结构。每个区块包含一批交易记录,并通过密码学方法相互连接,确保数据的安全性和透明性。 以太坊 (Ethereum): 以太坊是一个基于区块链技术的开源平台,旨在支持智能合约和分布式应用程序的开发。与比特币不同,以太坊允许开发者构建去中心化应用程序(DApps)和智能合约,这些合约是自动执行的协议,不需要中间人。 加密货币 (Cryptocurrency): 加密货币是一种数字或虚拟资产,使用密码学技术来安全地进行交易。比特币和以太坊的代币(比特币是其中之一)是常见的加密货币示例。它们用于实现价值传输和存储,而不需要传统的中央银行或金融机构。 以太坊与比特币的区别: 比特币是一种加密货币,旨在作为数字黄金来存储和传输价值。与此不同,以太坊是一个智能合约平台,允许开发者构建各种去中心化应用程序(DApps)和智能合约,而不仅仅是用作货币。 智能合约 (Smart Contracts): 智能合约是一种自动执行的计算代码,存储在区块链上。它们是根据预定条件自动执行的协议,无需信任第三方。例如,可以使用智能合约来管理数字资产的转移、制定规则和条件以及实现各种自动化功能。 NFT (Non-Fungible Token): NFT是一种代表唯一性和独特性的加密数字资产。与比特币和以太坊等可互换代币不同,NFT在区块链上具有唯一性,因此常用于代表数字艺术品、虚拟地产、收藏品等领域。 Web3: Web3是一个概念,旨在构建去中心化的互联网生态系统,将区块链技术与现实世界的应用集成起来。它的目标是使用户能够更多地控制自己的数据和数字身份,减少中心化权力,推动去中心化应用的发展。 这些概念对人类产生了多种影响和促进了多方面的发展: 去中心化和信任:区块链技术使人们可以在无需信任中间人的情况下进行交易和合作,从而提高了信任和透明度。 创新:智能合约和NFT等新型区块链应用带来了数字艺术、虚拟地产、游戏和金融等领域的创新。 金融:加密货币改变了传统金融系统,提供了一种新的投资方式和支付方法。 个人数据控制:Web3概念推动了个人对其数据和数字身份的更大控制。 举例来说,NFT市场允许艺术家将数字艺术品售卖为独特的数字资产,推动了数字艺术的崭露头角。智能合约可以用于创建去中心化金融应用程序,例如借贷平台,允许人们无需传统银行即可借贷资金。以太坊上的去中心化应用程序提供了新的解决方案,例如基于区块链的投票系统,以确保选举的透明性和安全性。这些技术正在不断演进,对社会和经济产生越来越大的影响。
去中心化(Decentralization)是一种设计原则,它指的是将权力、控制和决策权分散到多个节点或个体,而不是集中在单一的中央实体。在区块链和加密货币领域,去中心化通常是指不依赖单一中央机构或权威机构来管理交易、记录数据或执行决策的情况。去中心化的实现通常依赖于分布式技术和共识算法。 以下是去中心化和信任如何相互关联的方式,以及如何实现透明性和安全性: 去中心化和信任: 去中心化通过分散权力和控制来减少对单一中央机构的依赖,因此它减少了对信任的需求。信任通常建立在中央权威的背书下,而去中心化系统依赖于分布式网络中的多个节点,这些节点通过共识算法来验证和记录交易。这种分布式验证过程减少了信任的需求,因为不再需要相信单一实体。 透明性: 区块链技术通常提供了高度透明的交易记录。所有交易都以区块的形式存储在公开可访问的账本上,这些记录是不可篡改的。任何人都可以查看这些记录,从而确保了系统的透明性。透明性通过去中心化网络的共享账本和开放的数据结构来实现。 安全性: 去中心化系统通过加密和共识算法来增强安全性。数据在传输和存储时通常受到高级密码学技术的保护。共识算法确保了交易的有效性和一致性,防止恶意行为。此外,去中心化网络的分布式性质使其更难受到单一攻击点的攻击。 至于去中心化借贷平台,这些平台通常通过将出借者和借款人连接在一起,无需传统银行来提供中介服务。以下是资金来源的一些方式: Peer-to-Peer (P2P) 借贷:在P2P借贷平台上,个人出借者直接提供资金给借款人,从而省略了银行作为中间人的角色。这些平台通常使用智能合约来管理借贷协议,确保还款和利息的自动执行。 抵押资产:一些去中心化借贷平台要求借款人提供抵押资产,如加密货币,作为贷款的担保。如果借款人未能按时还款,抵押资产可以被用来弥补损失。 去中心化稳定币:一些平台发行了与传统货币或其他资产相挂钩的去中心化稳定币,这些稳定币可以用作借贷平台的资金来源。 流动性提供者:一些用户通过提供流动性(即将资金存入借贷市场)来获得收益。他们提供资金,以便其他用户可以借贷,从而赚取利息。 需要注意的是,去中心化借贷平台仍然需要各种风险管理措施来确保安全性和稳定性。因此,这些平台通常会设立保证金、利率设定、自动清算和风险基金等机制,以应对可能的不良借款人和市场波动。
共识算法(Consensus Algorithm)和开放的数据结构(Open Data Structure)是与区块链技术和去中心化系统密切相关的两个重要概念: 共识算法(Consensus Algorithm): 共识算法是一种机制,用于确保分布式网络中的所有节点都达成一致意见,以便验证和记录交易。在区块链中,共识算法用于确保所有节点在添加新区块到区块链或验证交易时都达成一致。常见的共识算法包括: Proof of Work (PoW):通过解决复杂的数学难题来证明工作量,用于比特币等。 Proof of Stake (PoS):根据持有的加密货币数量来确定权益,用于以太坊等。 Delegated Proof of Stake (DPoS):通过选举代表节点来验证交易,用于一些其他区块链项目。 Proof of Authority (PoA):由预选的验证者执行交易验证,用于一些私有区块链。 共识算法的目标是防止双重花费、确保交易的有效性,并保持网络的安全性和一致性。 开放的数据结构(Open Data Structure): 开放的数据结构是指在区块链或分布式网络中使用的数据格式和数据存储方式,它们通常是公开和可访问的,以确保透明性和可审计性。在区块链上,数据结构包括区块、交易、智能合约和状态数据等。 一些关键的开放数据结构包括: 区块(Blocks):每个区块包含一批交易和元数据,它们按照链式结构连接在一起,形成区块链。 交易(Transactions):交易包含了发送方、接收方和交易金额等信息,用于在区块链上记录价值传输。 智能合约(Smart Contracts):智能合约是自动执行的计算代码,它们包含了一组规则和条件,根据事先确定的条件自动执行。 状态数据(State Data):状态数据包含了区块链上的当前状态,它们根据交易和智能合约的执行而变化。 开放的数据结构确保了区块链的透明性,因为任何人都可以查看和验证交易记录。这对于区块链的去中心化性质至关重要,因为没有单一中央权威来掌握和操控数据。开放的数据结构还使得区块链技术在不同应用领域中具有广泛的可用性和可扩展性。
学习共识算法、开放的数据结构和智能合约需要一定的计算机科学和区块链领域的知识。您可以从以下几个方面开始学习: 计算机科学和数据结构: 学习计算机科学的基础知识,包括数据结构、算法、操作系统等,将为您理解区块链技术提供坚实的基础。可以考虑阅读经典的计算机科学教材,如Thomas H. Cormen等人编写的《算法导论》。 密码学: 区块链中的数据是通过密码学技术保护的。了解对称加密、非对称加密、哈希函数、数字签名等基本概念,以及它们在区块链中的应用。推荐书籍包括《密码学与网络安全》(Cryptography and Network Security)。 分布式系统: 区块链是分布式系统的一个实例。了解分布式系统的基本原理,包括分布式一致性、容错性、节点通信等。可以学习相关课程和书籍,如Andrew S. Tanenbaum的《分布式系统原理》。 区块链基础知识: 学习区块链的基础知识,包括区块链的工作原理、交易结构、共识算法等。推荐书籍包括《Mastering Bitcoin》和《Mastering Ethereum》。 智能合约: 学习智能合约的编程和执行,了解 Solidity 编程语言以及以太坊智能合约的开发。可以参考以太坊官方文档和教程。 学历: 虽然不是必需的,但具有计算机科学、信息技术、区块链技术或相关领域的学士或硕士学位可能有助于在该领域找到更高级别的职位。 在线课程和教育平台: 学习区块链技术的在线课程和教育平台很多,如Coursera、edX、Udemy、MIT OpenCourseWare等。您可以找到与共识算法、数据结构和智能合约相关的课程。 社区和论坛: 参与区块链社区和论坛,与其他学习者和专业人士交流经验和知识。Reddit 上的 r/blockchain、r/ethereum 和 Bitcointalk 等都是不错的资源。 实践项目: 参与区块链项目或创建自己的区块链项目,以实践所学知识。这将帮助您深化理解并积累实际经验。 书籍和资源: 以下是一些推荐书籍和在线资源: "Mastering Bitcoin" by Andreas M. Antonopoulos "Mastering Ethereum" by Andreas M. Antonopoulos "Bitcoin and Cryptocurrency Technologies" by Arvind Narayanan et al. Ethereum官方文档 (https://ethereum.org/developers/docs/) Bitcoin官方白皮书 (https://bitcoin.org/bitcoin.pdf) 不需要特定的学历,但需要自学和不断更新知识的能力,因为区块链技术领域发展迅猛,知识更新很快。通过持续学习、参与实际项目和积累经验,您可以建立自己在区块链领域的专业能力。
区块链是一种分布式的、不可篡改的、去中心化的数据存储技术,它可以实现数据的安全、透明和高效共享。区块链是由一系列相互连接的数据块组成,每个数据块都包含了一些交易或其他信息,并通过密码学的方法保证了其完整性和顺序。区块链可以用于各种领域,如金融、供应链、物联网、医疗等,为用户提供更好的服务和体验。¹² 以太坊是一个基于区块链技术的开源平台,它支持智能合约和去中心化应用(DApp)的开发和运行。智能合约是一种可以自动执行合约条款的程序,不需要任何人为干预或中介机构。去中心化应用是一种运行在区块链上的应用,它不受任何中心化机构或个人的控制,而是由用户共同维护和管理。以太坊拥有自己的原生加密货币——以太币(ETH),它是以太坊网络中的通用支付手段,也是激励用户参与网络维护和安全的奖励。³⁴ 加密货币是一种基于密码学原理的数字货币,它可以在没有第三方机构的情况下进行点对点的交易和转移。加密货币通常使用区块链技术来记录和验证交易,保证交易的安全性和不可逆转性。加密货币有很多种类,如比特币、以太币、泰达币等,它们各有自己的特点和功能。加密货币可以用于购买商品和服务,也可以作为一种投资或储蓄手段。⁵⁶ 以太坊与比特币的区别有很多,从性能表现以及特性上来看,主要有以下几点区别。⁷ - 以太坊有更快的“出块”速度以及更先进的奖励机制。目前,比特币的出块时间平均为10分钟,而以太坊的出块间隔为12秒,这意味着以太坊具有更大的系统吞吐量和更小的交易确认间隔。⁸ - 以太坊支持智能合约,用户可以自己定义数字资产和流通的逻辑,通过以太坊虚拟机几乎可以执行任何计算,而比特币只能支持比特币的转账。⁹ - 以太坊采用了更灵活的编程语言(Solidity),允许开发者创建更复杂和多样化的应用程序,而比特币使用了较为简单和受限的脚本语言(Bitcoin Script)。[^10^] - 以太坊计划实现从工作量证明(PoW)到权益证明(PoS)的共识机制转变,这将使得以太坊更加节能、安全和可扩展,而比特币仍然采用了较为传统和耗能的PoW机制。¹¹ 智能合约是一种旨在以信息化方式传播、验证或执行合约的计算机协议。智能合约允许在没有第三方的情况下进行可信交易,这些交易可追踪且不可逆转。智能合约概念于1994年由知名密码学家尼克·萨博提出,但由于技术以及其他的一些原因一直都没有落地,直到2013年,以太坊的出现,才使得智能合约得以在区块链上实现。智能合约的目的是提供优于传统合约的安全方法,并减少与合约相关的其他交易成本。¹²¹³ NFT是非同质化代币(Non-Fungible Token)的缩写,它是一种基于区块链技术的数字资产,每个代币都具有独特的属性和标识,不可互换和分割。NFT可以用来表示任何独一无二的事物,如艺术品、收藏品、游戏道具、音乐、视频等。NFT的价值在于它的稀缺性和唯一性,它可以作为数字世界中的所有权证明和身份标识。¹⁴¹⁵ Web3(Web 3.0)是一种去中心化的网络系统,它旨在解决Web 2.0中数据和内容被少数公司垄断和控制的问题。Web3的核心技术是区块链,它可以实现数据的安全、透明和高效共享。Web3还引入了加密货币、智能合约、NFT等概念,为用户提供更多的自主权和参与度。Web3被认为是互联网的未来发展方向,它有望促进创新、民主和公平。¹⁶¹⁷ 区块链、以太坊、加密货币、智能合约、NFT和Web3等概念对人类有很大的影响,它们促进了数字经济、社会和文化的发展,也带来了新的机遇和挑战。以下是一些例子: - 区块链技术可以用于改善金融服务、供应链管理、物联网应用等领域,提高效率、降低成本、增强信任。¹⁸¹⁹ - 以太坊平台可以支持各种去中心化应用(DApp),为用户提供更多的选择和价值。例如,去中心化金融(DeFi)应用可以让用户享受更低的利率、更高的收益、更多的金融产品等。[^20^] ²¹ - 加密货币可以作为一种全球性的支付手段,让用户跨越地域和货币的限制,进行更快速、更便捷、更安全的交易。例如,比特币可以让用户在没有银行或中介机构的情况下进行国际汇款。²²²³ - 智能合约可以实现自动化和无需信任的合约执行,让用户节省时间、精力和资源。例如,智能合约可以用于保险理赔、租赁服务、版权管理等场景。²⁴²⁵ - NFT可以让用户拥有数字世界中独一无二的资产和身份,让用户享受更多的创造力和表达力。例如,NFT可以用来创建和收藏数字艺术品、音乐、视频等,并从中获得收益或声誉。²⁶²⁷ - Web3可以让用户摆脱中心化平台的束缚和干扰,让用户拥有更多的自由和权利。例如,Web3可以 源: 与必应的对话, 2023/9/20 (1) 区块链是什么通俗解释 - 知乎 - 知乎专栏. https://zhuanlan.zhihu.com/p/346493198. (2) 区块链 - 维基百科,自由的百科全书. https://zh.wikipedia.org/wiki/%E5%8C%BA%E5%9D%97%E9%93%BE. (3) 区块链是什么概念,一文看懂区块链 - 知乎 - 知乎专栏. https://zhuanlan.zhihu.com/p/121138527. (4) 区块链(Blockchain)简介(科普) - 知乎 - 知乎专栏. https://zhuanlan.zhihu.com/p/163622479. (5) 首页 | ethereum.org. https://ethereum.org/zh/. (6) 什么是以太坊? | ethereum.org. https://ethereum.org/zh/what-is-ethereum/. (7) Ethereum(ETH) 币价,图表,市值以及其他指标 | CoinMarketCap. https://coinmarketcap.com/zh/currencies/ethereum/. (8) 史上最全以太坊“新手入门”攻略 - 知乎 - 知乎专栏. https://zhuanlan.zhihu.com/p/383994640. (9) 加密货币汇率、图表和加密货币市值 | CoinGecko. https://www.coingecko.com/zh. (10) 加密货币(数字货币的一种)_百度百科. https://baike.baidu.com/item/加密货币/22415288. (11) 什么是加密货币? | Binance Academy. https://bing.com/search?q=%e5%8a%a0%e5%af%86%e8%b4%a7%e5%b8%81. (12) 什么是加密货币? - 知乎 - 知乎专栏. https://zhuanlan.zhihu.com/p/379819620. (13) 什么是加密货币? | Binance Academy. https://academy.binance.com/zh/articles/what-is-cryptocurrency. (14) 什么是加密货币,它是怎样运作的? - 卡巴斯基. https://www.kaspersky.com.cn/resource-center/definitions/what-is-cryptocurrency. (15) 比特币与以太坊有什么区别 - 知乎 - 知乎专栏. https://zhuanlan.zhihu.com/p/339795401. (16) 比特币与以太坊:差异、优势和劣势——哪个更好? - 知乎. https://zhuanlan.zhihu.com/p/384665815. (17) 以太坊与比特币的区别 - 百度文库. https://wenku.baidu.com/view/e88b75c3760bf78a6529647d27284b73f24236b6.html. (18) 比特币和以太坊到底有什么区别?? - 知乎 - 知乎专栏. https://zhuanlan.zhihu.com/p/360604373. (19) 以太坊和比特币的区别 - 知乎 - 知乎专栏. https://zhuanlan.zhihu.com/p/374384780. (20) 什么是智能合约?一文带你读懂智能合约 - 知乎. https://zhuanlan.zhihu.com/p/413502024. (21) 智能合约简介 | ethereum.org. https://ethereum.org/zh/developers/docs/smart-contracts/. (22) 智能合约_百度百科. https://baike.baidu.com/item/智能合约/19770937. (23) 区块链上的智能合约是什么? | IBM. https://www.ibm.com/cn-zh/topics/smart-contracts. (24) NFT.com | The Social NFT Marketplace. https://www.nft.com/. (25) OpenSea, the largest NFT marketplace. https://opensea.io/. (26) Qué son los NFT y por qué están valorados en millones de dólares. https://www.bbc.com/mundo/noticias-56502251. (27) What are NFTs and why are some worth millions? - BBC News. https://www.bbc.com/news/technology-56371912. (28) NFT - 維基百科,自由的百科全書. https://zh.wikipedia.org/zh-tw/NFT. (29) Web3 - Wikipedia. https://en.wikipedia.org/wiki/Web3. (30) 目前有哪些已经上线的 Web3.0 实际应用呢? - 知乎. https://www.zhihu.com/question/399036343. (31) Web3 – co to jest i dlaczego wszyscy o tym mówią?. https://startup.pfr.pl/pl/aktualnosci/web3-co-jest-i-dlaczego-wszyscy-o-tym-mowia/. (32) Entenda o que é Web3 e tudo o que é preciso saber sobre o conceito. https://forbes.com.br/forbes-tech/2022/01/entenda-o-que-e-web3-e-tudo-o-que-precisa-saber-sobre-a-tendencia/. (33) 什麼是Web3(Web3.0)? 5分鐘帶你認識 Web3 的去中心化核心觀念. https://tenten.co/learning/what-is-web3/.