我们来聊聊JVM的GC吧

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

我们来聊聊HashMap吧

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

让我们从一条update语句谈起

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

浅谈知识的结构与认知

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

我们来聊聊线程安全吧

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

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

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

JMH探索学习笔记(一)

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

ClassLoader探索笔记

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