自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(29)
  • 收藏
  • 关注

原创 spring boot2项目升级到spring boot3 jdk8升级到17

spring boot2项目升级到spring boot3 jdk8升级到17

2023-10-04 21:32:39 797

原创 基于redis的分布式锁

若给节点增加从节点,从而提高可用性, 但主从同步时仍然可能出现不一致的情况, 如主加锁成功,但在同步前宕机, 从节点变为主,没有锁。锁续命:在获得锁后, 增加一个定时任务,定期检测任务线程是否已执行完成,若未完成,则延长锁的过期时间。解决:加锁时候,value添加唯一标识(uuid), 解锁的时候判断是否是自己加的锁,然后删除锁。问题2:在删除锁逻辑中, 判断是否自己锁和删锁并非原子操作,还是会出现超时后删别人锁的情况。当为了性能,节点部署不多时,节点宕机容易造成半数锁失败,红锁 red lock。

2023-04-12 17:01:41 153

原创 分布式缓存问题与解决

5、在update操作时,需要更新数据库,更新缓存两个操作,这两个操作是非原子性的,在两个操作之间,数据库与缓存数据是不一致的,此时的不一致时间还不是很长。--------双写不一致。3、若管理端删除了某个数据,前端还停留在被删数据页面,此时前端请求了已经不存在的数据,缓存查找没有,会访问数据库,前端若一直请求,会持续对数据库造成压力。4、若大量并发瞬间访问了一个冷门数据(无缓存的),请求发现无缓存,会进行缓存重建,大量请求进行缓存重建,对数据库压力较大。------------缓存重建。

2023-04-12 17:00:05 229

原创 ThreadLocal内存泄漏的原因

Entry继承自WeakReference, Entry在构造函数使用super(k) 等同于 new WeakReference(key);如果不在key没被gc前,进行remove, 就没办法再通过key找到对应的value, value就会一直存在。也就是将key设置成弱引用, 当key的强引用都断开后,下次gc,key就会被清理掉。在扩容时, 会遍历Entry数组,清理掉key为null的数据。但如果一直不扩容, 则内存一直在占用, 所以需要手动清除下。此时Entry的key 就为null了。

2023-04-12 13:16:56 105

原创 ThreadPool

线程开启后会先执行一个提交的任务,然后再去阻塞队列去循环取任务执行,所以新开启的线程,可以直接运行一次任务,不用从队列里取。若当前线程数大于核心线程数, 使用超时阻塞取任务,若超时后仍然没有任务,则进行cas竞争,成功的线程跳出循环,结束线程。手动中断 shutdown shutdownNow, 直接对某一个线程中断无效,会被捕获中断,继续执行。可以自定义线程工厂类,给每个线程设置一个线程异常捕获方法,就可以自定义处理异常,而不会退出线程。当任务抛出异常后,线程也会被关闭,线程池会立即新增一个线程替补。

2023-04-12 13:09:26 69

原创 java - AQS

AQS是指AbstractQueuedSynchronizer类, 该类是JUC包下所有互斥锁的实现基础。它也是按照管程思想实现的。其中AQS,是管程的实现:state, 0无锁, 1有锁,大于1时表示锁重入了多次,加锁时一般通过cas修改state,修改成功意味着竞争到了锁。:通过双向链表实现,通过变量head tail维护,该队列按照先入先出,所以基于AQS的锁,很容易实现公平锁。

2023-04-12 13:05:34 118

原创 synchronized

当两个先后执行的线程,第一个线程完全结束后,开启第二个线程,共同持有同一个锁时,由于是先后执行没有交集都应该是偏向锁,并且锁头部中的线程id为各自线程。偏向锁撤销: 不等同于偏向锁解锁,偏向锁撤销一般是由于锁升级造成的,而加锁的前提条件是需要无锁状态,所以偏向锁撤销就是把锁的对象头转为无锁状态,然后等待加锁。需要等到安全点的时候。因为线程获取锁是通过cas操作的,在cas中,期望值是null,修改值为自身线程id, 所以锁切换线程时,必须要先变为无锁,才能再锁,否则cas无法成功。

2023-04-12 13:03:10 55

原创 进程通信与线程通信

进程通信与线程通信

2023-03-21 23:32:53 73

原创 并发可见性与总线窥探机制

在java并发编程中,要保证可见性,需要给变量增加volatile关键字。普通变量存在可见性的原因是多核CPU架构中各处理器缓存不一致造成的,需要解决缓存不一致问题,才能保证可见性,总线窥探就是实现缓存一致性的方案之一。

2023-03-21 23:32:39 157

原创 7、JVM调试命令和工具

调优对象: full gc的频率,频率越少越好,1天一次

2023-03-19 14:45:48 61

原创 6、JVM参数设置

-Xss:每个线程的栈大小-Xms:设置堆的初始可用大小,默认物理内存的1/64-Xmx:设置堆的最大可用大小,默认物理内存的1/4

2023-03-19 14:42:59 223

原创 5、垃圾收集器

serial parallel parNew cms g1 全是分代思想的实现者,所以分代思想的优化方式都是通用的,标记算法全是可达性算法实现。

2023-03-19 14:41:04 59

原创 4、jvm内存分配与回收-堆

当执行new指令时,首先会检查new指令后的类是否已被加载,否则会触发加载动作。

2023-03-19 14:35:28 96

原创 3、JVM虚拟机栈-栈

java虚拟机栈是线程运行时所需的存储栈,栈内存储的是栈帧,栈帧包含了本地变量表,操作数栈,动态链接,方法出口。

2023-03-19 14:34:03 51

原创 2、类加载-方法区

类的加载阶段分别有:加载,验证,准备,解析,初始化其中只有加载是java层面完成的,将class文件载入到内存,后续都是通过调动native方法完成

2023-03-19 14:32:42 195

原创 1、JVM结构总览

JVM由类加载子系统、运行时数据区、执行引擎组成。

2023-03-19 14:26:33 60

原创 11、mysql配置优化

最大连接数,每个连接都会占用一定的内存,在查询时传输数据占用内存会加剧,所以要根据系统内存合理配置最大连接数,防止过多占用内存。

2023-03-19 14:20:12 816

原创 10、innodb undo log

undo log 回滚日志,用于在事务失败时进行数据回滚,实现原子性的特性。同时也是实现MVCC机制的基础

2023-03-09 14:54:02 150

原创 9、mysql binlog

binlog 二进制日志文件,mysql实现,开启后会记录数据库的修改操作,每次事务提交成功,都会记录一次。

2023-03-09 14:51:25 121

原创 8、innodb redo log

redo log 重做日志,innodb存储引擎实现的日志,用于实现持久化特性,并提高写入磁盘的速度。

2023-03-09 14:47:58 117

原创 7、mysql innodb 底层原理

mysql主要分为Server层和存储引擎层Server层包含连接器,查询缓存器,分析器,优化器,执行器,实现了数据库主要功能。

2023-03-09 14:43:05 82

原创 6、MVCC

MVCC(Multi-Version Concurrency Control) 多版本并发控制作用:在RC RR级别下,实现读写并发,读操作不受写的影响。实现:innodb层面实现,通过undo log和可见性算法实现。

2023-03-09 14:42:15 54

原创 5、mysql锁

mysql是并发处理数据的,而数据又是共享资源,所以mysql必须运用锁才能实现并发的安全访问。

2023-03-09 14:39:44 54

原创 4、mysql事务

事务是数据库一组不可分割的操作序列,实现最终一致性。事务也是数据库并发控制的最小单位。

2023-03-09 14:37:59 45

原创 3、索引优化

为了提高mysql的查询速度,需要尽可能的使用到索引,否则mysql只能通过全表扫描,此时查询效率会很低, 但是如果表内数据很少, 全表扫描反而可能会更快。

2023-03-09 14:36:07 114

原创 2、mysql工具explain trace

explain用于显示mysql对sql语句的执行计划,如语句的分解情况,是否使用了索引,表关联使用何种算法,如何排序等。 通过mysql的执行计划,结合mysql数据结构可以分析出该sql执行效率,然后进行优化。

2023-03-09 14:30:11 219

原创 1、索引数据结构

数据库索引是数据库为了快速访问的一种数据结构。是一种排好序的数据结构。索引是有序的,是索引非常重要的特点,索引的高效几乎都是建立在有序的基础上。

2023-03-09 14:24:17 797

原创 JPA乐观锁失效解决

使用jpa乐观锁时,jpa不检测版本字段,每次都更新到最新版本

2022-04-20 01:14:49 1203

原创 spring cloud feign实现

feign的底层实现为io.github.openfeignspringcloud整合了底层实现,同时整合的还有ribbon与hystrix本文描述了springcloud如何对openfeign进行整合的一、原生的openfeign不用springcloud-openfeign,直接使用openfeign的方式根据官方示例:public interface GitHub { @RequestLine("GET /repos/{owner}/{repo}/contributors")

2020-08-07 20:51:36 406

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除