- 博客(24)
- 收藏
- 关注
原创 线程池基础
是因为ThreadLocalMap 中的 key 被设计为弱引用,它是被动的被GC调用释放key,不过关键的是只有key可以得到内存释放,而value不会,因为value是一个强引用。ThreadLocal 主要功能有两个,第一个是可以实现资源对象的线程隔离,让每个线程各用各的资源对象,避免争用引发的线程安全问题,第二个是实现了线程内的资源共享。拒绝策略有4种,当线程数过多以后,第一种是抛异常、第二种是由调用者执行任务、第三是丢弃当前的任务,第四是丢弃最早排队任务。
2025-08-05 09:49:14
242
原创 多线程基础
CAS的全称是: Compare And Swap(比较再交换),它体现的一种乐观锁的思想,在无锁情况下保证线程操作共享数据的原子性。volatilevolatile 是一个关键字,可以修饰类的成员变量、类的静态成员变量,主要有两个功能第一:保证了不同线程对这个变量进行操作时的可见性,即一个线程修改了某个变量的值,这新值对其他线程来说是立即可见的,volatile关键字会强制将修改的值立即写入主存。第二: 禁止进行指令重排序,可以保证代码执行有序性。
2025-08-04 13:53:48
774
原创 HashMap
jdk1.8在解决哈希冲突时有了较大的变化,当链表长度大于阈值(默认为8) 时并且数组长度达到64时,将链表转化为红黑树,以减少搜索时间。4.3 遍历table[i],链表的尾部插入数据,然后判断链表长度是否大于8,大于8的话把链表转换为红黑树,在红黑树中执行插入操 作,遍历过程中若发现key已经存在直接覆盖value。如果是链表,则需要遍历链表,可能需要拆分链表,判断(e.hash & oldCap)是否为0,该元素的位置要么停留在原始位置,要么移动到原始位置+增加的数组大小这个位置上。
2025-08-01 15:37:01
325
原创 ArrayList和LinkedList
如果需要保证线程安全,有两种方案:在方法内使用,局部变量则是线程安全的使用线程安全的ArrayList和LinkedList。ArrayList按照下标查询的时间复杂度O(1)【内存是连续的,根据寻址公式】, LinkedList不支持下标查询。ArrayList尾部插入和删除,时间复杂度是O(1);LinkedList头尾节点增删时间复杂度是O(1),其他都需要遍历链表,时间复杂度是O(n)LinkedList 是双向链表需要存储数据,和两个指针,更占用内存。
2025-08-01 10:42:33
115
原创 kafka
复制机制,每个分区有多个副本,leader和follower,leader故障时从follower中选举新leader。生产者:每个副本都同步了数据,才算发送成功,否则会重新发送。消费者:取消自动回应offset,消费完在发送offset。集群部署,多broker实例,单点故障不影响整体服务。在Broker中通过复制机制,设置。,确保消息在所有副本中都得到确认。
2025-08-01 10:30:50
144
原创 揭秘事务ACID特性与并发问题
事务的特性是ACID,即原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability)。例如,A向B转账500元,这个操作要么都成功,要么都失败,体现了原子性。不可重复读是指在一个事务内多次读取同一数据,由于其他事务的修改导致数据不一致。可重复读(REPEATABLE READ):能解决脏读和不可重复读,但不能解决幻读,这也是MySQL的默认隔离级别。读已提交(READ COMMITTED):能解决脏读,但不能解决不可重复读和幻读。
2025-07-29 13:36:13
235
原创 什么是索引
索引是帮助MySQL高效获取数据的数据结构,能提高检索效率并降低I/O成本。MySQL默认存储引擎InnoDB采用B+树作为索引的底层数据结构。
2025-07-28 15:54:14
122
原创 redis集群
当然,如果在RDB生成执行期间,依然有请求到了主节点,而主节点会以命令的方式记录到缓冲区,缓冲区是一个日志文件,最后把这个日志文件发送给从节点,这样就能保证主节点与从节点完全一致了,后期再同步数据的时候,都是依赖于这个日志文件,这个就是全量同步。增量同步指的是,当从节点服务重启之后,数据就不一致了,所以这个时候,从节点会请求主节点同步数据,主节点还是判断不是第一次请求,不是第一次就获取从节点的offset值,然后主节点从命令日志中获取offset值之后的数据,发送给从节点进行数据同步。
2025-07-28 15:48:41
271
原创 Redis分布式锁
写一个守护线程,然后去判断锁的情况,当锁快失效的时候,再次进行续约加锁,当主线程执行完成后,销毁续约锁即可,不过这种方式实现起来相对复杂。不能,但是能用redisson提供的红锁来解决,但是性能低,如果要保证数据的强一致性可以用zookeeper实现的分布式锁。这样做是为了避免死锁的产生,在存储数据的时候采用的hash结构,来存储线程信息和重入次数。
2025-07-27 16:06:17
180
原创 数据的持久化
RDB是一个快照文件。它是把redis内存存储的数据写到磁盘上。当redis恢复数据的时候,可以从RDB的快照文件中恢复数据。AOF的含义是追加文件。当redis执行写命令的时候,都会存储到这个文件中。当redis恢复数据的时候,会从这个文件中再次执行一遍命令来恢复数据。
2025-07-27 14:05:15
116
原创 redis的双写一致性
如果是写操作,我们先把缓存中的数据删除,然后更新数据库,最后再延时删除缓存中的数据。在延时的过程中,可能会出现脏数据,并不能保证强一致性,所以没有采用它。我是使用的是MQ中间件,当msql的数据更新之后会发送一条消息通知给MQ同时缓存服务接收这个消息,把数据同步到缓存中。采用的是redisson实现的读写锁,在读数据时添加共享锁,在更新数据时添加排他锁,来保证数据的强一致性,避免脏数据。我的这个项目是把热点贴的数据存入到了缓存,数据同步可以有一定的延时,所以采取的是异步的方案同步的数据。
2025-07-26 15:38:04
173
原创 Redis 缓存雪崩、缓存击穿、缓存穿透
互斥锁方案(Redis 中使用 setNX 方法设置一个状态位,表示这是一种锁定状态),保证同一时间只有一个业务线程请求缓存,未能获取互斥锁的请求,要么等待锁释放后重新读取缓存,要么就返回空值或者默认值。设置空值或者默认值:在缓存中设置一个空值或者默认值,这样后续请求就可以从缓存中读取到空值或者默认值,返回给应用,而不会继续查询数据库。了,此时大量的请求访问了该热点数据,就无法从缓存中读取,直接访问数据库,数据库很容易就宕机。,导致访问都查数据库,数据库因此压力增大而宕机。缓存穿透:用户访问的数据,
2025-07-26 15:25:05
219
原创 DATE和SimpleDateFormat
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss EEE ");//a代表上午下午 EEE代表周几。//时间毫秒值转系统当前时间1。//字符串转时间格式。
2025-06-04 15:37:57
658
原创 stringBuilder Objects;
Student student1 = new Student("张明楷",22);Student student = new Student("张明楷",22);//stringBuilder.length()返回长度。//Double.valueOf(c1)字符串转小数。//添加数据返回stringBuilder本身。//equals比较是否相等。//reverse反转。//导入可变长字符串。
2025-06-04 11:48:28
613
原创 QQ的截图使用
1、正常情况下在弹出菜单时使用QQ截图按钮或Ctrl+Alt+A快捷键,弹出折菜单会缩回去,使得无法截取下拉菜单。6、该QQ截图功能优点在于可以添加文字和图形注释,同时可在任意位置截取,缺点也是不能进行任意形状的截取。2、或直接按Ctrl+Alt+A组合键,会进入屏幕截图状态,在需要的地方按下鼠标左键开始截图。5、可利用弹出的工具按钮添加边框和文字注释等操作,完成后点击“完成”按钮即可完成截图操作。4、在弹出菜单后,松开Shift键,但Ctrl+Alt+A还不能松开。7、截图完成后松开鼠标左键即可。
2025-06-03 13:01:16
447
原创 计算器有问题1
System.out.println("结果为"+result1);System.out.println("结果为"+result2);System.out.println("结果为"+result);System.out.println("结果为"+result);System.out.println("结果为"+result);System.out.println("结果为"+result);System.out.println("结果为"+result);
2025-06-02 20:53:14
677
原创 cdm基础
在任意资源文件夹路径前输入cmd+空格。cmd中鼠标右键单机就是粘贴。win+r+输入cmd。查看当前目录下所有文件。画图 mspaint。记事本notepad。
2025-06-01 17:58:14
148
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅