# 1. GitHub Actions 的 workflow/job/step/runner 模型如何组织,actions/cache 与依赖缓存如何加速 Maven/Gradle 构建 A actions/cache 的 key 使用 hashFiles 对 POM 求哈希,可让 POM 变化时自动重建缓存 ✓ 正确答案 B 一个 job 内的多个 step 可以并行执行以加速构建 C Maven 构建永远不需要网络,全部依赖都内嵌在仓库中 D workflow 中的所有 job 必须串行执行,不能并行
# 2. Maven 4.0 中 mvn -Daot.enabled=true 在 Spring Boot 4.0 AOT 处理流程中的阶段划分 A AOT 在编译期提前完成类路径扫描与 Bean 定义分析,从而减少运行时启动开销 ✓ 正确答案 B AOT 编译能完全消除运行时反射,所有代码无需额外配置 C AOT 与 JIT 完全相同,只是名称不同 D 启用 AOT 后 Spring 容器不再运行,所有功能都用静态代码实现
# 3. Maven 4.0 中如何配置 -DskipTests 与 -Dmaven.test.skip 的差异及与 Spring Boot Test 的关系 A 两者效果完全相同,都跳过测试编译与执行 B `-DskipTests` 只影响单元测试,不影响集成测试 C `-DskipTests` 跳过测试执行但会编译测试类,`-Dmaven.test.skip` 连编译也跳过 ✓ 正确答案 D `-Dmaven.test.skip` 会让测试类被编译但不会执行
# 4. Maven 4.0 在 Spring Boot 4.0 构建中默认引入的 Gradle 兼容 CLI 模式与 pom 结构差异 A 消费者 POM 包含所有构建私有配置,与构建 POM 完全相同 B 构建 POM 只用于 Android 项目,不适用于 Spring Boot C Gradle 兼容 CLI 模式会移除现有 pom.xml 的所有功能 D 消费者 POM 是发布给下游消费的简化模型,构建私有配置不污染下游 ✓ 正确答案
# 5. Maven 4.0 引入的 --update-snapshots 与 --fail-on-warning 在 CI 中对 Spring Boot 镜像构建的影响 A `--update-snapshots` 会跳过所有依赖下载以加快构建 B `--fail-on-warning` 将构建警告升级为失败,可作质量门禁 ✓ 正确答案 C 两个参数只影响测试执行,不影响构建结果 D `--update-snapshots` 与 RELEASE 依赖的更新无关,只影响本地文件
# 6. Maven 4.0 引入的独立版本元数据与 Maven Central 索引同步的离线构建策略 A 离线构建完全无需本地仓库,每次从远程实时拉取 B 独立版本元数据与 Central 索引同步,配合本地缓存与校验和可支持可信的离线构建 ✓ 正确答案 C Maven 4.0 移除了所有版本元数据,仅依赖传递依赖 D 离线构建会跳过依赖解析,导致构建永远失败
# 7. Maven 4.0 中 .mvn/maven.config 的加载机制对 Spring Boot CI 流水线的兼容影响与迁移建议 A Maven 4.0 移除了 `.mvn/maven.config` 自动加载,CI 必须改用其他方式 B Maven 4.0 仍支持 `.mvn/maven.config`,但 CI 用显式参数或 `MAVEN_ARGS` 环境变量传递默认配置更可预测 ✓ 正确答案 C 该变更只影响 macOS,不影响 Linux CI D `.mvn/maven.config` 只控制 JVM 堆内存,与参数无关
# 8. Maven Archetype 生成 Spring Boot Starter 自定义脚手架的字段校验与版本约束模板 A 版本约束模板与 pom.xml 无关 B Archetype 只能生成静态文件,无法包含版本占位符 C 字段校验必须在外部脚本中完成,Archetype 不支持 D archetype-metadata.xml 用于定义生成参数及其校验规则 ✓ 正确答案
# 9. Maven Compiler Plugin 配置 -parameters 编译参数对 Spring MVC 参数绑定的影响 A 它让字节码保留方法参数名,Spring MVC 可据此按名称绑定参数 ✓ 正确答案 B 它只影响运行时性能,不影响参数绑定 C 它与 `-g` 调试信息完全等价,无任何区别 D 开启后 Spring 无法再使用 `@RequestParam` 显式指定名称
# 10. Maven Surefire 与 Failsafe 在 JUnit 5 + Spring Boot Test 集成测试场景下的并行执行配置 A JUnit 5 并行执行需显式开启,并注意 Spring 上下文缓存与共享资源的并发安全 ✓ 正确答案 B Surefire 与 Failsafe 都绑定 `verify` 阶段 C Failsafe 只执行单元测试,不执行集成测试 D 并行执行无需任何配置,JUnit 5 默认开启
# 11. Maven Toolchains 如何让构建进程与编译、测试所用 JDK 解耦,CI 节点应如何校验工具链 A Toolchains 只能使用一个固定的 JDK,无法多版本 B Toolchains 让构建进程与编译/测试所用 JDK 解耦,由 toolchains.xml 声明可用 JDK ✓ 正确答案 C Toolchains 与编译无关,只影响测试报告 D CI 无需校验工具链,构建失败会自动重试
# 12. Maven Wrapper 的 JAVA_HOME 与 Spring Boot 4.0 多 JDK 版本构建矩阵的兼容配置 A mvnw 通过 JAVA_HOME 定位 Maven 启动所用的 JDK,CI 矩阵可据此切换 JDK 版本 ✓ 正确答案 B mvnw 固定只能使用 JDK 8,无法升级 C 多 JDK 矩阵无需设置 JAVA_HOME,Maven 会自动选择 D Maven Wrapper 与 JDK 版本完全无关
# 13. Maven 与 Spring Boot 4.x 的兼容性(Spring Boot 4.x 要求 Maven 3.6.3+) A Spring Boot 4.x 不依赖 Maven,任何版本都可以 B Spring Boot 4.x 要求 Maven 3.6.3 及以上版本 ✓ 正确答案 C Spring Boot 4.x 只支持 Maven 2.x D Maven 版本只影响打包,不影响编译
# 14. Maven 多模块(Multi-Module)项目结构在 Spring Boot 3.5+ 微服务拆分的工程价值 A 多模块通过父子 POM 实现统一版本管理与公共代码复用,降低耦合 ✓ 正确答案 B 多模块会让每个模块必须独立部署成独立服务 C 多模块无法管理依赖版本,只能手动指定 D 多模块只适用于传统单体,不适合微服务
# 15. Spring Boot 3.5+ 的镜像构建的工程价值 A 镜像构建与可移植性、供应链安全无关 B 它必须依赖外部 Docker 守护进程,无法离线 C 它只能生成不可运行的静态文件 D 它通过 Buildpacks 生成镜像,无需手写 Dockerfile,且分层合理 ✓ 正确答案
# 16. 使用 Maven Enforcer Plugin 在 Spring Boot 4.0 项目中禁止某些依赖版本与 License 检查的工程实践 A 它用于生成文档,与依赖合规无关 B 它只能检查 Maven 版本,无法检查依赖 C 它只在本地生效,CI 无法执行 D 它通过 bannedDependencies 等规则禁止某些依赖版本并执行 License 检查 ✓ 正确答案
# 17. 构建缓存(~/.m2/Gradle Cache)与加速 A 缓存命中后不符合要求的构建也能通过 B 缓存只影响测试,不影响编译 C Gradle 没有依赖缓存,只能在线下载 D Maven 本地仓库复用已下载依赖,Gradle 构建缓存可缓存任务输出并跨机器复用 ✓ 正确答案
# 18. CI 制品版本如何与 Git commit、构建时间等 build metadata 绑定,保证制品可追溯与可复现构建 A 可复现构建不要求固定依赖版本 B 版本号只需递增,无需关联任何源码信息 C 通过 git-commit-id-plugin 等把 commit、时间戳写入版本,使制品可追溯到源码 ✓ 正确答案 D build metadata 只对前端有用,与 Java 制品无关
# 19. Gradle 在 Android 与大型 Spring 项目中相比 Maven 的构建性能与 DSL 灵活性优势 A Gradle 不支持并行构建,性能不如 Maven B Gradle 的 XML 配置比 Maven 更灵活 C Gradle 通过任务级增量构建、守护进程与 Kotlin DSL 提升性能与灵活性 ✓ 正确答案 D Gradle 只能在 Android 中使用,不适用于 Spring
# 20. Gradle 的 build.gradle 与 settings.gradle A settings.gradle 只用于配置任务,build.gradle 只用于声明模块 B settings.gradle 声明项目结构与仓库,build.gradle 配置模块的依赖与任务 ✓ 正确答案 C 两者作用完全相同,可混用 D Gradle 不需要 settings.gradle,单文件即可构建所有项目
# 21. Maven 3.9+ 的 maven-resolver 增量构建与并行构建性能优化 A 增量构建会自动跳过依赖解析,导致错误 B Maven 3.9+ 移除了并行构建支持 C maven-resolver 改进依赖解析,配合 -T 并行构建可缩短多模块构建时间 ✓ 正确答案 D 并行构建与编译毫无关系
# 22. Maven 4 的构建 POM 与消费者 POM 分离旨在解决什么问题,迁移前应验证哪些插件兼容性 A 消费者 POM 与构建 POM 内容完全相同 B 分离旨在避免构建私有配置污染下游,迁移前需验证插件兼容性与依赖树变化 ✓ 正确答案 C 分离只影响本地缓存,不影响发布 D 迁移无需验证任何东西,自动兼容
# 23. Maven 4.0 与 Gradle 8.x 在 Spring Cloud Alibaba 多模块场景下的构建速度对比 A Gradle 任务级缓存与增量构建通常更快,但 Maven 生态更成熟、配置更规范 ✓ 正确答案 B Gradle 一定比 Maven 慢,因为缺少守护进程 C 两者构建速度完全相同,无差异 D Maven 4.0 不支持多模块构建
# 24. Maven Wrapper 的 distributionUrl 与校验和应如何审查,怎样防止构建工具本身被替换 A 应审查 distributionUrl 使用可信 HTTPS 源,并配置 distributionSha256Sum 校验发行包 ✓ 正确答案 B distributionUrl 可以指向任意地址,无需校验 C Wrapper 不下载任何东西,无需担心被替换 D 校验和只影响性能,与安全无关
# 25. Maven Wrapper(mvnw)与版本对齐 A mvnw 按 properties 下载并固定 Maven 版本,使团队与 CI 构建一致 ✓ 正确答案 B mvnw 只是脚本别名,不固定版本 C Wrapper 只对 Windows 系统有效 D Wrapper 会忽略本地已安装的 Maven
# 26. Maven dependency:tree 与 dependency:analyze 在依赖冲突排查的工程价值 A tree 会直接删除冲突依赖 B 两者都只能查看冲突,无法清理 C analyze 用于生成文档,与依赖无关 D tree 查看依赖树定位冲突,analyze 检测未使用/未声明依赖以精简依赖 ✓ 正确答案
# 27. Maven 与 Gradle 的差异(Groovy/Kotlin DSL) A Maven 用 XML 声明式、约定优于配置,Gradle 用可编程的 Groovy/Kotlin DSL 更灵活 ✓ 正确答案 B Maven 比 Gradle 更灵活,因为 XML 可编程 C 两者都只能用 XML,无差异 D Gradle 不支持自定义任务
# 28. Maven 依赖调解(Dependency Mediation)规则 A dependencyManagement 无法覆盖调解结果 B 总是选择版本号最高的依赖 C 调解规则与依赖树无关 D 默认最近路径优先,深度相同时先声明者优先,可用 dependencyManagement 显式覆盖 ✓ 正确答案
# 29. Maven 多模块(multi-module)与聚合(aggregation) A 聚合只影响部署,不影响构建 B 聚合就是继承,二者完全相同 C 多模块不需要父 POM 管理依赖 D 聚合用 <modules> 统一构建,继承用 <parent> 统一配置,二者常结合使用 ✓ 正确答案
# 30. Maven 插件(compiler/surefire/shade) A surefire 只负责打包,不执行测试 B 三个插件都负责编译 C compiler 负责编译、surefire 执行单元测试、shade 打 Fat Jar ✓ 正确答案 D shade 插件与依赖无关
# 31. Maven 的 BOM(BOM import)管理 A BOM 只能用于单个依赖,无法管理多个 B BOM 会直接引入所有依赖到类路径 C import 后 BOM 中依赖版本失效 D BOM 通过 dependencyManagement 声明一组版本,用 import 引入可统一生态版本 ✓ 正确答案
# 32. Maven 的 Profile 与多环境构建 A Profile 与 JDK 版本无关 B Profile 只能激活一次,无法覆盖 C Profile 按条件激活并覆盖配置,配合资源过滤可支持多环境构建 ✓ 正确答案 D 多环境只能靠修改源码实现
# 33. Maven 的 SNAPSHOT 与 RELEASE 版本 A SNAPSHOT 与 RELEASE 完全等价 B SNAPSHOT 是可变的开发版本,RELEASE 是稳定不可变版本,正式发布应使用 RELEASE ✓ 正确答案 C RELEASE 版本可以随时被覆盖 D SNAPSHOT 适合生产环境使用
# 34. Maven 的 dependencyManagement 与 pluginManagement A dependencyManagement 会自动把所有依赖加入类路径 B 二者都只提供默认版本/配置,不主动引入依赖或执行插件 ✓ 正确答案 C pluginManagement 会自动执行所有插件 D 二者用于生成文档,与依赖无关
# 35. Maven 的 dependencyManagement/BOM(Bill of Materials)在依赖版本统一管理的作用 A 与版本冲突无关 B 它会自动引入全部依赖到类路径 C 版本升级必须逐模块手动改 D 集中管理依赖版本、避免漂移与冲突,BOM 可跨项目复用 ✓ 正确答案
# 36. Maven 的 enforcer-plugin 与规则校验 A 它无法校验依赖 B 它只输出警告,不阻止构建 C 它用于生成测试报告 D enforce 目标执行 requireJavaVersion、bannedDependencies 等规则,违规即构建失败 ✓ 正确答案
# 37. Maven 的 flatten-maven-plugin 与版本收敛 A 它会保留所有 profile 与构建私有配置 B 它只作用于本地构建,不影响发布 C 它把构建 POM 扁平化为干净 POM 发布,并替换 CI-friendly 版本变量 ✓ 正确答案 D 它与版本解析无关
# 38. Maven 的 maven-archetype 与项目骨架 A 它用于编译代码,与骨架无关 B 它只能生成空项目,无法定制 C 它用模板按参数生成项目骨架,自定义 archetype 用 metadata 与占位符定义 ✓ 正确答案 D 它只能生成测试文件
# 39. Maven 的 maven-deploy-plugin 与制品发布 A 发布无需配置仓库地址 B deploy 只打包到本地,不发布 C deploy 目标按 distributionManagement 配置把制品上传到远程仓库 ✓ 正确答案 D deploy 与版本管理无关
# 40. Maven 的 profile 多环境构建与 resource filtering 在配置管理的工程取舍 A profile 与资源配置无关 B 所有配置都必须在构建期注入,外部化不安全 C resource filtering 在构建期注入配置,但过多 profile 降低可维护性,敏感配置更适合外部化 ✓ 正确答案 D resource filtering 只能用于代码,不能用于配置文件
# 41. Maven 的 versions-maven-plugin 与依赖升级 A 升级后无需测试即可发布 B 它只能查看依赖,无法修改 C 它用于编译代码,与版本无关 D 它可查看可升级版本并批量修改 pom 版本,辅助依赖升级 ✓ 正确答案
# 42. Maven 依赖范围 scope 的 compile/test/runtime/provided/system 取值 A test 依赖在运行期也可用 B provided 编译期可见、运行期由容器提供,不打入可执行 JAR ✓ 正确答案 C runtime 依赖编译期也必须可见 D system 与 provided 完全相同
# 43. Maven 的坐标(groupId/artifactId/version) A 坐标只用于本地文件,与仓库无关 B groupId/artifactId/version 唯一标识制品,是依赖解析与仓库定位的基础 ✓ 正确答案 C artifactId 必须唯一,groupId 可有可无 D version 不影响依赖解析
# 44. Maven 私服(Nexus/Artifactory)的工程价值 A 私服会降低构建速度 B 私服只能存储,无法下载 C 私服托管私有制品、代理并缓存中央仓库,加速构建并统一制品管理 ✓ 正确答案 D 私服与制品共享无关
# 45. Maven 镜像配置 settings.xml 在阿里云镜像与公司私服之间的优先级与 HTTPS 校验策略 A 镜像只影响 Windows,不影响 Linux B 镜像会覆盖所有仓库包括私服,无需独立配置 C HTTPS 校验可随意关闭,不影响安全 D 镜像通过 mirrorOf 重定向外部仓库请求,私服作为独立仓库声明,HTTPS 应严格执行证书校验 ✓ 正确答案
# 46. Tekton / Dagger 在云原生 CI 流水线中的声明式构建模型 A Tekton 用 K8s CRD 声明流水线,Dagger 用可编程 DAG,均强调可复用与并行 ✓ 正确答案 B 二者都是脚本式 CI,无声明式能力 C Tekton 只能运行在本地,无法上云 D Dagger 无法并行执行任务
# 47. flatten-maven-plugin 如何区分构建 POM 与发布给消费者的 POM,CI-friendly 版本变量怎样解析 A 发布 POM 保留所有占位符供下游解析 B 构建时保留完整 POM,发布时生成扁平 POM 并替换 ${revision} 为实际版本 ✓ 正确答案 C 它无法区分构建与消费者 POM D CI-friendly 变量与发布无关
# 48. 使用 Maven Shade Plugin 打 Fat JAR 与 Spring Boot Loader 在 JDK 25 模块化下的差异 A 两者完全一样,无差异 B Shade 直接合并依赖,Spring Boot Loader 用嵌套 Jar 类加载器,模块化下需留意模块描述符兼容 ✓ 正确答案 C Spring Boot Loader 不支持类加载 D Shade 与模块化无关,无需考虑
# 49. 使用并行构建时,插件的 threadSafe 声明意味着什么,共享输出目录会引发哪些竞态 A threadSafe 表明插件可安全并发,共享输出目录并发写入会产生覆盖与结果不确定 ✓ 正确答案 B 所有插件默认 threadSafe,无需声明 C 共享输出目录不会引发任何问题 D 并行构建与线程安全无关
# 50. 可重复构建如何控制输出时间戳、文件顺序和环境变量,怎样验证两次制品逐字节一致 A 无法验证两次构建是否一致 B 可复现构建只要求单元测试通过 C 时间戳不影响产物一致性 D 需固定时间戳、文件顺序与环境变量,用哈希对比两次构建产物验证逐字节一致 ✓ 正确答案
# 51. 在 CI 流水线中使用 Maven Daemon(mvnd) A mvnd 复用常驻 JVM 与缓存,缩短重复构建时间,适合 CI ✓ 正确答案 B mvnd 每次构建都冷启动,无提速 C mvnd 只能用于本地,不能用于 CI D mvnd 与 Maven 完全无关
# 52. 构建报告与 Test Report 的发布 A Failsafe 不生成任何报告 B 测试报告只能本地查看,无法上传 C 报告与构建质量无关 D Surefire/Failsafe 生成测试报告,CI 收集展示并作为质量门禁依据 ✓ 正确答案
# 53. 构建矩阵(matrix)与多环境构建 A 矩阵只能构建一个环境 B 矩阵在 JDK/OS 等组合上并行构建,覆盖多环境,但需控制组合数量 ✓ 正确答案 C 矩阵与兼容性验证无关 D 矩阵会减少构建次数
# 54. 构建节点的资源限制与并行执行 A 节点 CPU/内存决定并行度,资源不足时过度并行会引发 OOM 或构建变慢 ✓ 正确答案 B 并行度与资源无关,可无限加大 C 内存不足不影响并行构建 D 并行执行总会更快,无需监控
# 56. Maven Javadoc Plugin 在 JDK 25 + Project Leyden 下生成的离线文档与模块描述符的协同 A Javadoc 与模块无关 B Javadoc 生成离线模块文档,应与 module-info 的导出边界保持一致 ✓ 正确答案 C 模块化项目无法生成 Javadoc D 离线文档不需要模块信息
# 57. 依赖校验和、制品签名与 SBOM 各能证明什么,供应链校验为何不能只依赖 HTTPS 仓库 A 校验和与签名作用相同 B HTTPS 已能保证仓库内容绝对可信 C 校验和证完整性、签名证来源、SBOM 证成分,HTTPS 只保证传输加密无法保证内容可信 ✓ 正确答案 D SBOM 与供应链安全无关
# 58. 在 GraalVM Native Image 下使用 Maven 构建 Spring Modulith 模块化应用的配置最小集 A Modulith 与原生构建无关 B Native Image 无需反射配置,自动处理 C 需开启 AOT、配置 native 插件,并声明反射/资源 hint 保证原生运行 ✓ 正确答案 D 只需要一个插件即可,无需 hint