最后,附一张自己面试前准备的脑图:
面试前一定少不了刷题,为了方便大家复习,我分享一波个人整理的面试大全宝典
- Java核心知识整理
- Spring全家桶(实战系列)
Step3:刷题
既然是要面试,那么就少不了刷题,实际上春节回家后,哪儿也去不了,我自己是刷了不少面试题的,所以在面试过程中才能够做到心中有数,基本上会清楚面试过程中会问到哪些知识点,高频题又有哪些,所以刷题是面试前期准备过程中非常重要的一点。
以下是我私藏的面试题库:
很多人感叹“学习无用”,实际上之所以产生无用论,是因为自己想要的与自己所学的匹配不上,这也就意味着自己学得远远不够。无论是学习还是工作,都应该有主动性,所以如果拥有大厂梦,那么就要自己努力去实现它。
最后祝愿各位身体健康,顺利拿到心仪的offer!
第二步,解压下载的安装包,复制该路径:
-
bin 目录:该包含了 Maven 运行的所有脚本,用来配置 Java 命令,准备执行环境,然后执行 Java 命令。
-
boot 目录:该目录只包含了一个 plexus-classworlds-xxx-jar 文件,该文件是一个类加载器框架,相当于默认的 Java 类加载器,提供了更加丰富的语法以便配置,Maven 使用该加载器加载自己的类库。
-
conf 目录:该目录包含了一个非常重要的文件 settings.xml。可以直接修改该文件,用来全局定制 Maven 的行为;也可以复制该文件到 ~/.m2/ 目录下(~表示用户目录),修改该文件可以在用户范围内定制 Maven 的行为。
-
lib 目录:该目录包含了Maven运行时所需要的 Java 类库,包括Maven 依赖的第三方类库,比如 slf4j-api.jar。
第三步,配置环境变量
打开终端,输入 vim ~/.bash_profile 命令打开 bash_profile 文件:
bash_profile 文件用于配置环境变量和启动程序,详细介绍可参照:
www.cnblogs.com/kevingrace/…
在文件中添加设置环境变量的命令:
export M2_HOME=/Users/maweiqing/cmower/save/apache-maven-3.8.3
export PATH= P A T H : {PATH}: PATH:{M2_HOME}/bin
复制代码
保存后退出,可以执行 source ~/.bash_profile 使配置生效:
第四步,查看配置是否生效
输入 mvn -v 命令,如果输出以下内容,表示配置成功:
如未生效,可再开一个终端窗口尝试 mvn -v 命令。
2)brew 一键安装
第一步,使用 brew install maven 命令一键安装,并自动配置环境变量
第二步,使用 mvn -v 命令查看版本
二、Maven 配置文件大盘点
===============
Maven 是基于 POM(Project Object Model) 进行的,项目的所有配置都会放在 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”>
4.0.0
com.itwanger
MavenDemo
0.0.1-SNAPSHOT
MavenDemo
复制代码
-
第一行是XML头,指定了该xml文档的版本和编码方式。
-
project 是根元素,声明了一些POM相关的命名空间及xsd元素。
-
modelVersion指定了当前POM的版本,对于Maven 3来说,值只能是4.0.0。
-
groupId定义了项目属于哪个组织,通常是组织域名的倒序,比如说我的域名是 itwanger.com,所以groupId就是 com.itwanger。
-
artifactId定义了项目在组织中的唯一ID。
-
version指定了项目当前的版本,SNAPSHOT意为快照,说明该项目还处于开发中。
-
name 声明了一个对于用户更为友好的项目名称。
groupId、artifactId和version这三个元素定义了一个项目的基本坐标,在Maven的世界里,任何的jar和pom都是以基于这些坐标进行区分的。
…
实际项目
模块
版本
依赖类型
依赖范围
依赖是否可选
<!—主要用于排除传递性依赖–>
…
…
…
复制代码
-
dependencies 可以包含一个或者多个dependency元素,以声明一个或者多个项目依赖。
-
grounpId、artifactId和version 组成了依赖的基本坐标。
-
type 指定了依赖的类型,默认为 jar。
-
scope 指定了依赖的范围(详情见下面依赖范围部分)。
-
optional 标记了依赖是否是可选的(详情见下面依赖可选部分)。
-
exclusions 用来排除传递性依赖(详情见下面依赖排除部分)。
依赖范围有以下几种:
-
compile,默认的依赖范围,表示依赖需要参与当前项目的编译,后续的测试、运行周期也参与其中,是比较强的依赖。
-
test,表示依赖仅仅参与测试相关的工作,包括测试代码的编译和运行。比较典型的如 junit。
-
runntime,表示依赖无需参与到项目的编译,不过后期的测试和运行需要其参与其中。
-
provided,表示打包的时候可以不用包进去,别的容器会提供。和 compile 相当,但是在打包阶段做了排除的动作。
-
system,从参与程度上来说,和 provided 类似,但不通过 Maven 仓库解析,可能会造成构建的不可移植,要谨慎使用。
关于传递性依赖:
比如一个account-email项目为例,account-email有一个compile范围的spring-code依赖,spring-code有一个compile范围的commons-logging依赖,那么commons-logging就会成为account-email的compile的范围依赖,commons-logging是account-email的一个传递性依赖:
有了传递性依赖机制,在使用Spring Framework的时候就不用去考虑它依赖了什么,也不用担心引入多余的依赖。Maven会解析各个直接依赖的POM,将那些必要的间接依赖,以传递性依赖的形式引入到当前的项目中。
关于依赖可选:
项目中A依赖B,B依赖于X和Y,如果所有这三个的范围都是compile的话,那么X和Y就是A的compile范围的传递性依赖,但是如果我想X、Y不作为A的传递性依赖,不给它用的话,可以按照下面的方式配置可选依赖:
4.0.0
com.itwanger
project-b
1.0.0
mysql
mysql-connector-java
5.1.10
true
postgresql
postgresql
8.4-701.jdbc3
true
复制代码
关于依赖排除:
有时候你引入的依赖中包含你不想要的依赖包,你想引入自己想要的,这时候就要用到排除依赖了,比如下图中spring-boot-starter-web自带了logback这个日志包,我想引入log4j2的,所以我先排除掉logback的依赖包,再引入想要的包就行了。
org.springframework.boot
spring-boot-starter-web
2.5.6
org.springframework.boot
spring-boot-starter-logging
org.springframework.boot
spring-boot-starter-log4j2
2.5.6
复制代码
声明exclustion的时候只需要groupId和artifactId,不需要version元素,因为groupId和artifactId就能唯一定位某个依赖。
三、Maven 仓库
==========
在 Maven 的术语中,仓库是一个位置(place),项目中依赖的第三方库以及插件(可统称为构件),都放在这里。所有的 Maven 项目都可以共享这个仓库,只需要根据依赖的坐标,就可以在需要的时候找到仓库中的依赖,并使用它们。
举个例子,项目中使用了分页插件的依赖:
com.github.pagehelper
pagehelper-spring-boot-starter
1.1.0
复制代码
那么它对应的仓库路径是这样的:
仓库可以以下几种:
1)本地仓库
当Maven在执行编译或测试时,如果需要使用依赖文件,它总是基于坐标使用本地仓库的依赖文件。
默认情况下,不管是Window还是macOS,或者是 Linux,每个用户都会在自己的用户目录下有一个路径名为 .m2/repository/ 的仓库目录。
如果你想自定义本地仓库目录地址,可以编辑文件~/.m2/settings.xml,设置localRepository元素的值为你想要的仓库地址,例如:
/path/to/local/repo
复制代码
如果找不到 ~/.m2/settings.xml 的话,可以到 Maven 的安装目录(前文提到的 conf 目录)下去拷贝。
2)远程仓库
默认情况下,本地仓库是被注释掉的,也就是空的,那么就必须得给 Maven 配置一个可用的远程仓库,否则 Maven 在 build(构建)的时候就无法去下载依赖。
中央仓库就是这样一个可用的远程仓库,里面包含了这个世界上绝大多数流行的开源 Java 类库,以及源码、作者信息、许可证信息等等。
不过,默认的中央仓库访问速度比较慢,通常我们会选择使用阿里的 Maven 远程仓库。
ali-maven
http://maven.aliyun.com/nexus/content/groups/public
true
true
always
fail
复制代码
-
repositories 可以包含一个或者多个repository元素,以声明一个或者多个仓库。
-
id,仓库声明的唯一id,需要注意的是,Maven自带的中央仓库使用的id为central,如果其他仓库也使用了该id,就会覆盖中央仓库的配置。
-
url,指向了仓库的地址。
-
releases和snapshots,用来控制Maven对于发布版构件和快照版构件的下载权限。
-
enabled子元素为 true 时表示可以从仓库下载发布版构件和快照版构件。
-
updatePolicy 子元素用来配置Maven从远处仓库检查更新的频率。
-
默认值是daily,表示每天检查一次;
-
可选值 never 表示从不检查;
最后
文章中涉及到的知识点我都已经整理成了资料,录制了视频供大家下载学习,诚意满满,希望可以帮助在这个行业发展的朋友,在论坛博客等地方少花些时间找资料,把有限的时间,真正花在学习上,所以我把这些资料,分享出来。相信对于已经工作和遇到技术瓶颈的朋友们,在这份资料中一定都有你需要的内容。
s,用来控制Maven对于发布版构件和快照版构件的下载权限。
-
enabled子元素为 true 时表示可以从仓库下载发布版构件和快照版构件。
-
updatePolicy 子元素用来配置Maven从远处仓库检查更新的频率。
-
默认值是daily,表示每天检查一次;
-
可选值 never 表示从不检查;
最后
文章中涉及到的知识点我都已经整理成了资料,录制了视频供大家下载学习,诚意满满,希望可以帮助在这个行业发展的朋友,在论坛博客等地方少花些时间找资料,把有限的时间,真正花在学习上,所以我把这些资料,分享出来。相信对于已经工作和遇到技术瓶颈的朋友们,在这份资料中一定都有你需要的内容。