Java
文章平均质量分 94
Java相关
7k9c
世上只有一种英雄主义,就是在认清生活真相之后仍然热爱生活。
展开
-
MyBatis源码解析——缓存
MyBatis一级缓存和二级缓存的源码解析。原创 2021-12-19 23:00:47 · 1350 阅读 · 0 评论 -
MyBatis 源码解析——插件相关
不想被抓取也不知道说啥。原创 2021-12-15 23:05:00 · 517 阅读 · 0 评论 -
AbstractQueuedSynchronizer源码解析(上)
文章目录AbstractQueuedSynchronizer源码解析(上)加锁源码解锁实例分析总结AbstractQueuedSynchronizer源码解析(上)AbstractQueuedSynchronizer(以下简称AQS)是很多类的基石,ReentrantLock,CountDownLatch等都是基于它。先来看它的变量,比较简单,就三个。/** * 头部 */private transient volatile Node head;/** * 等待队列尾部 */priv原创 2020-12-14 09:17:38 · 185 阅读 · 0 评论 -
Spring解决循环依赖源码解析
写在前面的话循环依赖是啥我就不说了,反正就是A依赖B,B又依赖A,然后就原创 2020-07-23 15:55:17 · 248 阅读 · 1 评论 -
使用Netty + Zookeeper 简单搭建RPC
目录项目介绍common-通用server-服务端client-客户端项目介绍前段时间看了《netty实战》这本书,简单的入了一个netty的门,然后想着dubbo RPC也是用netty,于是打算敲一个netty + zookeeper的简单的RPC框架。项目目前比较简单,使用kryo做序列化,netty通信,zookeeper做注册中心。后期可能会优化,比如加几种负载均衡策略,使用nacos做注册中心(这个还没入门,所以是后期啦!)下面看一下我这个项目的结构,比较简单,就三个模块,client-客原创 2021-02-25 22:34:39 · 750 阅读 · 0 评论 -
深入JVM(一):JVM运行时内存结构
记得18年第一次读周志明著的《深入理解Java虚拟机:JVM高级特性与最佳实践》让我有种醐醍灌顶的感觉,后又读了几遍,每次都感觉自己受益匪浅,但还是像之前说的一样,能说出来的才是自己的。因此,这也是为什么虽然网上现在有很多JVM,我却还坚持写的原因。首先,最好永远是官方文档。有关JVM的内存结构的官方文档:Chapter 2. The Structure of the Java Virtual ...原创 2019-11-16 10:48:16 · 582 阅读 · 0 评论 -
ArrayList源码解析
一直以来都是看别人的博客,所以从来都是输入,没有输出。所以决心自己搞一个博客输出一下学习的东西。既然决定要写,就先从集合类开始。集合类最常用到的肯定是list,map,和set等。因此决定先从list的ArrayList写起。注:虽然是源码解析,但是并不是所有的源码都会涉及到,只涉及到经常使用的那些。源码基于1.8。首先看看ArrayList的类关系图,了解一下它的继承关系和实现的接口。...原创 2019-04-18 17:31:28 · 192 阅读 · 0 评论 -
ConcurrentHashMap源码解析(基于1.8版本)
开…开…开始了,久负盛名的ConcurrentHashMap。之前一直是看别人文章解析它,今天终于轮到我了。就像以前读高中的时候老师说的,写下了,才是自己的。ConcurrentHashMap(以下简称chm)是concurrent包下的用于多线程并发的一个类,由Doug Lea大神编写。它比HashMap更复杂(其实HashMap也没有很复杂 ),由于它是线程安全的同时效率还比HashTab...原创 2019-05-10 10:41:57 · 238 阅读 · 0 评论 -
对Collections.synchronizedList的部分思考
重温《Java并发编程实战》中,有地方引起了我的注意,以前估计读的也是一知半解的略过了,但是现在对多线程有着不一样的体悟之后,经过一段苦思冥想之后,终于想通了。这边把代码贴出来。线程不安全的:class ListHelper <E> { public List<E> list = Collections.synchronizedList(new Array...原创 2019-06-11 09:36:24 · 420 阅读 · 0 评论 -
HashMap源码分析(基于1.8版本)
终于要开篇写HashMap了,作为集合届的头把交椅,HashMap不可不谓为响当当的,其代码也让很多人望而生畏,但其实仔细琢磨一下,其复杂度并没有特别的让人害怕(起码对比ConcurrentHashMap而言),因此,让我们走近来近距离瞧一瞧这个大名鼎鼎的HashMap吧。鉴于我本地安装的版本是1.8的,因此,分析1.8版本的是HashMap。最后会分析1.7和1.8的有什么区别。首先,Has...原创 2019-06-11 09:37:31 · 213 阅读 · 0 评论 -
Java线程池源码分析
并发这块相当重要 ,并且初学的时候很难理解是真的,犹记得我在初学并发的时候(当然也不是很久之前),头铁的看了《Java并发编程实战》这本神书。但是由于是刚入门并发这块,所以,读这本书的过程是相当痛苦的,虽然痛苦还是坚持读了下去,虽然一知半解,但总算感觉摸到了门槛。在看这本书的时候,对线程池这块印象确实比较深,所以决定走一波源码,而且线程池这块也是面试的重点之一吧,去读它的源码对理解线程池很有帮助...原创 2019-07-01 20:28:13 · 221 阅读 · 0 评论 -
偏向锁、轻量级锁,重量级锁膨胀过程
在JDK 1.6之前,synchonized同步方式的成本非常高,因为使用了系统调用引起的内核态与用户态切换、线程阻塞造成的线程切换等。但是后面改进了,引进了锁的四个状态,分别是无锁,偏向锁,轻量级锁,重量级锁,而且是只能逐级膨胀的。但是我刚接触的时候一直很纠结膨胀过程,后来搞明白了,现在抽个时间总结记录一下。首先我们要知道,这几个级别适用的情况。偏向锁:适用于只有一个线程进入同步区轻量...原创 2018-12-27 21:29:11 · 922 阅读 · 0 评论 -
深入理解java——多态与动态绑定
此文章为我阅读《java核心技术I》的读书笔记。 穿插个人理解和书上所述。 以及引用了网上的文章。侵权删。1.多态首先,什么是多态?根据定义上来讲,一个对象变量可以指示多种实际类型的现象被称为多态。或者可以这样说,一个引用变量指向哪个类对象在编程时不能确定,要到要等到程序运行时才确认这个变量到底指向哪个类对象,调用的是哪个类的方法,这样可以在不修改代码的情况下,改变运行绑定的具体对象,让程序可以原创 2017-12-09 12:41:36 · 1062 阅读 · 0 评论 -
重写Object中equals方法
此文章为我阅读《java核心技术I》的读书笔记。 穿插个人理解和书上所述。Objecet类是java中所有类的始祖,如果没有明确指出超类,那么Object就被认为是这个类的超类,在java中,每个类都是由Object扩展而来的。在java中,只有基本类型不是对象,如,数值,字符和布尔类型的值都不是对象。1.重写equals方法首先,我们先要清楚equals方法是做什么的?Object类中的equ原创 2017-12-09 14:15:51 · 490 阅读 · 0 评论 -
深入理解java——反射
此文章为我阅读《java核心技术I》的读书笔记。 穿插个人理解和书上所述。首先还是概念问题。 什么是反射? 能够分析类能力的程序称为反射。反射的机制很强大,反射机制可以用来: 在运行时分析类的能力 在运行时查看对象,比如,编写一个toString方法供所有类使用 实现通用的数组操作代码 利用Method对象Java反射框架主要提供以下功能: 1.在运行时判断任意一个对象所原创 2018-01-22 16:15:55 · 363 阅读 · 0 评论 -
Spring AOP基础 <一>
AOP概述AOP是Aspect Oriented Programing的简称,即“面向切面编程”。 如何理解这个含义,下面举一个例子。按照软件重构思想的理念,如果多个类中出现相同的代码,那么应该考虑定义一个父类,将这些相同的代码提取到父类中,如所有的动物类都应该有run()和eat()方法,通过引入一个抽象的Animal父类,这些动物类就可以通过继承Animal复用run()和eat()原创 2018-02-04 14:04:05 · 251 阅读 · 0 评论 -
Spring中Bean的生命周期
根据《Spring实战》上面描述的Bean的生命周期。 1.Spring对Bean进行实例化(相当于new一个对象)2.Spring将值和Bean的引用注入进Bean对应的属性中。3.如果Bean实现了BeanNameAware接口,Spring将Bean的ID传递给setBeanName()方法(实现BeanNameAware主要是为了通过Bean的引用来获得Bean的ID,一般业原创 2018-01-27 21:20:21 · 329 阅读 · 0 评论