Mockito 学习笔记

2 月 8 日
阅读 14 分钟
624
1 关于 Mockito1.1 简介Mockito 是一个 java mock 框架,主要用于代码的 mock 测试。在真实的开发环境里,Mockito 可以阻断依赖链条,达到只测试某个方法内代码的目的。 {代码...} Mockito 除了服务端代码的 mock,还可以 mock 安卓代码。本文只考虑 java 服务端开发部分,暂不涉及安卓开发。1.2 Mockito 版本Mockito 到...

追踪解析 Netty IntObjectHashMap 源码

2022-12-26
阅读 8 分钟
1.5k
IntObjectHashMap 是 netty 封装的,key 必须是 int 的 HashMap 容器。在 netty 4 中,该类位于 netty-all 包下的 io.netty.util.collection 路径下;在 netty 5 中,该类位于 netty5-common 包下的 io.netty5.util.collection 路径下。本文使用 netty 5 进行源码跟踪。值得注意的是,截止到 2022 年 12 月,netty 5 还...

Jdk8 新日期工具类 Api 学习笔记

2022-07-14
阅读 24 分钟
1.4k
Jdk8 新日期工具类 Api 学习笔记零 版本Azul Jdk 17.0.2一 ZoneZoneId 代表时区,ZoneOffset 代表时区偏移量。ZoneOffset 是 ZoneId 的子类。 {代码...} 二 PeriodPeriod 是代表年月日级别的时间区间。 {代码...} 三 DurationDuration 是代表一段时间的对象。 {代码...} 四 LocalDateLocalDate 代表日期。 {代码...} 五 ...

阿里 TransmittableThreadLocal 源码简读

2022-06-08
阅读 16 分钟
3.5k
当开发人员需要在线程池的线程中传递某些参数的时候,jdk 的 ThreadLocal 很难实现,静态变量则会面临不够灵活和出现线程安全等问题。TransmittableThreadLocal 是阿里开源工具包,用于解决这一问题。

Lucene 中的 VInt

2022-05-29
阅读 4 分钟
1.9k
Lucene 的 Index 设计基本依赖磁盘存储,而倒排索引是依赖大量冗余数据来完成分词搜索的技术,所以 Lucene 在设计的时候用了很多时间换空间的数据压缩技术,以此保障能在最少的磁盘资源来储存最多的数据。VInt 就是其中一个很有意思的结构设计。

Spring 之 BeanUtils.copyProperties(...) 源码简读

2021-06-10
阅读 4 分钟
4.1k
copyProperties(...) 在 org.springframework.beans.BeanUtils 下,在正常应用中,开发者如果需要转换 bean,通常使用到的方法是:

追踪解析 jdk Proxy 源码

2021-02-20
阅读 11 分钟
2k
零 前期准备0 FBI WARNING文章异常啰嗦且绕弯。1 版本JDK 版本 : AdoptOpenJDK 15IDE : idea 2020.32 jdk 代理简介 {代码...} 一 Demo被代理的接口: {代码...} Demo 类: {代码...} 二 Proxy1 newProxyInstance {代码...} 三 ClassLoaderValueClassLoaderValue 是 jdk9 中新增的工具,所以在 jdk8 里 proxyCache 是一个...

GC 时间过长的问题处理思考

2021-01-14
阅读 2 分钟
3.4k
零 前述本文以 G1 作为主视角来做对策分析。 {代码...} 一 从编码层面来说1 减少对象的创建频率尽量复用以前存在的对象,减少对象创建,那么就能减少 gc 的频率。方法有:单例模式享元模式静态对象枚举类对象池技术用 StringBuilder 和 IntegerCache 等方法去代替直接创建对象2 从根本上减少堆内存的使用使用其它内存方...

解析 Dubbo 的 LoadBalance 策略源码

2021-01-01
阅读 14 分钟
2.3k
零 前期准备0 FBI WARNING文章异常啰嗦且绕弯。1 版本Dubbo 版本 : dubbo 3.02 LoadBalance 简介Dubbo LoadBalance 是 Dubbo Consumer 中用于负载均衡的组件,位于 Cluster 层中。一 InterfaceLoadBalance 的组件遵循 Dubbo 的一般设计规律,接口在 dubbo-cluster 模块中: {代码...} 二 模版类 {代码...} 三 负载均衡策...

追踪解析 Dubbo 的 Spi 机制源码

2020-10-20
阅读 10 分钟
2.1k
零 前期准备0 FBI WARNING文章异常啰嗦且绕弯。1 版本JDK 版本 : Adoptopenjdk 14.0.1IDE : idea 2020.2Dubbo 版本 : dubbo 2.7.62 Spi 简介Dubbo Spi 是 Dubbo 框架扩展性的根本基础,是基于 jdk spi 的封装和扩展。3 Demo3.1 需要扩展的接口类 {代码...} 3.2 接口实现类一号实现类 : {代码...} 二号实现类 : {代码...}...

追踪解析 Netty 的 HashedWheelTimer 源码

2020-09-08
阅读 7 分钟
2.1k
零 前期准备0 FBI WARNING文章异常啰嗦且绕弯。1 版本JDK 版本 : Adoptopenjdk 14.0.1IDE : idea 2020.1Netty 版本 : netty-all 4.1.46.Final2 HashedWheelTimer 简介HashedWheelTimer 是 Netty 中实现延迟任务的工具类。3 Demo {代码...} 4 创建 HashedTWheelTimer4.1 构造器上述 demo 中创建 HashedTWheelTimer: {代...

Tomcat 源码解析之线程池

2020-06-28
阅读 11 分钟
3.7k
StandardThreadExecutor 是 Catalina 结构中的一部分,是 Tomcat 生命周期中的池化线程资源的封装。类总览:

Tomcat 学习归整

2020-02-03
阅读 14 分钟
1.6k
Tomcat 版本 独立部署的 Tomcat 版本 - 9.0.30 Spring boot 版本 - 2.2.4.RELEASE 内嵌 Tomcat-embed-core - 9.0.30 Tomcat 概念论述 Tomcat 的架构 (也叫做 Catalina),是一个精密的层级结构系统。 Server - Tomcat 实例,一个 Tomcat 进程即为一个 Server; Service - Tomcat 服务,Service 是 Tomcat 提供 Servlet 容...

Kafka 学习笔记归整

2020-01-23
阅读 10 分钟
3.4k
Kafka 的安装和配置 0 安装 略,到官网下载即可。注意 Kafka 还需要 Zookeeper 支持。 Kafka 版本 : kafka_2.13-2.4.0 Zookeeper 版本 : Zookeeper-3.5.4-beta jdk 版本 : openjdk 8 1 Kafka 配置 Kafka 的主要配置文件是 /config/server.properties。 {代码...} 2 创建 topic 上述配置中设置了自动创建 topic,但是也可...

Zookeeper 学习归整

2019-11-20
阅读 5 分钟
1k
Zookeeper 是一个分布式服务框架,是 Apache Hadoop 的一个子项目,本质上可以认为是一个文件存储系统。在目前的项目实践中,Zookeeper 的角色一般是服务的注册中心,也可能会作为分布式锁的实践方案。

Nginx 学习归整

2019-11-20
阅读 17 分钟
1.5k
Nginx 的安装和配置 安装 Nginx 是 C 语言编写的,不跨平台,不同操作系统需要下载不同的 Nginx。 Windows 到官网下载到编译好的版本即可。 Linux 下载源码之后自己编译,或者使用 wget / apt 安装官方编译好的版本。 {代码...} 如果没有特殊配置的话,Ubuntu 18.04 使用 apt 命令安装之后的配置文件在 /etc/nginx 目录...

ProtocolBuf 中 proto 文件的编写与 java 应用

2019-11-15
阅读 3 分钟
3.8k
Protocol Buf 是谷歌出品的一种序列化通讯协议,以高效和跨平台著称。同时理解起来也很晦涩,且中文文档不齐全,不同版本的协议之间兼容性较差。本文从应用的角度聊一下如何在 java 项目中使用该协议。

浅析 Thread

2019-10-25
阅读 8 分钟
1.5k
零 前期准备 0 FBI WARNING 文章异常啰嗦且绕弯。 1 版本 JDK 版本 : OpenJDK 12.0.1 IDE : idea 2019.2 2 Thread 简介 Thread 对象是 java 中线程的封装对象,用于控制线程的一切属性,也是 java 中最常用到的基础对象之一。 一 正文 1 Thread 类和成员变量 1.1 Thread 和 Runnable 在工程实践中 Thread 经常与 Runnabl...

JVM_类加载机制详解

2019-08-18
阅读 8 分钟
5.8k
BuiltinClassLoader 是 jdk9 中代替 URLClassLoader 的加载器,是 PlatformClassLoader 与 AppClassLoader 的父类。其继承了 SecureClassLoader,其核心的方法主要是 loadClassOrNull(...) 方法:

Zookeeper 客户端 Api 的基本使用

2019-05-26
阅读 13 分钟
1.8k
零 版本 JDK 版本 : OpenJDK 11.0.1 IDE : idea 2018.3 Zookeeper Server 版本 : 3.5.4-beta Zookeeper Client 版本 : 3.5.4-beta Curator 版本 : 4.2.0 一 Zookeeper Client Zookeeper Client 是 Zookeeper 的经典原生客户端。使用之前需要在 Maven 中导入依赖: {代码...} 代码: {代码...} 二 Curator Curator 是 Net...

追踪解析 Netty 的 FastThreadLocal 源码

2019-03-19
阅读 8 分钟
2.6k
零 前期准备 0 FBI WARNING 文章异常啰嗦且绕弯。 1 版本 JDK 版本 : OpenJDK 11.0.1 IDE : idea 2018.3 Netty 版本 : netty-all 4.1.34.Final 2 FastThreadLocal 简介 FastThreadLocal 是 Netty 中实现的高性能 ThreadLocal 工具,功能上和 ThreadLocal 差不多,但是性能上远高于 jdk 自带的 ThreadLocal。 3 Demo {代...

浅析微服务框架 Helidon 的使用

2019-03-15
阅读 16 分钟
3.5k
零 前期准备 0 版本 JDK 版本 : OpenJDK 11.0.1 IDE : idea 2018.3 Helidon Webserver : helidon-webserver 1.0.0 (核心依赖包) Helidon Json : helidon-media-jsonp-server 1.0.0 (json 支持包) 1 Helidon 简介 Helidon 是 Oracle 官方出品的 java 微服务框架,底层基于 Netty 驱动,大致的使用套路和 Vertx 相差不是很...

浅析 jdk11 中 HttpClient 的使用

2019-03-08
阅读 7 分钟
3.3k
java.net.http.HttpClient 是 jdk11 中正式启用的一个 http 工具类(其实早在 jdk9 的时候就已经存在了,只是处于孵化期),官方寓意为想要取代 HttpURLConnection 和 Apache HttpClient 等比较古老的开发工具。

追踪解析 FutureTask 源码

2019-02-25
阅读 7 分钟
1.5k
零 前期准备 0 FBI WARNING 文章异常啰嗦且绕弯。 1 版本 JDK 版本 : OpenJDK 11.0.1 IDE : idea 2018.3 2 ThreadLocal 简介 FutureTask 是 jdk 中默认的 Future 实现类,常与 Callable 结合进行多线程并发操作。 3 Demo {代码...} 一 FutureTask 的创建 回到 Demo 中的创建代码: {代码...} 追踪 FutureTask 的构造器:...

追踪解析 ThreadLocal 源码

2019-02-18
阅读 7 分钟
1.8k
零 前期准备 0 FBI WARNING 文章异常啰嗦且绕弯。 1 版本 JDK 版本 : OpenJDK 11.0.1 IDE : idea 2018.3 2 ThreadLocal 简介 ThreadLocal 是 java 多线程中经常使用到的缓存工具,被封装在 java.lang 包下。 3 Demo {代码...} FastThreadLocal 的源码暂不展开,将来有机会单独开一章去学习。这里先理解 ThreadLocal。 一...

追踪解析 Disruptor 源码

2019-02-14
阅读 24 分钟
4.5k
零 前期准备 0 FBI WARNING 文章异常啰嗦且绕弯。 1 版本 Disruptor 版本 : Disruptor 3.4.2 IDE : idea 2018.3 JDK 版本 : OpenJDK 11.0.1 2 Disruptor 简介 高性能线程间消息队列框架 Disruptor,是金融与游戏领域的常用开发组件之一,也是 java 日志框架和流处理框架底层的常用依赖。 3 Demo Disruptor 的 github 主...

仿造 Gson 的自制 json 解析器

2019-02-11
阅读 3 分钟
2.4k
Maven : 3.3.9 (主要用作打包工具)IDE : idea 2018.3JDK : OpenJDK 11.0.1 (OracleJDK 8 以上即可)

追踪解析 ReentrantLock 源码

2019-01-31
阅读 10 分钟
1.3k
零 前期准备 0 FBI WARNING 文章异常啰嗦且绕弯。 1 版本 JDK 版本 : OpenJDK 11.0.1 IDE : idea 2018.3 2 ReentrantLock 简介 ReentrantLock 是 jdk 中经典的高性能重用锁,作为基础组件经常能在 jdk 的其它并发框架中看到。 笔者希望能够通过这次代码阅读弄懂 AbstractQueueSynchronizer 和 ReentrantLock 的基本构造...

浅析 Unsafe 的使用

2019-01-27
阅读 9 分钟
9.9k
零 前期准备 0 版本 JDK 版本 : OpenJDK 11.0.1 IDE : idea 2018.3 1 Unsafe 简介 Unsafe 是 java 留给开发者的后门,用于直接操作系统内存且不受 jvm 管辖,实现类似 C++ 风格的操作。 Oracle 官方一般不建议开发者使用 Unsafe 类,因为正如这个类的类名一样,它并不安全,使用不当会造成内存泄露。 在平时的业务开发中...

追踪解析 ThreadPoolExecutor 源码

2019-01-22
阅读 11 分钟
1.5k
ThreadPoolExecutor 是 jdk4 中加入的工具,被封装在 jdk 自带的 Executors 框架中,是 java 中最经典的线程池技术。