- 博客(19)
- 收藏
- 关注
原创 MySQL-锁
锁是计算机协调多个进程或线程并发访问某一资源的机制.在数据库中,除传统的计算资源(CPU、RAM、I/0)的争用以外,数据也是一种供许多用户共享的资源。如何保证数据并发访问的一致性、有效性是所有数据库必须解决的一个问题,锁冲突也是影响数据库并发访问性能的一个重要因素。从这个角度来说,锁对数据库而言显得尤其重要,也更加复杂。这里按照锁的粒度分(也就是锁的作用范围):来看不加锁的这个场景:再看加锁:备份完释放锁! 演示一下: 模拟三个会话全局锁存在的问题:数据库中加全局锁,是一个比较重的操作,存在以下问题: (
2024-08-18 21:25:49
1800
1
原创 线程池-ThreadPool
ExecutorService newCachedThreadPool(): 创建一个可缓存线程池,可灵活的去创建线程,并且灵活的回收线程,若无可回收,则新建线程。ExecutorService newFixedThreadPool(int nThreads): 初始化一个具有固定数量线程的线程池ExecutorService newSingleThreadExecutor(): 初始化一个具有一个线程的线程池//做完一个,再做一个,不停歇,直到做完,老黄牛性格。
2024-08-12 13:28:44
471
原创 高并发优化方案
而此时如果查询购物车的请求较多,可能导致购物车服务的Tomcat连接占用较多,所有接口的响应时间都会增加,整个服务性能很差,甚至不可用。但从业务角度来说,为了提升用户体验,即便是商品查询失败,购物车列表也应该正确展示出来,哪怕是不包含最新的商品信息。而且商品查询的故障依然会导致查询购物车功能出现故障,购物车业务也变的不可用了。如图所示,我们给查询购物车业务限定可用线程数量上限为20,这样即便查询购物车的请求因为查询商品服务而出现故障,也不会导致服务器的线程资源被耗尽,不会影响到其它接口!
2024-08-02 21:39:31
1105
原创 Maven高级
将项目按照功能拆分成若干个子模块<dependencyManagement>与<dependencies>的区别是什么?<dependencies>是直接依赖,在父工程配置了依赖,子工程会直接继承下来。<dependencyManagement>是统一管理依赖版本,不会直接依赖,还需要在子工程中引入所需依赖(无需指定版本)
2024-07-16 14:52:29
304
原创 Axios 使用和Ajax原理
使用浏览器的 XMLHttpRequest 对象 与服务器通信的一个交互技术例如:浏览器网页中,使用 ajax技术(XHR对象)发起获取省份列表数据的请求,服务器代码响应准备好的省份列表数据给前端,前端拿到数据数组以后,展示到网页上面。
2024-07-16 14:08:29
294
原创 授权认证登录之 Cookie、Session、JWT 详解
第一次访问时,服务端会生成会话seesion对象并存储,对应一个sessionId,并通过http的响应头自动返回,值在Set-cookie里面,本质其实就是一个字符串,常见的令牌技术有很多,例如JWT、OTP、ORTOken、OAuth令牌等以JWT为例进行讲解。
2024-07-15 11:14:19
805
原创 Lambda表达式、方法引用
>的左边:lambda形参列表,参数的类型都可以省略。如果形参只有一个,则一对()也可以省略->的右边:如果方法体中只有一行执行语句,则一对0可以省略。如果有return关键字则必须一并省略。
2024-07-11 17:31:11
291
原创 HashMap的数据结构
当元素过多的时候,该用什么来代替链表呢?我们想到的就是二叉查找树,这样我们遍历的时间复杂度就会由链表的O(N)变为二叉查找树的O(logN)但是,对于极端情况,当子节点都比父节点大或者小的时候,二叉查找树又会退化成链表,查询复杂度会重新变为O(N),如下所示:所以,我们就需要二叉平衡树(AVL树)出场,他会在每次插入操作时来检查每个节点的左子树和右子树的高度差至多等于1,如果>1,就需要进行左旋或者右旋操作,使其查询复杂度一直维持在O(l0gN)。但是这样就万无一失了吗?
2024-07-02 22:10:25
155
原创 关于重写了equals方法后是否重写hashcode方法
先上结论:重写equals不一定要重写hashcode,特列就是在没有使用容器(集合)时。
2024-06-27 16:42:51
437
原创 字符集知识
注意:UTF-8不是一种字符集,它是Unicode字符集的一种实现,只是其中的一种编码方式!由于只能存128个英文,不能存汉字,所以又推出了一些包含汉字的字符集。
2024-06-22 15:10:33
218
原创 Docker部署前后端分离项目
2.将前端静态资源上传至html文件夹,将本地nginx配置文件内容复制至nginx.conf,随后进行一些修改,例如。1.创建父文件夹nginx,里面创建一个html文件夹,在创建一个nginx.conf配置文件。4 .在jar包和Dockerfile文件的目录下,开始构建镜像。2 安装成功后,执行命令,配置Docker的yum源。生成的三个文件夹,将刚刚sql脚本放入init文件夹。1.将本地redis缓存数据移入redis容器。1.使容器都加入一个网络,联通并能互相访问。3.创建nginx容器。
2024-06-21 15:31:33
527
原创 Redis缓存更新策略
原因在于,如果你选择第一种方案,在两个线程并发来访问时,假设线程1先来,他先把缓存删了,此时线程2过来,他查询缓存数据并不存在,此时他写入缓存,当他写入缓存后,线程1再执行更新动作时,实际上写入的就是旧的数据,新的数据被旧数据覆盖了,但实际上两种都有问题,但相对1来说,先操作数据库,再删好一点。缓存更新是redis为了节约内存而设计出来的一个东西,主要是因为内存数据宝贵,当我们向redis插入太多数据,此时就可能会导致缓存中的数据过多,所以redis会对部分数据进行更新,或者把他叫为淘汰更合适。
2024-05-22 22:44:36
219
1
原创 高并发时优惠卷秒杀(单机情况下)
具体操作逻辑如下:比如时间是否充足,如果时间充足,则进一步判断库存是否足够,然后再根据优惠卷id和用户id查询是否已经下过这个订单,如果下过这个订单,则不再下单,否则进行下单。
2024-05-22 22:01:39
692
1
原创 新学一招:@RequiredArgsConstructor
2.使用lombok下提供的注解,将要注入的字段进行final修饰即可。但是假如字段有很多,岂不是要写很多。1.传统的构造函数注入。
2024-05-14 15:30:00
207
1
原创 苍穹外卖项目简单总结
JWT及JSON Web Token,是一种在两方之间以紧凑、可验证的形式传输信息的方式,简单来说就是验证用户信息,本项目就是用来验证用户登录信息。
2024-05-14 08:32:58
3718
1
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人