Redis过期策略和内存淘汰机制

2023-11-19
阅读 1 分钟
421
定时删除,用一个定时器来负责监视key,过期则自动删除。虽然内存及时释放,但是十分消耗CPU资源。在大并发请求下,CPU要将时间应用在处理请求,而不是删除key,因此没有采用这一策略。

ConcurrentHashMap的实现原理

2023-11-04
阅读 19 分钟
440
因为多线程环境下,使用Hashmap进行put操作会引起死循环,导致CPU利用率接近100%(jdk1.7,1.8引入红黑树优化了),多线程put可能会导致元素丢失。所以在并发情况下不能使用HashMap。

【java基础】== 和 equals 的区别,重写equals可以不重写hashcode吗

2023-10-27
阅读 2 分钟
440
首先,让我们明确一下,== 是一个比较运算符,它比较两个值的值是否相等。 如果两个值相等,它返回 true;否则返回 false。 对于基本数据类型(例如 int、float、char 等),== 直接比较它们的值是否相等。 对于对象(例如 String、ArrayList 等),== 比较的是它们在内存中的地址是否相同,也就是说,比较的是它们是否...

Zab:Zookeeper 中的分布式一致性协议介绍

2023-10-22
阅读 4 分钟
396
Zookeeper 是一个为分布式应用提供高效且可靠的分布式协调服务。在解决分布式一致性方面,Zookeeper 并没有使用 Paxos ,而是采用了 ZAB 协议。

Java垃圾回收机制的发展历程

2023-10-17
阅读 2 分钟
408
在Java语言初始阶段,垃圾回收机制采用了标记-清除(Mark and Sweep)算法。这种算法的基本思路是,在程序运行过程中,当一个对象不再被引用时,将其标记为垃圾,并在后续的垃圾回收周期中清除这些垃圾。这种算法比较简单,但存在一些问题,如内存碎片和暂停时间较长。

Dubbo的负载均衡(LoadBalance)原理.md

2023-10-16
阅读 4 分钟
409
Dubbo是一个分布式服务框架,能避免单点故障和支持服务的横向扩容。一个服务通常会部署多个实例。如何从多个服务 Provider 组成的集群中挑选出一个进行调用,就涉及到一个负载均衡的策略。

MySQL InnoDB调试死锁

2023-10-13
阅读 3 分钟
360
1、在RR隔离级别下。2、查看间隙锁是否关闭区间锁(间隙锁,临键锁)是InnoDB特有施加在索引记录区间的锁,MySQL5.6可以手动关闭区间锁,它由innodb_locks_unsafe_for_binlog参数控制:

谈谈HashMap的一些问题

2023-10-11
阅读 1 分钟
436
该方法实现的机制就是将每个链表转化到新链表,并且链表中的位置发生反转,而这在多线程情况下是很容易造成链表回路,从而发生 get() 死循环。所以只要保证建新链时还是按照原来的顺序的话就不会产生循环(JDK 8 的改进)。即在jdk1.7是采用的头插法,在jdk1.8使用了尾插法解决。

Java内存模型之happens-before原则

2023-10-09
阅读 1 分钟
296
Happens-Before 是一种可见性模型,如果一个操作happens-before另一个操作,那么第一个操作的执行结果将对第二个操作可见,而且第一个操作的执行顺序排在第二个操作之前。

深入理解G1收集器

2023-10-06
阅读 6 分钟
347
在G1提出之前,经典的垃圾收集器主要有三种类型:串行收集器、并行收集器和并发标记清除收集器,这三种收集器分别可以是满足Java应用三种不同的需求:内存占用及并发开销最小化、应用吞吐量最大化和应用GC暂停时间最小化,但是,上述三种垃圾收集器都有几个共同的问题:(1)所有针对老年代的操作必须扫描整个老年代空间...

jdk21的新特性有哪些

2023-10-06
阅读 3 分钟
1k
Spring Boot 3.x 版本最低支持的 JDK 版本为 JDK 17,也就是说如果你还想用 JDK8的话,那能用的最高 Spring Boot 版本为 2.7。

多线程的几种实现方式

2023-10-03
阅读 3 分钟
249
多进程是指操作系统能同时运行多个任务(程序)。多线程是指在同一程序中有多个顺序流在执行。采用多线程的编程方式,能充分利用 CPU 资源,显著的提升程序的执行效率。

谈谈时间轮算法

2023-10-03
阅读 2 分钟
847
时间轮中的每个时间格代表了时间轮的基本时间跨度或者说时间精度,假如时间一秒走一个时间格的话,那么这个时间轮的最高精度就是 1 秒(也就是说 3 s 和 3.9s 会在同一个时间格中)。

MySQL支持哪些存储引擎?MyISAM和InnoDB的区别

2023-09-29
阅读 2 分钟
512
InnoDB:InnoDB是MySQL的默认存储引擎,支持事务处理、行级锁定和外键约束,具有高性能、高可靠性和高并发性。适用于需要执行大量更新和事务操作的应用场景,如银行、金融、电商等。

浅谈双亲委派和破坏双亲委派

2023-09-29
阅读 2 分钟
462
如果不是同一个类加载器加载,即使是相同的class文件,也会出现判断不相同的情况,从而引发一些意想不到的情况,为了保证相同的class文件,在使用的时候,是相同的对象,jvm设计的时候,采用了双亲委派的方式来加载类。

并发编程的优缺点

2023-09-27
阅读 2 分钟
658
在计算机科学和软件工程中,并发编程是一种涉及同时处理多个任务的技术。它被广泛应用于各种系统和应用中,如多线程应用、网络服务器和实时系统等。然而,尽管并发编程具有许多优点,但也有一些潜在的缺点需要谨慎处理。

谈一谈MySQL的binlog日志

2023-09-26
阅读 2 分钟
869
binlog是记录所有数据库表结构变更(例如CREATE、ALTER TABLE…)以及表数据修改(INSERT、UPDATE、DELETE…)的二进制日志。不会记录SELECT和SHOW这类操作,因为这类操作对数据本身并没有修改,但可以通过查询通用日志来查看MySQL执行过的所有语句。

Java内存模型之happens-before原则

2023-09-24
阅读 2 分钟
738
Happens-Before 是一种可见性模型,也就是说,在多线程环境下。 原本因为指令重排序的存在会导致数据的可见性问题,也就是 A 线程修改某个共享变量 对 B 线程不可见。因此,JMM 通过 Happens-Before 关系向开发人员提供跨越线程的内存可见性保证。 如果一个操作的执行结果对另外一个操作可见,那么这两个操作之间必然存...

谈谈你对volatile的理解

2023-09-23
阅读 4 分钟
874
缓存不一致性问题为了解决缓存不一致性问题,通常来说有以下2种解决方法:1)通过在总线加LOCK#锁的方式2)通过缓存一致性协议这2种方式都是硬件层面上提供的方式。在早期的CPU当中,是通过在总线上加LOCK#锁的形式来解决缓存不一致的问题。因为CPU和其他部件进行通信都是通过总线来进行的,如果对总线加LOCK#锁的话,也...

MySQL是如何保证数据不丢失的

2023-09-22
阅读 4 分钟
1.1k
3、系统给每个线程分配了一片 binlog cache 内存,参数 binlog_cache_size 用于控制单个线程内 binlog cache 所占内存的大小。如果超过了这个大小,就要暂存到磁盘。

如何在单台8G内存机器上实现1TB日志排序

2023-09-21
阅读 1 分钟
960
现在有一批日志数据,大小为1TB,数据是某一天的生产的日志数据,现在只有一台单CPU及8G内存的机器,请使用算法对此日志数据按时间的先后顺序进行排序。

Java内存模型-CPU和缓存一致性问题

2023-09-20
阅读 2 分钟
1.1k
我们应该都知道,计算机在执行程序的时候,每条指令都是在CPU中执行的,而执行的时候,又免不了要和数据打交道。而计算机上面的数据,是存放在主存当中的,也就是计算机的物理内存。

kafka如何保证消息不丢失

2023-09-19
阅读 3 分钟
1.6k
主要从三方面来介绍,消息发送端保证数据不丢失,kafka服务保证消息不丢失,消费者保证消息不丢失。基础知识kafka 可以保证分区消息的顺序,同一个分区,先发送到kafka分区的消息,会被先消费掉。kafka 是通过一个集群对外提供服务,只要是集群中多个副本中有一个副本是活跃的,那么收到的消息就不会丢失。kafka集群保证...

Java中的锁原理、锁优化

2023-09-18
阅读 6 分钟
1.2k
Java编程语言允许线程访问共享变量, 为了确保共享变量能被准确和一致地更新,线程应该确保通过排他锁单独获得这个变量。Java语言提供了volatile,在某些情况下比锁要更加方便。

聚集索引和非聚集索引的区别

2023-09-17
阅读 2 分钟
610
innodb的索引InnoDB的主键索引与行记录是存储在一起的,故叫做聚集索引(Clustered Index):没有单独区域存储行记录主键索引的叶子节点,存储主键,与对应行记录(而不是指针)因为这个特性,InnoDB的表必须要有聚集索引:(1)如果表定义了PK,则PK就是聚集索引;(2)如果表没有定义PK,则第一个非空unique列是聚集索引;...

谈一谈kafka的存储机制

2023-09-15
阅读 3 分钟
399
如果实验环境中Kafka集群仅仅有一个broker。xxx/message-folder为数据文件存储根文件夹。在Kafka broker中server.properties文件配置(參数log.dirs=xxx/message-folder)。比如创建2个topic名称分别为report_push、launch_info, partitions数量都为partitions=4

JAVA IO流简介

2023-09-14
阅读 4 分钟
307
关于流的特性有下面几点:1.先进先出:最先写入输出流的数据最先被输入流读取到。2.顺序存取:可以一个接一个地往流中写入一串字节,读出时也将按写入顺序读取一串字节,不能随机访问中间的数据。(RandomAccessFile除外)3.只读或只写:每个流只能是输入流或输出流的一种,不能同时具备两个功能,输入流只能进行读操作...

Java并发程序设计-总览学习

2023-09-10
阅读 5 分钟
887
使用ThreadLocal它的功用非常简单,就是为每一个使用该变量的线程都提供一个变量值的副本,是每一个线程都可以独立地改变自己的副本,而不会和其它线程的副本冲突。从线程的角度看,就好像每一个线程都完全拥有该变量。注意:使用ThreadLocal,一般都是声明在静态变量中,如果不断的创建ThreadLocal而且没有调用其remove...

kafka是如何实现高吞吐量和高性能的

2023-09-09
阅读 2 分钟
1.3k
Kafka是一个分布式、分区的、多副本的、多订阅者,基于zookeeper协调的分布式消息系统。Kafka虽然是基于磁盘做的数据存储,但却具有高性能、高吞吐、低延时的特点

Java 9 新特性概览

2023-09-08
阅读 3 分钟
726
Java 9 发布于 2017 年 9 月 21 日 。作为 Java 8 之后 3 年半才发布的新版本,Java 9 带来了很多重大的变化其中最重要的改动是 Java 平台模块系统的引入,其他还有诸如集合、Stream 流......。