- 博客(65)
- 收藏
- 关注

原创 Redis篇:缓存击穿及解决方案
缓存击穿问题也叫热点Key问题,就是一个被高并发访问并且缓存重建业务较复杂的key突然失效了(有可能是正好过期了),无数的请求访问会在瞬间给数据库带来巨大的冲击。常见的解决方案有两种:互斥锁逻辑过期。
2024-04-23 20:27:18
3632
原创 @Builder使用不当导致IndexOutOfBoundsException
虽然Lombok的@Builder能够方便日常开发构建实体,但是在使用的时候还是要多加小心,切记与@Data搭配使用时,需要加上@Data@Builder另外,在实体类的字段中有默认值时,需要加上@Builder.Default。
2025-02-19 11:26:39
230
原创 1. 两数之和
你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。因为 nums[0] + nums[1] == 9 ,返回 [0, 1]。整数,并返回它们的数组下标。你可以按任意顺序返回答案。,请你在该数组中找出。
2024-07-21 22:05:13
193
原创 283. 移动零
移动到数组的末尾,同时保持非零元素的相对顺序。,必须在不复制数组的情况下原地对数组进行操作。你能尽量减少完成的操作次数吗?,编写一个函数将所有。
2024-07-21 21:09:23
149
原创 141. 环形链表 && 142. 环形链表 II
给你一个链表的头节点head,判断链表中是否有环。如果链表中有某个节点,可以通过连续跟踪next指针再次到达,则链表中存在环。为了表示给定链表中的环,评测系统内部使用整数pos来表示链表尾连接到链表中的位置(索引从 0 开始)。pos。仅仅是为了标识链表的实际情况。如果链表中存在环,则返回true。否则,返回false。true链表中有一个环,其尾部连接到第二个节点。true链表中有一个环,其尾部连接到第一个节点。false链表中没有环。-1。
2024-07-21 20:05:54
736
原创 MySQL篇:主从复制
话不多说,直接上概念:DDL(Data Definition Language)语句:数据定义语言,主要是进行定义/改变表的结构、数据类型、表之间的链接等操作。常用的语句关键字有 CREATE、DROP、ALTER 等。DML(Data Manipulation Language)语句:数据操纵语言,主要是对数据进行增加、删除、修改操作。常用的语句关键字有 INSERT、UPDATE、DELETE 等。
2024-07-15 14:34:51
417
原创 MySQL篇:日志
MySQL中常见的日志:重做日志用途: 保证事务的持久性,记录事务对数据库所做的所有修改。内容: 记录事务对数据页的物理修改,而不是逻辑修改。配置: 配置文件中设置 innodb_log_group_home_dir 和 innodb_log_files_in_group 参数。撤销日志用途: 保证事务的原子性,用于事务的回滚和 MVCC 实现。内容: 记录事务对数据页的逻辑修改,以支持事务的回滚。配置: 通常无需人工配置,由存储引擎自动管理。二进制日志。
2024-07-10 21:30:35
464
原创 MySQL篇:分库分表
分库和分表有两种模式,垂直和水平。垂直分库:电商数据库拆分为用户、订单、商品、交易等数据库。水平分库:用户数据库,拆分为多个,比如User_DB_0 - x。垂直分表:将数据库表按照业务维度进行拆分,将不常用的信息放到一个扩展表。水平分表:将用户表水平拆分,展现形式就是 User_Table_0 - x。
2024-06-02 14:22:39
476
原创 Minio篇:初识MinIO
下面介绍MinIO中的几个核心概念,这些概念在所有的对象存储服务中也都是通用的。对象是实际的数据单元,例如我们上传的一个图片。存储桶是用于组织对象的命名空间,类似于文件夹。每个存储桶可以包含多个对象。端点是MinIO服务器的网络地址,用于访问存储桶和对象,例如9000为MinIO的API的默认端口,前边配置的9001以为管理页面端口。是用于标识和验证访问者身份的唯一标识符,相当于用户名。是与关联的密码,用于验证访问者的身份。
2024-05-31 12:59:39
2588
原创 Redis篇:共同好友关注
针对用户的操作:可以对用户进行关注和取消关注功能,并且将关注的信息存入redis中。实现思路:关注,取消关注 需求:基于该表数据结构,实现两个接口:关注和取关接口判断是否关注的接口共同关注 需求:利用Redis中恰当的数据结构,实现共同关注功能。在博主个人页面展示出当前用户与博主的共同关注呢。当然是使用我们之前学习过的集合咯,在set集合中,有交集并集补集的api,我们可以把两人的关注的人分别放入到一个set集合中,然后再通过api去查看这两个set集合中的交集数据。
2024-04-29 16:45:37
436
原创 Redis篇:秒杀优化
秒杀业务的优化思路是什么?先利用Redis完成库存余量、一人一单判断,完成抢单业务再将下单业务放入阻塞队列,利用独立线程异步下单基于阻塞队列的异步秒杀存在哪些问题?内存限制问题数据安全问题。
2024-04-27 16:11:24
899
原创 Redis篇:缓存穿透以及解决方案
用户请求的数据在缓存中和数据库中都不存在,不断发起这样的请求,给数据库带来巨大压力,一般是受到了恶意攻击所导致的。
2024-04-23 16:11:24
1551
原创 Redis篇:缓存更新策略最佳实践
缓存更新是redis为了节约内存而设计出来的一个东西,主要是因为内存数据宝贵,当我们向redis插入太多数据,此时就可能会导致,所以redis会对部分数据进行更新,或者把他叫为淘汰更合适,一般有以下三种淘汰策略。
2024-04-23 15:22:13
3243
原创 Redis入门
除了上述四点以外,在存储方式、扩展性、查询性能上关系型与非关系型也都有着显著差异,总结如下:存储方式关系型数据库基于磁盘进行存储,会有大量的磁盘IO,对性能有一定影响非关系型数据库,他们的操作更多的是依赖于内存来操作,内存的读写速度会非常快,性能自然会好一些扩展性关系型数据库集群模式一般是主从,主从数据一致,起到数据备份的作用,称为垂直扩展。非关系型数据库可以将数据拆分,存储在不同机器上,可以保存海量数据,解决内存大小有限的问题。称为水平扩展。
2024-04-21 23:03:32
894
原创 面试篇:杂乱篇
当一个任务来了之后,会先去判断一下核心线程数是否已满,如果没有满,直接添加到工作线程去执行,如果已经满了,则添加到阻塞队列,如果阻塞队列也满了,则判断是否达到最大线程数,如果没达到,则创建临时线程来执行,如果已经达到了最大线程数,那就直接根据拒绝策略来拒绝。其中:owner是关联获得锁的线程,并且只能关联一个线程,而entrylist是关联处于阻塞状态的线程,waitset是关联处于等待状态的线程。特点:创建一个可执行延时任务的线程池,支持定时及周期性任务执行。4.线程存活时间的单位。
2024-04-04 14:33:07
951
原创 实现定时任务
秒(0~59),分钟(0~59),小时(0~23),日期(1-月最后一天),月份(1-12),星期几(1-7,1表示星期日),年份(一般该项不设置,直接忽略掉,即可为空值)表示最接近31号的工作日,如果31号是星期六,则表示30号,即星期五,如果31号是星期天,则表示29号,即星期五。这里就先用SpringBoot为我们提供的定时任务的API来实现一个简单的定时任务,让大家先对定时任务里面的一些核心概念有个大致的了解。表示 “ 每年每月每天每时每分的每个第1秒,第2秒,第3秒 ”。
2024-03-29 17:25:50
838
原创 统一异常处理
实际我们在开发过程中可能需要做很多的判断校验,如果出现了非法情况我们是期望响应对应的提示的。但是如果我们每次都自己手动去处理就会非常麻烦。我们可以选择直接抛出异常的方式,然后对异常进行统一处理。把异常中的信息封装成ResponseResult响应给前端。
2024-03-28 13:02:15
214
原创 Fastjson配置消息转换器(时间格式问题)
我们可以看见,日期的格式有点问题。由于ArticleListVO类的createTime成员变量是Date类型,默认是由java的Jackson来处理,使用 ISO-8601 规范来处理日期时间格式。ISO-8601 是一种国际标准的日期时间表示法,例如:"2023-07-21T06:53:24"。我们不希望时间被处理成这种格式,如下图。第二步,在WebConfig里面编写fastjson消息转换器。第一步:需要添加fastjson的依赖到pom.xml。可以看见,时间格式和我们配置的一样了。
2024-03-27 13:51:02
1711
1
原创 Bean对象拷贝工具封装
在平时后端开发的过程中,经常要把对象封装成DTO,VO对象,来与前端进行交互。前面一个参数为被拷贝对象,后面一个参数为生成的结果对象。
2024-03-27 10:51:05
365
原创 多线程篇1
另外还有一个缺点:synchronized出现在实例方法上, 表示整个方法体都需要同步,可能会无故扩大同步的 范围,导致程序的执行效率降低。同步语句块:synchronized(this){方法体} (synchronized括号后的数据必须是多线程共享的数据,才能达到多线程排队)实现的步骤主要是:自定义一个类实现Runnable接口,并重写run方法。synchronized出现在实例方法上,一定锁的是this(此方法)。实现的步骤主要是:自定义一个类继承Thread类,并重写run方法。
2024-03-20 17:25:22
287
1
原创 Sentinel篇:线程隔离和熔断降级
Sentinel支持的雪崩解决方案:线程隔离(仓壁模式)降级熔断Feign整合Sentinel的步骤:在application.yml中配置:feign.sentienl.enable=true给FeignClient编写FallbackFactory并注册为Bean将FallbackFactory配置到FeignClient线程隔离的两种手段是?信号量隔离线程池隔离信号量隔离的特点是?基于计数器模式,简单,开销小线程池隔离的特点是?基于线程池模式,有额外开销,但隔离控制更强。
2024-03-17 17:48:23
1576
原创 微服务:Sentinel篇
什么是雪崩问题?微服务之间相互调用,因为调用链中的一个服务故障,引起整个链路都无法访问的情况。限流是对服务的保护,避免因瞬间高并发流量而导致服务故障,进而避免雪崩。是一种预防措施。超时处理、线程隔离、降级熔断是在部分服务故障时,将故障控制在一定范围,避免雪崩。是一种补救措施。流控模式有哪些?•直接:对当前资源限流•关联:高优先级资源触发阈值,对低优先级资源限流。•链路:阈值统计时,只统计从指定资源进入当前资源的请求,是对请求来源的限流流控效果有哪些?快速失败:QPS超过阈值时,拒绝新的请求。
2024-03-17 00:29:54
2449
原创 实现elasticsearch和数据库的数据同步
实现elasticsearch和数据库数据同步一般有以下三种方法:方式一:同步调用优点:实现简单,粗暴缺点:业务耦合度高方式二:异步通知优点:低耦合,实现难度一般缺点:依赖mq的可靠性方式三:监听binlog优点:完全解除服务间耦合缺点:开启binlog增加数据库负担、实现复杂度高。
2024-03-15 18:00:33
3266
原创 elasticsearch篇:数据聚合
默认的拼音分词器会将每个汉字单独分为拼音,而我们希望的是每个词条形成一组拼音,需要对拼音分词器做个性化定制,形成自定义分词器。elasticsearch中分词器(analyzer)的组成包含三部分:character filters:在tokenizer之前对文本进行处理。例如删除字符、替换字符tokenizer:将文本按照一定的规则切割成词条(term)。例如keyword,就是不分词;还有ik_smarttokenizer filter:将tokenizer输出的词条做进一步处理。
2024-03-15 14:42:32
2373
1
原创 elasticsearch篇:RestClient查询
实体类有两个,一个是前端的请求参数实体,一个是服务端应该返回的响应结果实体。1)请求参数"key": "搜索关键字","page": 1,"size": 3,因此,我们在@Data2)返回值total:总条数:当前页的数据因此,我们在@Data定义一个HotelController,声明查询接口,满足下列要求:请求方式:Post请求路径:/hotel/list请求参数:对象,类型为RequestParam返回值:PageResult,包含两个属性。
2024-03-12 19:47:04
2571
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人