摘要:
目录简介排列乘法原理排列数全排列组合加法原理组合数 简介 排列就是指从给定个数的元素中取出指定个数的元素进行排序。组合则是指从给定个数的元素中仅仅取出指定个数的元素,不考虑排序。 排列 乘法原理 如果完成一个工程需要分 \(n\) 个步骤,假设 \(a_i\) 代表第 \(i\) 个步骤的不同方法数 阅读全文
摘要:
Redis 缓存 引入了缓存层,就会有缓存异常的三个问题,分别是缓存雪崩、缓存击穿、缓存穿透。 它们的区别如下: 缓存击穿 场景 高并发流量场景下,大量请求同时访问一个热点数据,该热点数据在数据库中存在,但是, Redis 中缓存的数据已经过期了,这时,一瞬间就会有大量的请求同时打到数据库上,导致数 阅读全文
摘要:
哨兵(Redis Sentinel) 简介 Redis Sentinel provides high availability for Redis when not using Redis Cluster. 当没有使用 Redis Cluster 时,Redis 哨兵(Sentinel)为 Redi 阅读全文
摘要:
Redis 主从复制 主从复制,是指将一台Redis服务器的数据,复制到其他的Redis服务器。前者称为主节点(master),后者称为从节点(slave);数据的复制是单向的,只能由主节点到从节点。 主从复制的作用主要包括: 数据冗余:主从复制实现了数据的热备份,是持久化之外的一种数据冗余方式。 阅读全文
摘要:
目录链表应用 II应用 2:Leetcode 25. K 个一组翻转链表题目分析代码实现应用2:Leetcode 234. 回文链表题目分析方法一:数组方法二:递归方法三:快慢指针代码实现方法一方法二方法三应用3:Leetcode 143. 重排链表题目分析代码实现 链表应用 II 应用 2:Lee 阅读全文
摘要:
目录字典树(Trie)应用应用1:Leetcode.642题目题目分析代码实现应用2:Leetcode.1268题目分析代码实现总结字典树的应用 字典树(Trie) 字典树(Trie),也称为“前缀树”,是一种特殊的树状数据结构,对于解决字符串相关问题非常有效。它能够提供快速检索,主要用于搜索字典中 阅读全文
摘要:
[TOC] # Redis数据持久化 Redis提供了四种持久化策略:RDB (Redis Database)、AOF、RDB + AOF 和 不持久化。 - **RDB(Redis Database)** 在指定的时间间隔内将内存中的数据集以快照形式写入磁盘。 - 优点: - RDB 快照是一个压 阅读全文
摘要:
目录MySQL一条SQL语句的执行过程开启事务两阶段提交MySQL的两阶段提交过程异常重启会出现什么现象?两阶段提交的缺点组提交组提交的过程MySQL 磁盘 I/O 很高的优化方法 MySQL MySQL分为 Server 层 与 存储引擎层。 Server 层:包括连接器、查询缓存、分析器、优化器 阅读全文
摘要:
[TOC] # 分类 MySQL Server 主要有以下几类日志: | 日志类型 | 作用 | | | | | 错误日志(Error log) | 记录启动、运行、停止 mysqld 时遇到的问题 | | 查询日志(General query log) | 已建立的客户端连接和从客户端收到的语句 阅读全文
摘要:
目录InnoDB架构缓冲池(Buffer Pool)数据预读缓冲池(Buffer Pool)简介Buffer Pool 的管理空闲页(Free Page)脏页(Dirty Page)小结InnoDB 的缓存淘汰策略传统 LRU 算法的缺点InnoDB如何解决预读失效的问题InnoDB如何解决 Buf 阅读全文
摘要:
目录InnoDB 多版本并发控制多版本控制和二级索引共享锁和排它锁当前读和快照读当前读快照读Read ViewRead Veiw 的生成流程总结 InnoDB 多版本并发控制 InnoDB 是一个多版本(multi-version)存储引擎,它会保存被修改行的旧版本信息,以支持并发和回滚等事务功能, 阅读全文
摘要:
[TOC] # 事务 事务是一个不可分割的数据库操作序列,也是数据库并发控制的基本单位,其执行的结果必须使数据库从一种一致性状态变到另一种一致性状态。事务是逻辑上的一组操作,要么都执行,要么都不执行。 事务就是一组原子性的操作,这些操作要么全部发生,要么全部不发生。事务把数据库从一种一致性状态转换成 阅读全文
摘要:
KMP算法 Knuth-Morris-Pratt字符串查找算法(简称为KMP算法)可在一个字符串S内查找一个词W的出现位置。一个词在不匹配时本身就包含足够的信息来确定下一个匹配可能的开始位置,此算法利用这一特性以避免重新检查先前配对的字符。 这个算法由高德纳和沃恩·普拉特在1974年构思,同年詹姆斯 阅读全文
摘要:
目录应用应用1:Leetocde1206题目解题思路代码 应用 应用1:Leetocde1206 题目 1206. 设计跳表 解题思路 参考: Java手写实现跳表 代码 import random from typing import List class Skiplist(object): # 阅读全文
摘要:
目录图图的表示方法邻接表数组邻接矩阵 图 图的表示方法 图有三种常用的表示方法: 邻接矩阵 邻接表数组 边的数组 其中,最常用的就是用 邻接表数组 和 邻接矩阵 表示图。 邻接表数组 定义:以顶点为索引的列表数组,其中的每一个元素都是和该顶点相邻的顶点列表。 邻接矩阵 定义:使用一个 V 乘 V 的 阅读全文
摘要:
矩阵 矩阵相关的典型应用如下: | 序号 | 题目 | | : : | | | 1 | 174. 地下城游戏 | | 2 | 562. 矩阵中最长的连续1线段 | 应用 应用1:Leetcode.174 题目 174. 地下城游戏 分析 省略。 代码实现 class Solution: def un 阅读全文
摘要:
链表 链表相关的典型应用如下: | 序号 | 题目 | | : : | | | 1 | 203. 移除链表元素 | | 2 | 86. 分隔链表 | | 3 | 206. 反转链表 | | 4 | 160. 相交链表 | | 5 | 92. 反转链表 II | 应用 应用1:Leetocde.203 阅读全文
摘要:
目录状态压缩动态规划应用应用1:Leetcode.465题目解题思路枚举子集分析动态规划边界条件状态转移代码应用2:Leetcode.464题目解题思路状态压缩代码应用3:Leetcode.691题目解题思路代码实现应用3:Leetcode.864题目解题思路代码实现应用4:Leetcode.149 阅读全文
摘要:
目录单调栈简介伪代码应用应用1:Leetcode.496题目分析代码实现复杂度分析应用2:Leetcode.503题目分析代码实现应用4:Leetcode.2454题目分析代码实现应用4:Leetcode.739题目分析代码实现应用5:Leetcode.316题目分析代码实现应用6:Leetcode 阅读全文
摘要:
目录高楼扔鸡蛋题目方法一:动态规划分析边界条件状态转移代码实现复杂度方法二:动态规划 + 二分搜索分析代码实现复杂度 高楼扔鸡蛋 这是一个比较经典的动态规划问题,最先来自谷歌的面试题。 题目 887. 鸡蛋掉落 方法一:动态规划 分析 我们假设 \(g(k, n)\) 表示当有 \(k\) 枚鸡蛋, 阅读全文