分类:Java

11 篇文章

JVM知识点总结(一)
本文内容仅包括JVM区域、JMM、GC。其中HotSpot的算法细节暂跳过,Shenandoah GC和ZGC较为省略。后续开坑,并且还有关于类的加载,程序编译等也会陆续补上。 Java运行时数据区域 Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域。根据《Java虚拟机规范 SE8》可以划分为以下区域: 程序计…
浅谈分布式事务那些事
本篇文章我们重点讨论关于分布式事务的一些相关知识点。这是学习分布式系统的一个必不可少的技术。我们最常见的案例就是银行转账问题,A账户向B账户转100元,那么A账户余额要减少100,B账户上要增加100。两个步骤必须都要成功才算成功,只成功一个的话应当回滚掉。如果A和B不在同一个环境或者系统上,这个事务就是分布式事务了,那么在这种情况下,如何保证事务…
Spring源码分析(二)如何解决循环依赖
在上一篇Spring源码分析中,我们跳过了一部分关于Spring解决循环依赖部分的代码,为了填上这个坑,我这里另开一文来好好讨论下这个问题。 首先解释下什么是循环依赖,其实很简单,就是有两个类它们互相都依赖了对方,如下所示: @Component public class AService { @Autowired private BService…
Spring源码分析(一) 从Spring Bean的生命周期谈起
Spring Bean的生命周期真的是面试的时候关于Spring的最高频的考点之一了,笔者曾经被这个问题问懵了不止一次,一直记不住那一大串的步骤,但实际上尝试去死记硬背那些步骤的我是错误的,表面上看只是背诵一个流程,实际上,这个流程牵扯到的知识点可是很多而且很有意思的。 下面这个图我想很多人应该都看过相同的或者相似的: 看起来还是挺长的对吧,但是我…
实现分布式锁的各种姿势
各位Javaer都对锁应该都是不陌生的,无论工作还是面试的时候,都是很常见的。不过对于大部分的小型的项目,也就是单机应用,基本都是使用Java的juc即可应对,但是随着应用规模的扩大,在分布式系统中,依靠着诸如syncronized,lock这些就无法应对了。那么本文就是来给大家唠嗑唠嗑在分布式系统中常见的几种实现分布式锁的方式。 数据库方式实现分…
谈谈Map
作为Javaer,对于Map这个单词绝对不会陌生,无论是开发过程中还是出去面试的时候,都会经常遇到,而最频繁使用和面试提问的无非这么几个,HashMap, HashTable, ConcurrentHashMap。那么本文就针对这几个知识点做一个归纳和总结。 从HashMap说起 HashMap是上面提到的几个Map中使用频率最高的了,毕竟需要考虑…
JVM运行时数据区域
Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域,本篇文章将会对这些数据区域进行简略的介绍。 JVM所管理的内存包括的数据区域如下图所示: 根据这张图我们来一个个介绍这些数据区域。 程序计数器 程序计数器(ProgramCounterRegister)是一块较小的内存空间,它可以看作是当前线程所执行的字节码的行号…
简述Java内存模型
Java内存模型即Java Memory Model,简称JMM,其规范了Java虚拟机与计算机内存时如何协同工作的,规定了一个线程如何和何时看到其他线程修改过的值,以及在必须时,如何同步访问共享变量。 JVM的内存分配 在解释Java内存模型之前,我们先了解下JVM的内存分配的几个概念,如下图所示,Java内存模型把内存分为两大块,一个是堆一个是…
Spring Boot 学习笔记(二)—— Spring Boot常见配置
前一篇博客中介绍了spring boot的基础知识以及如何搭建最简单的spring boot项目,现在我们来讲一下spring boot的配置文件使用方法。 我们新建完spring boot项目后会发现在resources目录下会有一个application.properties的配置文件,spring boot启动时会默认读取这个配置文件里面的内…
Spring Boot 学习笔记(一)— Spring简介及Spring Boot快速搭建
不久前在学习Spring Cloud的相关知识,原本准备基于Spring Cloud来搭建自己的网站的,但最近工作实在有点繁忙,看书断断续续的,书包里的kindle强行撑了两个多礼拜没关机,现在对于之前看的东西已经忘了不少,因此现在把做的笔记以及编写的demo都记录下来,以便分享给他人(其实我知道没人看)以及自己后续翻看复习。 Spring简介 在…