ES 倒排索引与行级安全

共 20 题
#

1. Elasticsearch 倒排索引的结构(term dictionary、posting list、doc values)是怎样的?FST(有限状态转换器)如何压缩前缀查找、加速 term 定位?

A term dictionary 采用线性扫描查找 term,性能最差但最节省内存
B doc values 是列式正向存储,主要服务于排序、聚合与脚本计算 ✓ 正确答案
C posting list 存储在 term dictionary 中,用于保存字段的所有值
D FST 只能压缩 term,不能提升查找速度
#

2. ES 写入流程(写 translog 与内存 buffer → refresh 生成可搜索 segment → flush 持久化并清空 translog)是怎样的?为什么说它是近实时(NRT,默认 1s refresh)?

A refresh 会将 segment 立即 fsync 到磁盘,保证持久化
B flush 之后数据才可被搜索,因此写入是最终一致的
C refresh 生成可搜索 segment 但未落盘,故数据近实时可搜索 ✓ 正确答案
D 数据写入内存 buffer 后即可被搜索,属于实时系统
#

3. analyzer 的三层结构(char filter、tokenizer、token filter)是什么?中文检索为何常“索引用 ik_max_word、查询用 ik_smart”?

A char filter 负责切分 token,tokenizer 负责文本预处理
B ik_smart 分词更细,索引通常用它提高召回率
C 索引与查询必须使用完全相同的分词器
D 索引用 ik_max_word 提高召回,查询用 ik_smart 提高精确率 ✓ 正确答案
#

4. ES 深度分页 from+size 为什么有 max_result_window(默认 1 万)限制(每个 shard 都要返回 top N 给协调节点归并)?scroll 与 search_after 分别如何解决深分页?

A from+size 的深分页开销只与每次返回的 size 相关
B scroll 适合实时交互式分页,且快照始终一致
C search_after 适合实时翻页,通过上一页排序值作为游标继续 ✓ 正确答案
D max_result_window 默认 1 万,可以无限调整而无副作用
#

5. ES 分片(shard)与副本(replica)如何影响写入一致性(wait_for_active_shards)与读吞吐?分片数量与单分片大小(建议 10-50GB)如何规划?

A 副本越多写入吞吐越高,因为副本可并行接收写入
B wait_for_active_shards 默认必须所有副本都 active 才写入
C 主分片数量在索引生命周期中可以随时调整
D 单分片大小建议控制在 10-50GB,避免分片过多或过少 ✓ 正确答案
#

6. segment merge 的机制与代价(后台合并小段、force_merge 的写放大与 IO 峰值)是什么?对写入吞吐与查询延迟有何影响?

A force_merge 适合在写入高峰期执行以降低查询延迟
B 后台合并会重写数据产生写放大,但能减少 segment 数量提升查询 ✓ 正确答案
C 合并只影响查询速度,对写入 IO 完全没有影响
D segment 数量越多查询越稳定,因此不应合并
#

7. mapping 中 text 与 keyword 类型的差异(分词 vs 不分词、能否聚合排序)是什么?动态映射(dynamic mapping)有何风险、如何用 dynamic template 规范?

A keyword 不分词,适合精确匹配、聚合和排序 ✓ 正确答案
B 动态映射会自动推断字段类型且推断后仍可随意修改
C text 类型支持聚合和排序,keyword 类型支持全文检索
D 用 multi-field 时 text 与 keyword 只能二选一,不能共存
#

8. bool/match/term/range 查询 DSL 中 filter 上下文(不评分、可缓存)与 query 上下文有何区别?如何用 filter 优化性能?

A filter 上下文不评分且结果可缓存,适合稳定过滤条件 ✓ 正确答案
B must 子句属于 filter 上下文,不参与评分
C filter 上下文也会参与评分计算,结果可缓存
D term 查询只能放在 query 上下文,不能放在 filter
#

9. ES 7.x+ 主节点选举如何从 zen discovery(minimum_master_nodes 手动配置)演进为类 Raft 协议?如何防止脑裂?

A 7.x 的类 Raft 协议仍需要手动配置 minimum_master_nodes
B 只有获得多数派支持的主节点才能当选,从而防止脑裂 ✓ 正确答案
C zen discovery 是 7.x 默认的选举算法
D 网络分区时少数派分区也能选出主节点
#

10. MySQL 中视图与函数的权限隔离?

A 视图可以隐藏底层表,并通过列限制与 WHERE 条件做数据裁剪 ✓ 正确答案
B 视图 SQL SECURITY INVOKER 表示以定义者权限解析底层表
C 函数无法设置 SQL SECURITY,只能以调用者权限执行
D 视图定义者权限天然比调用者权限更严格
#

11. BM25 相关性评分的核心因子(词频饱和、逆文档频率 IDF、字段长度归一化)是什么?相比 TF-IDF 做了哪些改进?

A BM25 的词频贡献呈线性增长,保留 TF-IDF 的原始权重
B BM25 不使用 IDF,只依赖词频和字段长度
C BM25 通过 k1 使词频饱和,避免高频词无限主导得分 ✓ 正确答案
D BM25 对长文档的惩罚是固定的,与参数 b 无关
#

12. ABAC(Attribute-Based Access Control),基于属性的访问控制?

A ABAC 只根据用户角色决定是否授权,不涉及环境属性
B ABAC 相比 RBAC 更简单,规则更少
C ABAC 通过主体、资源、环境和动作等多维属性组合动态授权 ✓ 正确答案
D ABAC 的授权决策是静态的,与时间地点无关
#

13. RBAC(Role-Based Access Control),基于角色的访问控制?

A RBAC 中权限直接授予用户,角色仅用于分组展示
B RBAC 能够处理基于时间和地点的条件授权
C RBAC 不支持角色之间的继承关系
D RBAC 通过角色连接用户与权限,角色可继承与复用 ✓ 正确答案
#

14. 最小权限原则(Principle of Least Privilege)的实践?

A 只授予完成任务所需的最小权限,并定期回收多余权限 ✓ 正确答案
B 应给所有应用统一使用超级账号,便于维护
C 权限一旦授予就应永久保留,避免频繁变更
D 最小权限原则只适用于运维账号,不适用于应用账号
#

15. 数据库认证方式,密码、证书、Kerberos、LDAP、OAuth?

A OAuth 主要面向数据库内部的用户管理
B Kerberos 通过密码直接验证,无需第三方 KDC
C LDAP 只用于密码存储,不参与认证
D 证书认证基于 TLS 客户端证书,适合服务间高安全连接 ✓ 正确答案
#

16. MFA(Multi-Factor Authentication)在数据库的应用?

A MFA 只要求密码,无需额外因素
B 多因素认证只需要密码和生物特征两种即可
C MFA 主要面向普通只读用户,不适用于管理员
D 数据库原生协议通常不支持 MFA,需通过认证网关或代理叠加 ✓ 正确答案
#

17. MySQL 中用户、权限、角色的管理?

A MySQL 用户身份只由用户名决定,与主机无关
B MySQL 权限只能到表级别,不能做列级授权
C 角色是权限集合,可授予用户并由用户激活获得权限 ✓ 正确答案
D 8.0 之前就支持角色,无需用户手动授权
#

18. PostgreSQL 的角色?

A PostgreSQL 中用户和组是两类不同的对象,有独立关键字
B 角色一旦创建就不能再被授予或继承其他角色
C 角色是统一的用户/组抽象,通过成员关系实现权限继承 ✓ 正确答案
D 所有角色的特殊属性都会自动被成员继承
#

19. Elasticsearch 9.x 相对 8.x 的大版本升级路径,废弃 API 与默认行为变更、kNN 向量检索与语义搜索的演进如何评估?

A 9.x 完全保留 8.x 所有 API,无需兼容性测试
B 大版本升级会移除废弃 API,因此升级前需评估兼容性 ✓ 正确答案
C 向量检索是 9.x 全新增功能,8.x 完全没有相关能力
D 升级只影响查询性能,不影响索引配置与安全默认值
#

20. Elasticsearch 的 ILM(Index Lifecycle Management)如何用 hot→warm→cold→frozen→delete 五阶段管理索引生命周期?rollover、shrink、force merge 与 searchable snapshot 分别在哪个阶段触发,各阶段索引的 read-only 与副本数如何自动切换?

A rollover 在 delete 阶段触发,用于删除旧索引
B warm 阶段可执行 shrink 与 force_merge,并将索引设为只读 ✓ 正确答案
C cold 阶段始终保留全部副本以保证读性能
D 各阶段副本数固定不变,无法自动切换