Java—定时任务—HashedWheelTimer时间轮
海量定时任务管理的问题 一个大型内容审核平时,在运营设定审核了内容的通过的时间,到了这个时间之后,相关内容自动审核 通过, 本是个小的需求,但是考虑到如果需要定时审核的东西很多,这样大量的定时任务带来…
Java—有向无环图(DAG)
在软件开发中会有会有定时任务的存在,简单的定时任务只需要在固定时间触发它的执行就可以了。 但是对于复杂的定时任务,可能是由多个任务组成一个任务组,它们之间存在依赖关系,一个任务执行的条件,必须是它的前…
JXLS—Excel模板框架
因为业务的需要,要解决报表样式的复杂度问题,每一个中国式报表的复杂度都是极其变态的,所以可以通过模版的方式来导出Excel样式,而不是通过代码来构造Excel的样式,这就是不采用原生的POI与Easy…
Disruptor—无锁队列
Disruptor 是什么 Disruptor 由 LMAX 开发,用于改进 Java 线程间通信,主要适用于对延迟敏感度高到极端的应用程序,在保持高吞吐量的同时确保非常高的响应时间。通常,此类服务旨…
Netty—NIO基础
IO模型就是说用什么样的通道进行数据的发送和接收,Java共支持3种网络编程IO模式:BIO,NIO,AIO 之前有过学习这三种模式的理论内容 http://www.enmalvi.com/2022/…
Java8—Consumer、Supplier、Predicate、Function
这几个接口都在 java.util.function 包下的,分别是Consumer(消费型)、supplier(供给型)、predicate(谓词型)、function(功能性),相信有了后面的解释…
Java—单例模式
该如何优雅的、安全的使用单例模式呢? 什么是单例:保证一个类只有一个实例,并且提供一个访问该全局访问点 单例优缺点 优点: 在单例模式中,活动的单例只有一个实例,对单例类的所有实例化得到的都是相同的一…
Java—SmallreyMutiny语法学习-响应式思考
Mutiny、Project-Reactor、RxJava(在web后端)好像都挺冷门的,人气不高,相关资料也不多。不过其实整个Java Reactive都不是很热门,国内用的人不是很多。但是Reac…
Spring—异步Servlet
我们日常使用的 SpringMVC,基本上都不是异步 Servlet,而学习 WebFlux,异步 Servlet 是基础。 什么是异步 Servlet 先来说说什么是非异步 Servlet。 在 S…
Flowable—流程引擎(待修缮)
工作流概述 工作流是什么? 工作流是将一组任务组织起来以完成某个经营过程:定义了任务的触发顺序和触发条件,每个任务可以由一个或多个 软件系统完成,也可以由一个或一组人完成,还可以由一个或多个…
Java—数据库连接池
连接池概念 数据库连接池是在程序初始化时创建一定数量的数据库连接对象并将其保存在一块内存区中,它允许应用程序重复使用一个现有的数据库连接,而不是重新建立一个;释放空闲时间超过最大空闲时间的数据库连接以…
JavaPoet—代码生成框架
JavaPoet是square推出的开源java代码生成框架,提供Java Api生成.java源文件。这个框架功能非常有用,我们可以很方便的使用它根据注解、数据库模式、协议格式等来对应生成代码。不直…
Java—JavaAgent探针
Java Agent 直译为 Java 代理,也常常被称为 Java 探针技术。 Java Agent 是在 JDK1.5 引入的,是一种可以动态修改 Java 字节码的技术。Java 中的类编译后形…
Java—Byte Buddy字节码编程
之前编写的字节码编程; ASM、Javassist 系列,Byte Buddy 玩法上更加高级,你可以完全不需要了解一个类和方法块是如何通过 指令码LDC、LO…
Java—ASM字节码编程
ASM 是一个 Java 字节码操控框架。它能被用来动态生成类或者增强既有类的功能。ASM 可以直接产生二进制 class 文件,也可以在类被加载入 Java 虚拟机之前动态改变类行为。Java cl…
Java—I/O模型与同步、异步、阻塞、非阻塞
内核态和用户态 我们的电脑可能同时运行着非常多的程序,这些程序分别来自不同公司。 谁也不知道在电脑上跑着的某个程序会不会发疯似得做一些奇怪的操作,比如定时把内存清空了。 因此 CPU 划分了非特权指令…
Java—事件驱动进行代码解耦(EventBus)
虽然现在的各种应用都是集群部署,单机部署的应用越来越少了,但是不可否认的是,市场上还是存在许多单机应用的。本文要介绍的是 Guava 中的 EventBus 的使用。 EventBus 处理的事情类似…
Java—注解用法详解—@SuppressWarnings
前言 注释类型: 当你的编码可能存在警告时,比如安全警告,可以用它来消除。 api中是这样描述的: 指示应该在注释元素(以及包含在该注释元素中的所有程序元素)中取消显示指定的编译器警告。 注意,在给定…
Java—并发编程(八)线程池— (7) ForkJoinPool
先聊聊 ForkJoinPool 与 ThreadPoolExecutor的区别。 我们为啥要用 ForkJoinPool ? 相比于我们更常用的 ThreadPoolExecutor ,ForkJo…
Java—并发编程(八)线程池– (6) Callable和Future
Callable 和 Future 简介 Callable 和 Future 是比较有趣的一对组合。当我们需要获取线程的执行结果时,就需要用到它们。Callable用于产生结果,Future用于获取结…
Java—并发编程(八)线程池– (5) 线程池的原理
拒绝策略介绍 线程池的拒绝策略,是指当任务添加到线程池中被拒绝,而采取的处理措施。当任务添加到线程池中之所以被拒绝,可能是由于:第一,线程池异常关闭。第二,任务数量超过线程池的最大限制。 线程池共包括…
Java—并发编程(八)线程池– (4) 线程池的原理
我们介绍过,线程有5种状态:新建状态,就绪状态,运行状态,阻塞状态,死亡状态。线程池也有5种状态;然而,线程池不同于线程: 线程池的5种状态是:Running, SHUTDOWN, STOP, TID…
Java—并发编程(八)线程池– (3) 线程池的原理
线程池示例 在分析线程池之前,先看一个简单的线程池示例。 import java.util.concurrent.Executors; import java.util.concurrent.Exec…
Java—并发编程(八)线程池– (2) 线程池的原理
线程池的实现类是ThreadPoolExecutor类。本章,我们通过分析ThreadPoolExecutor类,来了解线程池的原理。 ThreadPoolExecutor简介 ThreadPoolE…
Java—并发编程(八)线程池– 概览
线程池架构图 1. Executor 它是"执行者"接口,它是来执行任务的。准确的说,Executor提供了execute()接口来执行已提交的 Runnable 任务的对象。Executor存在的目…
Java—并发编程(七)JUC集合 – (12) SynchronousQueue
它是一个特殊的队列,它的名字其实就蕴含了它的特征 - - 同步的队列。为什么说是同步的呢?这里说的并不是多线程的并发问题,而是因为当一个线程往队列中写入一个元素时,写入操作不会立即返回,需要等待另一个…
Java—并发编程(七)JUC集合 – (11) PriorityBlockingQueue
PriorityBlockingQueue介绍 带排序的 BlockingQueue 实现,其并发控制采用的是 ReentrantLock,队列为无界队列(ArrayBlockingQueue 是有界…
Java—并发编程(七)JUC集合 – (10) ConcurrentLinkedQueue
ConcurrentLinkedQueue介绍 ConcurrentLinkedQueue是线程安全的队列,它适用于“高并发”的场景。它是一个基于链接节点的无界线程安全队列,按照 FIFO(先进先出)…
Java—并发编程(七)JUC集合 – (9) LinkedBlockingDeque
LinkedBlockingDeque介绍 LinkedBlockingDeque是双向链表实现的双向并发阻塞队列。该阻塞队列同时支持FIFO和FILO两种操作方式,即可以从队列的头和尾同时操作(插入…
Java—并发编程(七)JUC集合 – (8) LinkedBlockingQueue
LinkedBlockingQueue介绍 LinkedBlockingQueue是一个单向链表实现的阻塞队列。该队列按 FIFO(先进先出)排序元素,新元素插入到队列的尾部,并且队列获取操作会获得位…