# 1. gRPC 的流式模式(unary/server streaming/client streaming/bidi)在 Java 中的线程模型与背压控制 A 背压只依赖应用层缓冲,协议层不参与 B 所有流式调用都必须在调用线程上执行 C 背压只在 unary 模式下存在 D 通过 HTTP/2 流控窗口与 OutboundFlowController 实现有限背压 ✓ 正确答案
# 2. gRPC 的 Channel 连接管理与 keepalive,在虚拟线程下如何复用连接并控制并发流 A 虚拟线程可以无限制地创建并发流 B keepalive 在虚拟线程下不再需要 C 并发流仍受 MAX_CONCURRENT_STREAMS 限制,超出需排队 ✓ 正确答案 D 每个虚拟线程必须拥有独立连接
# 3. REST 的幂等性设计,PUT/DELETE 的幂等语义与 POST 的幂等键(Idempotency-Key)实践 A POST 天然幂等 B 幂等键由服务端自动生成 C PUT 一定产生重复副作用 D 幂等键需服务端原子判重并缓存结果,保证重试安全 ✓ 正确答案
# 4. gRPC 错误模型(google.rpc.Status)与 HTTP 状态码的映射规则,客户端如何区分可重试与失败 A RESOURCE_EXHAUSTED B DEADLINE_EXCEEDED C INVALID_ARGUMENT ✓ 正确答案 D UNAVAILABLE
# 5. REST API 的版本化策略,URI 版本、Accept 头版本与查询参数版本的取舍 A 查询参数版本最利于共享缓存 B Accept 头版本在浏览器中渲染最直观 C URI 版本便于日志与路由但污染 URI ✓ 正确答案 D 三种方式缓存行为完全一致
# 6. REST 的 ETag、条件请求与共享缓存用于读接口时,为什么常比把所有调用改成 RPC 更有效 A 共享缓存可拦截大量读请求,减少后端压力 ✓ 正确答案 B 304 响应含完整正文 C RPC 天然具备 HTTP 缓存语义 D ETag 用于强制写操作
# 7. gRPC 的 deadline 传播,跨服务调用时剩余时间如何递减传递,客户端如何提前取消 A deadline 到期后服务端仍会继续执行 B 每个服务独立设置固定超时,互不影响 C deadline 通过 grpc-timeout 头传递,下游使用剩余时间 ✓ 正确答案 D 取消不会传播到下游
# 8. HTTP/2 多路复用下 REST 服务的连接池设计,与 HTTP/1.1 keep-alive 的差异 A HTTP/1.1 无队头阻塞 B HTTP/2 仍需每请求一条连接 C HTTP/2 用多路复用流承载并发请求,减少连接数 ✓ 正确答案 D HTTP/2 同连接请求必须串行
# 9. REST 分页设计,cursor/offset 分页在数据一致性与性能上的取舍 A offset 分页在数据增删时仍能保持稳定 B cursor 分页支持任意随机跳页 C offset 分页基于索引定位 D cursor 分页基于索引定位,避免深 OFFSET 扫描 ✓ 正确答案
# 10. gRPC 负载均衡,客户端 LB 与服务器 LB(xDS)在连接池管理上的差异 A xDS LB 通过控制面下发集群与端点,支持动态治理 ✓ 正确答案 B 客户端 LB 由控制面管理端点 C 两者连接池管理完全相同 D xDS LB 无需额外控制面组件
# 11. tRPC 与 gRPC 在协议设计、服务治理与多语言生态上的对比 A tRPC 服务治理能力弱于 gRPC B gRPC 生态更标准化,云原生与网格支持成熟 ✓ 正确答案 C 两者协议底层完全相同 D tRPC 不基于 Protobuf
# 12. gRPC 的健康检查协议(grpc.health.v1)与 Kubernetes 探针的集成 A readiness 探针用于决定是否重启容器 B liveness 探针用于决定是否接收流量 C gRPC 探针通过 Health 服务反映真实健康并支持摘流 ✓ 正确答案 D TCP 探针能反映应用真实业务状态
# 13. REST 的缓存策略,Cache-Control、ETag 与条件请求(If-None-Match)的配合 A ETag 用于控制缓存新鲜度 B no-store 表示可缓存但需验证 C 304 响应包含完整资源正文 D 缓存过期后用 If-None-Match 验证,未变化返回 304 ✓ 正确答案
# 14. gRPC 反射(ServerReflection)与 grpcurl 在调试中的应用,生产环境如何关闭 A 反射不影响信息安全 B grpcurl 必须持有 proto 文件才能调用 C 生产环境应默认开启反射 D 反射让客户端动态获取服务描述,无需预置 proto ✓ 正确答案
# 15. REST 接口的请求追踪,trace 上下文在网关、负载均衡与应用间的传递规范 A 网关不需要解析 trace 上下文 B 每个组件各自生成独立 trace-id 即可 C 按 W3C Trace Context 用 traceparent 关联同一 trace 的 span ✓ 正确答案 D tracestate 用于传递 trace-id
# 16. 反向代理观测应如何关联 request_id、upstream_addr、upstream_status 与各阶段耗时定位网关或应用瓶颈 A 瓶颈可能在网关自身或网络 ✓ 正确答案 B 后端返回 5xx C 后端应用处理慢 D 数据库查询慢
# 17. REST 与 gRPC 双协议暴露时的序列化与错误模型统一问题 A 用同一 Protobuf 契约并统一错误码映射可保持语义一致 ✓ 正确答案 B 错误模型无需统一 C gRPC 序列化必须用 JSON D 两套协议应各自独立定义契约
# 18. OpenAPI 规范驱动的契约测试,如何用 schema 校验请求与响应 A 用 OpenAPI 的 JSON Schema 校验请求与响应,保证符合契约 ✓ 正确答案 B schema 校验只检查响应状态码 C 契约测试与文档无关 D schema 校验无法用于请求体
# 19. Connect-RPC 的拦截器(Interceptor)如何实现认证、日志与重试的横切逻辑 A 认证、日志、重试等横切逻辑可以通过拦截器统一实现 ✓ 正确答案 B 拦截器无法进行重试 C 拦截器对三种协议需分别实现 D 拦截器只能用于日志
# 20. gRPC 拦截器与 REST 过滤器在认证/限流上的职责划分 A 拦截器无法做认证 B 两者职责完全不同 C REST 过滤器处理 gRPC 请求 D 两者都可在协议入口实现认证、限流等横切逻辑 ✓ 正确答案
# 21. REST 服务的重试安全,仅对幂等请求自动重试,非幂等请求如何用幂等键保护 A 幂等键由服务端生成 B 非幂等 POST 需用幂等键保证服务端只执行一次 ✓ 正确答案 C GET 请求重试会产生重复副作用 D 所有请求都可直接自动重试
# 22. gRPC 流式响应的取消,客户端取消后服务端如何感知并停止计算 A 客户端取消不会传播到服务端 B 取消后服务端必须继续计算 C 服务端通过 onCancel 感知并停止计算、释放资源 ✓ 正确答案 D 取消仅影响客户端
# 23. HTTP 客户端连接复用,Java HttpClient 的 HTTP/2 连接池与并发流限制 A 并发流不受限制 B 单条 HTTP/2 连接承载多个并发流,超出 MAX_CONCURRENT_STREAMS 时排队 ✓ 正确答案 C 每个请求必须建立独立连接 D HTTP/2 不支持连接复用
# 24. RPC 调用的超时分层,连接超时、请求超时与总 deadline 如何设置与递减 A 连接超时应长于请求超时 B 只需设置一个超时即可 C 下游获得的剩余时间 = 总 deadline - 已耗时 ✓ 正确答案 D 总 deadline 应小于各环节超时之和
# 25. Connect-RPC 的 JSON 与二进制编码同时开放时,网关、日志和错误详情应如何避免泄露敏感字段 A 二进制输出会泄露敏感字段 B 只有 JSON 需要脱敏 C 错误详情应返回全部字段 D 应通过 schema 标注并在日志、错误详情、网关统一脱敏 ✓ 正确答案
# 26. Protobuf 的序列化性能与 Java 反射式 JSON 的对比,RPC 场景为何倾向二进制 A Protobuf 依赖反射序列化 B Protobuf 通过代码生成与紧凑编码,体积小、速度快 ✓ 正确答案 C JSON 编码比 Protobuf 更紧凑 D Protobuf 无法演进 schema
# 27. REST 错误响应的设计,Problem Details(RFC 9457)的字段约定与客户端解析 A 客户端无法解析该结构 B type、title、status、detail、instance 构成标准错误结构 ✓ 正确答案 C 错误响应只有 status 字段 D 媒体类型是 application/json
# 28. gRPC 服务定义(.proto)的向后兼容,字段编号、reserved 与 oneof 的演进规则 A oneof 可同时包含多个被设置字段 B 删除字段应保留编号,新建字段用新编号以保持兼容 ✓ 正确答案 C 可随意复用已删除字段的编号 D 可随意修改字段类型
# 29. REST 与 RPC 的边界,什么业务适合 REST 资源模型,什么适合过程调用模型 A 资源化、可缓存、公开的业务适合 REST,命令式内部高频适合 RPC ✓ 正确答案 B 动作业务适合 REST 资源模型 C RPC 天然支持 HTTP 缓存 D 所有业务都适合 REST
# 30. tRPC(腾讯)的协议与 gRPC 的差异,编解码、路由与治理能力的对比 A tRPC 治理能力内建于 SDK,gRPC 依赖外部组件 ✓ 正确答案 B tRPC 不支持 Protobuf C 两者都不是基于 Protobuf D gRPC 治理能力全部内建
# 31. gRPC Server 的线程模型,同步 vs 异步执行器在吞吐与延迟上的取舍 A 异步模型延迟一定更低 B 异步模型吞吐高但复杂度高,同步模型简单但占用线程 ✓ 正确答案 C 同步模型在高并发下不易耗尽线程 D 只能使用同步模型
# 32. HTTP 网关(Envoy/APISIX)如何把 REST 请求转译为 gRPC,协议转换的代价是什么 A 转译后 HTTP 缓存语义完全保留 B JSON↔Protobuf 转换与状态码映射带来开销和语义损失 ✓ 正确答案 C 转译无任何性能开销 D 网关转译不影响后端
# 33. REST 的 HATEOAS 与超媒体驱动在微服务中的实际应用边界 A 微服务普遍强制使用 HATEOAS B HATEOAS 能减少响应体积 C 响应携带链接供客户端动态导航,但实际应用常受复杂度限制 ✓ 正确答案 D HATEOAS 与超媒体无关
# 34. gRPC 连接中 HTTP/2 流数量上限(MAX_CONCURRENT_STREAMS)如何影响并发调用 A 限制单连接上并发流数量,超出时排队或新建连接 ✓ 正确答案 B 客户端可无限突破该上限 C 限制服务端并发连接数 D 与 gRPC 调用无关
# 35. REST API 的限流头(RateLimit-*)与客户端退避(Retry-After)的标准实践 A 客户端应无视限流头无限重试 B 限流命中返回 200 并继续处理 C 429 配合 Retry-After 指示客户端退避重试 ✓ 正确答案 D RateLimit-Reset 表示剩余配额
# 36. gRPC 与 REST 在日志与追踪字段上的差异,如何统一 trace 上下文 A 两者载体不同但可用 W3C 标准上下文统一 ✓ 正确答案 B trace 上下文只在日志中有效 C 两者无法关联 D gRPC 无法传递 trace 上下文
# 37. OpenAPI 3.1 与 JSON Schema 的关系,契约定义在代码生成中的作用 A OpenAPI 3.1 采用 JSON Schema 2020-12 描述数据 ✓ 正确答案 B OpenAPI 3.1 与 JSON Schema 无关 C 契约只能用于文档 D 契约无法驱动代码生成
# 38. gRPC 的压缩(gzip 等)在 CPU 与带宽上的权衡,何时应禁用压缩 A 压缩总是降低 CPU 开销 B 所有消息都必须压缩 C 压缩只影响带宽不影响 CPU D 对已压缩或小消息压缩收益有限,CPU 紧张时应禁用 ✓ 正确答案
# 39. REST 批量操作的实现,batch 端点 vs 多次请求在一致性与性能上的取舍 A 多次请求性能总优于 batch B batch 减少往返但需处理部分成功的一致性问题 ✓ 正确答案 C batch 无法返回部分成功结果 D batch 天然保证原子性
# 40. gRPC 的鉴权,拦截器校验 metadata 中的 token 与 mTLS 的配合 A 只能使用其中一种 B 拦截器校验 metadata 中的 token 实现调用级鉴权,与 mTLS 配合 ✓ 正确答案 C mTLS 用于授权具体操作 D token 校验失败返回 OK
# 41. Protobuf/Avro 等二进制序列化在微服务(gRPC)场景与 JSON 相比的体积、速度与 schema 演进取舍 A 二进制更利于调试 B 二进制无法演进 schema C Protobuf/Avro 紧凑省带宽且支持 schema 演进,微服务内部倾向二进制 ✓ 正确答案 D JSON 体积更小、速度更快
# 42. REST 的媒体类型协商,application/json 与 protobuf(application/x-protobuf)如何共存 A 二进制和 JSON 无法共享资源模型 B 同一端点只能支持一种媒体类型 C 服务端忽略 Accept 头 D 客户端用 Accept 头选择 JSON 或 Protobuf 表示 ✓ 正确答案
# 44. WebSocket 长连接跨版本发布时,怎样让旧连接自然排空、新连接进入新 upstream 并设置最长会话期限 A 无需处理长连接 B 会话期限与发布无关 C 新连接走新 upstream,旧连接自然排空并设最长会话期限兜底 ✓ 正确答案 D 旧连接必须立即断开切换
# 45. gRPC deadline、HTTP 网关超时和下游数据库超时应按什么顺序递减才能保留清理时间 A 各层超时相等即可 B 应内层 < 外层 < 总 deadline,留出清理时间 ✓ 正确答案 C 超时顺序不影响系统 D 内层超时应大于外层超时
# 46. gRPC 与 REST 在浏览器可达性、流式语义、缓存、错误模型和 schema 演进方面分别有哪些协议约束 A gRPC 原生支持浏览器调用 B gRPC 不原生支持流式 C REST 有 HTTP 缓存语义而 gRPC 无标准缓存 ✓ 正确答案 D 两者错误模型完全一致
# 47. 代理 WebSocket 时,Upgrade、Connection、HTTP 版本、读超时与连接排空配置缺一项会出现什么现象 A 读超时与长连接无关 B 缺少 Upgrade 头仍可正常握手 C HTTP/2 原生支持 WebSocket 握手 D 需正确转发 Upgrade/Connection 头、配置读超时与连接排空 ✓ 正确答案
# 48. 压测 unary、server streaming 与 bidirectional streaming 时,连接数、并发流和消息大小应如何分开控制 A 消息大小不影响压测 B 只需测量 QPS 即可 C 三种模式压测参数完全相同 D 应分开控制连接数、并发流、消息大小以定位瓶颈 ✓ 正确答案
# 49. 基于 split_clients、map 与 upstream 权重进行灰度时,怎样保持用户粘性并排除健康检查流量 A 用户粘性无法保证 B 用用户标识哈希保持粘性,并排除健康检查流量 ✓ 正确答案 C split_clients 与用户标识无关 D 健康检查流量应参与灰度分流
# 50. 服务同时暴露 REST 与 RPC 时,如何用一套领域错误目录生成稳定的状态码映射而不丢失可观测性 A 两协议各自维护错误码 B 用一套领域错误目录映射双协议状态码,并保留结构化详情保证可观测性 ✓ 正确答案 C 映射后无法追踪 D 错误码与状态码无关
# 51. REST 的并发控制,ETag + If-Match 实现乐观并发更新,与版本号字段的取舍 A ETag 是资源表示的隐式版本,版本号是显式字段,二者都实现 CAS ✓ 正确答案 B ETag 与 If-Match 校验失败返回 200 C If-Match 用于强制覆盖 D 版本号字段无法防并发
# 52. gRPC 的 keepalive 参数(ping 间隔、超时)在跨机房场景的调优 A 跨机房无需调优 keepalive B keepAliveTime 越小越好 C keepAliveTimeout 应大于 RTT,避免误判连接失效 ✓ 正确答案 D ping 间隔应小于 RTT
# 53. REST 与 WebSocket 的选型,请求-响应 vs 双向实时通信的边界 A 实时双向场景用 WebSocket,请求-响应可缓存场景用 REST ✓ 正确答案 B WebSocket 更适合低频请求 C REST 支持服务端主动推送 D 两者交互模型完全相同
# 54. gRPC 的反射与健康检查在 Service Mesh 中的角色 A 健康检查用于获取服务 schema B 两者在网格中无作用 C 反射用于端点摘除 D 健康检查用于判定服务可用性,反射用于协议发现 ✓ 正确答案
# 55. HTTP 客户端超时配置,connectTimeout/readTimeout/responseTimeout 的分层设置 A 读超时用于连接建立 B connectTimeout 应大于 responseTimeout C 连接超时管建立连接,读超时管读取响应,响应超时管整体 ✓ 正确答案 D 只需设置一个超时
# 56. REST 请求体大小限制与流式上传,multipart 与 chunked 编码的差异 A 两者完全相同 B multipart 用于一个请求携带多字段与文件,chunked 用于传输层流式分块 ✓ 正确答案 C multipart 是传输层分块,chunked 是应用层多部分 D chunked 用于多文件
# 57. Connect-RPC 如何在同一 Protobuf 服务上提供 Connect、gRPC 与 gRPC-Web 协议,并协商内容类型 A Connect 只能支持一种协议 B Connect 通过 Content-Type 协商在 Connect/gRPC/gRPC-Web 间切换 ✓ 正确答案 C 每种协议需要独立服务定义 D gRPC 原生支持浏览器
# 58. gRPC 的 DNS 解析与负载均衡,dns:/// 与 xds:/// 解析器的差异 A xds:/// 无需外部组件 B xds:/// 从控制面获取动态端点与治理配置 ✓ 正确答案 C dns:/// 依赖控制面 D 两者解析机制相同
# 59. REST API 文档生成,springdoc-openapi 与手写契约的维护成本对比 A springdoc 无法反映实现 B springdoc 自动生成文档降低漂移,手写契约需契约测试兜底防漂移 ✓ 正确答案 C 两者维护成本相同 D 手写契约不会漂移
# 60. Protobuf 在 Java 中的使用,protoc 生成代码与 runtime 依赖的管理 A Java 无需 runtime 依赖 B protoc 只能生成 C++ 代码 C runtime 版本无需匹配 D protoc 生成 Java 类,runtime 依赖用构建工具管理 ✓ 正确答案
# 61. Protobuf 字段编号、reserved、unknown fields 与 oneof 演进规则如何保证滚动升级期间新旧 gRPC 客户端互通 A 新字段用新编号,老客户端保留 unknown fields 保证互通 ✓ 正确答案 B 老客户端应丢弃未知字段 C 字段编号可随意复用 D oneof 无演进约束
# 62. HTTP/3(QUIC)对 HTTP 客户端的影响,连接迁移与 0-RTT 的语义 A QUIC 基于 TCP B 0-RTT 无重放风险 C 连接 ID 实现连接迁移,0-RTT 降低重连延迟 ✓ 正确答案 D HTTP/3 与连接迁移无关
# 63. gRPC 流式接口的测试,如何用 stub 模拟流并验证时序 A 只需验证第一个消息 B 时序无法验证 C 流式接口无法测试 D 用 mock StreamObserver 捕获 onNext 序列验证时序 ✓ 正确答案