Java
126 篇文章
java
Kafka—整理记录
Kafka是最初由Linkedin公司开发,是一个分布式、支持分区的(partition)、多副本的(replica),基于zookeeper协调的分布式消息系统,它的最大的特性就是可以实时的处理大量…
Redis—Redisson客户端
Redis 是用单线程来处理多个客户端的访问,因此作为 Redis 的开发和运维人员需要了解 Redis 服务端和客户端的通信协议,以及主流编程语言的 Redis 客户端使用方法,同时还需要了解客户端…
一致性协议
常见的一致性协议 有二阶段提交(2PC)、三阶段提交(3PC)、Paxos、Raft等算法。 这是很多分布式集群相互通信的基础。 2PC 2PC即Two-Phase Commit,二阶段提交。广泛应用…
Java—动态线程池
Tomcat/Jetty 是目前比较流行的 Web 容器,两者接受请求之后都会转交给线程池处理,这样可以有效提高处理的能力与并发度。JDK 提高完整线程池实现,但是 Tomcat/Jetty 都没有直…
SpringBoot—jar包加密防止反编译
ClassFinal是一款java class文件安全加密工具,支持直接加密jar包或war包,无需修改任何项目代码,兼容spring-framework;可避免源码泄漏或字节码被反编译。 可以直接加…
Redis—集群方式
集群高可用常见的方式 Replication-Sentinel模式 Redis-Cluster模式 中心化代理模式(proxy模式) Replication-Sentinel模式 Redis sent…
Caffeine—缓存实战
之前分析了Caffeine的原理,缓存过期的内容 http://www.enmalvi.com/2023/10/03/caffeine/ 这里来简要讲讲如何快速使用,对于常见缓存类型而言,可以分为本地…
Caffeine—缓存学习
缓存(Cache)在代码世界中无处不在。从底层的CPU多级缓存,到客户端的页面缓存,处处都存在着缓存的身影。缓存从本质上来说,是一种空间换时间的手段,通过对数据进行一定的空间安排,使得下次进行数据访问…
Java—使用SnakeYAML解析与序列化YAML
Springboot底层-snakeyaml的使用,就是用来操作YAML的 依赖 <dependencies> ... <dependency> <groupId>org.yaml&…
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…
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…