自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 一个基于纯前端的图片压缩工具(附源代码与在线地址)

在当今数字化时代,高质量图片已经成为网站和应用不可或缺的一部分。然而,高分辨率图片通常伴随着大文件体积,这会导致网页加载速度变慢,影响用户体验。为了解决这个问题,我开发了一个纯前端的图片压缩工具(免费),让用户能够在不上传图片到服务器的情况下,直接在浏览器中完成图片压缩。这个纯前端图片压缩工具通过浏览器原生API,为用户提供了简单高效的图片压缩解决方案。无需安装任何软件,无需上传图片到云端,保护用户隐私的同时,也节省了服务器资源。

2025-05-03 14:19:48 699

原创 后端开发中的枚举类详细讲解

枚举类(Enum)是一种特殊的数据类型,它限制变量只能取预先定义好的一组常量值。这些值通常是一组相关的常量,比如一周中的天数、月份、颜色等。简单理解:枚举就像是一个装有固定选项的盒子,我们只能从盒子中选择已有的选项,而不能使用盒子外的值。枚举类是一种强大的编程工具,它不仅仅是常量的集合,更是一种可以携带行为和属性的特殊类型。提高代码的类型安全性增强代码可读性和可维护性集中管理相关常量建立更强大的领域模型。

2025-05-03 00:06:29 1203

原创 详解TypeScript中的类型断言及其绕过类型检查机制

非空断言运算符!可选链操作符?告诉编译器“这肯定不是 null/undefined”只有在值不为 null/undefined 时才继续访问编译器通过,但运行时有风险编译和运行都更安全应谨慎使用更推荐断言方式类型推断可否修改无 const 断言一般类型(如 string[], { x: number })可修改使用as const字面量类型 + readonly 修饰不可修改(只读)// 类型谓词: pet is Fish。

2025-05-01 17:49:03 1097

原创 Spring 框架中的常见注解讲解

Spring 框架是一个功能强大的 Java 开发框架,广泛用于企业级应用开发。其中的注解机制极大地简化了配置过程,提高了开发效率。

2025-04-30 23:08:39 1084

原创 详解 MyBatis-Plus 框架中 QueryWrapper 类

功能:根据条件动态决定是否排序,以及升序或降序。参数condition:布尔值,是否应用排序。isAsc:布尔值,是否升序。columns:字段名。使用场景:动态控制排序逻辑,例如根据参数决定是否按年龄排序。示例功能:在 SQL 末尾追加自定义片段。参数sql:SQL 字符串。使用场景:需要添加特殊 SQL 语句,例如分页限制。示例// 在 SQL 末尾添加 LIMIT 10。

2025-04-30 23:08:12 2348 2

原创 一篇文章让你学会Java之List接口中的主要方法

List接口的这些方法使其成为处理有序集合的强大工具。ArrayList:基于动态数组,适合随机访问(getset快),但插入删除较慢。LinkedList:基于双向链表,适合频繁插入和删除(addremove快),但随机访问较慢。Vector:线程安全的ArrayList,性能较低,现代开发中较少使用。

2025-04-26 21:29:57 974

原创 VO包装类和实体类分别是什么?区别是什么?

定义实体类用于表示数据库中的表结构,包含与数据库字段对应的属性,通常通过ORM框架(如JPA)与数据库交互。它是数据的持久化表示,负责存储和检索数据。场景假设数据库中有一个usersid(主键,自增)username(用户名)password(密码)email(邮箱)实体类示例以下是对应的UserEntity// 引入 JPA 相关注解,用于实体类与数据库表的映射// 使用 @Entity 注解标记该类为 JPA 实体类,表示这是一个与数据库表对应的 Java 类@Entity。

2025-04-26 17:37:28 934

原创 详解 Servlet 处理表单数据

Servlet 是运行在 Web 服务器上的 Java 程序,属于 Java EE(现称为 Jakarta EE)技术的一部分。它的主要功能是接收客户端(通常是浏览器)的 HTTP 请求,处理请求中的数据,并返回响应。例如,当用户在网页上提交表单时,Servlet 负责接收表单数据并进行处理。简单来说,Servlet 是连接前端网页和后端逻辑的桥梁。它可以处理用户输入、与数据库交互、生成动态网页等。定义了一个名为的类,它继承自,使其具备处理HTTP请求的能力。这个类专门用于处理用户登录逻辑。

2025-04-25 21:47:36 1082

原创 介绍 IntelliJ IDEA 快捷键操作

IntelliJ IDEA 是一款功能强大的集成开发环境,掌握其常用快捷键可以显著提升开发效率。但是有些小伙伴并不清楚有哪些快捷键操作,于是我整理出一些最实用和常见的快捷键操作,希望可以帮助大家。

2025-04-23 16:06:17 1118

原创 一篇文章让你学会Java之全局配置类

全局配置类是一种特殊的设计模式,用于集中管理应用程序中的各种配置项。配置分散:避免配置散落在代码各处重复定义:防止相同配置在多处重复定义易于修改:集中修改,避免漏改环境适配:方便在不同环境间切换配置@Service/** JDBC 操作模板,用于执行 SQL 查询与更新 *//** 本地缓存:存储从数据库加载的配置,以提升读取性能 *//*** 构造器注入 JdbcTemplate,并在服务启动时立即加载一次配置到缓存。

2025-04-20 15:37:27 927

原创 一篇文章让你学会Java之标识注解

标识注解是一种特殊的注解,其定义中不包含任何方法(也称作元素),它仅仅起到“标记”作用,表明某个程序元素具有特定的属性或者需要进行特殊处理。定义一个标识注解与定义其他注解类似,但不需要定义任何成员。@Retention(RetentionPolicy.RUNTIME) // 注解在运行时可被反射读取@Target({ElementType.TYPE, ElementType.METHOD, ElementType.FIELD}) // 指定可用的范围,可以同时用于类、方法和字段权限管理。

2025-04-20 15:36:59 825

原创 为什么 MySQL 选择使用 B+ 树作为索引结构?

MySQL选择B+树作为索引结构,是因为B+树能够在磁盘存储环境中提供高效的查询性能。它的自平衡特性、支持高效的范围查询、减少磁盘I/O操作以及能够处理大规模数据集的能力,使其成为关系数据库索引的理想选择。B+树在处理频繁的增删改查操作、提高数据访问速度以及范围查询时表现出色,这些特点都符合MySQL数据库系统的需求。高效的范围查询:B+树是一种自平衡的树结构,所有的叶子节点都在同一层,因此支持高效的范围查询。

2025-04-06 16:26:21 1197

原创 详解数据库的脏读、不可重复读和幻读

还是假设有一个银行账户的余额记录,账户 ID 为 1,初始余额为 1000 元。此时事务 A 得到了与第一次不同的余额,从 1000 元变为 1500 元,这就是不可重复读的现象。假设有一个银行账户的余额记录,账户 ID 为 1。现在有两个事务,分别为事务 A 和事务 B。这次返回的结果中,除了之前的记录外,还多了一条刚刚插入的新记录,即“张三”。插入了一条新记录,其部门为 ‘Sales’,并提交了事务。事务 B 修改并提交后,账户余额变为 1500 元。此时事务 A 读取了账户余额为 1000 元。

2025-04-06 16:10:09 423

原创 详解 MySQL 索引的最左前缀匹配原则

最左前缀匹配原则是 MySQL 利用复合索引优化查询性能的重要规则。理解和正确应用这一原则,不仅能让查询更高效,还能帮助设计更合理的索引结构。关键在于确保查询条件从索引的最左侧开始连续覆盖,这样 MySQL 才能充分利用索引带来的性能优势。

2025-04-05 21:06:59 428

原创 详解 MySQL 三层 B+ 树能存多少数据的计算方法

内部节点最大索引键数n⌊P−BAB⌋Fn1n⌊ABP−B​⌋Fn1叶子节点数据记录数L⌊PD⌋L⌊DP​⌋三层 B+ 树总存储能力Tn12×LTn12×L。

2025-04-05 21:06:42 892

原创 详解使用 MySQL 的 EXPLAIN 语句进行查询分析

MySQL 的 EXPLAIN 语句可以帮助我们了解查询的执行计划,从而优化 SQL 语句的性能。

2025-04-04 17:40:18 969

原创 详解在 MySQL 中建索引时的注意事项

总之,建立索引时需要综合考虑数据分布、查询频率以及写操作的负担,进行合理的权衡和设计。建议在生产环境中对查询执行计划进行测试和优化,确保索引真正起到提升性能的作用。

2025-04-04 16:41:51 306

原创 MySQL 三层 B+ 树能存多少数据?( 超详细计算步骤 )

下面给出一种用字母表示的完整推导过程,假设我们有如下符号定义:在 B+ 树中,内部节点存储键和指向子节点的指针,而叶子节点存储数据项(键值及相应数据)。这里假设:内部节点所占用的空间为:空间=n×A+(n+1)×B\text{空间} = n \times A + (n+1) \times B空间=n×A+(n+1)×B要求该空间不超过页大小 P,因此有不等式:n×A+(n+1)×B≤Pn \times A + (n+1) \times B \le Pn×A+(n+1)×B≤P将不等式整理:nA+nB+B≤P

2025-04-03 18:27:49 936

原创 详解 MySQL 中的索引

索引是 MySQL 数据库性能优化的重要工具,但其设计和使用需要权衡查询性能和写入性能之间的平衡。在实际项目中,根据业务需求、数据量大小以及查询频率等因素,合理规划和调整索引,才能达到最佳的性能表现。

2025-04-03 18:26:28 1712

原创 详解 MySQL InnoDB 引擎中的聚簇索引和非聚簇索的区别

聚簇索引:数据按照索引顺序存储在磁盘上,只有一个,通常是主键索引。非聚簇索引:索引结构独立于数据存储,包含指向数据的指针,可以有多个。

2025-04-02 16:16:35 1001

原创 详解 MySQL 常见的存储引擎及它们之间的区别

InnoDB 支持事务和外键,更适合需要严格数据一致性和高并发处理的场景,而 MyISAM 则更适合读密集型应用。Memory 存储在内存中,速度快但数据易失;CSV 和 Archive 则分别适合数据交换和归档需求。Federated 实现跨服务器数据访问,Blackhole 用于数据丢弃,Merge 则用于逻辑上合并多个表的数据。

2025-04-02 15:36:52 713

原创 详解Maven的主要生命周期

Maven 是一个流行的构建工具,用于 Java 项目的自动化构建和管理。Maven 定义了一系列的生命周期,每个生命周期包含多个阶段。

2025-04-01 22:07:37 509

原创 TypeScript 中 await 的详解

通过使用,我们可以编写出逻辑清晰、易于调试和维护的异步代码。await只能在 async 函数内使用;async 函数返回 Promise,内部的同步错误会转换为 Promise 的拒绝状态;合理使用 try/catch 和.catch()进行错误处理;对于多个互不依赖的异步操作,建议采用并行执行方式(如或)以提升性能;需注意 HTTP 响应状态码、循环中的异步处理以及 top-level await 的环境要求。同时需要认识到,

2025-04-01 22:06:01 935

原创 详解Armstrong公理

Armstrong公理是一套规则,用来推导“函数依赖”关系。函数依赖是关系数据库设计中的核心概念,它指的是某个属性或属性组合能够决定另一个属性或属性组合的值。例如,如果我们知道某个学生的学号(假设学号是唯一的),那么我们就能知道这个学生的姓名、年龄等其他信息。Armstrong公理是帮助我们推导函数依赖关系的一组规则。它可以帮助我们从已知的函数依赖关系出发,推导出更多的依赖关系,从而更好地理解数据之间的联系。在数据库设计中,这些规则非常有用,尤其是在规范化过程中,帮助设计出更高效、更一致的数据库结构。

2025-03-29 15:48:16 750

原创 详解接口的常见请求方式

项目初始化与依赖添加:确保项目中包含依赖。Controller 实现:使用不同的映射注解(如等)来处理不同请求类型,并通过和处理参数。启动与测试:启动应用后,通过工具测试各个接口是否符合预期。这种实现方式不仅遵循 RESTful 风格,也使得前后端交互更为清晰和易于维护。接口请求方式是前后端数据交互的基础,不同的 HTTP 方法对应着不同的操作语义和数据处理方式。遵循 RESTful API 设计原则,保持数据操作的明确性,确保系统的安全性与稳定性。

2025-03-25 23:43:49 1047

原创 详解Spring Boot 中的 AOP 切面

Spring Boot 的 AOP 提供了一种强大的方式来处理应用中的横切关注点,通过切面、通知、切入点等机制,将日志记录、事务管理、安全验证等功能从业务代码中分离出来。这样不仅提高了代码的复用性和可维护性,也让业务逻辑更加清晰和专注。

2025-03-25 23:02:17 1046

原创 一篇文章让你明白什么是 Token

Token 是文本处理和语言模型的基本单位,通过将文本拆分为一个个离散的 token,我们能够让计算机更好地理解和生成自然语言。分词策略(如 BPE、WordPiece 等)的选择会直接影响模型的性能和效率。理解 token 的概念及其在模型中的应用,对于设计和使用现代 NLP 模型至关重要。

2025-03-24 23:04:51 663

原创 详解堆排序(超详细)

构建大顶堆从最后一个非叶子节点开始,依次对每个节点进行堆化,构建大顶堆。排序过程将堆顶元素与数组的最后一个元素交换,减小堆的大小。对新的堆顶元素执行堆化,恢复堆的性质。重复上述过程直到堆的大小为 1。对于长度 n=5 的数组,最后一个非叶子节点索引为所以从索引 1 开始往前(包括索引 0)依次堆化。构建大顶堆从最后一个非叶节点开始,依次对节点进行堆化,构建一个大顶堆。排序过程将堆顶(最大值)与数组末尾交换,把最大值固定到正确位置;

2025-03-24 22:59:14 1309

原创 一篇文章让你明白 Cookie 和 Session

Cookie主要用于存储少量、非敏感的客户端数据,帮助服务端识别用户;Session则将大部分数据存储在服务器端,通过 Session ID 实现会话管理和状态保持,安全性更高但服务器资源占用较多。二者经常结合使用:服务器将 Session ID 存储在 Cookie 中,而所有具体数据则保存在服务器上,从而既保证了数据的安全性,也实现了高效的会话管理。

2025-03-23 16:39:03 1085

原创 一篇文章让你学会Java之Map接口

在 Java 中,Map 是一种非常重要的数据结构,用于存储键值对(key-value pairs),它提供了一种将键映射到值的机制。

2025-03-23 16:38:42 865

原创 详解二叉平衡树

二叉平衡树(Balanced Binary Tree)是一种在操作效率上非常优秀的数据结构,其核心思想是保持二叉树的“平衡”,从而使树的高度尽可能低,以保证搜索、插入和删除操作都能在对数时间内完成。

2025-03-22 16:05:56 834

原创 详解简单选择排序

简单选择排序的核心在于每一次找到剩余元素中的最小值,并将其交换到当前排序区域的末尾。虽然该算法时间复杂度较高(O(n²)),但其逻辑简单、实现容易,对于数据量较小或者对性能要求不高的场景是个不错的选择。

2025-03-22 15:23:12 1112

原创 详解TCP的三次握手

三次握手的过程保证了双方都能同步初始序列号,确保后续数据传输的正确排序和完整性。这一过程还防止了旧连接残留数据对新连接的干扰,确保每次建立的新连接都是干净的。三次握手虽然需要三次往返的通信,但在可靠性和效率之间达到了良好的平衡。通过这个过程,TCP 协议实现了连接双方之间的可靠通信基础,为后续的数据传输提供了保障。第一次握手:客户端发送一个带有 SYN 标志的报文,并设置初始序列号。第二次握手。

2025-03-21 22:48:29 837

原创 详解MySQL的事务实现机制

在MySQL中(主要以InnoDB为例),事务的实现依赖于多个机制协同工作,确保ACID特性(原子性、一致性、隔离性、持久性)

2025-03-21 14:00:57 734

原创 详解Springboot的启动流程

加载 Bean 定义Spring Boot 通过扫描(Component Scan)、配置类(@Configuration)等方式加载所有需要注册的 Bean 定义。上下文刷新(refresh())在调用refresh()BeanFactory 的初始化注册所有的 Bean 定义、处理依赖注入、应用 AOP 等;BeanPostProcessor 的应用在 Bean 实例化前后进行各种处理,如注解解析、事务增强等;事件发布在关键时刻触发相应的启动事件通知注册的监听器。入口调用与环境准备。

2025-03-20 19:58:16 985

原创 列举常见算法的时间复杂度与空间复杂度

算法最优时间复杂度平均时间复杂度最差时间复杂度空间复杂度冒泡排序 (Bubble Sort)O(n)O(n²)O(n²)O(1)选择排序 (Selection Sort)O(n²)O(n²)O(n²)O(1)插入排序 (Insertion Sort)O(n)O(n²)O(n²)O(1)归并排序 (Merge Sort)O(n log n)O(n log n)O(n log n)O(n)快速排序 (Quick Sort)O(n log n)

2025-03-20 19:06:00 930

原创 详解MySQL的索引类型有哪些

B+树索引哈希索引R-树索引(空间索引)全文索引聚集索引(Clustered Index)辅助索引(Secondary Index)自适应哈希索引主键索引唯一索引普通索引组合索引全文索引空间索引

2025-03-19 15:34:30 599

原创 详解过程内聚、时间内聚、顺序内聚、逻辑内聚

顺序内聚:强调数据依赖和连续处理,模块内部的操作彼此紧密联系,是内聚性较高的一种形式。过程内聚:强调固定的执行步骤,虽然步骤之间可能不直接依赖数据,但它们被安排成一个固定流程。时间内聚:基于时间或阶段的相关性将操作组织在一起,常用于初始化或清理任务。逻辑内聚:基于逻辑上相似的功能将操作组合,但这些操作之间实际联系较弱,容易导致模块内部功能分散。

2025-03-19 15:03:39 389

原创 MySQL中的事务隔离级别有哪些

可能发生脏读、不可重复读、幻读,性能最高但安全性最低。:防止脏读,但可能发生不可重复读和幻读。REPEATABLE READ(MySQL 默认):防止脏读和不可重复读,MySQL 还能避免幻读,适用于大多数高并发业务。:所有并发问题都能避免,但性能最差。MySQL 默认采用,主要是因为 MySQL 通过MVCC解决了大部分的并发问题,既能保持较高的事务隔离级别,又不会影响太多的性能。读未提交(Read Uncommitted)该级别允许事务读取其他事务尚未提交的数据(脏读)。

2025-03-18 23:11:23 3091

原创 一篇文章让你学会Java之接口

Java 中的接口(Interface)是一种抽象类型,是行为的规范,用来规定实现类需要提供的行为。接口中只有方法的声明(从 Java 8 开始可以包含一些方法的实现)。它是一种比抽象类更加彻底的抽象形式,适合在设计应用程序框架或多态调用时使用。

2025-03-18 22:31:12 982

空空如也

空空如也

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

TA关注的人

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