自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Redis内存淘汰机制

内存总是有限的,因此当 Redis 内存超出最大内存时,就需要根据一定的策略去主动的淘汰一些 Key,来腾出内存,这就是内存淘汰策略。我们可以在配置文件中通过 maxmemory-policy 配置指定策略。与到期删除策略不同,内存淘汰策略主要目的则是为了防止运行时内存超过最大内存,所以尽管最终目的都是清理内存中的一些 Key,但是它们的应用场景和触发时机是不同的。noeviction,不淘汰任何 key,直接报错。它是默认策略。

2025-08-01 17:14:57 895 1

原创 【Java面试题】缓存穿透

缓存穿透是指当秒杀请求在Redis中未命中缓存时,系统会转而查询数据库。若数据库中也不存在该数据,大量此类请求将直接冲击数据库,造成数据库负载激增。布隆过滤器是一种数据结构,用于快速判断一个元素是否存在于一个集合中。它以牺牲一定的准确性为代价,换取了存储空间的极大节省和查询速度的显著提升。布隆过滤器是由一个位数组和一组哈希函数组成,当将数据存入数据库时,会先通过一组哈希函数,计算出该数据对应的哈希数值,再通过取模,将对应位数组的相应位置改为1。从而将数据进行标记。

2025-08-01 16:11:23 296 11

原创 【Java面试题】缓存击穿

缓存穿透是指当我们访问数据时会先查询redis缓存,如果有返回数据,如果没有查询数据库,这是正常的数据访问流程。但是当我们redis中的缓存数据过期失效的话,数据就会直接去查询数据库。当大量请求去访问这个数据的话,就会对数据库造成巨大压力。(热点key失效问题)

2025-07-30 18:09:43 413 4

原创 【Java面试题】面向对象

面向对象是一种编程范式,它将现实世界中的事物抽象为对象,对象具有属性(称为字段或属性)和行为(称为方法)。面向对象编程的设计思想是以对象为中心,通过对象之间的交互来完成程序的功能,具有灵活性和可扩展性,通过封装和继承可以更好地应对需求变化。Java面向对象的三大特性包括封装、继承、多态封装:封装是指将对象的属性(数据)和行为(方法)结合在一起,对外隐藏对象的内部细节,仅通过对象提供的接口与外界交互。封装的目的是增强安全性和简化编程,使得对象更加独立。

2025-07-29 18:09:56 588 9

原创 【Java基础面试题】Java特点,八种基本数据类型

基本数据类型的局部变量存放在 Java 虚拟机栈中的局部变量表中,基本数据类型的成员变量(未被 static 修饰 )存放在 Java 虚拟机的堆中。:相比于包装类型(对象类型), 基本数据类型占用的空间往往非常小。:对于基本数据类型来说,比较的是值。这八种基本类型都有对应的包装类分别为:Byte、Short、Integer、Long、Float、Double、Character、Boolean。:除了定义一些常量和局部变量之外,我们在其他地方比如方法参数、对象属性中很少会使用基本类型来定义变量。

2025-07-28 17:46:20 658 7

原创 【RocketMQ】一分钟了解RocketMQ

RocketMQ 是一个开源的分布式消息中间件,由阿里巴巴开发并贡献给 Apache 软件基金会。它主要用于高吞吐量、低延迟的消息传递需求。RocketMQ 的优点和功能是比较多的,以下是 一些主要特点和功能:高吞吐量和低延迟:RocketMQ 设计用于处理大量的消息,并提供低延迟的消息传递服务,适合需要高性能的场景。分布式架构:RocketMQ 使用分布式架构来支持大规模的消息传递。它可以水平扩展,以处理更大的数据量和更高的并发需求。

2025-07-26 18:18:47 1033 10

原创 【分布式锁】什么是分布式锁?分布式锁的作用?

分布式锁是一种用于在分布式系统中协调多个节点对共享资源的访问的机制。它确保在多个节点并发访问时,只有一个节点可以在某个时刻拥有特定资源的访问权,从而避免数据不一致、竞争条件或资源冲突的问题。常用的实现方式有Redis,Zookeeper。我们这篇主要讲解Redis.

2025-07-24 17:38:00 410 9

原创 设计模式——责任链模式

摘要:责任链模式是一种设计模式,它将请求沿处理链传递,直到被某个对象处理。发送者无需知道具体处理者,每个处理者都可尝试处理或传递请求。例如请假审批流程:短假由项目经理处理,长假则依次传递给副经理或总经理。代码示例展示了领导处理5天内请假,超过则由上级处理的实现逻辑,通过设置nextHandler形成处理链。该模式实现了请求与处理者的解耦。

2025-07-22 18:38:12 273 1

原创 leetcode-hot100(283.移动零)

我们定义左右指针,左指针代表已经处理好的数组的尾部,右指针代表未处理数组的头部。如果右指针所指向的元素不为0,则与左指针代表的元素交换位置。并且左右指针都向后移动一位。否则不交换元素,并且只有右指针向右移动一位。我们可以直接遍历整个数组,将非0元素赋值给另一个数组,之后再在该数组后面补0。

2025-07-11 15:52:49 227 1

原创 Mysql—锁相关面试题(全局锁,表级锁,行级锁)

如果2个范围查询的字段不是索引的话,那就代表 update 没有用到索引,这时候触发了全表扫描,全部索引都会加行级锁,这时候第二条 update 执行的时候,就会阻塞了。因为如果 update 没有用到索引,在扫描过程中会对索引加锁,所以全表扫描的场景下,所有记录都会被加锁,也就是这条 update 语句产生了 4 个记录锁和 5 个间隙锁,相当于锁住了全表。会,因为 InnoDB 存储引擎实现了行级锁。当A事件对id=1这行数据进行update操作时,会对主键为1的记录添加x类型的记录锁。

2025-06-22 19:02:07 509 4

原创 Mysql索引

索引类似于一本书的目录,它可以提高我们的查询效率。如果没有使用到索引,那么就会进行全表查询,如果使用了索引就会基于二分查找算法快速找到数据。索引的数据结构一般是B+Tree。

2025-06-21 18:52:18 314 2

原创 redis集群

当 Redis 缓存数据量大到一台服务器无法缓存时,就需要使用 Redis 切片集群(Redis Cluster )方案,它将数据分布在不同的服务器上,以此来降低系统对单主节点的依赖,从而提高 Redis 服务的读写性能。

2025-06-16 14:38:53 301 2

原创 leetcode HOT 100(128.连续最长序列)

这道题我们可以判断每个数current_num是否存在current_num-1,如果存在说明他不是开头数字,如果不存在说明他是开头数字,接下来再用while(current_num+1)遍历是否存在他后面的一个数字,如果存在,那么连续长度+1.

2025-06-13 14:06:41 451 2

原创 Redis哨兵机制

当我们的主服务器挂了,那么该怎么办呢?这时候就用到了哨兵机制,他负责监控主服务器,当主节点挂了的时候,他就会在从节点里选择一个作为新的主节点,并将旧的主节点变为从节点。

2025-06-12 20:24:42 457

原创 leetcode HOT100(49.字母异位词分组)

leetcode HOT100 49.字母异位词分组

2025-06-12 16:58:51 238

原创 Redis分布式缓存(RDB、AOF、主从同步)

当AOF文件过大时会触发重写机制,简单来说就是会读取数据库中的键值对数据,然后将每个键值对用一条命令记录到AOF文件中,将重复的命令合成为一个命令,全部完成后,再将新的AOF文件替换掉旧的AOF文件,比如。:主进程创建重写AOF的子进程,父子进程共享物理内存,重写子进程对这个内存为只读,重写子进程会读取数据库里的所有键值对,将每个键值对转化为一条命令。RDB快照又叫做Redis数据快照,简单来说就是,将数据记录到磁盘中,当Redis发生故障重启后,可以根据快照文件进行数据回复。RDB会在什么时候执行?

2025-06-11 20:02:32 1649 1

原创 Redis相关知识总结(缓存雪崩,缓存穿透,缓存击穿,Redis实现分布式锁,如何保持数据库和缓存一致)

redis是基于内存读写的数据库,因此它的读写速度非常快。常用于缓存、队列、分布式锁等场景。Redis中还有很多数据结构类型:String 、Set、 Hash、 List、ZSet(有序集合)、Bitmaps(位图) HyperLogLog(基数统计)、GEO(地理信息)、Stream(流)。我们将数据存入到redis当中,之后的每次请求都先去redis当中找是否存在数据。从而提高了查询速度也降低了数据库的压力。为了保证redis和数据库的数据一致性,我们通常会给其设置过期时间。

2025-06-10 17:56:42 6398 6

原创 黑马点评开发日记-用户签到

我们可以先获取本月到目前为止的所有签到记录,返回一个十进制数字。我们可以让它与1做与运算,得到该数字的最后一位。判断最后一位是否为0,为0则终止,为1则计数器+1,继续便利。把每一个bit位对应当月的每一天,形成了映射关系。用0和1标示业务状态,这种思路就称为位图(BitMap)。这样我们就用极小的空间,来实现了大量数据的表示。我们按月来统计用户签到信息,签到记录为1,未签到则记录为0.我们可以采用类似这样的方案来实现我们的签到需求。,转换为bit则是 2^32个bit位。

2025-06-10 14:36:18 673 1

原创 黑马点评开发日记-好友关注和取关,共同关注

推拉模式是一个折中的方案,站在发件人这一段,如果是个普通的人,那么我们采用写扩散的方式,直接把数据写入到他的粉丝中去,因为普通的人他的粉丝关注量比较小,所以这样做没有压力,如果是大V,那么他是直接将数据先写入到一份到发件箱里边去,然后再直接写一份到活跃粉丝收件箱里边去,现在站在收件人这端来看,如果是活跃粉丝,那么大V和普通的人发的都会直接写入到自己收件箱里边来,而如果是普通的粉丝,由于他们上线不是很频繁,所以等他们上线时,再从发件箱里边去拉信息。:利用智能算法屏蔽掉违规的、用户不感兴趣的内容。

2025-06-09 17:57:49 673

原创 黑马点评开发日记-达人探店(发布笔记,查看笔记,点赞,点赞排行榜)

探店笔记类似点评网站的评价,往往是图文结合。tb_blog:探店笔记表,包含笔记中的标题、文字、图片等。tb_blog_comments:其他用户对探店笔记的评价。把前一节中的 对set 的操作都先改为对 zset 的操作。

2025-06-08 19:59:16 293 1

原创 黑马点评开发日记-Redis消息队列

什么是消息队列:字面意思就是存放消息的队列。最简单的消息队列模型包括3个角色:这存在一些现成的mq,比如kafka,rabbitmq等等,但是呢,如果没有安装mq,我们也可以直接使用redis提供的mq方案,降低我们的部署和学习成本。基于List结构模拟消息队列消息队列(Message Queue),字面意思就是存放消息的队列。而Redis的list数据结构是一个双向链表,很容易模拟出队列效果。队列是入口和出口不在一边,因此我们可以利用:LPUSH 结合 RPOP、或者 RPUSH 结合 LPOP来实现。

2025-06-08 17:21:35 733 1

原创 黑马点评开发日记-优惠券秒杀优化

我们来回顾一下下单流程当用户发起请求,此时会请求nginx,nginx会访问到tomcat,而tomcat中的程序,会进行串行操作,分成如下几个步骤1、查询优惠卷2、判断秒杀库存是否足够3、查询订单4、校验是否是一人一单5、扣减库存6、创建订单其中里面很多操作都是而且还是一个执行, 这样就会导致我们的程序执行的很慢,所以我们需要异步程序执行。我们可以将库存信息存入到redis当中然后在redis中去实现判断库存是否充足,校验一人一单。

2025-06-08 15:41:00 343

原创 黑马点评开发日记-优惠券秒杀(悲观锁,乐观锁,分布式锁,Redisson)

Override//查询优惠券信息//判断秒杀是否开始//未开始return Result.fail("秒杀尚未开始");//已经结束return Result.fail("秒杀已经结束");//判断库存是否充足return Result.fail("库存不足");//6.一人一单//用户id//6.1查询订单//6.2判断用户是否已经购买过了//购买过了return Result.fail("您已经购买过了");//扣减库存.update();if (!

2025-06-07 17:17:20 1215 3

原创 黑马点评开发日记-商铺缓存(缓存穿透,缓存雪崩,缓存击穿)

黑马点评开发日记-店铺缓存(缓存穿透,缓存雪崩,缓存击穿)

2025-06-02 15:27:44 765 3

原创 黑马点评开发日记-短信登录

黑马点评开发日记-短信登录验证

2025-06-01 16:14:07 287

原创 经典算法题——迷宫问题(详解)

迷宫问题

2025-03-02 22:01:59 266 1

原创 蓝桥杯——奇怪的捐赠(进制的转换)

但是还有没有更加优雅的解题方法呢?我们可以想到假如有一个1234这个数为7进制数,那我们怎么把它转化为10进制呢?很明显1∗1+2∗7+3∗49+4∗343。由此我们可以想到可以把100万转化为7进制得到的每一位相加就可以得到答案了。题目要求将100万正好分成若干份,并且要求每份必须是7的若干次方。我们可以直接暴力求解,我们可以大致估算一下7的7次方就已经80多万了,所以我们直接7层循环,从0到5遍历,看哪一种情况刚好满足。

2025-02-27 17:36:50 225

原创 蓝桥杯真题——回文字符串

找到该字符串中第一个非关键字和最后一个非关键字的位置,之后分别向内向外扩散,向内扩散时left(第一个非关键词)<=right(最后一个一个非关键词)并且s[left]=s[right]否则跳出循环,向外扩散时l>0并且s[l]=s[r],最后判断是否全部遍历完全,如果遍历完全说明可以成为回文字符串。

2025-02-26 22:45:52 459

原创 蓝桥杯真题——班级活动

小明的老师准备组织一次班级活动。班上一共有 n 名 (n 为偶数) 同学,老师想把所有的同学进行分组,每两名同学一组。为了公平,老师给每名同学随机分配了一个n 以内的正整数作为id,第i名同学的id为ai老师希望通过更改若干名同学的 id 使得对于任意一名同学 i,有且仅有另一名同学 j 的 id 与其相同 (a i =a j )。请问老师最少需要更改多少名同学的 id?

2025-02-24 18:21:34 373

原创 算法练习:海盗分金问题(约瑟夫问题)

每一个恶魔都非常的贪婪,渴望得到尽可能多的金币,同时每一个恶魔又都非常的狡猾,他们都会选择对自己最有利的情况进行投票。否则,该方案不会被执行。如果方案没有被执行,那么提出方案的恶魔老大将会被恶魔们杀死,他不配成为恶魔老大。剩下恶魔中编号最小的恶魔将会成为新的恶魔老大,然后重新按照上述规则,重新由新的恶魔老大提出新的方案进行操作,直到剩下最后一个恶魔或者有一个恶魔老大的方案被同意执行,那么分配结束。现在让你作为编号为1的恶魔,你是恶魔老大,请问聪明的你要怎么样才能让自己在不被杀死的情况下获得最多的金币呢。

2024-08-09 17:15:23 657 2

原创 C语言判断一个数是否是素数(三种方法)

大一c语言作业,判断是否为素数

2024-08-09 17:00:09 8615 2

原创 C语言猜数游戏详解(含生产随机数rand函数,以及关机代码)

看到这就结束了,可以把代码发给你那懂一点点代码的怨种朋友让他玩猜数游戏了。

2023-12-09 13:07:57 618 3

原创 C语言入门:分支和循环(if, switch...case ,while,do.....while, for的用法 )

到这里我所介绍的分支与循环语句就结束了,希望可以帮到各位。要想熟练掌握分支与循环语句,仅仅学会简单的基本语句是不能掌握的,最重要的还是要多敲代码多刷题。我想要告诉大家努力终有回报的。

2023-12-09 10:50:27 195 1

原创 介绍如何使用markdown在CSDN中写博客(超详细)

讲到这里这篇博客到这里就结束了,希望这篇博客可以帮到大家。还有更多markdown的用法等着我们自己去发现和使用,希望大家能够学会并熟练掌握markdown语法。对这篇文章表示支持和赞美↩︎。

2023-12-03 15:06:06 242 1

原创 写给2023年八月份刚接触到c语言的自己(介绍最简单的c语言 hello,world的程序编写,格式及作用)

首先,当我第一次编写这个程序时,看着书很容易就写出来了,但是每一行代码的作用我都不懂,问一些学长他们告诉我让我记得这是写它的格式,让我先死记住,以后学习的过程中就慢慢的懂了。1.第一行代码 #include<stdio.h>是调用系统中的库函数的作用<>中填入各种库函数的名称,比如还有数学函数math.h等等。4.第四行printf是print 和format的组合,作用是输出" "中的内容。而 \n 是换行符,是用来换行的。就这些了,希望可以帮到更多像以前的我一样想要知道各个代码的意义的朋友。

2023-11-16 11:37:35 105

空空如也

空空如也

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

TA关注的人

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