自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 - - - 正则表达式匹配 diff - - -

前面的mis都是相同的,而到第一个*时,发现*前面时s 于是s*可以翻译为 空 s ss sss 等,而这些情况是都需要储存下来的,因为*后面的s 是需要找到一个 s* 翻译为 ssss 这个字符串,才能正确的匹配字符串,而我再走到s*翻译时,并不会知道后面的字符串时需要翻译为哪个才能正确表示。比如 dp[2][3] = true 表示 长度为 0 - 2 的 s 字符串 和 长度为 0- 3 的匹配字符串能匹配上。dp[0][4] = true p[0-1] 为空 p[2 - 3] 为空。

2025-12-18 01:07:56 378

原创 --- spring 自动装配 ---

但这种机制也带来一个常见问题:如果要注入的类并不在 @SpringBootApplication 所在包的扫描路径下——例如一个完全独立的第三方类或位于其他模块中的类——Spring 在启动时就不会将其纳入容器管理。Spring Boot 的组件扫描机制默认会以 @SpringBootApplication 注解标记的类作为起点,递归扫描当前包及其子包下所有含有 Spring 管理注解(如 @Component、@Service 等)的类,并将它们注册到 IOC 容器中。而还有一个更加通用的方法。

2025-12-14 23:16:38 157

原创 --- 字符串解码 递归解法 通俗易懂 ---

方法一 可以将 返回值改为 单枪递归完的下标,把复制好的额字符串给作为全局变量,这样在方法中 把复制的字符串给评到全局变量中,但是又因为涉及到递归的原因,这个全局变量拼接时,会是反者的 具体来说是这样 2[aa1[bb]] -> bbaabbaa 因为他是从尾巴添加嘛,导致解码字符串顺序乱了,而且这样还会涉及到当前 ] 是谁的的问题,需要对放回的下标 ++ ,这样下标会跳跃起来,变得不可控和复杂,所以这样是不行的 (这是我第一次写的 没过 )如果为数字,那么之后的字符就会设计到解码了。

2025-12-12 15:13:01 265

原创 --- 架构的演进 ---

缺点:运维难度增加,随着服务数量的增加,同一台服务器上运行多个服务还会需要解决环境的冲突问题,且问题的排查也变的困难,再找一个bug可能要去查看多个服务的运行日志,而且像大促这类活动,需要横向扩张服务的性能,就需要运维去再开多个服务,过几天结束后有需要给停了,而这些纯手动会使运维变得无比的困难。借助容器化技术将服务包装在容器中运行,容器中所有的环境都和外界隔离,包括网络,内存,环境配置等,可以理解为一个新的设备了,而且支持一键部署,一行指令就能运行多个容器,使得服务的部署变得异常的简单。

2025-12-10 17:53:28 677

原创 --- 将二叉搜索树转化为排序的双向链表 ---

他代表的时1 前面的节点,应该让1 节点的前驱 left 指向prev 然后prev 走到 1 节点,而prev为啥不维护后驱 prev.right呢 为空的嘛。既然时改为双向链表,那么前一个节点必须要知道,所以使用一个prev指针来维护和当前节点的前后指向关系,而我又要放回头节点,所以还需要一个head来记录头节点。这时head 为空 prev 为空,该节点也为最小的节点 所以head == 1节点, 而prev呢。他会给一个二叉搜索树,要求把他改为排好序的双向循环列表,并放回最小的值。

2025-12-10 17:45:47 279

原创 --- redis 常见问题 ---

在reids中,操作数据并不是直接操作物理内存,而是有一个逻辑内存叫做页表,他和物理内存进行了映射,备份数据时,会fork主线程为子线程,这时子线程就拥有了和这个主线程相同的页表,他们共同指向了一块物理内存,在通过页来把获取到物理内存上的实际数据,因为页的复制是在内存上的,消耗的时间是纳秒级别的,所以快照持久化复制的速度很非常快,和数据库的影响页不大。当redis中的内存不够用时,在往里面插入数据,那么reids会按一定的策略来对key进行删除,这种删除的策略叫做内存淘汰。

2025-12-04 18:16:22 450

原创 --- windows 下设置脚本为开机启动 ---

win + r 输入shell:startup 打开了一个文件夹这个文件夹中的引用就是开机启动的应用。具体点了路径类似这样。

2025-12-04 12:03:16 91

原创 --- vue标签中有key和没有的区别 ---

vue会先比较虚拟dom树和实际dom树key的不同,对于相同的key就直接使用原来的dom节点,并且会比较树中的元素,对元素进行单独修改,对key不同的就创建新的dom树,这在增删情况下就减少了不少的开销。vue在给标签加上key之后能增加,增加和删除的性能。vue在更新时会尽量使用原来的dom来进行修改。

2025-12-03 16:10:33 170

原创 --- 算法 分割回文串 回溯 + 动态规划预处理 ---

而其实对于回文串,有 如果 [l ,r] 是一个回文串 那么他们的 [l + 1, r - 1] 也肯定是一个回文串, 对于单个字符 会发现 l + 1 > r - 1 那么这种特殊情况可以直接处理为 是回文串。那么就可以发现一个式子 dp[i][j] = s[i] == s[j] && dp[i + 1][j -1]题目解释的特别清楚了,不过还有个,因为只有一个字母也叫回文串,那么其实所有的字母都会被使用到。那么要不重复的遍历一遍字符串的所有子串,并且要记录下每个子串,递归回溯就很适合。

2025-12-01 18:48:57 197

原创 windows alt + tab 切换窗口时会强制把我的中文键盘的中英文输入改为中文这个bug的曲线救国方式 da

每次alt + tab切换的都是我的中文键盘的中英文 每次英文在vscode种切回来就变中文了,要招烦死了。那么我可以使用 ctrl + space来切换的是中文键盘和英文键盘 这样他就没有中文给你切了 tmd。一个特别简单的autohotkey脚本。

2025-11-30 15:31:56 198

原创 --- docker 一些指令的汇总 ---

Linux namespace是对全局资源进行封装,将进程,文件,网络等资源统一封装到相同的namespace中,使得拥有不同的namespace的进程拥有独立的系统资源,且不同的namespace之间不会相互影响,甚至不会知道其他容器的存在。,他们共享一个操作系统内核,以应用视角运行在容器中是运行在一个完整的操作系统中的,而从虚拟机的角度看,应用是运行在一个经过特殊隔离的进程中的,他们调用的是同一个内核,但是文件,网络,进程被隔离了。是因为在新的PID空间中,bash作为pid 1 进程会有特殊的作用。

2025-11-29 23:34:58 978

原创 --- JavaScript 的一些常用语法总结 ---

使用()=> {} 来表示一个函数表达式,(a,b)=> { return a - b} 如果返回值只有一行的话 可以省略{},同时return也要省略, (a,b)=> a - b, 如果只有一个人参数,小括号也能省略 a => a * 2。reduce((prev,item,index,array)=>{},prev),第一个是一个函数表达式,在这个函数表达式中就可以进行一些对数组参数的计算,他的返回值会给到prev这个参数,最后reduce就返回的是prev这个参数。

2025-11-26 23:21:43 414

原创 --- git 的一些使用 ---

git remote add <name> <url> 给远程仓库起的名字和仓库的url 这个名字在你本地就代表的远程仓库git remote -v 获取拉取和推送远程仓库的url如果本地仓库有过代码的提交,那么这时在和远程仓库建立连接在拉去会出现这个错误PS C:\Users\15328\OneDrive\桌面\files\gitee\gitlearn> git pull origin master因为本地仓库和远程仓库没有相同的父提交记录,是俩个完全不同的分支。

2025-11-24 12:07:30 903

原创 --- 动态规划 零钱兑换 ---

在我寻找数额为11的最少组合,那么其实可以从数额为 1 的组合开始找到起的最少的硬币组合,这样就可以发现 我要找到数额为 11 的最少个数就是在找 数额为 11 - coins[x] 的最少的硬币个数然后加上当前使用的 一个硬币 coins[x] ,而 11 - x的最少组合就在 之前就找到了,那就很明显了,可以使用动态规划来解决。他也是凑数的,凑的是完全的平方数,而这个数就和coins很像了。使用dp[i] 来表示凑到数额为 i 所需要的最少的硬币数。同这道题非常像的还有。

2025-11-21 17:22:59 197

原创 --- spring ai 使模型交流变得简单 ----

在父工程中加入依赖 这个依赖包括了所有spring ai所需要的所有依赖的推荐版本,bom通过对依赖的集中管理来解决依赖冲突的问题 于是在之后引入这里面的依赖时就不需要写版本好了 他会给处理的。Spring AI框架通过统一的抽象层解决了这一问题,它整合了各类模型的API,让开发者能通过单一、一致的接口与不同模型交互。这里我使用的时deepseek的api,而deepseek的api是兼容openai的,那么引入opneai接口依赖就行,在子项目中引入依赖。defaultSystem 系统提示词。

2025-11-17 20:59:59 337

原创 --- 多源bfs算法 01矩阵---

题目要求是返回所有为1的位置于他最近的0的距离,那么就而数组中可能有多个1如果是一个一个的单源bfs,那时间复杂度就很恐怖了,所以可以使用多元bifs, 把所有的为1的位置给放到队列中,让后对他们统一出队列进行bfs搜索,可是这样就有了一个新的问题,再我从1开始进行搜索时,如果下一个为1,那么我当前1的最短距离应该取决于这个1的最短距离,而我并不能知道他的最短距离,所以储存1的位置行不通。飞地的数量 地图中的最高点 地图分析。经典多元bfs 01矩阵。

2025-11-14 12:36:32 303

原创 --- git 笔记 ---

PS C:\Users\15328\OneDrive\桌面\files\gitee\gitlearn> git pull origin master。git remote add <name> <url> 给远程仓库起的名字和仓库的url 这个名字在你本地就代表的远程仓库。git config [--global] alias.st status 之后git st == git status。git中删除文件 如果是直接delete删除文件,git还是会跟踪这个文件 他会一位是误删了。

2025-11-12 13:35:50 364

原创 --- Http和Https协议 ---

在客户端和服务其中分别存在公钥和私钥俩对密钥,公钥是公开的,私钥是自己保存的不会流出的,在客户端在向服务器发起请求使用服务器公开的公钥来对请求数据进行加密,并且把自己的公钥也发送给他,在服务器收到请求之后,找到和这把公钥匹配的私钥,使用这个私钥来对数据进行解密,之后对服务器发送的响应,使用客户端的公钥来对数据进行加密,然后客户端使用对应的私钥来对数据进行解密,这样即使公钥被截取了,因为不知道私钥则仍然不能对数据解密。

2025-11-04 11:34:32 676

原创 --- 单源BFS权值为一算法 迷宫中离入口最近的出口 ---

将固定源储存在一个队列中,以这个点为原点开始向四周遍历,记为第一层,四周遍历的点又储存在队列中,记为第二层的节点,当吧第一层的所有节点出完,点第二层的节点也遍历完了,这时队列中的全是第二层的节点了,这就完成了一层的bfs,重复这个过程,直到队列为空,那么就完成了层序遍历。单源bfs,从一个固定的点开始向外遍历找到一个离自己最近的点,而当他向外遍历时,第一次碰到了满足要求的点,那么这时这一条路就是最近的,对应到这道题就是从entrance遍历到边界的最近的出口,而为什么第一次bfs到他就是最近的?

2025-10-29 20:20:56 211

原创 --- 记忆化搜索 矩阵中的最长递增路径 ---

当然就这样肯定是过不了的,毕竟是diff的题,这样时间复杂度太恐怖了,而我们的优化就是使用记忆化搜索,我们发现在寻找4这个位置的最长递归路径时,他需要递归到左边的9取找到9的最长路径,而这个9的最长路径其实是在4遍历之前就已经找到过了,那么我就可以把他储存起来直接使用了,对于重复问题的解决就可以使用记忆化搜索。他的题意是在这个数组中有个点,他有一条最长的递增路径,而我们要放回他的路径的长度。这道题就可以完全可以先按照我之前整理的那么递归遍历的模板,能够完美的适配 秒咯。

2025-10-21 15:17:38 225

原创 --- 数据结构 AVL树 ---

使用替换删除法,对于到删除的节点使用他的左子树的最右节点来替换这个节点来达到删除的目的,因为左子树的最有节点满足小于左子树的所有节点,大于右子树的所有节点,那么使用他来进行替换删除是满足二叉搜索树的定义的没有问题的,当然使用右子树的最左节点也是可以成功的。而对于断支的拼接,右单旋是高层节点下降到右节点,他的左节点就释放了出来,而底层结点的右节点因为需要拼接到高层节所以被断开,而他断开的值,满足大于底层节点,而小于高层节点,那么正好可以拼接到高层节点的左节点去,很妙的。左单旋 插入的位置是较高的右子树右支。

2025-10-20 10:48:19 551

原创 浏览器 错误代码:STATUS ACCESS_VIOLATION 解决

关闭这三项。

2025-10-15 19:21:52 827

原创 --- 前后端的文件交互 ---

将图片编码成base64字符串发送给后端,经过后端解码来储存。发送的文件,并通过ajax来向后端发送请求。后端从form表单中读取到文件数据。使用formData 表单来储存。使用base64编码来传递图片。后端对base64文件解码。

2025-10-09 19:28:10 308

原创 衣橱整理 剑指 Offer 13. 机器人的运动范围

可以看出,需要遍历完一次这个数组,然后判断哪些地方需要(x y位数之和少于给的值cnt),哪些地方不需要,然后返回需要的地方的个数,而遍历这个数组就可以使用深度遍历 dfs 或者宽度遍历bfs,让后对于已经遍历过的地方标记上防止重复遍,于是这题就解决了。这类需要判断是否走过,用来判处重复结果和防止死递归,然后上下左右遍历,使用俩个数组dy dx来表示向上下左右递归,并且判断上下左右是否越界是否已经走过,然后这时就需要根据题来判断上下左右的结果是否适合递归,之后再递归结束,放回值就完事。

2025-10-05 21:57:37 243

原创 --- 常见排序算法汇总 ---

在这个汇总中整理了 插入,希尔,选择,快排,堆排,冒泡,归并还有非比较排序 计数,基数排序算法的稳定性:再对相同值的元素排序之后,如果元素之间的顺序并没有发生变化,则是稳定的对一个数组向前表示下标减减 向后加加。

2025-10-03 15:19:12 1086 2

原创 不同路劲 III dfs解决

向遍历一遍数组grid,得到0的个数和起始位置,然后可以使用dfs从起始位置深度遍历所有可能的路径,遇到-1不能走,碰到2的话要判断当前是否算是合理的路径切需要判断0的所有位置是否是走完了,所以需要记录下走过的0的位置,而且不能走已经走过的,那么就还需要一个数组来记录走过的位置,dfs是上下左右递归,可以使用俩个数组dx,dy来表示向上下左右的递归,这样就可以知道了递归的参数了,x,y,count 代表了当前的位置,count表示的是遍历的0的个数。

2025-09-24 20:51:35 124

原创 --- 静态资源映射 ---

在通过前端请求静态资源的时候,可以通过设置规则来使得url映射到本地的物理储存位置,这样就可以获取到这个资源了。这样url是 /lottery-picture/** 的就代表的是 本地的 localPath/** 的资源了。

2025-09-23 16:51:42 194

原创 --- reids命令汇总 ---

keys pattern 放回满足条件的patternpattern支持统配格式?匹配一个字符 * 匹配任意数量的字符 [ae]匹配a或者e字符[^e] 匹配一个非e的字符 [a-c] 匹配a-c的字符abc返回存在的key的数目放回删除key的数目expire为key添加秒级的过期时间ttl key获取key的过期时间type key获取key的类型。

2025-09-20 17:32:09 748

原创 --- 统一请求入口 Gateway ---

对于微服务的每个接口,我们都需要校验请求的权限是否足够,而微服务把项目细化除了许多个接口,若这些接口都要对服务进行权限校验的话,那么无疑加重的代码负担和运行熟读,而如果我使用一个统一的服务来对所有的请求进行权限校验并将请求转发到对应的服务,而服务的接口不对外暴露,那么就可以确保服务收到的请求是服务之间调用的,而不是用户发起的请求调用的,而这个服务就是我们的网关,他是服务的守门神。redis-rate-limiter.burstCapacity 每秒钟能允许的最大的令牌数,令牌桶的最大容量。

2025-09-14 09:34:54 997

原创 --- 使用OpenFeign来优雅的对服务进行调用 ---

240e:398:5dab:d050:562c:179f:4f04:efaa]:8081 这一段是消费者从nacos中获取到的value对应的消费者的ip地址和端口号。将接口写好之后,点maven工具中的install将这个项目作为jar包储存到本地maven仓库中,出现success就成功了,success上的时这个jar包的位置。完整 URL: http://[240e:398:5dab:d050:562c:179f:4f04:efaa]:8081/product/o4?

2025-08-22 14:54:44 902

原创 --- 哈希表和哈希冲突 ---

实现:在哈希表中储存的是一个链表,当冲突的元素就直接储存再这个链表中,再查找时就先通过哈希函数找到这个链表,再遍历这个链表来获取到元素,因为冲突的次数一般都是常熟级的,所以遍历这个链表的时间也可以近似忽略,所以搜索还是O(1) 的复杂度。再删除元素的时候,采用的是标志位的伪删除法,因为使用线性探测法,一个哈希地址对应的有可能是多个元素,而这其他的元素,要基于这个哈希地址来往后查找,如果这个位置被删除了,那么就表示这里就没有元素,而和他冲突的元素也就不存在了。

2025-08-18 17:13:54 433

原创 --- mybatis动态sql---

在mybatis早期时间(1.x/2.x)是使用xml格式来编写动态sql,现在3.x的版本还可以使用,把sql语句写在单独的java类中,通过注解来引用sql。where标签对where标签中的语句进行校准,会自动去除and前后缀的问题,且如果判断语句为空的话,他就不会添加上where语句。对于经常使用的字段可以提取出来写在sql中,通过<include> 和 对应id来添加到语句中。直接进行if标签的拼接,有可能会碰到逗号的前后缀问题,可以使用trim来解决前后缀。open:字符串开头拼接上的字符串。

2025-08-14 16:48:31 406

原创 --- 堆和优先级队列区别 ---

将堆顶元素和最后一个元素交换,记录堆元素个数变量 heapSize--,从堆顶start开始向下调整(shift down),如果start值大于子节点左右都可以,就将他们俩个交换,start走到对应的子节点位置,继续向下调整,直到子节点都大于父节点,或者子节点下标越界了(走到了最后一层)先将元素插入到数组的最后,从最后位置 end 开始向上调整(shift up),如果父节点大于end的值,那么就将他们交换,并且end走到父节点下标,一直重复这个过程,直到父节点小于end的值或者end走到了根节点。

2025-08-12 12:32:21 313

原创 --- nacos注册中心 ---

创建一个RestTemplate bean用来发起http请求,在不加上LoadBalanced注解的话,他可以发起正常的ip请求比如http://127.0.0.1这样的,加上了,他就会根据服务名字来从nacos中获取到对应的服务信息,再来调用对应的接口http://hadage/self1。服务在启动时,会先从nacos配置中心中读取配置,在合并到配置文件中,nacos规定了,在boostrap.yml 或boostrap.properties中读取nacos配置中心相关配置。

2025-08-11 16:51:14 871

原创 --- Eureka 服务注册发现 ---

fetch-registry: false #表⽰是否从Eureka Server获取注册信息,默认为true.因为这是⼀个单点的Eureka Server,不需要同步其他的Eureka Server节点的数据,这⾥设置为false。register-with-eureka: false #表⽰是否将⾃⼰注册到Eureka Server,默认为true.由于当前应⽤就是Eureka Server,故⽽设置为false.#设置与Eureka Server的地址, 查询服务和注册服务都需要依赖这个地址。

2025-08-07 16:53:04 420

原创 --- 服务注册和发现 ---

在微服务中想要调用其他的服务方法,需要使用这个方法写死的url来调用,比如http://localhost:8081/product/productId 这样,在使用的微服务少的情况下还是能用,但是每次都需要记住每个服务对应的url,还是太过麻烦了,那么于是就想了下,能不能创建一个独立的服务,让每个微服务在启动之后在他那里登记,然后当微服务需要调用到其他服务时,又从他那里获取到,这不就能解决问题了,这就是注册中心。AP架构:优先服务的响应而放回的是V0的数据,即使不是准确的数据。服务中心主要有俩种行为。

2025-08-07 15:48:15 151

原创 org.springframework.web.multipart.MaxUploadSizeExceededException: Maximum upload size exceeded 的解决方式

max-swallow-size: 100MB 我的spring boot版本是3.4.5 可以看到并不能解决问题。于是又找到了另一种可以成功修改的方法。我根据网上和ai说的修改这个配置。

2025-07-29 09:05:17 258

原创 --- redis数据结构和内部编码 ---

使用对应的指令就和以储存不同结构的数据,单这些数据在真正储存到redis中时,redis会根据这些数据的实际情况来进行不同的优化,所以我数据加入到redis时的内部结构和在redis实际储存时的内部编码会有一些差别。redis对外提供了5中数据结构 string字符串 list链表 hash哈希 set集合 zset有序集合。内部编码是redis自己底层实现的数据结构。

2025-07-17 10:58:24 190

原创 --- bean 的六种作用域 ---

在注入bean的时候需不需要创建一个新的bean,spring提供了6种模式来适配不同的环境下这个bean作用域。

2025-07-16 20:41:48 201

原创 --- Bean 的生命周期 ---

在图中可以知道,并没有方法所在的区块,这不是我故意没画出来,在实例化类的时候,他并不会把方法也复制一份给对象,而实际能运行的方法是储存在类信息块中的,调用方法是通过调用klass pointer来在类信息中找到对应的方法并执行。在jvm堆内存中为这个bean分配空间, 这时这个对象就有了物理空间,具体这个对象在内存上的储存可以这样理解。在对象头中储存了一些对象的信息,比如锁 gc信息 哈希值 什么的,其中这里面又个很重要的是。将这个bean对象注入到代码中,这时在代码中应用bean的字段就不会为空了。

2025-07-16 20:31:47 287

空空如也

空空如也

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

TA关注的人

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