自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 一台服务器可以支持多少TCP连接

​ 在linux系统中一切皆文件,每当有一个tcp连接建立,那么就会打开一个文件描述符。在Linux系统中,文件描述符打开的个数是有限制的,当超过这个限制的时候内核就会跑出too many open files异常。​linux上能打开的最大文件数量受三个参数限制,分别是:fs.file-max (系统级别参数):该参数描述了整个系统可以打开的最大文件数量。

2024-02-04 17:33:22 1759 2

原创 RocketMQ之事务消息原理

RocketMQ事务消息基本原理

2024-02-04 17:21:26 946

原创 RocketMQ设计

RocketMQ主要设计原理介绍

2024-02-04 17:20:51 900

原创 RocketMQ架构

注意:当前RocketMQ版本在部署架构上支持一Master多Slave,但。

2024-02-01 16:28:09 1327

原创 VisualVm安装及使用

通过 VisualVM,可以轻松监视远程主机上运行的应用程序,并查看有关远程系统的常规数据。要查看远程主机上应用程序的相关信息,要从远程应用程序中检索数据,需要在远程 JVM 上运行 jstatd 实用程序。单击“确定”后,将在“远程”节点下显示远程主机的节点。展开远程主机节点可查看远程主机上运行的 Java 应用程序。已连接的远程主机将列在“应用程序”窗口的“远程”节点下。展开远程主机节点可查看远程主机上运行的应用程序。无法对远程主机上运行的应用程序进行性能分析。可以用idea启动,也可以直接打开。

2024-02-01 15:57:32 979

原创 redis使用Big key的问题

BigKey问题

2024-01-31 23:00:00 570

原创 redis基本数据结构使用场景

redis使用常见业务场景

2024-01-31 22:00:00 1023

原创 redis排序

Redis的SORT命令可以对列表键、集合键或者有序集合键的值进行排序。

2024-01-25 22:00:00 2937

原创 arthas使用指南

arthas常用命令指南

2024-01-25 16:37:16 1177

原创 RocketMQ报错defaultMQProducer send exception

RocketMQ报错defaultMQProducer send exception

2024-01-24 17:29:50 1138

原创 redis集群 —— 高性能

Redis集群是Redis提供的分布式数据库方案,集群通过分片(sharding)来进行数据共享,并提供复制和故障转移功能。本节将对集群的节点、槽指派、命令执行、重新分片、转向、故障转移、消息等各个方面进行介绍。数据分片,每一个分片存在一个节点上,每个节点有一主多从,保证高可用。

2024-01-24 15:26:01 885

原创 redis高可用之Sentinel模式

Sentinel(哨岗、哨兵)是Redis的**高可用性(high availability)解决方案:由一个或多个Sentinel实例(instance)**组成的Sentinel系统 (system)可以监视任意多个主服务器,以及这些主服务器属下的所有从服务器,并在被监视的主服务器进入下线状态时,自动将下线主服务器属下的某个从服务器升级为新的主服务器,然后由新的主服务器代替 已下线的主服务器继续处理命令请求。redis的Sentinel模式既实现了协调者的高可用,也实现了redis服务的高可用。

2024-01-23 15:49:54 1527

原创 redis高可用之主从部署

在Redis中,用户可以通过执行SLAVEOF命令或者设置slaveof选 项,让一个服务器去复制(replicate)另一个服务器,我们称呼被复制 的服务器为主服务器(master),而对主服务器进行复制的服务器则被 称为从服务器(slave),如图所示那么B服务器将成为A服务器的从服务器,A也会成为B 的主服务器。进行复制中的主从服务器将保存相同的数据,概念上讲这种现象称为“数据库状态一致”。

2024-01-23 15:01:12 1584

原创 redis的事件机制

redis的事件机制

2024-01-22 15:25:42 1179

原创 redis持久化方式 —— RDB&AOF

深入理解RDB&AOF

2024-01-22 14:58:16 722

原创 redis数据结构(二)—— 对象

本文主要介绍了Redis中对象的类型和编码,以及各种不同类型的对象的特性和使用场景。包括字符串对象、列表对象、哈希对象、集合对象和有序集合对象等。同时,也提到了一些常用的命令操作,如增加元素、获取交集并集、计算成员数量等。此外,还介绍了Redis中的对象共享、内存回收机制以及对象的空转时长等概念。对于不同的对象底层使用的对象,需要大家熟记于心,在使用的时候才能选对正确的类型。1.2编码和底层实现(重要)

2024-01-17 19:46:50 774

原创 redis数据结构(一)

redis中基础数据类型

2024-01-17 17:30:18 938

原创 多租户体系实现

经过工作中的一处场景启发,我进行了深入学习并总结出本篇文章。

2024-01-16 21:04:09 1054

原创 第十三章 线程安全与锁优化

的线程争用同一个锁的情况,那轻量级锁就不再有效,必须要。

2024-01-16 15:38:41 871

原创 第十二章 Java内存模型与线程(二)

Java 目前的并发编程机制就与上述架构趋势产生了一些矛盾, 1: 1 的内核线程模型是如今 Java 虚拟机线程实现的主流选择,但是这种映射到操作系统上的线程天然的缺陷是切换、调度成本高昂,系统能容纳的线程数量也很有限。​ 广义上来讲,一个线程只要不是内核线程,都可以认为是用户线程(User Thread, UT)的一种,因此从这个定义上看,轻量级进程也属于用户线程,但轻量级进程的实现始终是建立在内核之上的,许多操作都要进行系统调用,因此效率会受到限制,并不具备通常意义上的用户线程的优点。

2024-01-15 22:44:10 965

原创 线程之间如何传递上下文信息

线程之间上下文传递

2024-01-15 11:51:35 931

原创 第十二章 Java内存模型与线程(一)

Java基础之内存模型与线程

2024-01-13 17:52:56 879

原创 第十一章 后端编译与优化

最爱的Java

2024-01-11 15:35:13 1104

原创 布隆过滤器(Bloom Filter)详解

Bloom filter是一种高效的数据结构,它可以用来判断一个元素是否在一个集合中。相比于传统的数据结构,如HashSet和HashMap,Bloom filter具有更高的空间效率和查询速度。不过,Bloom Filter有可能会出现错误判断,但不会漏掉判断。也就是Bloom Filter判断元素不再集合,那肯定不在。如果判断元素存在集合中的话,会有一定的概率判断错误。

2024-01-11 14:24:59 995

原创 第十章 前端编译与优化

前端编译器: JDK 的 Javac、 Eclipse JDT 中的增量式编译器( ECJ)即时编译器: HotSpot 虚拟机的 C1(客户端)、 C2(服务端) 编译器, Graal 编译器(仍然在实验)。提前编译器: JDK 的 Jaotc、 GNU Compiler for the Java(GCJ) [2]、 ExcelsiorJET​ 我们可以这样认为, Java 中即时编译器在运行期的优化过程,支撑了程序执行效率的不断提升;

2024-01-10 17:16:48 883

原创 BitMap解析之RoaringBitMap

深入理解压缩位图RoaringBitMap

2024-01-10 16:17:39 2231

原创 BitMap源码解析

深入理解BitMap

2024-01-09 21:09:40 565

原创 第八章 虚拟机字节码执行引擎

​ 局部变量表的容量以**变量槽( Variable Slot)**为最小单位。

2024-01-09 19:42:01 1039

原创 第七章 虚拟机类加载机制

但是jdk中有类A就需要使用这个类,实际运行的时候肯定不是用的接口,而是实现类,在加载类A的时候是bootstrap加载的发现类B的实现类C还未加载,则去加载类C,这里默认先用类A的加载器去加载,类C并不是在bootstrap加载的范围内的,而且按照双亲委派机制,是要从bootstrap往上找加载器的,很显然找不到,所以只能从线程上下文类加载器去加载。这阶段的验证是基于二进制字节流进行的,只有通过了这个阶段的验证之后,这段字节流才被允许进入 Java 虚拟机内存的方法区中进行存储,但是对于初始化阶段,

2024-01-08 21:15:48 794

原创 第三章 垃圾收集器与内存分配策略(三)

ZGC 收集器是一款基于Region 内存布局的,(暂时)不设分代的,使用了读屏障、染色指针和内存多重映射等技术来实现可并发的标记-整理算法的,以低延迟为首要目标的一款垃圾收集器。ZGC 的染色指针是最直接的、最纯粹的,它直接把标记信息记在引用对象的指针上,这时,与其说可达性分析是遍历对象图来标记对象,还不如说是遍历“引用图”来标记“引用”了。G1会随着堆变大,停顿的时间变长,原因也很容易理解,需要标记的对象越来越多了。对对象的种种标记不再是放在对象的本身属性上,而是放在了指向对象的引用身上。

2024-01-06 22:56:19 932

原创 ConcurrentHashMap为什么线程安全

一文了解ConcurrentHashMap线程安全核心

2024-01-06 17:53:57 1225

原创 第三章 垃圾收集器与内存分配策略(二)

几款经典的垃圾收集器

2024-01-05 17:22:23 836

原创 Socket与TCP的关系

深入理解Socket与TCP的联系

2024-01-05 15:48:53 3405 2

原创 第三章 垃圾收集器与内存分配策略(一)

在对象中添加一个引用计数器,每当有一个地方引用他,计数器值就加一;当引用失效时,计数器值就减一;任何时刻计数器为零的对象就是不可能再被使用的。问题:无法解决循环引用。

2024-01-03 20:30:56 894

原创 ScheduledThreadPoolExecutor源码解析

为什么ScheduledThreadPoolExecutor可以定时?

2024-01-03 20:11:17 340

原创 高并发累加器Striped64

Striped64主要用于支持并发累加器的实现。这个类在高并发环境下被用来做某种计数,【其设计的核心思想是在竞争激烈的时候尽量分散竞争】。为了达到这一目标,Striped64维护了一个base Count和一个Cell数组。在多线程环境中,当一个线程想要更新计数时,它会首先试图更新base变量。如果成功,则该线程退出计数;否则,由于竞争激烈,该线程会转向Cell数组来分散计数。Striped64根据线程来计算哈希,然后将不同的线程分散到不同的Cell数组的index上。

2024-01-02 20:59:18 1008

原创 第二章 Java内存区域与内存溢出异常

为你提供优质的JVM笔记

2023-12-29 15:32:16 911

原创 JDK中“常用的”三种同步辅助工具

JDK中使用抽象队列同步器实现的几种同步辅助工具。

2023-12-29 11:33:59 350

原创 “不常用”的CopyOnWriteArrayList

其实现原理采用”CopyOnWrite”的思路(不可变元素),即所有写操作,包括:add,remove,set等都会触发底层数组的拷贝,从而在写操作过程中,不会影响读操作;避免了使用synchronized等进行读写操作的线程同步;写加锁同时还进行了copy,所以说 CopyOnWrite对于写操作来说代价很大,故不适合于写操作很多的场景;当遍历操作远远多于写操作的时候,适合使用CopyOnWriteArrayList;

2023-12-28 11:28:39 918

原创 浅析Thread和线程的关系

浅析Thread和线程

2023-12-26 19:32:37 1029

深入理解Java虚拟机精华知识点

Java虚拟机(JVM)是Java Virtual Machine的缩写,它是一种规范用于计算设备。引入Java虚拟机后,Java语言在不同平台上运行时不需要重新编译。Java语言编译程序只需生成在Java虚拟机上运行的目标代码(字节码),就可以在多种平台上不加修改地运行。 Java虚拟机有如下几个主要特点:首先,它的结构严谨,面向对象,能够摆脱硬件平台的束缚,实现了“一次编写,到处运行”的理想;其次,它提供了一个相对安全的内存管理和访问机制,避免了绝大部分的内存泄漏和指针越界问题。 从架构角度来看,Java虚拟机主要包括类加载器、运行时数据区、执行引擎、垃圾收集器等部分。类加载器负责将字节码文件加载到内存中,运行时数据区用于存储程序执行时所需的数据,执行引擎则负责执行字节码文件,而垃圾收集器则负责回收不再使用的内存空间。

2024-01-16

李运华老师的从0开始学架构

每个程序员心中都有一个成为架构师的梦想,梦想是美好的,但道路是曲折的。 李运华老师大概在2006年开始參与架构设计,原本以为学习架构设计就像学习一门编程语言一样,先学习一下基本的语法,再研究一下细节和原理,然后实践一下就能够快速掌握。但真正实践后才发现,架构设计的难度和复杂度要高很多。从最早开始接触架构设计,到自我感觉初步完整掌握架构设计,至少花费了6年时间。等到自我感觉彻底掌握架构设计的精髓,至少花费了8年的时间。 李运华老师曾经以为是自己天资愚笨才会这样,后来李运华老师带了团队,看到几乎每个程序员在尝试架构设计的时候,都面临着李运华老师曾经遇到过的各种困惑和瓶颈。特别是李运华老师作为职业等级晋升评委的时候,发现很多同学技术能力很强,业务也很不错,但却卡在了架构设计这部分。李运华老师意识到这应该不是个人天资的问题,而是架构设计本身的一些特性导致的。本门课就是带着大家入门架构设计

2023-12-29

面试题-我的个人物品,经典永流传

面试题-我的个人物品,经典永流传

2023-01-31

空空如也

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

TA关注的人

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