![](https://img-blog.csdnimg.cn/20201014180756780.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
java
胖虎。。
这个作者很懒,什么都没留下…
展开
-
CAS
点击上方“晏霖”,选择“置顶或者星标”曾经有人关注了我后来他有了女朋友在此部分讲解CAS概念是因为后面部分章节将会有很多地方使用到他,因为CAS是并发框架的基石,所以相当重要,读者需提前...原创 2020-11-26 09:00:00 · 306 阅读 · 4 评论 -
工厂模式
前言在23中设计模式中,工厂方法属于创建型的设计模式,只有工厂方法和抽象工厂两种,但是实际我们常与简单工厂混淆,因为简单工厂模式违背了开闭原则。什么是开闭原则:开闭原则就是说对扩展开放,对修改关闭。在程序需要进行拓展的时候,不能去修改原有的代码,实现一个热插拔的效果。所以一句话概括就是:为了使程序的扩展性好,易于维护和升级。想要达到这样的效果,我们需要使用接口和抽象类,后面的具体设计中我...原创 2019-02-26 15:49:22 · 4543 阅读 · 2 评论 -
适配器模式
前言适配器模式理解起来很简单,就是字面意思,大家生活中很常见的比如,usb转type-c 转接头、usb转HDMI 转接头等等,通过这个工具可以把所有usb插口设备与HDMI插口的设备链接起来使用。在java中适配器模式的作用跟这个例子是一样的,下面我用220v交流电转成我们手机接受的5v直流电为例 转换成代码给大家讲解。正文今天早上在家里拍了三张照片,和本文是有关系的哦,为了方便大家...原创 2019-02-27 12:53:11 · 4350 阅读 · 0 评论 -
Java并发之-读写锁ReentrantReadWriteLock
前言之前提到的ReentrantLock是排他锁,这种锁同一时刻只允许一个线程访问,而读写锁同一时刻可以多个线程访问,但在写线程访问时,所有读线程和其他写线程都要被阻塞。读写锁维护了一对锁,一个读锁和一个写锁,通过分离读写锁,使得并发性相比一般的排他锁有很大提升。参考文献《Java并发编程的艺术》正文读写锁只需要在读操作时获取读锁,写操作获取写锁即可。当写操作被获取时,后续读写...原创 2019-03-14 16:50:33 · 4585 阅读 · 0 评论 -
Java发送HTTP 请求
前言请求http的Demo是个人亲测过,目前该方式已经在线上运行着。因为是http请求,所有发送post 和get 请求的demo都有在下方贴出,包括怎么测试,大家可直接 copy到自己的项目中使用。正文使用须知为了避免大家引错包我把依赖和涉及到包路径给大家import java.net.HttpURLConnection;import java.net.URI;imp...原创 2019-03-19 15:29:25 · 12094 阅读 · 2 评论 -
Java发送HTTPS请求
前言上篇文章介绍了 java 发送 http 请求,大家都知道发送http是不安全的。我也是由于对接了其他企业后总结了一套发送 https的工具。大家网上找方法很多的,但是可不是你粘过来就能用啊,我也是踩过坑的,所以我这个工具,只要粘贴到你们自己项目里就可以用。我的工具跟网上没什么区别,唯一的区别是我亲身实战过,把需要注意的细节列出来,不让大家浪费时间。正文本文只介绍 发送 post...原创 2019-03-19 15:56:03 · 53572 阅读 · 20 评论 -
Java16个原子类介绍-基于JDK8
前言emmmm,在写文章前我也翻阅了好多资料和书籍,其实大家在对原子类方法的使用介绍基本都没问题,但是对于java中原子类的个数是五花八门,下面我就把自己都认知和书籍资料结合起来给大家简单都介绍下java中原子类的应用。参考文献《Java并发编程的艺术》正文关于原子类个数说明在JDK7包括7之前,java原子类有12个,图片如下,有些资料说有13个,多出来的是 Atomic...原创 2019-03-15 17:17:59 · 25896 阅读 · 2 评论 -
Java8-对List转换Map、分组、求和、过滤
前言在java8之后我们list转map再也不用循环put到map了,我们用lambda表达式,使用stream可以一行代码解决,下面我来简单介绍list转map的几种方式,和转为map后对map进行分组、求和、过滤等操作。正文数据准备我们准备一个ArrayList,故意让age有一对重复值List<User> list = new ArrayList<Us...原创 2019-03-16 15:58:50 · 16575 阅读 · 0 评论 -
Java并发之-队列同步器AQS
前言AQS是AbstractQueuedSynchronizer的简称,是用来构建锁或者其他同步组建的基础框架,它使用一个 int 类型的成员变量来表示同步状态,通过内置的FIFO(先进先出)队列来完成资源获取和排队的。在前面我讲了很多JUC中的同步工具,例如CountDownLatch、ReentrantLock等。其实我们知道这些同步工具都是通过继承AQS来实现的,所以AQS是这些同步...原创 2019-03-13 16:35:33 · 4600 阅读 · 0 评论 -
HashMap JDK8的原理讲解
前言本文讲解 HashMap JDK 8 的原理,结合源码,只分析 put ,get ,resize 方法的流程。参考文献:https://blog.csdn.net/goosson/article/details/81029729#commentBoxhttps://blog.csdn.net/yyyljw/article/details/80903391正文相关基础问题...原创 2019-03-26 13:01:06 · 677 阅读 · 0 评论 -
Redis + Lua 实现分布式应用限流
前言今天讲的 redis+lua 解决分布式限流 任何框架都能用,只要能集成 redis就可以,不管是微服务 dubbo、springcloud,还是直接用 springboot或者 springMVC都通用的方法。前面我们已经讲了三篇关于 网关做限流的解决方案了,可查看链接https://blog.csdn.net/weixin_38003389/article/details/88...原创 2019-04-06 00:38:01 · 3073 阅读 · 5 评论 -
教你一分钟解决请求跨域问题
前言本文写的会有些仓促,因为我也是刚刚 5 分钟之内完成了全局跨域配置、打包、上传、启动、成功访问这几个步骤。所以本文不分析跨域的问题,直接提供三种方式帮你解决 SpringBoo t项目跨域问题。正文浏览器为什么要有跨域:浏览器的一个安全功能,不同源的客户端脚本在没有明确授权的情况下,不能读写对方资源。 同源策略是浏览器安全的基石。跨域产生的原因:协议、域名和端口号只要有一...原创 2019-03-28 17:26:07 · 5858 阅读 · 0 评论 -
Redis集群实现分布式锁的正确方式
前言上文我们介绍的Redis实现分布式锁的正确方式是 redis 单机的方式,所以本篇要基于 redis 集群做分布式锁,我们使用Redisson来做。有同学肯定有这样的疑问为什么用 redis 集群方式啊,单机不是挺好的?集群和单机不就是 redis 多节点配置的问题吗?为什么使用另一种方式 Redisson呢?Redisson 是什么呢?可不可以不用Redi...原创 2019-04-21 21:41:56 · 14021 阅读 · 8 评论 -
Redis实现分布式锁的正确方式
前言上一篇文章讲的是 redis + lua实现 分布式限流,这篇文章是在上篇文章的项目结构添加了 分布锁的相关代码,如果碰到说个别的pom或者配置没有贴出来,请查看我的上篇文章 :https://blog.csdn.net/weixin_38003389/article/details/89049135本文介绍的是利用 redis 实现分布式锁,redis单机操作。可能很多人看到这篇文...原创 2019-04-14 17:22:32 · 1810 阅读 · 2 评论 -
Redis集群实现布隆过滤器
前言其实,在这之前我还真的不知道布隆过滤器是个啥,感谢群里一位大神网友,提供了相关代码和资料,至此我才知道什么叫布隆过滤器,本文就是为了指导很多像我一样的人,初识布隆过滤器,并可以结合 redis 及代码实现。正文本文分两部分讲解第一部分让读者知道什么是布隆过滤器,以及适用的场景。第二部分我们结合 redis集群实现一个简单布隆过滤器,并测试达到过滤的效果,本文的封装的代码可以...原创 2019-05-07 13:52:50 · 7130 阅读 · 3 评论 -
程序员再也不用担心金额转换的问题了
前言想必同学们在开发当中一定涉及到金钱的属性,一旦涉及到钱就必须要保证不失精度,无论怎么转换一分钱也不能差,如果因为代码的疏忽,金额因为四舍五入或者类型转换时差 1 分的话,想象一下 10000 个订单至少差距 100 块钱,这个损失客户和企业都承担不起。所以今天就来给大家介绍一个工具 Joda,joda有很多种,比如Joda-Money,Jode-Time。今天就来介绍一下SpringBoo...原创 2019-03-05 12:33:24 · 5550 阅读 · 5 评论 -
观察者模式
前言观察者模式还算一个比较好玩的设计模式,其实就是发布订阅模式,发布者发布信息,订阅者获取信息,订阅了就能收到信息,没订阅就收不到信息。可以想象成消息中间件在系统中的作用。SpringBoot启动就是使用了观察者模式。这是我最近阶段最后一次更新设计模式的文章了,我要去把精力放到其他地方,有感兴趣的小伙伴可以在下方留言,或者加公众号留言,我会回复你的,也可以直接在我的主页找微信二维码添加好友...原创 2019-03-01 15:55:06 · 9371 阅读 · 3 评论 -
单例模式
前言这篇是我开始进入设计模式的第一篇文章,Java一共有23种设计模式,我曾看过《大话设计模式》,书的内容当然都是干货满满,我当时看的是电子版,让我一度从入门到放弃,当时功力浅,读不懂,其实现在的我功力也很浅,可是学习的过程就是提高的过程,我必须严格要求自己,作为一名Java程序员不会个5、6种设计模式真的说不过去了,所以说学习设计模式是必经之路。那么我们为什么要学习这么枯燥的设计模式呢?...原创 2019-02-25 17:50:45 · 4356 阅读 · 0 评论 -
JavaBean基于注解实现校验
前言上一文我通过传递不合法参数触发异常,进行了统一拦截,那么这篇文章主要介绍JSR303,Hibernate Validator详细讲解及如何优雅的对参数进行校验,使用和技巧。正文JSR303 是一套JavaBean参数校验的标准,它定义了很多常用的校验注解,我们可以直接将这些注解加在我们JavaBean的属性上面,就可以在需要校验的时候进行校验了,笔者还是基于springboot(1...原创 2018-10-20 13:49:27 · 8527 阅读 · 2 评论 -
深入理解volatile关键字
Java语言为了解决并发编程中存在的原子性、可见性和有序性问题,提供了一系列和并发处理相关的关键字,比如synchronized、volatile、final、concurren包等。本文,来分析一下另外一个关键字——volatile。本文就围绕volatile展开,主要介绍volatile的用法、volatile的原理,以及volatile是如何提供可见性和有序性保障的等。volatil...原创 2018-10-22 14:22:50 · 230 阅读 · 0 评论 -
深入理解HashMap及面试相关问答
前言HashMap是面试必备的一个知识点,无论你是初级中级还是高级,基本上逃不过这个问题,下面的内容很简单,只要你理解了其中的含义,这对你使用hashmap和面试都是很有帮助的。正文首先打开HashMap,看看中都定义了哪些成员变量。解释几个重点的变量transient int size:记录了Map中KV对的个数loadFactor 装载因子,用来衡量HashMap满...原创 2018-10-22 17:22:41 · 698 阅读 · 2 评论 -
手把手教小白创建线程池,并讲解ThreadPoolExecutor和Executors
前言无论工作还是面试,都会接触到多线程,使用线程池的场景,笔者也是近期出去面试才了解到这个知识点的重要性。对于应届生和实习生的要求主要还是知道创建线程的方式,怎么创建线程池及怎么使用,除此之外你去面试人家都会问你原理的,所以本文就简单让大家了解线程池的创建,使用包括一些常见方法原理及参数介绍,适合三年内的同学观看。正文就目前啊,创建线程基本上已经不用继承Thread了,缺点: ...原创 2018-12-10 16:49:12 · 12271 阅读 · 0 评论 -
CountDownLatch讲解-Junit实现多线程测试
前言我们知道使用junit进行多线程测试时,主线程执行完毕后直接结束所有线程,(这就好比我前文说线程五种状态中的“STOP”,就是不接受新任务,中断当前正在运行的任务。)导致很多子线程没有执行完呢就已经关闭了,所以为了解决这个问题我们就需要讲解一个JUC又一个重要的类CountDownLatch,使用AQS状态表示计数,可以把它看成是一个计数器,源码注释第一句话:A synchronizati...原创 2018-12-19 16:10:17 · 13474 阅读 · 5 评论 -
Java并发之CyclicBarrier-栅栏详解
前言上一篇我们介绍了CountDownLatch,和我今天要说的栅栏CyclicBarrier有相似之处,笔者英语烂,给读者翻译成读音:塞克勒柏瑞尔,莫笑。它允许一组线程互相等待,直到到达某个公共屏障点,然后释放这些线程,重置屏障点继续等待,知道所有要执行的线程都执行完毕。正文为了让读者更容易理解这个栅栏的含义,我做一个比喻,目前有100个人要坐车去另一个地方,每个车可以装10个人,那...原创 2018-12-20 13:02:21 · 13111 阅读 · 0 评论 -
java并发队列之阻塞队列-ArrayBlockingQueue
前言今天讲阻塞队列,阻塞队列有很多,这篇文章只讲解ArrayBlockingQueue,其他的大同小异。正文什么是阻塞队列阻塞队列(BlockingQueue)是一个支持两个附加操作的队列。这两个附加的操作是:在队列为空时,获取元素的线程会等待队列变为非空。当队列满时,存储元素的线程会等待队列可用。阻塞队列常用于生产者和消费者的场景,生产者是往队列里添加元素的线程,消费者是从队列里...原创 2018-12-26 17:07:21 · 15470 阅读 · 0 评论 -
java并发队列之非阻塞队列-ConcurrentLinkedQueue
前言前面我们讲了阻塞队列,阻塞队列使用put/take方法可以实现在队列已满或空的时候达到线程阻塞状态,阻塞这种方式在线程并发时固然安全,但是也会造成效率上的问题,所以说今天我们来讲一个非阻塞队列——ConcurrentLinkedQueue,他能保证并发安全,而且还可以提高效率。正文通常 ConcurrentLinkedQueue 的性能好于 BlockingQueue。它是一个基于...原创 2018-12-31 12:23:07 · 773 阅读 · 0 评论 -
java并发之重入锁-ReentrantLock
前言 目前主流的锁有两种,一种是synchronized,另一种就是ReentrantLock,JDK优化到现在目前为止synchronized的性能已经和重入锁不分伯仲了,但是重入锁的功能和灵活性要比这个关键字多的多,所以重入锁是可以完全替代synchronized关键字的。下面就来介绍这个重入锁。正文 ReentrantLock重入锁是Lock接口里...原创 2019-01-06 12:16:33 · 303 阅读 · 2 评论 -
tryAcquire()、addWaiter()、acquireQueued()挨个分析。
声明:本文只为上篇文章 java并发之重入锁-ReentrantLock链接使用。tryAcquire()final boolean nonfairTryAcquire(int acquires) { final Thread current = Thread.currentThread(); int c = getState(); ...原创 2019-01-06 17:00:02 · 5217 阅读 · 1 评论 -
【排序算法】-快排算法
前言笔者也是近期猜对算法感兴趣的,可能对刚入门的同学来说,算法接触不到,但是对于有一些经验的程序员来说,算法的技能是必备的,尤其是面试的时候,动不动就让你手写算法,其实考验的就是你的基础知识。第一篇我就来讲解快排算法,开发中用到的并不多,大家先理解快排思路,然后在背代码的时候就很容易了,核心代码不到十行,所以也是一个很简单的算法。正文快排利用了一个重要的概念就是“分治法”,所谓“分治”...原创 2019-02-18 13:28:35 · 8314 阅读 · 0 评论 -
【排序算法】-冒泡排序
前言冒泡排序是所有排序算法里最为简单的一种,也是面试经常让你手写的一种算法。说实话在此之前我也写不出来冒泡,所以在算法这块我也是下过功夫的,今天我就来通俗讲解冒泡排序的原理,让大家对冒泡有更深对印象,核心代码五行左右,so easy!正文首先冒泡对意思是什么呢,鱼在水里吐泡泡的时候,由于压强原因,越上升泡泡越大,所以冒泡排序默认是从小到大排序的算法。核心思想将一个数组的前一个数...原创 2019-02-18 14:50:43 · 180 阅读 · 0 评论 -
代理模式
前言代理模式让我评价就是一个笑面虎,结构超简单,实现比较复杂。大家都知道代理模式深入咱们都业务代码中,(就是代理类把接口都实现类引入进来,然后加以封装,再由其他类使用代理类)应用场景太多了,但是大多都是静态代理,如果真都实现一个动态代理我认为还是一个比较都事情,本文对动态代理这块写对也是比较简单,参照文献https://blog.csdn.net/qq_34178598/article...原创 2019-02-28 14:44:48 · 6132 阅读 · 0 评论 -
策略模式
前言策略设计模式难易程度应该是仅次于单例模式的,无论是实现起来还是从结构上看,都非常简单,他跟简单工厂都一部分思想类似,大家可以结合一下简单工厂来看策略模式,大家千万不要记混了哦。正文简述什么是策略模式:它定义一系列的算法,将每一种算法封装起来并可以相互替换使用,策略模式让算法独立于使用它的客户端应用而独立变化。策略模式适用场景:策略模式适合解决当程序出现多个不同分支,而且每个分支...原创 2019-03-01 10:33:31 · 4052 阅读 · 0 评论 -
深入理解ConcurrentHashMap
前言本文的分析的源码是JDK8的版本,上一节我们介绍了HashMap,提到了多线程避免扩容时出现死循环,时要使用ConcurrentHashMap,下面我来讲解一下ConcurrentHashMap这个东西简单的基本原理是什么,我们为什么用。正文如何保证HashMap的线程安全呢? 方法有很多,比如使用HashTable或者Collections.synchronizedMap...原创 2018-10-24 10:29:51 · 662 阅读 · 2 评论