版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Java数据库高频面试题及详细答案(实战版)一、数据库基础面试题1、关系型数据库和非关系型数据库的区别?常用场景?参考答案:关系型数据库(MySQL、Oracle、SQLServer),核心是基于二维表结构存储,严格遵循事务ACID特性,支持SQL语句复杂查询,数据一致性、安全性高。缺点是高并发、海量数据场景下读写性能有瓶颈,扩展难度较大,多为垂直扩容。非关系型数据库(Redis、MongoDB、ES),无固定表结构,存储格式灵活(键值对、文档、索引等),不强制支持事务,读写速度快,天然支持水平扩容。缺点是复杂多表关联查询能力弱,数据一致性相对较差。常用场景:关系型数据库:核心业务数据存储,比如用户信息、订单、支付数据,对数据一致性、准确性要求极高的场景。非关系型数据库:缓存数据、海量日志、商品详情、热搜数据、临时统计数据,高并发读写、低一致性要求的场景。2、MySQL三大存储引擎区别?InnoDB和MyISAM核心差异参考答案:MySQL主流存储引擎为InnoDB、MyISAM、Memory,目前默认引擎为InnoDB。核心区别:1、事务支持:InnoDB支持事务、事务隔离级别;MyISAM不支持事务。2、锁机制:InnoDB支持行级锁、表级锁,默认行锁;MyISAM只支持表级锁。3、并发能力:InnoDB并发读写性能高;MyISAM写锁会阻塞所有读写,并发能力差。4、崩溃恢复:InnoDB有redo/undo日志,宕机可恢复数据;MyISAM崩溃易数据损坏、丢失。5、外键:InnoDB支持外键约束;MyISAM不支持。6、索引结构:两者均为B+树,InnoDB索引和数据绑定,MyISAM索引和数据分离存储。使用场景:绝大多数业务使用InnoDB;MyISAM仅适用于静态、极少修改、高频查询的场景(如历史日志表)。3、MySQL数据类型选型原则参考答案:1、优先选择占用空间小的类型,减少磁盘IO、提升查询效率:能用tinyint不用int,能用varchar(20)不用varchar(100)。2、字符串类型:固定长度字段用char(如手机号、身份证号),可变长度用varchar;超长文本、备注用text,禁止用varchar存储大文本。3、数值类型:无负数字段优先用无符号类型,节省空间;金额、精度要求高的数值用decimal,禁止用float、double(存在精度丢失)。4、时间类型:优先用datetime、timestamp,禁止用字符串存储时间,无法时间筛选、排序且占用空间大。5、主键字段:优先用自增int、bigint,避免用字符串、长UUID,降低索引占用空间。二、索引核心面试题(高频)1、什么是索引?索引的优缺点?参考答案:索引是数据库为数据表字段建立的有序数据结构,相当于书籍目录,用于快速定位数据,避免全表扫描。优点:1、大幅提升查询、筛选、排序、分组的效率,减少全表扫描。2、唯一索引可以保证字段数据唯一性。3、联合索引可覆盖查询,减少回表操作,提升性能。缺点:1、占用额外磁盘空间,索引数据独立存储。2、降低增删改效率,数据表数据变更时,对应索引需要同步更新维护。3、索引不是越多越好,无效索引会增加数据库负担。2、MySQL索引分类及适用场景参考答案:1、主键索引:唯一且非空,一张表只能有一个,查询效率最高,InnoDB主键索引为聚簇索引。2、唯一索引:字段数据唯一、允许为空,适用于手机号、邮箱、账号等唯一字段。3、普通索引:最基础索引,无唯一性限制,适用于高频查询、筛选的普通字段。4、联合索引:多个字段组合建立的索引,遵循最左匹配原则,适用于多字段联合查询、排序场景。5、全文索引:用于长文本模糊查询,替代低效的like%%查询,适用于文章、内容详情字段。3、聚簇索引和非聚簇索引的区别参考答案:InnoDB中主键索引就是聚簇索引,是数据表的核心索引,一张表仅有一个聚簇索引。聚簇索引:索引的叶子节点直接存储整行完整数据,主键查询无需回表,速度最快。数据在磁盘上按照主键有序排列。非聚簇索引(二级索引):普通索引、唯一索引都属于此类,叶子节点仅存储索引字段值和主键值。查询数据时,先通过二级索引找到主键,再通过主键索引查询整行数据,这个过程叫做回表。核心总结:聚簇索引存整行数据,非聚簇索引存主键;主键查询无回表,普通索引查询大概率需要回表。4、联合索引最左匹配原则详解参考答案:联合索引遵循最左前缀匹配,查询条件必须匹配联合索引的最左侧字段,索引才会生效,跳过最左字段、中间字段断裂,索引都会失效。举例:建立联合索引(a,b,c)索引生效场景:wherea=?、wherea=?andb=?、wherea=?andb=?andc=?索引失效场景:whereb=?、wherec=?、whereb=?andc=?补充:查询条件中,等值查询在前、范围查询在后,索引生效;范围查询后的字段索引全部失效。例如(a,b,c),wherea=?andb>?andc=?,c字段索引失效。5、什么是覆盖索引?作用是什么?参考答案:覆盖索引指查询所需的所有字段,全部包含在建立的索引中,数据库无需回表查询整行数据,直接通过二级索引即可获取全部查询结果。作用:避免回表操作,大幅减少磁盘IO,极大提升查询性能,是日常优化中最常用的索引优化手段。举例:索引建立(id,name),查询语句selectnamefromuserwhereid=?,直接命中覆盖索引,无需回表。6、常见索引失效场景(面试必背)参考答案:1、违背联合索引最左匹配原则。2、索引字段使用函数、运算、类型转换:如wheredate(create_time)=?、whereage+1=?。3、like以%开头:like'%张三'、like'%张三%'索引失效,like'张三%'索引生效。4、or连接查询,前后字段有一个无索引,整体索引失效。5、字段类型隐式转换:字符串字段传数字、数字字段传字符串。6、MySQL判断全表扫描比索引查询更快时,会自动放弃索引(数据量少、筛选数据占比过高)。7、notin、notexists、isnull、isnotnull大概率导致索引失效。三、事务与隔离级别面试题1、事务的ACID四大特性参考答案:1、原子性(Atomicity):事务是最小执行单元,要么全部执行成功,要么全部回表失败,无中间状态。2、一致性(Consistency):事务执行前后,数据库数据完整性、约束规则保持一致,不会出现数据错乱。3、隔离性(Isolation):多个事务并发执行时,相互隔离、互不干扰,由事务隔离级别控制隔离程度。4、持久性(Durability):事务提交成功后,数据永久写入数据库,即使服务器宕机、重启,数据也不会丢失。2、并发事务带来的三大问题参考答案:1、脏读:一个事务读取到另一个事务未提交的修改数据,后续对方回滚,读取的数据无效、错误。2、不可重复读:同一个事务内,多次读取同一条数据,期间被其他事务修改并提交,导致前后查询结果不一致。3、幻读:同一个事务内,多次范围查询,期间其他事务新增/删除数据,导致前后查询数据条数不一致。区分重点:不可重复读侧重数据修改,幻读侧重数据新增/删除。3、MySQL四大事务隔离级别及解决的问题参考答案:MySQL默认隔离级别:可重复读(RR)1、读未提交:最低级别,允许读取未提交数据,脏读、不可重复读、幻读全部存在,基本不使用。2、读已提交(RC):只能读取已提交数据,解决脏读,存在不可重复读、幻读。3、可重复读(RR):保证同一事务多次读取结果一致,解决脏读、不可重复读,存在幻读(InnoDB通过间隙锁极大减少幻读场景)。4、串行化:最高级别,事务串行执行,完全隔离,解决所有并发问题,但并发性能极差,几乎不用。4、InnoDB如何解决幻读问题?参考答案:InnoDB在可重复读隔离级别下,通过MVCC多版本并发控制+间隙锁配合解决大部分幻读问题。1、MVCC:普通select查询为快照读,读取事务启动时的数据快照,看不到其他事务新增数据,避免幻读。2、间隙锁:update、delete等当前读操作,会加间隙锁,锁定查询范围内的空白区间,禁止其他事务新增数据,杜绝幻读。严格来说,RR级别无法百分百杜绝幻读,但业务场景下基本可以规避幻读问题。四、数据库锁机制面试题1、行锁和表锁的区别及适用场景参考答案:表级锁:锁定整张数据表,加锁速度快、开销小,无死锁。但锁粒度大,并发能力低,写锁会阻塞所有读写操作。MyISAM默认表锁。适用于批量更新、极少并发的场景。行级锁:仅锁定操作的单行数据,锁粒度小,并发能力强,不同行数据互不阻塞。加锁开销大、速度慢,会产生死锁。InnoDB默认行锁。适用于高并发、精准单行操作的业务场景。重点:InnoDB行锁是基于索引生效,如果查询条件无索引,行锁会退化为表锁。2、什么是意向锁?作用是什么?参考答案:意向锁是InnoDB为了快速判断表锁和行锁是否冲突,引入的辅助锁,分为意向共享锁、意向排他锁。当事务给某行加行锁时,会先给数据表加对应意向锁,告知其他事务:本表已有行级锁,请勿直接加表锁。作用:避免遍历全表行锁判断锁冲突,提升锁冲突检测效率,优化数据库并发性能。3、死锁产生的条件及解决办法参考答案:死锁四大必要条件:1、互斥条件:资源同一时间只能被一个事务占用。2、请求与保持:事务持有已有锁,同时请求新的锁资源。3、不可剥夺:已持有的锁不能被其他事务强制抢占。4、循环等待:多个事务互相持有对方需要的锁,形成闭环等待。解决/避免方案:1、统一数据库表、行的操作顺序,杜绝循环等待。2、缩短事务执行时间,尽早提交事务,释放锁资源。3、避免事务中嵌套多个复杂增删改操作。4、MySQL自带死锁检测机制,会自动回滚代价最小的事务,解除死锁。五、SQL优化高频面试题1、日常SQL优化通用思路参考答案:1、优先优化索引,避免索引失效,合理建立联合索引、覆盖索引。2、禁止使用select*,只查询业务需要的字段,减少数据传输和IO消耗。3、避免大表模糊查询like%%、避免in、or滥用,可替换为exists、join。4、分页查询优化,大分页避免limit10000,10,采用主键偏移分页。5、避免在索引字段使用函数、运算,防止索引失效。6、拆分复杂大SQL,避免多表联查、子查询嵌套过多,分批次查询数据。7、开启慢查询日志,定位慢SQL,针对性优化。2、limit大分页问题及优化方案参考答案:问题:limit100000,10会先查询前100010条数据,丢弃前100000条,返回后10条,数据量越大,查询效率越低。优化方案:1、主键偏移查询(最优):select*fromuserwhereid>100000limit10,利用主键索引快速定位,无需扫描前置数据。2、延迟关联:先通过索引分页获取主键,再关联查询完整数据,减少回表开销。3、业务层面优化:禁止深度分页,限制最大分页页数,或采用滚动分页替代页码分页。3、join联表查询优化要点参考答案:1、小表驱动大表:小表作为驱动表,大表作为被驱动表,减少循环匹配次数。2、联表字段必须建立索引,on条件字段优先建索引。3、避免三张及以上大表联查,拆分SQL分步查询。4、优先使用innerjoin,避免leftjoin、rightjoin全表匹配。六、MySQL底层与高级面试题1、B+树索引的优势?为什么不用二叉树、B树、哈希?参考答案:MySQL索引选用B+树,核心是适配磁盘IO特性,减少磁盘读写次数。1、二叉树:树高过高,大数据量下层级太深,磁盘IO次数多,查询效率低,且容易失衡。2、B树:非叶子节点也存储数据,单节点存储索引数量少,树高较高;无法支持区间快速查询。3、哈希索引:等值查询快,但不支持排序、区间查询、模糊查询,哈希冲突会降低性能。B+树核心优势:1、所有数据都在叶子节点,非叶子节点仅存索引,单节点存储索引更多,树高极低(通常2-3层),IO次数少。2、叶子节点有序双向链表,完美支持范围查询、排序、分页查询。3、查询性能稳定,所有数据查询层级一致。2、MVCC多版本并发控制原理参考答案:MVCC是InnoDB实现事务隔离、提升并发性能的核心机制,无锁实现读写并发,读不加锁、写不阻塞读。核心依赖三个字段:隐藏主键、事务ID、undolog版本链。1、每条数据修改时,都会生成旧数据版本存入undolog,形成数据版本链。2、每个事务有独立事务ID,查询时根据隔离级别,读取当前事务可见的数据版本。3、快照读读取历史版本数据,无需加锁,实现高并发读写。应用场景:普通select查询都是快照读,基于MVCC实现无锁查询;update、delete为当前读,需要加锁。3、redolog和undolog的作用与区别参考答案:redolog(重做日志):用于保证事务持久性。事务执行时,先写redolog,再写磁盘数据。数据库宕机重启后,通过redolog重放未落地的数据,恢复数据,防止数据丢失。undolog(回滚日志):用于保证事务原子性和MVCC。事务修改数据前,记录原始数据到undolog,事务回滚时,通过undolog恢复原始数据;同时为MVCC提供历史数据版本。核心区别:redolog保证已提交数据不丢失,undolog保证事务可回滚、支持多版本查询。4、MySQL主从复制原理参考答案:主从复制核心是主库写入数据,从库同步主库数据,实现读写分离、数据备份。复制流程:1
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- GB/T 19691-2026地理标志产品质量要求狗牯脑茶
- T/ZJSEE 0027-2024氢储能电站运行维护安全导则
- T/ISEAA 009-2024信息安全技术 网络安全等级保护区块链安全测评扩展要求
- T/CMEAS 081-2026医疗机构药品集中带量采购管理规范
- T/CASME 2090-2025陆上风力发电场土地利用效率评估规范
- T/CSHE 0004-2022水库温室气体净排放量评估技术导则
- GB/T 19866-2026焊接工艺规程及评定的一般原则
- AI在华文教育中的应用
- PHP企业面试笔试真题(含详细答案解析)
- 制鞋车间胶粘剂防毒通风方案
- GB/T 19866-2026焊接工艺规程及评定的一般原则
- GB/T 48666-2026电子病历版式文档技术要求
- 2026年旋挖钻机操作手安全教育试卷及答案
- 2026年体育用品设备出租行业市场深度调研报告及未来五至十年技术路径与产业化前景
- 医学生基础医学重症肌无力查房课件
- 小小科学家《生物》模拟试卷(附答案)
- 2026-2031年中国降钙素行业市场调查研究及发展前景预测报告
- 计量管理基础知识课件
- 人教版九年级上册数学《习题29.2》教学课件(新教材)
- 消能减震阻尼器安装施工方案及技术措施
- 3.4 G71指令讲解及应用
评论
0/150
提交评论