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

原创 SpringAOP+自定义注解实现限制接口访问频率,利用滑动窗口思想Redis的ZSet(附带整个Demo)
在日常开发中,为了保证系统稳定性,防止被恶意攻击,我们可以控制用户访问接口的频率,颜色部分表示窗口大小在指定时间内,只能允许访问N次,我们将这个指定时间T,看出一个滑动的窗口宽度,Redis的zset的score为滑动窗口,在操作zset的时候,只保留窗口数据,删除其他数据
2024-03-24 18:45:06
14929
3

原创 策略模式+工厂模式实现选择多方式登录,微信登录或qq登录,如何实现登录功能,登录的实现
要实现解耦版的登录切换功能,策略模式+工厂模式+ConcurrentHashMap+在Bean的生命周期期间就进行策略绑定,带有Aware的接口进行方法增强:策略模式是一种行为型设计模式,定义一系列算法,并使这些算法可以相互替换,使得算法的变化独立于使用算法的客户。策略模式通常包含一个策略接口和多个实现这个接口的策略类。:工厂是创建型模式,它的作用就是创建对象。将对象统一管理,在业务不同时在调用不同的对象进行使用。
2024-03-08 14:43:56
18098
6

原创 Spring Boot整合Aop面向切面编程实现权限校验,SpringAop+自定义注解+自定义异常+全局异常捕获,实现权限验证,要求对每个接口都实现单独的权限校验。
SpringAop+自定义注解+自定义异常+全局异常捕获,实现权限验证,要求对每个接口都实现单独的权限校验
2024-03-06 15:25:13
25361
3

原创 Mysql的锁有哪些?超详细Mysql的锁介绍,表锁,行锁,间隙锁,临键锁,意向锁,元数据锁。Mysql数据库索引有哪些?从数据结构角度,从物理存储角度,从逻辑角度来分析
Mysql的锁有哪些?超详细Mysql的锁介绍,表锁,行锁,间隙锁,临键锁,意向锁,元数据锁。Mysql数据库索引有哪些?从数据结构角度,从物理存储角度,从逻辑角度来分析
2024-03-05 10:40:34
13053
1
原创 jasypt对yml文件进行加密解密
在日常开发中,我们一般会把以及一些都放入yml文件中,这时就有必要对yml文件进行加密处理了,jasypt是一款简单的对yml加密的工具。
2024-06-22 15:04:21
2912
原创 Java表单重复提交问题
采用redis,切面编程,自定义注解,对获取ip和uri作为key,时间戳作为value每次访问接口,若是该key存在,则进行限制,若是存在,则判断现在距离上次提交时间小于设置的默认时间 则 判断为重复提交 否则 正常提交 -> 进入业务处理
2024-06-22 11:52:51
3052
原创 SpringBoot整合WebSocket实现聊天室
1.简单的实现了聊天室功能,注意页面刷新后聊天记录不会保存,后端没有做消息的持久化2.后端用户的识别只简单使用Session用户的身份
2024-05-22 11:12:52
18129
原创 Redis的应用场景有哪些
基于的数据结构存储系统,它可以用作数据库、缓存和消息代理。Redis 支持多种数据结构,包括以及更复杂的数据结构。:Redis 能读的速度是 110000 次/s,写的速度是 81000 次/s。:Redis 支持二进制案例的 Strings, Lists, Hashes, Sets 及 Ordered Sets 数据类型操作。:Redis 的所有操作都是原子性的,意味着要么成功执行要么失败完全不执行。:Redis 还支持 publish/subscribe, 通知, key 过期等等特性。
2024-04-23 09:44:30
18072
原创 Java8特性,Stream流的使用,收集成为map集合
Java 8引入了Stream API,这是Java集合操作的一个重大改进。Stream API提供了一种高效且易于使用的处理数据的方式。Stream是数据渠道,用于操作数据源(集合、数组等)所生成的元素序列。注意:Stream自己不会存储元素,它不会改变源对象,反而它的操作会返回一个全新的Stream,且它的操作是延迟执行的,这意味着它们会等到需要结果的时候才执行。以下是Stream的一些常用操作:java4.1将流转为map5.Match: 检查Stream中的元素是否
2024-04-18 15:42:22
16860
原创 CAS简单易懂解释,什么是CAS?java代码实现CAS?什么是ABA问题?
CAS(compareAndSwap)比较与交换,在不加锁的情况下保证数据操作的原子性和安全性,也是一种典型的乐观锁,主要有三部分组成,old(旧值),val(期望值),new(新值)。通过比较val(期望值)和old(旧值)是否相等来决定old是否需要替换成新值。(old==val){old=new;}
2024-04-18 11:06:44
19481
原创 MySql中truncate,delete有什么区别?什么情况下id会不会连续呢?
在一个添加事务执行时,若是事务没有提交,那么其实以及申请了id。后面插入的数据会默认id以及有了,然后就会越过这个不存在的id。需要注意的是在什么情况下id会不会连续呢?发现两次的查询结果,id并没有续上。两次的执行结果id都是续上的,发现id1,2的数据并不存在。
2024-04-17 11:27:28
20367
原创 SpringBoot事件发布和监听,ApplicationEventPublisher发布事件,实现ApplicationListener<>监听事件
观察者模式:当一个对象的状态发生改变的时候,所有依赖于它的对象都会得到通知,比如ApplicationListener所以,我们可以用这个来做日志,或者其他事情,
2024-04-15 14:17:30
19502
1
原创 Redis的Hash数据结构中100万对field和value,field是自增时如何优化?优化Hash结构。
ZipList使用是有条件的,当entry数据量太大时就会启用,占用内存空间。
2024-03-30 19:55:24
13722
原创 MySQL索引优化,MySQL索引失效的场景(超详细!)
1.不遵循最左前缀原则2.在索引列上使用(计算,函数,or,类型转换),都是导致失效而导致全表扫描3.范围查询4.Select * 导致回表查询5.不等空值还有or导致索引失效6.like %写在左边导致索引失效7.字符串不加单引号也会导致索引失效8.SQL优化1.字段的选择2.创建索引,并使用索引3.避免走回表,尽量走覆盖索引4.遵循最左前缀原则9.索引技巧
2024-03-21 11:59:43
26158
1
原创 Excel文件导入导出,SpringBoot整合EasyExcel批量导入导出,采用的JDBC+EasyExcel(附带整个Demo)
EasyExcel的入门导入导出,批量导入导出
2024-03-17 19:33:48
15443
4
原创 MySQL的事务隔离级别?MySQL的事务的特性(ACID)?MySQL的事务会出现哪些问题?当前读和快照读的区别?MVCC是什么?
在内部定义了一些匹配规则和当前的一些事务id判断该访问那个版本的数据,不同的隔离级别快照读是不一样的,最终的访问的结果不一样。来保证数据不丢失,在宕机的时候用redolog来恢复数据,由于Buffer Pool刷新磁盘是随机io,性能消耗大,redolog file(日志文件)是追加形式,是顺序io,性能好。隔离性的保证是通过,读已提交,读未提交,可重复度,串行化,MVCC多版本并发控制来保证的。一个事务修改数据,还没有提交,第二个事务就读到了没有提交的数据,也称为脏数据。
2024-03-11 17:57:00
14157
1
原创 java排序,插入排序(java版),附带动图解析
从头到尾依次扫描未排序序列,将扫描到的每个元素插入有序序列的适当位置。(如果待插入的元素与有序序列中的某个元素相等,则将待插入元素插入到相等元素的后面。将第一待排序序列第一个元素看做一个有序序列,把第二个元素到最后一个元素当成是未排序序列。
2024-03-09 15:15:10
6287
1
原创 java排序,选择排序(java版),附带动图解析
再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置。重复第二步,直到所有元素均排序完毕。
2024-03-09 14:51:49
10903
1
原创 java排序,冒泡排序(java版),附带动图解析
再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置。重复第二步,直到所有元素均排序完毕。
2024-03-09 14:39:08
6696
1
原创 java线程池?,线程池有哪些创建方式?,线程池参数?,线程池的队列有哪些?,线程池的拒绝策略?,线程池的执行流程或原理?为什么禁止用Executor来创建线程池?
都知道在java中有线程,但是创建一个线程需要上下文切换,线程其实是非常消耗性能的,线程池能帮助开发者创建线程,提高开发效率,能控制线程的数量。:通过线程池,可以避免频繁地创建和销毁线程,从而减少了线程创建和上下文切换的开销,提高了系统的性能和效率。:线程池可以限制同时执行的线程数量,通过设置线程池的大小和队列容量,可以控制系统的并发度,防止因过多的线程导致系统资源耗尽或性能下降。:线程池可以统一管理和调度线程的生命周期,包括创建、执行和销毁线程等操作。
2024-03-08 13:03:47
24110
1
原创 经典面试题:用户在浏览器输入url后会有什么操作,输入url后会经过什么步骤,在浏览器输入 URL 回车之后发生了什么?
DNS解析,浏览器会对输入的URL进行域名解析,查找到对应的IP地址,如果该域名被缓存过就直接去缓存获取,如果没被缓存就向本地DNS服务器发出请求,本地DNS没有缓存就会向根域名服务器发出请求来获取IP地址。进行TCP可靠性连接,浏览器向服务器进行三次握手操作,syn,syn-ack,ack三个阶段。断开TCP连接,四次挥手fin,ack,fin,ack四个阶段。发送http请求,向服务端发送http请求,请求返回响应数据。服务器响应请求,包括状态码,响应头,响应体。
2024-03-07 15:42:05
16947
原创 2024年 spring常见面试题,springboot常见面试题,spring框架经典面试题
3.Bean5.Imoprt7.配合ImportResource8.ControllerAdvice 控制器的切面 可以对响应的数据进行增强我的理解是自动装配就是@Autowrite注解,也就是依赖注入自动配置就是在用springboot时springboot帮我们配置的一些比如1.Mybatis 的SqlSessionFactory2.AOP的EnableAspectJAutoProxy注解 等等而在使用spring的时候,这些配置需要自己去配置。
2024-03-07 10:52:24
12992
原创 java的引用类型有哪些,java有哪4种引用类型?
等于没有引用,对象被回收时会收到通知。程序通过引用队列中是否有虚引用,来决定被引用的对象是否要被垃圾回收,监控对象回收的机制。:只要引用关系还在,对象救不回被回收。只有在没有其他引用关系,超过引用的作用域,对象强制赋值为NULL时就会被回收。:非必须存活的对象,JVM会在内存溢出时对其进行回收。通常实现一些缓存,内存足够保存缓存,不足时就会回收。比作悲剧的男主角(死不了),女主角(坚持不到最后),男二(牺牲品),路人甲(),:非必须存活的对象,不管如何,下次回收时JVM都会回收掉。
2024-03-06 15:36:17
6674
1
原创 SpringBoot中用到的设计模式,并指出在哪些地方用到
观察者模式:当一个对象的状态发生改变的时候,所有依赖于它的对象都会得到通知,比如ApplicationListener。装饰器模式:一些以Wrapper命名的类都是装饰器模式。策略模式:Bean的实例化包含原生对像的实例化和代理对象的实例化,不同的实例化内部逻辑不一样。代理模式:SpringAop,使用了动态代理 ,jdk动态代理和cglib字节码生产技术。简单工厂:BeanFactory ,Bean的工厂getBean创建Bean。适配器模式:MVC模块的HandleAdapter就用到适配器模式。
2024-03-06 15:31:31
11768
1
原创 Redis数据类型,Redis的底层数据结构,String, List(LinkedList,ZipList,QuickList),Set,ZSet,Hash(哈希表,压缩列表)
1、为了查询效率和唯一性,set采用的HT编码(Dict),Dict的key来存储元素,value统一为null。(3.2以后):LInkedList+ZipList,双端访问,内存占用低,包含多个ZipList,存储上限高。有交集和并集的功能,好友的共同关 注,保证元素的唯一,判断元素是否存在,内部同时有这两种,当元素不多的时候,优势不明显,浪费内存,因此会采用。可排序,分为score(值)值和member(键)值。:普通链表,可以双端访问,占用空间高,内存碎片多。:压缩链表,可以双端操作,内存占用低,
2024-03-05 14:16:21
20995
1
原创 企业微信图文消息推送,详细且附上代码,和常见的错误提示,not allow to access from your ip,this app has not bind any miniprogram
这个是点击就能进去的图文消息模式"news" : {"title" : "中秋节礼品领取","description" : "今年中秋节公司有豪礼相送",},这些是传入参数,url可以直接填写程序的入口,appid可以不填写,图片路径我之前使用本地路径是不可以的,选择网络路径或者项目路径都行,应该是外网要能访问的,至于外网如何访问你的,你可以用内网穿透natapp来测试注意注意注意!!!!
2023-12-21 16:11:30
21254
原创 Java日志 ,springboot添加新旧值的日志,日志中有新值和旧值,采用反射进行日志添加获取修改前的值和修改后的值
并且对修改后的值进行权重划分,而且只展示两个属性字段值,改变过的旧值则按json格式存入数据库中,在此之前都是没有新旧值存入,所以可以用springAop来实现,可能小编我的实力有限,不能利用aop来获取旧值,因为需求中的旧值需要从数据库中来获取,所以采用反射来实现,需要记录日志的地方调用这个日志方法就行了,废话不多说,下面来展示代码。以上是所有代码,各位可抽取其中重要的部分,要注意的是,因为传进来的两个对象不同,在使用糊涂工具的。又不懂的或者小编没说明白的,私信么,或者+q:905982492。
2023-11-24 10:57:31
23215
1
原创 启动java程序端口被占用,Web server failed to start. Port 8082 was already in use.
启动java程序端口被占用,Web server failed to start. Port 8082 was already in use.
2023-11-24 10:32:43
19230
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人