自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(157)
  • 收藏
  • 关注

原创 Mysql 高频面试题

原子性(Atomicity):事务是一个不可分割的工作单位,其中的操作要么全部执行成功提交,要么全部不执行回滚。即使在执行过程中遇到错误或系统崩溃,也能保证数据库不会处于部分更新的状态。一致性(Consistency):事务必须使数据库从一个一致性状态变换到另一个一致性状态。一致性状态指的是数据库中的数据满足所有预定义的约束和规则,比如数据类型、检查约束、外键约束等。任何违反这些规则的操作将导致整个事务被撤销。隔离性(Isolation):事务的执行不受其他事务干扰,即并发执行的多个事务之间相互隔离。

2025-07-01 00:23:12 445

原创 一文讲透MySQL的主从同步

MySQL主从同步的核心是通过。

2025-07-01 00:20:09 512

原创 如何排查mysql慢查询?

通过 information_schema.INNODB_TRX 和 sys.innodb_lock_waits 视图查看锁等待详情。performance_schema 提供了更细粒度的等待事件监控,适合分析实时和历史等待事件。通过以上方法,可以系统性地定位和解决线上慢查询问题,同时通过预防措施避免未来性能隐患。SHOW PROCESSLIST 可以查看当前所有连接的状态,包括等待中的查询。排查线上慢查询是数据库性能优化的关键步骤。对可疑 SQL 执行。

2025-07-01 00:18:34 843

原创 详解主从延迟

主从延迟是数据库高可用架构中常见的问题,尤其是在高并发写入或从库负载过高的场景下。

2025-06-30 23:59:08 363

原创 详解Mysql分库分表

分库分表是应对海量数据和高并发的必要手段,但其设计和实施需权衡业务需求、技术复杂性和运维成本。通过合理选择分片策略、优化分片键、利用中间件工具,并结合自动化运维,可以在性能、扩展性和可用性之间取得平衡。对于中小规模业务,优先考虑垂直分表或读写分离;而对于大型系统,水平分库分表结合 NewSQL 数据库可能是更优解。分库分表是数据库架构设计中应对海量数据和高并发访问的核心策略,其核心目标是通过将数据分散存储到多个数据库或表中,降低单个数据库或表的压力,提升系统的吞吐能力和扩展性。

2025-06-30 23:55:20 937

原创 详解Mysql 查询优化

通过结合索引设计、SQL优化、数据库配置和监控工具,可以显著提升查询性能。最终目标是根据实际业务场景,平衡读写性能,减少资源消耗,并确保系统的可扩展性。查询优化是提升数据库性能的核心手段,涉及索引设计、SQL语句调整、数据库配置等多个方面。

2025-06-30 23:49:25 603

原创 详解InnoDB存储引擎redo log 和 undo log

是支持事务ACID特性的核心机制。它们通过不同的方式记录事务的修改,确保数据的可靠性、一致性以及崩溃恢复能力。在MySQL的InnoDB存储引擎中,balance=原值。

2025-06-30 23:26:43 314

原创 详解Mysql Binlog

通过合理配置和管理 binlog,可以显著提升 MySQL 的可靠性和扩展性,是数据库运维和开发中的核心工具之一。是 MySQL 服务器层维护的一种二进制日志,主要用于记录数据库的所有。(如 DML 和 DDL 操作),并支持。在 MySQL 配置文件(如。

2025-06-30 23:26:10 436

原创 详解Mysql的四种隔离级别

MySQL 的事务隔离级别是为了解决并发事务中可能出现的数据不一致问题(如脏读、不可重复读、幻读)。通过合理选择事务隔离级别,可以在数据一致性和系统性能之间找到最佳平衡点。MySQL 的 InnoDB 引擎在。

2025-06-30 23:15:10 476

原创 InnoDB 存储引擎为什么选择 B+树 而不是 B树 作为索引结构?

B+树的设计更贴合数据库的典型使用场景,能够高效处理大规模数据的存储和查询需求。无法覆盖的场景(如频繁的单点查询),但对范围查询和磁盘 I/O 性能要求较低的情况。InnoDB 选择 B+树 而不是 B树,是因为 B+树在。作为索引结构,主要基于两者在。InnoDB 存储引擎选择。

2025-06-30 22:58:09 558

原创 InnoDB 索引数据结构的详解

(B+ Tree),这是其核心特性之一。B+树的设计结合了磁盘存储特性和数据库查询需求,能够高效地处理大规模数据的查找、插入、删除和范围查询操作。这种设计在大规模数据场景下(如亿级数据表)仍能保持高效的查询和写入性能,是 MySQL 高性能的重要基础。InnoDB 存储引擎的索引结构基于。InnoDB 的 B+树结构由。InnoDB 提供了一种。构成,每页默认大小为。

2025-06-30 22:48:31 611

原创 AOF 重写期间如果 Redis 崩溃会怎样?

尽管 AOF 重写期间 Redis 崩溃可能会导致一些复杂的情况,但由于 Redis 对此进行了精心的设计,确保了即便在这种极端情况下也不会造成严重的数据丢失或一致性问题。子进程崩溃不影响现有 AOF 文件。主进程崩溃后,Redis 能够选择合适的 AOF 文件进行恢复。用户可以通过配置适当的策略进一步控制数据的安全级别。因此,在生产环境中合理设置 AOF 相关参数,并定期监控 Redis 的运行状态,可以帮助最大限度地减少潜在的风险。

2025-06-29 16:57:52 460

原创 AOF 重写失败时会有哪些报错?

当 Redis 尝试执行 AOF(Append Only File)重写但失败时,可能会遇到多种错误或警告信息。这些报错信息有助于诊断问题所在,并采取相应的措施进行修复。

2025-06-29 16:57:44 561

原创 AOF重写机制是如何工作的?

随着时间推移,Redis 执行的每个写操作都会被追加到 AOF 文件中,这会导致 AOF 文件变得非常大,不仅占用大量磁盘空间,而且在 Redis 重启时恢复数据的速度也会变慢。AOF 重写机制通过创建一个新的 AOF 文件来压缩现有 AOF 文件中的冗余命令,从而减少文件大小并提高恢复效率。

2025-06-28 18:55:12 385

原创 Redis 数据持久化方式

方案特性适用场景RDB定期快照,高效恢复对于不需要实时持久化的应用;希望快速启动的应用;需要定期备份的情况AOF实时日志记录,更强的数据保护对数据一致性要求较高的场景;可以接受一定的性能开销换取更高的可靠性。

2025-06-28 18:48:06 912

原创 为什么单线程redis 那么快?

原因简要说明内存操作Redis 数据存储在内存中,读写速度极快非阻塞 I/O 模型(I/O 多路复用)使用 epoll / kqueue / select 等机制高效管理大量连接单线程无锁竞争开销避免了多线程切换和同步带来的性能损耗基于事件驱动的处理模型使用事件循环处理命令,结构简单高效高效的数据结构Redis 内部使用了很多经过优化的数据结构,如 SDS、Hash Table、SkipList 等避免上下文切换单线程无需线程切换,CPU 缓存命中率更高纯内存数据库 + 少量计算任务。

2025-06-28 17:10:36 669

原创 Redis 分布式锁简介

Redis 分布式锁是一种利用 Redis 的特性来实现分布式系统中资源互斥访问的机制。它允许在多台机器上运行的多个进程安全地共享资源,避免并发冲突。通常使用SET命令配合一些参数(如NX和EX)来创建和管理锁。

2025-06-28 17:01:05 279

原创 Redis 使用场景实战:缓存与限流

项目推荐方案数据存储原子操作Lua 脚本封装 INCR + EXPIREKey 设计部署位置API 网关或业务层前置中间件扩展能力支持滑动窗口、黑名单、动态规则等。

2025-06-28 16:58:33 753

原创 Redis 使用场景实战:热点数据与高并发

针对线上热点 Key 的高并发访问问题,设计系统以确保 Redis 能够有效应对大量并发请求,通常需要从多个方面入手,包括优化缓存策略、增强架构健壮性以及实施有效的负载均衡等。当热点 Key 到达其 TTL 并开始重新加载数据时,为了避免所有请求同时尝试从数据库获取数据,可以采用分布式锁(如 Redis 分布式锁)来控制只有一个线程负责数据加载,其他请求则等待直至缓存被成功更新。综上所述,通过上述措施,可以从不同角度缓解热点 Key 对 Redis 带来的高并发压力,确保系统的稳定性和性能。

2025-06-28 16:50:59 382

原创 如何解决Redis缓存雪崩,击穿,穿透问题?

和。这些问题都可能导致系统性能急剧下降甚至服务不可用。下面分别介绍这三种情况以及对应的解决方案。

2025-06-28 16:43:29 498

原创 如何发现redis中的bigKey 问题?

在 Redis 中,

2025-06-28 16:29:50 510

原创 介绍一下LRU算法,并尝试实现

LRU 是一种缓存淘汰算法,其核心思想是当缓存容量达到上限时,移除那些最近最少使用的数据项。换句话说,LRU 算法认为最近没有被访问的数据在未来被访问的可能性也比较低,因此可以优先被淘汰。

2025-06-28 16:22:16 365

原创 Redis数据淘汰机制详解

Redis 的数据淘汰机制提供了一系列灵活的选择,可以根据具体应用场景的需求进行定制化配置。:尝试移除设置了过期时间的键中,具有最小 TTL 值的键,即优先移除即将过期的键。,这两种策略分别针对最近最少使用和最不经常使用的键进行淘汰,非常适合缓存场景。:尝试移除那些设置了过期时间(TTL)的键中,最近最少使用的(LRU)键。:移除所有键中,最近最少使用的键,无论这些键是否设置了过期时间。:默认策略,当内存限制到达时,返回错误信息,不会删除任何键。:从设置了过期时间的键中,移除最不经常使用的(LFU)键。

2025-06-28 16:09:13 207

原创 Redis中string 内部采用的是SDS 的数据结构,介绍一下这种数据结构相对于原始C字符串的存储有什么优缺点?

在 Redis 中,字符串(String)类型的内部实现采用了**简单动态字符串(SDS, Simple Dynamic String)**的数据结构。与传统的C语言字符串相比,SDS 提供了更高效和安全的内存管理方式,并且解决了C字符串的一些局限性。总的来说,SDS 相较于原始的 C 字符串,在安全性、灵活性和性能方面都有显著的优势,尤其是在处理二进制数据和频繁修改的场景中。尽管存在一些额外的内存开销和复杂度,但这些通常是值得的,因为它大大增强了 Redis 的稳定性和效率。

2025-06-28 15:52:50 415

原创 介绍一下跳表选层和插入过程?

‌‌是一种随机化的数据结构,实质上是一种可以进行二分查找的有序链表。跳表通过增加多级索引,提高了查找、插入和删除操作的效率。跳表支持平均O(logn)、最坏O(n)复杂度的节点查找,还可以通过顺序性操作来批量处理节点。大部分情况下性能接近平衡树(如红黑树)。

2025-06-28 15:35:33 419

原创 redis 常用数据类型及底层实现简介

,并根据不同的使用场景和数据量大小,采用不同的底层数据结构进行优化。通过灵活的底层数据结构设计,Redis 在高性能和内存效率之间实现了良好的平衡,适用于多种业务场景。Redis 提供了五种基本的数据结构(

2025-06-28 15:02:34 514

原创 redis 常用数据类型及使用场景

Redis 支持多种数据类型,每种类型适用于不同的业务场景。最基础的数据类型, 用于存储简单的键值对。可存储任意格式的数据(文本、二进制、序列化对象),最大支持 512MB。根据业务需求选择合适的数据类型,可充分发挥 Redis 的高性能优势!存储无序的、唯一的字符串集合,支持交集、并集、差集等操作。双向链表结构,支持两端插入/弹出操作,实现队列或栈。适用于需要持久化日志和消息队列的场景。适用于统计活跃用户、签到情况等场景。用于存储一系列有序的字符串元素。

2025-06-28 14:44:42 739

原创 Redis常用架构模式及特点汇总

Redis 提供了多种架构模式,以满足不同场景下的性能、可用性和扩展性需求。本文就详细介绍一下 Redis 的主要架构类型及其特点。

2025-06-28 14:24:04 558

原创 【大厂真题-京东】字符串排序

给定 n 个字符串,请你对这 n 个字符串按照以下规则从小到大排序。对于任意两个字符串 s 和 t ,在排序后应当满足:- 若 s是 t 的一个前缀,则 s 在排序后的下标小于等于 t 的在排序后的下标。- 若存在整数 i ,使得 s 的前 i−1 个字符和 t 的前 i−1个字符相同,且 s 和 t 的第 i个字符不同,则比较第 i 个字符的大小关系(字符的大小关系顺序由输入数据给出)。

2025-06-27 23:42:37 239

原创 【大厂真题-京东】

牛牛的糖果树牛牛的朋友送了她一棵节点数为 n 的糖果树(1号点为根节点),树上的每个糖果都有一个颜色。牛牛吃糖果有一个习惯,她每次都会吃掉一整个子树的糖果,她喜欢与众不同,所以每次吃之前她都会把出现次数最多的颜色的糖果扔掉(可能有多个出现次数最多的颜色,此时要全部扔掉),她可以选择任意一棵子树吃掉,但她只能吃一次,因此他想知道她一次能吃到的所有糖果的颜色的异或和最大是多少(如果吃到了多个颜色相同的糖果,也需要做多次异或),你能帮帮她吗?时间限制:C/C++ 1秒,其他语言2秒。

2025-06-27 23:27:32 229

原创 [大厂真题-京东]牛牛与切割机

有一个序列 a1,a2,...,ana1​,a2​,...,an​ , 牛牛将对这个序列切割一刀(划分分成两个不相交的非空序列,一个序列为 a1,…,apa1​,…,ap​,另一个序列为 ap+1,…,anap+1​,…,an​),牛牛切割的代价为两个序列元素和的乘积。牛牛想知道切割代价最小是多少。时间限制:C/C++ 1秒,其他语言2秒空间限制:C/C++ 256M,其他语言512M输入例子:51 2 3 4 5输出例子:14例子说明:序列被划分为1 和 2 3 4 5,右边和为 14。

2025-06-27 22:21:00 243

原创 【面试题】笔试综合1

请求在这个链上传递,直到链上的某一个对象决定处理此请求。发出这个请求的客户端并不知道链上的哪一个对象最终处理这个请求,这使得系统可以在不影响客户端的情况下动态地重新组织和分配责任。是一种对象行为模式,它将多个对象连成一条链,并沿着该链传递请求,链路上的每一个对象都有机会处理这个请求,它提供了一种松耦合的机制。C. 在函数调用中传递map,则子函数中对map元素的修改不会导致父函数中map的修改。C.使多个对象都有机会处理请求,避免请求的发送者和接收者间的耦合关系。D.将对象连成一条链,并沿着该链传递请求。

2025-06-27 21:49:31 656

原创 [字符串]BM86 大数加法

时间复杂度O(max(lens, lent)):lens = s.length(), lent = t.length(),取决于长度较长的字符串。java :(java中的大数操作BigInteger,直接进行大数之间的运算,可以直接得到最终的结果。数据范围:s.length,t.length≤100000,字符串仅由'0'~‘9’构成。以字符串的形式读入两个数字,编写一个函数计算它们的和,以字符串形式返回。输入:"114514",""返回值:"114514"输入:"1","99"说明:1+99=100。

2025-06-27 18:38:11 641

原创 【字符串】BM85 验证IP地址

IP地址是有规律可言的:IPv4用了4个0-255的数字,用点隔开,IPv6用了4位十六进制的数字,用冒号隔开,共8组,这都可以直接用正则表达式来表示。既不是 IPv4 地址,又不是 IPv6 地址。如果不是上述类型的 IP 地址,返回。有效的 IPv4 地址,返回 "IPv4"有效的 IPv6 地址,返回 "IPv6"如果是有效的 IPv6 地址,返回。如果是有效的 IPv4 地址,返回。是有效的 IPv6 地址,而。是无效的 IPv6 地址。为有效IPv4地址,为无效IPv4地址;为无效IPv4地址。

2025-06-27 18:08:33 530

原创 [字符串]BM84 最长公共前缀

时间复杂度:O(M*N) 其中 M 是字符串数组中的字符串的平均长度,N是字符串的数量。时间复杂度:O(M*N) 其中 M 是字符串数组中的字符串的平均长度,N是字符串的数量。给你一个大小为 n 的字符串数组 strs ,其中包含n个字符串 , 编写一个函数来查找字符串数组中的最长公共前缀,返回这个公共前缀。输入:["abca","abc","abca","abc","abcc"]进阶:空间复杂度 O(1),时间复杂度 O(n∗len)空间复杂度:O(1) 常数空间的复杂度。输入:["abc"]

2025-06-27 14:54:04 545

原创 [字符串]字符串变形

元素入栈指的是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;元素出栈指的是从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。首先这个字符串中包含着一些空格,就像"Hello World"一样,然后我们要做的是把这个字符串中由空格隔开的单词反序,同时反转每个字符的大小写。题目要求将单词逆序,逆序我们就可以想到先进后出的栈,单词之间分开逆序我们需要整个字符串分割。比如"Hello World"变形后就变成了"wORLD hELLO"。输入:"nowcoder",8。

2025-06-27 00:32:04 963

原创 [字符串]LCR 181. 字符串中的单词反转

中可能会存在前导空格、尾随空格或者单词间的多个空格。返回的结果字符串中,单词间应当仅用单个空格分隔,且不包含任何额外的空格。如果两个单词间有多余的空格,反转后的字符串需要将单词间的空格减少到仅有一个。如果字符串在你使用的编程语言中是一种可变数据类型,请尝试使用。(2)输出结果中,单词间只能保留一个空格,多余空格要去掉;(3)在去除空格时,不要误把字符串‘0’去掉;反转后的字符串中不能存在前导空格和尾随空格。中使用至少一个空格将字符串中的。之间用单个空格连接的结果字符串。是由非空格字符组成的字符串。

2025-06-26 19:29:01 287

原创 [二分查找/排序]数组中的逆序对

在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数P。比如4统计123的前缀和,8统计1234567的前缀,而且因为是树状的,因此操作都是O(log2n)O(log2​n)。在合并数组的时候,当发现右边的小于左边的时候,此时可以直接求出当前产生的逆序对的个数。:就是从最小的数组按照顺序合并,从小到大或从大到小,依次向上合并,最后得到合并完的顺序数组!输入:[1,2,3,4,5,6,7,0]题目保证输入的数组中没有的相同的数字。

2025-06-26 17:22:27 582

原创 [二分查找/排序]比较版本号

例如,"1.1"的版本号小于"1.1.1"。因为"1.1"的版本号相当于"1.1.0",第3位修订号的下标为0,小于1。说明:version1 中下标为 0 的修订号是 "1",version2 中下标为 0 的修订号是 "2"。版本号是由修订号组成,修订号与修订号之间由一个"."连接。因为"1.1"的版本号相当于"1.1.0",第3位修订号的下标为0,小于1,所以version1 < version2,返回-1。修订号从左到右编号,下标从0开始,最左边的修订号下标为0,下一个修订号下标为1,以此类推。

2025-06-26 16:26:14 988

原创 【链表】合并两个排序的链表

输入两个递增的链表,单个链表的长度为n,合并这两个链表并使新链表中的节点仍然是递增排序的。数据范围: 0≤n≤1000 ,−1000≤节点值≤1000要求:空间复杂度 O(1) ,时间复杂度 O(n)如输入{1,3,5},{2,4,6}时,合并后的链表为{1,2,3,4,5,6},所以对应的输出为{1,2,3,4,5,6},转换过程如下图所示:输入: {1,3,5},{2,4,6}返回值:{1,2,3,4,5,6}输入:{},{}返回值:{}输入:{-1,2,4},{1,3,4}

2025-06-24 14:19:15 260

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除