- 博客(25)
- 收藏
- 关注
原创 Java 多线程中使用 JDK 自带工具类实现计数器
前言在实际开发过程中,经常遇到需要多线程并行的业务,最后需要进行将各个线程完成的任务进行汇总,但主线程一般会早于子线程结束,如果要想等各个子线程完成后再继续运行主线程,这时就需要对各个线程是否执行完成进行标识,JDK 并发包中就给开发者提供了几个不错的使用工具类。接下来将通过 Thread#join 方法以及 CountDownLatch、CyclicBarrier 类进行上面案例方案的分析。Thread#join 方法使用 join() 方法的子线程对象正常执行 run() 中代码,但当前线程会.
2020-09-07 09:38:47
384
原创 Java 线程通信之 wait/notify 机制
前言Java 线程通信是将多个独立的线程个体进行关联处理,使得线程与线程之间能进行相互通信。比如线程 A 修改了对象的值,然后通知给线程 B,使线程 B 能够知道线程 A 修改的值,这就是线程通信。wait/notify 机制一个线程调用 Object 的 wait() 方法,使其线程被阻塞;另一线程调用 Object 的 notify()/notifyAll() 方法,wait() 阻塞的线程继续执行。wai/notify 方法方法说明wait()当前线程被阻塞,线程进入 W.
2020-09-07 09:38:05
224
原创 Dubbo 负载均衡的实现
前言负载均衡是指在集群中,将多个数据请求分散在不同单元上进行执行,主要为了提高系统容错能力和加强系统对数据的处理能力。在 Dubbo 中,一次服务的调用就是对所有实体域 Invoker 的一次筛选过滤,最终选定具体调用的 Invoker。首先在 Directory 中获取全部 Invoker 列表,通过路由筛选出符合规则的 Invoker,最后再经过负载均衡选出具体的 Invoker。所以 Dubbo 负载均衡机制是决定一次服务调用使用哪个提供者的服务。整体结构Dubbo 负载均衡的分析入口是.
2020-05-10 10:33:47
368
原创 Java 线程基础,从这篇开始
线程作为操作系统中最少调度单位,在当前系统的运行环境中,一般都拥有多核处理器,为了更好的充分利用 CPU,掌握其正确使用方式,能更高效的使程序运行。同时,在 Java 面试中,也是极其重要的一个模块。线程简介一个独立运行的程序是一个进程,一个进程中可以包含一个或多个线程,每个线程都有属于自己的一些属性,如堆栈,计数器等等。同时,一个线程在一个时间点上只能运行在一个 CPU 处理器核心上,...
2020-04-21 09:02:58
222
原创 Dubbo 路由机制的实现
Dubbo 路由机制是在服务间的调用时,通过将服务提供者按照设定的路由规则来决定调用哪一个具体的服务。路由服务结构Dubbo 实现路由都是通过实现 RouterFactory 接口。当前版本 dubbo-2.7.5 实现该接口类如下:路由实现工厂类是在 router 包下由于 RouterFactory 是 SPI 接口,同时在获取路由 RouterFactory#getRouter...
2020-04-15 13:44:49
224
原创 你必须会的 JDK 动态代理和 CGLIB 动态代理
我们在阅读一些 Java 框架的源码时,基本上常会看到使用动态代理机制,它可以无感的对既有代码进行方法的增强,使得代码拥有更好的拓展性。通过从静态代理、JDK 动态代理、CGLIB 动态代理来进行本文的分析。静态代理静态代理就是在程序运行之前,代理类字节码.class就已编译好,通常一个静态代理类也只代理一个目标类,代理类和目标类都实现相同的接口。接下来就先通过 demo 进行分析什么是...
2020-04-06 15:38:34
361
原创 Dubbo 扩展点加载机制:从 Java SPI 到 Dubbo SPI
SPI 全称为 Service Provider Interface,是一种服务发现机制。当程序运行调用接口时,会根据配置文件或默认规则信息加载对应的实...
2020-03-23 07:28:00
207
原创 volatile 手摸手带你解析
前言volatile 是 Java 里的一个重要的指令,它是由 Java 虚拟机里提供的一个轻量级的同步机制。一个共享变量声明为 volatile 后,...
2020-03-16 07:26:00
266
原创 Dubbo之服务消费原理
前言上篇文章《Dubbo之服务暴露》分析 Dubbo 服务是如何暴露的,本文接着分析 Dubbo 服务的消费流程。主要从以下几个方面进行分析:注册中心的暴露;通过注册中心进行服务消费通知...
2020-03-09 07:28:00
333
原创 Dubbo之服务暴露
前言本文 Dubbo 使用版本 2.7.5Dubbo 通过使用 dubbo:service配置或 @service在解析完配置后进行服务暴露,供服务消费者消费。Dubbo 的服务暴露有两...
2020-03-02 07:26:00
506
原创 ElasticSearch之映射常用操作
本文案例操作,建议先阅读我之前的文章《ElasticSearch之安装及基本操作API》Mapping (映射)类似关系型数据库中的表的结构定义。我们将数据以 JSON 格式存入到 El...
2020-01-16 07:28:00
232
原创 Redis5新特性Streams作消息队列
前言Redis 5 新特性中,Streams 数据结构的引入,可以说它是在本次迭代中最大特性。它使本次 5.x 版本迭代中,Redis 作为消息队列使用时,得到更完善,更强大的原生支持,...
2020-01-07 07:30:00
267
原创 Netty之缓冲区ByteBuf解读(二)
上篇介绍了 ByteBuf 的简单读写操作以及读写指针的基本介绍,本文继续对 ByteBuf 的基本操作进行解读。读写指针回滚这里的 demo 例子还是使用上节《Netty之缓冲区Byt...
2020-01-01 07:50:00
346
原创 Netty之缓冲区ByteBuf解读(一)
Netty 在数据传输过程中,会使用缓冲区设计来提高传输效率。虽然,Java 在 NIO 编程中已提供 ByteBuffer 类进行使用,但是在使用过程中,其编码方式相对来说不太友好,也...
2019-12-23 07:55:00
486
原创 ElasticSearch之安装及基本操作API
ElasticSearch 是目前非常流行的搜索引擎,对海量数据搜索是非常友好,并且在高并发场景下,也能发挥出稳定,快速特点。也是大数据和索搜服务的开发人员所极力追捧的中间件。虽然 El...
2019-12-15 08:12:08
155
原创 Netty中粘包/拆包处理
TCP 是基于流传输的协议,请求数据在其传输的过程中是没有界限区分,所以我们在读取请求的时候,不一定能获取到一个完整的数据包。如果一个包较大时,可能会切分成多个包进行多次传输。同时,如果存在多个小包时,可能会将其整合成一个大包进行传输。这就是 TCP 协议的粘包/拆包概念。本文基于 Netty5 进行分析粘包/拆包描述假设当前有123和abc两个数据包,那么他们传输情况示意图如下:...
2019-12-08 12:16:35
1059
原创 Scrapy爬虫及案例剖析
由于互联网的极速发展,所有现在的信息处于大量堆积的状态,我们既要向外界获取大量数据,又要在大量数据中过滤无用的数据。针对我们有益的数据需要我们进行指定抓取,从而出现了现在的爬虫技术,通过爬虫技术我们可以快速获取我们需要的数据。但是在这爬虫过程中,信息拥有方会对爬虫进行反爬处理,我们就需要对这些困难进行逐个击破。刚好前段时间做了爬虫相关的工作,这里就记录下一些相关的心得。本文案例代码地...
2019-12-05 09:07:07
1420
原创 初探Tomcat的架构设计
Tomcat 作为 servlet 容器实现,它是基于 Java 语言开发的轻量级应用服务器。因为 Tomcat 作为应用服务器,它有着完全开源,轻量,性能稳定,部署成本低等优点,所以它成为目前 Java 开发应用部署的首选,几乎每个Java Web开发者都有使用过,但是,你对 Tomcat 的整体设计有进行过了解和思考吗?本文将基于 Tomcat8 进行分析,具体版本为 Tomcat...
2019-11-25 20:23:35
971
原创 WebSocket实现Web端即时通信
前言WebSocket 是HTML5开始提供的一种在浏览器和服务器间进行全双工通信的协议。目前很多没有使用WebSocket进行客户端服务端实时通信的web应用,大多使用设置规则时间的轮询,或者使用长轮询较多来处理消息的实时推送。这样势必会较大程度浪费服务器和带宽资源,而我们现在要讲的WebSocket正是来解决该问题而出现,使得B/S架构的应用拥有C/S架构一样的实时通信能力。H...
2019-11-18 20:16:18
1308
原创 爱恨交织的红黑树
虐你千万遍,还要待她如初恋的红黑树,是否对她既欢喜又畏惧。别担心,通过本文讲解,希望你能有前所未有的感动。红黑树也是二叉查找树,但比普通的二叉查找树多一些特性条件限制,每个结点上都存储有红色或黑色的标记。因为是二叉查找树,所以他拥有二叉查找树的所有特性。红黑树是一种自平衡二叉查找树,在极端数据条件插入时(正序或倒叙)不会退化成类链状数据,可以更高效的在O(log(n))时间内完成查找,插入,...
2019-11-13 12:59:44
937
原创 二叉查找树的解读和实现
二叉查找树是将一组无序的数据构建成一颗有序数据的树,其设计思想与二分法类似。很好的提高了海量数据查找效率,使得由从头遍历到尾的方式转为二分查找的方式,时间复杂度从O(n)降低为O(log(n))。概念结点:树上的每个元素。根结点:没有父结点的结点。父结点:结点的上一级结点。子结点:结点的下一级结点。叶子结点:没有子结点的结点。兄弟结点:拥有同一父结点的相邻结点。结点的度...
2019-11-03 23:15:26
1023
原创 基于Docker实现MySQL主从复制
前言MySQL的主从复制是实现应用的高性能,高可用的基础。对于数据库读操作较密集的应用,通过使数据库请求负载均衡分配到不同MySQL服务器,可有效减轻数据库压力。当遇到MySQL单点故障中,也能在短时间内实现故障切换。本文就MySQL的内建的复制功能进行阐述。版本MySQl: 5.7.17CentOS: 7.4.1708Docker: 1.13.1概述MySQL复制...
2019-11-02 06:57:42
339
原创 Java诊断利器Arthas优雅排查生产环境
前言Arthas 是Alibaba开源的Java诊断工具。在线排查问题,无需重启;动态跟踪Java代码;实时监控JVM状态。对分秒必争的线上异常,Arthas可帮助我们快速诊断相关问题。下载安装下载Arthas的arthas-boot.jarwget https://alibaba.github.io/arthas/arthas-boot.jar下载arthas之后,先来了解...
2019-11-01 19:44:19
1656
原创 MyBatis启动之XMLConfigBuilder解析配置文件(二)
前言XMLConfigBuilder 是BaseBuilder(解析中会涉及到讲解)的其中一个子类,它的作用是把MyBatis的XML及相关配置解析出来,然后保存到Configuration中。本文就解析过程按照执行顺序进行分析,掌握常用配置的解析原理。使用调用XMLConfigBuilder进行解析,要进行两步操作,上篇文章中【MyBatis之启动分析(一)】有提到。实例化...
2019-11-01 13:08:07
604
原创 MyBatis之启动分析(一)
前言MyBatis 作为目前最常用的持久层框架之一,分析其源码,对我们的使用过程中可更好的运用它。本系列基于mybatis-3.4.6进行分析。MyBatis 的初始化工作就是解析主配置文件,映射配置文件以及注解信息。然后保存在org.apache.ibatis.session.Configuration,供后期执行数据请求的相关调用。Configuration 里有大量配置信息,在后面每涉及...
2019-10-28 23:59:55
395
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人