![](https://img-blog.csdnimg.cn/direct/f97fe572f7934f4ba59c874651665e06.jpeg?x-oss-process=image/resize,m_fixed,h_224,w_224)
JAVA基础
文章平均质量分 74
JAVA基础
zhangxs9722
程序员自媒体新星,欢迎关注,点赞收藏不迷路
展开
-
Springboot 整合 Knife4j (API文档生成工具)
Knife4j是一个基于Swagger构建的开源Java API文档工具,主要包括两大核心功能:文档说明和在线调试。使用简单的配置和注解就可以节省写接口文档的时间了,舒服!原创 2024-03-21 17:14:47 · 2976 阅读 · 0 评论 -
Springboot 整合 Quartz(定时任务框架)
Quartz是 OpenSymphony 开源组织在 Job scheduling 领域又一个开源项目,完全由 Java 开发,可以用来执行定时任务,类似于 java.util.Timer。持久性作业 - 就是保持调度定时的状态;作业管理 - 对调度作业进行有效的管理;原创 2024-01-31 15:24:54 · 3433 阅读 · 2 评论 -
postgresql 按日期动态创建分区表
【代码】postgresql 按日期动态创建分区表。原创 2023-06-08 14:27:07 · 2432 阅读 · 0 评论 -
Spring Validation 接口入参校验
JSR 是 Java Specification Requests 的缩写,含义为 JAVA 规范提案。JSR 303 - Bean Validation 规范, 正是一套基于 JavaBean 参数校验的标准。Hibernate Validator 是 JSR 303 的实现,它提供了 JSR 303 规范中所有约束(constraint)的实现,同时也对其作出一些拓展。原创 2023-06-05 15:24:09 · 1783 阅读 · 0 评论 -
CompletableFuture 线程编排
一、前言Java8 新特性之一,其实现了Future, CompletionStage两接口,后者是对前者的一个扩展,增加了异步回调、流式处理、多个Future组合处理的能力,使Java在处理多任务的协同工作时更加顺畅便利。原创 2023-05-31 16:41:06 · 906 阅读 · 0 评论 -
直接复制粘贴就能使用的 shell 脚本函数②
直接复制粘贴就能使用的 shell 脚本函数②原创 2023-05-09 13:48:08 · 408 阅读 · 1 评论 -
(っ•̀ω•́)っ 如何动态修改log日志级别
动态修改log日志级别原创 2023-03-27 17:39:02 · 828 阅读 · 0 评论 -
关于 @Aspect 注解的使用
AOP(Aspect Oriented Programming) 是一种面向切面的编程思想。面向切面编程是将程序抽象成各个切面,即解剖对象的内部,将那些影响了多个类的公共行为抽取到一个可重用模块里,减少系统的重复代码,降低模块间的耦合度,增强代码的可操作性和可维护性。原创 2023-03-10 18:03:04 · 823 阅读 · 0 评论 -
Springboot 整合 WebSocket
WebSocket协议是基于TCP的一种新的网络协议。它实现了浏览器与服务器全双工(full-duplex)通信,即允许服务器主动发送信息给客户端。因此,在WebSocket中,浏览器和服务器只需要完成一次握手,两者之间就直接可以创建持久性的连接,并进行双向数据传输,客户端和服务器之间的数据交换变得更加简单。原创 2022-11-16 11:51:33 · 8676 阅读 · 4 评论 -
直接复制粘贴就能使用的 shell 脚本函数 ①
【代码】直接复制粘贴就能使用的 shell 脚本函数 ①。原创 2022-11-15 19:48:54 · 861 阅读 · 0 评论 -
linux下配置 Golang 的运行环境变量
linux下配置 Golang 的运行环境变量。原创 2022-11-10 10:36:23 · 1434 阅读 · 0 评论 -
(っ•̀ω•́)っ 如何手动定义分页工具类
【代码】(っ•̀ω•́)っ【一百个如何 ②】如何手动定义分页工具类。原创 2022-09-29 15:43:09 · 104 阅读 · 0 评论 -
(っ•̀ω•́)っ 如何将对象属性的首字母以大写格式返回
【代码】如何以对象属性的首字母大写形式返回。原创 2022-09-29 15:25:24 · 311 阅读 · 0 评论 -
ThreadPool 线程池的使用
一种线程使用模式。线程过多会带来调度开销,进而影响缓存局部性和整体性能。而线程池维护着多个线程,等待着监督管理者分配可并发执行的任务。这避免了在处理短时间任务时创建与销毁线程的代价。线程池不仅能够保证内核的充分利用,还能防止过分调度。(摘抄自百度百科什么是线程池)原创 2022-09-15 19:58:04 · 2097 阅读 · 0 评论 -
ExpiringMap:轻量级的Java缓存方式
一、ExpiringMap具有高性能、低开销、零依赖、线程安全、使用 ConcurrentMap 的实现过期 entries 等优点。其主要特点包括:过期策略、可变有效期、最大尺寸、侦听器过期、延迟输入加载、过期自省等。原创 2022-09-07 15:04:08 · 3278 阅读 · 1 评论 -
Java设计模式:策略模式
策略模式是一种行为型模式,它将对象和行为分开,将行为定义为一个行为接口和具体行为的实现。策略模式最大的特点是行为的变化,行为之间可以相互替换。每个if判断都可以理解为就是一个策略。本模式使得算法可独立于使用它的用户而变化。UML结构图如下:环境/上下文 (Context):持有一个策略类的引用,最终给客户端调用。抽象策略 (Strategy): 策略类,通常是一个接口或者抽象类。具体策略 (ConcreteStrategy):实现了策略类中的策略方法,封装相关的算法和行为。原创 2022-08-25 16:10:21 · 1007 阅读 · 3 评论 -
浅谈 DelayQueue 延时队列
是一个支持延时获取元素的无界阻塞队列。队列使用PriorityQueue来实现。队列中的元素必须实现Delayed接口,在创建元素时可以指定多久才能从队列中获取当前元素。只有在延迟期满时才能从队列中提取元素。1、用户下订单后,超过一段时间未支付,订单取消2、停车场停车超时,发送短信通知;1、定义延时对象DelayEvent,需要实现Delayed接口。2、测试3、执行结果四、DelayQueue相关API 变量和类型 方法 描述原创 2022-06-21 17:07:02 · 886 阅读 · 0 评论 -
Java设计模式:桥接模式
桥接(Bridge)模式属于结构型设计模式。通过提供抽象化和实现化之间的桥接结构,来实现二者的解耦。把抽象(abstraction)与行为实现(implementation)分离开来,从而可以保持各部分的独立性以及应对它们的功能扩展。该UML结构图如下:主要角色:(1)Abstraction:抽象类。(2)RefinedAbstraction:扩充抽象类。(3)Implementor:实现类接口。(4)ConcreteImplementor:具体实现类 。场景: 一个甜品店,售卖的食品有蛋糕、奶茶和牛奶,但原创 2022-06-21 15:48:30 · 4726 阅读 · 1 评论 -
进来学习 BlockingQueue 阻塞队列
阻塞队列家族:一、ArrayBlockingQueue用数组实现的有界队列。此队列按照先进先出(FIFO)的原则对元素进行排序。ArrayBlockingQueue一旦创建,容量不能改变。其并发控制采用可重入锁来控制,不管是插入操作还是读取操作,都需要获取到锁才能进行操作。当队列容量满时,尝试将元素放入队列将导致操作阻塞;尝试从一个空队列中取一个元素也会同样阻塞。默认情况下不保证线程访问队列的公平性,所谓公平性是指严格按照线程等待的绝对时间顺序,即最先等待的线程能够最先访问到ArrayB原创 2022-04-24 22:47:09 · 635 阅读 · 1 评论 -
深入理解JVM—垃圾收集器
如果说垃圾收集算法是内存回收的方法论,那么垃圾收集器就是内存回收的具体实现。一、Serial收集器(单线程、复制算法)Serial(串行)收集器是最基本、历史最悠久的垃圾收集器了。是一条单线程收集器。它的“单线程”的意义不仅仅意味着它只会使用一条垃圾收集线程去完成垃圾收集工作,更重要的是它在进行垃圾收集工作的时候必须暂停其他所有的的工作线程(“Stop The World”),直到它收集结束。新生代采用复制算法,老年代采用标记-整理算法优点:简单高效,对于限定单个CPU环境来说,没有原创 2022-03-16 10:41:12 · 935 阅读 · 0 评论 -
Java设计模式:代理模式
代理模式是指给某个对象提供一个代理对象,用户不直接访问原对象而是通过代理对象间接访问。该UML图如下:其中涉及到三种角色:1.抽象主题(AbstractObject)类:通过接口或抽象类声明真实主题和代理对象实现的业务方法。2.真实主题(Real Subject)类:实现了抽象主题中的具体业务,是代理对象所代表的真实对象,是最终要引用的对象。3.代理(ProxyObject)类:提供了与真实主题相同的方法,其内部含有对真实主题的引用,它可以访问、控制或扩展真实主题的功能。1.功能增强:在你原有的功能上,原创 2021-10-19 19:24:20 · 242 阅读 · 0 评论 -
Java设计模式:观察者模式
一、什么是观察者模式?原创 2021-10-18 20:36:55 · 327 阅读 · 0 评论 -
ThreadLocal学习心得
一、ThreadLocal是什么ThreadLocal为线程本地变量,提供了线程内部存储能力,二、ThreadLocal的使用思考1:方法A调用方法B,方法B调用方法C,层层调用,直到调用方法Z,如何将变量X从方法A到方法Z中使用呢?可以采用的方法有:①变量X一层层传递,略显麻烦;②将X设置为静态(static),但多线程同时读写共享资源X时,会产生数据不一致问题;③将X放入ThreadLocal中,同一线程中,任一方法都可取用X;思考2:public class.原创 2021-08-05 14:58:56 · 260 阅读 · 8 评论 -
redis详解之缓存雪崩、穿透、击穿的原因和解决方案
缓存雪崩、穿透、击穿的产生原因与解决方法原创 2021-07-19 20:58:25 · 2184 阅读 · 2 评论 -
MySQL索引类型
一、索引是什么MySQL官方对索引的定义为:索引(Index)是帮助MySQL高效获取数据的数据结构。可以得出,索引是数据结构,索引的目的是提高MySQL的查询效率。二、为什么要索引索引在MySQL中也叫做“键”,是存储引擎用于快速找到记录的一种数据结构。索引对于良好的性能非常关键,尤其是当表中的数据量越来越大时,索引对于性能的影响愈发重要。索引优化应该是对查询性能优化最有效的手段了。索引能够轻易将查询性能提高好几个数量级。索引相当于字典的音序表,如果要查某个字,如果不使用音序表,则需要从原创 2021-07-12 20:53:35 · 195 阅读 · 0 评论 -
redis详解之内存淘汰机制
Redis配置文件中可以设置maxmemory,内存的最大使用量,到达限度时会执行内存淘汰机制。原创 2021-06-29 20:16:18 · 100 阅读 · 0 评论 -
redis详解之key的设置与过期删除策略
redis对存储值的过期处理实际上是针对该值的键(key)处理的,即时间的设置也是设置key的有效时间。Expires字典保存了所有键的过期时间,Expires也被称为过期字段。原创 2021-06-28 20:35:29 · 1788 阅读 · 0 评论 -
redis详解之常用操作命令
redis是一个开源的、使用C语言编写的、支持网络交互的、可基于内存也可持久化的Key-Value数据库(非关系型数据库)。原创 2021-06-28 09:37:11 · 268 阅读 · 0 评论 -
redis详解之数据备份与恢复
Redis所有数据都是保存在内存中,Redis数据备份可以定期的通过异步方式保存到磁盘上,该方式称为半持久化模式,如果每一次数据变化都写入aof文件里面,则称为全持久化模式。本章节通过配置文件,触发快照的方式,恢复数据的操作,优缺点来学习 Redis 的重点知识——数据备份与恢复。1、方式一:半持久化RDB模式(Redis DataBase)【redis备份默认方式】通过快照完成,由用户在redis.conf配置文件中设置两个参数:时间和改动的键的个数。当在指定的时间内被更改的键的个数大于指定的数值时,re原创 2021-06-28 09:40:20 · 18479 阅读 · 0 评论 -
消息中间件(MQ)
一、什么是消息中间件关注于数据的发送和接收,利用高效可靠的异步消息传递机制集成分布式系统。通过提供消息传递和消息排队模型,它可以在分布式环境下扩展进程间的通信。二、为什么需要消息中间件1、系统解耦 假设你有个系统A,这个系统A会产出一个核心数据,现在下游有系统B和系统C需要这个数据。那简单,系统A就是直接调用系统B和系统C的接口发送数据给他们就好了。问题:如果现在要是来了系统D、系统E、系统F、系统G,等等,十来个其他系统慢慢的都需要这份核心数据呢?如下图:使用MQ...原创 2021-06-25 15:48:38 · 11463 阅读 · 0 评论 -
JAVA8 新特性详解(二)
方法引用是用来直接访问类或者实例的已经存在的方法或者构造方法。方法引用提供了一种引用而不执行方法的方式,它需要由兼容的函数式接口构成的目标类型上下文。计算时,方法引用会创建函数式接口的一个实例。原创 2021-06-25 14:23:45 · 91 阅读 · 1 评论 -
JAVA8 新特性详解(一)
Java 8 (又称为 jdk 1.8) 是 Java 语言开发的一个主要版本。 Oracle 公司于 2014 年 3 月 18 日发布 Java 8 ,它支持函数式编程,新的 JavaScript 引擎,新的日期 API,新的Stream API 等。Java8 新增了非常多的特性,我们主要讨论以下几个:Lambda 表达式− Lambda 允许把函数作为一个方法的参数(函数作为参数传递到方法中)。 方法引用− 方法引用提供了非常有用的语法,可以直接引用已有Java类或对象..原创 2021-06-25 12:00:36 · 317 阅读 · 1 评论