Java
文章平均质量分 89
千筠Wyman
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
【Java】线程池技术(三)ThreadPoolExecutor 状态与运行源码解析
ThreadPoolExecutor 继承了 `AbstractExecutorService`,并实现了 ExecutorService 接口,用于管理线程。内部使用了原子整型 `AtomicInteger ctl` 来表示线程池状态和 Worker 数量。前 3 位表示线程池状态,后 29 位表示 Worker 数量。原创 2024-06-21 17:07:13 · 993 阅读 · 0 评论 -
【Java】线程池技术(二)ThreadPoolExecutor的基本定义
生产环境中常用的线程池构造方法如下:1. 通过 ThreadPoolExecutor 构造函数实现2. 通过 Executors 工具类来创建不同类型的 ThreadPoolExecutor 线程池。其中,更多的推荐使用第一种方法。原创 2024-06-20 17:32:18 · 880 阅读 · 0 评论 -
【Java】线程池技术(一)Executor框架
Executor 是 Java 中一个经典的多线程任务管理框架,其主要提供了任务、任务执行线程池、任务执行结果三个组件原创 2024-06-19 19:48:53 · 607 阅读 · 1 评论 -
【Java】常用的正则表达式
正则表达式通过其基本的标识语法,定义了字符串的模式,可以用来搜索、编辑或处理文本。在不同的编码语言和环境中,可能会有略微的区分,但其定义的模式都是统一的。本文主要介绍通用的正则表达式规则,以及在 Java 应用中的一些注意事项。原创 2023-09-27 11:05:34 · 702 阅读 · 0 评论 -
【Java】Pattern 与 Matcher 类的常见应用
Java 正则表达式通过包下的 Pattern 类与 Matcher 类实现Pattern 类的实例适应正则表达式的编译表示形式,指定为字符串的正则表达式必须首先被编译为此类的实例。然后,可将得到的模式用于创建 Matcher 对象,根据正则表达式,该对象可以与任意字符序列匹配。执行匹配所涉及的所有状态都会保留在匹配器中,因此多个匹配器可以共享同一模式。生成编译后的正则表达式matcher()生成匹配器matches()执行匹配操作,并记录下匹配结果状态单独用 Pattern 只能使用。原创 2023-09-22 17:21:19 · 2003 阅读 · 0 评论 -
【Java】拷贝工具之 Orika 的介绍与演示
在现在流行且广泛应用的各类 Java 分层代码框架中,不同的层定义了不同类型的实体类,如 Entity、DO、DTO、VO 等。层与层之间的对象总是需要进行各种转换和映射,这些操作重复繁琐,于是催生了各种各样的工具,用来快捷、高效地完成这些操作。本文先介绍一款 Java 的拷贝工具Orika,简单讲解一下它的特性,以及进行一些常用的、基础的代码演示。Orika使用反射来访问数据对象的属性,它会自动收集类的元数据,生成映射对象。这些映射对象可用于将数据从一个对象递归拷贝到另一个对象。原创 2023-07-20 20:00:49 · 2070 阅读 · 0 评论 -
【设计模式】代理模式
Java 的代理模式是一种设计模式,它可以让一个对象(代理对象)代替另一个对象(目标对象)去执行一些操作,并且可以在执行前后添加一些额外的功能。代理模式可以实现对目标对象的功能扩展和保护。Java 的代理模式有两种实现方式:静态代理和动态代理。静态代理是在编译时就生成了代理类的字节码文件,而动态代理是在运行时动态生成代理类并加载到 JVM 中。原创 2023-06-02 16:58:03 · 1174 阅读 · 0 评论 -
【设计模式】责任链模式的设计与示例
责任链模式是一种行为设计模式,执行上它允许请求沿着一条处理链路依次向下传递,每个处理节点都能对当前状态的请求进行处理,满足一定条件后传递给下一个处理节点,亦或者直接结束这一次处理流程。多层条件准入控制,如人事审批流程、权限检验、游戏通关判断等多环节拦截处理,如 Java 过滤器 Filter、组装生产链路等在这些场景里,使用责任链模式的优势在于,当其中的某个环节需要进行新增、移除、修改时,可以只对单个节点进行操作,不会影响其他节点的执行过程,保证了整个责任链的稳定,代码更加容易维护和迭代。原创 2023-04-30 07:00:00 · 1824 阅读 · 0 评论 -
【Spring】Spring 自带的工具方法 - 持续更新中
好的工具能够提升工作的效率,可靠稳定的工具能够提升工作的质量。在开发的过程中,身边的同事陆续写了不少新的工具类方法,然而方法中出现很多重复的、与业务强耦合的处理,不利于复用;而且新写的工具类方法没有经过充分的测试和验证,难免容易会出现一些问题,影响线上业务。因此,这里整理了一些 Spring 里面自带的工具类方法,日常开发中可以用到。毕竟通用、稳定的工具还是更加靠谱的。原创 2023-04-24 16:35:08 · 183 阅读 · 0 评论 -
时间轮算法(TimingWheel)
时间轮算法的应用非常广泛,在 Dubbo、Netty、Kafka、ZooKeeper、Quartz 的组件中都有时间轮思想的应用,甚至在 Linux 内核中都有用到。原创 2022-10-22 16:30:32 · 8241 阅读 · 2 评论 -
【Kafka】@Spring-kafka 消费功能使用总结
Kafka 的消费者模式,通过都会默认开启自动提交偏移量,但是在一些服务的消费业务中,可能由于业务本身的复杂性或者网络的不稳定,导致在设定的自动提交周期内监听器并没有及时提交偏移量,此时 kafka 服务没能接收到心跳而挂掉,就会触发 rebalance 重新分配分组给客户端,进而在消费完成后,提交偏移量失败。通过提供上述的接口,运维人员可以在服务发布上线之后,根据业务需求动态地管理 kafka 消息监听的生命周期,而不需要经过一系列的代码修改、发布等流程对监听器的状态进行修改,大大提升了业务的效率。...原创 2022-08-15 15:53:54 · 2553 阅读 · 0 评论 -
SpringBoot 的请求参数校验注解
Validation 和 validator 包提供了一系列校验用注解,帮助我们在 RESTful 服务请求中实现期望的数据校验,其注解的功能包括但不限于入参的存在性判断、非空判断、数值取值范围限定、特定含义数据格式校验、校验失败提示信息等。Maven 依赖在 SpringBoot 2.3 版本之前的项目中,主要需要添加的依赖包括以下两个。其中 spring-boot-starter-web 包含了 spring-boot-starter-validation 这个 maven 包,而里面则添加了 j原创 2022-03-22 21:54:16 · 9666 阅读 · 0 评论 -
Java 8 函数式接口
概述Java 8 的函数式编程是在吸收了其他语言的精髓后得到的产物,在原有的基础上新增了更多抽象的函数式接口,便于开发者实现高效优雅的编码。此前常见的函数式接口包括 Runnable,Callable,Comparator 等,新增的函数式接口定义在 java.util.function 包中,常见的基本接口主要包括 predicate,Consumer,Supplier 和 Function,他们的含义以及使用特征大致概括如下表:接口名含义入参出参形式Predicate谓词型原创 2021-11-23 17:49:22 · 1250 阅读 · 2 评论 -
Java8 Stream流的使用
Stream 概述在 Java 8 中,新增了 Stream 这个重要的抽象概念,结合同版本出现的 Lambda 表达式,Stream 通过其 API 提供了一系列高效、友好的处理集合数据的操作方式。从字面上理解,Stream 就是把集合中将要处理的元素集合看作一个流,通过使用其 API 对流中的元素进行各种操作,如过滤、映射、聚合等。它具有以下几个特性:Stream 只是一个抽象接口概念,其本身并不是一个数据结构,所以并不能用来存储数据。Stream API 不会改变数据源,所有操作的最终结果会原创 2021-11-23 15:28:23 · 2087 阅读 · 0 评论 -
Java 8 Optional使用介绍
概述Java 8 引入了一个非常强大的特性就是 Optional 类,其主要解决的问题就是我们编程时常常遇到的空指针异常(NPE-NullPointerException)。在传统的编程方法里,通常都是以 if-else 条件语句对使用的对象进行判空,比如:public String getVal(ClassA obj) { if (obj == null) { return "unknown"; } else { return obj.getValue(原创 2021-10-22 16:09:15 · 3902 阅读 · 0 评论 -
【Java 集合类】PriorityQueue 类源码分析
基本定义PriorityQueue 是一个基于优先级堆实现的优先级队列,具体来说是通过完全二叉树实现的,因此可以通过数组作为其底层实现。队列中的元素默认按照其自然顺序(小顶堆)进行排列,或者是根据调用构建方法时传入的比较器 Comparator 对内部元素进行排序。优先级队列的元素不允许为 null,也不允许插入一个不可比较的对象,因为有可能在排序时导致类型转换异常(ClassCastException),因此不传入比较器时,元素需要本身就已经实现 Comparable 接口。优先级队列是无边界的,但是原创 2021-09-29 19:22:51 · 350 阅读 · 0 评论 -
SpringBoot 利用自定义注解实现AOP拦截控制
在 SpringBoot 中,利用 AOP 实现拦截控制的方法有很多,个人觉得相对比较简洁、比较简单的方式是通过自定义注解实现拦截控制。这种实现方式只需要预先定义一个新的注解,并实现拦截控制的具体业务逻辑,当我们想要拦截某一个方法进行控制时,只需要在方法前加上该注解,通常不需要做过多的调整。在实际工程应用中,这种实现方式确实有效提升了开发效率。AOP 的基本概念AOP 是 Aspect-oriented Programming 的缩写,常译作”面向切面编程“,通俗理解就是在程序运行的链路中,从某一个横切原创 2021-09-27 19:50:58 · 11627 阅读 · 2 评论 -
【Java 集合类】Java 集合的迭代器
集合的迭代器目前在集合中常用的迭代器有三种:Iterator,Iterable 和 ListIterator。Iterator 接口Iterator自 jdk 1.2 出现,取代了 Java 集合框架原来的 Enumeration 接口,两者的区别主要体现在:Iterator 允许调用方在迭代访问的过程中要友好的语法进行 remove 操作;Iterator 对方法名进行了优化。在早期的 jdk 版本里,遍历集合只能通过Iterator迭代器进行操作。目前常用的 jdk 1.8 版本的It原创 2021-07-06 16:44:08 · 427 阅读 · 0 评论 -
【Java 集合类】Java 集合类总览
jdk 包版本:jdk1.8.0_111Java标准库自带的java.util包提供了集合类:Collection,它是除Map外所有其他集合类的根接口,它作为一个容器,存储一系列的对象。Map是键值对的结构,存储一系列的键值对<key, value>。Java 的java.util包主要提供了以下四种类型的集合:List:一种有序列表的集合;Set:一种保证没有重复元素的集合;Map:一种通过键值(key-value)查找的映射表集合。Queue:一种队列容器,其特性与List相同原创 2021-07-06 16:42:32 · 502 阅读 · 0 评论 -
【Java 集合类】Collections 类源码分析
Collections 类笔记包路径:jdk1.8.0_111/src.zip!/java/util/Collections.javaCollections 类在内部定义了一系列实用的容器类,主要包括不可修改容器类(unmodifiable)、并发容器类(synchronized)、可检查容器类(checked)、空容器类(empty)和单对象容器类(singleton)。Collections 类的方法都是静态方法,每一种方法都对应一种集合算法的实现,且每一种实现都有两种,一种是适用于实现了Rand原创 2021-07-03 17:32:01 · 591 阅读 · 1 评论 -
【Java 集合类】LinkedList 类源码分析
LinkedList 类源码分析与数组一样,LinkedList 也是一种线性的数据结构,但它不像数组或者 ArrayList 那样在连续的内存空间上存储元素,而是通过引用相互链接,这也成为索引存储。LinkedList 之中的每一个元素都可以称之为节点(Node),每一个节点包括三个属性:元素本身的值。指向下一个节点的引用地址。指向上一个节点的引用地址。Node 是 LinkedList 类的一个私有静态内部类,其源码如下:private static class Node<E&g原创 2020-09-11 16:49:29 · 397 阅读 · 0 评论 -
【Java 集合类】ArrayList 类源码分析
ArrayList 类源码分析数组是 Java 编程中最常用的基本数据类型之一,但其本身自带的方法不多,不便于进行相对复杂的操作。因此在 Java 中有一个相对应的集合类 ArrayList,可以称得上在集合方面最常用的类了。ArrayList 类的设计逻辑如下:ArrayList 实现了 List 接口,其内在逻辑是基于数组实现的。对于数组这个基本数据类型来说,其大小在声明的时候就已经是固定了的,不能再进行动态的调整。如果依次向数组里添加数据,一旦数组满了,就不能再添加任何元素了。相比而言,Arra原创 2020-09-11 16:47:13 · 192 阅读 · 0 评论
分享