java Kafka消息系统基础知识索引 我们在《360度测试:KAFKA会丢数据么?其高可用是否满足需求?》这篇文章中,详细说明了KAFKA是否适合用在业务系统中。但有些朋友,还不知道KAFKA为何物,以及它为何存在。这在工作和面试中是比较吃亏的,因为不…
java Java并发编程——线程安全性深层原因 随着CPU的发展,而因为CPU的速度和内存速度不匹配的问题(CPU寄存器的访问速度非常快,而内存访问速度相对偏慢),所有在CPU和内存之间出现了多级高速缓存。下图是现代CPU和内存的一般架构图:我们可以看到高速缓…
java 追踪解析Spring ioc启动源码(2) 该行代码会将 iocConfig bean 注册到 reader 中AnnotationConfigApplicationContext 的 register 方法:
java 断开TCP连接 我们知道TCP通过三次握手建立可靠连接,通过四次挥手断开连接,TCP连接是比较昂贵的资源。为什么TCP需要通过三次握手才能建立可靠的连接?两次不行么?断开连接为什么需要四次?TCP连接昂贵在哪里?
java 安装java编程环境 首先明确自己使用的操作系统 在各个系统中的操作其实大同小异,都是以下三个步骤。下载、安装、配置环境变量(以及验证是否配置成功) 下面这个是针对Windows的 Windows版 下载JDK(java development kit) 首先…
java Spring Boot+SQL/JPA实战悲观锁和乐观锁 最近在公司的业务上遇到了并发的问题,并且还是很常见的并发问题,算是低级的失误了。由于公司业务相对比较复杂且不适合公开,在此用一个很常见的业务来还原一下场景,同时介绍悲观锁和乐观锁是如何解决这类并发…
java 从wait的源码看撤销偏向锁的过程(revoke and rebias) wait源码实现如下 {代码…} 在biasedLocking.cpp中可以看到方法的实现。整体结构划分如下 {代码…} 没有获取偏向锁 这里表示还没有被偏向,并且不是执行rebias {代码…} 已经被其它线程获取了偏向 {代码…} …
java Spring源码一(容器的基本实现2) 如果你使用过SpringBoot, 你一定会知道porfile配置所带来的方便, 通过配置开发环境还是生产环境, 我们可以十分方便的切换开发环境,部署环境,更换不同的数据库。 可能为了让Java开发者转向SpringBoot开发, S…
java 偏向锁状态转移原理 当多个处理器同时处理的时候,通常需要处理互斥的问题。 一般的解决方式都会包含acquire和release这个两种操作,操作保证,一个线程在acquire执行之后,在它执行release之前,其它线程不能完成acquire操作。这个…
java LockSupport中的park与unpark原理 LockSupport是用来创建locks的基本线程阻塞基元,比如AQS中实现线程挂起的方法,就是park,对应唤醒就是unpark。JDK中有使用的如下