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

下载本文档

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

文档简介

MongoDB高频面试题及详细答案(实战版)一、基础概念篇(初级必问)1、简单说下MongoDB是什么?核心特点有哪些?MongoDB是一款开源的、基于分布式文件存储的非关系型数据库(NoSQL),采用文档型存储结构,是目前企业最常用的NoSQL数据库之一。核心实战特点:文档存储:数据以BSON文档(类似JSON)存储,单条数据结构灵活,无需提前定义字段,适配业务频繁迭代的场景。高扩展性:支持横向分片扩容,数据量和并发量上涨时,可通过新增节点提升性能,无需大幅改造业务。高读写性能:针对海量数据、高并发读写场景优化,内存映射机制让热点数据查询速度极快。schema松散:同一集合下的文档可以拥有不同字段,不用像MySQL一样固定表结构,适配多变业务。支持副本集:自带主从复制、故障自动切换,保障数据高可用,减少宕机风险。2、MongoDB中数据库、集合、文档的关系是什么?和MySQL如何对应?三者是层层包含的关系:数据库包含多个集合,集合包含多个文档。和MySQL对应关系(面试核心):MongoDB数据库➜MySQL数据库MongoDB集合(collection)➜MySQL数据表(table)MongoDB文档(document)➜MySQL数据表中的一行数据(row)MongoDB字段(field)➜MySQL数据表的列(column)核心区别:集合没有固定结构,文档字段可动态增减;数据表结构固定,必须提前定义字段类型。3、什么是BSON?和JSON有什么区别?BSON是MongoDB专用的二进制JSON,是MongoDB数据存储和传输的基础格式。和JSON的核心区别:BSON是二进制格式,解析速度更快、支持数据校验;JSON是文本格式,解析效率低。BSON支持更多数据类型:日期、布尔、浮点、整数、ObjectId、二进制数据等;JSON仅支持字符串、数字、布尔、数组、对象、null。BSON带有字段长度信息,方便数据库快速索引和遍历;JSON无固定长度标识。4、MongoDB的ObjectId由什么组成?为什么用它做主键?ObjectId是MongoDB文档默认的_id主键,12字节十六进制字符串,结构固定:前4字节:时间戳(秒级)中间3字节:机器唯一标识(网卡MAC哈希)后2字节:进程ID最后3字节:自增计数器(保证同一秒、同一机器、同一进程下唯一)使用优势:全局唯一,分布式场景下无需担心主键冲突,无需手动生成主键。自带时间戳,可直接通过_id解析文档创建时间,无需额外存创建时间字段。有序递增,索引写入性能优于随机字符串主键。二、CRUD操作篇(实操面试)1、MongoDB插入数据insert、insertOne、insertMany的区别?insertOne:3.2版本后新增,单次只能插入单条文档,返回结果明确,适合单条数据写入,企业主流用法。insertMany:单次可插入多条文档,支持批量写入,效率高,适合批量同步数据场景。insert:旧版本通用方法,既可以插单条也可以插多条,返回结果简陋,新版本项目中基本不再使用。补充:批量插入时,默认遇到错误会终止写入,可配置ordered:false实现跳过错误、继续写入剩余数据。2、updateOne、updateMany、replaceOne核心区别?updateOne:只修改匹配到的第一条文档,日常单条数据更新首选,安全性高,不会误改批量数据。updateMany:修改所有匹配条件的文档,适合批量更新场景,使用时必须严格校验查询条件,防止全表更新。replaceOne:替换整条文档,会覆盖原有所有字段,只保留_id,仅适合整行数据替换场景,慎用。常用更新操作符:$set(修改/新增字段)、$inc(数值增减)、$unset(删除字段)、$push(数组新增元素)。3、MongoDB如何实现分页查询?优缺点是什么?基础分页通过skip()、limit()、sort()组合实现:db.xxx.find(条件).sort({_id:1}).skip(页码*条数).limit(每页条数)优缺点:优点:语法简单,适配简单的后台分页、少量数据分页场景。缺点:深分页性能极差,skip会遍历跳过所有前置数据,页码越大,查询速度越慢,千万级数据分页基本不可用。优化方案:游标分页(条件分页),通过上一页最后一条数据的_id作为查询条件,替代skip,适合海量数据分页。三、索引篇(高频重点面试题)1、MongoDB有哪些常用索引类型?各自适用场景?单字段索引:最基础索引,针对单个字段建立,适用于单字段查询、排序场景,如根据用户id查询数据。复合索引:多个字段组合索引,适用于多条件查询、查询+排序场景,遵循最左前缀原则。唯一索引:保证字段值全局唯一,可重复null,适用于手机号、用户名、唯一订单号等去重场景。稀疏索引:只对包含该字段的文档建立索引,忽略无该字段的文档,节省索引空间,适配字段缺失较多的场景。文本索引:支持全文模糊检索,适用于文章标题、内容搜索场景。地理空间索引:用于地理位置查询,如附近的门店、用户定位筛选。2、什么是索引最左前缀原则?复合索引如何设计?复合索引的生效规则:查询条件必须包含索引的最左侧首个字段,索引才会生效,否则索引失效。举例:建立复合索引{a:1,b:1,c:1}生效查询:a、a+b、a+c、a+b+c失效查询:b、c、b+c复合索引设计原则:等值字段在前、范围字段在后、排序字段最后,优先区分度高的字段。3、MongoDB索引优缺点?什么场景不适合建索引?优点:大幅提升查询、排序、分组的效率,避免全集合扫描。缺点:占用磁盘和内存空间,索引数据会常驻内存提升效率,索引过多会占用大量内存。降低写入性能,新增、修改、删除数据时,需要同步更新索引,写入耗时增加。不适合建索引的场景:数据量极小的集合,全表扫描速度已经足够快,无需索引。字段区分度极低,如只有0、1两个值的状态字段,索引几乎无效果。写入频繁、查询极少的字段,索引维护成本远大于查询收益。4、如何判断MongoDB查询是否走索引?通过explain()方法分析执行计划,核心看返回字段:executionStats.executionType:IXSCAN:走索引扫描,查询正常。executionStats.executionType:COLLSCAN:全集合扫描,索引失效,需要优化。同时可查看索引命中、扫描文档数、耗时等参数,精准定位慢查询问题。四、高可用与集群篇(中高级必问)1、MongoDB副本集是什么?作用是什么?副本集是MongoDB实现高可用的核心架构,由1个主节点(Primary)、多个从节点(Secondary)、1个仲裁节点(Arbiter)组成。节点职责:主节点:负责所有读写请求,同步数据到从节点。从节点:实时同步主节点数据,不处理写请求,可分担读请求,主节点宕机后参与选举。仲裁节点:不存储业务数据,仅参与投票选举,负责选出新主节点,节省资源。核心作用:数据备份、故障自动切换、读写分离、高可用,避免单节点宕机导致服务不可用、数据丢失。2、副本集故障切换机制是什么?当主节点宕机、失联后,剩余从节点和仲裁节点会触发投票选举,票数最高的从节点升级为新主节点,整个过程秒级完成,业务无需手动切换。旧主节点恢复后,会自动降级为从节点,同步新主节点的数据,保证数据一致性。3、MongoDB分片集群是什么?适用场景?分片集群是MongoDB应对海量数据、超高并发的分布式扩容方案,将海量数据拆分到多个分片节点存储,分担单节点压力。分片集群三大核心组件:Shard(分片节点):真实存储业务数据的节点,每个分片可由副本集组成,保证高可用。Mongos(路由节点):业务接入入口,接收所有读写请求,根据分片规则转发到对应Shard,对业务透明。ConfigServer(配置节点):存储集群元数据,包含分片规则、数据分布、节点信息等。适用场景:数据量超单机存储上限、读写并发极高、需要无限横向扩容的业务(如日志、订单、用户行为数据)。4、分片键是什么?分片键选择有哪些禁忌?分片键是集合中用于数据拆分的字段,Mongos根据分片键的值将数据分配到不同分片节点。分片键禁忌(面试重点):禁止使用自增字段:会导致数据全部写入单个分片,出现热点分片,集群失去扩容意义。禁止区分度过低的字段:无法均匀拆分数据,导致分片数据分布不均。禁止频繁更新的字段:分片键一旦确定,无法修改,更新会导致数据迁移异常。优质分片键:哈希分散均匀、查询命中率高、数值稳定不常修改。五、事务与数据一致性篇1、MongoDB支持事务吗?有什么限制?MongoDB4.0版本支持单副本集事务,4.2版本支持分片集群事务,支持ACID特性,可实现多文档、多集合数据一致性操作。事务核心限制:事务超时时间默认60秒,超时未提交自动回滚。单次事务操作的数据量和操作数有限制,不适合超大批量数据事务。事务内不支持部分命令(如建索引、删集合等运维操作)。事务性能低于普通读写,非强一致性场景不建议滥用。2、MongoDB读写concern是什么?常用配置?读写concern是MongoDB的数据读写安全级别配置,用来平衡数据一致性和性能。写concern(数据写入确认级别):w:1:主节点写入成功即返回,性能最高,一致性一般。w:majority:写入多数节点成功才返回,一致性最高,防止宕机数据丢失,生产主流配置。读concern(数据读取级别):local:读取主节点最新数据,无延迟。secondary:从从节点读取数据,分担主节点压力,存在短暂数据延迟。majority:读取已同步到多数节点的数据,保证数据绝对可靠。六、性能优化与踩坑篇(实战压轴题)1、MongoDB常见性能瓶颈有哪些?如何优化?常见瓶颈及优化方案:慢查询过多:开启慢查询日志,通过explain分析执行计划,合理建索引、优化查询条件,避免全表扫描。深分页卡顿:舍弃skip分页,改用游标分页(基于_id条件查询)。读写压力集中:开启读写分离,读请求走从节点,写请求走主节点;海量数据做分片集群扩容。索引过多:清理无用、重复索引,减少写入性能损耗。内存不足:优化索引命中率,保证热点数据常驻内存,适当提升服务器内存配置。2、MongoDB数据冗余、字段设计有什么实战技巧?MongoDB不擅长多表关联查询,业务设计核心原则:适当冗余、减少关联。实战技巧:高频查询场景,可直接将关联数据冗余到主文档中,避免多次查询、联表查询。避免过深的嵌套文档,层级过多会降低查询和解析效率。冷热数据分离

温馨提示

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

评论

0/150

提交评论