03 2022 档案
SpringBoot自定义starter-统一上传服务
摘要:为什么要用starter 在日常的开发中,许多功能都是重复的,比如上传,权限认证,redis的一些操作等。如果采用模块的方式在每一个项目中都加载这些模块,会导致项目比较大,且结构不清晰。 如果采用了starter就可以简便很多,在开发中,只需要从仓库依赖需要的jar即可。 背景 前两天,国内的码云抽
使用Redis锁可能出现的问题
摘要:分布式锁 分布式锁常规情况下都是使用redis来实现。很早以前,使用SETNX加过期命令进行设置,无法保证原子性。但随着时代的发展,redis已经支持一条指令(set指令)实现setnx加过期时间。 什么是线程不安全? 线程不安全指的是多个线程操作一个资源,期望值和获取到的数据不一致。 可能存在的问
自定义注解实现接口限流
摘要:自定义注解实现接口限流 场景:限制验证码在单位时间内的访问次数 实现流程:自定义一个注解,注解内包含访问的次数与单位时间。通过AOP进行切面拦截,获取注解内的次数和时间,获取请求的uri与访问者ip。组成redis的key。 使用redis将key进行原子性自增1.如果返回的是1.则设置过期时间,之
Java并发-2
摘要:Synchronized保证三大特性 原子性 对num增加同步代码块后,保证同一时间只有一个线程操作num。就保证了不会出现问题。 可见性 synchronied对应lock原子操作会刷新工作内存中共享变量的值 有序性 加入synchronied依然会发生指令重排,只不过我们有同步代码块,可以保证只
Java并发-1
摘要:进程 进程是操作系统进行资源资源分配的单位,进程中包含若干线程 线程 线程是CPU进行调度和执行的基本单位 方法区 堆 虚拟机栈 本地方法栈 程序计数器 每个线程拥有自己的栈和PC 多个线程共享方法去和堆 并行和并发 并行 单位时间内,任务同时执行 并发 在一定时间内,任务都执行了 并行是一起执行。