- 博客(22)
- 收藏
- 关注
原创 IO多路复用(Redis)
Redis 基于 Reactor 模式设计开发了一套高效的事件处理模型。其核心思想是通过 事件循环 和 事件分发 来高效地处理多个并发的网络 I/O 操作,而不需要为每个客户端请求创建独立的线程。
2025-02-22 09:30:00
532
原创 IDEA中Lombok不能使用,找不到get方法
刚刚新创建的spring boot项目无法使用Lombok,编辑的时候idea没有报错,运行的时候报错
2025-01-02 09:30:00
410
原创 分布式系统中CAP理论与BASE理论
只要是分布式系统就一定有P,而ACP理论就是说ACP不可能同时成立,只会有AP与CP。而这个AC只在单节点下存在(例如MySQL单机)。但是现代互联网项目中不可能只要AP或CP(但是某些对数据一致要求十分严格的场景比如银行转账还是要保证强一致性。CP),需要一个三者间的平衡点,让A和C都做成一下妥协,就是BASE理论。
2024-12-29 10:45:00
649
原创 Redis的持久化
1.MySQL可以保证事务中的持久性,即只要事务提交,之后无论MySQL挂了还是服务器宕机,数据都不会丢失。2.而Redis虽然也有持久化策略,但是它缺无法保证持久性,当Redis挂了,往往都会丢失一定的数据。造成这两种的区别就是它们的持久化策略不同
2024-12-27 09:00:00
891
原创 MySQL的redo log、bin log两阶段提交
两种日志的写入顺序可能导致不一致:redo log 先写:如果事务已写入 Redo Log,但 Binlog 还未写入磁盘,系统崩溃后,Binlog 丢失,导致主从复制的数据不一致。binlog 先写:如果事务已写入 Binlog,但 Redo Log 未写入,崩溃恢复后,事务数据不完整。需要MySQL 中的两阶段提交来解决
2024-12-26 09:00:00
1220
原创 MySQL的binlog
redo log是物理日志,记录的是“在某个数据页做了什么修改”,属于Innodb存储引擎。Binlog 是 MySQL Server 层提供的一种日志功能,它是 逻辑日志,记录了所有对数据库进行更改的 SQL语句(如 INSERT、UPDATE、DELETE 等)以及一些其他元数据信息。
2024-12-24 09:00:00
667
原创 MySQL的redo log
MySQL 的是一种用于保证数据库事务一致性的日志机制,属于中的一部分,它在数据库发生变更时记录事务的操作,用来在数据库崩溃时恢复数据的一致性。redo log 主要是为了解决问题,确保事务即使在发生崩溃的情况下也不会丢失。
2024-12-23 10:30:00
943
原创 MySQL的深分页问题
MySQL的深分页问题是指在使用查询时,MySQL 会扫描条记录,但只返回count条。也就是说,MySQL 需要从磁盘或缓存中读取大量数据并丢弃前offset条记录。如果offset很大,MySQL 会进行大量无效扫描,导致性能下降。这条查询需要 MySQL 扫描前 100010 条记录,丢弃前 10000 条,仅返回最后 10 条。如果表中每条记录大小为 1KB,那么 MySQL 至少要处理 10MB 的数据才能返回 10KB 的结果。
2024-12-19 09:30:00
362
原创 秒杀系统关于限流的思考
1.如果业务是微服务架构,建议使用Sentinel,它不仅限流,还能结合降级与熔断保护系统。2.如果业务是单机部署且限流规则简单,可以优先考虑。3.如果需要分布式限流,且想自己实现灵活的方案,建议使用Redis。4.如果需要在流量入口就限制,可以使用Nginx 限流。
2024-12-15 10:00:00
312
原创 MySQL扣减库存的思考
这种方式不需要显式地加锁,减少了数据库的资源占用和锁竞争,因此在低并发的场景下性能较好。而且操作比较简单,事务处理直接更新库存,逻辑清晰。但是这个方案需要每次都加锁(悲观锁),这在高并发的情况下可能性能不太好。
2024-12-14 09:30:00
241
原创 HikariPool-3 - Exception during pool initialization.
错误日志:com.zaxxer.hikari.pool.HikariPool : HikariPool-3 - Exception during pool initialization. java.sql.SQLNonTransientConnectionException: Public Key Retrieval is not allowed。程序使用了 HikariCP 作为连接池,HikariCP 在启动时尝试初始化数据库连接,但因为 JDBC URL 配置中没有启用。
2024-12-13 09:30:00
450
原创 哈希表 leetcode 242 leetcode 349
来解决,具体可以参考HashMap的底层实现,HashMap使用的是拉练法)。需要 O(m) 时间,其中 n 和 m 分别是两个数组的长度。,返回 它们的交集。输出结果中的每个元素一定是。:O(n+m) 使用了两个哈希集合,分别存储。来统计字符频率,与字符串长度无关。需要 O(n) 时间,第二次遍历。数组、Set、Map(使用哈希会有。:O(n) 只需遍历字符串一次。:O(1) 使用固定大小的数组。:O(n+m) 第一次遍历。,编写一个函数来判断。
2024-11-28 09:30:00
362
原创 相交链表 leetcode160 (代码随想录)
对于寻找两个单链表相交的起始节点问题,常用的解决方法是通过双指针法,巧妙地让两个指针同步到相交点。,请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点,返回。通过切换指针的起点,可以保证两个指针走过的路程相等,从而能够在相交点相遇。时间复杂度:O(m + n), 两个指针最多遍历链表。给你两个单链表的头节点。空间复杂度:O(1)。
2024-11-28 09:00:00
209
原创 链表 leetcode203、leetcode206 (代码随想录)
O(1):使用了常量级的额外空间,没有引入额外的辅助数据结构。两种方法的时间复杂度差不多,后一种更加容易理解。2.节点插入到新链表的头部(虚拟节点后面)。:O(n):遍历链表一次,链表长度为 n。1.如果链表为空或只有一个节点,直接返回。,请你反转链表,并返回反转后的链表。,请你删除链表中所有满足。及其后的部分已经反转,将。插入到反转后的链表末尾。1.遍历链表:使用一个。给你一个链表的头节点。3.返回新的头节点。
2024-11-27 09:30:00
480
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人