- 博客(38)
- 收藏
- 关注
原创 LeetCode19:删除链表第n个元素
给你一个链表,删除链表的倒数第n个结点,并且返回链表的头结点。[1,2,3,5][][1]普通解法:遍历两次链表,第一次用于统计链表长度count,count-n就是第二次用于从头遍历找到倒数第n个数组需要的次数。
2025-11-19 16:58:09
333
原创 LeetCode560:和为k的子数组
便利数组,便利到每一个i,我们需要找到所有的j(的映射(键为前缀和,值为出现次数)。子数组是数组中元素的连续非空序列。遍历数组时,每计算出一个当前前缀和。我们的目标是找到 “子数组和等于。” 的数量,我们可以用一个哈希表。
2025-11-09 16:45:04
238
原创 RocketMQ核心架构解析与实战指南
RocketMQ是一种高吞吐、低延迟的分布式消息中间件,适用于异步通信、削峰填谷等场景。其核心架构采用NameServer(路由管理)和Broker(消息存储转发)分离设计,实现解耦、高可用和弹性扩展。文章详细介绍了RocketMQ的核心概念(Topic/Tag/Queue)、环境搭建方法(Windows/Linux)、两种开发方式(原生API/SpringBoot集成)以及消息发送方法(同步/异步/单向发送、延迟/事务/顺序消息)。最后通过异步购票案例,展示了RocketMQ在削峰填谷、异步解耦和可靠性保
2025-10-29 15:14:33
897
原创 基于令牌大闸实现高并发场景下的流量准入控制与安全防护
令牌大闸是高并发场景下流量控制与权限访问的组件,基于令牌实现"准入过滤",只有令牌持有的请求才能进入核心的业务流程。其本质是令牌桶算法的变种优化,区别于传统令牌桶的 "持续生成令牌" 模式,令牌大闸通常一次性生成与核心资源(如库存)数量匹配的令牌池,令牌消耗完毕后即关闭 "闸门",从源头拦截无效请求。令牌大闸通过 "令牌前置校验 + 用户防刷锁 + 缓存优化" 的三重机制,解决了高并发场景下的流量削峰与安全防护难题。
2025-10-20 12:41:59
671
1
原创 Sentinel:阿里云高并发流量控制
/ 资源名:userGetById,降级方法:getUserFallback// 业务逻辑:查询用户信息return "用户ID:" + id + ",姓名:张三";// 降级方法:参数、返回值必须和原方法一致,最后加BlockException// 限流/熔断时返回的提示return "当前访问人数过多,请稍后重试(用户查询服务)";
2025-10-18 17:15:29
1061
原创 基于Redis实现分布式锁
在秒杀下单等高并发业务场景中,传统的sechornized锁不能保证多个节点的并发场景,会导致超卖等问题。要理解分布式锁,首先需要结合它的 “对立面”—— 单机锁(如 Java 的)来对比:单机锁解决的是 “同一个进程内多个线程的并发安全问题”,而分布式锁解决的是 “分布式系统中多个节点(多进程)的并发安全问题”。特性含义互斥性同一时间只能有一个节点获取到锁,确保临界操作不会被多节点同时执行。安全性锁只能被 “持有锁的节点” 释放,其他节点不能误释放别人的锁(避免锁丢失)。防死锁。
2025-10-15 17:23:56
311
原创 Seata分布式事务以及XA AT TCC的实现
单体项目应用中,事务通过数据库的ACID特性保证(原子性、一致性、隔离性、持久性),但在微服务的架构下,业务逻辑拆分为多个独立的服务,每个服务对应自己的数据库,此时无法保证跨服务操作的一致性,例如订单创建成功,但库存扣减失败,会导致数据不一致,这就是分布式事务问题。CAP 定理:分布式系统无法同时满足一致性(Consistency)、可用性(Availability)、分区容错性(Partition Tolerance),需根据业务取舍(Seata 侧重保证一致性与可用性)。。
2025-09-27 14:17:16
1034
2
原创 栈与队列以及其实现
栈(Stack)遵循先进后出(Last In First Out)原则,类似生活中 “叠盘子”—— 最后放的盘子先被拿走,最底层的盘子最后才能取到。栈顶(Top):允许插入和删除操作的一端(类比最上层的盘子);栈底(Bottom):固定不动、不允许操作的一端(类比最底层的盘子);基本操作:push(入栈,添加元素到栈顶)、pop(出栈,移除栈顶元素)、peek(查看栈顶元素,不删除)、isEmpty(判断栈是否为空)。队列(Queue)遵循先进先出(First In First Out)
2025-09-22 16:37:17
737
原创 基于哈希表与差分前缀和解决撒狗粮问题
即:sum[i]=num[1]+num[2]+……就是数组中每个数减去前面一个数的差(除第一个为原来的数外)操作,它通过计算数组的前缀和数组,使得我们可以。即:cf[i]=num[i]-num[i-1]差分是前缀和的逆操作,主要用于高效地对数组的。初始为全 0(因初始次数为 0)- 区间。前缀和就是前面i个数之和,是一种。
2025-09-21 16:49:02
773
原创 SpringMVC通过注解实现全局异常处理
全局异常处理是 SpringMVC框架中一个非常实用的功能,通过和减少重复代码,提高开发效率统一异常响应格式,便于前端处理集中管理异常处理逻辑,便于维护可以结合日志记录,方便问题排查掌握全局异常处理,能让你的代码更加健壮、优雅。
2025-09-09 16:48:56
541
原创 Spring拦截器:GlobalFilter和HandlerInterceptor的区别
是网关层的 “门卫”,负责全局请求的统一管控,适合微服务架构;是服务层的 “保安”,负责单个服务的细粒度处理,适合单体应用或微服务内部逻辑;两者各有侧重,配合使用能让系统的拦截逻辑更清晰、更高效。
2025-08-05 15:33:40
675
原创 HttpClient的使用
HttpClient 是一个用于发送 HTTP 请求和接收 HTTP 响应的开源 Java 库,由 Apache Software Foundation 开发。它提供了一套高效、灵活且功能丰富的 API,用于处理各种 HTTP 通信场景。
2025-07-13 19:27:19
374
1
原创 数据结构1:线性表的顺序存储的定义以及基本操作
主要知识框架线性表(List):是由零个或多个相同数据类型的数据元素组成的有限数列一般表示形式:L = (a1,a2,... ,ai,... ,an)首先它是一个序列。元素之间是存在顺序的,若元素存在多个,则第一个元素无前驱,最后一个元素无后继,其他元素,其他元素都有且只有一个前驱和后继。如果将线性表记为L = (a1,a2,... ,ai,... ,an)ai+1是ai的后继元素,ai-1是ai的前驱元素,a1有且只有一个直接后继,an有且只有一个前驱。
2025-07-13 17:08:17
483
1
原创 Redis数据结构及常用命令
1 定义:Redis是一个开源的,高性能的键值对存储数据库,它支持多种存储数据库,它支持多种数据结构,可用于缓存、消息队列、会话存储等场景。2 特点高性能:Redis 数据存储在内存中,读写速度极快,每秒可处理数万次操作。多数据结构:支持字符串(String)、哈希(Hash)、列表(List)、集合(Set)、有序集合(Sorted Set)等多种数据结构。持久化:可以将内存中的数据持久化到磁盘,防止数据丢失。高并发:支持多个客户端同时连接和操作。。
2025-07-10 11:58:31
298
原创 Minio访问权限设置
由于权限问题,在Springboot集成minio的文件访问操作时,用户端可能会出现图片上传后无法显示的问题。本篇文章主要讲解如何通过设置Minio的访问权限使得用户端可以完成对于文件的访问。MinIO 的访问权限设置分为和,主要通过策略(Policy)和访问控制列表(ACL)实现。
2025-06-17 15:00:35
6129
原创 基于JWT实现token登录验证学习笔记
4 客户端存储:存储在 localStorage 或 cookie 中。5 请求携带:后续请求在 Authorization 头中携带 JWT。JWT工具类是一个封装了JWT核心操作的工具类,主要负责令牌的。:存储声明(Claims),如用户 ID、角色等。6 服务器验证:验证令牌的有效性并处理请求。从令牌中提取用户的信息。2 服务器验证:验证成功后生成JWT。检查令牌签名是否有效。3 返回JWT:将令牌返回给客户端。,是实现用户验证的关键组件。:包含令牌类型和签名算法。(2)验证JWT令牌。
2025-06-11 14:32:18
283
原创 基于JavaWeb分层架构的ssm注解开发整合
ssm是Spring,SpringMVC,和mybatis三个框架整合的简称提供Ioc和AOP功能,管理应用组件和生命周期的依赖关系。负责处理HTTP的请求和响应。负责简化数据库的操作,实现对象与数据库的映射注解作用说明@Component通用组件注解,被 Spring 扫描后注册为 Bean@Service标记业务层组件(Service 实现类)标记数据访问层组件(DAO/Mapper)标记表现层组件(控制器类)@Autowired按类型自动注入依赖对象。
2025-05-27 19:55:08
1769
原创 spring 03 aop学习笔记
AOP是一种面向切面编程的编程的范式。与传统面向对象编程不一样,AOP关注的是横跨多个模块的横切逻辑,在事务处理,日志记录,安全控制等操作中被广泛使用。Spring AOP 是 Spring 框架对 AOP 编程范式的具体实现,它基于动态代理机制,允许开发者在不修改原有业务代码的基础上,将横切逻辑织入到目标方法执行的各个阶段,从而实现代码的解耦和复用。
2025-05-22 20:30:22
1645
原创 Spring02--注解开发
Component:通用的组件注解,标记一个类为 Spring 管理的 Bean。:用于 DAO 层(数据访问层),继承自@Component。@Service:用于 Service 层(业务逻辑层),继承自@Component。:用于 Web 层(控制器),继承自@Component。:用于配置类,替代 XML 配置文件,继承自@Component。// 标记为Service层组件@Service// 实现方法// 标记为配置类// Bean定义方法。
2025-05-18 18:05:54
286
原创 Spring学习笔记01(初识Spring+Spring的核心概念)
Spring是一款开源的轻量级的java开发框架,目的是通过控制反转(IoC)和面向切面编程(AOP)等核心特性解决企业级应用开发业务逻辑层和其他各层的耦合问题,提高代码的可维护性和可测试性。
2025-05-17 16:06:14
544
原创 MyBatis-02动态条件查询操作
一旦满足条件,后续条件不再执行,如果没有条件满足会执行other内的操作。然后将select标签内的resultType改成resultMap即可。在定义实体类的时候Java的实体属性命名可能和数据库的字段不一样。当没有条件满足时,不生成where字句,防止语法出错。此时需要使用resultMap来解决其映射关系的问题。id resultMap的唯一标识。:字符串替换(慎用,有 SQL 注入风险)类似于java的switch-case操作。可以自动移除第一个and或or。
2025-05-16 18:18:14
611
原创 Mybatis-01环境搭建以及开发流程
MyBatis作为一款优秀的持久层框架,它支持定制化SQL,存储过程以及高级映射。MyBatis几乎避免了所有的JDBC代码和手动配置参数以及获取结果集。Mybatis可以使用简单的XML来配置和映射原生信息,将接口和Java对象映射成数据库中的记录。
2025-05-15 16:07:12
355
原创 javaweb会话技术02 Session
服务端会话机制:Session是服务器为每一个用户创建的独立会话空间,存储用户的会话状态。核心作用:跟踪用户状态,如登录状态,购物车信息等。现实原理服务器为每个 Session 分配唯一的 Session ID(通常存储在 Cookie 中)。浏览器通过 Cookie 携带 Session ID 访问服务器,服务器根据 ID 找到对应的 Session。核心方法:获取或创建 Session:存储数据:获取数据:移除数据:销毁 Session:设置超时时间。
2025-05-13 17:53:22
310
原创 javaweb会话技术01 cookie
cookie是某些网站为了辨别用户身份,进行session跟踪,从而存储在用户本地端上的小型文本文件,通常经过加密。在客户端与服务器之间传递状态信息,如用户登录状态,偏好设置等。生命周期会话 Cookie:默认保存在浏览器内存中,关闭浏览器即失效。持久 Cookie:通过设置有效期(秒),存储在本地文件中。Cookie cookie = new Cookie(name , value) 用于创建Cookieresponse.addCookie(cookie) 用于把Cookie发送到客户端。
2025-05-10 19:42:28
521
原创 sql多表查询
与前两个通过关联字段的水平合并方式不一样,联合查询是将多个select语句纵向拼接,需要要求多个查询的列数相同,列数据兼容。嵌套查询也叫子查询,指的是在sql查询语句里嵌套另一个或多个select语句。若无匹配,右表字段为。查询同时涉及两个及以上的表,通过。:查询学生及其课程成绩(学生表。主查询筛选成绩大于平均分的行。:查询成绩高于平均分的学生。(主键和外键)建立联系。先计算平均分(子查询)。
2025-04-24 19:40:00
689
原创 简述mysql 数据查询
- 从第start+1条开始,返回n条(start从0开始)LIMIT用于限制SELECT用于查询结果的数量(例如LIMIT 10是取前10行数据为查询结果,可以通过SELECT进行数据查询,该语句有灵活使用方式和丰富的功能。用户可以通过ORDER BY 语句对查询结果进行升序ASC和降序DESC排序。用于统计数据,需配合GROUP BY使用(若不分组,则对全表统计)GROUP字句将查询结果按某一列或多列的值分组,值相等的为一组。LIMIT 5,2 是忽略前2行后取后面的前5行数据)
2025-04-20 13:29:16
429
原创 MYSQL数据定义速成笔记
2 表(table): 数据库的二维结构,由行(记录)和列(字段)两部分组成。如果需要指定字符集(CHARACTER)和排序(COLLATE)操作。1 数据库(database):存放数据的仓库,用于分类管理相关数据。3 字段(column): 表中的列,定义数据类型和存储格式。4 修改数据库(修改字符集和排序规则)(用ALTER)3 对表的修改等操作(以表employess为例)列名 数据类型 列级完整性约束,列名 数据类型 列级完整性约束,2 查看数据库(SHOW)3 选择数据库(USE)
2025-04-17 21:24:39
398
原创 java反射机制个人学习==速成笔记
在java运行状态中,对于任意一个类,都可以知道这个类的所有属性方法,对于任意一个对象,都能运用它的方法和属性,允许程序运行时获取类的信息,创建对象,调用方法和属性。
2025-04-13 19:05:17
692
原创 蓝桥杯备战刷题记录3(洛谷P1605 迷宫DFS)(七段码相关题型)
和蓝桥杯十一届真题七段码一样这道题主要也是考察路径的数量,但不同点在于这道题有规定了起点与终点,所以不用像七段码那样把每一点都作为起点,而是可以直接以规定的起点为起点直接进行深度优先搜索,直到找到终点结束,而且因为只有一个起点也就避免了路径重合的情况。
2025-03-31 17:22:36
230
1
原创 蓝桥杯备战刷题记录2 (十一届真题七段码)(DFS+集合)
问题的核心问题是找到不限起点终点不限方向的所有路径组合,该题主要思想还是解决n个数的所有子集操作的路径类问题,例如1 2 3有多少个子集的问题,不同之处在于1 2 3有多少子集不会限制不同的组合,而该题是图,不同点只能和一部分点联通,也就是说点与点之间要满足相互连接的条件才能算是一个组合。
2025-03-31 13:46:09
264
原创 java io流个人速成笔记
IO流是连接程序和文件的“管子”,I是Input,O是Output,按方向分为输入输出流,按数据单元分为字节流和字符流。
2025-03-30 20:33:12
330
原创 java泛型个人学习笔记
泛型是一种编程概念,被允许再定义类,借口或方法时使用的参数,不是一种具体类型。借助泛型,我们能够编写复用的代码以下是一个简单的泛型示例// 私有字段,类型为泛型 T,可存任意类型数据this.t = t;return t;以上代码中,Box就是一个泛型类,T是一种类型参数。这段代码将Box进行实例化,定义时使用了类型参数T,说明可以存储任意类型的数据。这里使用了Integer作为类型参数,意味着Box专门用来存储Integer类型的数据。
2025-03-26 20:26:07
366
2
原创 蓝桥杯备战刷题记录1 (动态规划)P1130 红牌
对该题的具体策略可以从第一组的第一个步骤开始,把所有不同小组的不同步骤的最短天数分别求出来,到所有小组中最后一个步骤所需最短天数最小的就是完成所有步骤所需最短天数。也就是定义一个二维数组dp[n][m],dp[i][j]代表在第i组下第j个步骤所需要的最短天数。由题目知,只能从原来的小组 I 更换到小组 I+1,当然从最后一个小组 M 可以更换到小组 1。例如dp[2][2]只能是由dp[1][1]或者dp[2][1]与该小组步骤相加的最小值。所以dp[i][j]所有的更换路径如下。
2025-03-24 19:57:12
275
原创 蓝桥杯备战笔记3 BFS个人速成笔记+BFS迷宫寻路题
与通过递归一条路走到底的DFS不同,BFS是一种通过队列入队出队的方法实现全面扩散组层递进的寻路算法。
2025-03-22 15:35:02
437
原创 java多线程个人学习笔记
需要在创建的类中重写run()方法,并将实现线程功能的代码写入run()方法,然后调用Thread类的start()方法执行线程。如果多线程程序中: 存在一个线程,现在需要插入另一个线程,要求插入的线程结束才能继续执行原来的线程,此时就需要用到join()方法。当创建一个新线程时,如果没有显式设置优先级,它将继承父线程的优先级,默认情况下父线程优先级为。每一个线程都有各自的优先级,如果有很多线程处于就绪状态,系统就会根据优先级来决定那个线程进入运行状态。线程是程序执行的最小单位,属于进程的一个执行单位,
2025-03-17 16:09:29
784
2
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅