GraphQL 与 Spring for GraphQL

共 20 题
#

1. GraphQL 与 REST 的选型边界,字段级查询、客户端驱动与服务端资源模型

A GraphQL 服务端驱动
B REST 支持字段级查询
C 两者相同
D GraphQL 客户端驱动字段级查询,REST 服务端资源模型适合可缓存接口 ✓ 正确答案
#

2. GraphQL 的 Schema 定义(SDL),类型系统、标量、枚举、接口与联合类型

A 只有 Object
B 含 Object、标量、枚举、接口、联合类型,定义 Query/Mutation/Subscription ✓ 正确答案
C 无标量
D SDL 无类型
#

3. GraphQL 的 N+1 查询问题,DataLoader 批处理与字段级解析器(resolver)

A 字段解析器与批处理无关
B DataLoader 把同一字段多次解析合并为一次批量查询,消除 N+1 ✓ 正确答案
C DataLoader 逐条查询
D N+1 无需处理
#

4. Spring for GraphQL 的注解式控制器,@QueryMapping/@MutationMapping/@SchemaMapping

A @SchemaMapping 只处理 Query
B @QueryMapping 查询、@MutationMapping 变更、@SchemaMapping 子字段解析 ✓ 正确答案
C 注解与 schema 无关
D 三者都处理查询
#

5. GraphQL 查询的执行流程,parse/validate/execute 三阶段,字段解析器如何由执行策略逐层驱动取值

A 只有 execute
B parse 解析、validate 校验、execute 用执行策略逐层驱动字段解析 ✓ 正确答案
C 字段解析一次性
D validate 在 execute 后
#

6. GraphQL 的查询成本控制,查询深度限制、复杂度分析与持久化查询(persisted query)

A 深度限制、复杂度分析、持久化查询组合防止过深/恶意查询 ✓ 正确答案
B 无需成本控制
C 持久化查询最宽松
D 深度限制最精确
#

7. GraphQL 的缓存策略,HTTP 缓存为何失效、CDN/边缘缓存的替代方案

A 无需缓存方案
B 查询多变可缓存
C HTTP 缓存自然生效
D 单一 POST 多变难缓存,持久化查询 + GET 使查询可缓存并配合边缘缓存 ✓ 正确答案
#

8. GraphQL 的错误模型,errors 数组、扩展字段(extensions)与部分成功语义

A errors 数组表达字段级错误,支持部分成功,extensions 携带扩展信息 ✓ 正确答案
B extensions 与错误无关
C 无部分成功
D 整体失败
#

9. GraphQL 订阅(Subscription)与 WebSocket 传输,实时字段推送

A Subscription 经 WebSocket 传输,解析器返回 Publisher 实时推送 ✓ 正确答案
B 无需 WebSocket
C 订阅不实时
D 订阅是一次性查询
#

10. GraphQL 联邦(Federation)与网关,子图(subgraph)拆分与 Java 生态支持

A 子图无法组合
B 单服务单 schema
C 无需网关
D 子图拆分 + 网关聚合统一 schema,@key 声明跨实体引用 ✓ 正确答案
#

11. GraphQL 的输入类型与参数校验,服务端校验与查询变量

A input 类型定义输入,查询变量分离参数,schema 与业务校验 ✓ 正确答案
B 不校验
C 无输入类型
D 变量不可用
#

12. GraphQL 与 Spring Security,字段级授权与 DataFetcher 中的安全上下文

A 无字段级授权
B 安全上下文不可用
C 只做全局认证
D 认证 + 字段级授权,DataFetcher 中读安全上下文判断字段权限 ✓ 正确答案
#

13. GraphQL 的性能陷阱,字段解析串行化、数据获取合并与批处理(DataLoader)

A 无性能问题
B 串行化最优
C 字段串行化与 N+1 是陷阱,DataLoader 批处理与并行解决 ✓ 正确答案
D DataLoader 无作用
#

14. GraphQL 的版本演进策略,字段废弃(deprecation)与 schema 演进代替版本号

A 用 @deprecated 废弃字段与 schema 增量演进代替版本号 ✓ 正确答案
B 用 /v1 /v2 版本
C 破坏性变更
D 无演进策略
#

15. Spring for GraphQL 的异常处理,@GraphQlExceptionHandler 与 ErrorType 分类、错误扩展字段如何返回客户端

A @GraphQlExceptionHandler 映射异常为 GraphQLError,ErrorType 分类,extensions 扩展 ✓ 正确答案
B 无扩展字段
C 异常直接抛
D 无 ErrorType
#

16. GraphQL 的 null 传播,子字段返回 null 时父字段非空约束如何导致整条路径失败,schema 设计如何权衡

A 非空总能保证
B 可空字段不受影响
C null 不传播
D 非空字段的子值 null 向上传播使整条路径失败,schema 需权衡非空与可空 ✓ 正确答案
#

17. GraphQL 的分页规范,Connection 的 edges/node/pageInfo 与游标分页

A offset 分页
B edges/node/pageInfo + 游标分页(first/after),稳定高效 ✓ 正确答案
C 分页无规范
D 无游标
#

18. GraphQL 与 OpenAPI 的共存,网关层协议转换与双协议暴露

A 网关协议转换或双协议暴露,共享服务层满足不同客户端 ✓ 正确答案
B 只能二选一
C 无法共存
D 协议无需转换
#

19. GraphQL 的工具链,GraphiQL、graphql-java runtime wiring 与代码生成

A GraphiQL 调试、runtime wiring 绑定 DataFetcher、代码生成提类型安全 ✓ 正确答案
B wiring 无需绑定
C 只有 GraphiQL
D 无代码生成
#

20. 接口与联合类型的运行时解析,typeResolver 如何根据实际对象类型选择具体类型,Java 侧如何注册

A typeResolver 根据实际对象类型选择具体类型,在 RuntimeWiring 注册 ✓ 正确答案
B 无法判断具体类型
C 无需 typeResolver
D 类型固定