码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • MySQL/Redis 常见面试题汇总


    1、常见数据库引擎和区别

    Innodb 支持行锁/表锁,支持事物,支持外键,不支持全文索引 【很多企业默认使用Innodb】 

    MyIsam 不支持行锁/支持表锁,不支持外键,不支持事物 ,支持全文索引

    2、MySQL事务及其特性

    原子性(Atomicity): 一个事物所有操作全部完成或失败

    一致性(Consistency): 事务开始和结束之后完整性没有被破坏

    隔离性(Isolation): 允许多个事物同时对数据库修改和读写

    永久性(Durablity): 事物提交之后,修改之后是永久不丢失的

    3、MySQL索引的种类

    3.1 按照数据结构/物理存储/字段特性/字段个数 进行索引分类

    按数据结构分类可分为:B+tree索引、Hash索引、Full-text索引。
    按物理存储分类可分为:聚簇索引、二级索引(辅助索引)。
    按字段特性分类可分为:主键索引、普通索引、前缀索引。
    按字段个数分类可分为:单列索引、联合索引(复合索引、组合索引)

    MySQL索引有哪些分类,你真的清楚吗? - SegmentFault 思否

    3.2 字段类型分类可以分为主键索引和非主键索引

    总体划分为两类,主键索引也被称为聚簇索引(clustered index),其余都称呼为非主键索引也被称为二级索引(secondary index)。

    主键索引存储了整行数据,而非主键索引中存储的值为主键id,当查询的值在非主键索引树里面找不到的时候就会触发回表操作。

    4、BTree 和 B+Tree的区别

    1. B+Tree 叶子节点只存放数据,非叶子节点只存放指针数据 ,BTree 非叶子节点既存放指针也存放数据,B+tree单个节点的数据量更小,在相同的磁盘I/O次数下,能查询更多的节点
    2. B+Tree的叶子节点有指针相连,所以再进行选择查询的时候可以快速移动,相比BTree范围查询速度更快

    BTree结构

    B+Tree结构

    5、什么是回表

    当在一个索引树查询不到完整数据的情况,需要再次查找其他索引树的情况称为回表

    什么时候会使用回表操作,当使用的是非主键索引的时候,就会进行会表操作操作

    如何避免回表操作:使用覆盖索引

    6、如何实现覆盖索引

    只需要在一棵索引树上就能获取SQL所需的所有列数据,无需回表

    将被查询的字段,建立到联合索引里去。

    MySQL 覆盖索引详解 - 掘金

    7、列举创建索引但是无法命中的情况?

    使用or

    聚合索引没有遵循最左匹配

    like 查询 %再在前面

    在查询的字段选择函数计算

    使用 != , <>

    一张图搞懂MySQL的索引失效 - SegmentFault 思否

    8、1000W条数据,使用limit offset分页时,为什么越往后翻越慢?

    limit offset 执行过程是读取n行数据然后抛弃前面的数据,这样数据量大速度就会变慢,所以需要通过引入主键索引 或者 给需要查询的字段增加索引

    这句 SQL 的执行逻辑是

    • 1.从数据表中读取第N条数据添加到数据集中
    • 2.重复第一步直到 N = 10000 + 10
    • 3.根据 offset 抛弃前面 10000 条数
    • 4.返回剩余的 10 条数据

    百万级表Limit翻页越往后越慢咋办? - 云+社区 - 腾讯云

    9、SQL注入的攻击原理及如何在代码层面防止SQL注入

    SQL注入的攻击原理就是通过拼接SQL语句绕过代码逻辑,达到攻击的目的

    如何防止:不直接拼接SQL,适用预编译SQL,需要用户传入的字段进行类型判断然后再传入SQL模板

    10、实现redis分布式锁过程

    先通过setnx设置锁,拿到锁的进程执行,没有拿到的等待,执行完之后通过del 删除锁,然后其他进程继续获得锁,通过设置过期时间来保证出现进程意外crash不释放锁的情况

    基于Python实现Redis 分布式锁_李俊的博客的博客-CSDN博客_python redis分布式锁

  • 相关阅读:
    什么是零日攻击?
    Leetcode:125.验证回文串,917仅仅反转字母,387字符串的第一个唯一字符
    《MySQL实战45讲》——学习笔记14 “count(*)的原理、与count(1)/count(id)的区别“
    AIoT通用组件服务攻略之快速定位http数据推送失败
    【无标题】
    如何使用 ABAP 代码发送邮件到指定邮箱试读版
    GitLab CI/CD系列教程(七):gitlab变量
    运动装备品牌排行榜,运动爱好者必备好物分享
    记录一下我的 Gradle 开发环境配置过程(萌新扫盲)
    (四)Spring源码解析:bean的加载流程
  • 原文地址:https://blog.csdn.net/qq_36441027/article/details/125016035
  • 最新文章
  • 沪漂五周年了:我越来越迷茫了
    Agentic Skill Routing 实战:别再把所有 Skill 塞进 AI Agent 上下文
    MySQL-Seconds_behind_master的精度误差
    [MAF预定义ChatClient中间件-03]CachingChatClient——利用缓存省钱省时间
    AI的至暗历史:从万众期待到被政府撤资,AI的两次死亡徘徊
    Agent OS :五种驯服不确定性的范式
    PortSwigger SQL注入LAB11
    数据库即时编译JIT
    [Begin]AI Learn Data Day 0
    深度学习进阶(二十七)现代 LLM 的核心架构设计其二:SwiGLU
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
小工具 小游戏
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1

京公网安备 11010502049817号