- 博客(44)
- 收藏
- 关注
原创 MySQL 中有哪些锁类型?
针对索中两个记录之间的间隙加锁,防止其他事务在这个间隙中插入新记录,以避免幻读。在插入自增列时,加锁以保证自增值的唯一性,防止并发插入导致的冲突。是行级锁和间隙锁的结合,锁定具体行和其前面的间隙,确保在一个范围内不会出现幻读。常用于支持可重复读的隔离级别。一种等待间隙的锁,用于指示事务打算在某个间隙中插入记录,允许其他事务进行共享锁,但在插入时会阻止其他的排它锁。对整个表进行加锁操作,用与保证完整的小型表,加锁的时候其他事务无法进行读和写。对特定的行加锁,适合高并发的情况,允许并发情况访问不同行。
2025-08-29 17:54:44
682
原创 MySQL 中如果发生死锁应该如何解决?
开启死锁检测:定时检测并且自动终止事务解决,设置事务等待锁超时时间,超时则自动回滚事务解决。1,多数的数据库管理系统会自动检测思索并且自动回滚部分事务来打破死锁。获取资源后,执行速度慢的事务导致其他事务一直在等待,从而导致超时。事务完成之后未释放的资源,常因为程序异常而产生。多个事务对同一个资源进行顺序不同的操作。持有锁时又同时请求更多锁导致互相等待。3.事务的执行速度差异。
2025-08-29 17:53:56
175
原创 MySQL 中如何解决深度分页的问题?
深度分页问题是指当 LIMIT 偏移量较大时,MySQL查询性能显著下降。这是因为 MySQL 可能选择全表扫描而非索引扫描,当数量很大时,随着页数的增大,查询会变得越慢,数据库在理分页查询时需要跳过大量的数据,导致查询效率低下。
2025-08-29 17:53:18
219
原创 什么是 MySQL的主从同步机制?它是如何实现的?
主从同步机制就是一种数据复制技术,主要是用于将主数据库上的数据,同步到一个或者多个副数据库上。再说说通过binloq记录,再推送到其他数据库,重放binloq实现复制。是通过一个二进制记录日志,也就是binlog来实现的,当一个事物在执行写操作时,会将这些操作以sql语句的形式记录在binlog中,然后将binlog推送给其他的从数据库,其他的从数据库再通过重放binlog的操作,来实现数据的复制。
2025-08-29 17:52:32
219
原创 阿里云百炼智能体连接云数据库实践(DMS MCP)
本文介绍了如何通过阿里云百炼平台与Serverless服务实现数据库操作。主要内容包括:1)在阿里云控制台创建RDS数据库实例;2)配置弹性时间和数据库账号;3)在百炼平台创建智能体应用;4)通过MCP服务配置连接数据库,包括获取AccessKey和设置连接参数;5)编写执行SQL查询的提示词模板。文章提供了详细的操作步骤和界面截图,帮助用户完成从数据库创建到应用集成的全过程。
2025-08-29 17:04:27
1567
2
原创 从网络角度来看,用户从输入网址到网页显示,期间发生了什么?
并且构建出HTPP请求:浏览器根据URL构建一个HTTP请求报文,由于是HTTPS,浏览器会进行加密通信。再通过应用层来建立安全连接,在TCP连接建立之后,由于是HTTPS后,浏览器和服务器会进行SSL/TLS握手,协商加密算法,交换密钥,建立加密通道。网络接口层封装:IP数据包会被封装成数据帧,添加数据链路层头部和尾部,包含了源MAC地址和目标MAC地址。并且会在每个TCP数据段都会添加TCP头部。再通过传输层进行建立可靠的连接,选择协议,对于HTTPS,通常使用TCP协议来保证数据传输的可靠性。
2025-03-31 23:21:21
143
原创 Cookie、Session、Token 之间有什么区别?
Token 本质是一种加密的字符串,用于身份验证和授权,可以包含用户信息和权限,用于验证用户身份或授权访问资源。认证后,后端服务会返回 Token,存储在客户端(浏览器或移动应用中),后续客户端访问服务端需要带上这个 Token。是服务器端保存用户状态的机制,每一个用户的会话都是有一个唯一的Session ID。Cookie是存储在浏览器的一个数据文件,用于跟踪和保存用户的状态信息。Token:用于无状态的认证和授权,特别是在分布式和跨域环境下。Cookie:主要用于客户端状态的简单存储和追踪。
2025-03-31 23:03:33
123
原创 说说 TCP 拥塞控制的步骤?
再接近网络负载上限的时候,减缓发送速率增长 ,避免拥塞。当cwnd要大于等于ssthresh,进入拥塞避免阶段,一般来说ssthresh的值就是65535字节,当达到这个值之后,修改为两种增长方式:1。每次收到ACK,cwnd增加1/cwnd。2.每当过一个RTT的时候,cwnd+=1。发送方在连接建立的初期,缓慢地增加数据发送速率,初始的拥塞窗口(cwnd)通常为一个MSS。然后再每次收到ACK之后成倍的增加cwnd,直到达到慢启动阈值或者检测到网络拥塞。
2025-03-30 22:57:16
182
原创 TCP 的粘包和拆包能说说吗?
原因:TCP面向字节流的协议,不关心数据边界,有发送缓冲区,包较小,缓冲区一次性装的就多。原因:TCP面向字节流的协议,不关心数据边界,所受到缓冲区的大小限制,分为多个发送。1.定长信息:每一个数据都是固定长度发送,不够长的后面字符串补充。2.添加消息分隔符:在数据包中加入间隔符,读到间隔符就把之前的数据整合到一块。一个大的数据包被分成了好几个包进行发送,接收方无法获得完整的数据。多个数据包再一个包里发送,接收方无法分辨。
2025-03-30 22:52:45
219
原创 说说 TCP 的四次挥手?
TCP的四次挥手是用于安全关闭一个已经建立的连接的过程,它确保双方都能够完成数据传输并且安全地释放资源。1.第一次挥手(FIN->ACK):客户端会主动关闭连接,发送FIN包,进入FIN_WAIT_1状态,服务器接受到FIN后会表示出不再接受数据,但是仍有可能继续发送数据。2.第二次挥手(ACK):服务器发送ACK包,确定已经收到了FIN,这个时候服务器进入到了CLOSE_WAIT状态,客户端进入FIN_WAIT_2状态。
2025-03-30 22:46:59
199
原创 TCP 和 UDP 有什么区别?
UDP则是一种网路通信协议,它属于传输层的协议,是一个简单的,面向无连接的协议,UDP用于将数据从一个应用程序发送到另一个程序,并且在这个过程中不提供可靠的数据传输保障,此外,UDP支持一对一、一对多、多对多的交互通信。UDP则提供了更加轻量,面向报文的传输,更加适用于实时性要求高的场景。TCP是一种面向连接的协议,在数据传输之前会建立一条专用的通信连接,这意味着在数据传输的过程中,两台计算机之间会有一条稳定的数据传输通道。TCP提供了可靠,面向连接的传世,适用于需要数据完整性和顺序的场景。
2025-03-30 22:38:42
88
原创 单例模式有哪几种实现?如何保证线程安全?
设计模式是解决软件开发某些特定问题而提出的一些解决方案也可以理解成解决问题的一些思路。通过设计模式可以帮助我们增强代码的可重用性、可扩充性、 可维护性、灵活性好。
2025-03-26 23:09:01
202
原创 Redis 集群的实现原理是什么?
内置的高可用机制,支持N个master节点,每个master节点可以挂载多个slave节点,当master节点挂掉,集群会提高某个slave节点为新的maser节点。通过实现数据分布式存储,对数据进行分片,将不同的数据存于不同的master节点,解决海量数据存储问题。Redis集群时通过多个Redis实例来实现的,每个实例存储部分的数据之间的数据是不重复的。去中心化思想:无中心节点,客户端视整个集群为一个整体,可以连接任意节点进行操作。
2025-03-24 23:10:08
113
原创 如何解决 Redis 中的热点 key 问题?
通常以其接受到的Key被请求频率来判定1.QPS集中在特定的Key,例如其中一个Key的每秒访问量占到了redis实例总QPS的大部分2.带宽集中在特定的Key3.CPU使用时间占比集中在特定的Key从这几点可以看出如果一个Key的访问频率占比过大或者带宽占比过大都是属于热Key。
2025-03-24 22:56:37
248
原创 Redis 数据过期后的删除策略是什么?
在每次访问键的时候,redis会检查该键是否已经过期,如果已经过期,那么就会将其删除,这种策略会保证了在使用过程中只删除了不再需要的数据,但是不访问过期键就不会立即删除这个键。redis没隔一段时间会检查一定数量的键。并且redis并不是一次性扫描所有的设置过期时间的键为避免会对性能产生过大的影响,因此这个时候可能会有部分键过期了没有被及时删除。综上,定期删除对于内存更加友好,但是惰性删除对CPU更加友好,所以redis采用的是定期删除+惰性删除的方法来进行删除,
2025-03-23 23:07:23
231
原创 Redis 主从复制的实现原理是什么?
redis的主从复制是指一个redis主节点可以将数据复制到一个或者多个从节点,从节点从主节点获取数据来保持同步。流程:1,开始同步从节点通过向主节点发送PSYNC命令发起同步2.全量复制如果是第一次连接或者之前的连接失效,从节点会请求全量复制,主节点将当前数据快照发送给从节点。3.增量复制全量复制完毕后,主从之间会保持一个长连接,主节点会通过这个连接将后续的写操作传递给从节点来保证数据的一致性。
2025-03-23 23:00:42
169
原创 Redis 的持久化机制有哪些?
RDB持久化通过快速创建快照来获取内存 某个时间点上的副本,利用快照可以进行方便主从复制,默认快照文件为dump.rdb。适合对持久化实时性要求高的场景,会将每个写操作记录到日志文件appendonly.aof,通过重放日志文件来恢复数据。在redis4.0中,结合了RDB和AOF的优点,先生成了快照文件,再记录快照之后的写操作到日志中。由于是间隔性保存的快照,如果redis崩溃会导致丢失上次保存快照后的数据。生成的快照文件时压缩的二进制文件,适合备份和灾难恢复。
2025-03-23 22:53:00
142
原创 Redis 实现分布式锁时可能遇到的问题有哪些?
为了避免有锁得客户端崩溃得原因就需要给锁加入过期时间,那么就可能会出现业务还没有执行完,锁就已经到期的情况,那么就可以设置一个守护线程,当线程a在执行的时候,守护线程就会启动,每隔一段时间就会去判断线程a的执行情况,如果a还没有执行完,而锁的时间马上过期了那么就会重新设置一下过期时间。使用主从读写分裂架构的时候,可能会出现在主节点加锁之后,主节点突然宕机,但是从节点还没有同步数据,导致新的主节点还没获得锁的信息,此时其他客户端还在获取,就会出现多个客户端同时获得锁的问题。
2025-03-22 23:44:19
262
原创 Redis 的 Red Lock 是什么?你了解吗?
如果正在使用redis分布式锁,但是此时发生了主从切换,但是从节点上不一定已经同步了主节点的锁信息,这会导致在新的主节点上没有锁的信息,但是此时另一个业务去加锁,一看锁还没有被占,于是强盗了锁就开始执行业务逻辑,此时就发生了两个竞争者同时进入临界区操作临界资源的情况,此时就可能会发生数据不一致的问题。加锁过程:对多个节点进行加锁尝试,而且每个节点加锁操作都有时间限制,超过时间限制了就失败,继续搞下节点;如果加锁成功的节点数超过了一半,而且加锁花费的时间小于锁过期时间,说明加锁成功。
2025-03-22 23:37:13
130
原创 Redis String 类型的底层实现是什么?(SDS)
Redis 中的 String 类型底层实现主要基于 SDS(Simple Dynamic String 简单动态字符串,并结合 int embstr、raw 等不同的编码方式进行优化存储。1,可以进行扩容,sdshdr可以根据字符串长度的不同,有多种变体,包括sdshdr5,sdshdr8,sdshdr16等,这些变体都是为了优化内存使用和提高性能。比如sdshdr5没有单独的len和alloc字段来存储字符串长度和已分配空间的大小,因为这些信息存储在flags字段的高5位中。
2025-03-21 22:32:23
218
原创 Redis 中的缓存击穿、缓存穿透和缓存雪崩是什么?
使用互斥锁来保证同一个时间只有一个请求可以去数据库中查询并且更新缓存。或者是实现热点数据永不过期。指的是在查询一个不存在的数据,缓存中没有相应的数据每一次请求都会去数据库查询,造成数据库的缓存穿透。指的是多个缓存数据在同一个时间过期,导致大量的请求同时访问,造成数据库瞬间负载崩溃。访问数据库,这个时候,由于瞬间的高并发,可能会导致缓存击穿。指的是某一个有大量请求的数据在缓存中失效,导致大量请求直接。使用布隆过滤器和一个不存在的数据来缓存一个标识。随机的过期策略和双缓冲机制。
2025-03-21 22:21:52
177
原创 Redis 中如何保证缓存与数据库的数据一致性?
可以进行先更新数据库再删除缓存的方案,为了保证两步都可以成功执行 ,需要配合消息队列或者是订阅变更日志的方案来做,本质是通过重试的方式来保证数据的一致性。2.在更新数据库 + 删除缓存的方案中,先删除缓存再更新数据库再并发的场景下依旧有数据不一致的问题。解决方案可以选择是延迟双删。在高并发的场景下可能无法保证缓存和数据一致性,并且存在缓存资源的浪费和机器性能的浪费。
2025-03-21 22:16:49
143
原创 Redis Zset 的实现原理是什么?
跳表可以通过分数快速查找元素,而哈希表可以通过分数快速查找元素,这使得它的查询时间复杂度是O(1),其他操作时间复杂度是O(logn)。适合用于做排行榜或者是一些需要排序和快速查找的场景。redis中的ZSet是一种由跳表和哈希表组成的数据结构,ZSet结合了集合(Set)的特性和排序功能,能够存储具有唯一性的成员,并且根据成员的分数进行排序。是一个多层索引的链表,主要是通过多层链表来实现,底层链表用于保存所有元素,而每一层链表都是下一层的子集,用于存储数据的排序和快速查找。
2025-03-21 22:10:34
223
原创 Redis 的 hash 是什么?
hashtable就是哈希表的底层实现,查询时间为O(1)。在hashtable的渐进式扩容中,每一次扩容是一点点进行的,而不是一次性扩容完成。hashtable会定义两个表,在未发生扩容的时候,一个表存储数据,另一个表不分配空间。当达到扩容条件的时候,给第二个哈希表分配空间,大小为当前空间2倍的二次方幂。
2025-03-21 22:05:33
203
原创 Redis 中跳表的实现原理是什么?
跳表通过多层链表来实现,最底层包含所有元素,上层都是底层元素的跳跃索引,每一层的元素是从下一次中随机选择的,通常使用概率1/2来决定一个元素是否出现在上一层。每一个节点包含一个值和指向下一层节点的指针。redis的跳表就是在此基础上添加回退指针,score能够重复查找操作:如果目标分数小于当前节点的分数,则向下移动;如果大于,则向右移动插入操作:找到插入位置后,每一层中插入新节点,并且更新指针,新节点的指针指向原本的后继节点删除操作:查找目标节点,更新指针以跳过该节点。
2025-03-20 23:36:20
129
原创 为什么 Redis 设计为单线程?6.0 版本为何引入多线程?
答:为了解决redis数据从内核拷贝到应用空间,这一步,应用程序会阻塞,请求量大的时候,这个过程就会成为瓶颈。3.Redis 在单线程的情况下,使用 I0 多路复用模型就可以提高 Redis 的 I/O 利用率了。1.Redis 的操作是基于内存的,其大多数操作的性能瓶颈并不是 CPU 导致的。2.使用单线程模型,代码简便的同时也减少了线程上下文切换带来的性能开销。为什么redis6.0引入了多线程?
2025-03-19 23:32:33
88
原创 Redis 为什么这么快?
5.在redis6.0中,redis引入了多线程的机制,可以让网络处理请求并发进行。1.它是基于内存数据库的,数据都存与内存,内存访问的速度要远远高于硬盘,4.它提供了hash,set,list等多种高效的数据j结构。2.他是单线程模型,所有的操作都在一个线程内完成。3.在单线程的基础上运用了I/O多路复用技术。
2025-03-19 23:24:42
114
原创 Redis 中常见的数据类型有哪些?
Stream:消息队列(可以自动生成全局唯一的id,可以以消费组的形式消费数据)List:消息队列(不能生成全局唯一的id,不能以消费组的形式消费数据)String: 缓存对象,计数器,分布式锁,分布式session等。HyperLogLog:大量数据需要进行去重。Bitmap:状态统计。Hash:存储商品信息,购物车。Sorted Set:排行榜。GEO:存储地理信息。
2025-03-19 23:20:18
132
原创 记录一次Knife4j的出错:“‘<‘, “<!doctype “... is not valid”
在启动服务类之后,打开页面显示以及我一开始使用的是edge浏览器,尝试了很多方法,包括knife4j的版本问题,全局拦截器发现都无法改变错误。
2024-09-15 16:23:03
591
2
原创 Java中为什么可以多实现(接上文https://blog.youkuaiyun.com/mar1111s/article/details/142265688?spm=1001.2014.3001.5501)
Java 不支持多重继承的主要原因在于避免了多重继承带来的二义性问题和复杂性。通过使用接口和默认方法,Java 提供了一种灵活的方式来实现多态和代码复用,同时保持了代码的清晰性和可维护性。
2024-09-15 09:00:00
337
原创 提交package.json时一直显示code Analyze
出现error Delete ␍ prettier/prettier,git一直显示code Analyze
2024-08-31 09:07:20
582
2
原创 关于安装CUDA后文件夹消失的问题
这个地方才是真正的自己选择安装的位置,之前的是临时文件下载,一定不能将这两个图片的地址写一样的,因为在下载完毕之后,他会自动删除第一次的临时位置,也就导致了你的cuda文件夹位置的消失!我下载了五六遍才发现这个问题!这是安装的选择,大家根据自己的选择就好了,有vs的一定要取消这个,不然会冲突。这是一开始的安装选择文件界面,
2024-04-12 14:15:40
3714
13
原创 力扣274.H指数
对于这个题目我第一时间想的就是想给他排序,因为先从小的开始H指数来一步一步寻找,然后对于引用次数的大小来判断是否要加H指数,如果找到了一个至少H+1次的论文,我们就把原来的H指数加1。篇论文被引用的次数。计算并返回该研究者的 h。代表“高引用次数” ,一名科研人员的。篇论文被引用次数大于等于。是指他(她)至少发表了。
2024-04-10 18:17:29
479
2
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅