随笔分类 - java
摘要:一、介绍:@Retention是用来修饰注解的,注解的注解,也称为元注解 二、作用:@Retention修饰注解,用来表示注解的生命周期,生命周期的长短取决于@Retention的属性RetentionPolicy指定的值,例如@Retention(RetentionPolicy.RUNTIME)
阅读全文
摘要:函数式接口 1.Consumer<T> 代表了接受一个输入参数并且无返回的操作 2.Function<T,R> 接受一个输入参数,返回一个结果。 3.Predicate<T> 接受一个输入参数,返回一个布尔值结果。 4.Supplier<T> 无参数,返回一个结果。
阅读全文
摘要:摘要:此篇文章主要介绍 Java8 Lambda 表达式产生的背景和用法,以及 Lambda 表达式与匿名类的不同等。本文系 OneAPM 工程师编译整理。 Java 是一流的面向对象语言,除了部分简单数据类型,Java 中的一切都是对象,即使数组也是一种对象,每个类创建的实例也是对象。在 Java
阅读全文
摘要:从 Java 8 引入的一个很有趣的特性是 Optional 类。Optional 类主要解决的问题是臭名昭著的空指针异常(NullPointerException) —— 每个 Java 程序员都非常了解的异常。 本质上,这是一个包含有可选值的包装类,这意味着 Optional 类既可以含有对象也
阅读全文
摘要:DelayQueue基本原理DelayQueue是一个没有边界BlockingQueue实现,加入其中的元素必需实现Delayed接口。当生产者线程调用put之类的方法加入元素时,会触发Delayed接口中的compareTo方法进行排序,也就是说队列中元素的顺序是按到期时间排序的,而非它们进入队列
阅读全文
摘要:首先简单说下先偏向锁、轻量级锁、重量级锁三者各自的应用场景: 偏向锁:只有一个线程进入临界区; 轻量级锁:多个线程交替进入临界区; 重量级锁:多个线程同时进入临界区。 锁膨胀过程: 上图跟下面这个解析基本相同: 偏向所锁、轻量级锁都是乐观锁,重量级锁是悲观锁。一个对象刚开始实例化的时候,没有任何线程
阅读全文
摘要:一、ArrayList的数据结构 ArrayList的底层数据结构就是一个数组,数组元素的类型为Object类型,对ArrayList的所有操作底层都是基于数组的。 二、ArrayList的线程安全性 对ArrayList进行添加元素的操作的时候是分两个步骤进行的,即第一步先在object[size
阅读全文
摘要:两者区别: 1.首先synchronized是java内置关键字,在jvm层面,Lock是个java类; 2.synchronized无法判断是否获取锁的状态,Lock可以判断是否获取到锁; 3.synchronized会自动释放锁(a 线程执行完同步代码会释放锁 ;b 线程执行过程中发生异常会释放
阅读全文
摘要:1. volatile简介 在上一篇文章中我们深入理解了java关键字,我们知道在java中还有一大神器就是关键volatile,可以说是和synchronized各领风骚,其中奥妙,我们来共同探讨下。 通过上一篇的文章我们了解到synchronized是阻塞式同步,在线程竞争激烈的情况下会升级为重
阅读全文
摘要:一天,朱斯参加了一场code Review研讨会。会上的一群人正在讨论着如何对祖传代码进行变更,大家你一言,我一语,场面十分热闹! 突然,只见人群中的一个人满面愁容,说道:"昨天在项目中看到下面这样一段代码,分支太多了!维护起来很烦啊!" if(day == "周一"){ System.out.pr
阅读全文
摘要:public static void printColl(ArrayList<?> al) { Iterator<?> it = al.iterator(); while (it.hasNext()) { System.out.println(it.next().toString()); } } ?
阅读全文
摘要:<T> T表示返回值是一个泛型,传递啥,就返回啥类型的数据,而单独的T就是表示限制你传递的参数类型,这个案例中,通过一个泛型的返回方式,获取每一个集合中的第一个数据, 通过返回值<T> T 和T的两种方法实现 <T> T 用法 这个<T> T 表示的是返回值T是泛型,T是一个占位符,用来告诉编译器,
阅读全文
摘要:1.Java泛型的实现方法:类型擦除 大家都知道,Java的泛型是伪泛型,这是因为Java在编译期间,所有的泛型信息都会被擦掉,正确理解泛型概念的首要前提是理解类型擦除。Java的泛型基本上都是在编译器这个层次上实现的,在生成的字节码中是不包含泛型中的类型信息的,使用泛型的时候加上类型参数,在编译器
阅读全文
摘要:先看一个例子,以案例带出来java的特性。 一:Lambda表达式与方法引用 1.1Lambda表达式 先聊一个不断变化的需求: 第一次需求:筛选出绿苹果 public static List<Apple> filterGreenApples(List<Apple> apples){ List<Ap
阅读全文
摘要:RuntimeException()和Exception()区别: 1.继承自RuntimeException或error的是非检查型异常,而继承自exception的则是检查型异常(当然,runtimeexception本身也是exception的子类)。2.对非检查型类异常可以不用捕获,而检查型
阅读全文
摘要:jdk1.7 默认垃圾收集器Parallel Scavenge(新生代)+Parallel Old(老年代) jdk1.8 默认垃圾收集器Parallel Scavenge(新生代)+Parallel Old(老年代) jdk1.9 默认垃圾收集器G1 -XX:+PrintCommandLineFl
阅读全文
摘要:前言Garbage First(G1)是垃圾收集领域的最新成果,同时也是HotSpot在JVM上力推的垃圾收集器,并赋予取代CMS的使命。如果使用Java 8/9,那么有很大可能希望对G1收集器进行评估。本文详细首先对JVM其他的垃圾收集器进行总结,并与G1进行了简单的对比;然后通过G1的内存模型、
阅读全文
摘要:垃圾收集器是垃圾回收算法(标记-清除算法、复制算法、标记-整理算法)的具体实现,不同商家、不同版本的JVM所提供的垃圾收集器可能会有很在差别. 图中展示了7种不同分代的收集器: Serial、ParNew、Parallel Scavenge、Serial Old、Parallel Old、CMS、G
阅读全文
摘要:写在前面:之前在设计接口时因经验尚浅,并未过多考虑幂等性,但这两天出现的一个线上问题让我认识到了某些情况下接口幂等性 的重要性; 非幂等场景: 服务A将单据A信息通过RPC远程过程调用传给下游服务B接口(非幂等接口)用于生成关联单据B,服务B接口会校验是否已经接收 过单据A,如果已接收过,会报错『重
阅读全文
摘要:在微服务架构下,我们在完成一个订单流程时经常遇到下面的场景: 1.一个订单创建接口,第一次调用超时了,然后调用方重试了一次 2.在订单创建时,我们需要去扣减库存,这时接口发生了超时,调用方重试了一次 3.当这笔订单开始支付,在支付请求发出之后,在服务端发生了扣钱操作,接口响应超时了,调用方重试了一次
阅读全文

浙公网安备 33010602011771号