随笔分类 -  Java

摘要:简介 随着近些年微服务在国内的盛行,消息驱动被提到的越来越多。主要原因是系统被拆分成多个模块后,一个业务往往需要在多个服务间相互调用,不管是采用HTTP还是RPC都是同步的,不可避免快等慢的情况发生,系统性能上很容易遇到瓶颈。在这样的背景下,将业务中实时性要求不是特别高且非主干的部分放到消息队列中是 阅读全文
posted @ 2020-05-30 23:32 freshchen 阅读(1134) 评论(1) 推荐(2)
摘要:前言 相信大家都挺熟悉 CountDownLatch 的,顾名思义就是一个栅栏,其主要作用是多线程环境下,让多个线程在栅栏门口等待,所有线程到齐后,栅栏打开程序继续执行。 案例 用一个最简单的案例引出我们的主角 源码分析 看源码前最好先熟悉下 AQS 的大致结构,之前有两篇文章仅供参考,大致熟悉下即 阅读全文
posted @ 2020-04-22 18:46 freshchen 阅读(266) 评论(0) 推荐(1)
摘要:前言 本文是 ReentrantLock 源码的第二篇,第一篇主要介绍了公平锁非公平锁正常的加锁解锁流程,虽然表达能力有限不知道有没有讲清楚,本着不太监的原则,本文填补下第一篇中挖的坑。 "Java读源码之ReentrantLock" 源码分析 感知中断锁 如果我们希望检测到中断后能立刻抛出异常就用 阅读全文
posted @ 2020-04-19 21:16 freshchen 阅读(463) 评论(0) 推荐(1)
摘要:前言 ReentrantLock 可重入锁,应该是除了 synchronized 关键字外用的最多的线程同步手段了,虽然JVM维护者疯狂优化 synchronized 使其已经拥有了很好的性能。但 ReentrantLock 仍有其存在价值,例如可以感知线程中断,公平锁模式,可以指定超时时间的抢锁等 阅读全文
posted @ 2020-04-07 18:47 freshchen 阅读(507) 评论(0) 推荐(0)
摘要:前言 在想很好了解 Stream 之前,很有必要简单的了解下函数式变成以及Lambda的概念,可以阅读另外一篇 " Java8新特性之Lambda " 大家回忆下日常学习工作中使用的最多的 Java API 是什么?相信很多人的答案和我一样都是集合。我们选择适合的集合数据结构存储数据,而我们之于集合 阅读全文
posted @ 2020-02-15 21:56 freshchen 阅读(1681) 评论(0) 推荐(0)
摘要:简介 使用场景 主要用于在微服务架构下做CDC(消费者驱动契约)测试。下图展示了多个微服务的调用,如果我们更改了一个模块要如何进行测试呢? 传统的两种测试思路 模拟生产环境部署所有的微服务,然后进行测试 优点 测试结果可信度高 缺点 测试成本太大,装一整套环境耗时,耗力,耗机器 Mock其他微服务做 阅读全文
posted @ 2020-01-22 20:00 freshchen 阅读(3210) 评论(2) 推荐(0)
摘要:简介 "官网链接" JOOQ是一套持久层框架,主要特点是: 逆向工程,自动根据数据库结构生成对应的类 流式的API,像写SQL一样 提供类型安全的SQL查询,JOOQ的主要优势,可以帮助我们在写SQL时就做检查 支持几乎所有DDL,DML 可以内部避免SQL注入安全问题 支持SQL渲染,打印,绑定 阅读全文
posted @ 2020-01-21 15:46 freshchen 阅读(5592) 评论(0) 推荐(0)
摘要:前言 Why 初次接触到Groovy是在实习中接触到一个 纯Groovy写的项目,当时看了下这不就是没有分号的Java么,而且也是有年纪的语言了,并不想投入时间学习。后来工作中越来越多的看到Groovy的身影,Gradle,Spring Cloud Contract等等都支持Groovy作为DSL( 阅读全文
posted @ 2020-01-21 15:33 freshchen 阅读(3659) 评论(0) 推荐(1)
摘要:概念 作用 构建或者运行阶段提供一些元数据,不影响正常运行逻辑,简化开发 内置注解 Java提供了一些内置注解,并且实现了相关功能 @Override 检查该方法是否是重载方法,如果发现其父类,或者是引用的接口中并没有该方法时,会报编译错误 @Deprecated 标记过时方法。如果使用该方法,会报 阅读全文
posted @ 2019-12-17 23:07 freshchen 阅读(859) 评论(0) 推荐(2)
摘要:简介 作用 Java8中接口引入了defualt,static两种方法提供默认实现,彻底打破了接口不能有默认实现的规定 static 让接口类似于工具类,提供一些静态方法 static方法不会被子类继承 defualt 给接口加入了默认方法实现 defualt方法会被子类继承 为什么 当我们写好一个 阅读全文
posted @ 2019-11-14 14:17 freshchen 阅读(1357) 评论(0) 推荐(0)
摘要:简介 代理模式出场率真的相当的高,几乎所有框架中无一例外都用到了代理模式,所以了解一下收益还是很高的。 代理模式是什么 如果用一句话来描述代理模式: 代理模式就是为其他对象提供一种代理以控制对被代理对象的访问,也就是我们常说的中介 在开发以及生活中经常听到正向代理,反向代理这样的词,举例说明 正向代 阅读全文
posted @ 2019-11-10 14:14 freshchen 阅读(950) 评论(0) 推荐(0)
摘要:为什么要Lambda Java8应该是目前最大的一次更新了,更新后我们迎来了很多新特性,其中便包括Lambda表达式,函数式编程的思想正式进入Java,让我们看一个经典案例。 例1 按照两个人的年龄排序的功能 采用匿名内部类已经算简介了,如果专门用一个类去实现Comparator再new出来就更烦了 阅读全文
posted @ 2019-10-22 17:38 freshchen 阅读(1024) 评论(0) 推荐(0)
摘要:前言 JDK版本: 1.8 作用 LockSupport类主要提供了park和unpark两个native方法,用于阻塞和唤醒线程。注释中有这么一段: 这个类是为拥有更高级别抽象的并发类服务的,开发中我们不会用到这个类 既然只是native方法,开发中也用不到,那么还有必要去看么? 了解LockSu 阅读全文
posted @ 2019-10-17 16:35 freshchen 阅读(405) 评论(0) 推荐(0)
摘要:前言 JDK版本: 1.8 之前在看Thread源码时候看到这么一个属性 作用 ThreadLocal实现的是每个线程都有一个本地的副本,相当于局部变量,这样就可以少一些参数传递,是以空间换时间的一周策略,其实ThreadLocal就是内部自己实现了一个map数据结构。 存在的问题 ThreadLo 阅读全文
posted @ 2019-10-15 22:55 freshchen 阅读(452) 评论(0) 推荐(1)
摘要:前言 JDK版本:1.8 阅读了Object的源码,wait和notify方法与线程联系紧密,而且多线程已经是必备知识,那保持习惯,就从多线程的源头Thread类开始读起吧。由于该类比较长,只读重要部分 源码 类声明和重要属性 Java线程有几种状态? 下面这个图可以帮助理解Java线程的生命周期, 阅读全文
posted @ 2019-10-14 22:14 freshchen 阅读(1470) 评论(0) 推荐(2)
摘要:前言 JDK版本: 1.8 最近想看看jdk源码提高下技术深度(比较闲),万物皆对象,虽然Object大多native方法但还是很重要的。 源码 实践 clone() wait() 和 notify() 阅读全文
posted @ 2019-10-12 16:36 freshchen 阅读(268) 评论(1) 推荐(1)