陈树义的博客

分享我的所思所想

从全局角度,如何设计一个秒杀系统?

大家好,我是树哥。秒杀系统的设计是高级职位面试中非常高频的一道题目,它可以较好地考察候选人的知识体系情况。对于我们来说,学习秒杀系统的设计,能够让我们学以致用,设计系统的时候考虑得更加全面。今天就让树哥带你一起来看看怎么设计一个秒杀系统!活动一般出现在电商的促销活动中,一般是指定了很少数量的商品,以

系统总出故障怎么办,或许你该学学稳定性建设!

大家好,我是树哥。说到系统稳定性,不知道大家会想起什么?我想大多数人会觉得这个词挺虚的,不知道系统稳定性指的是什么。一年前的我看到这个词,也是类似于这样的感受,大概只知道要消除单点、做好监控报警,但却并没有一个体系化的方法论。经过一段时间的摸索,我对系统稳定性有了较为体系化的认识,于是迫不及待地希望

服务器宕机了,Kafka 消息会丢失吗?

大家好,我是树哥。消息队列可谓是高并发下的必备中间件了,而 Kafka 作为其中的佼佼者,经常被我们使用到各种各样的场景下。随着 Kafka 而来得,还有三个问题:消息丢失、消息重复、消息顺序。今天,树哥带大家聊聊消息丢失的问题。可靠性级别回到标题提出的问题:我们是否真的能保证 Kafka 消息不丢

Java 内存模型,或许应该这么理解

大家好,我是树哥。在前面一段时间,我连续写了几篇关于并发编程的文章:从 CPU 讲起,深入理解 Java 内存模型! - 陈树义的博客深入理解 happens-before 原则 - 陈树义的博客深入理解 synchronized 的锁优化 - 陈树义的博客深入理解 Java 对象的内存布局 - 陈

深入理解 volatile 关键字

volatile 关键字是 Java 语言的高级特性,但要弄清楚其工作原理,需要先弄懂 Java 内存模型。如果你之前没了解过 Java 内存模型,那可以先看看之前我写过的一篇「深入理解 Java 内存模型」一文。初学 volatile 关键字,我们需要弄清楚它到底意味着什么。总的来说,它有两个含义

深入理解 Java 对象的内存布局

对于 Java 虚拟机,我们都知道其内存区域划分成:堆、方法区、虚拟机栈等区域。但一个对象在 Java 虚拟机中是怎样存储的,相信很少人会比较清楚地了解。Java 对象在 JVM 中的内存布局,是我们了解并发编程同步机制的基础。在 HotSpot 虚拟机中,对象在内存中存储的布局可以分为 3 块区域

深入理解 synchronized 的锁优化

我们都知道 synchronized 关键字能实现线程安全,但是你知道这背后的原理是什么吗?今天我们就来讲一讲 synchronized 实现线程同步背后的原因,以及相关的锁优化策略吧。synchronized 背后的原理synchronized 关键字经过编译之后,会在同步块的前后分别形成 mon

深入理解 happens-before 原则

在前面的文章中,我们深入了解了 Java 内存模型,知道了 Java 内存模型诞生的意义,以及其要解决的问题。最终我们知道:Java 内存模型就是定义了 8 个基本操作以及 8 个规则,只要遵守这些规则的并发操作,那么它们就是安全的。即使强如树哥的人,看了这 16 条规则也很头疼。它们太过于繁琐了,

从 CPU 讲起,深入理解 Java 内存模型!

Java 内存模型,许多人会错误地理解成 JVM 的内存模型。但实际上,这两者是完全不同的东西。Java 内存模型定义了 Java 语言如何与内存进行交互,具体地说是 Java 语言运行时的变量,如何与我们的硬件内存进行交互的。而 JVM 内存模型,指的是 JVM 内存是如何划分的。Java 内存模

工作 7 年,我陷入的思维误区

曾经陷入的一个思维误区