当前位置: 首页 > article >正文

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

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


http://www.kler.cn/news/307309.html

相关文章:

  • redis简单使用与安装
  • Java并发:互斥锁,读写锁,Condition,StampedLock
  • shopify主题开发之template模板解析
  • C++学习笔记----7、使用类与对象获得高性能(一)---- 书写类(3)
  • 蓝桥杯-基于STM32G432RBT6的LCD进阶(LCD界面切换以及高亮显示界面)
  • 【AIGC】CFG:基于扩散模型分类器差异引导
  • JavaScript 函数 function
  • 用 nextjs 创建 Node+React Demo
  • WebGL入门(048):OES_draw_buffers_indexed 简介、使用方法、示例代码
  • Python---爬虫
  • Leetcode-轮转数组
  • 复现OpenVLA:开源的视觉-语言-动作模型及原理详解
  • 【Go开发】Go语言结构体,与java类不一样的定义方式
  • 推荐|基于springBoot智能推荐的卫生健康系统设计与实现(源码+论文+数据库)
  • 【附源码】用Python开发一个音乐下载工具,并打包EXE文件,所有音乐都能搜索下载!
  • el-table 的单元格 + 图表 + 排序
  • 动手学深度学习(pytorch土堆)-03常见的Transforms
  • 图论篇--代码随想录算法训练营第五十六天打卡| 108. 冗余连接,109. 冗余连接II
  • 【SQL】百题计划:SQL排序Order by的使用。
  • Flutter Error: Type ‘UnmodifiableUint8ListView‘ not found
  • 刷题DAY36
  • 初中生物--5.单细胞生物
  • VuePress搭建文档网站/个人博客(详细配置)主题配置-导航栏配置
  • 【开源免费】基于SpringBoot+Vue.JS企业客户管理系统(JAVA毕业设计)
  • Linux命令:文本处理工具sed详解
  • django中F()和Q()的用法
  • 保姆级离线+windows环境+大模型前端UI安装(二)
  • 基于Spring Boot的停车场管理系统的设计与实现
  • 【STL】 set 与 multiset:基础、操作与应用
  • Vue路由配置、网络请求访问框架项目、element组件介绍学习