RocketMQ漫谈之从消息队列到事务消息

9 月 1 日
阅读 13 分钟
348
当我书写的时候,我的痛苦从我的心里通过血液流淌到我书写的文字上。引言最近在零拷贝、分布式事务消息,架构的认知上有了新的理解,于是重新打算学习一下RocketMQ,关于RocketMQ的文章已经写了三篇:《消息队列引论》《RocketMQ学习笔记(一) 初遇篇》《RocketMQ学习笔记(二) 相识篇》关于零拷贝这里讲了三篇《译: 通过零...
封面图

当数组遇上队列: Java线程安全实现详解(一)

7 月 28 日
阅读 34 分钟
287
当你养成一种分析问题、琢磨文章的习惯之后,日积月累;你便会感到复杂的东西也是由少数几个大的部分组成的。这些部分出现的原因和它们之间的相互关系也是可以理解的。与此同时,由于读的东西多了,运算的技巧也高了,你会发现,一些复杂的推演过程大部分是由某些必然的步骤所组成,就比较容易抓住新的关键性的部分 --- ...
封面图

库存扣减-订单的第一道关卡

6 月 23 日
阅读 6 分钟
711
订单在创建的时候,需要扣除对应商品的库存,那么一个核心的问题就是我们不能超卖,那么我们该如何实现不超卖呢,那么我们可以借助数据库乐观锁的思想来实现库存扣减,首先我们有一张商品表,为了方面讨论我们的表里面就只有skuId和库存数量:
封面图

我们来聊聊JVM的G1吧

6 月 16 日
阅读 11 分钟
674
PC(program counter) register: 每个线程都有PC寄存器,对于非本地方法存储的当前指令的地址,对于本地方法PC寄存器未定义。
封面图

由MongoDB中的B树引发的随想

6 月 2 日
阅读 11 分钟
483
MongoDB 底层是如何存储数据的,一个 collection 一个文件吗?索引在底层是如何组织的? 一个 collection 对应到底层存储引擎就是一个文件,另外每个索引也是单独的文件,每个数据和索引文件的默认结构是 b 树,用户建表的时候也可以指定 lsm 结构,不过绝大多数用户基本都是使用 b 树结构
封面图

我们来聊一聊Spring的事务失效吧

5 月 19 日
阅读 26 分钟
403
关于事务失效, 两年前在《Spring 事务学习笔记(一) 初遇篇》已经基本讨论过了,我们简单回忆一下里面的内容,这里我们讲了声明式事务也就是@Transaction的基本使用,讲了编程式事务的基本使用:
封面图

我们来聊聊JVM的GC吧

5 月 2 日
阅读 12 分钟
243
在21年的时候写了一篇《JVM学习笔记(一) 初遇篇》,我们回忆一下这篇文章的内容, 我们讲了JVM运行时区域的组成,也就是一个JVM进程将申请到的区域划分了几部分, 但是这个问题没有统一答案,在JDK 8下面有不同的垃圾回收器,不同的垃圾回收器策略不一样,比如JDK 8 默认的垃圾回收器,Parallel Scavenge(作用于年轻代)和P...
封面图

我们来聊聊HashMap吧

4 月 13 日
阅读 14 分钟
208
也就是hash算法、数组、链表、红黑树,我放入的key-value,根据hash算法会计算出来应该放置到数组的哪个位置上,如果出现了hash冲突,也就是hash算法映射出来的下标是一个,但是使用equals方法判断不相等,那么也就是出现了hash冲突,就会数组对应的位置形成链表,链表大于8个之后,转为红黑树。为什么是8才就转为红黑树...
封面图

让我们从一条update语句谈起

4 月 9 日
阅读 13 分钟
269
我们知道我们执行update语句更新同一行数据的时候是互斥的,也就是说假设有两条update语句: {代码...} 如果语句A先执行,语句B后执行,那么A和B不会并发执行,也就是说B会等待A执行完再执行:我们可以看到如果A如果一直不提交,B在一直等到超时之后,就会报: Lock wait timeout exceeded; try restarting transaction。我...
封面图

让我们从原子类和volatile谈起(一)

4 月 4 日
阅读 19 分钟
287
执行到语句一的时候,已经自增完成了,那为什么会线程一和线程二会出现重复值呢?我们看下AtomicInteger.getAndIncrement的源码:

译: 通过零拷贝实现高效数据传输

3 月 22 日
阅读 8 分钟
352
这种活动似乎看起来只需要一点CPU,但是非常低效: 内核从磁盘读取数据,并将其穿过内核-用户边界给应用,然后应用再将其穿过内核-用户边界推送过来,写入Socket。事实上,应用程序充当了从磁盘到Socket的低效媒介。
封面图

B-树如何让你的查询更快

3 月 17 日
阅读 6 分钟
200
好久没翻译文章了,感觉自己的英文功底有点下降,前几篇文章都着眼于网络I/O了,这篇文章之后我们开始看点数据库、数据结构之类的内容。原文链接: [链接]已经征得作者的同意可以进行翻译。
封面图

如何定位线上Java应用CPU飙高

3 月 10 日
阅读 8 分钟
357
对这个问题,感觉自己认知的还是不够清晰,于是今天就来理清楚思路,说到线上CPU飙高,说起这个问题的时候,我想到了什么呢? 我想起了处理器调度,我想起Linux CFS调度,CFS是 Completely Fair Scheduler,也就是完全公平调度,也就是说它完全实现了所谓的“完全公平”调度算法,将CPU资源均匀的分配给各个进程(在内核中被...
封面图

用Java的BIO和NIO、Netty实现HTTP服务器(六) 从问题中来学习Netty

3 月 10 日
阅读 7 分钟
288
原本这一篇是打算放到《用Java的BIO和NIO、Netty实现HTTP服务器(四) 从问题中来学习Netty》里面的,但是想来放在一起跟四里面的内容整体连贯性不太强,索性就将这部分内容单独放出来一篇,本篇我们主要从《jdk17下netty导致堆内存疯涨原因排查 | 京东云技术团队》这篇文章的问题入手来学习Netty,首先对方给了一张图:
封面图

用Java的BIO和NIO、Netty实现HTTP服务器(五) 理解Netty的流水线

3 月 10 日
阅读 16 分钟
269
我们还在语句五中声明了childHandler,也就是HttpHelloWorldServerInitializer,每次连接建立之后都会被触发,我在HttpHelloWorldServerInitializer加了一行输出代码:
封面图

用Java的BIO和NIO、Netty来实现HTTP服务器(四) 理解Netty

3 月 10 日
阅读 12 分钟
293
让我们来捋一捋前面讲了什么,前面我们试图用Java 标准API构建BIO、NIO模型的HTTP服务器,用Java标准API构建的时候,我们操心的事情也就是管理连接,读写报文,BIO就简单些,连接到了,我们就在那里读写,读到结束符,交给下层的去解析,然后回写报文。到NIO的时候编码又复杂了一些,连接到了,未必是可读可写,我们有一...
封面图

用Java的BIO和NIO、Netty来实现HTTP服务器(三) 用Netty实现

1 月 7 日
阅读 20 分钟
563
Netty is an NIO client server framework which enables quick and easy development of network applications such as protocol servers and clients. It greatly simplifies and streamlines network programming such as TCP and UDP socket server.Netty是一个 NIO的客户端、服务端框架,能够让你快速、简单的开发...
封面图

用Java来实现BIO和NIO模型的HTTP服务器(二) NIO的实现

1 月 1 日
阅读 29 分钟
604
这是一个系列的文章,按照规划是用Java标准库、Netty来实现一个非常简单的HTTP服务器,HTTP服务器我们可以使用Java标准库提供的api,实现BIO、NIO模型的HTTP服务器,然后再用Netty实现,前一篇我们写的类在这一篇还可以用到,让我们回忆一下上一篇我们讲了什么,我们回顾了通信的发展史,从最开始的点对点链路,到总线链...
封面图

浅谈知识的结构与认知

2023-12-02
阅读 6 分钟
288
感觉这篇文章对非计算机专业的人来说阅读起来会有点不友好,后面会考虑重新探讨这个问题hello,我的朋友,我预计想跟你讨论知识的结构,在这个基础上我们讨论如何学习知识,提到知识的结构我想到了两张图:首先我认为知识是网状的,他们分散成一个又一个节点,而学习的过程中就是在旧有的知识点创建连接,或者向脑中加入...
封面图

我们来聊聊线程安全吧

2023-11-15
阅读 25 分钟
479
之前在知乎看到一个问题,京东一面:为什么 HashMap 是线程不安全的?看到这个问题我的第一个反应是,什么是线程安全,我还是饶有兴致的向我自己提问,然后期待一个像是数学定义一样的答案。那么什么是线程? 从操作系统的角度来看,为了实现任务并发,提高CPU的使用率,我们引入了进程,一个执行的程序在等待资源的时候...
封面图

记一次排查循环依赖的经历

2023-10-22
阅读 24 分钟
1.4k
Spring是如何解决循环依赖的,想来类似解读的文章已经如汗牛充栋,我在之前背面试题的时候也是将其认为是高频面试题去准备,但是背的时候也是记了个大概,但是记得一年前的一个项目,在windows上运行的好好的,在Linux上就报循环依赖,当时用了@Lazy注解解决这个问题,其实当时心里还是有疑问的,想不明白为什么一个jar...
封面图

JMH探索学习笔记(一)

2023-09-29
阅读 11 分钟
435
这篇想换成对话体,像柏拉图的《理想国》一样,尝试切换文章的风格。缘起本篇对话的双方是悟空与龟仙人,这两个也学了Java,龟仙人决定传授给悟空JMH。于是龟仙人找到悟空。龟仙人: 悟空,你可曾听过语言之间的性能对比。悟空: 我听过,一般C++最快,然后是Java之类的。龟仙人: 所以为什么C++最快呢。悟空: 这个我学过...
封面图

ClassLoader探索笔记

2023-09-17
阅读 42 分钟
677
前言最近打算学习一下Unsafe,然后看了一下其中的方法之后,然后轻车熟路的写下以下代码: {代码...} 然后报了下面这个错: {代码...} 不让我调是吧,我可以用好多种方式来调用,虽然本质上都是通过反射:方式一: 通过反射调用构造函数,产生Unsafe对象。 {代码...} 方式二: Unsafe类内部声明了一个成员变量是Unsafe类型, ...
封面图