自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(237)
  • 收藏
  • 关注

原创 SQL基础语法全解析(上篇)

数据定义语言(Data Definition Language,DDL)是 SQL 语言集中负责数据结构定义与数据库对象定义的语言。DDL 的主要功能是定义数据库对象。DDL 的核心指令是CREATEALTERDROP。

2024-12-03 14:45:00 1199

原创 MyBatis高效SQL写法指南

MyBatis-Plus 的 Wrapper 条件构造器是一种强大的工具,它允许开发者以链式调用的方式构建复杂的 SQL 查询条件。MyBatis-Plus 提供了大量的 CRUD(创建、读取、更新、删除)操作的方法,并允许你通过自定义 SQL 语句来实现更复杂的操作。此示例展示了如何根据不同的搜索类型选择不同的查询条件。此示例展示了如何在插入用户后自动获取生成的主键,并将其赋值给传入的User对象的id属性。都提供了 Lambda 表达式的方法,这些方法允许你以类型安全的方式引用实体类的属性。

2024-12-03 09:37:41 1041

原创 SpringBoot实战:高效实现API限流策略

你可以创建一个全局异常处理器来捕获// 你可以在这里添加其他异常处理器的定义这样,当限流器阻止请求时,客户端将收到一个带有状态码的响应。

2024-12-02 16:00:00 1318

原创 异步编程优化:@Async与CompletableFuture的优雅结合

1. 简介@Async和 CompletableFuture是实现异步处理的强大工具组合。@Async是Spring框架提供的一个注解,用于标记方法以表明它将在Spring管理的线程池中的另一个线程上异步执行。这使得开发人员能够在不阻塞主线程的情况下执行耗时的任务,从而提高应用程序的整体性能和响应速度。是Java 8引入的一个强大的类,它代表了一个可能尚未完成的计算的结果。提供了丰富的API来支持异步编程模式,如回调、组合操作、错误处理等。通过将@Async与结合使用,可以实现更高效的异步任务处理。

2024-12-02 09:46:17 958

原创 Java定时任务全解析:从基础到高级

单机定时任务的常见解决方案有TimerDelayQueue、Spring Task 和时间轮,其中最常用也是比较推荐使用的是时间轮。另外,这几种单机定时任务解决方案同样可以实现延时任务。Redis 和 MQ 虽然可以实现分布式定时任务,但这两者本身不是专门用来做分布式定时任务的,它们并不提供较为完整和强大的分布式定时任务的功能。而且,两者不太适合执行周期性的定时任务,因为它们只能保证消息被消费一次,而不能保证消息被消费多次。因此,它们更适合执行一次性的延时任务,例如订单取消、红包撤回。

2024-11-30 14:00:00 758

原创 SSO单点登录:全面详解与实现指南

1、定义单点登录(Single Sign - On,简称 SSO)是一种身份验证机制,它允许用户使用单一的凭据(如用户名和密码)访问多个相互信任的应用系统。在这种模式下,用户只需登录一次,就可以在不同的应用之间无缝切换,而无需为每个应用单独进行登录操作。2、优势用户体验提升:用户无需记住多个账号和密码,减少了登录操作的繁琐性,提高了用户体验。管理效率提高:对于企业来说,管理用户账号和权限变得更加简单,只需要在单点登录系统中进行统一的用户管理和认证授权。安全性增强。

2024-11-30 10:00:00 2450

原创 数据脱敏方案的实施与策略

数据脱敏百度百科中是这样定义的:数据脱敏,指对某些敏感信息通过脱敏规则进行数据的变形,实现敏感隐私数据的可靠保护。这样就可以在开发、测试和其它非生产环境以及外包环境中安全地使用脱敏后的真实数据集。在涉及客户安全数据或者一些商业性敏感数据的情况下,在不违反系统规则条件下,对真实数据进行改造并提供测试使用,如身份证号、手机号、卡号、客户号等个人信息都需要进行数据脱敏。是数据库安全技术之一。总的来说,数据脱敏是指对某些敏感信息通过脱敏规则进行数据的变形,实现敏感隐私数据的可靠保护。

2024-11-29 14:45:00 1123

原创 全面解析:常见加密算法及其应用

这篇文章介绍了三种加密算法:哈希算法、对称加密算法和非对称加密算法。哈希算法是一种用数学方法对数据生成一个固定长度的唯一标识的技术,可以用来验证数据的完整性和一致性,常见的哈希算法有 MD、SHA、MAC 等。对称加密算法是一种加密和解密使用同一个密钥的算法,可以用来保护数据的安全性和保密性,常见的对称加密算法有 DES、3DES、AES 等。非对称加密算法是一种加密和解密使用不同的密钥的算法,可以用来实现数据的安全传输和身份认证,常见的非对称加密算法有 RSA、DSA、ECC 等。

2024-11-29 10:30:00 1509

原创 Spring Boot 常用注解全面总结

Hibernate Validator 是 Hibernate 团队最初的数据校验框架,Hibernate Validator 4.x 是 Bean Validation 1.0(JSR 303)的参考实现,Hibernate Validator 5.x 是 Bean Validation 1.1(JSR 349)的参考实现,目前最新版的 Hibernate Validator 6.x 是 Bean Validation 2.0(JSR 380)的参考实现。拿我们在第 5 节参数校验这块来举例子。

2024-11-28 15:00:00 1953

原创 Spring常见面试题精编总结

Spring 是一款开源的轻量级 Java 开发框架,旨在提高开发人员的开发效率以及系统的可维护性。

2024-11-28 10:45:00 1865

原创 MyBatis面试必备:高频问题及实战技巧

MyBatis是一个半ORM(对象关系映射)框架,它内部包装了JDBC,允许开发人员编写简洁的SQL语句,并且可以使用动态SQL和参数映射来进行高效和灵活的数据操作。MyBatis提供了许多高级功能,如缓存机制、批量操作、分页等,并可以与多种数据库和Web框架无缝集成。虽然 MyBatis 解析 xml 映射文件是按照顺序解析的,但是,被引用的 B 标签依然可以定义在任何地方,MyBatis 都可以正确识别。

2024-11-27 15:16:06 853

原创 Spring事务管理深度解析:从原理到实践

在软件开发领域,大家对事务的概念想必都不陌生,事务简单来说,就是逻辑上的一组操作,这组操作具有一个显著特点:要么全部都得以执行,要么就全部都不执行,就如同一个不可分割的整体。接下来,咱们结合日常实际开发场景来深入聊聊事务。在我们所开发的系统里,每个业务方法往往包含了多个原子性的数据库操作。就拿下面这个// 这里首先通过personDao将人员基本信息保存到数据库// 接着通过personDetailDao将人员详细信息也保存到数据库。

2024-11-27 10:01:44 1029

原创 深入浅出:IoC 与 AOP 核心原理全解析(快速上手版)

IoC (Inversion of Control )即控制反转/反转控制。它是一种思想不是一个技术实现。描述的是:Java 开发领域对象的创建以及管理的问题。例如:现有类 A 依赖于类 B传统的开发方式:往往是在类 A 中手动通过 new 关键字来 new 一个 B 的对象出来使用 IoC 思想的开发方式:不通过 new 关键字来创建对象,而是通过 IoC 容器(Spring 框架) 来帮助我们实例化对象。我们需要哪个对象,直接从 IoC 容器里面去取即可。

2024-11-26 09:21:16 1213

原创 Spring 中的设计模式详解

定义一个事件: 实现一个继承自,并且写相应的构造函数;定义一个事件监听者:实现接口,重写方法;使用事件发布者发布消息: 可以通过的方法发布消息。// 定义一个事件,继承自ApplicationEvent并且写相应的构造函数// 定义一个事件监听者,实现ApplicationListener接口,重写 onApplicationEvent() 方法;@Component//使用onApplicationEvent接收消息@Override。

2024-11-26 09:09:02 1321

原创 SpringBoot 自动装配原理详解

使用过 Spring 的小伙伴,一定有被 XML 配置统治的恐惧。即使 Spring 后面引入了基于注解的配置,我们在开启某些 Spring 特性或者引入第三方依赖的时候,还是需要用 XML 或 Java 进行显式配置。举个例子。没有 Spring Boot 的时候,我们写一个 RestFul Web 服务,还首先需要进行如下配置。@Bean@Bean但是,Spring Boot 项目,我们只需要添加相关依赖,无需配置,通过启动下面的main方法即可。

2024-11-25 23:30:27 787

原创 SpringBoot 框架下高效敏感词过滤功能的完整实现方案

提供一种机制,允许用户根据自己的需求定义敏感词的替换规则。例如,可以将某些敏感词替换为指定的占位符或符号,以避免直接显示敏感内容。

2024-11-25 16:22:36 902

原创 Spring Boot Vue集成:打造智能化企业员工管理系统

随着企业规模的扩大和市场竞争的加剧,企业管理面临着前所未有的挑战。传统的员工管理方式,如手工记录、纸质文档等,不仅效率低下,还容易出错,难以满足现代企业对员工信息管理的精准、高效需求。因此,开发一套集员工信息管理、考勤管理、薪资管理等功能于一体的智能化企业员工管理系统,成为提升企业管理效率、优化资源配置的关键。Java是由SUN公司推出,该公司于2010年被oracle公司收购。Java本是印度尼西亚的一个叫做爪洼岛的英文名称,也因此得来java是一杯正冒着热气咖啡的标识。

2024-11-22 17:01:04 713

原创 Java基础常见面试题总结(下)

Java 泛型(Generics)是 JDK 5 中引入的一个新特性。使用泛型参数,可以增强代码的可读性以及稳定性。编译器可以对泛型参数进行检测,并且通过泛型参数可以指定传入的对象类型。比如这行代码就指明了该ArrayList对象只能传入Person对象,如果传入其他类型的对象就会报错。并且,原生List返回类型是Object,需要手动转换类型才能使用,使用泛型后编译器自动转换。

2024-11-22 14:30:00 921

原创 Java 序列化详解

如果我们需要持久化 Java 对象比如将 Java 对象保存在文件中,或者在网络传输 Java 对象,这些场景都需要用到序列化。序列化:在序列化过程中,对象的状态被保存为一连串的字节,这些字节可以保存到文件中或通过网络传输。序列化后的字节流可以在需要时进行反序列化反序列化:与序列化相反,反序列化是指将字节流转化为对象的过程。在反序列化过程中,字节流被重新组装成对象,并恢复对象的状态。

2024-11-22 10:30:00 1041

原创 Java SPI 机制详解

Java SPI(Service Provider Interface)机制是Java官方提供的一种服务发现机制,它允许在运行时动态地加载实现特定接口的类,而不需要在代码中显式地指定该类。这种机制为框架或库的扩展点提供了实现方式,使得开发者能够在运行时动态插入或更换组件的实现。以下是对Java SPI机制的详细解析:SPI 即 Service Provider Interface ,字面意思就是:“服务提供者的接口”,我的理解是:专门提供给服务提供者或者扩展框架功能的开发者去使用的一个接口。

2024-11-21 19:15:00 874

原创 深度解析 Java 类加载器:聚焦双亲委派机制核心要点

类加载器从 JDK 1.0 就出现了,最初只是为了满足 Java Applet(已经被淘汰) 的需要。后来,慢慢成为 Java 程序中的一个重要组成部分,赋予了 Java 类可以被动态加载到 JVM 中并执行的能力。根据官方 API 文档的介绍:类加载器是一个负责加载类的对象。是一个抽象类。给定类的二进制名称,类加载器应尝试定位或生成构成类定义的数据。典型的策略是将名称转换为文件名,然后从文件系统中读取该名称的“类文件”。每个 Java 类都有一个引用指向加载它的。不过,数组类不是通过。

2024-11-21 14:40:16 789

原创 Java NIO 核心知识总结

在传统的 Java I/O 模型(BIO)中,I/O 操作是以阻塞的方式进行的。也就是说,当一个线程执行一个 I/O 操作时,它会被阻塞直到操作完成。这种阻塞模型在处理多个并发连接时可能会导致性能瓶颈,因为需要为每个连接创建一个线程,而线程的创建和切换都是有开销的。为了解决这个问题,在 Java1.4 版本引入了一种新的 I/O 模型 —NIO(New IO,也称为 Non-blocking IO)。

2024-11-21 10:09:05 1114

原创 Java IO 模型详解

即输入/输出,描述了计算机系统与外部设备之间通信的过程。阻塞(Blocking):在阻塞I/O操作中,调用者请求I/O操作并等待操作完成。在操作完成之前,调用者被挂起,无法执行其他操作。非阻塞(Non-blocking):非阻塞I/O操作允许调用者发起I/O请求后立即继续执行,不需要等待I/O操作完成。同步(Synchronous):同步I/O操作要求程序在I/O操作完成之前保持等待状态。同步操作可以是阻塞的,也可以是非阻塞的(通过轮询实现)。异步(Asynchronous)

2024-11-20 16:44:59 969

原创 Java IO 设计模式总结

IO 流中的字符流和字节流的接口不同,它们之间可以协调工作就是基于适配器模式来做的,更准确点来说是对象适配器。更侧重于让接口不兼容而不能交互的类可以一起工作,当我们调用适配器对应的方法时,适配器内部会调用适配者类或者和适配类相关的类的方法,这个过程透明的。搞清了装饰器模式的核心之后,你在使用的时候自然就会知道哪些地方运用到了装饰器模式。搞清了装饰器模式的核心之后,你在使用的时候自然就会知道哪些地方运用到了装饰器模式。更侧重于动态地增强原始类的功能,装饰器类需要跟原始类继承相同的抽象类或者实现相同的接口。

2024-11-20 13:44:16 891

原创 Java IO 基础知识总结

IO 即,输入和输出。数据输入到计算机内存的过程即输入,反之输出到外部存储(比如数据库,文件,远程主机)的过程即输出。数据传输过程类似于水流,因此称为 IO 流。IO 流在 Java 中分为输入流和输出流,而根据数据的处理方式又分为字节流和字符流。Java IO 流的 40 多个类都是从如下 4 个抽象类基类中派生出来的。Reader: 所有的输入流的基类,前者是字节输入流,后者是字符输入流。Writer: 所有输出流的基类,前者是字节输出流,后者是字符输出流。

2024-11-20 10:51:27 998 1

原创 Java 语法糖全解:深入理解背后的编译魔法

语法糖(Syntactic Sugar)也称糖衣语法,是英国计算机学家 Peter.J.Landin 发明的一个术语,指在计算机语言中添加的某种语法,这种语法对语言的功能并没有影响,但是更方便程序员使用。简而言之,语法糖让程序更加简洁,有更高的可读性。我们所熟知的编程语言中几乎都有语法糖。作者认为,语法糖的多少是评判一个语言够不够牛逼的标准之一。很多人说 Java 是一个“低糖语言”,其实从 Java 7 开始 Java 语言层面上一直在添加各种糖,主要是在“Project Coin”项目下研发。

2024-11-20 10:28:18 1146 1

原创 Java 反射机制详解

反射是 Java 语言中的一种强大机制,它允许程序在运行时动态地获取类的各种信息(如类的属性、方法、构造函数等),并且能够创建对象、调用方法和访问属性。:能够在运行时动态地操作类,使得代码更加灵活,可以根据不同的情况加载和使用不同的类和方法,适应复杂多变的业务需求。例如,一个恶意的程序可以通过反射访问和修改其他类的私有成员,从而破坏数据的完整性和安全性。,这种方式在根据类的全限定名动态加载类时非常有用,比如在加载数据库驱动时,会根据配置文件中的驱动类名动态加载对应的驱动类。类是 Java 反射机制的核心。

2024-11-19 10:16:51 923

原创 Java 基础面试题深度剖析(中):进阶必备知识

浅拷贝:浅拷贝会在堆上创建一个新的对象(区别于引用拷贝的一点),不过,如果原对象内部的属性是引用类型的话,浅拷贝会直接复制内部对象的引用地址,也就是说拷贝对象和原对象共用同一个内部对象。深拷贝:深拷贝会完全复制整个对象,包括这个对象所包含的内部对象。上面的结论没有完全理解的话也没关系,我们来看一个具体的案例!浅拷贝浅拷贝的示例代码如下,我们这里实现了Cloneable接口,并重写了clone()方法。clone()方法的实现很简单,直接调用的是父类Object的clone()方法。

2024-11-19 09:54:09 1146

原创 Java 基础面试必备:常见问题精华总结(上)

方法的返回值是指我们获取到的某个方法体中的代码执行后产生的结果!(前提是该方法可能产生结果)。返回值的作用是接收出结果,使得它可以用于其他的操作!1、无参数无返回值的方法//......2、有参数无返回值的方法//......3、有返回值无参数的方法//......return x;4、有返回值有参数的方法重写就是子类对父类方法的重新改造,外部样子不能改变,内部逻辑可以改变。区别点重载方法重写方法发生范围同一个类子类参数列表必须修改一定不能修改返回类型可修改。

2024-11-18 10:56:08 656

原创 深度解析 BigDecimal:Java 高精度计算的核心利器

BigDecimal可以实现对浮点数的运算,不会造成精度丢失。通常情况下,大部分需要浮点数精确运算结果的业务场景(比如涉及到钱的场景)都是通过BigDecimal来做的。浮点数之间的等值判断,基本数据类型不能用 == 来比较,包装数据类型不能用 equals 来判断。具体原因我们在上面已经详细介绍了,这里就不多提了。想要解决浮点数运算精度丢失这个问题,可以直接使用BigDecimal来定义浮点数的值,然后再进行浮点数的运算操作即可。// 0。

2024-11-18 10:52:58 1016

原创 Java集合框架高频面试问题精粹(下篇)

为了让HashMap存取高效并减少碰撞,我们需要确保数据尽量均匀分布。哈希值在 Java 中通常使用int表示,其范围是前后加起来大概 40 亿的映射空间,只要哈希函数映射得比较均匀松散,一般应用是很难出现碰撞的。但是,问题是一个 40 亿长度的数组,内存是放不下的。所以,这个散列值是不能直接拿来用的。用之前还要先做对数组的长度取模运算,得到的余数才能用来要存放的位置也就是对应的数组下标。这个算法应该如何设计呢?我们首先可能会想到采用 % 取余的操作来实现。但是,重点来了:“

2024-11-15 11:23:53 1264

原创 解读 ConcurrentHashMap 源码:探索高并发场景下的卓越性能

Java7 中 ConcurrentHashMap 使用的分段锁,也就是每一个 Segment 上同时只有一个线程可以操作,每一个 Segment 都是一个类似 HashMap 数组的结构,它可以扩容,它的冲突会转化为链表。但是 Segment 的个数一但初始化就不能改变。Java8 中的 ConcurrentHashMap 使用的 synchronized 锁加 CAS 的机制。结构也由 Java7 中的。

2024-11-15 11:05:26 909

原创 LinkedHashMap 源码深度解析与优化技巧

是 Java 提供的一个集合类,它继承自HashMap,并在HashMap基础上维护一条双向链表,使得具备如下特性:支持遍历时会按照插入顺序有序进行迭代。支持按照元素访问顺序排序,适用于封装 LRU 缓存工具。因为内部使用双向链表维护各个节点,所以遍历时的效率和元素个数成正比,相较于和容量成正比的 HashMap 来说,迭代效率会高很多。逻辑结构如下图所示,它是在HashMap基础上在各个节点之间维护一条双向链表,使得原本散列在不同 bucket 上的节点、链表、红黑树有序关联起来。​。

2024-11-14 10:46:34 805

原创 深度解析 Java HashMap 源码:揭开哈希表背后的秘密

HashMap 主要用来存放键值对,它基于哈希表的 Map 接口实现,是常用的 Java 集合之一,是非线程安全的。HashMap可以存储 null 的 key 和 value,但 null 作为键只能有一个,null 作为值可以有多个JDK1.8 之前 HashMap 由 数组+链表 组成的,数组是 HashMap 的主体,链表则是主要为了解决哈希冲突而存在的(“拉链法”解决冲突)。JDK1.8 以后的HashMap。

2024-11-14 10:14:42 998

原创 解读 DelayQueue 源码:探究其精妙的设计架构与实现细节

DelayQueue是 JUC 包(为我们提供的延迟队列,用于实现延时任务比如订单下单 15 分钟未支付直接取消。它是的一种,底层是一个基于实现的一个无界队列,是线程安全的BlockingQueue 的实现类DelayQueue中存放的元素必须实现Delayed接口,并且需要重写getDelay()方法(计算是否到期)。默认情况下,DelayQueue会按照到期时间升序编排任务。只有当元素过期时(getDelay()方法返回值小于等于 0),才能从队列中取出。

2024-11-14 09:49:48 675

原创 Java 集合常见面试题全解(上):助你轻松应对面试

先来看一下Collection接口下面的集合。ListArrayListObject[]数组。深度解析 ArrayList。VectorObject[]数组。LinkedList:双向链表(JDK1.6 之前为循环链表,JDK1.7 取消了循环)。LinkedList 源码深度分析与应用指南。SetHashSet(无序,唯一): 基于HashMap实现的,底层采用HashMap来保存元素。是HashSet的子类,并且其内部是通过来实现的。TreeSet(有序,唯一): 红黑树(自平衡的排序二叉树)。

2024-11-13 11:21:33 1337 1

原创 开发者必备:LinkedList 源码深度分析与应用指南

LinkedList是一个基于双向链表实现的集合类,经常被拿来和ArrayList做比较。关于LinkedList和ArrayList的详细对比,我们Java 集合常见面试题总结(上)有详细介绍到。双向链表另外,不要下意识地认为LinkedList作为链表就最适合元素增删的场景。我在上面也说了,LinkedList仅仅在头尾插入或者删除元素的时候时间复杂度近似 O(1),其他情况增删元素的平均时间复杂度都是 O(n)。

2024-11-13 11:14:58 1104

原创 深度解析 ArrayList:揭开源码背后的设计与实现原理

ArrayList的底层是数组队列,相当于动态数组。与 Java 中的数组相比,它的容量能动态增长。在添加大量元素前,应用程序可以使用操作来增加ArrayList实例的容量。这可以减少递增式再分配的数量。ArrayList继承于,实现了ListCloneable这些接口。List表明它是一个列表,支持添加、删除、查找等操作,并且可以通过下标进行访问。这是一个标志接口,表明实现这个接口的List集合是支持快速随机访问的。在ArrayList中,我们即可以通过元素的序号快速获取元素对象,这就是快速随机访问。

2024-11-13 10:54:33 1108

原创 Java的六大排序

先创建左右两个临时数组来存储左右两部分已排序的数组,然后通过比较将较小的元素依次放回原数组,最后将剩余的元素也放回原数组。通过一趟排序将待排序的数据分割成两部分,其中一部分的所有元素都比基准元素小,另一部分的所有元素都比基准元素大。采用分治策略,将待排序序列分成两部分,分别对这两部分进行排序,然后将排序好的两部分合并成一个有序序列。,如果是,则将数组分成左右两部分,分别对左右两部分进行归并排序,然后再将两部分已排序的数组合并。把待排序的元素插入到已经排序好的部分序列中的合适位置,使得插入后的序列仍然有序。

2024-11-12 13:53:56 940 1

原创 关于Springboot 最常见的面试题

Spring Boot是Spring开源组织下的子项目,是Spring组件一站式解决方案,主要简化了Spring的使用难度,简省了繁重的配置,提供了各种启动器,使开发者能快速上手。

2024-11-12 11:17:24 957

springboot001基于SpringBoot的在线拍卖系统录像.mp4

springboot001基于SpringBoot的在线拍卖系统录像.mp4

2023-12-24

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除