当前位置:首页 » 操作系统 » 数据库优化面试题

数据库优化面试题

发布时间: 2025-10-13 14:16:46

Ⅰ 史上最全Redis面试题,让面试官问无可问(附答案)

Redis高性能缓存数据库


1、什么是 Redis?简述它的优缺点?


Redis 是 Remote Dictionary.Server 的简写,是一种纯内存的 Key-Value 类型数据库,性能极高,每秒可处理超过 10 万次读写操作。其主要优点包括:极高的性能、支持多种数据结构、数据持久化、内存数据集大小限制、数据淘汰策略等。缺点是数据库容量受物理内存限制,不适于海量数据的高性能读写。


2、Redis 与 memcached 相比有哪些优势?


Redis 在数据类型支持上更加丰富,除了基本的键值对存储,还支持列表、集合、排序集合等复杂数据结构。同时,Redis 提供持久化功能,可以将内存中的数据保存到磁盘,防止数据丢失。


3、Redis 支持哪几种数据类型?


Redis 支持 String、List、Set、Sorted Set、Hashes 等数据类型。


4、Redis 主要消耗什么物理资源?


Redis 主要消耗内存资源。


5、Redis 有哪几种数据淘汰策略?


Redis 提供了多种数据淘汰策略,包括 LFU(Least Frequently Used)、LRU(Least Recently Used)、TTL(Time To Live)等。


6、Redis 官方为什么不提供 Windows 版本?


Redis 因为 Linux 版本稳定且用户量大,无需特别开发 Windows 版本,以免引入兼容性问题。


7、一个字符串类型的值能存储最大容量是多少?


一个字符串类型的值最大可存储 512M。


8、为什么 Redis 需要把所有数据放到内存中?


为了实现快速读写,Redis 将数据加载到内存中,并通过异步方式将数据持久化到磁盘,以保持数据的持久性。


9、Redis 集群方案应该怎么做?都有哪些方案?


Redis 集群方案包括主从复制、哨兵模式、集群模式等。


10、Redis 集群方案什么情况下会导致整个集群不可用?


如果节点出现故障,导致集群缺少某个槽范围,则整个集群可能会变得不可用。


11、Mysql 里有 2000w 数据,redis 中只存 20w 的数据,如何保证 redis 中的数据都是热点数据?


当数据集过大时,Redis 会执行数据淘汰策略,保证存储的都是热点数据。


12、Redis 有哪些适合的场景?


适合会话缓存、全页缓存、队列、排行榜/计数器、发布/订阅等。


13、Redis 支持的 java 客户端都有哪些?官方推荐用哪个?


支持 Redisson、Jedis、lettuce 等客户端,官方推荐使用 Redisson。


14、Redis 和 Redisson 有什么关系?


Redisson 是 Redis 的分布式和可扩展的 Java 数据结构实现。


15、Jedis 与 Redisson 对比有什么优缺点?


Jedis 是 Redis 的 Java 客户端,功能全面;Redisson 侧重于分布式和可扩展的数据结构,功能较为简单。


16、说说 Redis 哈希槽的概念?


Redis 集群使用哈希槽概念,将数据均匀分布在集群节点上。


17、Redis 集群的主从复制模型是怎样的?


Redis 集群使用主从复制模型,每个节点有 N-1 个复制节点。


18、Redis 集群会有写操作丢失吗?为什么?


Redis 并不能保证数据强一致性,特定条件下可能会丢失写操作。


19、Redis 集群之间是如何复制的?


Redis 集群复制采用异步方式。


20、Redis 集群最大节点个数是多少?


Redis 集群最大节点数为 16384 个。


21、Redis 集群如何选择数据库?


Redis 集群默认在 0 数据库。


22、Redis 中的管道有什么用?


管道允许一次性发送多个命令,提高效率。


23、怎么理解 Redis 事务?


Redis 事务将命令序列化并按顺序执行,不会被其他命令打断。


24、Redis 事务相关的命令有哪几个?


事务相关的命令包括 MULTI、EXEC、DISCARD、WATCH。


25、Redis key 的过期时间和永久有效分别怎么设置?


使用 EXPIRE 和 PERSIST 命令设置过期时间。


26、Redis 如何做内存优化?


使用散列表存储数据,减少内存消耗。


27、Redis 回收进程如何工作的?


Redis 检测内存使用情况,当超过限制时,根据策略回收内存。


28、加锁机制


Redis 提供多种加锁策略,如互斥锁、分布式锁等。


29、锁互斥机制


确保同一时间只有一个客户端操作数据。


30、watch dog 自动延期机制


监控 key 变化并自动延期锁。


31、可重入加锁机制


允许同一客户端多次获取同一锁。


32、释放锁机制


通过特定命令释放锁。


33、上述 Redis 分布式锁的缺点


可能存在死锁、性能问题等。


34、使用过 Redis 分布式锁么,它是怎么实现的?有什么缺点?


使用 setnx 和 expire 实现,缺点可能包括死锁和性能问题。


35、使用过 Redis 做异步队列么,你是怎么用的?有什么缺点?


使用 list 结构实现,缺点可能包括并发控制和性能问题。


36、什么是缓存穿透?如何避免?什么是缓存雪崩?何如避免?


缓存穿透和雪崩的解决策略包括缓存空结果、二级缓存和合理设置过期时间。


37、redis 和 memcached 什么区别?为什么高并发下有时单线程的 redis 比多线程的 memcached 效率要高?


区别包括数据类型支持、持久化和并发模型;单线程的 Redis 在高并发下效率高,因为避免了线程切换的开销。


38、使用 redis 如何设计分布式锁?说一下实现思路?使用 zk 可以吗?如何实现?这两种有什么区别?


实现分布式锁,Redis 或 ZooKeeper 可以,ZooKeeper 通过选举和监控实现,Redis 则通过互斥锁实现。


39、知道 redis 的持久化吗?底层如何实现的?有什么优点缺点?


Redis 持久化通过 RDB 和 AOF 方式实现,优点包括恢复数据速度快、缺点包括数据丢失风险。


40、缓存穿透、缓存击穿、缓存雪崩解决方案?


解决方案包括缓存空结果、二级缓存和合理设置过期时间。


41、在选择缓存时,什么时候选择 redis,什么时候选择 memcached?


选择 Redis 时考虑数据类型支持、持久化和并发模型,选择 Memcached 时考虑简单性和性能。


42、Redis 常见的性能问题和解决方案


性能问题包括内存管理、网络延迟等,解决方案包括优化内存使用、调整配置参数等。


43、Redis 的数据淘汰策略有哪些


包括 LFU、LRU、TTL 等。


44、Redis 当中有哪些数据结构


包括 String、List、Set、Sorted Set、Hashes。


45、使用 Redis 做过异步队列吗,是如何实现的


使用 list 结构实现,通过 rpush 生产消息和 lpop 消费消息。


46、Redis 如何实现延时队列


通过设定过期时间或使用定时任务实现。


面试题整理


收集了还有你不知道的其它面试题(springboot、mybatis、并发、java中高级面试总结等)

Ⅱ 面试题:oracle数据库优化

oracle数据库优化的话主要有以下几个方面(我接触过的,可能不全面):
1 查询语句的优化,这个主要是根据语句和数据库索引的情况,结合查询计划的分析结果,对性能较低的查询语句进行重写,在执行查询前执行表分析语句也可以算这里;
2 数据结构优化,这个包括根据实际的应用中业务逻辑,对数据库的结构进行重新设计,或者创建相关索引里提高查询效率;
3 数据库设置优化,这方面主要是调整数据库和数据结构的相关参数提高应用访问系统的效率;
4 存储结构优化,在数据量较大的情况下,可以考虑通过数据库的存储结构进行优化,比如对数据进行partition,将数据存储在磁盘阵列服务器上等。
我的经验有限,以上是部分建议

Ⅲ Oracle面试题(基础篇)

Oracle面试题(基础篇)

Oracle Database,又名Oracle RDBMS,或简称Oracle。是甲骨文公司的一款关系数据库管理系统。以下是关于Oracle面试题(基础篇),希望大家认真阅读!

1. Oracle跟SQL Server 2005的区别?

宏观上:

1). 最大的区别在于平台,oracle可以运行在不同的平台上,sql server只能运行在windows平台上,由于windows平台的稳定性和安全性影响了sql server的稳定性和安全性

2). oracle使用的脚本语言为PL-SQL,而sql server使用的脚本为T-SQL

微观上: 从数据类型,数据库的结构等等回答

2. 如何使用Oracle的游标?

1). oracle中的游标分为显示游标和隐式游标

2). 显示游标是用cursor...is命令定义的游标,它可以对查询语句(select)返回的多条记录进行处理;隐式游标是在执行插入 (insert)、删除(delete)、修改(update)和返回单条记录的查询(select)语句时由PL/SQL自动定义的。

3). 显式游标的操作:打开游标、操作游标、关闭游标;PL/SQL隐式地打开SQL游标,并在它内部处理SQL语句,然后关闭它

3. Oracle中function和procere的区别?

1). 可以理解函数是存储过程的一种

2). 函数可以没有参数,但是一定需要一个返回值,存储过程可以没有参数,不需要返回值

3). 函数return返回值没有返回参数模式,存储过程通过out参数返回值, 如果需要返回多个参数则建议使用存储过程

4). 在sql数据操纵语句中只能调用函数而不能调用存储过程

4. Oracle的导入导出有几种方式,有何区别?

1). 使用oracle工具 exp/imp

2). 使用plsql相关工具

方法1. 导入/导出的是二进制的数据, 2.plsql导入/导出的是sql语句的文本文件

5. Oracle中有哪几种文件?

数据文件(一般后缀为.dbf或者.ora),日志文件(后缀名.log),控制文件(后缀名为.ctl)

6. 怎样优化Oracle数据库,有几种方式?

个人理解,数据库性能最关键的因素在于IO,因为操作内存是快速的,但是读写磁盘是速度很慢的,优化数据库最关键的问题在于减少磁盘的IO,就个人理解应该分为物理的和逻辑的优化, 物理的是指oracle产品本身的一些优化,逻辑优化是指应用程序级别的优化

物理优化的一些原则:

1). Oracle的运行环境(网络,硬件等)

2). 使用合适的优化器

3). 合理配置oracle实例参数

4). 建立合适的索引(减少IO)

5). 将索引数据和表数据分开在不同的表空间上(降低IO冲突)

6). 建立表分区,将数据分别存储在不同的分区上(以空间换取时间,减少IO)

逻辑上优化:

1). 可以对表进行逻辑分割,如中国移动用户表,可以根据手机尾数分成10个表,这样对性能会有一定的作用

2). Sql语句使用占位符语句,并且开发时候必须按照规定编写sql语句(如全部大写,全部小写等)oracle解析语句后会放置到共享池中

如: select * from Emp where name=? 这个语句只会在共享池中有一条,而如果是字符串的话,那就根据不同名字存在不同的语句,所以占位符效率较好

3). 数据库不仅仅是一个存储数据的地方,同样是一个编程的地方,一些耗时的操作,可以通过存储过程等在用户较少的情况下执行,从而错开系统使用的高峰时间,提高数据库性能

4). 尽量不使用*号,如select * from Emp,因为要转化为具体的列名是要查数据字典,比较耗时

5). 选择有效的表名

对于多表连接查询,可能oracle的优化器并不会优化到这个程度, oracle 中多表查询是根据FROM字句从右到左的数据进行的,那么最好右边的表(也就是基础表)选择数据较少的表,这样排序更快速,如果有link表(多对多中间表),那么将link表放最右边作为基础表,在默认情况下oracle会自动优化,但是如果配置了优化器的情况下,可能不会自动优化,所以平时最好能按照这个方式编写sql

6). Where字句 规则

Oracle 中Where字句时从右往左处理的,表之间的连接写在其他条件之前,能过滤掉非常多的数据的条件,放在where的末尾, 另外!=符号比较的列将不使用索引,列经过了计算(如变大写等)不会使用索引(需要建立起函数), is null、is not null等优化器不会使用索引

7). 使用Exits Not Exits 替代 In Not in

8). 合理使用事务,合理设置事务隔离性

数据库的数据操作比较消耗数据库资源的,尽量使用批量处理,以降低事务操作次数

7. Oracle中字符串用什么符号链接?

Oracle中使用 || 这个符号连接字符串 如 ‘abc’ || ‘d’

8. Oracle分区是怎样优化数据库的`?

Oracle的分区可以分为:列表分区、范围分区、散列分区、复合分区。

1). 增强可用性:如果表的一个分区由于系统故障而不能使用,表的其余好的分区仍可以使用;

2). 减少关闭时间:如果系统故障只影响表的一部份分区,那么只有这部份分区需要修复,可能比整个大表修复花的时间更少;

3). 维护轻松:如果需要得建表,独产管理每个公区比管理单个大表要轻松得多;

4). 均衡I/O:可以把表的不同分区分配到不同的磁盘来平衡I/O改善性能;

5). 改善性能:对大表的查询、增加、修改等操作可以分解到表的不同分区来并行执行,可使运行速度更快

6). 分区对用户透明,最终用户感觉不到分区的存在。

9. Oracle是怎样分页的?

Oracle中使用rownum来进行分页, 这个是效率最好的分页方法,hibernate也是使用rownum来进行oralce分页的

select * from

( select rownum r,a from tabName where rownum <= 20 )

where r > 10

10. Oralce怎样存储文件,能够存储哪些文件?

Oracle 能存储 clob、nclob、 blob、 bfile

Clob 可变长度的字符型数据,也就是其他数据库中提到的文本型数据类型

Nclob 可变字符类型的数据,不过其存储的是Unicode字符集的字符数据

Blob 可变长度的二进制数据

Bfile 数据库外面存储的可变二进制数据

11. Oracle中使用了索引的列,对该列进行where条件查询、分组、排序、使用聚集函数,哪些用到了索引?

均会使用索引, 值得注意的是复合索引(如在列A和列B上建立的索引)可能会有不同情况

12. 数据库怎样实现每隔30分钟备份一次?

通过操作系统的定时任务调用脚本导出数据库

13. Oracle中where条件查询和排序的性能比较?

Order by使用索引的条件极为严格,只有满足如下情况才可以使用索引,

1). order by中的列必须包含相同的索引并且索引顺序和排序顺序一致

2). 不能有null值的列

所以排序的性能往往并不高,所以建议尽量避免order by

14. 解释冷备份和热备份的不同点以及各自的优点?

冷备份发生在数据库已经正常关闭的情况下,将关键性文件拷贝到另外位置的一种说法

热备份是在数据库运行的情况下,采用归档方式备份数据的方法

冷备的优缺点:

1).是非常快速的备份方法(只需拷贝文件)

2).容易归档(简单拷贝即可)

3).容易恢复到某个时间点上(只需将文件再拷贝回去)

4).能与归档方法相结合,作数据库“最新状态”的恢复。

5).低度维护,高度安全。

冷备份不足:

1).单独使用时,只能提供到“某一时间点上”的恢复。

2).在实施备份的全过程中,数据库必须要作备份而不能作其它工作。也就是说,在冷备份过程中,数据库必须是关闭状态。

3).若磁盘空间有限,只能拷贝到磁带等其它外部存储设备上,速度会很慢。

4).不能按表或按用户恢复。

热备的优缺点

1).可在表空间或数据文件级备份,备份时间短。

2).备份时数据库仍可使用。

3).可达到秒级恢复(恢复到某一时间点上)。

4).可对几乎所有数据库实体作恢复。

5).恢复是快速的,在大多数情况下在数据库仍工作时恢复。

热备份的不足是:

1).不能出错,否则后果严重。

2).若热备份不成功,所得结果不可用于时间点的恢复。

3).因难于维护,所以要特别仔细小心,不允许“以失败而告终”。

15. 解释data block , extent 和 segment的区别?

data block 数据块,是oracle最小的逻辑单位,通常oracle从磁盘读写的就是块

extent 区,是由若干个相邻的block组成

segment段,是有一组区组成

tablespace表空间,数据库中数据逻辑存储的地方,一个tablespace可以包含多个数据文件

;
热点内容
浪潮机架式服务器怎么搭建 发布:2025-10-13 17:10:30 浏览:943
c语言plot 发布:2025-10-13 17:10:26 浏览:615
简述常用存储介质及各自的特点 发布:2025-10-13 17:04:14 浏览:399
更大的数据库 发布:2025-10-13 16:57:54 浏览:588
c语言linux文件夹 发布:2025-10-13 16:33:59 浏览:353
天津和悦会密码是多少 发布:2025-10-13 16:28:48 浏览:351
android的屏幕适配 发布:2025-10-13 16:27:18 浏览:458
脚本试用时间 发布:2025-10-13 16:09:34 浏览:13
苹果通讯录怎么导入安卓手机 发布:2025-10-13 16:06:18 浏览:435
ftp教程下载 发布:2025-10-13 16:00:00 浏览:54