三叶草的星空

我们生活在阴沟里,但有人依然仰望星空。

Spring Native&Quarkus对比分析

Spring Native 是 Spring 团队为了更好地适应云原生环境(如 Kubernetes)而推出的新项目。相比之下,Quarkus 较新,但它在设计上就考虑了现代云原生和微服务架构,因此在某些方面可能更具创新性。

概述 Quarkus首页放出的标语:超音速亚原子的Java(Supersonic Subatomic Java),它是为OpenJDK HotSpot和GraalVM量身定制的Kubernetes Native Java框架,基于同类最佳的 Java 库和标准制作而成。 Quarkus的到来为开发Linux容器和 kubernetes 原生Java微服务带来了一个创新平台。 Spring B......

Bean属性拷贝性能分析

在 Java 系统工程开发过程中,都会有各个层之间的对象转换,比如 VO、DTO、PO、VO等,如果都是手动get、set又太浪费时间,还可能操作错误,所以选择一个转换工具会更加方便。

前言 在 Java 系统工程开发过程中,都会有各个层之间的对象转换,比如 VO、DTO、PO、VO等。 如果都是手动get、set又太浪费时间,还可能操作错误,所以选择一个转换工具会更加方便。 整理出常见属性转换工具如下 类型 实现原理 说明 getSetBeanCopy 原始赋值 基于get、set方法进行属性转换 fastJsonBeanCopy json序列化反序......

certbot申请泛域名证书

本文重点介绍怎么使用certbot申请免费的泛域名证书,并实现自动续期,从而达到永久免费。

前言 certbot-auto申请证书时发现如下提示:certbot-auto被弃用了1234Skipping bootstrap because certbot-auto is deprecated on this system.Your system is not supported by certbot-auto anymore.Certbot cannot be installed.......

apisix入门指南

本文将为你介绍 Apache APISIX 的概念、功能以及如何使用 APISIX。

Apache APISIX 是什么? Apache APISIX是 Apache 软件基金会下的云原生 API 网关,它兼具动态、实时、高性能等特点,提供了负载均衡、动态上游、灰度发布(金丝雀发布)、服务熔断、身份认证、可观测性等丰富的流量管理功能。 我们可以使用Apache APISIX来处理传统的南北向流量,也可以处理服务间的东西向流量。同时,它也支持作为 K8s Ingress Con......

Java自旋锁、CLH锁及MCS锁原理及实现

自旋锁是指当一个线程尝试获取某个锁时,如果该锁已被其他线程占用,就一直循环检测锁是否被释放,而不是进入线程挂起或睡眠状态。

背景SMP(Symmetric Multi-Processor) 对称多处理器结构,它是相对非对称多处理技术而言的、应用十分广泛的并行技术。 操作系统将任务队列对称地分布于多个CPU之上,从而极大地提高了整个系统的数据处理能力。 但是随着CPU数量的增加,每个CPU都要访问相同的内存资源,共享资源可能会成为系统瓶颈,导致CPU资源浪费。 NUMA(Non-Uniform Memory A......

Java并发容器及使用场景

针对多线程并发设计,使用了锁分段技术,只对操作的位置进行同步操作,减小锁的粒度,从而提高吞吐量。

背景 Java集合容器,主要有四大类别:List Set Queue Map,常见的ArrayList HashMap这些都不是线程安全的 同步容器:简单理解为通过synchronized来实现同步的容器,比如Vector、Hashtable以及SynchronizedList等容器 同步容器由于共同竞争容器级别的锁,虽然解决了线程安全问题,但是整体吞吐量降低 并发容器设计思路 针对多线程......

AQS原理及实战

AQS是一种提供了原子式管理同步状态、阻塞和唤醒线程功能以及CLH队列模型的简单框架。

概要 Java中的大部分同步类(Lock、Semaphore、ReentrantLock等)都是基于AbstractQueuedSynchronizer(简称为AQS)实现的。 AQS是一种提供了原子式管理同步状态、阻塞和唤醒线程功能以及CLH队列模型的简单框架。 AQS同时提供了互斥模式(exclusive)和共享模式(shared)两种不同的同步逻辑。 基于AQS同步器实现参考: Ree......

LockSupport实战

LockSupport类可以阻塞当前线程以及唤醒指定被阻塞的线程

概要 LockSupport类可以阻塞当前线程以及唤醒指定被阻塞的线程。 主要是通过park()和unpark(thread)方法来实现阻塞和唤醒线程的操作的。 原理 每个线程都有一个许可(permit),permit只有两个值1和0,默认是0。 当调用unpark(thread)方法,就会将thread线程的许可permit设置成1(注意多次调用unpark方法,不会累加,permit值......

高性能队列-Disruptor

Disruptor是英国外汇交易公司LMAX开发的一个高性能队列,研发的初衷是解决内存队列的延迟问题。

概述Disruptor是英国外汇交易公司LMAX开发的一个低延迟高性能无锁的有界循环数组。基于Disruptor开发的系统单线程能支撑每秒600万订单,目前已经开源的并发框架,Log4j2底层使用的并发框架。 Java内置队列 队列 有界性 锁 数据结构 ArrayBlockingQueue bounded 加锁 arraylist LinkedBlockingQueue ......

docker网络基础

介绍docker网络模式及使用场景

概览 docker安装时便会为我们创建三种网络模式:host、none、bridge 查看docker网络:1$> docker network ls 网络介绍host网络 容器创建时通过--network=host指定使用宿主机网络,此时容器与宿主机共享网络栈,容器内的网络配置和宿主机完全一样。 none网络 容器创建时通过--network=none指定容器不创建任何网卡,此......