惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

L
LINUX DO - 最新话题
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
PCI Perspectives
PCI Perspectives
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
H
Heimdal Security Blog
S
Security @ Cisco Blogs
N
News | PayPal Newsroom
J
Java Code Geeks
罗磊的独立博客
Security Archives - TechRepublic
Security Archives - TechRepublic
N
News and Events Feed by Topic
V
V2EX
WordPress大学
WordPress大学
Google Online Security Blog
Google Online Security Blog
N
News and Events Feed by Topic
www.infosecurity-magazine.com
www.infosecurity-magazine.com
月光博客
月光博客
AI
AI
小众软件
小众软件
The GitHub Blog
The GitHub Blog
MongoDB | Blog
MongoDB | Blog
A
Arctic Wolf
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
美团技术团队
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
Hacker News - Newest:
Hacker News - Newest: "LLM"
T
Tailwind CSS Blog
S
Schneier on Security
博客园 - 三生石上(FineUI控件)
F
Full Disclosure
B
Blog RSS Feed
Forbes - Security
Forbes - Security
S
SegmentFault 最新的问题
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
人人都是产品经理
人人都是产品经理
云风的 BLOG
云风的 BLOG
Jina AI
Jina AI
Cisco Talos Blog
Cisco Talos Blog
U
Unit 42
Project Zero
Project Zero
H
Hacker News: Front Page
Y
Y Combinator Blog
Application and Cybersecurity Blog
Application and Cybersecurity Blog
The Cloudflare Blog
大猫的无限游戏
大猫的无限游戏
S
Secure Thoughts
The Hacker News
The Hacker News
Microsoft Azure Blog
Microsoft Azure Blog

Shiroha白羽的博客

Golang 踩坑 —— interface 为参数的时候传 nil 指针 Codeforces Round 925 (Div. 3) Codeforces Round 924 (Div. 2) Codeforces Round 923 (Div. 3) Codeforces Round 922 (Div. 2) Codeforces Round 921 (Div. 2) Educational Codeforces Round 161 (Rated for Div. 2) Codeforces Round 920 (Div. 3) Codeforces Round 919 (Div. 2) Hello 2024 Good Bye 2023 Codeforces Round 918 (Div. 4) 个人备份的常用 macOS 清理命令 Codeforces Round 917 (Div. 2) Pinely Round 3 (Div. 1 + Div. 2) Educational Codeforces Round 160 (Rated for Div. 2) Codeforces Round 915 (Div. 2) Codeforces Round 914 (Div. 2) Codeforces Round 913 (Div. 3) Educational Codeforces Round 159 (Rated for Div. 2) Codeforces Round 912 (Div. 2) Codeforces Round 911 (Div. 2) CodeTON Round 7 (Div. 1 + Div. 2, Rated, Prizes!) Educational Codeforces Round 158 (Rated for Div. 2) Codeforces Round 910 (Div. 2) Codeforces Round 909 (Div. 3) Codeforces Round 908 (Div. 2) Educational Codeforces Round 157 (Rated for Div. 2) C++自定义的字面量 Codeforces Round 907 (Div. 2) Codeforces Round 916 (Div. 3) 关于 LRU map 的一些灵感 2023 杭州站 ICPC 现场赛 反复横跳的 Clang-Tidy(cert-dcl21-cpp) Codeforces Round 906 (Div. 2) 一段奇怪的 CPP 代码 Codeforces Round 905 (Div. 3) Codeforces Round 904 (Div. 2) Codeforces Round 903 (Div. 3) Educational Codeforces Round 156 (Rated for Div. 2) Codeforces Round 902 (Div. 2, based on COMPFEST 15 - Final Round) Codeforces Round 901 (Div. 2) Codeforces Round 900 (Div. 3) Codeforces Round 899 (Div. 2) Educational Codeforces Round#155 (Div. 2) Codeforces Round 898 (Div. 4) CodeTON Round 6 (Div. 2) Codeforces Round 897 (Div. 2) Codeforces Round 896 (Div. 2) Codeforces Round 887 (Div. 2) Codeforces Round 895 (Div. 3) 左值-右值-将亡值 blog.mauve.icu Pinely Round 2 (Div. 1 + Div. 2) Harbour.Space Scholarship Contest 2023-2024 (Div. 1 + Div. 2) Codeforces Round 894 (Div. 3) Codeforces Round 888 (Div. 3) Educational Codeforces Round#153 (Div. 2) Codeforces Round 893 (Div. 2) OTPAUTH,两步验证中的通用协议 Codeforces Round 892 (Div. 2) Codeforces Round 891 (Div. 3) Codeforces Round 890 (Div. 2) Educational Codeforces Round#152 (Div. 2) blog.mauve.icu Java Script 的 null 和 undefined 随想 记一次 SQL LEFT JOIN 没有得到预期结果的错误 Codeforces Round#789(Div. 2) GCC/G++ 预编译头性能优化 使用 Junit5 和 Mockito 实现 SpringBoot 的单元测试最优美的解决方案 centOS 防火墙 docker-compse 的问题 C++ 语言实现动态变化的线程池 Codeforces Round#744 (Div. 3) 计算机图形学 Windows 通过网络访问 WSL2 原生 JavaScript 实现图片裁剪 面试复习(计算机图形学) 面试复习(算法) Codeforces Round#706(Div. 2)-Let's Go Hiking 面试复习(Java) 面试复习(Git) 面试复习(Linux) 面试复习(计算机网络) 面试复习(操作系统) 面试复习(C++) Codeforces Round#699 (Div. 2) 清理 WSL2 的磁盘占用 Codeforces Round#697 (Div. 3) Windows 下的 NTFS 驱动器索引 BUG 计算机网络复习 记一次 Navicat 连接 MySQL 一直报认证错误(Access denied) 计算机网络实验复习 WSL1 使用 Docker 一直无法启动 我的ACM脚印 2020牛客暑期多校训练营(第三场)D-Points Construction Problem——构造 2020牛客暑期多校训练营(第三场)E-Two Matchings——复杂思维与简单dp 2020牛客暑期多校训练营(第二场)I-Interval——最大流转对偶图求最短路 Educational Codeforces Round 80 D. Minimax Problem——二分+二进制处理 Codeforces Round 606 E. Two Fairs——图论 Codeforces Round 612 (Div. 2) C. Garland——DP
面试复习(数据库)
Shiroha · 2021-02-23 · via Shiroha白羽的博客

B 树和 B+ 树

  • B 树的特点
    • 一个节点上包含至多 $m - 1$ 个值
    • 根节点至少有两个孩子
    • 非叶子节点如果包含了 $k$ 个值,则其包含了 $k + 1$ 个孩子节点
    • 所有叶子节点都位于同一层
  • B+ 树的特点
    • 所有的非叶子节点不再保存值,而是只保存了中间值
    • 所有值保存在叶子节点上
    • 所有的叶子节点通过链表按照顺序进行连接
  • 为什么数据库会采用 B+ 树而不是 B 树或者 AVL 树
    • AVL 的节点访问次数更多,而对于数据库而言,每个节点通常被存储在一个文件中,所以需要读取的文件数量更多,导致效率低
    • 在数据库中有时需要进行范围的搜索,此时 B+ 树的链表结构可以快速的找到某个节点的下一个节点位置

联合索引

  • 什么是联合索引
    • 多个列同时组成索引

聚簇索引和非聚簇索引

  • 聚簇索引
    • 叶子节点上直接保存值
  • 非聚簇索引
    • 叶子节点上保存的是值所在的地址
  • 聚簇索引的优点
    • 理论上速度更快,因为聚簇索引少一次文件的读取过程
  • 非聚簇索引的优点
    • 更新主键的代价低
    • 主键插入的顺序可以混乱

MySQL 锁

  • 类型
    • 全局锁
    • 表级锁
    • 行级锁
  • 读写锁
    • 读锁:可以与其他的读锁共存,但是不可以与写锁共存
    • 写锁:不可以与其他任何锁共存
  • 悲观锁
    • 普通的锁,锁定此行/表/数据库以防止其他操作进行修改,会导致其他事务被阻塞
  • 乐观锁
    • 通过比较版本号的区别的方法,来确定此数据是否经过修改,如果修改则需要读取最新的值

MyISAM和InnoDB

  • 区别
    • MyISAM 是 MySQL 之前默认数据库,不支持事务、行级锁和外键,崩溃后无法安全恢复,支持全文索引,强调性能
    • InnoDB 是 MySQL 目前的默认数据库,支持了ACID兼容的事务,支持行级锁,不支持全文索引
  • 适合范围
    • MyISAM 适合读密集场所
    • InnoDB 适合写密集场所

数据库联合查询和连接查询

  • 联合查询(JOIN)
    • 将两张表按照一定规律进行拼接组成结果并返回
    • SELECT table1.*, table2.* FROM table1 JOIN table2 ON table1.id=table2.id
    • INNER JOIN 仅当左右两个表同时存在对应的数据时才返回
    • LEFT JOIN 当左边的表存在则返回
    • RIGHT JOIN 当右边的表存在则返回
  • 连接查询(UNION)
    • 将两个或更多查询的结果集组合为单个结果集,查询来自同一个表的相同列
    • UNION ALL 不做重复性检查

数据库的索引类型

  • 普通索引
    • 没有限制,普通的索引
  • 唯一索引
    • 索引列的值必须唯一,但允许有空值
  • 主键索引
    • 特殊的唯一索引,不允许有空值
  • 全文索引
    • 对全文的索引,耗时耗空间

数据库隔离级别

隔离级别脏读(Dirty Read)不可重复读(NonRepeatable Read)幻读(Phantom Read)
未提交读(Read uncommitted)可能可能可能
已提交读(Read committed)不可能可能可能
可重复读(Repeatable read)不可能不可能可能
可串行化(Serializable)不可能不可能不可能
  • 隔离级别
    • 未提交读:最朴素的数据库形式
    • 已提交读:在事务完成之后再更新数据库的值
    • 可重复读:每个事务开始前锁定所更新的行
    • 可串行化:单一线程,所有事务必须按照顺序进行
  • 三种错误
    • 脏读:读取到其他事务正在修改过程中的值
    • 不可重复读:一个事务中,同一条语句得到的对应行的内容不同
    • 幻读:一个事务中,同一条语句得到的数据数量不同

MySQL 的存储引擎

  • MySQL 的存储引擎类型
    • InnoDB(默认):支持事务处理,支持外键,支持崩溃修复能力和并发控制。如果需要对事务的完整性要求比较高(比如银行),要求实现并发控制(比如售票),那选择InnoDB有很大的优势。如果需要频繁的更新、删除操作的数据库,也可以选择InnoDB,因为支持事务的提交(commit)和回滚(rollback)
    • MyISAM(旧版本的 MySQL 默认):插入数据快,空间和内存使用比较低。如果表主要是用于插入新记录和读出记录,那么选择MyISAM能实现处理高效率。如果应用的完整性、并发性要求比较低,也可以使用
    • Memory:所有的数据都在内存中,数据的处理速度快,但是安全性不高。如果需要很快的读写速度,对数据的安全性要求较低,可以选择 Memory。它对表的大小有要求,不能建立太大的表。所以,这类数据库只使用在相对较小的数据库表

MySQL 主从复制

  • MySQL 主从复制作用
    • 实现数据的多处自动备份
    • 实现读写分离还能进一步提升数据库的负载性能
  • MySQL 主从复制的原理
    • 从服务器将日志与主服务器同步,同时重放日志的内容实现数据同步

回表查询

  • MySQL 的索引逻辑
    • MySQL 会为主键保存一棵聚集索引数树(叶子节点上保存了此节点的所有属性值),而其他的索引则为普通的索引树,普通的索引树进仅保存了主键值而没有保存属性值
    • 当需要进行查询且 WHERE 条件不是主键时,需要先通过查询对应的索引,然后通过索引得到主键值,然后再去聚集索引树上搜索对应的主键值,所以需要查询两次索引,效率低
  • 覆盖索引
    • 如果使用 SELECT 的时候,恰好只需要主键和此搜索值,则可以不搜索聚集索引树,因为仅靠普通索引树即可得到答案
    • 为了避免回表,可以通过建议一些可能的联合索引,使得进行 SELECT 的时候不会进行回表操作

连接池

  • 为什么使用连接池
    • 与 Java 的线程池相同,为了节约系统资源
  • 常用的连接池
    • DBCP:使用量最大的连接池
    • C3P0

分表

  • 水平分表
    • 将一个表的记录分割到数个表中,可以减少索引的大小,加快索引
  • 垂直分表
    • 将部分字段划分至其他的表,部分字段数据量大,进行索引时会带来大量的 IO 负担,进行分表有利于查询效率