随笔分类 - Java
解释器模式(Interpreter Pattern)-23种常用设计模式快速入门教程
摘要:1.解释器模式定义 解释器模式是一种行为型设计模式,它可以将一个语言的句子转换为另一个语言的句子,用于实现特定的语言应用程序。 2.解释器模式优点 它可以让我们使用不同的语言来表达不同的概念,它可以极大地简化编程任务,它可以实现语言的可扩展性和可维护性。 3.解释器模式缺点 它可能会使系统变得非常复
阅读全文
建造者模式(Builder Pattern)-23种常用设计模式快速入门教程
摘要:1.建造者模式定义 建造者模式是一种创建型设计模式,它将一个复杂的构造过程封装到一个接口,使得该接口用于复杂对象的创建,建造者模式可以使客户端不必知道产品内部组成的细节。 2.建造者模式优点 它可以使客户端不必知道产品内部组成的细节,将产品本身与产品的创建过程解耦,使得相同的创建过程可以创建不同的产
阅读全文
单例模式(Singleton Pattern)-23种常用设计模式快速入门教程
摘要:1.单例模式定义 单例模式是一种创建型设计模式,它确保某个类只有一个实例,而且自行实例化并向整个系统提供这个实例。 2.单例模式优点 它可以节省资源,提高性能,避免对资源的多重占用,提供一个全局访问点,可以全局访问一个实例。 3.单例模式缺点 当想要生成多个实例时,不能使用单例模式。 4.单例模式示
阅读全文
抽象工厂模式(Abstract Factory Pattern)-23种常用设计模式快速入门教程
摘要:1.抽象工厂模式定义 是一种创建型设计模式,它定义了一个创建对象的接口,但由子类决定要实例化的类是哪一个,工厂方法让类把实例化推迟到子类。 2.抽象工厂模式优点 在工厂方法模式中,工厂方法用来处理对象的创建,它的优点在于使用工厂方法将对象的创建和对象的使用分离。 3.抽象工厂模式缺点 类的数量增加,
阅读全文
23种常用设计模式快速入门教程
摘要:一、简介 扩展阅读 常用设计模式UML图示 常用23种设计模式Java经典实现(使用常用电商业务订单、购物车,商户,支付,优惠券为例) JavaScript版本的23种常用设计模式快速入门教程 1.设计模式定义 设计模式是一组有用的解决方案,用于解决特定类型的软件设计问题。它们通常提供了一种抽象出来
阅读全文
使用 Flink 和 Kafka 构建数据管道-Java快速进阶教程
摘要:1. 概述 Apache Flink是一个流处理框架,可以很容易地与Java一起使用。Apache Kafka是一个支持高容错的分布式流处理系统。 在本教程中,我们将了解如何使用这两种技术构建数据管道。 2. 安装 要安装和配置 Apache Kafka,请参考官方指南。安装后,我们可以使用以下命令
阅读全文
RoaringBitmap使用指南-Java快速入门教程
摘要:1. 概述 在本教程中,我们将了解RoaringBitmap。我们将使用对一组的一些基本操作作为RoaringBitmap的示例。此外,我们将在 Java 中的RoaringBitmap和BitSet之间执行性能测试。 2. RoaringBitmap简介 RoaringBitmap数据结构由于其高
阅读全文
BitSet使用指南-Java快速入门教程
摘要:1. 概述 在本教程中,我们将了解如何使用BitSets来表示位向量。 首先,我们将从不使用布尔数组背后的基本原理开始。然后在熟悉BitSet内部之后,我们将仔细研究它的API。 2. 位数组 为了存储和操作位数组,有人可能会争辩说我们应该使用布尔数组作为我们的数据结构。乍一看,这似乎是一个合理的建
阅读全文
Apache Flink with Java 简介-Java快速进阶教程
摘要:1. 概述 Apache Flink是一个大数据处理框架,允许程序员以非常高效和可扩展的方式处理大量数据。 在本文中,我们将介绍Apache FlinkJava API 中提供的一些核心 API 概念和标准数据转换。这个 API 的流畅风格使得使用 Flink 的中心结构——分布式集合变得容易。 首
阅读全文
boolean 与boolean数组内存布局-Java快速进阶教程
摘要:1. 概述 在这篇快速文章中,我们将看到在不同情况下 JVM 中布尔值的足迹是多少。 首先,我们将检查 JVM 以查看对象大小。然后,我们将了解这些尺寸背后的基本原理。 扩展阅读 Java字节码-Java快速进阶教程 JVM规范定义运行时数据区详解-Java快速进阶教程 什么是 Java 中的 JV
阅读全文
Java程序计算标准偏差-Java快速入门教程
摘要:1. 概述 标准差(符号为 sigma – σ)是数据围绕平均值的扩散的度量。 在这个简短的教程中,我们将了解如何在 Java 中计算标准偏差。 2. 计算标准偏差 标准差是用公式平方根计算的 ( ∑ ( Xi – ų ) ^ 2 ) / N,其中: ∑是每个元素的总和 Xi 是数组的每个元素 ų
阅读全文
旅行推销员问题Java演练-Java快速入门教程
摘要:1. 简介 在本教程中,我们将了解模拟退火算法,并展示基于旅行推销员问题 (TSP) 的示例实现。 2. 模拟退火 模拟退火算法是一种启发式算法,用于解决具有较大搜索空间的问题。 灵感和名字来自冶金退火;它是一种涉及材料加热和受控冷却的技术。 通常,模拟退火在探索解空间并降低系统温度时会降低接受更差
阅读全文
volatile和线程安全-Java快速进阶教程
摘要:1. 概述 虽然 Java 中的volatile关键字通常可以确保线程安全,但情况并非总是如此。 在本教程中,我们将了解共享volatile变量可能导致争用条件的情况。 2. 什么是volatile变量? 与其他变量不同,volatile变量是写入主存储器和从主存储器读取的。CPU 不缓存volat
阅读全文
Volatile关键字使用指南-Java快速进阶教程
摘要:1. 概述 在没有必要同步的情况下,编译器、运行时或处理器可能会应用各种优化。尽管这些优化通常是有益的,但有时它们可能会导致微妙的问题。 缓存和重新排序是在并发上下文中可能会让我们感到惊讶的优化之一。Java 和 JVM 提供了许多控制内存顺序的方法,volatile关键字就是其中之一。 在本教程中
阅读全文
Java 中的易失性变量与原子变量-Java快速进阶教程
摘要:1. 概述 在本教程中,我们将了解volatile关键字和原子类之间的区别以及它们解决的问题。首先,有必要知道Java如何处理线程之间的通信以及可能出现的意外问题。 线程安全是一个关键主题,它提供了对多线程应用程序内部工作的深入了解。我们还将讨论争用条件,但我们不会太深入地讨论这个主题。 2. 并发
阅读全文
同步 Java 集合简介-Java快速入门教程
摘要:1. 概述 集合框架是Java的关键组件。它提供了大量的接口和实现,使我们能够以简单的方式创建和操作不同类型的集合。 尽管使用普通的不同步集合总体上很简单,但在多线程环境(也称为并发编程)中工作时,它也可能成为一个令人生畏且容易出错的过程。 因此,Java 平台通过在Collections类中实现的
阅读全文
Java 中的不可变对象-Java快速进阶教程
摘要:1. 概述 在本教程中,我们将学习是什么使对象不可变,如何在 Java 中实现不可变性,以及这样做有什么好处。 2. 什么是不可变对象? 不可变对象是其内部状态在完全创建后保持不变的对象。 这意味着不可变对象的公共 API 保证了它在其整个生命周期中的行为方式相同。 如果我们看一下类 String,
阅读全文
Java 中的常见并发陷阱-Java快速进阶教程
摘要:1. 简介 在本教程中,我们将看到 Java 中一些最常见的并发问题。我们还将学习如何避免它们及其主要原因。 2. 使用线程安全对象 2.1. 共享对象 线程主要通过共享对相同对象的访问来进行通信。因此,在对象更改时从对象读取可能会产生意外的结果。此外,同时更改对象可能会使其处于损坏或不一致的状态。
阅读全文
使用 Java 示例介绍无锁数据结构-Java快速进阶教程
摘要:1. 简介 在本教程中,我们将了解什么是非阻塞数据结构,以及为什么它们是基于锁的并发数据结构的重要替代方案。 首先,我们将介绍一些术语,例如无障碍、无锁定和无等待。 其次,我们将研究非阻塞算法的基本构建块,如CAS(compare-and-swap)。 第三,我们将研究在Java中实现无锁队列,最后
阅读全文
AtomicStampedReference 指南-Java快速进阶教程
摘要:1. 概述 在之前的一篇文章中,我们了解到AtomicStampedReference可以防止ABA问题。 在本教程中,我们将仔细研究如何最好地使用它。 2. 为什么我们需要AtomicStampedReference? 首先,AtomicStampedReference为我们提供了一个对象引用变量
阅读全文