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中使用频率最高的了,毕竟需要考虑…
关联规则挖掘与Apriori算法
关联规则挖掘是数据挖掘中常用的手段,一般指的是从交易数据库、关系数据库以及其他的数据集中发现项或对象的频繁的模式(frequent patterns)、关联(association)的过程。此方法一般用于在购物篮分析(market basket analysis)中。最早是用于发现超市销售数据库中不同商品之间的关联关系,最经典的莫过于啤酒与尿布的这…
就乱七八糟地发泄下
今晚闲来无事翻了下自己的博客和一些之前整理的笔记资料什么的,猛然就发现我已经很久没正儿八经的去认真的学习一些东西了。最后一篇博客还是今年四月份写的,都过去七个月了。回想下从四月份到现在的七个月,总感觉真的是时间都被我给白白浪费了。 今年已经是毕业的第三个年头了,但发展的结果好像和自己想要的相差甚远。记得第一年的时候,菜的抠脚,拖团队后腿的那种菜,熬…
机器学习A-Z~Thompson抽样算法
本文继续讲一个强化学习的算法,叫做Thompson抽样算法。这个算法的数学理论基础要用到的是贝叶斯推断(Bayesian Inference)。我们先谈谈这个算法的基本原理。 Thompson抽样算法基本原理 我们依然使用之前的多臂老虎机的问题。如图所示,横轴代表奖励,越往右边表示奖励越多。三条竖线代表三个不同的老虎机它们的平均奖励。 在算法开始前…
机器学习A-Z~置信区间上界算法 Upper Confidence Bound or UCB
本文将要开始介绍机器学习中的强化学习, 这里首先应用一个多臂老虎机(The Multi-Armed Bandit Problem)问题来给大家解释什么是强化学习。 多臂老虎机问题 如图所示,我们有几个单臂老虎机,组成一起我们就称作多臂老虎机,那么我们需要制定什么样的策略才能最大化得到的奖励。这里假设每个老虎机奖励的随机分布是不一样的。 比如第一个分…