CI/CD 基础

共 31 题
#

1. CI 流水线中的依赖安全扫描(OWASP Dependency-Check/Snyk)

A Dependency-Check/Snyk 扫描依赖并与漏洞库比对,可作质量门禁阻断高危险发布 ✓ 正确答案
B 依赖扫描只需在本地执行一次,无需纳入 CI
C 漏洞库无需更新,一次扫描终身有效
D 扫描结果无法作为发布门禁
#

2. SNAPSHOT 元数据、更新时间戳和 updatePolicy 如何影响可复现性,发布流水线应怎样锁定输入

A updatePolicy 只影响下载速度,不影响版本
B SNAPSHOT 与 RELEASE 一样不可变,不影响可复现性
C SNAPSHOT 内容可变,时间和 updatePolicy 影响解析结果,发布应锁定精确版本 ✓ 正确答案
D 发布流水线无需锁定依赖版本
#

3. Spring Boot 3.5+ 的 spring-boot-maven-plugin AOT 编译与 JVM 层 AOT 类加载(JEP 483)的边界

A 二者完全相同,只是命名不同
B Spring Boot AOT 是框架级配置/Bean 静态化,JEP 483 是 JVM 级 AOT 类加载加速,二者叠加 ✓ 正确答案
C JEP 483 是框架级优化,与 JVM 无关
D Spring Boot AOT 只影响测试,不影响启动
#

4. compile、runtime、provided 和 test 作用域如何影响传递依赖、编译类路径与最终制品

A compile 与 runtime 依赖进入最终制品,provided 与 test 不进入 ✓ 正确答案
B provided 依赖会打入 JAR 中
C test 依赖会影响生产制品
D 所有作用域都进入最终制品
#

5. 使用 mvn dependency:analyze 检测 Spring Boot 4.0 中未使用依赖的精度与误报场景

A 它只分析依赖版本,不分析使用
B 它能 100% 准确识别所有已使用依赖
C 它基于字节码引用分析,对反射/SPI/配置加载依赖易误报为未使用 ✓ 正确答案
D 分析结果可直接删除依赖,无需人工判断
#

6. CI/CD 中的测试金字塔(单元测试/集成测试/E2E 测试)

A 测试金字塔只适用于前端,不适用于后端
B 所有测试都必须用 E2E 实现,单元测试无意义
C 三层测试数量应均等
D 单元测试多而快、集成测试居中、E2E 少而全面,在 CI 中按阶段安排执行 ✓ 正确答案
#

7. CI/CD 的基本概念与流水线模型

A CI/CD 只适用于前端项目
B CI 与 CD 完全相同,无区别
C 流水线只能手工执行,无法自动化
D CI 是频繁集成并自动构建测试,CD 是持续交付/部署,流水线即代码可版本化管理 ✓ 正确答案
#

8. Enforcer 的 dependencyConvergence 与 requireUpperBoundDeps 关注点有何不同,冲突应如何修复而非忽略

A 两规则都只检查 Maven 版本
B 二者关注点完全相同
C 冲突可直接忽略,不影响运行
D 前者要求版本收敛一致,后者要求不低于声明的最高版本,冲突应显式锁定正确版本 ✓ 正确答案
#

9. 多发行版 Jar 如何按运行时版本选择 META-INF/versions 内容,编译与测试应覆盖哪些 JDK

A 所有环境加载同一份类,与版本无关
B 运行时按当前 Java 版本选择 META-INF/versions 下的类,需声明 Multi-Release: true ✓ 正确答案
C MR-JAR 无需声明,自动生效
D 编译只需一种 JDK,无需多版本
#

10. Jenkins 声明式 Pipeline 的 stage/agent/post 结构如何编写,post 阶段如何做清理与通知

A pipeline 无 post 阶段,无法清理
B pipeline 由 agent/stages 组织,post 按条件执行清理与通知 ✓ 正确答案
C 声明式 Pipeline 无法配置 agent
D post 只能用于失败,不能用于成功
#

11. Jenkins 的 Shared Library 与复用

A Shared Library 与构建逻辑无关
B 它只能用于单个 Pipeline,无法复用
C 它封装通用步骤与变量,供多个 Pipeline 复用,提升一致性与可维护性 ✓ 正确答案
D 它无法管理版本
#

12. Servlet API 等 provided 依赖在可执行 Jar 与外部容器部署中边界不同,如何防止打包冲突

A 部署形态与依赖打包无关
B 所有场景都需把 Servlet API 打入 JAR
C provided 依赖总是进 JAR
D 外部容器由容器提供 Servlet API,可执行 Jar 需内嵌实现,需按部署形态正确配置 ✓ 正确答案
#

13. Shade 插件重定位包名时如何处理服务提供者文件和反射配置,遗漏 transformer 会出现什么

A META-INF/services 与重定位无关
B 重定位自动处理所有 SPI 配置,无需 transformer
C transformer 只影响打包速度,不影响运行
D 重定位需用 ServicesResourceTransformer 等修正 SPI/反射配置,遗漏会导致运行时找不到实现 ✓ 正确答案
#

14. Surefire 与 Failsafe 分别绑定哪些生命周期阶段,集成测试失败后为何仍需要 post-integration-test

A Failsafe 绑定 test 阶段,与 Surefire 相同
B Surefire 绑 test、Failsafe 绑 integration-test/verify,post 阶段保证失败也执行清理 ✓ 正确答案
C 集成测试失败后无需清理
D post-integration-test 与资源释放无关
#

15. dependencyManagement 只管理版本而不自动引入依赖意味着什么,子模块何时仍需声明 dependency

A 声明在 dependencyManagement 中就会自动加入类路径
B 它只管理版本不引入依赖,子模块仍需显式声明 dependency 才会引入 ✓ 正确答案
C 子模块无需声明任何依赖
D 它与版本管理无关
#

16. maven-compiler-plugin 的 release 参数为何优于只设置 source 和 target,它如何约束平台 API

A release 与编译无关
B source/target 已足够,无需 release
C release 只影响性能,不影响 API
D release 同时约束字节码版本与平台 API,避免使用目标版本不存在的 API ✓ 正确答案
#

17. optional 依赖与 exclusion 分别由库作者和使用者控制什么,滥用排除会造成哪些运行时缺类

A optional 由库作者声明不传递,exclusion 由使用者排除,滥用排除会导致运行时缺类 ✓ 正确答案
B 二者都由使用方控制
C exclusion 不会影响运行时类加载
D optional 会把依赖强制传递
#

18. pluginManagement 与直接声明 plugin 的执行效果有何不同,父 POM 如何安全提供默认配置

A pluginManagement 声明后会自动执行插件
B pluginManagement 只提供默认配置,需子模块直接声明才执行 ✓ 正确答案
C 直接声明 plugin 不会执行
D 二者执行效果完全相同
#

19. renovate/dependabot 与依赖自动升级

A 它们只能手动升级,无法自动
B 它们扫描依赖发现新版本并自动创建 PR,配合 CI 验证升级安全 ✓ 正确答案
C 自动升级无需 CI 验证
D 它们只支持前端依赖
#

20. 使用 BOM(Bill of Materials)

A 引入 BOM 后无法覆盖任何版本
B BOM 会自动引入依赖到类路径
C 用 import 引入 BOM 继承其版本,可统一生态版本并支持按需覆盖 ✓ 正确答案
D BOM 与版本管理无关
#

21. 依赖调解的最近路径规则在深度相同的候选版本间如何决胜,POM 声明顺序为何会影响结果

A 深度相同时先声明者优先,POM 声明顺序会影响最终版本 ✓ 正确答案
B 深度相同时随机选择
C 声明顺序不影响解析结果
D 深度深者优先
#

22. 制品管理(Nexus/Artifactory/Docker Registry)

A 制品管理只用于开发,不用于生产
B 制品只能存在本地,无法共享
C 制品管理不涉及访问控制
D Nexus/Artifactory 托管二进制制品,Docker Registry 存储镜像,提供版本化与审计 ✓ 正确答案
#

23. 导入多个 BOM 出现同一坐标时如何解析版本,平台 BOM 与业务覆盖项应按什么顺序组织

A 同一 dependencyManagement 内后声明者覆盖先声明者,平台 BOM 在前、业务覆盖在后 ✓ 正确答案
B 先声明者覆盖后声明者
C 多 BOM 只能取版本号最高者
D 顺序与版本解析无关
#

24. 流水线即代码(Pipeline as Code)

A 流水线即代码与版本控制无关
B 流水线只能手工配置,无法代码化
C 把流水线定义为代码存入仓库,可版本化、评审与复现 ✓ 正确答案
D 流水线即代码无法复用
#

25. 流水线超时与重试策略

A 重试无需考虑幂等
B 重试越多越好,无需限制
C 超时设置会降低可靠性
D 超时防任务卡死,重试处理瞬时错误,但重试需保证幂等并采用退避 ✓ 正确答案
#

26. 流水线阶段(lint/test/build/package/deploy)

A lint 应放在最后执行
B 阶段顺序无关紧要,可任意排列
C 阶段按 lint/test/build/package/deploy 顺序执行,前序失败即终止形成门禁 ✓ 正确答案
D 所有阶段可并行执行
#

27. 迁移 JDK 23 及以后版本时,为何应显式配置注解处理器路径,遗漏会让哪些生成代码消失

A 注解处理器只影响性能,不影响生成代码
B 编译器自动发现所有处理器,无需配置
C 需显式配置 annotationProcessorPaths,否则 Lombok/MapStruct 等生成代码会缺失 ✓ 正确答案
D 遗漏配置不会造成任何影响
#

28. CI 中的 SBOM 生成与漏洞扫描

A 生成 SBOM 列出组件,并对照漏洞库扫描,支持供应链安全与合规 ✓ 正确答案
B SBOM 与漏洞扫描无关
C SBOM 只能人工生成
D 漏洞扫描无需基于 SBOM
#

29. CI 中的镜像签名(Cosign/Sigstore)

A 签名验证镜像来源与完整性,防止篡改,可作为部署门禁 ✓ 正确答案
B 签名只影响镜像大小,不影响安全
C 镜像无需签名即可验证真伪
D 签名与供应链安全无关
#

30. 流水线通知(Slack/Email/Webhook)

A 在构建结果/关键阶段通过 Slack/Email/Webhook 通知,并应分级避免噪音 ✓ 正确答案
B 通知只能手动发送,无法自动化
C 所有构建都需通知所有人
D 通知与构建结果无关
#

31. 蓝绿部署(Blue-Green Deployment)

A 蓝绿部署不需要两套环境
B 维护两套环境,验证后一次性切换流量,零停机且回滚快,但资源成本翻倍 ✓ 正确答案
C 蓝绿部署无法回滚
D 蓝绿部署与金丝雀完全相同