跳到主要内容

MongoDB面试题

MongoDB基础知识

概述与特性

  1. 什么是MongoDB?它的主要特点是什么?
  2. MongoDB是关系型数据库还是非关系型数据库?
  3. MongoDB和传统关系型数据库的区别?
  4. MongoDB的应用场景有哪些?
  5. 你们使用的MongoDB版本是什么?为什么选择这个版本?
  6. MongoDB的优缺点是什么?

基本概念

  1. MongoDB中的数据库、集合、文档的概念?
  2. 什么是BSON?和JSON的区别?
  3. MongoDB的_id字段是什么?有什么特点?
  4. ObjectId的组成部分是什么?
  5. MongoDB支持哪些数据类型?

安装与配置

  1. MongoDB的安装方式有哪些?
  2. MongoDB的默认端口是多少?
  3. MongoDB的配置文件主要包含哪些内容?
  4. 如何启动和停止MongoDB服务?
  5. MongoDB的存储引擎有哪些?默认是什么?
  6. WiredTiger存储引擎的特点?

数据操作

CRUD操作

  1. 如何插入文档?insertOne和insertMany的区别?
  2. 如何查询文档?find()方法的使用?
  3. 如何更新文档?update、updateOne、updateMany的区别?
  4. 如何删除文档?deleteOne和deleteMany的区别?
  5. 什么是upsert操作?
  6. 如何进行批量操作?

查询操作

  1. MongoDB的查询操作符有哪些?($eq、$gt、$lt、$in等)
  2. 如何进行正则表达式查询?
  3. 如何查询嵌套文档?
  4. 如何查询数组字段?
  5. 如何进行分页查询?skip和limit的性能问题?

索引管理

索引基础

  1. MongoDB支持哪些类型的索引?
  2. 如何创建索引?createIndex的参数?
  3. 什么是复合索引?索引顺序的影响?
  4. 什么是稀疏索引?使用场景?
  5. 什么是TTL索引?如何实现数据过期?
  6. 唯一索引和主键索引的区别?

索引优化

  1. 如何查看查询是否使用了索引?explain()的使用?
  2. 索引的选择原则是什么?
  3. 如何分析索引的使用情况?
  4. 索引对写入性能的影响?
  5. 如何优化索引?
  6. 什么是索引覆盖查询?

特殊索引

  1. 什么是文本索引?如何进行全文搜索?
  2. 什么是地理空间索引?2d和2dsphere的区别?
  3. 什么是哈希索引?使用场景?
  4. 部分索引(Partial Index)是什么?
  5. 如何创建后台索引?

副本集(Replica Set)

副本集概念

  1. 什么是MongoDB副本集?作用是什么?
  2. 副本集的成员类型有哪些?(Primary、Secondary、Arbiter)
  3. 主节点和从节点的职责是什么?
  4. 什么是仲裁节点?为什么需要仲裁节点?
  5. 副本集最少需要几个节点?为什么?
  6. 副本集和主从复制的区别?

副本集配置

  1. 如何搭建副本集?具体步骤?
  2. 如何添加和删除副本集成员?
  3. 如何查看副本集状态?rs.status()
  4. 如何修改副本集配置?
  5. 什么是优先级?如何设置?
  6. 如何强制主节点切换?

副本集原理

  1. 副本集的选举机制是怎样的?
  2. 什么是oplog?作用是什么?
  3. 副本集的同步原理?
  4. 什么是读偏好(Read Preference)?有哪些模式?
  5. 什么是写关注(Write Concern)?如何保证数据一致性?
  6. 副本集的故障转移过程?

分片集群(Sharding)

分片概念

  1. 什么是MongoDB分片?为什么需要分片?
  2. 分片集群的组件有哪些?(mongos、config server、shard)
  3. 各组件的作用是什么?
  4. 什么是分片键(Shard Key)?如何选择?
  5. 什么是chunk?默认大小是多少?
  6. 分片策略有哪些?(范围分片、哈希分片)

分片配置

  1. 如何搭建分片集群?
  2. 如何添加分片?
  3. 如何对集合进行分片?
  4. 如何查看分片状态?
  5. 如何进行分片的负载均衡?
  6. 如何移除分片?

分片管理

  1. 什么是balancer?作用是什么?
  2. 如何监控chunk的分布?
  3. 如何手动迁移chunk?
  4. 分片键一旦选定能否修改?
  5. 如何处理热点数据问题?
  6. 分片集群的限制有哪些?

备份与恢复

备份策略

  1. MongoDB的备份方式有哪些?
  2. mongodump和mongorestore的使用?
  3. 如何进行物理备份?
  4. 如何进行增量备份?
  5. 如何备份分片集群?
  6. 备份时需要注意什么?

数据恢复

  1. 如何使用mongorestore恢复数据?
  2. 如何恢复到指定时间点?
  3. 如何恢复单个集合?
  4. 如何处理恢复时的冲突?
  5. 分片集群的恢复流程?

备份工具

  1. MongoDB官方备份工具有哪些?
  2. 第三方备份工具了解吗?
  3. 如何实现自动化备份?
  4. 云环境下的备份方案?
  5. 备份文件的管理策略?

性能优化

查询优化

  1. 如何优化MongoDB查询性能?
  2. 慢查询如何定位?Profiler的使用?
  3. 如何分析查询执行计划?
  4. 如何优化聚合查询?
  5. 如何避免全表扫描?
  6. 查询优化的最佳实践?

写入优化

  1. 如何提高写入性能?
  2. 批量操作的优化?
  3. Write Concern对性能的影响?
  4. 如何优化更新操作?
  5. 如何处理热点写入?

硬件优化

  1. MongoDB对硬件的要求?
  2. 内存配置建议?
  3. 磁盘I/O优化?
  4. 网络优化建议?
  5. CPU资源分配?

架构优化

  1. 读写分离如何实现?
  2. 如何设计高可用架构?
  3. 如何进行容量规划?
  4. 垂直扩展vs水平扩展?
  5. 缓存策略的应用?

监控与运维

监控指标

  1. MongoDB需要监控哪些关键指标?
  2. 如何监控内存使用情况?
  3. 如何监控磁盘I/O?
  4. 如何监控复制延迟?
  5. 如何监控连接数?
  6. 如何监控锁等待?

监控工具

  1. MongoDB自带的监控命令有哪些?
  2. mongostat和mongotop的使用?
  3. MongoDB Compass的功能?
  4. 第三方监控工具有哪些?
  5. 如何集成Prometheus监控?
  6. 如何设置告警?

日志管理

  1. MongoDB的日志类型有哪些?
  2. 如何配置日志级别?
  3. 如何分析MongoDB日志?
  4. 如何进行日志轮转?
  5. 审计日志如何配置?

运维管理

  1. 如何进行版本升级?
  2. 如何进行数据迁移?
  3. 如何进行容量扩展?
  4. 如何处理磁盘空间不足?
  5. 定期维护任务有哪些?

安全管理

认证授权

  1. MongoDB的认证机制有哪些?
  2. 如何启用认证?
  3. 如何创建用户和分配权限?
  4. 内置角色有哪些?
  5. 如何自定义角色?
  6. 如何实现细粒度权限控制?

加密安全

  1. MongoDB支持哪些加密方式?
  2. 如何启用传输加密(TLS/SSL)?

安全加固

  1. MongoDB安全加固的措施有哪些?
  2. 如何限制网络访问?
  3. 如何防止注入攻击?
  4. 如何配置防火墙规则?
  5. 安全审计如何实现?

问题排查

常见问题

  1. MongoDB启动失败的常见原因?
  2. 连接MongoDB失败如何排查?
  3. 查询超时如何处理?
  4. 内存占用过高如何排查?
  5. 磁盘空间满了如何处理?

性能问题

  1. 数据库响应慢如何排查?
  2. CPU使用率高如何分析?
  3. 锁等待问题如何解决?
  4. 复制延迟如何处理?
  5. 分片不均衡如何解决?

数据问题

  1. 数据不一致如何排查?
  2. 数据丢失如何恢复?
  3. 索引损坏如何修复?
  4. 文档过大如何处理?
  5. 孤儿文档如何清理?

集群问题

  1. 副本集选举失败如何处理?
  2. 分片集群config server故障如何恢复?
  3. mongos路由错误如何排查?
  4. 网络分区问题如何解决?
  5. 节点同步卡住如何处理?

最佳实践

设计原则

  1. MongoDB数据模型设计原则?
  2. 什么时候使用嵌入文档vs引用?
  3. 如何设计高效的索引?
  4. 分片键选择的最佳实践?
  5. 文档大小的建议?

开发建议

  1. 连接池如何配置?
  2. 如何处理MongoDB的事务?
  3. 如何实现乐观锁?
  4. 批量操作的建议?
  5. 错误处理最佳实践?

运维建议

  1. 生产环境部署建议?
  2. 备份恢复策略建议?
  3. 监控告警配置建议?
  4. 容量规划建议?
  5. 升级迁移建议?

更新时间:2025-01-30