- 博客(46)
- 收藏
- 关注
原创 Mysql事务
原子性、一致性、持久性:是通过底层的两个日志文件来实现的,redo log 、undo log是通过底层的两个日志文件来实现的,redo log 、undo log隔离性:是通过锁机制和MVCC(多版本并发控制)来实现的。
2025-12-22 14:43:43
911
原创 基于Redis的BitMap数据结构实现签到业务
Redis BitMap实现高效签到系统 本文介绍了使用Redis BitMap实现用户签到功能的技术方案。相比传统MySQL存储方式,BitMap能极大节省存储空间(每月仅需2字节),通过0/1标识签到状态。核心实现包括: 使用SETBIT/GETBIT命令记录和查询签到状态 采用BITFIELD命令查询多日签到数据 通过BITPOS查找首次签到/未签到日期 SpringBoot整合实现签到接口和连续签到统计 基于RabbitMQ的签到奖励机制 利用BitMap解决缓存穿透问题 该方案显著提升了系统性能
2025-12-15 11:16:15
899
原创 个性化推荐:基于用户的协同过滤算法
个性化推荐系统通过分析用户行为数据,实现"千人千面"的精准内容匹配。其核心算法包括基于用户的协同过滤(UserCF)和基于物品的协同过滤(ItemCF),前者通过寻找相似用户推荐内容,后者基于物品相似度进行推荐。系统评估需兼顾准确度、覆盖率、多样性等指标。冷启动问题通过兴趣收集、热门推荐和内容特征匹配等策略解决。随着算法优化,推荐系统正从单纯提升点击率向平衡用户体验与商业价值的方向发展。
2025-12-08 11:21:04
629
原创 Mysql锁
MySQL锁机制分为全局锁、表级锁和行级锁三类。全局锁锁定整个数据库实例,主要用于备份场景;表级锁包括意向锁(协调表锁与行锁)、元数据锁(保护表结构)和表锁(共享读锁/独占写锁);行级锁细分为行锁(共享/排他)、间隙锁(防止幻读)和临键锁(行锁+间隙锁),其中临键锁是解决幻读问题的核心机制。不同锁的粒度和作用场景各有侧重,共同保障数据一致性和并发性能。InnoDB引擎通过意向锁优化表锁检查效率,元数据锁则避免DML与DDL冲突。
2025-12-01 11:03:25
585
原创 Spring 中 Application 相关 Bean 自注入解析
本文详细解析了Spring/SpringBoot中Bean自注入的场景、问题与解决方案。自注入指Bean内部通过依赖注入引用自身实例,常见于事务管理、异步调用等场景。直接自注入会导致初始化顺序冲突,引发异常。文中提出5种解决方案:1)通过ApplicationContext间接获取;2)使用@Autowired+@Lazy延迟注入;3)自定义@SelfReference注解;4)利用AopContext获取代理实例;5)通过@Resource按名称注入。其中@Lazy方案最为推荐,兼顾简洁性与稳定性。文章还
2025-11-24 11:10:54
870
原创 Xshell-SSH服务连接远程服务器
本文介绍了Xshell的下载安装方法及服务器项目部署流程。Xshell提供免费版供个人非商业使用,需从官网填写信息获取下载链接。服务器部署方面,详细讲解了通过Xshell连接服务器后启动项目的两种方式:前台运行(Ctrl+C终止)和后台运行(使用&符号)。重点阐述了如何实现项目永久运行:1)使用nohup命令使项目在终端关闭后持续运行;2)推荐使用screen创建虚拟会话,通过Ctrl+A+D组合键脱离会话,确保项目在Xshell断开后仍正常运行。文中还包含进程查看、日志重定向等实用操作说明,解决了
2025-11-17 10:27:27
949
原创 JWT身份认证技术Ⅰ原理篇
JWT是一种基于JSON的开放标准令牌,由Header、Payload和Signature三部分组成,用于安全传输信息。它具有紧凑、自包含和安全的特点,适用于无状态认证场景。与传统Session相比,JWT在扩展性、跨域支持和安全性方面更具优势,但也存在无法主动撤销令牌等缺点。在Spring Security中集成JWT主要通过自定义过滤器实现无状态认证流程,包括登录时生成JWT和资源访问时的验证机制。关键配置包括设置无状态会话、调整过滤器位置和禁用CSRF防护。
2025-11-09 09:40:16
869
原创 算法 - 差分
差分算法通过构建差分数组/矩阵,将对原始数据的复杂区间操作转化为对差分数据特定端点的简单操作,实现高效区间修改。一维差分通过修改区间两端点完成O(1)时间复杂度的区间增减;二维差分则利用扩展矩阵避免边界判断,通过修改四个端点实现子矩阵操作。该算法适用于批量数据区间调整(如价格折扣、图像处理)和区间覆盖统计等场景,可大幅提升处理效率。典型应用包括航班预订统计、拼车问题等,通过巧妙的前缀和计算还原原始数据。
2025-11-01 11:12:09
1070
原创 最小生成树(Minimum Spanning Tree,简称 MST)
本文介绍了最小生成树(MST)的概念及其两种经典算法:Prim算法和Kruskal算法。最小生成树用于在带权无向连通图中找到连接所有顶点的总成本最低的子图。Prim算法采用贪心策略,逐步选择与当前树相连的最小权边,适合稠密图;Kruskal算法通过排序边并利用并查集判断连通性,适合稀疏图。文中还给出了力扣1584题的两种解法代码示例,比较了两种算法的适用场景和实现方式。
2025-10-25 08:26:11
951
原创 高效查找数据的数据结构—MySQL 索引
本文系统介绍了数据库索引的核心概念与应用。主要内容包括:1)索引的定义及其优缺点,索引能提升查询效率但会增加写操作开销;2)B+Tree和Hash两种主流索引结构特点;3)聚集索引与二级索引的区别;4)索引语法操作;5)性能优化工具如慢查询日志、执行计划分析等;6)索引使用规则,包括最左前缀法则、索引失效场景、覆盖索引等。文章强调合理使用索引能显著提升查询性能,但需避免过度索引,并注意索引在不同场景下的适用性。
2025-10-16 08:51:49
768
原创 数据库丢失但没备份过?救星:二进制日志
作者在Haven项目与SoulSprout项目共用服务器时遭遇MySQL异常关闭导致数据丢失。通过分析发现:1)MySQL存在强制关闭线程的警告;2)二进制日志中存在DROP database危险操作记录。最终利用二进制日志(含完整DDL和DML记录)成功恢复数据,具体步骤包括:定位恢复起点(position 6966)、跳过DROP语句、重建数据库后执行精准恢复。建议采取每日全量备份+增量备份、优化MySQL配置(开启binlog并设置7天过期)、严格限制DROP权限等预防措施。该案例证明二进制日
2025-10-06 11:54:52
613
原创 Spring事务失效场景
本文总结了Spring事务失效的常见场景及解决方案。主要问题包括:1)非public方法导致事务代理失效;2)异常被捕获未重新抛出或类型不匹配;3)自调用问题绕过代理;4)传播行为设置不当;5)缺少事务管理器配置;6)数据库不支持事务(如MyISAM);7)错误的异常类型配置;8)不合理的事务超时设置。解决方案涉及方法修饰符调整、异常处理规范、代理对象调用、传播行为选择、事务管理器配置等。开发者需理解Spring事务原理,通过合理配置和规范编码避免事务失效,确保数据一致性。
2025-09-28 11:42:26
1053
原创 JWT 身份认证技术Ⅱ实战篇
JWT技术与Spring Security的集成方案,分为标准版和简化版两个模块。标准版详细讲解了JWT的结构原理、Spring Boot集成实现、安全最佳实践及与传统Session的对比,包含完整的认证流程、过滤器实现和安全配置。简化版专为初学者设计,提供核心功能的精简代码示例,包括JWT工具类、用户服务、安全配置和认证控制器。文章强调JWT的无状态、跨域支持等优势,同时给出密钥管理、令牌保护等安全建议,并对比了两种技术方案的适用场景。通过清晰的代码示例和分步指导,帮助开发者快速掌握JWT在
2025-09-20 11:09:51
1135
原创 Redis缓存机制
Redis缓存实战方案解析:通过介绍Redis缓存特性、添加步骤及常见问题解决方案,帮助开发者构建高效缓存系统。文章详细讲解了如何配置Redis连接、实现缓存更新策略(查询写入+更新删除),并针对缓存穿透(空值缓存/布隆过滤器)、雪崩(随机过期/集群部署)、击穿(互斥锁/逻辑过期)三大问题提供具体应对措施。最后推荐封装Redis工具类统一管理操作,强调合理运用缓存策略对提升系统性能的重要性,需根据业务场景持续优化缓存方案。
2025-07-08 12:05:44
915
原创 MySql多表查询完全指南:从基础概念到实战应用
多表查询是SQL核心技术,通过JOIN操作实现多个表的关联查询。主要内容包括:1.多表查询概念及重要性,解决数据分散问题;2.核心连接类型(INNER/LEFT/RIGHT/FULL JOIN)及适用场景;3.ON与WHERE的区别,UNION与UNIONALL的差异;4.聚合与分组查询、子查询与窗口函数等高级用法;5.实战示例涵盖一对一、一对多、多对多关联及自连接等场景;6.性能优化策略与最佳实践,如避免笛卡尔积、合理使用索引等。掌握多表查询能有效处理复杂业务数据需求。
2025-06-15 11:37:15
813
原创 Mysql-定时删除数据库中的验证码
在MySQL中,定时删除数据是一种常见的数据库维护操作,用于清理过期或不再需要的数据,以优化数据库性能和管理空间。MySQL从5.1.6版本开始引入了事件调度器(Event Scheduler),允许用户创建事件来定期执行特定任务,如删除特定时间之前的数据。
2025-06-07 21:55:22
1179
原创 复杂业务场景下 JSON 规范设计:Map<String,Object>快速开发 与 ResponseEntity精细化控制HTTP 的本质区别与应用场景解析
直接使用Map/对象转换 - 简单灵活,适用于临时接口;定义统一响应实体类 - 推荐方式,提供规范化和类型安全;使用Spring的ResponseEntity - 提供完整的HTTP响应控制。 重点对比了Map与ResponseEntity的区别:后者可控制状态码和响应头,更适合复杂场景。同时说明在Spring中返回ResponseEntity时无需@ResponseBody注解,因其已内置序列化功能。建议根据场景选择合适方案:简单接口用Map,规范化接口用统一实体类,需精细控制HTTP响应时用Resp
2025-06-01 20:23:36
1170
原创 PageHelper分页工具
通过 PageHelper,开发者可大幅简化分页逻辑,将更多精力聚焦于业务实现,是 MyBatis 项目中最常用的插件之一。上一页页码(不存在时为 0)下一页页码(不存在时为 0)当前页码(从 1 开始)
2025-05-26 10:13:16
1201
原创 JavaScript基础汇总
JavaScript是一种动态、弱类型的脚本语言,主要用于为网页添加交互功能。其核心内容包括基本语法、函数、作用域、内存管理、ES6+新特性、引入方式、基础语法、常用对象、BOM(浏览器对象模型)、DOM(文档对象模型)和事件监听。基本语法涉及变量声明(var、let、const)、数据类型(原始类型和引用类型)、运算符和流程控制。函数部分包括函数声明与表达式、箭头函数和参数传递。作用域分为全局与局部作用域,闭包是函数内部访问外层变量的机制。内存管理涉及垃圾回收和内存泄漏。ES6+新特性包括let、cons
2025-05-19 09:25:46
994
原创 异常处理器深度解析与实践指南
**全局异常处理器的作用**:自动捕获未被处理的异常,包括运行时异常和自定义异常。但有些情况下,开发者需要显式地抛出异常,以便异常处理器能够捕获并进行相应的处理。**何时需要手动抛出异常**:比如在业务逻辑中,当遇到无效参数、权限不足、数据不存在等情况时,主动抛出对应的自定义异常,让异常处理器统一处理,而不是在每个地方都处理错误逻辑。 **不抛出异常的情况**:如果某个异常已经被try-catch块捕获并处理,那么异常处理器就不会再处理它。但如果开发者希望异常被全局处理器处理,就需要在catch块
2025-05-08 15:38:17
1108
原创 Git 全面解析:从核心概念到生态应用
Git 不仅是一个版本控制工具,更是现代软件开发协作的基础设施。从单机小项目到跨国开源社区,其分布式架构、高效分支模型和生态扩展性,支撑了全球数以亿计的开发者协同工作。掌握 Git 的核心原理(如对象模型、引用机制)与最佳实践(如分支策略、代码审查流程),能显著提升团队开发效率,降低协作成本。未来,随着 DevOps 和云原生的发展,Git 仍将在软件工程中扮演核心角色。
2025-04-27 21:22:47
1022
原创 Spring 事务管理核心机制与传播行为应用
Spring 事务管理基于 AOP(面向切面编程)实现,通过 声明式事务(注解或 XML 配置)统一管理数据库操作,确保数据一致性。核心目标:保证多个数据库操作的原子性(要么全部成功,要么全部回滚)。核心优势:解耦业务代码与事务管理:通过注解配置,无需侵入业务逻辑。支持多种事务管理器:如 JDBC、Hibernate、JPA 等。灵活的事务传播行为:控制事务的边界和嵌套逻辑。需求:用户 A 向用户 B 转账,需保证扣款和存款操作同时成功或失败。(2) 数据层(DAO)三、Spring 事务
2025-04-20 17:13:03
932
原创 Spring AOP 全解析:从核心概念到实战案例
AOP(面向切面编程) 是一种编程范式,用于将系统中横切关注点(如日志、事务、权限校验)与核心业务逻辑解耦。通过代理模式实现,在不修改原有代码的基础上,动态增强功能。核心思想:将通用功能(如日志)从业务代码中抽离,以“切面”形式统一管理,通过动态代理织入到目标方法中。
2025-04-12 20:21:14
1040
原创 Spring IOC:容器管理与依赖注入秘籍
在 Spring 里,@Component注解可把一个类标记成 Spring Bean,让 Spring 容器能够对其进行管理。此外,Spring 还提供了功能和@Component一样的三个注解,分别是@Service和。:一般用在数据访问层(DAO 层),代表这是一个数据仓库类。@Service:常用于业务逻辑层(Service 层),代表这是一个业务服务类。:一般用于表现层(Controller 层),代表这是一个控制器类。// 数据访问层// 业务逻辑层@Service。
2025-04-01 19:38:54
1310
原创 算法-深度优先搜索DFS
开始for循环遍历每一个地图节点,只有#是符合DFS的节点(即有符合题意的相邻节点),因此每个#都要用dfs搜索一遍。从1开始遍历不断dfs深搜,一定要从头到尾看代码把所有结果捋一遍,dfs函数返回到哪里,返回之后执行什么逻辑?因为要遍历整个地图(图),并且符合题意的节点都有要搜索的相邻节点,搜索相邻节点就需要用DFS。开始for循环遍历每一个小朋友,每一个小朋友都符合题意(即有相邻节点),因此每个小朋友都要用dfs搜索一遍。要保证前一位的数字大于后一位的,则后一位要从上一位的数字+1开始遍历。
2025-03-20 20:34:00
1410
原创 算法-二分查找
二分查找算法二分查找算法二分查找的前提是数据集合必须是(升序或降序)。它每次将查找范围缩小一半,通过比较目标值与中间元素的值,决定下一步在左半部分还是右半部分继续查找,直到找到目标值或者查找范围为空。
2025-03-14 17:37:57
1177
原创 Java 内部类
匿名内部类是一种没有名字的内部类,它可以在使用的地方直接创建并实例化,通常用于实现接口或继承抽象类。由于没有类名,所以它只能使用一次。静态内部类是定义在另一个类(外部类)内部,并且使用static关键字修饰的类。// 静态内部类// 静态内部类的成员System.out.println("这是静态内部类的方法");成员内部类是定义在外部类内部的普通类,它与外部类的成员变量和成员方法处于同一层级。// 外部类// 外部类的成员变量// 成员内部类// 内部类的成员变量// 内部类的方法。
2025-03-10 10:06:37
791
原创 Java Web-Filter
FilterFilter在 Java Web 开发中,Filter(过滤器)是 Servlet 规范中的一个重要组件,它可以对客户端与服务器之间的请求和响应进行预处理和后处理。
2025-03-02 12:11:50
1858
原创 Java Web-JSP
JSP是Java Web开发的重要历史技术,适合快速开发小型应用或维护遗留项目。现代开发中更推荐使用模板引擎或前后端分离架构,但理解JSP有助于深入掌握Servlet和MVC原理。学习时需注意结合EL、JSTL避免脚本代码,保持代码整洁。
2025-02-17 09:32:32
1048
原创 Java Web-MyBatis
MyBatis简介MyBatis简介MyBatis 是一个优秀的 Java 持久层框架,它可以帮助开发者将 Java 对象映射到数据库表,并执行 SQL 语句来操作数据库。以下从基础概念、核心组件、使用步骤及代码示例等方面详细介绍:一、基础概念MyBatis 允许开发者使用 XML 或注解来配置和映射原生信息,将 Java 接口和 POJO(Plain Old Java Objects,普通 Java 对象)映射成数据库中的记录。
2025-02-06 14:33:50
1137
原创 Java Web-Cookie与Session
Session 是服务器端的会话机制,服务器会为每个客户端(浏览器)创建一个唯一的 Session 对象,用于存储该客户端在整个会话期间的相关数据。客户端通过一个唯一的 Session ID 来与服务器的 Session 对象进行关联。
2025-01-26 18:32:15
967
原创 Java Web-Request与Response
Request(请求对象)在 Java Web 开发中,Request和Response是两个非常重要的对象,用于在客户端和服务器之间进行请求和响应的处理,以下是详细介绍:Request(请求对象)在 Java Web 开发中,通常涉及到的request对象主要是指。
2025-01-25 14:24:03
1029
原创 Java Web-Tomcat Servlet
Web 服务器是一种软件程序,它主要用于在网络上接收和处理客户端(如浏览器)发送的 HTTP 请求,并返回相应的网页内容或数据。
2025-01-24 13:59:13
2443
原创 Java Web-JDBC详解
JDBC(Java Database Connectivity)是 Java 程序连接数据库的标准 API(Application Programming Interface)。它为 Java 开发人员提供了一种统一的方式,使 Java 程序能够与各种不同的数据库管理系统(DBMS)进行交互。通过 JDBC,开发人员可以执行 SQL 语句,包括查询、更新、插入和删除操作,以实现对数据库的操作。
2025-01-18 12:49:19
861
原创 Java web-MySql数据库与SQL语句
数据库基础概念MySQL与SQLSELECTINSERTUPDATEDELETE总之,,它实现了 SQL 标准并提供了一些额外的功能。SQL分类1. DDL(Data Definition Language - 数据定义语言)用于定义和管理数据库对象,如数据库、表、索引等。
2025-01-16 17:58:55
1066
原创 数据结构-链表
由于不必须按顺序存储,链表在插入的时候可以达到O(1)的复杂度,比另一种线性表顺序表快得多,但是查找一个节点或者访问特定编号的节点则需要O(n)的时间,而线性表和顺序表相应的时间复杂度分别是O(logn)和O(1)。插入节点,以2插入1和3举例。是先新节点.next=temp.next,然后再temp.next=新节点,即2先指向3,再让1指向2。链表作为一种基础且灵活的数据结构,在算法设计和系统实现中扮演着重要角色。,结点可以在运行时动态生成。,数据元素的逻辑顺序是通过链表中的引用链接次序实现的.
2025-01-05 10:24:47
851
原创 JAVA-IO流(九周目)
序列化流()用于将Java对象写入到输出流中,实现对象的持久化存储或网络传输。反序列化流()用于从输入流中读取Java对象,实现对象的重构。使用序列化流和反序列化流时,需要确保对象实现了接口,并且注意类的兼容性问题。序列化流和反序列化流在分布式计算、对象持久化、网络通信等领域有着广泛的应用。序列化多个对象,采用集合的方式,将对象全部放进集合。这样反序列化的时候直接读集合就好了,不需要知道对象个数了。打印流。
2024-12-07 21:55:46
996
原创 JAVA异常详解(八周目)
异常抛出与捕获是Java异常处理机制的两个核心组成部分。通过抛出异常,我们可以将错误信息从问题发生点传播到能够处理它的地方。而通过捕获异常,我们可以在适当的位置处理这些错误,确保程序的稳定性和可靠性。自定义异常在捕获与抛出的综合运用的例子中我们发现,没有一个合适的异常能够准确描述姓名异常与年龄异常。自定义异常便可以解决这个问题在Java编程中,自定义异常是通过继承Exception类(或其子类)来实现的。
2024-11-30 20:37:11
885
原创 CSS基础汇总(七周目)
CSS重要知识点CSS(Cascading Style Sheets,层叠样式表)是用于控制网页样式的一种技术,它允许开发者设置HTML页面中的文本内容、图片外形以及版面布局等外观显示样式。以下是对CSS知识点的总结:一、CSS基础 定义与功能: CSS全称为层叠样式表,主要用于设置HTML页面中的文本内容(如字体、大小、对齐方式等)、图片的外形(如宽高、边框样式、边距等)以及版面的布局等外观显示样式。 CSS以HTML为基础,提供了丰富的功能,如字体、颜色、背景的控制以及整体排版等
2024-11-24 17:06:11
868
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅