自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(13)
  • 资源 (2)
  • 收藏
  • 关注

原创 【并发容器精讲一、】ConcurrentHashMap

ConcurrentHashMap1. 磨刀不误砍柴功 :Map简介2. 为什么需要ConcurrentHashMap3. 九层之台,起于累土,罗马不是一天建成的:HashMap分析4. JDK1.7 中 ConcurrentHashMap 实现和分析5. JDK1.8 中 ConcurrentHashMap 实现和源码分析6. 对比1.7 与 1.8 ,为什么要把1.7的结构改成1.8的结构7. 组合操作:ConcurrentHashMap也不是线程安全的?8. 实际生产案例分享1. 磨刀不误砍柴功 :

2020-06-29 22:13:08 787

原创 SpringBoot自定义异常,优雅解决业务逻辑中的错误

文章目录前言设计1. 自定义枚举类2. 自定义异常3. 异常全局处理4. 使用前言在我们开发中,总会碰到一些异常 ---------- 运行时异常(不受检异常):RuntimeException类极其子类表示JVM在运行期间可能出现的错误。编译器不会检查此类异常,并且不要求处理异常,比如用空值对象的引用(NullPointerException)、数组下标越界(ArrayIndexOutBoundException)。此类异常属于不可查异常,一般是由程序逻辑错误引起的,在程序中可以选择捕获处理,也可

2020-06-24 11:39:13 2042 1

原创 分布式接口限流实现

文章目录为什么要接口限流为什么要做分布式实现方式1. 算法实现(无分布式,单体架构,单节点)2. 分布式实现为什么要接口限流在我们项目开发过程中,有些接口是暴露在用户的常用中,包括一些高危接口,如 (支付,开发票,订单),这些接口 都是高危接口,且被用户经常使用,在高并发的情况下,io阻塞,不可避免的出现重复提交,或者点击频繁的操作,所以我们就要加入限流,避免用户多次点击,减少我们接口的压力,把整数据不会重复,接口压力减小为什么要做分布式在我们做项目负载均衡的时候, 分布式,微服务架构的时候

2020-06-19 23:02:57 2411

原创 解决redis序列化java8 LocalDateTime

文章目录redis 序列化问题解决方案1. 使用注解的方式2. 使用全局配置文件redis 序列化问题在 JDK8 中 官方提出 LocalDateTime 的时间格式,因为他是线程安全的,在我们的业务中,我们需要把 一些数据存到缓存中,不可避免的存 LocalDateTime 格式的时间,相信许多小伙伴都有遇到 存取 出现 LocalDateTime序列化异常在我们实际开发中 LocalDateTime格式 会有 T 下面序列化我们把 T 业序列化解决方案1. 使用注解的方式

2020-06-16 15:56:35 2543 1

原创 你所不知道的final

文章目录什么是不变性final的作用3种用法:修饰方法,变量,类注意点不变性和final的关系什么是不变性如果对象在被创建后,状态就不能被修改,那么他就是不可变的具有不变性的对象,一定是线程安全的,我们不需要采取任何额外的安全措施,也能保证线程安全final的作用被final关键字修饰的类不能被继承,被final关键字修饰的类属性和类方法不能被覆盖(重写);3种用法:修饰方法,变量,类修饰变量 :不能被改变修饰方法:构造方法不允许修饰不可被重写,也就是不能被override,

2020-06-11 22:37:15 600

转载 若不是因为生活所迫,谁愿把自己搞得满身才华

网上有一个很火的励志语录,大概意思是这样:你十岁的时候觉得游泳很难,你下不定决心去学。那么在你十八岁的时候遇到一个喜欢的女孩,她约你去游泳,你只能摇摇头说我不会。的确如此,在现实中,你不多掌握一门技能,很有可能就错过了一个机会。有人说,我只缺一个伯乐。那首先你要知道自己,是否是千里马。人最大的缺点不是无知,而是明知道自己的无知,却依旧选择安逸。作家沐木说:我们来到这世界并不是为了一事无成,要对自己狠一点,那样才会离成功进一点。努力到无能为力,拼搏到感动自己。的确,没有人愿意一辈子被人瞧不起,

2020-06-11 12:31:03 854

原创 CAS原理

文章目录什么是CAS案例演示应用场景缺点什么是CAS处理并发问题我认为V的值应该是A,如果是的话我就把它修改成B,如果不是A,那么说明A被人修改过了,那我就不修改了,避免多人同时修改造成错误,CAS 有3个操作数,内存值 V,预期值A,要修改的值 B,当且仅预期值A和内存值V 相同时,才将内存值修改为 B, 否则什么都不做,最后返回现在的 V 值CAS算法理解(1)与锁相比,使用比较交换(下文简称CAS)会使程序看起来更加复杂一些。但由于其非阻塞性,它对死锁问题天生免疫,并且,线程间的相互

2020-06-10 23:03:10 662

原创 git企业级版本开发,一篇文章足矣

1.生成ssh私钥//设置用户名 xxx代表用户名(自定义)git config --global user.name = "xxx"//设置邮箱git config --global user.email = "[email protected]"//生成私钥ssh-keygen -t rsa或者ssh-keygen -t rsa -C “邮箱”出现如下图案,表示私钥生成成功找到本地user/本机用户名/.ssh 文件打开 id_rsa.pub 将私钥复制到用到地方(github ,码云

2020-06-07 11:30:57 814 1

原创 自旋锁与阻塞锁

自旋锁阻塞或者唤醒一个Java线程需要操作系统切换CPU 状态来完成,这种状态转换 需要耗费处理器时间如果同步代码块到代码过于简单,状态转换到时间有kennel比用户执行代码到时间还长在许多场景下,同步资源到锁定时间短,为了这小段时间切换线程,线程的挂起和恢复可能会让系统得不偿失,这里是为了当前线程“ 稍等一下”, 我们需要让当前线程进行自旋 ,如果自旋完成后前面锁定同步资源的线程以及释放了锁,那么当前线程就没必要阻塞,而是直接获取同步资源,从而避免线程的开销阻塞锁和自旋锁相反,阻塞

2020-06-05 22:58:16 2774

原创 共享锁和排它锁

共享锁和排它锁以 ReentranReadWriteLock 读写锁为例什么是共享锁和排它锁排它锁,又称独占锁,独享锁 synchronized就是一个排它锁共享锁,又称为读锁,获得共享锁后,可以查看,但无法删除和修改数 据, 其他线程此时业获取到共享锁,也可以查看但是 无法这里是引用修改和 删除数据共享锁和排它锁典型是ReentranReadWriteLock 其中,读锁是共享锁,写锁是 排它锁读写锁的作用在没有读写锁之前,我们使用的是R

2020-06-04 23:42:40 10709 1

原创 公平锁与非公平锁

锁的分类什么是公平 与 非公平公平是按照线程的请求顺序,来分配锁 非公平是指不完全按照请求的顺序,在一定情况下,可以插队的注意:非公平也同样不提倡 插队行为,这里的非公平是指在合适的时机插队,而不是盲目的插队为什么要有非公平锁Java设计者 这样设计的目的,是为了提高效率避免唤醒带来的空档期公平的情况 ReentrantLock如果创建 ReentrantLock对象时,参数填写为 true ,那么这就是个公平锁 依次执行不公平的情况 ReentrantLock线程1 获取

2020-06-03 23:43:13 698

原创 可重入锁与非可重入锁

锁的分类什么是可重入锁可重入锁又名递归锁,是指在同一个线程在外层方法获取锁的时候,再进入该线程的内层方法会自动获取锁(前提锁对象得是同一个对象或者class),不会因为之前已经获取过还没释放而阻塞。Java中ReentrantLock和synchronized都是可重入锁,可重入锁的一个优点是可一定程度避免死锁。ReentrantLock和synchronized都是重入锁,可重入锁的好处:【1.避免死锁】【2.提升封装性】案例实现电影院预定预定电影院座位预定座位就是个很好的lock

2020-06-03 23:03:18 1643 3

原创 悲观锁&乐观锁

锁都分类什么是悲观锁,乐观锁乐观锁对应于生活中乐观的人总是想着事情往好的方向发展,悲观锁对应于生活中悲观的人总是想着事情往坏的方向发展。这两种人各有优缺点,不能不以场景而定说一种人好于另外一种人。悲观锁&乐观锁设计思路悲观锁总是假设最坏的情况,每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会上锁,这样别人想拿这个数据就会阻塞直到它拿到锁(共享资源每次只给一个线程使用,其它线程阻塞,用完后再把资源转让给其它线程)。传统的关系型数据库里边就用到了很多这种锁机制,比如行锁,

2020-06-02 23:34:43 924 1

面试必问之AQS原理详解.pdf

AQS 原理 lock 最 常 用 的 类 就 是 ReentrantLock , 其 底 层 实 现 使 用 的 是 AbstractQueuedSynchronizer(AQS) 简单来说 AQS 会把所有的请求线程构成一个 CLH 队列,当一个线程执行完毕 (lock.unlock())时会激活自己的后继节点,但正在执行的线程并不在队列中, 而那些等待执行的线程全部处于阻塞状态,经过调查线程的显式阻塞是通过调用 LockSupport.park() 完成,而 LockSupport.park() 则调用 sun.misc.Unsafe.park()本地方法,再进一步,HotSpot 在 Linux 中中通过调用 pthread_mutex_lock 函数把线程交给系统内核进行阻塞。

2020-08-08

git操作文档.docx

该文件可以应用于企业级的 git操作文档,应用于小公司企业级绰绰有余,后续还会持续更新下去,望大家多多支持

2020-06-06

空空如也

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

TA关注的人

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