学习笔记-BIO/NIO/AIO详解 相关背景 理解 IO 的各种模型需要先了解计算机的运作流程,下面将对其一些专业的名称做一些简单介绍 什么是 I/O? 在计算机系统中 I/O 就是输入(Input)和输出(Output)的意思,针对不同的操作对象,可以划分为磁盘 I/O 模型,网络 I/O 模型,内存映射 I/O, Direct I/O、数据库 I/O 等,只要具有输入输出类型的交互系统都可以认为是 I/O 系统。I/O 可以 2022-06-04 学习笔记 #IO模型
并发笔记-ThreadPoolExecutor详解 简介ThreadPoolExecutor 一种 ExecutorService,使用可能的多个池线程之一执行每个提交的任务,通常使用 Executors 工厂方法进行配置。线程池解决了两个不同的问题:它们通常在执行大量异步任务时提供更好的性能,这是因为减少了每个任务的调用开销;它们还提供了一种方法来限制和管理执行任务集合时消耗的资源,包括线程。每个 ThreadPoolExecutor 还维护一 2022-05-30 并发相关 #JUC
并发笔记-JUC之Unsafe类 相关背景 一下代码基于 JDK1.8 进行分析,在高版本中部分方法已经被删除获取迁移到其他地方。 Java 不能直接访问操作系统底层,而是通过本地方法来访问。Unsafe 类提供了硬件级别的原子操作。Unsafe 类使用 private 修饰构造方法,只能使用他自己提供的一个 final 类来进行获取。 123456789101112131415161718private static nat 2022-05-25 并发相关
学习笔记- Java 垃圾收集器 背景JMM 模型(Java Memory Model) 堆它是一个共享的运行时数据区,将实际对象存储在内存中。它在虚拟机启动期间被实例化。该内存分配给所有类实例和数组。堆的大小可以是固定的,也可以是动态的,具体取决于系统的配置。JVM 提供了用户控件,可以根据需要初始化或改变堆的大小。当使用一个新关键字时,会在堆中为对象分配一个空间,但该关键字的引用存在于堆栈中。一个正在运行的 JVM 进程只有 2022-05-05 学习笔记 #GC
并发笔记- Java并发工具之JUC包 简介java.util.concurrent(JUC) 本篇文章仅仅是对 JUC 包下的工具做一些简单的阐述,其每一项都可以更加的具体深入理解。 该包下是在并发编程中常用的实用程序类。这个包包括一些小型的标准化可扩展框架,以及一些提供有用功能的类。 Atomic(原子类) 该包下主要提供一些数据类型的原子类,如 AtomicBoolean、AtomicInteger、AtomicInteg 2022-04-27 并发相关 #JUC
数据结构-Binary Indexed Tree 树状数组 简介 树状数组或二叉索引树(英语:Binary Indexed Tree),又以其发明者命名为 Fenwick 树,最早由 Peter M. Fenwick 于 1994 年以 A New Data Structure for Cumulative Frequency Tables 为题发表在 SOFTWARE PRACTICE AND EXPERIENCE。其初衷是解决数据压缩里的累积频率(C 2022-04-26 数据结构 #树状数组
算法篇-Reservoir Sampling 蓄水池抽样 简介水库抽样是一系列随机算法,用于从 n 个项目的列表中随机选择 k 个样本,其中 n 是一个非常大或未知的数字。通常 n 足够大,以至于列表不适合主内存。例如,Google 和 Facebook 中的搜索查询列表。所以我们得到了一个大的数字数组(或流),我们需要编写一个有效的函数来随机选择 k 个数字,其中 1 <= k <= n。让输入数组为 stream[]。 一个简单的解决方 2022-04-25 算法相关 #蓄水池抽样
云原生-Quarkus框架 背景Quarkus 是一个全栈的 Kubernetes 原生 Java 框架,专为 Java 虚拟机 (JVM) 和原生编译而设计,专门针对容器优化 Java,使其成为无服务器、云和 Kubernetes 环境的有效平台。Quarkus 旨在与流行的 Java 标准、框架和库(如 Eclipse MicroProfile 和 Spring 以及 Apache Kafka、RESTEasy (JA 2022-04-22 云原生篇 #quarkus
源码学习-Dubbo SPI 源码分析 背景 今天我们来聊一聊 Dubbo 的 SPI Java 的 SPI 见 https://mikeygithub.github.io/2021/07/21/yuque/coahg1/ 简介SPI : Service Porvider Interface 服务提供接口。使我们的应用程序具有可扩展的服务(微内核架构)、使用者能够添加服务提供者,而无需修改原始应用程序即可实现其适配,像 JDBC、一 2022-04-19 源码分析 #Dubbo-SPI
数据结构-Segment Tree 线段树 简介 线段树(Segment Tree)主要用于维护区间信息(要求满足结合律)。与树状数组相比,它可以实现 O(logn)的区间修改,还可以同时支持多种操作(加、乘),更具通用性。 应用线段树 segmentTree 是一个二叉树,每个结点保存数组 nums 在区间 [s,e] 的最小值、最大值或者总和等信息。线段树可以用树也可以用数组(堆式存储)来实现。对于数组实现,假设根结点的下标为 0 2022-04-17 数据结构 #线段树