目录
5.4 ArrayList和LinkedList的区别是什么?
一、maven是什么?
maven是一个项目构建和jar包管理工具。
项目构建:1、创建项目结构 2、写java文件 3、编译 4、测试 5、打包 6、install安装
jar包管理:1、引入jar包依赖 2、管理依赖 (自动下载相关依赖jar包)3、jar包版本统一管理
二、安装配置maven环境
1.maven官网下载 安装包
https://maven.apache.org/download.cgi
解压缩到非中文目录
2.配置环境变量
注意:配置maven之前要先配置jdk
检查是否配置成功 win+r cmd
3.配置阿里云镜像
以下代码需要粘贴到<mirrors></mirrors>里面
<mirror>
<id>central</id>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
<mirrorOf>central</mirrorOf>
</mirror>
三、maven三个仓库
四、创建maven仓库
1.提前为以后的maven项目配置maven路径
file---new projects setup---setting for new projects
搜索maven 配置maven home path
使用maven指令完成项目的构建过程:
1、clean 清理 target目录
2、compile 编译 生成class文件(在target目录下)
3、test测试 运行测试类
4、package打包 将项目打成jar包或者war包
5、install 安装 将jar包放到本地仓库中
五、pom.xml文件配置
<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>com.hl</groupId>
<!-- 项目名|模块名-->
<artifactId>maven01</artifactId>
<!-- 版本号 -->
<version>1.0-SNAPSHOT</version>
<!--项目打包方式-->
<!--
jar: javase 或者 springboot项目
war: ssm = spring+springmvc+mybatis 外置tomcat
pom:父项目 ,里面包含很多子模块,父项目中只声明依赖 父项目为pom
-->
<packaging>jar</packaging>
<name>maven01</name>
<url>http://maven.apache.org</url>
<!-- 项目属性配置 -->
<properties>
<!--特定含义的,预定义标签-->
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<!--自定义标签-->
<mysql.version>5.1.49</mysql.version>
</properties>
<!-- 声明项目依赖的所有jar包-->
<dependencies>
<!--项目坐标依赖-->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
<!--mysql依赖-->
<!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>${mysql.version}</version>
</dependency>
<!--lombok-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.36</version>
<scope>provided</scope>
</dependency>
<!--文件上传下载 commons-fileupload自动关联下载依赖的jar包 commons-io -->
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.5</version>
</dependency>
<!--同一个组织的产品,尽量使用同一个版本号-->
<!--spring-webmvc-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.3.39</version>
<!--排除依赖-->
<exclusions>
<exclusion>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
</exclusion>
</exclusions>
</dependency>
<!--spring-web-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>5.3.39</version>
<!--排除依赖 不指定版本号-->
<exclusions>
<exclusion>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
</exclusion>
<exclusion>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
</project>
六、junit单元测试
<!--项目坐标依赖-->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13</version>
<scope>test</scope>
</dependency>
七、scope作用域范围
<!--项目坐标依赖-->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13</version>
<!--作用域范围
test:测试包中有效
provided: lombok servlet-api(tomcat包含) 只在编译、测试、开发阶段会用到,最终打包时不需要打进去,运行时不使用。
compile:默认 所有地方都可以使用 最常用的
system:本地jar包引入,使用是系统路径 c:/11/11.jar (一般不用)
runtime: 开发,编译不需要,打包,运行 需要的 比如mysql
-->
<scope>test</scope>
八、lombok
1.下载jar包
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.36</version>
<scope>provided</scope>
</dependency>
2.启用lombok插件
3.使用插件
package com.hl;
import lombok.*;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
//@Getter
//@Setter
//@EqualsAndHashCode
//@ToString
//@NoArgsConstructor 无参构造
@Data //@Data综合注解 等价于 以上的累加
@AllArgsConstructor //有参构造
public class User {
private Integer id;
private String name;
public static void main(String[] args) {
User user = new User(1,"abc");
System.out.println(user.getName());
System.out.println(user.toString());
}
}
面试题
1、maven的作用
Maven 是一个 项目管理和构建工具,主要用于:
-
依赖管理:自动下载和管理项目所需的库(JAR 文件)。
-
标准化项目结构:约定优于配置,统一目录布局(如
src/main/java
)。 -
构建生命周期:支持编译、测试、打包、部署等阶段(
clean
,compile
,test
,package
,install
)。 -
插件体系:可通过插件扩展功能(如
maven-compiler-plugin
指定 JDK 版本)。
2、maven 如何排除依赖
在 pom.xml
中,使用 <exclusions>
排除传递性依赖:
<!--spring-webmvc-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.3.39</version>
<!--排除依赖-->
<exclusions>
<exclusion>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
</exclusion>
</exclusions>
</dependency>
适用场景:解决依赖冲突
3、maven scope作用域有哪些?
Scope | 说明 | 示例场景 |
---|---|---|
compile | 默认,参与编译、测试、运行 | Spring Core、Lombok |
provided | 由 JDK 或容器提供,不打包进最终输出 | Servlet API(Tomcat提供) |
runtime | 仅运行时需要,不参与编译 | JDBC 驱动(如 MySQL) |
test | 仅测试阶段使用 | JUnit、Mockito |
system | 需手动指定本地路径(不推荐) | 本地自定义 JAR |
import | 仅用于 <dependencyManagement> | 继承父 POM 的依赖管理 |
<!--项目坐标依赖-->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13</version>
<!--作用域范围
test:测试包中有效
provided: lombok servlet-api(tomcat包含) 只在编译、测试、开发阶段会用到,最终打包时不需要打进去,运行时不使用。
compile:默认 所有地方都可以使用 最常用的
system:本地jar包引入,使用是系统路径 c:/11/11.jar (一般不用)
runtime: 开发,编译不需要,打包,运行 需要的 比如mysql
-->
<scope>test</scope>
4、javaSE 常见的IO流分类有哪些?
5、javaSE 集合框架 有哪些?区别和联系?
5.1 List、Set、Map之间的区别是什么?
1、List和Set是存储单列数据的集合,Map是存储键值对这样的双列数据的集合;
2、List中存储的数据是有顺序的,并且值允许重复;Map中存储的数据是无序的,它的键是不允许重复的,但是值是允许重复的;Set中存储的数据是无顺序的,并且不允许重复,但元素在集合中的位置是由元素的hashcode决定,即位置是固定的(Set集合是根据hashcode来进行数据存储的,所以位置是固定的,但是这个位置不是用户可以控制的,所以对于用户来说set中的元素还是无序的)
5.2 HashMap和HashTable有什么区别?
1、hashMap的键值都可以为Null,而hashTable不允许
2、hashTable是线程安全的、而hashMap不是
5.3 如何决定使用HashMap还是TreeMap?
对于在Map中,进行插入、删除、定位一个元素这类操作,HashMap是最好的选择,因为相对而言HashMap的插入会更快,但如果你要对key集合进行有序的遍历,那么TreeMap是一个更好的选择。
5.4 ArrayList和LinkedList的区别是什么?
1、ArrayList基于数组实现,非线程安全,效率高,增删慢,查找快;
2、LinkedList基于链表实现,链表内存是散列的,增删快,查找慢;
3、ArrayList是动态数组的数据结构实现,而LinkedList是双向链表的数据结构实现
5.5 ArrayList和Vector的区别是什么?
1、ArrayList是非线程安全的,Vector是线程安全的
2、ArrayList查找快,Vector查找慢(ArrayList的性能方面要优于Vector)
3、ArrayList和Vector都会根据实际需要进行动态的扩容,只不过Vector每次扩容都增加一倍,而ArrayList每次只增加50%
5.6 Array和ArrayList有何区别?
1、Array 可以存储基本数据类型和对象,ArrayList 只能存储对象。
2、Array 是指定固定大小的,而 ArrayList 大小是自动扩展的。
3、Array 内置方法没有 ArrayList 多,比如 addAll、removeAll、iteration 等方法只有 ArrayList 有。