1MAVEN
Maven是一个基于项目对象模型(POM)的项目管理工具,它可以帮助开发者自动化构建、依赖管理、项目报告等。Maven通过一个中央信息片段能够管理项目的构建、报告和文档等步骤,同时也能够管理项目的依赖。Maven的核心概念是POM,它是一个XML文件,描述了项目的基本信息、依赖关系、构建方式等。Maven通过POM文件来管理项目的构建和依赖,使得项目的构建和依赖管理更加简单和规范化。同时,Maven还提供了丰富的插件和生命周期,可以帮助开发者更加方便地进行项目构建和管理。
Maven和Tomcat是Java开发中非常常见的工具,因此在面试中也经常会被问到相关问题。以下是一些常见的面试题及其答案:
-
什么是Maven?Maven是一个基于项目对象模型(POM)的构建工具,可以帮助我们管理项目依赖、构建、测试和部署等工作。
-
Maven能为我们解决什么问题?Maven可以帮助我们简化项目依赖管理、提高构建效率、统一构建标准、方便项目升级和持续集成等。
-
Maven有什么优缺点?Maven的优点包括简化项目依赖管理、易于上手、便于与持续集成工具整合、便于项目升级、有很多插件方便功能扩展等;缺点包括学习难度大、采用约定优于配置的策略难以调试、网络环境较差时repository无法访问等。
-
什么是Maven的坐标?Maven的坐标是指唯一标识一个项目的三个元素:groupId、artifactId和version。
-
讲一下Maven的生命周期?Maven的生命周期包括clean、default、site三个阶段,每个阶段包含多个插件目标,用于完成项目构建、测试、打包、部署等工作。
-
说说你熟悉哪些Maven命令?常用的Maven命令包括clean、compile、test、package、install、deploy等。
maven的父项pom和子pom怎么依赖
Maven的父项POM和子POM之间的依赖关系可以通过在子POM中声明父POM来实现。如果父POM中定义了依赖关系,子POM会自动继承这些依赖关系,无需在子POM中再次声明。如果子POM需要添加额外的依赖关系,可以在子POM中声明这些依赖关系,但无需指定版本号,因为版本号会从父POM中继承。需要注意的是,如果父POM中没有定义依赖关系,子POM也不会自动继承任何依赖关系。
一、说说你熟悉哪些maven命令?
mvn archetype:generate 创建Maven项目
mvn compile 编译源代码
mvn deploy 发布项目
mvn test-compile 编译测试源代码
mvn test 运行应用程序中的单元测试
mvn site 生成项目相关信息的网站
mvn clean 清除项目目录中的生成结果
mvn package 根据项目生成的jar
mvn install 在本地Repository中安装jar
mvn eclipse:eclipse 生成eclipse项目文件
mvnjetty:run 启动jetty服务
mvntomcat:run 启动tomcat服务
mvn clean package -Dmaven.test.skip=true:清除以前的包后重新打包,跳过测试类
二、如何解决依赖传递引起的版本冲突?
可通过dependency的exclusion元素排除掉依赖。
三、说说maven的依赖原则
最短路径原则(依赖传递的路径越短越优先)
pom文件申明顺序优先(路径长度一样,则先申明的优先)
覆写原则(当前pom文件里申明的直接覆盖父工程传过来的)
四、说说依赖的解析机制?
当依赖的范围是 system 的时候,Maven 直接从本地文件系统中解析构件。
根据依赖坐标计算仓库路径,尝试直接从本地仓库寻找构件,如果发现对应的构件,就解析成功。如果在本地仓库不存在相应的构件,就遍历所有的远程仓库,发现后,下载并解析使用。如果依赖的版本是 RELEASE 或 LATEST,就基于更新策略读取所有远程仓库的元数据文件(groupId/artifactId/maven-metadata.xml),将其与本地仓库的对应元合并后,计算出RELEASE 或者 LATEST 真实的值,然后基于该值检查本地仓库,或者从远程仓库下载。如果依赖的版本是 SNAPSHOT,就基于更新策略读取所有远程仓库的元数据文件,将它与本地仓库对应的元数据合并,得到最新快照版本的值,然后根据该值检查本地仓库,或从远程仓库下载。如果最后解析得到的构件版本包含有时间戳,先将该文件下载下来,再将文件名中时间戳信息删除,剩下 SNAPSHOT 并使用(以非时间戳的形式使用)。
五、说说插件的解析机制
与依赖的构件一样,插件也是基于坐标保存在Maven仓库中。在用到插件的时候会先从本地仓库查
找插件,如果本地仓库没有则从远程仓库查找插件并下载到本地仓库。与普通的依赖构件不同的
是,Maven会区别对待普通依赖的远程仓库与插件的远程仓库。前面提到的配置远程仓库只会对普
通的依赖有效果。当Maven需要的插件在本地仓库不存在时是不会去我们以前配置的远程仓库查找
插件的,而是需要有专门的插件远程仓库。
2Tomcat
-
Tomcat的缺省端口是多少,怎么修改?Tomcat的缺省端口是8080,可以通过修改server.xml文件中的Connector元素来修改端口号。
-
Tomcat有哪几种Connector运行模式?Tomcat有三种Connector运行模式:BIO、NIO和APR。
-
Tomcat有几种部署方式?Tomcat有两种部署方式:WAR包部署和目录部署。
-
Tomcat容器是如何创建servlet类实例?用到了什么原理?Tomcat容器会在启动时创建一个servlet容器,用于管理servlet的生命周期。当请求到达时,容器会根据请求的URL找到对应的servlet类,并创建一个servlet实例来处理请求。
-
Tomcat如何优化?Tomcat的优化包括调整JVM参数、调整连接池参数、使用缓存、使用CDN等。
-
Tomcat是什么?Tomcat是一个开源的Web应用服务器,支持Servlet和JSP等Java Web技术。
-
什么是Servlet?Servlet是一种Java Web技术,用于处理HTTP请求和响应。
-
什么是Servlet规范?Servlet规范是Java Web技术的一部分,定义了Servlet的API和行为规范。
-
为什么我们将Tomcat称为Web容器或者Servlet容器?因为Tomcat支持Servlet和JSP等Java Web技术,可以作为Web应用服务器来运行Java Web应用程序。