自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(14)
  • 收藏
  • 关注

原创 Git Commit 规范

init: 初始化feat: 新特性fix: 修改问题refactor: 代码重构docs: 文档修改style: 代码格式修改, 注意不是css修改test: 测试用例修改build: 构建项目chore: 其他修改, 比如依赖管理scope: commit影响的范围, 比如: route, component, utils, build...subject: commit的概述...

2022-02-07 18:11:53 311

原创 JAVA 链式编程

最近在使用Mybatis plus 中看到动态构建SQL的工具,LambdaChain 相关类使用到了许多Lambda表达式,以及Chain 链式编程。看到这个链式编程觉得很有意思,于是就看了一下。其实发现链式还是很容易实现的。只是在之前的set方法里面返回该对象就OK。然后返回的对象就可以直接采用链式编程,通过Idea 也可以直接生成链式的setter方法。这里和大家分享一下我自己的一个ChainTest。public class ChainTest { private String n.

2021-05-14 09:31:17 1724

原创 HashCode 与 equals 方法有什么关联

equals 方法是Object 对象的方法,在重写equals方法时需要遵守Java的一些规范对称性:如果x.equals(y) 返回true,那么y.equals 也必须返回true; 反射性:意味x.equals(x)返回值也为true; 类推性:如果x.equals(y)返回为true,y.equals(z)返回也为true,那么x.equals(z)返回值也必须时true; 一致性:意味如果x.equals(y)返回值为true,那么当x,y没有改变的情况下无论调用多少次equals方.

2021-02-27 12:12:46 130

原创 HashSet如何保证不重复

HashSet内部的数据结构是一个哈希表,它通过键值对的方式去存储数据,底层实际上是维护了一个HashMap,因为HashMap中的key是不可重复的。两个对象的hashcode相等的情况下,equals方法不一定相等,但是如果equals方法相等的情况下,两个对象的hashcode一定是相等的。这里可以理解为不同对象可能会产生相同的hashcode,但是相同对象的hashcode一定是相同的。在java的集合中,判断两个对象是否相等的规则是: 1.判断两个对象得到hashcode(...

2021-02-27 10:11:29 639

原创 synchronized实现底层原理

synchronized 为java的关键字,通过synchronized修饰的对象,方法或者成员变量可以保证在多线程访问下数据依然保持正确synchronized 可以保证数据的原子性,有序性,以及可见性原子性:synchronized可保证代码块执行时的原子操作有序性:当一个线程获取到该代码块的数据时,其他线程不能够获取到,只能在队列中等待或者自旋可见性:在线程内存中对数据进行修改了以后,会主动通知主线程更新数据(主要底层汇编是通过lock 指令实现的)实现原理:syn.

2021-01-31 11:10:20 124

原创 微服务架构

2020-09-03 19:48:26 61

原创 new,浅拷贝,深拷贝的区别

clone与new的区别,new意味着内存空间的分配,在new对象的过程中,系统会首先查看new关键字后面的类型,然后根据类型分配空间,然后在调用构造函数为对象赋值,Clone分为深拷贝和浅拷贝,默认情况下是浅拷贝。clone的对象必须实现cloneable接口才能进行clone。浅拷贝,是指在对象调用clone方法后,在内存中分配一块与原对象相同大小的额内存空间,然后将原对象的字段对应的值给拷贝到clone后的新对象中。但是原对象中的字段可能存在基本数据类型以及引用类型,如果是基本数据类型,则直接将值

2020-07-06 09:29:58 1117

原创 HashMap中hash函数,以及为啥桶长度只能是2的n次方

因为hashmap底层是通过数组+链表来实现的。显示通过数组然后在每个数组后面实现,可以把每个数组当作一个桶。然后hashmap在调用put方法的时候会通过hash来计算该值在hashmap中存放的地址,在存放数据的时候需要考虑到散列度的问题,不能把来的数据都放在痛一个桶里,所以需要一定的散列度。所以hashmap在计算数据存放的地址时通过对将自己的hash值经过无符号右移16位然后再做异或,相当于就是自己的高16位与自己的低16位做异或,让自己的高16位低16位都参与运算使得结果更加散列(jdk .

2020-06-23 14:24:43 206

原创 关于Java垃圾回收

关于Java垃圾回收Java与C/C++不同,Java是采用自动回收垃圾,而C/C++采用的是手动回收垃圾。两种方式都有优点和缺点。Java自动回收时,可控性很差,甚至有时会造成栈溢出的现象;C/C++手动回收垃圾,可控性高,但是工作量较大。下面我们就来说一下Java垃圾回收。Java 怎么确定哪些对象应该回收?Java通过两个经典的算法来计算应该确定哪些对象应该回收...

2019-08-23 11:26:50 176 1

原创 脏读,幻读与不可重复读

脏读,是指事物A对数据修改以后没有提交,之前事物B对数据进行查询,查询到事物A修改的那一条数据,那条数据即为脏数据,B读取即为脏读。不可重复读,是指事物A在查询一条数据后没有提交,事物B对数据进行了update或者delete操作,然后事物A再一次查询的时候发现数据发生了变化。幻读,是指事物A在查询一条数据后没有提交,事物B对数据进行了insert操作,然后事物A再一次查询的时...

2019-08-14 10:49:18 277

原创 独享锁与共享锁

独享锁:是指该锁只能同时被一个线程持有。共享锁:是只该所可以同时被多个线程持有。对于ReentrantLock而言,ReentrantLock是一个独享锁,即公平锁与非公平锁时独享锁。而对ReadWriteLock而言,它的读是一个共享锁,而写是一个独享锁。读锁作为一个共享锁可以保证并发是的高可读性。独享锁,和共享锁都是通过AQS来实现的,实现不同方法来实现独享,和共享...

2019-08-13 17:50:09 564

原创 可重入锁与不可重入锁

当一个线程获得当前实例的锁lock,并且进入了方法A,该线程在方法A没有释放该锁的时候,是否可以再次进入使用该锁的方法B?不可重入锁:在方法A释放锁之前,不可以再次进入方法B可重入锁:在方法A释放该锁之前可以再次进入方法B不可重入锁:当线程在访问A方法的时候,获取的A方法的锁,在A方法锁释放之前不能够访问其他方法的锁。个人理解模型:{}{}{}{}{}。可重入锁:...

2019-08-13 15:53:00 250

原创 公平锁与非公平锁

ReentrantLock实现了Lock接口,在加锁和解锁时都要显示的写出,当构造ReentrantLock传入的参数为false的时候为非公平锁,当构造ReentrantLock传入参数为true的时候为公平锁。//创建一个非公平锁,默认是非公平锁Lock nonFairLock= new ReentrantLock();Lock nonFairLock= new Ree...

2019-08-13 15:30:36 110

原创 悲观锁与乐观锁

悲观锁:在获取锁以后只允许获取锁的那一个对象或事务来操作数据(除了查询不需要获取锁),只有当当前对象或事务操作完以后释放锁以后,其他对象或事务才能对数据进行操作。优点:悲观锁利用锁机制来保证程序的顺序执行。缺点:当一个事务获取锁时,其他事务除了查询不能对当前数据进行操作。当获取锁的事务对数据操作时间较长时,其他事务需要等待,造成吞吐量下降。应用场景:当对数据库进行大量...

2019-08-13 14:56:52 95

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除