持续剖析(Continuous Profiling)

共 62 题
#

1. @AutoConfigureTestDatabase/@AutoConfigureTestEntityManager

A 嵌入式内存数据库(如 H2) ✓ 正确答案
B 真实生产数据库
C 外部 Redis
D 不替换
#

2. @Mock/@InjectMocks/@Captor(Mockito JUnit 5 Extension)

A SpringExtension
B MockitoExtension ✓ 正确答案
C TestcontainersExtension
D OutputCaptureExtension
#

3. @MockBean(Spring Boot Test)的工作机制

A 它只在单元测试中生效
B 它在测试中把指定 Bean 替换为 mock 对象 ✓ 正确答案
C 它不会影响 ApplicationContext
D 它只能用于 Controller
#

4. @MockBean(已弃用)与 @MockitoBean(Spring Boot 3.4+)在测试替身的演进

A @MockitoBean ✓ 正确答案
B @Mock
C @Spy
D @InjectMocks
#

5. @SpringBootTest 与 ApplicationContext 加载

A 只加载部分 Bean
B 无法注入 Bean
C 默认启动 Web 服务器
D 加载完整 ApplicationContext,且相同配置的测试类会复用缓存上下文 ✓ 正确答案
#

6. Mockito 的 mock/spy/when/verify/ArgumentCaptor

A mock + when
B doReturn
C spy + when
D verify + ArgumentCaptor ✓ 正确答案
#

7. OutputCaptureExtension(JUnit 5 + Logback)的日志断言

A CapturedOutput ✓ 正确答案
B MockMvc
C TestRestTemplate
D WebTestClient
#

8. Spring Boot 3.5+ 的 @DataJpaTest(JPA 切片测试)与 @DataRedisTest(Redis 切片测试)的边界

A 生产数据库
B 嵌入式内存数据库(H2) ✓ 正确答案
C Redis
D MongoDB
#

9. Spring Boot 3.5+ 的 @JsonTest(JSON 序列化测试)与 @RestClientTest(HTTP 客户端测试)的边界

A @RestClientTest
B @JsonTest ✓ 正确答案
C @DataJpaTest
D @WebMvcTest
#

10. @AutoConfigureWebTestClient(WebFlux 测试)

A 只支持同步阻塞
B 只能校验状态码
C 使用 chain 式 expectStatus/expectBody 断言 ✓ 正确答案
D 无法校验响应体
#

11. Spring Boot 3.5+ 的 @SpringBootTest(完整上下文)/@WebMvcTest(切片测试)的工程取舍

A @SpringBootTest
B @RestClientTest
C @DataJpaTest
D @WebMvcTest ✓ 正确答案
#

12. Spring Boot Test 与 JUnit 5(@ExtendWith(SpringExtension.class))的整合与生命周期

A 每个测试都重新加载
B 相同配置的测试类复用同一 ApplicationContext ✓ 正确答案
C 不缓存
D 只在并发时缓存
#

13. Testcontainers(Postgres/Redis/Kafka)

A 使用内存 mock 替代中间件
B 修改生产数据库
C 通过 Docker 启动真实中间件容器 ✓ 正确答案
D 使用嵌入式数据库
#

14. WireMock 在 Spring Boot 微服务集成测试中的 HTTP 服务模拟

A mock
B verify
C request
D stubFor ✓ 正确答案
#

15. wall-clock 剖析与 cpu 剖析在定位 I/O 等待、锁阻塞问题上的差异,为什么 CPU 火焰图看不到等待时间

A 等待线程不消耗 CPU,不在 CPU 采样范围内 ✓ 正确答案
B 采样频率太低
C 火焰图格式限制
D 线程数太少
#

16. 火焰图如何解读,怎样从形态上区分 CPU 热点、内存分配热点与锁竞争(平顶、宽底、调用栈深度各意味什么)

A 调用栈太深
B 热点函数自身耗时占比高 ✓ 正确答案
C 锁竞争严重
D 内存不足
#

17. @DataJpaTest/@JdbcTest/@DataMongoTest 的测试切片

A @DataJpaTest
B @DataMongoTest
C @JdbcTest ✓ 正确答案
D @WebMvcTest
#

18. @DisplayName/@Disabled/@Tag 的工程价值

A @Tag ✓ 正确答案
B @DisplayName
C @Disabled
D @Nested
#

19. @DynamicPropertySource(Spring Boot 2.2+)与 Testcontainers

A @TestPropertySource
B @Value
C @DynamicPropertySource ✓ 正确答案
D @ConfigurationProperties
#

20. @JunitJupiter 的 Spring Boot 4.x 演进

A JUnit 4 的旧模型
B Mockito 扩展
C Testcontainers
D JUnit 5 的编程模型(API + 扩展) ✓ 正确答案
#

21. @Nested 与测试分组

A 与 @Nested 无关
B 只能用于性能测试
C 必须有独立的 @BeforeAll
D 用于按功能/场景分组组织测试 ✓ 正确答案
#

22. @ParameterizedTest 与多源(@ValueSource/@MethodSource/@CsvSource)

A @ValueSource
B @NullSource
C @CsvSource ✓ 正确答案
D @EnumSource
#

23. @RestClientTest/@JsonTest/@WebServiceClientTest

A @RestClientTest
B @DataJpaTest
C @JsonTest
D @WebServiceClientTest ✓ 正确答案
#

24. @TestConfiguration 与嵌套配置

A 它会在生产环境加载
B 与 @SpringBootApplication 等价
C 仅测试时加载,可用嵌套类定义测试专用 Bean ✓ 正确答案
D 只能用于切片测试
#

25. @WebMvcTest 与契约测试的取舍

A @WebMvcTest
B @JsonTest
C @DataJpaTest
D 契约测试(如 Pact) ✓ 正确答案
#

26. @WebMvcTest(@AutoConfigureMockMvc)的切片测试

A @DataJpaTest
B @AutoConfigureMockMvc ✓ 正确答案
C @MockBean
D @DynamicPropertySource
#

27. Awaitility 如何做异步断言,相比 Thread.sleep 轮询它在可读性与超时控制上有何优势,常见 untilAsserted 用法有哪些

A 更慢但更简单
B 无法设置超时
C 只能测同步代码
D 声明式轮询等待条件满足,超时与轮询可控,更稳定 ✓ 正确答案
#

28. BDDMockito.given/thenShould 的 BDD 风格

A when(...).thenReturn(...)
B verify(...)
C doReturn(...).when(...)
D given(...).willReturn(...) ✓ 正确答案
#

29. Cypress/Playwright(前端)与 Spring 测试的边界

A 后端数据库逻辑
B JVM 内存
C 前端用户在真实浏览器中的 UI 交互 ✓ 正确答案
D 网络协议
#

30. JUnit 5 与 JUnit 4 的差异(架构、扩展)

A Jupiter
B Vintage ✓ 正确答案
C Platform
D Mockito
#

31. JUnit 5 的 @Suite 与聚合测试套件

A @Tag
B @Test
C @Nested
D @Suite ✓ 正确答案
#

32. JUnit 5 的 Assumptions 与条件执行

A Assumptions.assumeTrue ✓ 正确答案
B Assertions.assertEquals
C @Disabled
D @Tag
#

33. JUnit 5 的 ExtensionModel(BeforeEachCallback/AfterEachCallback)

A ParameterResolver
B AfterEachCallback
C BeforeEachCallback ✓ 正确答案
D TestInstancePostProcessor
#

34. JUnit 5 的 TestReporter/TestInfo 注入

A CapturedOutput
B TestReporter
C MockMvc
D TestInfo ✓ 正确答案
#

35. JsonPath/JsonPathResultMatchers 的断言

A redirect()
B status().isOk()
C contentType()
D jsonPath("$.name").value(...) ✓ 正确答案
#

36. MockMvc/WebTestClient 的 perform/exchange

A perform()
B execute()
C exchange() ✓ 正确答案
D send()
#

37. Mockito 的 Answer/doAnswer 自定义返回

A when(...).thenReturn(固定值)
B when(...).thenThrow
C doAnswer(自定义 Answer) ✓ 正确答案
D verify
#

38. Mockito 的 RETURNS_DEEP_STUBS 与链式 stub

A 自动为链式调用上的每层对象创建 mock ✓ 正确答案
B 只能 mock 一层
C 会执行真实方法
D 必须与 spy 配合
#

39. Mockito.inOrder 的有序验证

A verify(times(1))
B inOrder.verify ✓ 正确答案
C verifyNoInteractions
D doAnswer
#

40. Mockito.mockStatic(Mockito 3.4+)的静态方法 mock

A 测试完成后
B 调用 verify 后
C 永远不恢复
D 立即关闭 try-with-resources 的 MockedStatic ✓ 正确答案
#

41. Mockito.spy 的部分 mock

A 默认所有方法返回默认值
B 默认调用真实方法,可对部分方法 stub ✓ 正确答案
C 不能 verify
D 只能用于接口
#

42. Mockito.verify 的 times/never/atLeast/atMost

A verify(mock, times(1))
B verify(mock, atLeast(1))
C verify(mock, never()) ✓ 正确答案
D verify(mock, atMost(1))
#

43. Pyroscope/Parca 等持续剖析平台如何以低开销长期采集并保留 profile 数据,数据保留与降采样策略如何设计

A 永久保存全部原始数据
B 只存一次
C 关闭采集
D 分层降采样 + 设置数据保留期 ✓ 正确答案
#

44. Resilience4j 的测试支持

A 性能测试
B 负载测试
C 覆盖率测试
D 状态转换测试 ✓ 正确答案
#

45. Spring REST Docs 的工程价值

A 文档是手工维护的,可能过时
B 运行时从代码反射生成
C 文档由测试驱动生成,与实现保持一致 ✓ 正确答案
D 只能生成 JSON 文档
#

46. Test Interceptor 与 Dynamic Tests

A @BeforeEach
B @TestFactory + DynamicTest ✓ 正确答案
C @Test
D @Disabled
#

47. TestInstance 与 PER_METHOD/PER_CLASS 的取舍

A 默认 PER_CLASS,共享实例
B 默认按类静态
C 没有默认
D 默认 PER_METHOD,每个测试方法新建实例 ✓ 正确答案
#

48. localstack/embedded-postgres 等嵌入式中间件

A embedded-postgres
B localstack ✓ 正确答案
C H2
D WireMock
#

49. 如何把持续剖析与 Metrics、Tracing 关联,从异常火焰图下钻到具体请求与代码行的完整排查路径是什么

A 直接看火焰图
B 随机挑选
C Metrics 告警发现异常,再经 Tracing 与剖析定位 ✓ 正确答案
D 只看代码
#

50. 容器与 cgroup 环境下剖析工具读取 CPU 配额、内核符号(perf_event)会遇到哪些权限与精度问题

A 足够的内存
B 网络
C root 权限或 CAP_SYS_ADMIN/CAP_PERFMON ✓ 正确答案
D 磁盘
#

51. 剖析 Agent 在虚拟线程(Virtual Threads)场景下的兼容性边界,载体线程视角会带来怎样的误读

A 无法采样
B 无影响
C 多个虚拟线程的 CPU 样本混淆,造成误读 ✓ 正确答案
D 采样变慢
#

52. 性能测试(JMeter/Gatling)的边界

A 可直接等同于生产容量
B 完全准确
C 受测试环境与工具自身瓶颈影响,需换算校准 ✓ 正确答案
D 与并发量无关
#

53. 测试数据构造的 Test Data Builder 与 Object Mother 模式如何组织,Instancio 等自动填充库如何减少样板代码

A 手工 new
B Object Mother
C Instancio.create ✓ 正确答案
D Mockito
#

54. 采样式剖析(sampling profiling)的工作原理是什么,采样频率与统计精度、运行开销之间如何权衡

A 精度下降、开销下降
B 精度上升、开销上升 ✓ 正确答案
C 无影响
D 开销上升但精度下降
#

55. @Testcontainers 的工程应用

A @SpringBootTest
B @Container
C @Testcontainers ✓ 正确答案
D @DataJpaTest
#

56. ArchUnit(架构测试)的工程应用

A 架构约束的代码化断言与 CI 校验 ✓ 正确答案
B 性能测试
C 覆盖率统计
D 日志分析
#

57. JFR(Java Flight Recorder)与 async-profiler 在生产环境的开销、精度与接入成本上有何差异

A JFR 需单独安装,async-profiler 随 JDK 自带
B async-profiler 覆盖 JVM 内部事件更多
C 两者完全相同
D JFR 是 JDK 内置、低开销、事件驱动;async-profiler 需安装、采样高精度 ✓ 正确答案
#

58. Testcontainers 与 localstack 的协作

A PostgreSQLContainer
B LocalStackContainer ✓ 正确答案
C KafkaContainer
D GenericContainer
#

59. Testcontainers(Docker 容器化测试)

A 使用内存 mock
B 复用生产数据
C 通过 Docker 启动真实中间件容器 ✓ 正确答案
D 使用嵌入式数据库
#

60. WireMock 的 HTTP mock(/__admin/mappings)

A /__admin/config
B /__admin/stubs
C /api/mock
D /__admin/mappings ✓ 正确答案
#

61. async-profiler 支持的事件类型(cpu/alloc/lock/wall)分别采集什么信号,各自适合定位哪类性能问题

A cpu
B alloc
C wall ✓ 正确答案
D lock
#

62. 契约测试与 Pact Broker 的协作

A 执行压测
B 监控日志
C 生成代码
D 集中存储、共享契约并触发消费者/生产者验证 ✓ 正确答案