於群峰之上,更覺長風浩蕩

分布式与云原生

在这个充满挑战和机遇的数字化时代,分布式系统和云原生技术正在重塑我们的思考方式和工作方式。在本系列文章《分布式与云原生》中,我将深度分享我在这个领域的探索历程和所获得的洞见。我将探讨从分布式服务和微服务架构,到海量数据的处理,以及如何利用云原生的方式来面对日益复杂化的需求。
同时揭示核心技术的内在逻辑,分享具体的实施案例,解析问题背后的原因,以及我是如何解决这些问题的。通过对众多工具和平台的比较研究,包括但不限于Twitter的Manhattan数据库、Kubernetes、Docker、Kafka、RocketMQ等,希望与读者一同探索这些技术背后的秘密。

探索JDK原理

本系列文章《探索JDK原理》详细记录了我在深入探索Java Development Kit (JDK)源码过程中遇到的一系列问题和挑战。这些问题涵盖了各个领域,包括但不限于"Java并发编程"以及"Java虚拟机(JVM)原理"等方面。从"第一期:JDK源码编译与版本控制"开始,我将以分期的方式,系统地记录我的学习历程和思考过程。

混淆技术

混淆是一种通过修改程序的源代码或二进制代码,在保障程序的功能不变的基础上,使得代码难以阅读和理解的技术。在Java中,混淆通常用于防止对源代码的逆向工程,从而保护知识产权和商业秘密。
常见的混淆手段包括但不局限于:更改类或方法和变量的名称、删除源代码中的注释和空白符、更改程序的结构、加密常量和字符串。在本章中我将以Minecraft、安卓开发作为经典的混淆案例来介绍它。

synchronized锁升级

synchronized是一种用于修饰同步代码块或方法的关键字。当一个线程进入被synchronized修饰的代码块或方法时,会先尝试获取括号中对象(对于同步方法则是当前类的实例)的对象锁。在JDK 1.6及之后的版本,synchronized锁具有锁升级的机制,分为偏向锁、轻量级锁和重量级锁。
synchronized的存在为绝大多数并发编程提供了便捷的解决方案。它将我们从繁琐复杂的线程管理工作中解脱出来,使我们能够专注于程序的核心功能。然而,尽管synchronized在日常使用中简单方便,但它的内部实现及其升级过程却蕴藏着极大的复杂性和精妙之处。在这本期文章中,以JDK17u为例,我将详细记录对synchronized底层机制及其锁升级过程的探究和学习过程。

为什么要求开发者对Logger再封装

在《嵩山版阿里Java开发手册》的日志规约中第一条明确规定了:应用中不可直接使用日志系统(Log4j、Logback)中的 API,而应依赖使用日志框架 (SLF4J、JCL--Jakarta Commons Logging)中的 API,使用门面模式的日志框架开发。
Apache曾道:“在没有错误日志的情况下对任何问题进行故障排除无异于闭眼开车”,可见日志的重要性。在日常开发过程中,打印日志是必不可少的操作步骤,因为日志关乎于应用的问题排查、应用监控等。现如今的应用开发中日志打印一般都是SLF4J来实现的,使用日志门面模式,不仅有助于打印方式统一,也使得后面更换日志框架更加方便。

如何在Java项目中与C++混合开发

如果读者是Java领域的开发人员,在研究Java底层逻辑的时候一定离不开源码分析。以研究CAS为例,其底层实现来自Unsafe类中的public final native boolean compareAndSetInt方法,这里使用native显然是因为Java层面已经满足不了来自开发者需要操作计算机底层的需求了。而这种使用native本地方法来间接调用计算机底层实现的过程被称为JNI技术(Java Native Interface,Java本地接口)。
通常这些JNI本地接口由C/C++语言来实现,在本期文章中,我将以“Windows环境下多核CPU的核心使用率检测”为主要功能来介绍我在为Spring开发CPU监控仪表盘功能的经历,帮助大家更好地理解JNI技术以及JNI技术的一些适用场景。

Liquid Formatter AntV嵌入能力

AntV X6 是基于 HTML 和 SVG 的图编辑引擎,提供低成本的定制能力和开箱即用的内置扩展,方便开发者快速搭建 DAG 图、ER 图、流程图、血缘图等应用。AntV G2 是一套简洁的渐进式可视化语法,可用于报表搭建、数据探索以及可视化叙事。这两款都是由阿里巴巴研发的AntV系列的标准版基础产品,使用Halo Liquid Formatter可以使博客具备这两个功能的嵌入能力。
Halo Liquid Formatter是基于Halo 2.x进行开发的多模态内容嵌入插件,使用Java、Kotlin、C++、Javascript等语言进行开发。该插件旨在为更多的博客用户群体带来更多文章内容的强化功能,其中AntV X6与AntV G2的演示读者可以进入文章详细查看。

volatile与内存屏障

在Java中,volatile用于标记变量,而内存屏障又是volatile的底层实现。它们是Java中最基础也是最简单的两个概念,它们的出现使得开发者在多线程环境下能够保证更好的数据一致性和程序执行的正确性。volatile简单、轻量,相比于其他方式,如synchronized或直接加锁,有着更好的性能。能让开发者少些对锁的忧虑,多一些对实际问题的关注。
volatile和内存屏障为开发者提供了处理并发问题的有效手段,帮助开发者在面对复杂的多线程环境时,能更好地编写正确和高效的代码。在接下来的部分,我将基于JDK17u的源码来记录我对于volatile和内存屏障的学习过程。