- 博客(36)
- 收藏
- 关注
原创 【业务场景设计】超时时间和用户等待支付时间的关系
说到超时订单,可能大多数人的想到就是能够实现超时处理的那些技术,比如说RabbitMQ、Redis的延时队列。对于Redis的延时队列的实际使用我并不是特别了解,因为它并不常用,而且有着较大的弊端(八股文上说的)。那我们就说说RabbitMQ,RabbitMQ本身并不支持延时队列,但可以用TTL+死信队列来模拟延时队列的实现TTL:过期时间,消息在队列中的超时时间死信队列:一个正常的队列,只不过它专门用来处理上一个队列中被拒绝、超时的消息。延时队列的模拟:创建队列A、B。
2025-03-27 11:22:17
565
原创 分布式任务调度
我们可以思考⼀下下⾯业务场景的解决⽅案:某电商平台需要每天上午10点,下午3点,晚上8点发放⼀批优惠券某银⾏系统需要在信⽤卡到期还款⽇的前三天进⾏短信提醒某财务系统需要在每天凌晨0:10分结算前⼀天的财务数据,统计汇总以上场景就是任务调度所需要解决的问题任务调度是为了⾃动完成特定任务,在约定的特定时刻去执⾏任务的过程Elastic-Job是⼀个分布式调度的解决⽅案,由当当⽹开源,它由两个相互独⽴的⼦项⽬Elastic-job-Lite和。
2025-03-20 22:06:08
798
原创 【业务场景实战】数据增量同步
时间过得真快,又是一年求职季,再过几个月我也要找暑假实习了,最近比较慢,所有博客文章落灰很久了。今天我们来讲讲关于数据同步。在一些比较大、用户量比较多、实时性要求比较高的的系统中,我们通常需要进行数据同步。这不只是为了提高系统的并发量,降低数据库访问的压力,提升用户的体验。同时也是为了让系统能够稳定运行,满足特定的场景需求。对于一些购物网站实时性和稳定性的要求是非常高的。
2025-03-13 18:46:59
879
原创 【业务场景实战】JWT实现用户登录
JWT(全称JSON WEB Token):是实现token的机制。,是一种用于安全传输信息的紧凑、URL安全的令牌格式,通常用于身份验证和授权。
2024-11-20 19:57:45
1053
原创 【项目设计技巧】客户端SDK的开发
大家好,我是仰望-星空~~,好久不见,我的文章都断更快一个月了(😅),这段时间我一直在做新的项目,然后考驾照的事情也是让我心烦不已,连学校的课都落下不少,主要还是做项目对我更加有吸引力。话不多说,进入今天的正题。。。。
2024-11-16 21:56:55
1010
原创 【业务场景实战】API签名认证
在开发项目的时候,我们通常需要调用其他的接口服务来实现我们想要的功能,就比如说AI接口的调用,我们是不是要登录星火大模型创建一个AI服务,然后系统就会为你生成一个AccessKey和SecretKey,这个AK\SK就是我们调用接口的通行证。API 签名认证就是一个许可证为什么需要?保证安全性不能随便一个人就能调用,如何实现?通过 HTTP request header 头传参参数1:accessKey:调用的标识(尽量复杂)参数2:secretKey:密钥。
2024-10-19 15:16:40
1221
原创 【业务场景实战】一篇文章告诉你,记住密码有多重要
大家好,今天是端午节,很不高兴以这种方式见面,没办法啊!单身狗就是这么惨!/(ㄒoㄒ)/~~今天我讲的是关于接口重试的问题。之前我写过重试机制、接口限流和防重复提交的文章。但今天所讲的重试和之前不同。相信大家都遇到过输入网站密码和用户名,如果没输入对就需要重新输入。但有些网站不一样,比如银行、一些比较高级的网站,如果你输入密码错误超过三次就会被强制锁定,不能再次输入密码,需要等待一天或者一段时间后才能再次输入。
2024-09-14 22:53:19
854
原创 【业务场景实战】我等你10秒
今天是个特殊的日子啊。9月1日开学的日子,其实我30号就到学校了,刚来一个新的学校还挺不适应的,这几天都摆烂了/(ㄒoㄒ)/~~。明天就要正式上课了,这新学校课还挺多。不扯了,下面进入今天的正题!今天讲讲MQ中的延时队列延时队列在我们日常生活中也是比较常见的比如说:下单,在你点击下单前,如果没有及时付款,订单会为你保留10分钟,十分钟之后如果还没付款,订单就会消失了。比较常见的就是淘宝、订火车票这种场景。还有预定会议后,需要在预定的时间点前十分钟通知各个与会人员参加会议。那这种如何用延迟队列来实现呢?下面来
2024-09-01 15:54:44
1152
原创 【业务场景实战】别再提交了/(ㄒoㄒ)/~~
/*** 锁定时间* @return 锁定时间,默认是3 TimeUnit 默认是秒*//*** 时间单位(时分秒等)* @return 单位*/自定义注解:设置两个参数,一个是锁定时间,指的是在提交之后给提交的标识设置的超时时间,另一个是时间单位。
2024-08-19 10:26:32
820
原创 【业务场景实战】请允许我再试一次!
Spring Retry是Spring框架自带的一种功能,它实现了一套简洁实用的重试机制。该机制具有间隔重试、包含异常、排除异常和控制重试频率等特点。此功能是从Spring Batch 2.2.0版本独立出来的,主要负责实现重试和熔断策略。在实际工作中,重新处理某些任务是一个常见的需求,例如:消息发送失败、远程服务调用失败或锁争抢失败等。这些错误可能是由于网络波动造成的,稍后重试就有可能成功。通常的做法是使用try/catch或while循环进行重处理,但这种方法缺乏统一性且不太方便。
2024-08-18 14:36:55
492
原创 【业务场景实战】你知道布隆过滤器怎么用吗?
布隆过滤器是一个非常神奇的数据结构,通过它我们可以非常方便地判断一个给定数据是否存在于海量数据中。我们可以把它看作由二进制向量(或者说位数组)和一系列随机映射函数(哈希函数)两部分组成的数据结构。相比于我们平时常用的 List、Map、Set 等数据结构,它占用空间更少并且效率更高,但是缺点是其返回的结果是概率性的,而不是非常准确的。理论情况下添加到集合中的元素越多,误报的可能性就越大。并且,存放在布隆过滤器的数据不容易删除。
2024-08-16 20:59:07
1114
1
原创 【业务场景实战】如何优雅地进行缓存预热?
从Java基础到中间件再到微服务,我们学了这么多,但遇到真实项目的时候,还是不会根据所学知识,对项目进行改造;或者太久不用早已忘记。学会用才是走得更远!缓存穿透、雪崩,大家都不陌生,但其中针对的解决方案,有自己手动去实现过吗?下面带大家去实现一下!
2024-08-15 22:21:30
1062
原创 基于我自己逻辑下的Redis短信登录
当注册完成后,用户去登录会去校验用户提交的手机号和验证码,是否一致,如果一致,则根据手机号查询用户信息,不存在则新建,最后将用户数据保存到redis,并且生成token作为redis的key,当我们校验用户是否登录时,会去携带着token进行访问,从redis中取出token对应的value,判断是否存在这个数据,如果没有则拦截,如果存在则将其保存。这里缺少一步 ,除了登录、注册,我们还需要先获取用户登录状态,记录用户的登录状态,避免用户重复登录,减少数据库访问压力。而只有变成自己的东西,才能真正掌握。
2023-11-20 13:26:17
155
原创 【黑马点评】UV统计
UV:全称Unique Visitor,也叫独立访客量,是指通过互联网访问、浏览这个网页的自然人。1天内同一个用户多次访问该网站,只记录1次。PV:全称Page View,也叫页面访问量或点击量,用户每访问网站的一个页面,记录1次PV,用户多次打开页面,则记录多次PV。往往用来衡量网站的流量。通常来说UV会比PV大很多,所以衡量同一个网站的访问量,我们需要综合考虑很多因素,所以我们只是单纯的把这两个值作为一个参考值。
2023-11-03 10:38:43
364
原创 【黑马点评】用户签到
我们针对签到功能完全可以通过mysql来完成,比如说以下这张表用户一次签到,就是一条记录,假如有1000万用户,平均每人每年签到次数为10次,则这张表一年的数据量为 1亿条我们如何能够简化一点呢?其实可以考虑小时候一个挺常见的方案,就是小时候,咱们准备一张小小的卡片,你只要签到就打上一个勾,我最后判断你是否签到,其实只需要到小卡片上看一看就知道了。
2023-10-31 20:00:24
137
原创 【黑马点评】附近商户
图示:当我们点击美食之后,会出现一系列的商家,商家中可以按照多种排序方式,我们此时关注的是距离,这个地方就需要使用到我们的GEO,向后台传入当前app收集的地址(我们此处是写死的) ,以当前坐标作为圆心,同时绑定相同的店家类型type,以及分页信息,把这几个条件传入后台,后台查询出对应的数据再返回。
2023-10-11 16:04:07
190
原创 【黑马点评】好友关注
功能对应的接口地址:尝试关注用户是否关注用户对应数据库表:tb_follow实现思路:需求:基于该表数据结构,实现两个接口:关注是User之间的关系,是博主与粉丝的关系,数据库中有一张tb_follow表来标示:注意: 这里需要把主键修改为自增长,简化开发。Controloller层FollowController类实现接口FollowserviceImpl类3、结果:查询是否关注关注成功取消关注如果我和对方关注了相同的人就会出现共同关注好友显示想要去看共同关注的好友,需要首先进入到这个页面,这
2023-09-14 20:11:09
215
1
原创 你感到焦虑吗?
关于焦虑,也许大家并不陌生,我们存在着很多方面的焦虑,但这里我们谈谈工作方面的焦虑,因为这是我们即将需要面对的现实,我还是大学生,并没进入过社会,但我的学习圈子,他们有部分已经入职实习,有部分和我一样,也即将步入职场。,有很多努力上进的同龄人,即使学了这么多的技术,也有了几个能拿出手的项目,也还是在这条路上屡屡碰壁。但焦虑归焦虑,别人不会因为你焦虑而同情你,面试官更不不会因为你的焦虑而放水,路还是得走,人总得往前看,日子即便再苦也总得过!不少入职的同学也表示,公司的工作太无聊了,自己学不到什么,想离职。
2023-09-07 10:39:19
119
1
原创 【黑马点评】达人探店
探店笔记类似点评网站的评价,往往是图文结合。对应的表有两个:tb_blog:探店笔记表,包含笔记中的标题、文字、图片等tb_blog_comments:其他用户对探店笔记的评价根据找到对应的上传接口对应数据库表:tb_blog。
2023-09-05 20:35:24
255
1
原创 【黑马点评】分布式锁
利用set nx ex获取锁,并设置过期时间,保存线程标示释放锁时先判断线程标示是否与自己一致,一致则删除锁特性:利用set nx满足互斥性利用set ex保证故障时锁依然能释放,避免死锁,提高安全性利用Redis集群保证高可用和高并发特性。
2023-08-28 17:33:53
341
3
原创 【黑马点评】优惠券秒杀
每个店铺都可以发布优惠券:当用户抢购时,就会生成订单并保存到这张表中,表结构:业务场景分析:场景分析一:如果我们的id具有太明显的规则,用户或者说商业对手很容易猜测出来我们的一些敏感信息,比如商城在一天时间内,卖出了多少单,这明显不合适。场景分析二:随着我们商城规模越来越大,mysql的单表的容量不宜超过500W,数据量过大之后,我们要进行拆库拆表,但拆分表了之后,他们从逻辑上讲他们是同一张表,所以他们的id是不能一样的, 于是乎我们需要保证id的唯一性。以上问题可以通过全局ID生成器来解决。
2023-08-26 10:09:24
211
原创 API 接口防刷(接口请求次数限制)
创建自定义的注解请求限制的自定义注解@Target 注解可修饰的对象范围,ElementType.METHOD 作用于方法,ElementType.TYPE 作用于类(ElementType)取值有:1.CONSTRUCTOR:用于描述构造器2.FIELD:用于描述域3.LOCAL_VARIABLE:用于描述局部变量4.METHOD:用于描述方法5.PACKAGE:用于描述包6.PARAMETER:用于描述参数7.TYPE:用于描述类、接口(包括注解类型) 或enum声明。
2023-08-19 21:31:37
1859
原创 【黑马点评】基于Redis实现短信验证登录
首先我们要思考一下利用redis来存储数据,那么到底使用哪种结构呢?由于存入的数据比较简单,我们可以考虑使用String,或者是使用哈希,如下图,如果使用String,同学们注意他的value,要多占用一点空间,如果使用哈希,则他的value中只会存储他数据本身,如果不是特别在意内存,其实使用String就可以啦。
2023-08-14 15:10:03
618
原创 【黑马点评】基于session实现短信登录
访问之前都要先校验用户的登录状态,用户的请求直接访问controller实现这一段逻辑,那随着业务的增加,每个controller都来执行这段逻辑太过麻烦,所以,这里定义了一个拦截器,这样用户请求就不是直接访问controller,所有的请求都必须先经过这个拦截器,再由拦截器放行,将请求发送给controller,拦截到的信息需要受到保护,然后发送给controller。
2023-08-05 21:11:05
457
1
原创 【用户登录与注销】你真的懂登录吗?
我记得我刚刚接触数据库 MySQL 的时候,老师最常让我们做的作业就是学生管理系统的注册和登录。当时我还没学过MyBatis,也不知道有 Mybatis-Plus ,只会一点 JDBC ,连代码都不记得,需要网上搜寻一遍。那时候,我以为的注册登录自然就是将用户数据写入数据库,然后将查询数据和输入的数据进行比对实现登录。不过,我越学到后面越发现注册登录并没有我想的这么简单!举个例子:用户从一个网站登录,我们首先需要校验他是否注册过;
2023-07-27 09:30:07
919
原创 【版本控制Git】远程仓库的拉取与推送
git是一个版本控制工具,可以帮你管理你的文件。举个例子:你写了几篇文章,写完了人出去浪了。结果有人故意搞你,把你的文章内容给改了,而你又不知道改了多少,改了哪里,这就很麻烦了。但如果你用了git,你写完后记得提交,无论别人怎么改,你只需要回滚一下就可以,回到最初的状态。而像 GitHub 和 Gitee 的远程仓库则可以在线查看和修改我们的文件。这里我以码云(https://gitee.com/)为例,它相比 GitHub 更稳定一些。设置本机绑定SSH公钥,实现免密码登录。
2023-07-07 10:44:07
2746
1
原创 【Springboot实战】如何发送短信验证
阿里云注册短信服务似乎会送一些免费的额度,这波又被我白嫖到了😁😁😁90条短信,做测试足够了第三方短信服务运营商这里我白嫖阿里的进入阿里云官网并登录,顶部搜索短信服务登录选择国内消息菜单,首先添加短信签名,用于标识短信发送者的身份其次申请短信模板,用于定义发送短信的内容格式。短信模板的内容就自己定义,规则自己多看看,这里我就不说了,我也两次没通过😵💫😵💫签名和模板需要等待大概一个多小时的时间这里我添加了两个模板。
2023-06-28 23:06:45
4710
5
原创 SpringBoot发送邮件
学习springboot如何整合javamail发送邮件。学习邮件发送之前先了解3个概念,这些概念规范了邮件操作过程中的标准。SMTP(Simple Mail Transfer Protocol):简单邮件传输协议,用于电子邮件的传输协议POP3(Post Office Protocol - Version 3):用于电子邮件的标准协议IMAP(Internet Mail Access Protocol):互联网消息协议,是POP3的替代协议。
2023-06-18 17:17:37
697
1
原创 消息队列RabbitMQ的安装和简介
MQ简称消息队列,是在消息传输过程中保存消息的容器。多用于分布式系统间的通信MQ:消息列队,消息中间件分布式系统通信的两种方式:远程调用和第三方间接通信发送方——生产者,接收方——消费者。
2023-06-12 19:52:01
713
原创 学习之路漫漫
上次我写了《身为大学生的你,还在摆烂吗》,想必大家看了这篇文章后,都或多或少有的一些感触吧。所以这篇文章我打算和大家来聊聊关于如何制定学习计划,并完成它?
2023-05-29 09:57:29
285
1
原创 Springboot基础知识
所有springboot项目都要继承的项目,定义了若干个依赖版本号(依赖管理),减少依赖版本冲突。如今的Java项目只是在自己的电脑上运行,如果程序脱离了该电脑,服务器是没法访问。5、在运行jar文件时,可能会出现端口占用,导致程序运行失败。上述行为是约束方式,不是规范,可以打破,不是REST规范。是boot工程的执行入口,运行main方法启动工程(
2023-05-26 20:26:52
230
1
原创 版本控制Git,你了解多少
Git是一个开源的分布式版本控制系统,可以有效、高速地处理从很小到非常大的项目版本管理。在团队开发中git是必不可少的,它是目前为止最流行的工具。
2023-05-16 21:39:03
437
1
原创 SpringBoot异常处理
把异常页面统一放在templates的error文件夹下404、500实际项目处理中会出现各种各样的异常,如果以上面的方式处理异常,我们就需要写大量的异常处理页面,太过麻烦,可以定义中一个全部异常处理页面使用了全局异常处理后原本的/error页面就会失效共有三种方法:这里举例两种一、注解自定义一个全局异常处理类,只需上面加上 @ControllerAdvice 注解同时要在执行异常处理的方法上标记@ExceptionHandler。
2023-05-10 14:37:20
4844
3
原创 身为大学生的你,还在摆烂吗?
我们熬过了高中时代艰苦的岁月,终于上了大学后,没有了老师的催促,没有了家长的监督,也不必再整天面对成堆的作业和考试。大学当之无愧成为了大学生的天堂。可事实真是如此吗?一段时间后,你会发现无论是同学还是室友都沉迷于手机、游戏、恋爱。作为新时代的青年,这些是再正常不过了,可是物极必反,没有束缚的爱好被称为瘾。凌晨两三点都在回荡着室友键盘疯狂的敲击声和难以入耳的脏话,使你难以入眠。你真的享受这样的生活吗?这样的生活当然能让你没有任何烦恼,可也会让你无所适从。
2023-04-28 21:59:34
376
1
原创 MyBatis的基本入门
如果Mapper接口名称和SQL映射文件名称相同,并在同一目录下,则可以使用包扫描的方式简化SQL映射文件的加载。@Value注解用于修饰类,相当于是@Data的不可变形式,因为字段都被修饰为private和final,默认的情况下不会生成settter。@Data注解在类上,将类提供的所有属性都添加get、set方法,并添加equals、hashCode、toString方法。在 Mapper 接口中定义方法,方法名就是SQL映射文件中sql语句的id,并保持参数类型和返回值类型一致。
2023-04-25 21:52:13
535
1
原创 MyBatis-plus的功能
目录1、主键自增1.1、id自增策略1.2、id主键自增不连续2、自动填充数据功能代码级别1)使用注解@TableField2)数据库中新增字段3)自定义实现类处理注解3)测试数据库级别3、代码生成器方式一:下插件方式二:写代码4、逻辑删除1)数据库中添加字段2)实体类上加注解3)配置文件4)测试4、条件构造器5、乐观锁5.1、实现方式:5.2、实现步骤5.3、测试乐观锁mybatis-plus官方文档从源码中可以看到,除了AUTO这个策略以外,还有如下几种生成策略:NONE: 不设置id生成
2023-04-23 21:22:33
2869
3
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人