羊羽'Blog

一头扎进代码的汪洋大海...

浅析Java类隔离规避依赖冲突的实现原理

本文转载自笔者发表于【得物技术】微信公众号的同名文章(这里) 导语 随着业务规模增长、业务逻辑演进,项目工程的依赖树(二方依赖、三方依赖)变得愈发复杂。随之而来的便是【依赖冲突】问题。 当几个软件包对相同的共享包或库有依赖性,但它们依赖于不同的、不兼容的共享包版本时,就会出现依赖性问题。如果共享包或库只能安装一个版本,用户可能需要通过获得较新或较旧版本的依赖包来解决这个问题...

浅析JVM invokedynamic指令和Java Lambda语法

本文转载自笔者发表于【得物技术】微信公众号的同名文章(这里) 1. 导语 尽管近年来JDK的版本发布愈发敏捷,当前最新版本号已经20+,但是日常使用中,JDK8还是占据了统治地位。 你发任你发,我用Java8:【Jetbrains】2023 开发者生态系统现状 JDK8如此旺盛的生命力,与其优异的兼容性、稳定性和足够日常开发使用的语言特性有极大的关系,这其中最引人...

代码整洁之道-Spring声明式异步

导语 尽管JDK1.4版本(2002年)就提供了NIO机制用于进行非阻塞的网络读写,但是由于历史惯性或者屏蔽复杂度、降低使用心智,业务迭代过程中重度依赖的核心网络资源如JDBC、Redis、RPC都是以BIO的形式透出API。 因此,各个微服务为提升事务吞吐、降低事务延迟,都不约而同的在项目中维护了大量线程池进行精细化的异步调度。 典型代码 @Component public c...

非标类型导致Dubbo接口出入参异常的本质

本文转载自笔者发表于【得物技术】微信公众号的同名文章(这里) 概述 笔者支持过程中多次发现诡异的Dubbo接口异常问题,抓耳挠腮最后定位到代码上和代码外的原因,事后只感觉脑瓜子嗡嗡的。考虑到这不是第一次,也绝不会是最后一次出现类似问题,下面笔者将尽可能详细的梳理、总结一下该问题的现象和本质。 问题是什么? 在DubboRPC+Protostuff序列化场景下,如果DTO中的字...

JVM STW 和 Dubbo 线程池耗尽的相关性

本文转载自笔者发表于【得物技术】微信公众号的同名文章(这里) 1. 背景 在日常的技术支持过程中,经常会遇到如下玄学问题的咨询: 从监控上看,进程资源占用正常。 从监控上看,服务流量平稳,没有流量突增。 从监控上看,线程池状态正常,没有瓶颈。 但是,在上述条件下,上游调用方还是时不时反馈偶现 Thread pool is EXHAUSTED! 接下来笔者来把这...

HTTP请求偶现ConnectionClosedException

现象 基于HTTP协议进行C/S通讯的业务上线后,偶现如下异常,频率大概在两三天一两次: org.apache.http.ConnectionClosedException: Connection is closed 异常提示http请求时,复用的底层tcp连接已经被断开。 排查 要解释这个现象、修复这个问题,需要对齐的上下文很长,笔者尽力一点一点的梳理清楚。 网络通讯技术选型 ...

高效切换JDK版本的技巧和原理

背景 Java语言平台的演进一贯十分重视兼容性,这点从Java泛型特性的实现就可见一斑:为了保证陈年老代码也可以运行在支持泛型的JVM平台上,权衡、取舍过后,泛型的设计者们最终选择在编译期来实现类型泛化能力,虽然说这种实现在某些场景下的理解成本、使用成本很高,但是在jdk1.1环境写的业务代码在jdk1.7环境上啥也不改就可以正常跑,你就说兼容性好不好吧? 但是在云原生思想大行其道的今...

展开讲讲之数字和数字编解码

概述 如果我们要实现一个编解码库,或者通俗的说叫序列化库,用来将内存上的原始数据(对象、结构体等数据实体)编码为便于存储、传输的二进制,首先我们需要分析常见的编程数据实体的构成。 省去具体分析,我们可以知道,编程时的所有数据实体抽象来看,其实都是由如下几种原子类型来编排、组合形成的。 数字类型:分为整数、小数 字符串类型:顾名思义 布尔类型:没有物理上的值,只需要逻辑...

展开讲讲之Unicode字符集和UTF编码

Unicode 为实现跨平台信息交换、展示设计的统一编码,目的是为世界上所有的字符分配一个唯一的数字编号。 编号有个别名叫【码点】,也就是说码点就是一个数字。 编号的空间或者说容量有17*65536(111.4万),可以容纳一百万个字符。 整个空间按种类、使用频率分为17组,每组2^16个字符(65536) 常用的、稳定的字符都放在了0号平面(BMP),编码为0-65535(两...

分布式任务调度核心原理

有一天,老板找到小明说:“公司都没有一个趁手的分布式任务调度系统,准备自研一个。组织经过慎重考察,决定把这个艰巨但光荣的任务交给你。你抓紧调研下,出个技术方案,尽快落地。要快~” 小明很懵,大大的眼睛盯着老板说:“我就是个curd boy,没做过,我不会呀” 老板说:“我会吗?美国佬会,苏联老大哥也会,可是他们不会白白的送给你!” 于是小明开始吭哧吭哧卷起来了。。。 ...