- 博客(129)
- 收藏
- 关注
原创 面试遇到SpringAOP不要慌
Aspect Oriented Programming(面向切面编程)是一种编程思想。所谓切面可以理解为特定的一些方法。所以AOP可以看成是面向特定的方法进行编程。比如上一篇文章提到的拦截器,就是AOP的体现。它针对特定的方法进行统一的管理,让代码模块化,易于维护。包括ExceptionAdvice、ResponseBodyAdvice(统一异常处理、统一数据返回格式)都运用了AOP的思想。定义一个注解:@Retention(RetentionPolicy.RUNTIME)//表示运行时,仍然存在。
2025-03-27 15:49:46
889
原创 Spring拦截器(Intercepter)
拦截器(Intercepter)是Spring框架提供的一个核心功能,它可以拦截指定接口的请求和响应,执行预设好的代码。(注意是在网络请求的层面进行的拦截)那么它有什么应用场景呢?最常用到的一个就是用户的登录校验。如果我们要对项目中所有的接口统一增加一个登陆校验的功能,那我们可能需要对所有接口的代码进行修改,其实这是非常复杂的,违背了软件工程中解耦合的要求。而拦截器恰好能解决这样的问题。它可以在不对原有业务代码侵入的情况下,在网络请求的层面,对用户的请求进行校验,
2025-03-27 10:30:51
762
原创 通俗易懂搞懂@RequestParam 和 @RequestBody
本博客将会详细讲解以下参数绑定相关注解的使用场景,说明它们之间的关系和区别,以及在项目开发中使用的规范@Param。
2025-03-22 19:28:51
1288
原创 Session和Cookie我不允许你不懂
Cookie是一种在客户端存储少量数据的技术,通过 HTTP 头部传递信息,实现用户状态保持,但受容量、安全性等限制。Session则将用户数据存储在服务器端,通过 Cookie 传递 Session ID 来恢复状态,虽然安全性更高,但也需要合理管理服务器资源。
2025-03-20 21:42:11
946
原创 Legendre公式
nnn是一个正整数ppp是一个小于等于nnn的质数。x :通过Legendre公式可以计算出n!n!n!的其中一个约数pxp^xpx中xxx的最大值。唯一分解定理表明,任何正整数都可以唯一地表示为质数的幂的乘积,n!n!n!n!n!p1e1p2e2pkek,其中pip_ipi是唯一分解后的质数,eke_kek是对应的pip_ipi。
2025-03-02 10:59:07
564
原创 最小生成树——prim算法
最小生成树是一棵树,因此它是不成环的。他是一个具有N个结点,N-1条边的无向图。(树是特殊的图)并且这个图任意一个结点之间都是直接或者间接相连的。这个图的边权和是最小的,顾名思义最小生成树。邻接表存图vis数组记录已访问结点优先级队列优化每次都从优先级队列里贪心的拿到最小权值所访问结点小于实际结点数,说明图不连通完。
2025-02-28 08:37:58
651
原创 完全平方数——唯一分解定理
任何大于 1 的正整数,都可以唯一分解为若干个质数的乘积(忽略排列顺序)。对于任意正整数n1( n > 1 )n1np1e1×p2e2×⋯×pkeknp1e1×p2e2×⋯×pkekp1p2pkp1p2pk是质数;e1e2eke1e2ek是正整数;
2025-01-23 10:09:18
1076
原创 地宫取宝——DFS记忆化搜索
原因在于,我们需要腾出一个状态用来表示起点位置(x=1,y=1)没有选择任何宝物,当前的选择的最大宝物的价值的无效值用max=0表示。走过某个格子时,如果那个格子中的宝贝价值比小明手中任意宝贝价值都大,小明就可以拿起它(当然,也可以不拿)。因此我们可以使用DFS,先深度搜索把靠终点位置的情况保存起来,然后回退逐步计算起点位置的值。请你帮小明算一算,在给定的局面下,他有多少种不同的行动方案能获得这。宝物的价值,重新处理过一次,整体+1,原先范围是。代表这个格子上的宝物的价值。,以及当前捡到的宝物的最大价值。
2025-01-16 16:15:22
1034
原创 深度搜索——记忆化搜索
/到达一个位置,就标记//当前位置的上下左右深度搜索i<4;i++){//位置(a,b)不能越界,同时高度也不能比(x,y)大dfs(a,b);
2024-12-30 13:59:47
937
原创 深度搜索——染色法
根据或运算的这几个特性,我们直接对color中当前位置的周围数据进行|=运算,结果是3的话,那么这个墙打破,终点和起点就是可以连通的。gX和gY配套使用,是用来辅助移动的数组,例如当前位置是(X,Y),如果向上移动,我们只需要(X+gX[0],Y+gY[0])即可。图中,黑色是墙,蓝色粗线是正确可达终点的路径,周围的细线是递归的分支,表示不可达终点的路径被搜索过。由于那个坐标有墙,我们不确定,所以我们可以直接把graph数组遍历一遍,找到是墙的位置。由于终点黑色墙的阻碍,起点未能搜索到终点。
2024-12-29 15:09:26
954
原创 线段树快速上手
线段树是高效查询数组某区间的特殊值的高级数据结构。底层适用数组来实现,但逻辑上是二叉树结构,因此它的更新和查询的时间复杂度都是OlogNO(logN)OlogN。(建立线段树的时间复杂度是ONO(N)ON这里提到的区间特殊值有很多,可以是区间最值,可以是区间和,也可以是区间GCD(最大公约数)等等。因此它的应用非常广泛。
2024-12-29 15:08:40
669
原创 基础算法:一维差分
本篇博客首先讲解一维差分的做题套路(模板),在讲解做题流程的时候不用想为什么要这样,按照这个套路来就可以作对。在文章最后,我会用一个简单的例子让大家直观的了解的原理,如果要说用数学定理证明,小编暂时还没有这个本事🫡。diff默认值为0,大小是原来数组的大小n然后在+1。为什么要这样,等一下就知道了。接下来我们需要进行q次操作,在区间[R,L]中的框增加k个球。每次操作我们只需要对diff[R]+=k即可。这也是为什么diff数组大小必须是n+1的原因,如果R太大,就会越界。
2024-12-20 08:40:32
550
原创 01背包:模板题+实战题
我们有一个背包,背包的容积有限,最多只能装下总体积为V的物品。现在给定我们N个物品,第i个物品的体积vi,对应的价值是wi1≤i≤N每个物品有且仅有一个。要求我们再背包容量允许的范围内,选取物品,使得总价值最大。
2024-12-19 08:16:27
783
原创 完全背包_模板题
完全背包可以看作是01背包演变过来的,其定义如下:我们有一个背包容量是V,给定我们N种物品,每个物品有其对应的价值wi和占用体积vi1≤i≤N1≤i≤N),并且每种物品都有无限个,要求我们在不超过V的情况下,选取物品,使得总价值最大化。它和01背包唯一的区别就是在物品的选择次数上。完全背包中,每种物品是由无限个的,你可以选择任意多个物品,当然选0个也是可以的,而后者只能选或者不选。
2024-12-18 08:17:22
1190
原创 MyBatis是什么?直接快速入门!
xml的配置和方法一是相同的。但是要注意xml中涉及的字段,userInfo这个对象的字段中一定要设置!简单来说,它使用代码来实现程序和数据库之间的交互的。实际上我们刚才就完成了一次数据库连接!@Select(“写SQL即可”)以MySQL为例演示。
2024-12-18 08:17:01
618
原创 【一维前缀和】以及【二维前缀和的图形化理解】
一维前缀和是一种用于快速计算数组部分和的技巧。前缀和数组中的每个元素表示原数组从第一个元素到当前元素的累积和。通过预处理得到前缀和数组,可以在常数时间内计算任意区间的和。假设有一个数组 arr = [1, 2, 3, 4, 5],我们想快速计算某个区间 [l, r] 的和(例如,计算区间 [2, 4] 的和)。首先构建前缀和数组 prefix,其中prefix[i] 表示 arr[0] 到 arr[i] 的累积和所得的前缀和数组为 prefix = [0, 1, 3, 6, 10, 15]。
2024-12-17 08:51:07
775
原创 多重背包以及二进制优化(无死角)
多重背包问题是01背包问题的一个变种,它同样需要在多种物品中选择,。,使得总价值最大化。01背包问题中,每种物品只能选取一次,因此选择范围是0或1,即“选”或“不选”。多重背包问题中,
2024-12-17 08:50:43
1365
原创 spring+hutool实现简单验证码功能
请求方式GET请求URL请求参数:无超时时间的定义:长宽的定义:验证码和时间戳名字的定义:一旦我们要求改这些参数,会非常麻烦,东改一下,西改以下。所以我们的优化思路是把这些参数放到properties文件中。
2024-12-16 08:43:10
722
原创 2024年蓝桥杯Java B组省赛真题超详解析(全)
正经详细题解(全),代码均可AC。不是标题党!讨厌TMD标题党!!如有疑惑欢迎评论区讨论,或者@博主帮你解答o(≧▽≦)o
2024-12-16 08:42:39
11616
11
原创 裴蜀定理详细介绍
裴蜀定理对于两个整数 ( a ) 和 ( b ),它们的最大公约数 ( d ) 可以表示成 ( a ) 和 ( b ) 的线性组合。也就是说,一定存在整数 ( x ) 和 ( y ),使得axbydaxbyd假设 ( a = 15 ) 和 ( b = 10 )。它们的最大公约数是 5,也就是 ( gcd(15, 10) = 5 )。
2024-12-14 08:35:59
1290
原创 JavaEE 第27节——IP协议报头格式介绍
对于一个IP数据报:分为首部和数据部分,数据部分包含了传输层的数据报,例如可能时TCP数据报,或者UDP数据报。
2024-12-13 09:03:14
952
原创 JavaEE 第26节 对TCP协议面向字节流的理解
在TCP中,"面向字节流"意味着TCP将应用层的数据视为一个连续的、无结构的字节流。与UDP不同,TCP并不会保留应用层数据的消息边界。相反,它将数据作为一串字节进行传输。无论应用程序发送的数据有多大,TCP都将其视为一连串的字节,然后再将这些字节流拆分为多个段(Segment)进行传输。TCP面向字节流的实现步骤接收应用层数据并转化为字节流应用程序将数据传递给TCP层时,这些数据被视为一个字节流。例如,如果一个应用程序发送一段文本数据,如“Hello, World!
2024-12-13 09:01:00
922
原创 JavaEE第24节 TCP协议确认应答机制
标题一关于确认应答机制的原理,只是描述了确认应答机制的主干,实际实现确认应答必须依靠以下关键机制赋能,才能实现可靠传输。
2024-12-12 08:14:28
764
原创 了解倒数的概念,乘法逆元就很好理解——解析之【逆元的概念】【逆元的求解方法】
首先,下面讨论的是数论相关内容。主要研究对象是非负整数。其次,博客不对一些定理进行数学推理,指阐述相关结论或者性质。另外,涉及到相关代码演示,使用的是Java语言。倒数的概念相信大家都很了解,给定两个数字,a和ba和ba和ba×b1a×b==1那么a和ba和ba和b互为倒数。逆元和倒数的概念类似。不过逆元是模运算上“倒数”的概念。在模m的情况下,给定一个整数aaa,存在另一个整数bbba×b≡1modma×b≡1modm。
2024-12-11 08:40:47
924
原创 矩阵翻转与旋转——模板大全
在处理矩阵(包括非方阵)时,常见的操作包括翻转和旋转。左右反转上下反转90度顺时针旋转(矩阵转置 + 左右反转)180度顺时针旋转(左右反转 + 上下反转)270度顺时针旋转(矩阵转置 + 上下反转)虽然涉及的操作看起来较多,但只需掌握左右反转上下反转和矩阵转置这三个基础操作,即可组合实现其他所有的矩阵变换。另外,正文关于反转方式的后面标注了通用或者仅方阵适用的标签;通用意思是方阵和非方阵都适用;仅方阵适用意思是,仅行列数相等可用。
2024-12-11 08:39:50
787
原创 树状数组(轻量解析+应用为主)
本博客不对树状数组的实现方法进行可行性的数学证明。指在快速了解其特性,并应用于实践。相比于传统方法,树状数组进行前缀和、单点更新,只用修改对应子结点或者对应父结点的值,时间复杂度均为O(logN)。相比于传统方法O(N),算法效率明显提高。树状数组,就是这么简单!
2024-12-10 11:18:14
1045
原创 spring boot日志介绍
随着时间推移,日志文件会变得巨大且难以管理。通过日志分割策略,可以将日志按日期(每天一个文件)、按文件大小达到阈值时自动滚动创建新文件,从而保持日志文件的可控大小和便于检索管理。第二种方式和第一种方式本质是一样的,因为@Slf4j 帮我们自动创建了一个名字为log的日志打印对象(作用于源码阶段),进而可以直接调用log。在 Spring Boot 项目中,一般使用 SLF4J 的接口来书写日志代码,从而保持与底层实现解耦。,即低于 INFO 的日志(如 DEBUG、TRACE)默认不显示。
2024-12-10 11:17:34
1089
原创 Java中整型【Min_Value= - Min_Value】以及【Max_Value+1=Min_value】的原因是什么?
Java中int类型的大小是四个字节,即32个比特位。接下来我们通过实际例子,形象说明这个类型的底层存储方式,从而回答标题中的疑问。
2024-12-09 07:52:43
1126
原创 快速了解所有位运算:[&] [|] [^] [~] [<<] [>>]
注意:位运算都是基于数的二进制表示来计算的,所以以下示例,都是二进制数为例进行。
2024-12-09 07:45:00
2734
原创 裴蜀定理与欧几里得算法——蓝桥杯真题中的应用
对于任意两个整数a和b,如果它们的最大公约数是d,那么可以找到整数x和y,使得a和b的最大公约数d可以表示为它们的整数线性组合。
2024-10-27 10:54:42
715
原创 回溯算法(递归+回退)——1基础理论
所以他的算法效率并不高。2、递归到第三层的叶子结点后,由于已选集合大小==k,所以终止搜索,向不在向下递归,这就是递归的终止条件。3、想要写出递归,我们要寻找出这个问题的重复子问题,因为递归就是把一个大问题拆分成小的、重复的子问题。在搜索遍历到叶子节点后,由于递归的性质,会逐层回退,当前结点中的状态会转变成上一层结点原来的状态。第二节的图片解析说明了,搜索的返回条件就是找到k个元素的符合条件的组合就回退,枚举下一个可能。上一节讲到,回溯法本质就是通过递归枚举所有的可能,返回符合情况的结果。
2024-09-22 08:40:02
1015
3
原创 JavaEE 第23节 TCP的流量控制与阻塞控制详解
流量控制(Flow Control)和拥塞控制(Congestion Control)是TCP协议中的两个重要机制,虽然它们都涉及到数据流的管理,但它们的作用和处理对象是不同的。如图,两种机制相辅相成,保证数据可靠传输的情况下实际发送窗口大小Min拥塞窗口大小接收窗口大小它们相辅相成,前者保证接收方不会被数据淹没,后者确保网络不会因过载而失效,从而共同保证数据的可靠传输和网络的高效利用。TCP段笼统讲就是TCP数据报↩︎。
2024-09-09 08:54:31
1023
原创 JavaEE第22节 TCP段(报文)结构剖析
接收端因为要接收多个这种TCP段,而因为网络传输的不稳定性,到达的TCP段可能是缺失的乱序的,甚至因为重传机制还可能发送重复的TCP段给到接收端。头部长度,也叫数据偏移(Data Offset),我们知道TCP段头部长度是可变的,通过这个字段就可以知道该TCP段头部的具体是在那个范围了。在传输层,TCP段的起始位置不用管,只用知道偏移量(头部长度)即可,起始位置在IP层有专门字段封装。-1,但是在数据发送是TCP段的发送量会受到滑动窗口这个机制的影响,而滑动窗口的大小一般最大就是2。
2024-09-01 08:27:19
1665
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人