腾讯云软件工程师面试问题收集记录-数据库

  • 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的值

相关推荐
一行玩python4 分钟前
SQLAlchemy,ORM的Python标杆!
开发语言·数据库·python·oracle
我的K840917 分钟前
Flink整合Hudi及使用
linux·服务器·flink
MXsoft61824 分钟前
华为服务器(iBMC)硬件监控指标解读
大数据·运维·数据库
19004327 分钟前
linux6:常见命令介绍
linux·运维·服务器
Camellia-Echo34 分钟前
【Linux从青铜到王者】Linux进程间通信(一)——待完善
linux·运维·服务器
TheITSea35 分钟前
云服务器宝塔安装静态网页 WordPress、VuePress流程记录
java·服务器·数据库
Linux运维日记1 小时前
k8s1.31版本最新版本集群使用容器镜像仓库Harbor
linux·docker·云原生·容器·kubernetes
我是唐青枫1 小时前
Linux dnf 包管理工具使用教程
linux·运维·服务器
王ASC1 小时前
ORA-01461: 仅能绑定要插入 LONG 列的 LONG 值。ojdbc8版本23.2.0.0驱动BUG【已解决】
数据库·sql·oracle
Dlwyz2 小时前
问题: redis-高并发场景下如何保证缓存数据与数据库的最终一致性
数据库·redis·缓存