发布了文章2023-11-19
定时删除,用一个定时器来负责监视key,过期则自动删除。虽然内存及时释放,但是十分消耗CPU资源。在大并发请求下,CPU要将时间应用在处理请求,而不是删除key,因此没有采用这一策略。
发布了文章2023-11-04
因为多线程环境下,使用Hashmap进行put操作会引起死循环,导致CPU利用率接近100%(jdk1.7,1.8引入红黑树优化了),多线程put可能会导致元素丢失。所以在并发情况下不能使用HashMap。
发布了文章2023-10-27
首先,让我们明确一下,== 是一个比较运算符,它比较两个值的值是否相等。 如果两个值相等,它返回 true;否则返回 false。 对于基本数据类型(例如 int、float、char 等),== 直接比较它们的值是否相等。 对于对象(例如 String、ArrayList 等),== 比较的是它们...
发布了文章2023-10-22
Zookeeper 是一个为分布式应用提供高效且可靠的分布式协调服务。在解决分布式一致性方面,Zookeeper 并没有使用 Paxos ,而是采用了 ZAB 协议。
发布了文章2023-10-17
在Java语言初始阶段,垃圾回收机制采用了标记-清除(Mark and Sweep)算法。这种算法的基本思路是,在程序运行过程中,当一个对象不再被引用时,将其标记为垃圾,并在后续的垃圾回收周期中清除这些垃圾。这种算法比较简单,但存在一些问题,如内存碎片和暂停时间较长。
发布了文章2023-10-16
Dubbo是一个分布式服务框架,能避免单点故障和支持服务的横向扩容。一个服务通常会部署多个实例。如何从多个服务 Provider 组成的集群中挑选出一个进行调用,就涉及到一个负载均衡的策略。
发布了文章2023-10-13
1、在RR隔离级别下。2、查看间隙锁是否关闭区间锁(间隙锁,临键锁)是InnoDB特有施加在索引记录区间的锁,MySQL5.6可以手动关闭区间锁,它由innodb_locks_unsafe_for_binlog参数控制:
发布了文章2023-10-11
该方法实现的机制就是将每个链表转化到新链表,并且链表中的位置发生反转,而这在多线程情况下是很容易造成链表回路,从而发生 get() 死循环。所以只要保证建新链时还是按照原来的顺序的话就不会产生循环(JDK 8 的改进)。即在jdk1.7是采用的头插法,在jdk1.8使用了...
发布了文章2023-10-09
Happens-Before 是一种可见性模型,如果一个操作happens-before另一个操作,那么第一个操作的执行结果将对第二个操作可见,而且第一个操作的执行顺序排在第二个操作之前。
发布了文章2023-10-06
在G1提出之前,经典的垃圾收集器主要有三种类型:串行收集器、并行收集器和并发标记清除收集器,这三种收集器分别可以是满足Java应用三种不同的需求:内存占用及并发开销最小化、应用吞吐量最大化和应用GC暂停时间最小化,但是,上述三种垃圾收集器都有几个共同的问...
发布了文章2023-10-06
Spring Boot 3.x 版本最低支持的 JDK 版本为 JDK 17,也就是说如果你还想用 JDK8的话,那能用的最高 Spring Boot 版本为 2.7。
发布了文章2023-10-03
多进程是指操作系统能同时运行多个任务(程序)。多线程是指在同一程序中有多个顺序流在执行。采用多线程的编程方式,能充分利用 CPU 资源,显著的提升程序的执行效率。
发布了文章2023-10-03
时间轮中的每个时间格代表了时间轮的基本时间跨度或者说时间精度,假如时间一秒走一个时间格的话,那么这个时间轮的最高精度就是 1 秒(也就是说 3 s 和 3.9s 会在同一个时间格中)。
发布了文章2023-09-29
InnoDB:InnoDB是MySQL的默认存储引擎,支持事务处理、行级锁定和外键约束,具有高性能、高可靠性和高并发性。适用于需要执行大量更新和事务操作的应用场景,如银行、金融、电商等。
发布了文章2023-09-29
如果不是同一个类加载器加载,即使是相同的class文件,也会出现判断不相同的情况,从而引发一些意想不到的情况,为了保证相同的class文件,在使用的时候,是相同的对象,jvm设计的时候,采用了双亲委派的方式来加载类。
发布了文章2023-09-27
在计算机科学和软件工程中,并发编程是一种涉及同时处理多个任务的技术。它被广泛应用于各种系统和应用中,如多线程应用、网络服务器和实时系统等。然而,尽管并发编程具有许多优点,但也有一些潜在的缺点需要谨慎处理。
发布了文章2023-09-26
binlog是记录所有数据库表结构变更(例如CREATE、ALTER TABLE…)以及表数据修改(INSERT、UPDATE、DELETE…)的二进制日志。不会记录SELECT和SHOW这类操作,因为这类操作对数据本身并没有修改,但可以通过查询通用日志来查看MySQL执行过的所有语句。
发布了文章2023-09-24
Happens-Before 是一种可见性模型,也就是说,在多线程环境下。 原本因为指令重排序的存在会导致数据的可见性问题,也就是 A 线程修改某个共享变量 对 B 线程不可见。因此,JMM 通过 Happens-Before 关系向开发人员提供跨越线程的内存可见性保证。 如果一个操作的执...
发布了文章2023-09-23
缓存不一致性问题为了解决缓存不一致性问题,通常来说有以下2种解决方法:1)通过在总线加LOCK#锁的方式2)通过缓存一致性协议这2种方式都是硬件层面上提供的方式。在早期的CPU当中,是通过在总线上加LOCK#锁的形式来解决缓存不一致的问题。因为CPU和其他部件进行通...
发布了文章2023-09-22
3、系统给每个线程分配了一片 binlog cache 内存,参数 binlog_cache_size 用于控制单个线程内 binlog cache 所占内存的大小。如果超过了这个大小,就要暂存到磁盘。