jdk你不得不了解的实现:ThreadLocal源码全解析

本文原创地址,我的博客https://jsbintask.cn/2019/04/01/jdk/jdk8-threadlocal/(食用效果最佳),转载请注明出处!

前言

ThreadLocal是jdk中一个非常重要的工具,它可以控制堆内存中的对象只能被指定线程访问,如果你经常阅读源码,基本在各大框架都能发现它的踪影。而它最经典的应用就是事务管理,同时它也是面试中的常客。

SpringCloud-Zuul(一):技术选型及请求流程源码走读

本文原创地址,我的博客https://jsbintask.cn/2019/03/28/springcloud/springcloud-zuul-process/(食用效果最佳),转载请注明出处!

前言

最近公司最新架构确定使用微服务之后,经过讨论,最终还是选用了SpringCloud的体系。我负责网关,鉴权服务的研发。记录下这段时间新接触的知识。

网关技术选型

springcloud选用了最新的稳定版本Greenwich,所以对于网关来说,有两种框架选择:SpringCloud GatewayZuul,经过调研我最终选用了Zuul,原因如下:

  1. 目前项目在一个快速迭代的过程中,Zuul相比于Gateway来说更加稳定。
  2. Gateway文档还有待完善,我在调查过程中,发现官网文档甚至代码还留有很多TODO,这不是一个大坑吗! Gateway文档
  3. Gateway相对Zuul来说显得难以使用,Gateway使用Spring5开发,基于函数,响应式编程,可能对于刚接触Reactive的人来说阅读源码有一定难度。
  4. 虽然Zuul在性能上来说不如Gateway,但对于我们的业务来说这点时间消耗显得不那么重要。
    1
    2
    3
    4
    5
    Proxy	    Avg Latency	    Avg Req/Sec/Thread
    gateway 6.61ms 3.24k
    linkered 7.62ms 2.82k
    zuul 12.56ms 2.09k
    none 2.09ms 11.77k

HashSet源码解析从一道面试题说起:HashSet内部是怎么实现的?

本文原创地址,我的博客https://jsbintask.cn/2019/03/27/jdk/jdk8-hashset/(食用效果最佳),转载请注明出处!

前言

前段时间朋友面试遇到这个问题:谈一谈HashSet的特点,它是怎么实现的,使用时有什么需要注意的点呢?恰好最近在写这方面的文章,于是正好通过本篇文章讲解下HashSet的源码实现,需要注意的点。
HashSet实现了Set接口,是一个不能够存放重复元素的容器,内部直接使用HashMap实现,即底层使用数组存储数据,HashSet没有任何同步手段,在多线程环境下需慎重考虑,可以使用Collections.synchronizedSet(new HashSet(...));给原有的Set方法同步。
HashSet

友情链接:HashMap源码全解析从一道面试题说起:请一行一行代码描述下hashmap put方法

jdk1.8 LinkedList源码全分析

本文原创地址,我的博客https://jsbintask.cn/2019/03/26/jdk/jdk8-linkedlist/(食用效果最佳),转载请注明出处!

前言

LinkedList内部是一个链表的实现,一个节点除了保持自身的数据外,还持有前,后两个节点的引用。所以就数据存储上来说,它相比使用数组作为底层数据结构的ArrayList来说,会更加耗费空间。但也正因为这个特性,它删除,插入节点很快!LinkedList没有任何同步手段,所以多线程环境须慎重考虑,可以使用Collections.synchronizedList(new LinkedList(...));保证线程安全。
LinkedList

友情链接:jdk1.8 ArrayList源码全分析

欢迎扫描左方二维码跟作者交流.