腾讯云软件工程师面试问题收集记录-数据库
-
SQL是什么:结构化查询语言,是一种专门用于管理关系型数据库管理系统的编程语言
-
MySQL操作命令
-
数据库操作
- 登陆数据库:mysql -u 用户面 -p
- 创建数据库:CREATE DATABASE testdb;
-
-
SQLite操作命令
-
数据库操作
- 创建数据库:sqlite3 test.db
-
表的操作
- 创建表:CREATE TABLE students ( id INTEGER PRIMARY KEY, name TEXT NOT NULL, age INTEGER );
- 删除表:DROP TABLE students;
-
数据操作
- 插入数据:INSERT INTO students (id, name, age) VALUES (1, 'Alice', 20);
- 查询数据:SELECT * FROM students;
- 更新数据:UPDATE students SET age = 21 WHERE id = 1;
- 删除数据:DELETE FROM students WHERE id = 1;
-
-
SQL 注入
- 是一种常见的网络安全攻击手段,它利用应用程序对用户输入的不充分验证来影响数据库查询,从而达到非法获取、修改或删除数据的目的。
- 防御方式:参数化查询:确保用户输入被正确处理,不会被解释为SQL代码的一部分。
-
MySQL是什么:开源关系型数据库管理系统
-
MySQL两种引擎
- 引擎是指用于管理和处理数据的软件组件
- InnoDB:InnoDB数据完整性好,适合需要高度一致性和可靠性的应用。
- MyISAM:MyISAM在简单读取和写入操作上可能更快,尤其是在不涉及事务处理和外键约束的情况下。
-
MySQL的索引
-
索引本身是一种数据结构,而索引数据结构是实现索引的特定形式
-
索引的主要目的是提高查询效率。没有索引时,数据库可能需要进行全表扫描来找到匹配的数据
-
索引类型
- BTree索引:MySQL中最常见的索引类型
- 哈希索引:当查询需求主要是单条记录查询时
-
-
MySQL索引数据结构
- B+树:B+树的特点是所有数据都存储在叶子节点,并且叶子节点之间通过指针连接,形成了一个有序的链表
- 哈希结构:通过计算记录的哈希值来快速定位数据
-
MySQL组合索引:组合索引是指同时使用多列来创建的索引,是MySQL中一种常见的索引类型,它可以在多个列上创建以加速查询
-
MySQL的慢查询:执行时间超过设定阈值的SQL查询
-
Redis 是什么:一个开源的高性能键值对(key-value)数据库:“键”是用于唯一标识一条记录的标识符,“值”则是与该键关联的实际数据:在一个电话簿中人名就是健,号码就是值
-
Redis 的数据结构:字符串、列表、集合、哈希
-
redis 缓存穿透,击穿,雪崩:三种不同的缓存问题
- 缓存穿透:用户查询的数据在缓存中不存在,在数据库中也不存在
- 缓存击穿:恰好有大量的并发请求需要访问这个Key,因为缓存失效,这些请求会同时去数据库加载数据并回设到缓存,有可能瞬间把数据库压垮
- 缓存雪崩:指缓存中大量数据在同一时刻集中过期,导致所有查询都落在数据库上
-
Redis是阻塞IO还是非阻塞IO
- 非阻塞IO
- 允许Redis在等待数据传输完成时执行其他任务,从而实现了异步数据处理。
- 非阻塞IO是Redis能够实现高并发和高性能的关键因素之一
-
Redis 的内存淘汰策略
- 当内存使用超过配置限制时,采取一定的策略来淘汰数据,以保证服务的正常运行
- 返回错误不淘汰任何
- 淘汰最久未使用的
- 随机淘汰
-
Redis是多线程还是单线程的
- 处理客户端请求的核心部分是单线程的,网络IO操作时会使用多线程
-
Redis如何做到高并发的
- 基于内存操作:将所有数据存储在内存中,这样可以避免磁盘I/O的延迟,从而显著提高读写速度。
- 单线程模型:虽然单线程在处理多个请求时看似是限制因素,但因为Redis的操作几乎都是内存级别的,所以这个设计避免了多线程中的上下文切换开销
- I/O多路复用技术:非阻塞IO,在等待数据传输完成时执行其他任务,处理大量的并发连接
-
Redis为什么这么快
- 基于内存操作:将所有数据存储在内存中,这样可以避免磁盘I/O的延迟,从而显著提高读写速度。
- 单线程模型:虽然单线程在处理多个请求时看似是限制因素,但因为Redis的操作几乎都是内存级别的,所以这个设计避免了多线程中的上下文切换开销
- I/O多路复用技术:非阻塞IO,在等待数据传输完成时执行其他任务,提高处理效率
- 高效的数据结构:Redis的数据结构是为高速访问和处理优化的
-
Redis String最大可以保存多大的数据:512MB
-
Redis原子性的实现机制:Redis采用了单线程模型。在这种模型下,Redis可以确保在任意时刻只有一个命令被执行,因此不会出现多命令同时对数据进行修改的情况,从而保证了每个操作的原子性。
-
Redis主从复制:主从复制通过将一台Redis服务器(主节点)的数据复制到其他Redis服务器(从节点)来实现数据的冗余备份。这样,即使主节点发生故障,从节点仍然可以提供服务,从而实现高可用性。允许数据在多台服务器之间同步,确保即使一台服务器宕机,其他服务器也能继续提供服务
-
热点数据的定义是什么?
- 热数据:在一定时间内持续被频繁访问的数据
- 热点数据:短期内被频繁的访问的数据
-
什么时候用MySQL,什么时候用Redis
- 在需要快速访问频繁使用的热数据时使用Redis,而在需要持久化存储和处理复杂数据关系时使用MySQL。
-
事物的隔离级别
- 事务的隔离级别指的是数据库中并发事务之间的隔离程度,它决定了一个事务可能受其他并发事务影响的程度
- 读未提交:允许事务读取尚未提交的数据变更
- 读已提交:只允许事务读取已经提交的数据
- 可重复读
- 串行化
-
get、mget指令
-
GET指令从Redis数据库中查找并返回指定key的值
- 发送请求
- 查找
- 如果查到到会存储在输出缓冲区
- 返回给客户端
-
MGET指令则是一次性获取多个key的值
-