# 1. Doris 的 MPP 架构、Aggregate/Unique/Duplicate 三种表模型的适用场景与区别? A Duplicate 模型会自动按主键去重 B Unique 模型无法更新数据 C Aggregate 模型在导入时按聚合键进行部分预聚合,支持 SUM、MAX 等聚合语义 ✓ 正确答案 D 三种表模型可以随意切换而不影响数据
# 2. Doris 的 Rollup、物化视图与查询改写(Query Rewrite)如何加速报表? A 优化器会将符合条件的查询改写为命中 Rollup 或物化视图,以更小的数据量完成聚合加速报表 ✓ 正确答案 B 物化视图无法自动改写查询 C Rollup 会降低查询性能 D Rollup 的维度必须与查询完全一致才能使用
# 3. Doris 的 Runtime Filter(IN/MIN-MAX/Bloom)在 Join 优化中的作用 A Runtime Filter 会降低 Join 结果的准确性 B Runtime Filter 用 Join 驱动侧的实际值构造过滤条件下推,减少大表扫描量,Bloom Filter 适合高基数且有少量误判 ✓ 正确答案 C Runtime Filter 只在离线批处理中有效 D IN 类型的 Runtime Filter 适合驱动侧值特别多的场景
# 4. Doris 的四种 Join 策略(Broadcast、Shuffle、Colocate、Bucket Shuffle)各自适用什么数据分布?Colocate Join 为什么要求同分桶键? A Shuffle Join 不需要任何网络传输 B Broadcast Join 适合两张大表之间的关联 C Colocate Join 要求两表分桶键与桶数一致,使相同 Key 的数据位于同一 BE 实现本地 Join ✓ 正确答案 D Bucket Shuffle 适合小表 Join 大表
# 5. Doris 的 Segment 存储结构与 ZoneMap、前缀索引(Short Key Index)如何协同加速点查与范围扫描? A 前缀索引对所有列都能加速 B ZoneMap 保存每个数据块的 min/max 值,用于跳过不满足谓词的数据块 ✓ 正确答案 C ZoneMap 可以精确定位到行 D Segment 内部是行式存储
# 6. Doris 的分区分桶策略与数据倾斜治理(Bucket 数、分桶键选择)? A 分桶键应选择低基数列 B 分区用于裁剪与生命周期管理,分桶决定数据分布,分桶键应选高基数且查询常用的列 ✓ 正确答案 C 桶数越多性能一定越好 D 数据倾斜无法通过分桶键调整缓解
# 7. Doris 的导入方式(Stream Load/Broker Load/Routine Load)与 Exactly-Once 语义? A Routine Load 是一次性导入本地文件 B Broker Load 面向 Kafka 实时消费 C Stream Load 适合高频实时小批量导入,通过唯一 label 保证重复提交幂等 ✓ 正确答案 D 导入失败重试必须使用新的 label
# 8. Doris 的 Unique Key 模型实现,MOR(Merge on Read)与部分列更新对实时写入与查询性能的影响? A Unique 模型查询时无需合并任何版本 B 部分列更新会增加全列重写 C MOR 让写入只追加新数据,查询时合并版本取最新,写入快但版本过多会拖慢查询 ✓ 正确答案 D Unique 模型不支持按主键去重
# 9. Doris 的查询引擎,MPP 执行、向量化与 CBO 如何协同,Pipeline 执行引擎解决了什么问题? A Pipeline 引擎把算子流水线化,减少物化与调度开销,提升并发执行效率 ✓ 正确答案 B 向量化执行是逐行执行模式 C CBO 负责分布式调度 D MPP 与向量化执行互斥
# 10. Doris 的架构,FE(前端)与 BE(后端)的职责划分? A BE 负责元数据管理与查询计划生成 B BE 之间无需数据均衡 C FE 存储数据副本 D FE 负责 SQL 解析、元数据管理与查询计划生成,BE 负责数据存储与执行,两者通过心跳通信 ✓ 正确答案
# 11. Doris 的 tablet 副本机制与数据修复(副本均衡、校验) A tablet 副本只能分布在同一 BE 上 B BE 故障后由 FE 调度在健康 BE 上补建副本,并周期性校验副本一致性 ✓ 正确答案 C 副本数量固定无法配置 D 副本损坏不影响查询结果
# 12. Apache Doris 的 BloomFilter 索引、Bitmap 索引与倒排索引三种二级索引分别加速什么查询?为什么 BloomFilter 索引适合高基数列的等值过滤(=、IN)但存在误判,Bitmap 索引适合低基数列的精确去重(count distinct),它们与内建前缀索引/ZoneMap 如何协同? A BloomFilter 索引能精确判断值是否存在 B BloomFilter 适合高基数列等值过滤,有误判但能过滤不匹配块,Bitmap 适合低基数列精确去重 ✓ 正确答案 C Bitmap 索引适合高基数列 D 倒排索引用于数值范围查询
# 13. Doris 的 Cumulative 与 Base Compaction 如何控制版本数?版本过多对查询与导入的影响是什么? A Compaction 会导致数据丢失 B Cumulative Compaction 负责合并近期小版本,Base Compaction 合并历史版本,二者共同控制版本数 ✓ 正确答案 C 版本越多查询越快 D Compaction 只在写入时同步执行
# 14. Doris 的 Schema Change 为什么加列是轻量操作而删列或改类型是重量操作?两种路径分别如何影响查询与副本? A 删列与改类型需要重写数据生成新版本,是重量操作;加列仅更新元数据并用默认值补齐旧数据,是轻量操作 ✓ 正确答案 B 加列需要重写全部历史数据 C Schema Change 不影响副本 D 改类型也是轻量操作
# 15. Doris 存算分离(Compute-Storage Separation)在云原生场景的演进? A 存算分离把数据放共享对象存储,计算节点本地缓存热数据,实现独立弹性与低成本 ✓ 正确答案 B 存算分离后数据仍必须存储在本地盘 C 存算分离会降低扩展性 D 存算分离无需元数据服务
# 16. Doris 的物化视图与 Rollup,预聚合的查询改写? A Rollup 支持多表 Join 的预聚合 B 查询改写命中物化视图后结果一定错误 C 物化视图与 Rollup 都通过查询改写自动命中,前者可基于复杂查询,后者基于单表维度预聚合 ✓ 正确答案 D Rollup 只能用于 Duplicate 模型
# 17. Doris 的查询优化,CBO、向量化与 Runtime Filter? A CBO 只负责 SQL 语法解析 B 向量化执行依赖逐行处理 C Runtime Filter 在计划生成前执行 D CBO 制定计划,向量化执行计算,Runtime Filter 动态裁剪 Join 数据量,三者协同优化查询 ✓ 正确答案
# 18. Doris 的高可用,FE 选举与 BE 多副本? A FE 故障会导致元数据永久丢失 B Doris 只能部署一个 FE 节点 C BE 副本不需要均衡 D 多 FE 通过 BDB JE 选主保证元数据高可用,BE 多副本与自动补建保障数据可用性 ✓ 正确答案
# 19. Doris 与 StarRocks 的生态差异,社区、运维与商业支持? A Doris 由 Apache 社区驱动,StarRocks 商业与云托管支持更强,选型需按生态需求权衡 ✓ 正确答案 B Doris 与 StarRocks 完全同源且后续发展完全一致 C StarRocks 没有任何商业支持 D 两者 SQL 语法完全相同可无缝迁移
# 20. Doris 的查询内存控制(执行内存限制、Spill 落盘)与慢查询定位 A 查询内存可以无限使用 B 通过执行内存限制、Spill 落盘与查询队列控制内存,用 profile 与慢查询日志定位并优化慢查询 ✓ 正确答案 C Spill 落盘不会影响性能 D 慢查询只能靠加机器解决