自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

  • 博客(249)
  • 收藏
  • 关注

原创 优秀站点大全(持续更新)

我们搞技术的都会有收藏的干货网址,我把我的干货网址分享出来,如果对大家有用的话,可以点赞转发收藏,如果你有更好的技术网址欢迎留言分享啊1.Github技术Java 核心知识库 https://github.com/crossoverJie/JCSprout技术必备基础知识 https://github.com/CyC2018/CS-NotesJava program...

2020-05-07 23:59:10 1074 1

转载 Spring Boot 青睐的数据库连接池HikariCP为什么是史上最快的?

前言现在已经有很多公司在使用HikariCP了,HikariCP还成为了SpringBoot默认的连接池,伴随着SpringBoot和微服务,HikariCP 必将迎来广泛的普及。下面陈某带大家从源码角度分析一下HikariCP为什么能够被Spring Boot 青睐,文章目录如下:目录零、类图和流程图开始前先来了解下HikariCP获取一个连接时类间的交互流程,方便下面详细流程的阅读。获取连接时的类间交互:图1一、主流程1:获取连接流程HikariCP获取连接时

2021-08-07 18:39:19 312

转载 关于主从延迟,一篇文章给你讲明白了!(转)

生活中所受的苦,终会以一种形式回归!前言在实际的生产环境中,由单台MySQL作为独立的数据库是完全不能满足实际需求的,无论是在安全性,高可用性以及高并发等各个方面因此,一般来说都是通过集群主从复制(Master-Slave)的方式来同步数据,再通过读写分离(MySQL-Proxy)来提升数据库的并发负载能力进行部署与实施总结MySQL主从集群带来的作用是: 提高数据库负载能力,主库执行读写任务(增删改),备库仅做查询。 提高系统读写性能、可扩展性和高可用性。 数.

2021-08-01 11:38:40 418

转载 【转】深入理解JDBC的超时设置

原文:http://www.cubrid.org/blog/dev-platform/understanding-jdbc-internals-and-timeout-configuration/恰当的JDBC超时设置能够有效地减少服务失效的时间。本文将对数据库的各种超时设置及其设置方法做介绍。真实案例:应用服务器在遭到DDos攻击后无法响应在遭到DDos攻击后,整个服务都垮掉了。由于第四层交换机不堪重负,网络变得无法连接,从而导致业务系统也无法正常运转。安全组很快屏蔽了所有的DDos攻击,并恢

2021-07-31 14:09:57 1739

转载 基于Prometheus和Grafana的监控平台 - 环境搭建

导读微服务中的监控分根据作用领域分为三大类,Logging,Tracing,Metrics。Logging - 用于记录离散的事件。例如,应用程序的调试信息或错误信息。它是我们诊断问题的依据。比如我们说的ELK就是基于Logging。 Metrics - 用于记录可聚合的数据。例如,队列的当前深度可被定义为一个度量值,在元素入队或出队时被更新;HTTP 请求个数可被定义为一个计数器,新请求到来时进行累。prometheus专注于Metrics领域。 Tracing - 用于记录请求范围内的信息。

2021-07-26 21:09:51 248

原创 java agent技术

背景: 主流的APM开源框架如Pinpoint、SkyWalking等等都是基于javaAgent和字节码操作框架(如ASM,javassist)技术开发的,这种方式相当于在JVM级别做了AOP支持,这样我们可以在不修改应用程序的基础上就做到了AOP,比如统计某个方法执行需要的时间,不修改源代码的方式就能实现 思维导图: 相关资料参考: 1. Java agent原理 2.Java Instrument技术问答 3.Java程序员必知:深...

2021-03-13 17:13:23 150

转载 访问者模式一篇就够了

访问者模式介绍最复杂的设计模式,并且使用频率不高,《设计模式》的作者评价为:大多情况下,你不需要使用访问者模式,但是一旦需要使用它时,那就真的需要使用了。访问者模式是一种将数据操作和数据结构分离的设计模式。(觉得太抽象,可以看下面的例子)。访问者模式的使用场景对象结构比较稳定,但经常需要在此对象结构上定义新的操作。 需要对一个对象结构中的对象进行很多不同的并且不相关的操作,而需要避免这些操作“污染”这些对象的类,也不希望在增加新操作时修改这些类。访问者模式的UML类图访问者模式.

2021-03-10 23:13:03 125

转载 Leaf——美团点评分布式ID生成系统

背景在复杂分布式系统中,往往需要对大量的数据和消息进行唯一标识。如在美团点评的金融、支付、餐饮、酒店、猫眼电影等产品的系统中,数据日渐增长,对数据分库分表后需要有一个唯一ID来标识一条数据或消息,数据库的自增ID显然不能满足需求;特别一点的如订单、骑手、优惠券也都需要有唯一ID做标识。此时一个能够生成全局唯一ID的系统是非常必要的。概括下来,那业务系统对ID号的要求有哪些呢?全局唯一性:不能出现重复的ID号,既然是唯一标识,这是最基本的要求。 趋势递增:在MySQL InnoDB引擎中使用的是聚集

2021-02-28 16:15:21 461

原创 Mybatis的插件管理怎么处理的

1. 原理MyBatis可以帮助我们在语句执行过程中的某一点进行拦截调用。它的实现原理就是插件采用责任链模式,通过动态代理组织多个拦截器(插件)将四大核心对象进行拦截增强变成个代理对象,从而可以改变Mybatis的默认对象的行为(诸如SQL分页改写,统计性能,打印日志等),mybatis源码环境搭建参考,通过mybatis的源码分析,我们可以更清楚的了解到策略模式和动态代理模式是如何使用的,后续在代码逻辑中可以借鉴2. 流程图3. 代码示例 <plugins>

2021-01-31 17:19:49 94

原创 本地缓存小计

1.概念 本地缓存,在我们日常开发中是必不可少的一种解决数据读取性能问题的方法。简单的说,cache 就是为了提升系统性能而开辟的一块内存空间,SpringBoot 1.x版本中的默认本地cache是Guava Cache。在2.x(Spring Boot 2.0(spring 5))版本中已经用Caffine Cache取代了Guava Cache。毕竟有了更优的缓存淘汰策略。这2个都是线程安全的,可以指定容量,多种过期策略,主要特性是将数据写入缓存时是原子操作。当缓存的数据达到最大规模时...

2021-01-24 18:14:50 158

原创 JAVA设计模式之装饰器模式

1.概念: 以对客户透明的方式来扩展对象的功能,用户根据功能需求随意选取组成对象的成分进行动态地将责任附加到对象上,通过方法的链式调用来实现装饰者提供了比继承更有弹性的替代方案,应遵循开闭原则(类应该对扩展开发,对修改关闭) 简单来讲就是动态的给一个对象增加一些职能,相对与生成子类更加灵活2.应用以及说明:1装饰模式增加强了单个对象的能力。Java IO到处都使用了装饰模式,经典的例子就是Buffered系列类如BufferedReader和BufferedWriter,它们增强了Read..

2021-01-23 11:52:43 162

转载 你不好奇 CPU 是如何执行任务的?

前言你清楚下面这几个问题吗? 有了内存,为什么还需要 CPU Cache? CPU 是怎么读写数据的? 如何让 CPU 能读取数据更快一些? CPU 伪共享是如何发生的?又该如何避免? CPU 是如何调度任务的?如果你的任务对响应要求很高,你希望它总是能被先调度,这该怎么办? … 这篇,我们就来回答这些问题。正文CPU 如何读写数据的?先来认识 CPU 的架构,只有理解了 CPU 的 架构,才能更好地理解 CPU 是如何读写数据

2021-01-16 21:08:52 122

原创 STAR结构化思维

概念S指的是situation,中文含义是情景,也就是在面谈中我们要求应聘者描述他在所从事岗位期间曾经做过的某件重要的且可以当作我们考评标准的事件的所发生的背景状况。T指的是task,中文含义为任务,即是要考察应聘者在其背景环境中所执行的任务与角色,从而考察该应聘者是否做过其描述的职位及其是否具备该岗位的相应能力。A指的是action,中文含义是行动,是考察应聘者在其所描述的任务当中所担任的角色是如何操作与执行任务的。R指的是result,中文含义为结果,即该项任务在行动后所达到的效果,通常

2021-01-15 00:38:14 952

转载 Elastic Search中filter的理解

在ES中,请求一旦发起,ES服务器是按照请求参数的顺序依次执行具体的搜索过滤逻辑的。如何定制请求体中的搜索过滤条件顺序,是一个经验活。类似query(指search中的query请求参数),也是搜索的一种方式。与常见的搜索对比,filter不会计算搜索条件相关度分数,也不会根据相关度分数进行排序,相对效率更高一些。且filter内置cache,自动缓存常用的filter数据,有效提升过滤速度。语法:GET /test_sort/_search{"query": {"bool": {"filt

2021-01-07 00:54:46 1632

转载 使用枚举来巧妙干掉if-else,使代码更加优雅

导读:本文通过一个简单的例子来展示如何通过枚举巧妙地干掉if-else,使代码看起来更佳优雅。场景:当我们接收到一些数据需要对其进行处理时,由于它们来自于不同的渠道(如:腾讯,头条),不同渠道所需的处理方式不同,下面我们写一个简单Demo来实现该的场景。解决思路1、首先构建一个 GeneralChannelRule 基础规则抽象类,定义一个抽象方法process(),不同的渠道都需要实现该抽象方法。public abstract class GeneralChannelRule..

2021-01-01 17:07:02 332

转载 从 Java 内存模型看内部细节

写在前面Java 内存模型简称 JMM,其实是一个抽象模型,并非具体的存在。如上图想表达的,线程的读写都是直接跟 work memory 打交道,CPU 会通过一种机制将数据 flush 到 main memory 中。那么在 flush 发生之前,不同 CPU 之间就会出现可见性的问题,这很好理解。熟悉 Java 的大概都知道volatile关键字是用来解决内存可见性和指令重排序问题的,我们往往知道这两点,但却不知道其中的关联。关于 volatile 也有很多人误认为这是 Java 的特色..

2020-12-17 00:04:39 140

原创 java集合对象排序总结

java集合对象按照某个属性进行排序有很多种方式,下面简单记录下1对象实现Comparable接口中的compareTo 方法,然后通过Collections.sort进行排序2通过Collections.sort配合匿名内部类Comparator来处理(Java1.7或更早版本的JVM不支持Lambda语法的情况下推荐使用这种)或通过List接口的(JDK1.8默认实现方法)Collections.sort(list, new Comparator<Order1>()...

2020-12-02 00:41:50 612

转载 从 Java 内存模型看内部细节

写在前面Java 内存模型简称 JMM,其实是一个抽象模型,并非具体的存在。如上图想表达的,线程的读写都是直接跟 work memory 打交道,CPU 会通过一种机制将数据 flush 到 main memory 中。那么在 flush 发生之前,不同 CPU 之间就会出现可见性的问题,这很好理解。熟悉 Java 的大概都知道volatile关键字是用来解决内存可见性和指令重排序问题的,我们往往知道这两点,但却不知道其中的关联。关于 volatile 也有很多人误认为这是 Java 的特色..

2020-11-27 00:01:03 194 1

原创 Redis命令之hscan

1、业务背景 在互联网的项目中为了提高性能和吞吐量,通常需要做一些优化和数据异构,比如查询DB,我们可以优化索引,通过命中索引来提高查询速度,也可以把数据异构到Redis,虽然Redis的性能非常好也支持5种数据结构,如果想性能更好的话,可以考虑异构到JVM缓存,也就是DB的数据异构到Redis,Redis的数据定期异构到JVM缓存2、带来问题 在Redis中通过用一个hashmap来存储业务数据,当这些业务数据比较小,我们可以通过hGetAll来获取redis的整个map然后设...

2020-11-18 00:24:14 9069

原创 跳表笔记

1. 概念 跳表就是在链表的基础上增加了多层索引链表,这样在查找时就可以通过在上下不同层级的索引链表间跳跃,就能像二分查找(底层依赖的是数组随机访问的特性)算法一样达到快速查找的目的,但是它可以支持快速的插入、删除、查找操作,写起来也不复杂,甚至可以替代红黑树(Red-black tree)。jdk包下ConcurrentSkipListMap就是基于跳表实现的2.原理​​​ 为一个值有序的链表建立多级索引,比如每2个节点提取一个节点到上一级,我们把抽出来的那一级叫做索引或索引层。如...

2020-10-23 00:47:03 86

原创 Spring如何灵活使用Schema使得业务配置化?

最近在使用一个小组件,发现spring可以通过扩展Schema支持生成复杂的java对象,发现很多组件也是这么做的,比如dubbo,原理挺简单的,就是先定义xsd,xml,javabean,然后通过spring提供的工具来生成对应的实体对象,其实我们在做自定义组件的时候也可以借鉴这种思路去做,接下来以dubbo为例简单说明下这个过程,dubbo源码可以从github上下载下来1.设计java对象和属性在dubbo里就是ApplicationConfig,RegistryConfig,Pro...

2020-10-16 00:31:51 211

原创 查找算法之二分查找

1. 概念 二分查找(Binary Search)算法,也叫折半查找算法、二分搜索,是一种在有序数组中查找某一特定元素的搜索算法,查找思想有点类似分治思想。每次都通过跟区间的中间元素对比,将待查找的区间缩小为之前的一半,直到找到要查找的元素,或者区间被缩小为0。类似生活中猜字游戏,它的时间复杂度是O(logn),适用于经常查找的、但是不变的(增删)的有序列表。虽然查询效率很高,但也有一定的局限性,二分查找依赖顺序表结构,那么只能使用数组作为底层数据结构,数组按照下标随机访问数据的时间复杂度...

2020-10-09 23:18:17 1113

原创 日志几点思考

在系统中经常会加很多必要的日志来帮忙我们定位分析解决问题,虽然这个日志挺简单,但是真的很重要,下面从几个方面来总结下 1.日志框架的来源 java有很多现成的日志框架,我们可以借鉴学习源码和设计思想,可参考之前转载的文章https://blog.csdn.net/jiangzhexi/article/details/80771163 2.日志打印规范 2.1日志分级:像log4j2有8个日志级别,按照从低到高为:ALL < TRACE < DEBUG ...

2020-09-13 00:23:11 138

转载 假如你是架构师,你要做些什么

很多做软件开发同学的梦想都是成为一名架构师,而架构师的核心工作就是做好软件设计。软件设计是软件开发过程中的一个重要环节,那么如何进行软件设计,其输出标准又是什么呢?软件设计过程中,如何和各个相关方沟通,使软件设计能同时满足用户的功能需求和非功能需求,并降低公司的开发成本? 前期思考  很多软件开发同学的职业规划都是架构师,试想这样一个场景,如果公司安排你做架构师,让你在项目开发前期进行了一些架构设计。你该如何开展你的工作? 应该如何说出你的工作成果? 你如何确定你的设计是否满足用户需求的.

2020-09-01 08:55:46 138

原创 排序算法之快速排序

1. 概念通过一趟排序将待排记录使用分治算法把一个串(list)分为两个子串(sub-lists),其中一部分记录的关键字均比另一部分的关键字小,则可分别对这两部分记录继续进行排序,以达到整个序列有序。2.原理​​​将小于等于基准点的数全部放到基准点的左边,将大于等于基准点的数全部放到基准点的右边,在这个分区退出之后,该基准就处于数列的中间位置。这个称为分区(partition)操作;递归地(recursive)把小于基准值元素的子数列和大于基准值元素的子数列排序。简要步骤如下1) 每次排序

2020-08-18 00:24:35 103

原创 观察者模式实现之EventBus(Google)

观察者模式又叫发布-订阅(publish/subscribe)模式,定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态上发生变化时,会通知所有观察者对象,使他们能够自动更新自己,我们第一时间可能会想到消息队列,但如果在同一个JVM进程中要实现这种观察者模式该怎么去做?我们可能会想到JDK内置的java.util.Observer,或者自己写代码,其实Google提供的guava工具包也有类似的实现,这就是EventBus,wiki地址为https://githu...

2020-08-07 00:15:07 331

原创 Java Builder和静态工厂方法用法总结(Effective java)

我们在创建类的时候正常的就是定义几个属性,然后提供get,set方法,再加几个构造函数,如果对象的构造函数有多个,可能在实例化的时候会出问题,代码也不够优雅,这是我们通常会用lombok的注解,比如@Builder,@Data,@NoArgsConstructor,@AllArgsConstructor等等,如果我们不用注解的话,也可以自己写,下面的写法也是Effective java书中的推荐的写法,希望在以后写代码的过程中多借鉴这种优雅的写法和思路,示例如下public clas...

2020-08-06 00:02:03 468

原创 排序算法之归并排序

1. 概念归并排序是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。归并排序是一种稳定的排序方法。归并排序的核心思想是排序一个数组,我们先把数组从中间分成前后两部分,然后对前后两部分分别排序,再将排好序的两部分合并在一起,就是分而治之思想,分治算法一般都是用递归来实现的。2.原理​​​1. 把长度为n的输入序列分成两个长度为n/2的子序列; 2. 对这两个子序列分别采用归并排序;重点在于递归函数 3. 将两个排序好的子序列

2020-07-29 22:43:48 249

原创 排序算法之选择排序

1. 概念选择排序(Selection-sort)是一种简单直观的排序算法,实现思路有点类似插入排序,也分已排序区间和未排序区间。在未排序序列中找到最小元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。它是最稳定的排序算法之一,因为无论什么数据进去都是O(n2)的时间复杂度,所以用到它的时候,数据规模越小越好。唯一的好处可能就是不占用额外的内存空间了吧。2.原理1.无序区为数组[1..n],有序区为空; 2.

2020-07-29 22:20:11 148

原创 RPC接口调用容灾组件笔记

1. 背景概述 随着移动互联网的兴起,微服务架构的流行,现在很多大的系统会根据业务功能等因素划分成一个一个的微服务,那么在我们的应用中就会有很多rpc接口调用,为了高可用,一般都是双机房部署,当某个机房挂掉的时候可以去调用另外一个机房的服务进行重试,当A机房服务a比如连续N次不可用,或者1分钟内M次不可用,则把这个A机房的这个服务a标记1分钟内不可用,1分钟后再去探活,探活频率可以为1分钟内3次可用则标记该服务可用,这种RPC跨机房重试按理都应该在rpc框架去做,但是如果rpc某个版本没有提供...

2020-07-26 10:18:44 322

原创 排序算法之插入排序

1. 概念简单来讲就是将数组中的数据分为两个区间,已排序区间和未排序区间。初始已排序区间只有一个元素,就是数组的第一个元素。插入算法的核心思想是取未排序区间中的元素,在已排序区间中找到合适的插入位置将其插入,并保证已排序区间数据一直有序。重复这个过程,直到未排序区间中元素为空,算法结束。2.原理从第一个元素开始,该元素可以认为已经被排序; 取出下一个元素,在已经排序的元素序列中从后向前扫描(每次取下个元素当成基准参数和之前的数字进行挨个比较); 如果该元素(已排序)大于新元素,将该元素移到下

2020-07-24 00:26:32 145

原创 排序算法之冒泡排序

1. 概念冒泡排序是一种简单的排序算法。只会操作相邻的两个数据。每次冒泡操作都会对相邻的两个元素进行比较,看是否满足大小关系要求。如果不满足就让它俩互换。一次冒泡会让至少一个元素移动到它应该在的位置,重复n次,就完成了n个数据的排序工作。2.原理1.比较相邻的元素。如果第一个比第二个大,就交换它们两个;2.对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对,这样在最后的元素应该会是最大的数;3.针对所有的元素重复以上的步骤,除了最后一个;4. 重复步骤1~3,直到排序完成(需要注意

2020-07-24 00:16:17 193

原创 JSON序列化小计

项目中经常需要对象转成json字符串,json串转对象,一般经常用fastjson,gson,以及springboot默认支持的jackson,由于fastjson爆出漏洞太频繁,新项目一般建议用gson或jackson,也可以用protostuff来做,protostuff的性能比较好,具体benchmark可以参考https://github.com/eishay/jvm-serializers/wiki,如果想提供多种工具类可以定义统一的接口采用SPI的机制,通过SPI可以对外提供多种选...

2020-07-16 23:39:47 150

原创 享元模式在程序中的应用

享元模式的概念:如果在一个系统中存在多个相同的对象,那么只需要共享一份对象的拷贝,而不必为每一次使用都创建新的对象。说白了就是减少创建对象的数量,以减少内存占用和从而提高系统性能。我举个简单的场景,我们根据异常code码定义了几个异常,程序在处理过程中抛出这些异常,正常来讲,我们通过new一个RuntimeException就好了,但是如果程序的调用量比较大的时候频繁的new一些临时对象,会引起GC,影响系统稳定,我们可以考虑把这几个对象缓存起来,这样就可以不用频繁创建对象,其实这就是一种池技...

2020-07-15 00:01:06 211

转载 京东毫秒级热key探测框架设计与实践,已完美支撑618大促(转载)

在拥有大量并发用户的系统中,热key一直以来都是一个不可避免的问题。或许是突然某些商品成了爆款,或许是海量用户突然涌入某个店铺,或许是秒杀时瞬间大量开启的爬虫用户, 这些突发的无法预先感知的热key都是系统潜在的巨大风险。风险是什么呢?主要是数据层,其次是服务层。热key对数据层的冲击显而易见,譬如数据存放在redis或者MySQL中,以redis为例,那个未知的热数据会按照hash规则被存在于某个redis分片上,平时使用时都从该分片获取它的数据。由于redis性能还不错,再加上集群模式,每秒我们

2020-07-02 23:52:23 348

原创 java异步任务执行ListenableFuture

1.业务场景 在实际应用中 我们在优化一个方法的性能时通常会考虑使用多线程,比如网站单品页会后台调用诸如商品,库存,优惠券,促销,风控等特别多的接口,如果都串行调用接口会很慢(相当于各个rpc的执行时间),为了提高方法的性能,我们会用并行去调用各个RPC接口,有的接口会有依赖关系,既调用A接口,拿到结果再去调用B接口,如果我们想调用完一个RPC接口后直接去调用另外一个接口,或者调用完一个RPC接口后增加个回调函数做其它动作该怎么去处理 2.方案分析 Fu...

2020-06-21 18:28:07 1844

转载 HTTP Server : 一个差生的逆袭(转码农翻身)

我刚毕业那会儿,国家还是包分配工作的,我的死党张大胖被分配到了一个叫数据库的大城市,天天都可以坐在高端大气上档次的机房里,在那里专门执行SQL查询优化,工作稳定又舒适。隔壁宿舍的小白被送到了编译器镇,在那里专门把C源文件编译成EXE程序,虽然累,但是技术含量非常高,工资高,假期多。我成绩不太好,典型的差生,四级补考了两次才过,被发配到了一个不知道什么名字的村庄,据说要处理什么HTTP请求,这个村庄其实就是一个破旧的电脑,令我欣慰的是可以上网,时不时能和死党们通个信什么的。不过辅导员说了,我们都有...

2020-05-29 22:56:57 212

原创 JVM优化分析笔记

1.前言我们的Java应用一般会配置JVM参数,比如GC策略,Java堆大小等等,当系统遇到问题是,我们可以通过jmap查看堆内对象示例的统计信息,通过jstack命令可以继续查看该线程当前的堆栈状态,通过jstat命令可以查看堆内存各部分的使用量,以及加载类的数量等各种指标,通过JVisualVM来查库JVM的运行信息包括线程和内存使用情况,还可以设置参数打印GC日志,-XX:+PrintGCDetails -XX:+PrintGCTimeStamps -Xloggc:/export/Logs/...

2020-05-27 00:40:35 210

原创 ElasticSearch知识点总结

先举个场景,假如ES有10个分片,我们根据某个关键字查询数据,且按照时间排序,当查询第9页的数据,每页100条数据,当客户端发起这个操作,ES的处理流程是怎么样的?(带着问题去思考) 1. from+size分页方式 查询过程大体上分为查询和取回这两个阶段,广播查询请求到所有相关分片,并将它们的响应整合成全局排序后的结果集合,这个结果集合会返回给客户( 具体参考https://www.elastic.co/guide/en/elasticsearch/referen...

2020-05-14 23:34:50 459

转载 HashMap在JDK8前后的区别

背景 目前,部门的很多JAVA项目使用的还是JDK7,其实JDK8的升级进行了很多优化,而且目前最新的JDK版本已经已经到了JDK12,版本帝真的很可怕。其实也不用很慌,因为从JDK9开始就是每半年发布一个版本,2019年JDK就会到JDK13,更多的关注重大功能变更就好了。但是对于HashMap来说,JDK8的优化还是有可以看一下源码的意义的,本文的目的就是针对于这个优化画一下重点。JDK7的HashMap原理 在JDK7中,HashMap的实现方式是数组+链表。...

2020-05-14 18:58:53 609

空空如也

空空如也

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

TA关注的人

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