本期主要是一些原理性和实践类问题,如果你有使用数据库的相关经历,面试官大概率会深入问下面这些问题,回答上来是加分项!
小编提醒:理解第一,不要死记硬背哈!可以根据面试题来展开学习相关知识点,会让你进步得更快。
关系型数据库和非关系型数据库的区别?
关系型数据库以表格形式存储数据,遵循严格规则,便于处理结构化数据的复杂查询;非关系型数据库更灵活,适于存储半结构化和非结构化数据,例如文档、图像。
扩展问题-关系型数据库和非关系型数据库你知道的有哪些?
典型的关系型数据库包括MySQL, PostgreSQL, Oracle, SQL Server和SQLite。
非关系型数据库的例子有MongoDB(文档型数据库)、Redis(键值存储)、Cassandra(列族存储)、Neo4j(图形数据库)等。
外键是什么?为什么大公司有时候不建议使用外键?
外键是一个表中的字段,它是另一个表的主键的引用,用于保持数据之间的关联性和一致性。使用外键可以避免数据孤岛,确保数据的参照完整性。
大公司有时会建议不使用外键,主要是出于以下几个原因:
1. 性能考虑:外键约束会在数据插入、更新时增加额外的检查,可能会影响数据库的性能。
2. 拓展性和灵活性:随着数据量的增大,数据库可能需要拆分或者分布式存储,外键会限制数据库的拆分策略,使拓展变得困难。
3. 应用逻辑控制:一些公司倾向于在应用层实现数据的完整性和连贯性,而不是依赖数据库的外键。
扩展问题-有哪些替代外键的方法?
1. 应用层保证数据的参照完整性:通过代码逻辑来确保在插入和删除数据时满足外键约束。
2. 使用缓存来加速数据查找:例如,将一些频繁访问的关联信息保存在缓存中来减少数据库的压力。
3. 数据同步机制:通过消息队列等技术手段,让不同的数据库实例在数据更新时保持一致性。
4. 使用服务层来集中处理数据关系:建立一个服务层来处理不同数据源之间的业务逻辑,而不是直接在数据库层面建立关联。
5. 确保一致性的分布式事务:虽然复杂度高,但可以利用两阶段提交协议等机制来保持跨数据库的数据一致性。
这些方法的选择取决于具体的系统需求和预期的性能指标。
数据库的事务有什么用?什么时候应该使用事务,什么时候不该使用事务?
事务是将多条语句作为一个整体进行操作的功能,确保数据一致性和完整性。
应在需要确保数据操作完整性时使用,例如对多张表的操作必须同时成功或失败。在单条语句或不要求强一致性的操作中可不使用事务。
数据库索引有什么用?什么是联合索引?
索引类似于书籍的目录,可以快速定位到需要查询的数据,大幅提高查询速度,特别是在大量数据的场景下。联合索引是在两个或更多的列上创建的索引。假设有一个用户表,包含了first_name和last_name两列,如果你需要经常查询某个人的全名,你可以创建一个联合索引包括这两列,这样在查询时能更快的找到具体的数据记录。
扩展问题-用mysql创建联合索引的语句是什么?
CREATE INDEX idx_name ON employees(lastname, firstname);
主键适合用自定义ID还是自动ID?
自动ID(通常指自增ID)的好处是简单且能保证唯一性,适用于不需要业务逻辑的主键;而自定义ID可以根据业务需求设定,例如UUID或根据某种逻辑生成的ID,它可以在分布式系统中避免冲突。
总的来说,如果没有特殊业务要求,使用自动ID比较方便和高效。但如果需要全局唯一性或有特别的业务逻辑,自定义ID则更加适合。
索引设置得越多越好吗?索引的优缺点是什么?
索引并不是“越多越好”。每个索引都需要占用一定的存储空间,同时在插入和更新数据时,索引也需要进行更新,这会影响性能。过多的索引还可能导致优化器选择不当。因此,应根据实际情况选择合适的索引。
索引的优点主要有:1.提高查询效率。2. 在有些情况下,索引能够提高数据的聚集程度,减少IO操作。3. 索引可以在查询中使用优化的排序和分组操作。
索引的缺点主要有:1.索引需要占用物理和逻辑存储空间。2. 更新表的操作(如:INSERT、UPDATE、DELETE)会导致索引的更新,进而降低更新性能。3.索引可能会导致优化器选择不当,反而影响查询性能。
为什么会造成数据库死锁?怎么解决?
数据库死锁通常发生在以下情况:
1.多个事务尝试以不同的顺序来锁定资源。
2.有事务在持有一些资源的同时,企图锁定其他已被其他事务锁定的资源。
解决数据库死锁的方法包括:
1.超时和重试机制:设置超时时间,当事务等待超过这个时间还未能获得锁时,自动回滚并重试。
2.死锁检测与救济:数据库系统会定期检测是否有死锁发生,并自动选择一个或多个事务进行回滚来打破死锁。
3.顺序加锁:确保所有事务以相同的顺序请求资源。
4.减少锁粒度:使用更细的锁粒度可以降低死锁的几率。
5.优化事务:减少事务持有锁的时间,并尽可能减少事务所需的锁数量。
数据库设计的三大范式是什么?
数据库设计的三大范式包括:
1.第一范式(1NF):确保每个列的原子性,即表中的每个字段都是不可再分的数据项。
2.第二范式(2NF):在第一范式的基础上,要求表中的所有数据都与该表的主键有完全依赖关系,即没有部分依赖。这通常要求每个表只描述一件事情。
3.第三范式(3NF):在第二范式的基础上,消除非主键列对主键的传递依赖,确保每列都与主键直接相关,而不是通过另一列间接相关。
遵循这三个范式,通常可以得到既有结构性又避免了重复的数据库设计。
为什么要进行分表分库?
进行分表分库的原因主要包括以下几点:
1.提升性能:当一个数据库中的数据量非常巨大时,数据的插入、查询、更新等操作速度会变得很慢。通过分表或分库,可以将数据分散存储到多个表或数据库中,这样可以减轻单个数据库的压力,提高处理速度和效率。
2.容易维护:随着数据量的增加,数据库的备份和恢复需要的时间也会增加,这对日常运维造成挑战。分表分库后,可以单独维护每一个子表或子库,降低维护复杂度和风险。
3.数据安全:通过分表分库,可以将敏感数据和非敏感数据分开存储,增强数据的安全性。
4.扩展性:随着业务的发展,数据量和访问量会不断增加。分表分库可以使系统更容易进行水平扩展,即通过增加更多的服务器来承载更大的访问量和数据量,满足业务发展的需求。
分表分库是处理大规模数据和高并发访问的一种有效手段,能够帮助提高数据库操作的效率,保证系统的稳定性和可扩展性。
总结:
感谢每一个认真阅读我文章的人!!!
作为一位过来人也是希望大家少走一些弯路,如果你不想再体验一次学习时找不到资料,没人解答问题,坚持几天便放弃的感受的话,在这里我给大家分享一些自动化测试的学习资源,希望能给你前进的路上带来帮助。
软件测试面试文档
我们学习必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。
视频文档获取方式:
这份文档和视频资料,对于想从事【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!以上均可以分享,点下方小卡片即可自行领取。