![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Java
文章平均质量分 86
lwnexu
技术道路上,十年如一日!
展开
-
SpringBoot 启动慢?那是因为你不知道它
前言在 2021 年这个小学作文中的未来年份,没有想象中的汽车满天飞,也没有实现机器人满地跑。但牛逼的是我们都有一个共识: 知乎达到了人均 “谢邀~ 人在美国刚下飞机”的生活水平,虎扑的人均收入也在 30W+ ,还有就是程序员都人均精通 SpringBoot ,哪怕和算法聊技术一言不合就满嘴 SpringCould 分布式、微服务,然而实际操作可能是 分步试 、伪服务 ... 你一个小小系统开这么多应用启动不难受?(不难受因为可以装 13) SpringBoot 这启动速度也确实令人捉急,每个应用.原创 2021-04-26 13:27:49 · 1340 阅读 · 2 评论 -
ReentrantLock 与 AQS 源码分析
ReentrantLock 与 AQS 源码分析1. 基本结构 重入锁 ReetrantLock,JDK 1.5新增的类,作用与synchronized关键字相当,但比synchronized更加灵活。ReetrantLock本身也是一种支持重进入的锁,即该锁可以支持一个线程对资源重复加锁,但是加锁多少次,就必须解锁多少次,这样才可以成功释放锁。1. 继承没有继承任何类,...原创 2018-03-31 21:28:00 · 1051 阅读 · 0 评论 -
Semaphore 源码分析
Semaphore 源码分析 1. 在阅读源码时做了大量的注释,并且做了一些测试分析源码内的执行流程,由于博客篇幅有限,并且代码阅读起来没有 IDE 方便,所以在 github 上提供JDK1.8 的源码、详细的注释及测试用例。欢迎大家 star、fork ! 2. 由于个人水平有限,对源码的分析理解可能存在偏差或不透彻的地方还请大家在评论区指出,谢谢!1. Semep...原创 2018-04-01 20:07:12 · 687 阅读 · 2 评论 -
HashMap 源码分析
HashMap 源码分析1.结构1. 继承 该类继承自 AbstractMap 这个类似于 ArrayList2. 实现具体如下:首先这个类是一个 Map 自然有 Map 接口然后就是两个集合框架肯定会实现的两个接口 Cloneable, Serializable 。 3. 主要字段1. 属性字段 // 默认大小 16 ...原创 2018-03-26 22:38:10 · 179 阅读 · 0 评论 -
ArrayList 源码分析
ArrayList 源码分析1. 结构 首先我们需要对 ArrayList 有一个大致的了解就从结构来看看吧.1. 继承 该类继承自 AbstractList 这个比较好说2. 实现这个类实现的接口比较多,具体如下:首先这个类是一个 List 自然有 List 接口然后由于这个类需要进行随机访问,所谓随机访问就是用下标任一访问,所以实现了Random...原创 2018-03-26 22:38:47 · 203 阅读 · 0 评论 -
LinkedList 源码分析
LinkedList 源码分析1.结构1. 继承 该类继承自 AbstractSequentialList 这个是由于他是一个顺序的列表,所以说继承的是一个顺序的 List2. 实现这个类实现的接口比较多,具体如下:首先这个类是一个 List 自然有 List 接口然后由于这个类是实现了 Deque 这个接口是双端队列的接口,所以说它是具有双端队列的特性的...原创 2018-03-26 22:39:24 · 166 阅读 · 0 评论 -
LinkedHashMap 源码分析
LinkedHashMap 源码分析1. 基本结构1. 实现实现的接口是 Map 2. 继承 继承的是 HashMap 这个就比较熟悉了,事实上我们会看到 LinkedHashMap 代码量非常的少,主要就是因为他继承的 HashMap ,继承了大多数的操作。 仔细一点的都会发现 HashMap 里面有非常多的空白方法,这些方法其实是模板方法,为了让继承 Ha...原创 2018-03-26 22:40:05 · 182 阅读 · 0 评论 -
SpringCloud:基础
SpringCloud:基础SpringCloud 是微服务架构的一个实现框架,说他是一个框架更不如说他是一个生态,他包含了很多个技术,将这些技术组合起来形成我们的微服务架构应用。1.SpringCloud vs Dubbo最大区别:SpringCloud抛弃了Dubbo的RPC通信,采用的是基于HTTP的REST方式。 严格来说,这两种方式各有优劣。虽然从一定程...原创 2018-05-29 14:40:59 · 259 阅读 · 0 评论 -
SpringData 完全入门指南
SpringData 笔记1. 配置项目1.pom.xml<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" ...原创 2018-12-18 09:55:53 · 922 阅读 · 0 评论 -
synchronized 原理分析
synchronized 原理分析1. synchronized 介绍 在并发程序中,这个关键字可能是出现频率最高的一个字段,他可以避免多线程中的安全问题,对代码进行同步。同步的方式其实就是隐式的加锁,加锁过程是有 jvm 帮我们完成的,再生成的字节码中会有体现,如果反编译带有不可消除的 synchronized 关键字的代码块的 class 文件我们会发现有两个特殊的指令 mo...原创 2018-03-30 19:35:42 · 234 阅读 · 0 评论 -
ConcurrentHashMap 源码分析
ConcurrentHashMap 源码分析1. 前言 终于到这个类了,其实在前面很过很多次这个类,因为这个类代码量比较大,并且涉及到并发的问题,还有一点就是这个代码有些真的晦涩,不好懂。前前后后大概花了三天的时间看完的一些重要操作,接着今天来整理一下。 好了首先介绍一个个人的感受:首先这个类很多操作和 HashMap 是类似的,但是麻烦就麻烦在 锁分离技术 ...原创 2018-03-29 17:34:04 · 281 阅读 · 0 评论 -
Java面向对象基础
面向对象一直是一种很流行的思想,他的精髓也就在于他的三大特性:封装,继承和多态。本文就在这三个方面简单的谈一谈Java的面向对象基础。1.封装: 封装顾名思义,就是将一些对象的属性和方法隐藏于本类之中,其他的类无法访问本类的这些被封装的属性和方法。也就是这些方法和属性仅仅是为了本类服务的。 除了为本类服务之外封装还可以只暴露自己想给别人提供的服务,而对于一些特殊的底层的服务不希望别人能看到,原创 2017-08-09 11:49:36 · 289 阅读 · 0 评论 -
Java基本包装类型
基本类型的对象包装,也就是将常用的基本数据类型包装成对象 * byte Byte * short Short * int Integer * long Long * boolean Boolean * float Float * double Double * char Character 最常用的作用就是基本数据类型与字符串的转换1. 基本数据类型转字符串:基本数据类型+”原创 2017-08-09 11:50:07 · 241 阅读 · 0 评论 -
Java面向对象基础(二)
### 1.构造器:1. 构造函数在一个类没有写任何的构造函数的时候,系统会生成一个默认的空参数构造函数,这个构造函数的修饰符就是类的修饰符,当我们定义了一个构造函数,默认的构造函数就不存在了而不会出现重载 2. 构造函数是没有返回值的,他没有返回值不是指他就是void,因为void指的是函数的返回值为void类型,他是有返回值的。而没有返回值则是说明根本不用写,这两个有很大区别。 3. 没有原创 2017-08-09 14:30:59 · 244 阅读 · 0 评论 -
Java集合框架Collections
集合就是存放对象的,他比数组好的一点就是他一开始不清楚自己长度 容器一般是分为很多种的,很多的容器在一起然后进过断的抽象和抽取就成了一个体系,我们称之为集合框架 我们看体系首先是看顶层的容器,他是底层的容器都有的特性,然后在逐步求精 最顶层的我们称之为collection 在util包中的在collection中分为两个比较常用的子接口分别是list和set。 list是类似于数组的那种,原创 2017-08-09 14:56:28 · 362 阅读 · 0 评论 -
Java集合框架Map
map集合是一对一对的存放,而且要保证键名的唯一性。map的共性方法: 1.添加: put(K key,V value) putAll(K key,V value) 2.删除: clear() remove(Object key) 3.判断: isEmpty() constrainKey(object key) const原创 2017-08-09 15:35:35 · 401 阅读 · 0 评论 -
Java多线程
1.复写run方法的目的在于,把要运行的代码放到run方法里面,也就是新的线程要跑什么内容 这也就是第一种多线程的方法,其主要的步骤如下: 1. 继承Thread类 2. 复写run方法 3. 创建对象 4. start 2.任何一个程序至少有一个线程就是主线程,主线程也是main方法的线程,这个线程是由jvm启动的,当我们自己创建新的线程的时候实际上是在主线程之外另开的新的线程和主线程原创 2017-08-09 19:00:20 · 231 阅读 · 0 评论 -
Java范型
1.java泛型及就是在jdk1.5之后出现的一个新的安全机制 我们发现在集合框架中我们可以放入任何的元素,然而这样做并没有任何意义,绝大多时候我们是默认我们 知道这个容器需要存放什么样的内容,但是用户的输入是不安全的如果他们输入了各种类型然后我们只对某些类型 进行了处理显然到时候运行时必然报错 所以为了解决这个问题,类似于数组的解决方式给集合限定了类型使用尖括号来限定,当然原创 2017-08-09 19:01:08 · 335 阅读 · 1 评论 -
JavaIO
1.字节流和字符流在IO有两种数据传输格式一个是字符流还一个是字节流,但是字符流就会涉及到编码的问题。 1. 一开始美国使用的自己的编码表就是ASCII表 2. 中国的字符需要被识别也需要编码表于是就有了GB2312 3. 但是由于中国的子很多,还有少数名族等等后来又进行了优化扩容就出现了GBK 4. 最后国际标准组织制定了一个包含所有国家所有地区的码表就是Unicode 5. 之后对Un原创 2017-08-09 19:01:33 · 368 阅读 · 0 评论 -
Java8新特性
1.HashMap首先就是对 java 的 HashMap 进行了修改,以前是通过 hashCode 方法来判断他们的地址值是否一样 ,如果相同的话再使用 equals 方法比对他们的 equals 返回的结果是否一样,是则不存入否则的话就形成一个链表 直接挂在原有元素的后面。这个地方就有一个比较大的问题就是使用 hashCode 方法的时候组字坏的情况时需要和每一个元素 比对 hashCod原创 2017-08-20 10:12:48 · 309 阅读 · 0 评论 -
Java多线程JUC
1. volatile 关键字多线程访问的时候,一个比较严重的问题就是内存不可见,其实在内存访问的时候每一个线程都有一个自己的缓冲区,每次在做修改的时候都是从主存取到数据,然后放到自己的缓冲区中,在做完修改之后放回主存。这样每一个线程之间的变量是不可见的。造成读到的数据可能始终就是错误的,因此有一个关键字可以使得这个共享变量称为透明的。就好像所有的操作就直接是在内存中操作一样,因为他一直不停的去同步原创 2017-08-20 10:13:03 · 419 阅读 · 0 评论 -
Java位操作
无论说是在哪一门计算机语言,位操作运算对于计算机来说肯定是最高效的,因为计算机的底层是按就是二进制,而位操作就是为了节省开销,加快程序的执行速度,以及真正的实现对数的二进制操作。 使用位操作,很多代码看起来会很简洁,并且执行速度也会随之提高。在大多数编程语言中都会有 << 和 >> 这两个符号向左的就是左移,反之则是右移这个符号的左边就是需要操作的数,而右边就代表了对这个数移动多少位。原创 2017-08-09 11:48:54 · 562 阅读 · 2 评论