MongoDB 面试题及详细答案(实战完整版)-1_第1页
MongoDB 面试题及详细答案(实战完整版)-1_第2页
MongoDB 面试题及详细答案(实战完整版)-1_第3页
MongoDB 面试题及详细答案(实战完整版)-1_第4页
MongoDB 面试题及详细答案(实战完整版)-1_第5页
已阅读5页,还剩3页未读, 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

MongoDB面试题及详细答案(实战完整版)一、基础概念篇(初级必问)1.简单介绍下MongoDB,它是什么类型的数据库?优缺点?答案:MongoDB是一款开源的、基于分布式文件存储的文档型NoSQL数据库,数据以BSON文档格式存储,结构灵活,不需要提前定义严格的表结构。优点:结构灵活:字段可以动态新增、修改,适配需求频繁变更的业务,不用改表结构、不用迁移数据。读写性能高:基于内存映射文件,热点数据常驻内存,单并发读写能力优于传统关系型数据库。易于扩展:天然支持水平分片扩展,集群部署简单,能轻松支撑海量数据。适配高并发:支持高吞吐的写入场景,锁机制是文档级锁,并发冲突少。缺点:事务能力有限:早期版本不支持事务,4.0支持单文档事务,4.2支持分布式事务,但性能比MySQL事务差。占用空间大:BSON格式冗余度高,相同数据量下存储体积远大于MySQL。复杂查询弱势:多表联查、复杂聚合、复杂事务场景不如关系型数据库。数据一致性弱:默认读写策略下,无法保证强一致性,适合最终一致业务。2.MongoDB核心名词解释:数据库、集合、文档,和MySQL怎么对应?答案:对应关系非常直观:MongoDB数据库<=>MySQL数据库MongoDB集合(Collection)<=>MySQL数据表(Table)MongoDB文档(Document)<=>MySQL数据行(Row)MongoDB字段(Field)<=>MySQL列(Column)区别:集合不需要预定义结构,同一个集合里的文档可以拥有不同字段,自由度极高。3.什么是BSON?和JSON有什么区别?答案:BSON是BinaryJSON的缩写,是MongoDB专用的二进制序列化格式,是JSON的超集。核心区别:BSON支持更多数据类型:日期、正则、二进制、小数、ObjectId等,JSON仅支持基础类型。BSON是二进制格式,解析速度更快、更适合机器读写;JSON是文本格式,可读性高但解析慢。BSON会存储字段长度,方便快速索引和遍历,JSON无固定结构标识。4.MongoDB的ObjectId组成结构是什么?答案:ObjectId是12字节的唯一主键,默认作为_id,结构固定:前4字节:时间戳(秒级)中间3字节:机器唯一标识(机器MD5哈希)后2字节:进程ID最后3字节:自增计数器(保证同一秒、同一机器、同一进程下唯一)特点:全局唯一、有序、可通过id反查创建时间,不需要数据库自增主键。5.MongoDB默认的读写优先级、默认隔离级别是什么?答案:默认读策略:读主节点(primary),保证读取最新数据。默认写策略:写入主节点确认成功。默认隔离级别:读未提交,可以读到未提交的修改,无锁等待,并发性能高,但会存在脏读风险。二、索引与性能优化篇(面试高频)6.MongoDB有哪些常用索引类型?各自适用场景?答案:单字段索引:最常用,针对单个字段查询、排序场景,比如根据用户id查询数据。复合索引:多个字段组合索引,适用于多条件查询、组合排序,遵循等值+排序+范围原则。唯一索引:保证字段值唯一,可用于手机号、用户名去重,允许单个null,不允许多个null。稀疏索引:只索引包含该字段的文档,忽略无该字段的文档,节省索引空间,适合字段缺失率高的场景。文本索引:用于全文模糊检索,支持分词搜索,适合文章标题、内容检索。地理索引:2d、2dsphere索引,用于地理位置距离排序、附近点位查询。7.复合索引的最左前缀原则,怎么理解?答案:和MySQL一致,复合索引遵循最左匹配规则。比如建立索引:(a,b,c)可以命中索引的查询:a、a+b、a+b+c、a+c无法命中索引的查询:b、c、b+c核心:必须匹配最左侧的前置字段,索引才能生效。同时优化准则:等值条件放前面,排序条件居中,范围条件放最后。8.MongoDB索引为什么不能滥用?索引的优缺点?答案:优点:大幅降低查询扫描行数,极大提升查询、排序、分组效率。缺点:占用内存和磁盘空间,索引数据会常驻内存,索引过多会导致内存溢出。降低写入性能:新增、修改、删除数据时,需要同步更新所有关联索引,索引越多写入越慢。实战原则:查询多、过滤量大的字段建索引;写入频繁、查询极少的字段不建索引。9.怎么排查MongoDB慢查询?explain关键字怎么用?答案:排查步骤:开启慢查询日志,设置慢查询阈值(一般100ms)。通过find().explain()分析执行计划。explain核心返回字段解读:stage:COLLSCAN:全集合扫描,没有走索引,需要优化。stage:IXSCAN:走索引扫描,查询正常。nReturned:最终返回数据条数。totalDocsExamined:扫描文档总数,数值远大于返回数,说明索引过滤效果差。10.MongoDB分页深度过大为什么慢?怎么优化?答案:原生skip+limit分页,深度越大越慢,因为skip会逐条扫描并跳过前面所有数据,深度10w、100w时扫描成本极高。优化方案:游标分页(推荐):用最后一条数据的唯一有序字段(_id、时间戳)作为条件,每次查询只查大于该值的数据,无skip开销。业务层限制最大分页页数,禁止用户深度翻页。热点列表做缓存,减少数据库查询。三、副本集与集群篇(中高级核心)11.什么是MongoDB副本集?作用是什么?答案:副本集是一组相互同步数据的MongoDB节点,标准架构为1主+多从+1仲裁。节点角色:主节点(Primary):负责所有读写请求,唯一可写入的节点。从节点(Secondary):同步主节点数据,提供读服务,主节点故障时参与选举。仲裁节点(Arbiter):不存储数据、不提供服务,只参与投票选举,保证集群票数过半。核心作用:数据冗余备份、故障自动切换、读写分离、提升服务高可用。12.副本集选举机制是什么?主节点宕机后怎么切换?答案:副本集基于多数投票机制选举主节点。集群总票数过半的节点才能当选主节点。切换流程:主节点宕机,集群检测到心跳超时(默认10秒)。剩余从节点、仲裁节点发起投票。数据最新、票数过半的从节点升级为新主节点。旧主节点恢复后,自动降级为从节点,同步新主数据。重点:集群节点数必须是奇数,防止平票无法选举。13.什么是读写分离?MongoDB如何实现读写分离?优缺点?答案:读写分离就是写请求走主节点,读请求分摊到从节点,缓解主节点压力。通过设置读偏好(readPreference)实现:primary:默认,只读主节点。secondary:只读从节点。primaryPreferred:优先主节点,主宕机读从节点。secondaryPreferred:优先从节点,从节点不可用读主节点(生产最常用)。优点:分担主节点压力,提升整体读吞吐量。缺点:从节点数据同步存在延迟,会读到旧数据,不适合强一致性业务。14.什么是分片集群?分片的核心组件和作用?答案:副本集解决高可用问题,分片集群解决海量数据存储和高并发问题,将海量数据拆分到多个分片节点存储。三大核心组件:Shard(分片节点):真实存储业务数据的节点,每个Shard本身是一个副本集,保证高可用。Mongos(路由节点):客户端唯一入口,接收所有请求,根据分片规则路由到对应Shard,对业务透明。ConfigServer(配置节点):存储集群元数据、分片规则、数据分布信息,必须部署副本集,保证数据可靠。15.分片键怎么选择?分片键的坑有哪些?答案:优质分片键原则:基数大、分布均匀,避免数据倾斜。业务查询高频字段,保证查询能精准路由到单个分片。写入分散,避免热点分片。常见坑:用自增字段、时间戳做分片键:新数据全部写入最后一个分片,造成分片热点,其他分片闲置。分片键基数太小:数据集中在少数分片,失去分片意义。查询不带分片键:变成广播查询,所有分片都要扫描,性能极差。四、事务、锁与底层原理篇(进阶)16.MongoDB的锁机制是什么?和MySQL有什么区别?答案:MongoDB3.2之后默认是文档级锁,粒度极细。区别:MySQL是行级锁+表级锁,InnoDB基于索引加行锁,无索引会降级表锁。MongoDB直接锁定单条文档,修改不同文档完全不冲突,并发能力远高于MySQL。注意:批量更新、批量删除如果未走索引,会升级为集合级锁,阻塞整个集合读写。17.MongoDB事务支持情况?使用限制?答案:4.0版本:支持单副本集事务。4.2版本:支持分片集群分布式事务。事务限制:事务内操作数据量有限制,不能处理超大批量数据。事务超时时间较短,不支持长事务。事务性能开销大,非必要不使用。不支持跨数据库事务。实战建议:简单一致性场景用唯一索引、原子操作替代事务,核心金融场景谨慎使用。18.MongoDB数据同步原理是什么?延迟怎么产生的?答案:核心依赖Oplog日志,Oplog是主节点的操作日志,记录所有增删改操作。同步流程:主节点执行写入,同时记录操作到Oplog。从节点实时拉取主节点Oplog。从节点重放日志,同步数据。同步延迟原因:主节点写入压力大,Oplog生成速度大于从节点消费速度。从节点机器配置低、内存不足、磁盘IO瓶颈。网络带宽、网络延迟问题。19.什么是Oplog?Oplog日志溢出会有什么问题?答案:Oplog是固定大小的循环日志,只存储近期操作记录,旧日志会被新日志覆盖。如果主节点写入量极大,从节点同步延迟太久,旧的Oplog被覆盖,从节点就会丢失同步位点,无法继续增量同步,只能全量重同步数据,严重影响业务。优化:生产环境需要合理调大Oplog容量,适配业务写入峰值。五、实战踩坑与优化总结(面试压轴)20.项目中MongoDB常见的性能坑有哪些?怎么解决?答案:无索引查询、批量操作不走索引:导致全表扫描、锁升级。解决:核心查询字段必建索引,禁止无索引批量更新删除。深度skip分页:越翻页越慢。解决:游标分页替代skip分页。分片键选择不当导致数据热点、数据倾斜:解决:更换高离散、读写均匀的分片键。从节点同步延迟大:导致读写分离读到旧数据。解决:优化机器配置、扩容带宽、调大Oplog。索引过多:写入性能极差。解决:精简无用索引,只保留高频查询索引。大文档存储、嵌套过深:查询解析慢、内存占用高。解决:拆分大文档

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论