# 1. @Timed 注解与 AOP 计时,如何实现方法级计时并控制性能开销? A @Timed 注解单独使用即可生效,无需任何额外配置 B 必须注册 TimedAspect 切面 Bean 后,@Timed 才会被拦截并计时 ✓ 正确答案 C @Timed 只能用于方法正常返回的情况,无法记录异常耗时 D @Timed 底层使用 Gauge 来实现方法耗时统计
# 2. Counter/Timer 的命名空间与边界,如何避免指标命名冲突与基数爆炸? A 将用户 ID、请求随机参数直接作为标签 B 只使用状态码、方法名等有限枚举值作为标签,并聚合高基数维度 ✓ 正确答案 C 所有指标都使用同一个通用名称 D 标签越细越好,无需限制
# 3. JVM 指标(GC/Files/Memory/Thread) A jvm.files.open ✓ 正确答案 B jvm.threads.live C jvm.gc.pause D jvm.memory.used
# 4. Log4j2 异步日志(LMAX Disruptor)与 Logback AsyncAppender 的对比(吞吐/延迟/丢失风险) A 两者都使用 Disruptor 实现 B Logback AsyncAppender 永不丢日志 C Log4j2 使用无锁环形缓冲,吞吐显著更高 ✓ 正确答案 D Log4j2 异步日志延迟一定高于 Logback
# 5. Log4j2 的 RingBuffer 大小(256K/4K)与等待策略(Block/Timeout/Discard)对性能的影响 A Discard B Default(默认丢弃) C Blocking ✓ 正确答案 D 无等待策略
# 6. Logback 的 MDC 与请求链路追踪 A MDC 会自动在异步线程间传递 B MDC 基于 ThreadLocal,异步线程不会自动继承,需手动传递 ✓ 正确答案 C MDC 只能用于日志级别,不能存业务数据 D MDC 与链路追踪无关
# 7. Logback 的滚动策略(RollingFileAppender + TimeBasedRollingPolicy) A totalSizeCap B fileNamePattern C maxHistory ✓ 正确答案 D rollingFile
# 9. Sleuth 与 OpenTelemetry 的演进(Spring Boot 3.4+ 默认 OTel) A 默认基于 Micrometer Tracing 集成 OpenTelemetry ✓ 正确答案 B 仍默认使用 Spring Cloud Sleuth C 默认使用 Brave 且不支持 OTel D 链路追踪已完全移除
# 10. Spring Boot 3.5+ Actuator 的 /actuator/metrics 与 Prometheus 抓取格式的工程价值 A 两者共享同一 MeterRegistry,仅格式不同 ✓ 正确答案 B 两者数据源完全不同,互不相干 C /actuator/prometheus 返回 JSON,/actuator/metrics 返回文本 D Prometheus 必须使用 /actuator/metrics 才能抓取
# 11. Spring Boot 3.5+ 的 @Counted 注解在 Prometheus 指标自动注册的实现 A 无需任何配置即可生效 B 只能计数成功,无法记录失败 C 需要 CountedAspect 切面才能拦截并计数 ✓ 正确答案 D 底层使用 Timer 实现
# 12. Spring Boot 4.x 的 Micrometer Tracing 与 Zipkin A spring.zipkin.enabled B management.metrics.export.enabled C management.tracing.sampling.probability ✓ 正确答案 D logging.level.root
# 14. head-based 与 tail-based 采样策略的原理与取舍是什么,尾部采样如何在保留异常链路的同时控制数据量 A 在请求入口逐个采样,无需聚合 B 能根据完整 trace 信息优先保留异常链路 ✓ 正确答案 C 实现最简单,开销最低 D 完全不采样,零开销
# 16. 日志采样的实现,基于计数器的采样 vs 基于哈希的采样(一致性采样) A 对同一键哈希,保证同一 trace 的日志要么全保留要么全丢弃 ✓ 正确答案 B 无法保证同一键的日志被一致处理 C 实现比计数器采样更简单 D 只用于日志级别调整
# 17. @Observed(Micrometer Observation API)的工程应用 A 只能生成指标,与链路追踪无关 B 只能用于 Controller 层 C 需要额外的 Kafka 上报 D 可同时统一指标、链路追踪与日志三种信号 ✓ 正确答案
# 18. 日志中的敏感数据脱敏(JSON 字段 masking、MDC 值脱敏)与合规要求 A 只在展示时脱敏,日志文件保留明文 B 在写入日志前对敏感字段统一 mask,并配合合规审计 ✓ 正确答案 C 完全禁止记录任何业务数据 D 只对 MDC 脱敏,JSON 字段不用处理
# 21. Gauge 的弱引用与服务存活 A 默认使用弱引用持有对象,避免阻止 GC ✓ 正确答案 B Gauge 可以被 increment 自增 C Gauge 缓存值,不每次实时计算 D Gauge 只能记录累计值
# 22. Jaeger 在微服务可观测性中的工程应用,如何用 trace 定位慢调用与依赖瓶颈,其采样策略与存储后端选型的要点如何? A 概率采样 + 针对错误/慢请求的尾部采样 ✓ 正确答案 B 只使用内存采样 C 完全不采样 D 只采样 GET 请求
# 25. Logback 的 TurboFilter 自定义过滤 A 在 Appender 渲染后才执行 B 与普通 Filter 完全等价 C 只能绑定单个 Appender D 在 Logger 处理早期执行,可全局快速过滤 ✓ 正确答案
# 26. Logback 的 logback.xml 与 logback-spring.xml 差异 A 不支持 springProfile 标签 B 支持按 profile 激活不同配置,且 Spring Boot 优先加载它 ✓ 正确答案 C 与 logback.xml 完全等价 D 只能用于 Log4j2
# 27. MeterFilter 的指标过滤,如何按标签裁剪指标并控制指标基数? A MeterFilter.commonTags(...) B MeterFilter.ignoreTags("userId") ✓ 正确答案 C MeterFilter.rename(...) D MeterFilter.maximumAllowableMetrics(...)
# 28. MeterRegistryCustomizer 的统一打标 A MeterRegistryCustomizer + commonTags ✓ 正确答案 B @Counted C @Timed D DistributionSummary
# 29. Micrometer 1.14+ 的 Counter/Gauge/Timer/Summary 四种指标类型的工程取舍 A Counter B Timer C Gauge ✓ 正确答案 D DistributionSummary
# 30. Micrometer Tracing 与 OpenTelemetry 的指标关联(Trace + Metrics) A traceId ✓ 正确答案 B spanId C tagId D metricId
# 31. Micrometer 的 @Timed 注解与 Timer.Sample 在方法级性能监控的应用 A @Timed 注解 B Gauge C @Counted D Timer.Sample 手动计时 ✓ 正确答案
# 32. Micrometer 的 Meter 类型(Counter/Gauge/Timer/DistributionSummary) A Counter B Gauge C DistributionSummary D Timer ✓ 正确答案
# 33. Micrometer 的 percentile histogram 如何预分桶以支持服务端聚合分位数,与 Prometheus 原生直方图(Native Histograms)有何差异 A 稀疏、自适应精度,存储与传输开销更低 ✓ 正确答案 B 桶数量更多、精度更低 C 无法跨实例聚合 D 必须客户端计算分位数
# 34. Micrometer 的标签(Tag)设计与高基数(High Cardinality) A 状态码(200/404/500) B HTTP 方法(GET/POST) C 用户 ID(每用户一个值) ✓ 正确答案 D 结果(success/failure)
# 35. OpenTelemetry Collector 的 agent 与 gateway 部署模式如何分工,receiver/processor/exporter 管道如何配置 A processor ✓ 正确答案 B receiver C exporter D extension
# 37. OpenTelemetry Metrics SDK 的取舍 A OTel 强调跨语言统一标准,Micrometer 深植 Spring 生态,可桥接结合 ✓ 正确答案 B 两者完全互斥,只能选一个 C Micrometer 只用于 Logback D OTel Metrics SDK 不支持直方图
# 38. OpenTelemetry Metrics(OTLP 协议) A 与 Prometheus 相同,都是拉取 B 只能用于日志 C 只支持 HTTP 明文 D 是推送模式,统一传输 trace/metrics/logs 三种信号 ✓ 正确答案
# 39. OpenTelemetry SDK 的 SdkTracerProvider 配置 A Sampler B Resource C BatchSpanProcessor ✓ 正确答案 D Tracer
# 40. OpenTelemetry 的 Baggage(透明传播) A 用于跨服务传播业务级键值对上下文 ✓ 正确答案 B 用于记录 span 耗时 C 只能在同一进程内使用 D 与 trace context 完全相同
# 41. Prometheus alerting rules 与 Alertmanager 的分组(group)、抑制(inhibit)与静默(silence) A 分组 B 抑制(inhibit) ✓ 正确答案 C 静默(silence) D 采样
# 42. Prometheus 的 rate()/increase()/histogram_quantile() 工程价值 A rate() B histogram_quantile() C increase() ✓ 正确答案 D sum()
# 43. Prometheus 的指标类型(Counter/Gauge/Histogram/Summary) A Histogram ✓ 正确答案 B Gauge C Counter D Summary
# 45. SimpleMeterRegistry 与 PrometheusMeterRegistry 的差别 A PrometheusMeterRegistry B OtlpMeterRegistry C SimpleMeterRegistry ✓ 正确答案 D StatsdMeterRegistry
# 48. 告警的 Runbook 自动化,告警触发时自动执行诊断脚本与初步止血动作 A 可以自动执行任意高风险操作 B 只记录日志,不做任何动作 C 完全禁止任何自动操作 D 只自动执行低风险、可回滚的操作,高风险需人工确认 ✓ 正确答案
# 49. Prometheus 拉取模型与 Pushgateway 的使用边界(批处理任务指标上报) A 适合常驻服务长期暴露指标 B 适合短生命周期批处理任务,但需注意过期指标残留 ✓ 正确答案 C 与拉取模型完全等价 D 只能用于监控日志
# 50. 告警的稳态假设验证,如何区分真实故障与指标抖动(flapping)的告警抑制 A 单点瞬时超阈值即告警 B 要求指标连续持续超阈值(for 持续时间)或满足多窗口条件 ✓ 正确答案 C 完全去掉阈值 D 只关注均值
# 51. 多窗口多燃烧率告警(multi-window multi-burn-rate)的原理与 Prometheus 配置 A 只快速响应,不管误报 B 无需定义 SLO C 只关注单点瞬时值 D 同时满足快速响应与低误报 ✓ 正确答案
# 55. Alertmanager 的路由树(route tree)与接收器(receiver)配置(钉钉/Slack/PagerDuty) A inhibit_rules B receiver C route ✓ 正确答案 D silence
# 56. SLI 选择与 SLO 制定,错误预算(Error Budget)如何驱动发布决策与止血策略 A 日志容量 B 允许的出错代码行数 C 预算金额 D 允许的失败比例或失败量,即 1 - SLO ✓ 正确答案
# 58. SLO 的用户体验映射,如何将后端指标(延迟/错误率)转化为用户可感知的可用性 A 仅看后端 CPU 使用率 B 合成监控与 RUM 模拟真实用户路径 ✓ 正确答案 C 只看数据库查询数 D 只看服务器磁盘空间
# 59. SLO 驱动的发布门禁,错误预算耗尽时自动阻断 CI/CD 流水线的工程实现 A 只检查代码格式 B 随机决定是否阻断 C 永远不阻断 D 每次发布前查询 Prometheus/Grafana 获取燃烧率,超阈值则阻断 ✓ 正确答案
# 60. management.metrics.distribution 的 percentiles-histogram 与 SLO 边界如何配置,过高基数桶会带来什么存储代价 A 增加标签 B 关闭所有直方图 C 增大采样率 D 设置 maximum-expected-value 限制桶范围 ✓ 正确答案