自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Redis的持久化机制

AOF重写日志会自己起一个子线程去记录恢复过程中的新数据在renameAOF文件之前合并。

2025-05-18 22:12:43 1220

原创 Redis的主从架构

Redis Cluster 是 Redis 实现“分布式+高可用”的集群方式,而 Sentinel 是在“单主结构”下提供“高可用”的方案。Cluster 更强,但也更复杂;Sentinel 更简单,但扩展性有限。

2025-05-18 22:11:46 467

原创 深入理解Mysql

为了优化Mysql的读写效率 在内存中会有一块叫BufferPool 的空间 这里面会存储很多chunk每个chunk 会存储许多控制块每个控制块会对应一块缓存页而为了维护缓存页的状态 就引入了Free链表和Flush链表这两个链表存储的都是缓存页对应的控制块Free链表: 用来存储有那些控制块是空闲的 就是没有写入数据 (可用的)Flush链表:用来存储BufferPool中哪些缓存页是有数据的脏页:缓存页中和磁盘数据不一致的就被称为脏页 会定期刷盘来同步缓存。

2025-05-10 12:20:49 906

原创 缓存击穿中的二次判断

Redisson的lock锁不是基于synchronize锁实现的 (我有这种想法也是二B 就是为了解决分布式问题所以才引入的redisson) 而是基于redis的setnx实现的 如果获取锁失败也会阻塞。POV :当热Key大量失效 大量线程请求redis未命中 开始打入数据库 此时就需要加锁来阻塞请求。二次判断提高性能的针对目标就是在线程1重构过程中打入的请求。等redis缓存重构重构后再请求。第二次判断是二次判断的核心。

2025-03-28 17:14:42 364

原创 如何实现Host文件本地跳转?(注意不要挂梯子 挂梯子失效)

本地hosts文件是一种用于域名解析的配置文件,它允许用户将特定的域名映射到指定的 IP 地址。通过这种方式,你可以实现“跳转”或重定向的功能,即将某个域名解析到本地或其他服务器地址。以下是关于如何使用本地hosts。

2025-03-28 14:17:27 1536

原创 Leetcode-01背包

转换成背包后 其实是在选负号 m=s/2是能够容纳负数的总和 c表示每次能够加入的负数。如果c<nums[i]就说明已经装不下了。

2025-03-28 11:05:22 223

原创 数据库的分库分表

分库和分表有两种模式,垂直和水平。垂直分库:电商数据库拆分为用户、订单、商品、交易等数据库。水平分库:用户数据库,拆分为多个,比如User_DB_0 - x。垂直分表:将数据库表按照业务维度进行拆分,将不常用的信息放到一个扩展表。水平分表:将用户表水平拆分,展现形式就是 User_Table_0 - x。表字段相同 数据不同。

2025-03-24 17:48:06 347

原创 如何防止用户大量使用同一用户名恶意攻击

如何防止用户大量使用同一用户名恶意攻击?

2025-03-24 16:36:45 282

原创 布隆过滤器

元素插入时会经过多重哈希 然后进入过滤器中的其中一个槽位如果这个槽位没有值(0)那么就会将这个槽位设置为1 表示有元素fn。

2025-03-24 15:55:00 774

原创 Leetcode-动态规划

例如一开始选择4不打3不打 然后进入子问题2计算得出这种走法的最大值 但是另一种情况 一开始选4 然后选2 也就是右边的子树 其实和前面43都不选后选2的子树是一模一样的 因此我们可以将这个计算后的答案记录下来 如果一种走法被记录过了就不再递归 这样就可以降低时间复杂度。从最后一家开始打 有两种情况 要么打 要么不打 打或者不打 都有可能产生最终答案。因此想到可以用回溯 在回溯的过程用max记录最大值 最后返回。但是这种写法其实重复计算了很多次。将回溯的写法一比一翻译。

2025-03-21 10:51:32 292

原创 RedoLog

WAL(write ahead logging)老板记账的时候有两个账本 专门用来记录赊账和还账的记录 一个是总账本 一个是粉本 总账本的账是非常多的 而相对的粉本主要用于临时记账 当店里生意繁忙的时候 就先用粉本先记录下来账目 到了打烊之后 再将粉本的数据 同步到总账本。1.RedoLog是其他公司Innodb以插件的形式加入的 binlog是mysql的server层实现的。这里的存储结构与redis主从节点是一样的 也是采用环形覆盖。当池子中的数据快满的时候 就将buffer的数据写入磁盘。

2025-03-19 19:08:57 369

原创 Redis哨兵模式-黑马学习笔记

如果哨兵发现主节点下限就会主观的认为主节点挂了 然后向他的队友询问 如果大多数人都认为他挂了 就判定为客观下限(指鹿为马)sentinel基于心跳机制检测主节点的状态 每个1秒向集群发送ping (三体中逻辑用来威胁三体人的心跳检测)1.如果过久没有与主节点建立数据同步 就会被哨兵判定为不合格的领袖 无法升级为主节点。用于监控主节点的健康情况 如果主节点挂掉立马选择一个从节点顶上去。2.(嫡长子继承) 如果被配置了优先级 就用不参加选举。3.根据从节点的经验判断 数据越新(能力越大)

2025-03-19 17:36:50 424

原创 关于docker部署mysql集群

在docker中的操作就是进入主库的容器然后切换目录修改文件。

2025-03-18 14:59:53 601

原创 Leetcode-回溯-组合型

题目核心是看穿本质 在代码执行过程中左括号必须大于等于右括号。还有做括号要小于n 又因为i=左+右 因此右等于i-左。并且递归path的时候采用直接覆盖的方法代替恢复现场。以及回溯最底层的递归条件是递归长度已经达到2n。这题并没有才有恢复现场的做法 而是直接覆盖。open代表左括号的数量。

2025-03-18 13:11:53 237

原创 解决数据库乱码 不显示中文

终端工具(如 PuTTY、Xshell)或操作系统的字符编码未设置为 UTF-8,导致中文无法渲染。客户端工具(如 MySQL 命令行)未指定 UTF-8 编码,导致中文显示为乱码或问号(INSERT INTO tb_user (name) VALUES ('中文测试');:客户端工具(如 MySQL 命令行)的字符集与数据库不一致,导致数据显示异常。若数据在插入时未使用正确的字符集,即使后续修改字符集,已存储的中文仍可能为乱码。确保在字符集统一后,使用正确的编码重新插入中文数据。

2025-03-16 16:09:22 2199

原创 Leetcode-回溯-子集型

在 Java 中,List是对象,path(即内存地址),而不是当前路径的“快照”。这会导致所有添加到ans中的结果实际上都指向同一个path对象。当后续回溯修改path时(比如),所有已添加到ans中的结果也会跟着被修改!最终你会看到ans中的每个子集都是空的,因为它们最终都指向同一个被清空了的path。

2025-03-16 13:07:08 601

原创 如何用Docker部署Mysql

可以通过挂载卷(Volume)将数据持久化到主机。使用 Docker 部署 MySQL 简单高效,适合开发、测试和生产环境。对于复杂场景(如多容器应用),推荐使用 Docker Compose。对于复杂场景,推荐使用 Docker Compose 管理多容器应用。确保已安装 Docker,并启动 Docker 服务。通过挂载卷和配置文件,可实现数据持久化和自定义配置。:容器内 MySQL 数据存储路径。:主机上的目录路径(需提前创建)。命令启动 MySQL 容器。),可以挂载配置文件到容器。

2025-03-15 17:26:43 4900 1

原创 LeetCode-二叉树最近公共祖先

这也太优雅了 给龟了。

2025-03-15 10:40:13 251

原创 黑马JUC学习笔记-上

这里的dao只有一份 导致userdao的connectiopn(成员方法只有一份)因此会被共享。

2025-03-14 11:35:05 1386 1

原创 二叉树-递归灵活应用

利用昨天学的自顶向下传参的机制 每次向下遍历的时候优先遍历右子树(因为题目的意思翻译过来就是是返回从右边看的第一个节点) 然后用当前遍历的深度和list个数比较(这里很巧妙)如果相同就可以加入list 不相同(就是小于)则继续遍历。直接右子树遍历到底返回list就可以了 还是想的太天真了。这题题目很有意思 返回右视图 一开始想的这不是很简单?没看完题目就写题.......

2025-03-09 13:58:43 271

原创 Leetcode-二叉树递归

并且判断当且是不是叶子节点 如果是叶子节点就把他加到答案上面 另外开一个函数的好处就是每次都能向下传递一个参数 类似于栈。可以采用自顶向下的递归 递的方式 每次都向下递 递的时候将答案进行乘加处理。感觉摸到了一点点递归的门路 在看完视频后这题写的和灵神的题解大差不差。这题求根节点到叶子节点的数字之和。这题也是同样的 灵神!

2025-03-08 11:31:44 288

原创 JVM-垃圾回收

手动置为。

2025-03-07 14:23:30 1500

原创 Leetcode-滑动窗口

想象一只毛毛虫趴在数组上 for循环遍历右边界的过程就是毛毛虫头向前运动 运动过程中窗口保持满足条件while(条件) 不满足条件就收尾 身体蜷缩 然后重复运动。这里的if判断写的是先判断是否开启维护窗口机制 如果是就先left++ 保证下面while循环不会数组越界。然后加入while开始寻找刚刚最早加入的一对重复字符 cnt--(踢出最早加入的字符对)寻找是否有更长的字符串。重申了滑动窗口的终点是维护窗口内的条件不能墨守成规。最后老实了 不得不使用HashMap来存储。

2025-03-05 11:42:30 209

原创 黑马Mybatis-plus-学习笔记

导入依赖接口继承实体类转换方式要求:1.类名与表名一致2.驼峰命名转下划线3.名为id的字段需要作为主键(一定需要id这个字段 mybatis需要找到这个主键)

2025-03-03 21:24:12 269

原创 黑马MQ-学习笔记

消息代理类似于小学做的做饭最短时间的题目 几个服务可以同时进行 在完成扣减余额和更新支付状态后 可以给消息队列发一个消息 这个流程就类似于炒菜是需要铁锅(同步) 而炒完菜就可以放入微波炉(异步)不需要我们自己去操作 而是交给消息代理。

2025-03-03 17:15:29 971

原创 Dokcer

解决pull失败问题。

2025-03-02 16:50:55 294

原创 Redis-黑马点评-总结

采用主动更新的策略1.数据库和缓存同时更新为什么要直接删除缓存而不是更新缓存:直接删除缓存可以避免处理复杂的缓存更新逻辑。例如,如果数据是通过多个键存储的,或者缓存的数据结构较为复杂(如嵌套对象),那么直接更新这些缓存可能会比较困难和容易出错。而删除缓存则相对简单得多,只需要移除旧的缓存项即可。:当数据库和缓存同时存在时,确保两者之间的一致性是一个挑战。采用先更新数据库再删除缓存的方式,可以减少数据不一致的情况。

2025-03-02 16:04:47 1570

原创 Redis—黑马点评-用户签到

【代码】Redis—黑马点评-用户签到。

2025-03-01 14:01:04 271

原创 Redis-HmDP-个人博客

由于前面在Nginx开了轮训因此 今天开发的时候也需要开两台服务器 不然会有登录问题@TableField 表明这个字段不属于blog所对应的表优雅函数式接口(接受一个参数且无返回值的函数)

2025-02-28 14:21:29 437

原创 Redis-黑马点评-分布式锁

在单体结构下 前面实现的锁是对于单个JVM的对象的锁但如果是集群情况 有多个服务器 多个JVM 他的锁监视器就只能监视本服务器的线程因此需要使用分布式锁 在外部添加锁监视器基于Redis实现分布式锁整体思路:尝试获取锁失败->直接返回不允许重复下单成功->返回优惠券订单id锁的对象 是锁用户 因此使用useridredis语句: set PREFIX(key) value ex nx time(锁释放时间 超时时间)

2025-02-26 16:10:25 515

原创 Redis—黑马点评-优惠券秒杀

举个例子:在一个黑屋中有很多的密闭通道(多线程) 而终点只有一个 并且只容纳一个人的重量(数据库) 每个人有一次点灯机会照亮自己的通道 (查询) 多个人同时点灯发现数据库还有库存 于是同时跑向终点 终点超重(数据库超卖)而在createVoucher事务提交之前 其他的线程依然可以进入 查询发现没有这个用户id 因此任然存在线程安全问题。而不是上面的create订单中 严格的像是高考安检。由于toString的底层是new一个新的字符串。因此锁应该加在创建订单上。同一用户通过脚本高并发。

2025-02-26 12:55:28 380

原创 Redis-黑马点评-商家缓存

直接查询数据库 效率低使用Redis:整体逻辑:首先根据传入的id 查询redis若存在 则直接返回给前端 注意将查询的对象转换成Json格式若不存在则查询数据库数据库也不存在则返回错误 404若存在 则先将shop存在redis 注意shop类型向JsonStr的转换返回给前端。

2025-02-24 13:12:51 394

原创 Redis-黑马点评-短信登录

首先要提交手机号和验证码 验证码校验成功后就回根据手机号查询用户--若存在: 保存用户到session--不存在: 创建新用户 然后保存到session请求体要携带cookie 从而获取session在微服务架构中,当一个请求到达服务器时,它会被分配到一个独立的工作线程进行处理。为了确保线程安全性,并避免多线程并发问题,我们可以使用ThreadLocal来存储用户令牌等信息。ThreadLocal是一种线程域对象,它为每个线程提供了一个独立的存储空间,用于保存该线程独有的数据。

2025-02-19 19:56:19 735

原创 黑马点评 Bug日志

数据库服务器的端口号,MySQL默认端口是。: 数据库服务器的主机名或IP地址。: 可选的连接参数,用于配置连接行为。: 要连接的数据库名称。

2025-02-19 18:45:34 322

空空如也

空空如也

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

TA关注的人

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