- 博客(22)
- 收藏
- 关注
原创 Java 登录方案演进:从 Session 到 SSO,你的项目该选哪一种?
摘要:Java Web开发中用户登录功能涉及多种技术方案。传统Session+Cookie方式简单但扩展性差,JWT+Redis方案成为主流,实现无状态且支持多端。安全框架可选Spring Security(功能强大但复杂)、Shiro(轻量)或Sa-Token(简单高效)。微服务架构需采用SSO/OAuth2方案,如Keycloak或Spring Authorization Server。根据项目规模选择:小型项目用Sa-Token,标准应用选JWT+Redis,大型系统用Spring Security,
2025-11-21 18:09:33
1055
原创 Cookie,Session,Token
本文介绍了三种Web会话管理技术:Cookie、Session和Token。Cookie是浏览器存储的客户端数据,通过HTTP头在服务器和浏览器间传递;Session则是服务器存储用户会话数据,通过Session ID识别用户,但存在扩展性问题;Token(如JWT)通过签名验证实现无状态会话,解决了Session的扩展性问题。文章详细说明了三种技术的实现原理、优缺点及适用场景,重点分析了JWT的数据结构(Header、Payload、Signature)和安全机制,并提出了Access Token与Ref
2025-11-21 16:36:46
1180
原创 【黑马点评|项目日记】第七天 秒杀优化
异步秒杀优化方案摘要 该方案针对传统串行秒杀流程(查询优惠券、库存判断、订单校验等6个步骤)进行优化,采用Redis+Lua+异步队列实现高性能秒杀。主要优化点包括: 将库存判断、一人一单校验等逻辑移到Redis中执行,使用Lua脚本保证原子性 快速校验通过后直接返回成功,下单操作异步执行 采用阻塞队列缓冲下单请求,避免线程池资源耗尽 单独线程从队列中消费消息完成实际下单操作 实现步骤: 新增秒杀券时同步库存到Redis 用户请求时执行Lua脚本校验库存和用户资格 校验通过将订单信息放入阻塞队列 异步线程处
2025-06-08 20:52:17
961
原创 【黑马点评|项目日记】第六天 分布式锁-redission
Redission分布式锁功能解析 Redission解决了传统Redis分布式锁的四大问题:重入性、不可重试、超时释放和主从一致性。它提供可重入锁功能,使用hash结构存储锁信息,通过Lua脚本保证原子性操作。锁重试机制允许获取失败后继续尝试,WatchDog机制自动续期防止业务未完成锁提前释放。在集群环境下,Redission通过多节点加锁避免主从切换导致的锁失效。使用上只需简单注入RedissonClient,调用tryLock方法即可实现分布式锁功能,比原生Redis方案更安全可靠。
2025-06-01 21:41:30
1756
原创 从零开始的数据结构教程(八)位运算与状态压缩
本文介绍了位运算的核心原理及其在状态压缩和算法优化中的应用。主要内容包括: 位运算基础:讲解了6种基本位操作(AND、OR、XOR、NOT、左移、右移),并提供了判断奇偶、提取最低位1(lowbit)等实用技巧。 状态压缩技术:通过二进制数表示集合,实现高效的集合操作(添加、移除、检查元素),并以旅行商问题(TSP)为例展示了状态压缩动态规划的经典应用。 实战应用:探讨了布隆过滤器(Bloom Filter)的原理及其在海量数据去重中的作用,以及汉明重量(Hamming Weight)的计算方法。 位运算以
2025-05-31 17:11:11
1030
原创 从零开始的数据结构教程(七) 回溯算法
回溯算法是一种通过穷举所有可能解并适时回退的通用解法,其核心思想类似于迷宫探索中的"尝试-回退"策略。算法具有三大特征:决策树遍历、状态回退和剪枝优化。它广泛应用于排列组合问题(如全排列和组合总和)和约束满足问题(如N皇后问题)。通过递归实现时,需注意路径选择和状态恢复,并利用剪枝提高效率。N皇后问题还展示了如何优化冲突检测,使用数学关系快速判断位置合法性。
2025-05-31 16:58:27
1048
原创 一篇文章带你快速上手Spring Boot
Spring Boot 极速开发指南 Spring Boot 通过"约定大于配置"理念大幅简化 Java 应用开发。核心优势包括: 开箱即用的 Web 服务器 自动配置机制 Starter 依赖打包 开发只需三步: 使用 Spring Initializr 生成项目 添加 @SpringBootApplication 启动类 快速创建 REST 接口 实战功能涵盖: MySQL 数据持久化(JPA) RESTful API 开发 自动化的依赖管理 典型开发流程: Spring Initi
2025-05-29 23:31:06
1013
原创 从零开始的数据结构教程(六) 贪心算法
贪心算法通过局部最优选择追求全局最优解,适用于满足贪心选择性质、无后效性及子问题可合并条件的问题。本文以发糖果、区间调度和跳跃游戏为例,阐述了贪心算法的核心思想: 发糖果问题采用双向贪心策略,先从左到右确保右侧高分孩子糖果更多,再从右到左处理左侧高分情况; 区间调度问题按结束时间排序,优先选择最早结束的会议以最大化安排数量; 跳跃游戏通过维护当前可达范围和下一步最远位置,判断能否到达终点或计算最少跳跃次数。 与动态规划不同,贪心算法不存储子问题解,仅做不可撤回的局部最优选择。典型场景还包括硬币找零(标准面额
2025-05-29 23:25:44
1217
原创 从零开始的数据结构教程(五)动态规划(DP)
本文介绍了动态规划(DP)的核心思想与经典应用。DP通过拆解问题为重叠子问题、存储中间解来提高效率,适用于具有最优子结构的问题。内容涵盖两种实现方式(自顶向下递归+备忘录 vs 自底向上迭代填表),并以斐波那契数列为例对比解法。重点分析了三大经典问题:股票买卖(不同交易限制下的最优策略)、背包问题(0-1背包及空间优化)和最长公共子序列(LCS)。最后总结了DP问题的常见分类,为算法设计提供系统框架。全文通过Python代码示例和状态转移方程,直观展示如何用DP解决实际问题。
2025-05-29 18:46:46
1142
原创 从零开始的数据结构教程(四) 图论基础与算法实战
文章摘要: 本文系统介绍了图结构的表示、遍历及最短路径算法。图的表示包括邻接矩阵(适合稠密图)和邻接表(适合稀疏图),并分析了复杂度差异。图的遍历重点对比了BFS(广度优先,用于最短路径)和DFS(深度优先,用于拓扑排序),并给出了双向BFS优化方法。最短路径算法部分详细讲解了Dijkstra算法(无负权图)和核心松弛操作。全文通过代码示例(Python/Java)和场景分析(如社交网络、物流规划),为图算法的工程应用提供了实用指导。
2025-05-28 15:46:02
1557
原创 【黑马点评|项目日记】第五天 分布式锁(Redis分布式锁|Lua脚本)
Redis提供了Lua脚本功能,在一个脚本中编写多条Redis命令,确保多条命令执行时的原子性。Lua是一种编程语言,它的基本语法大家可以参考网站:这里重点介绍Redis提供的调用函数,我们可以使用lua去操作redis,又能保证他的原子性,这样就可以实现拿锁比锁删锁是一个原子性动作了,作为Java程序员这一块并不作一个简单要求,并不需要大家过于精通,只需要知道他有什么作用即可。redis.call('命令名称', 'key', '其它参数', ...)# 执行 set name jack。
2025-05-28 12:08:02
1147
原创 从零开始的数据结构教程(三)平衡二叉树与高级树结构
平衡树与堆结构摘要 AVL树通过四种旋转操作(左左/右右单旋,左右/右左双旋)严格保持平衡,确保操作时间复杂度为O(log n)。红黑树放宽平衡要求,通过颜色标记和五大规则(如红色节点不连续、根黑叶黑等)实现近似平衡,更适合频繁修改场景。堆结构(大/小顶堆)用数组实现完全二叉树,支持高效优先级操作,堆化时间复杂度为O(n),用于解决Top K等典型问题。例如合并K个有序链表可用小顶堆实现,每次取最小节点插入结果链表,保证O(n log k)的时间复杂度。
2025-05-27 23:17:44
788
原创 【黑马点评|项目日记】第四天 优惠券秒杀(乐观锁解决超卖|悲观锁解决一人一单)
本文摘要: 文章介绍了分布式系统中全局唯一ID的概念、作用及实现方案。全局唯一ID主要用于避免ID冲突、防止重复下单、隐藏业务信息和优化查询性能。对比分析了雪花算法、Redis自增ID和UUID三种方案的优缺点,推荐秒杀场景使用雪花算法。具体实现了基于Redis的ID生成工具类,包含时间戳和序列号组合。此外,还详细讲解了优惠券系统的设计与实现,包括普通券和秒杀券的创建逻辑,以及秒杀下单的核心流程:需要验证秒杀时间有效性、库存充足性,通过后才能扣减库存并创建订单。文章采用代码示例和表格对比的方式,清晰呈现了技
2025-05-27 20:51:39
1303
原创 从零开始的数据结构教程(二)树结构
本文介绍了二叉树的四种遍历方式:前序、中序、后序和层序遍历,分别对应不同的访问顺序和应用场景。前序(根→左→右)适合复制树结构,中序(左→根→右)在二叉搜索树中能输出有序序列,后序(左→右→根)适用于计算子树结果。层序遍历按层级访问,可用于统计每层节点数。文章还提供了递归和非递归(使用栈/队列)的实现代码,并讲解了求二叉树直径的高频面试题解法。最后通过对比表格总结了各遍历方式的特点和适用场景。
2025-05-26 22:16:01
251
原创 从零开始的数据结构教程(一)线性结构
数据结构是计算机存储和组织数据的系统方法。主要分为线性结构和非线性结构。线性结构包括数组(连续存储、快速查询)、链表(非连续、灵活增删)、栈(后进先出)和队列(先进先出)。非线性结构如树(层级关系)和图(网络关系),适合更复杂的数据组织。不同结构各有优缺点:数组查询快但增删慢,链表增删快但查询慢,栈和队列限制特定访问顺序。选择合适的数据结构能显著提升程序效率。
2025-05-26 22:11:53
439
原创 @Autowired和@Resource注解的区别
Autowired和@Resource都是 Spring 中用于的注解,但它们的来源、行为和使用场景有显著区别。
2025-05-25 22:53:07
520
原创 【黑马点评|项目日记】第三天 缓存相关
本文介绍了缓存技术在商户系统中的应用与实现方案。首先阐述了缓存的核心概念(高性能数据暂存层)和特点(内存存储、临时性、减轻后端压力),以及常见用途(热点数据加速、高并发缓解等)。随后详细讲解了为商户/店铺类型添加Redis缓存的具体实现,包括代码示例和Stream流处理技巧。针对缓存一致性问题,分析了三种更新策略(内存淘汰、超时剔除、主动更新),重点推荐"先更新数据库再删除缓存"方案,并给出双写一致性实现代码,强调设置缓存过期时间的重要性。通过缓存优化可显著提升系统响应速度,实现&quo
2025-05-25 22:33:51
777
原创 【黑马点评|项目日记】第二天 完成短信登录
文章摘要:本文介绍了如何通过Nginx、Tomcat、MySQL和Redis构建高并发项目,并详细说明了基于Session的登录流程及其存在的问题。首先,Nginx作为负载均衡和静态资源服务器,有效分担Tomcat的压力,而Redis集群则用于缓解MySQL的高并发压力。接着,文章展示了如何通过Session实现短信验证码发送、登录拦截和用户信息隐藏等功能,但指出了Session共享问题,即多台Tomcat服务器之间Session数据不同步的难题。最后,提出了使用Redis替代Session的解决方案,通过
2025-05-10 19:38:39
984
原创 【黑马点评|项目日记】第一天 Redis快速入门
Redis全称Remote Dictionary Server 远程词典服务器,是一个基于内存的键值型NoSQL数据库这里的重点是:键值型NoSQL键值型很好理解,也就是以key-value形式存储在内存中NoSQL也就是非关系型数据库,和我们学习的关系型数据库如MySQL,SQL Server等不同,主要体现在:结构化和非结构化NoSQL对数据库格式没有严格约束,往往形式松散,自由,而关系型数据库则相反,有着各种约束关联和非关联。
2025-05-08 12:20:22
1222
原创 为什么在动态sql,xml映射文件中只有<select> 语句需要指定 resultType(或 resultMap)
查询(<select>):必须指定resultType或resultMap,因为需要映射结果集到对象。增删改(<insert><update><delete>):默认返回影响行数(intInteger),由 MyBatis 自动处理,无需额外配置。
2025-03-17 20:05:43
613
翻译 在IDEA中properties或者yml文件spring: datasource: driver-class-name:后面没有提示解决办法
步骤 1. 在 pom.xml/build.gradle 文件中添加 maven/gradle 依赖项。您是否在 maven/gradle 文件中添加了依赖项?步骤 2. 构建或重新加载您的项目。如果您使用的是 gradle -如果您使用的是 maven -您会看到错误消失了。
2025-03-12 20:09:02
152
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅